Files
intellecton/venv/lib/python3.12/site-packages/packaging/__pycache__/specifiers.cpython-312.pyc
T

702 lines
74 KiB
Plaintext
Raw Normal View History

Ë
jZãó¸UdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl m
Z
m Z m Z m
Z
mZmZmZmZmZddlmZddlmZmZej0dk\rdd l mZne
rdd lmZgd
¢Zd:d Zd;d Zd<d
Zed«Zeee fZ!ede!¬«Z"e ee ge#fZ$ed«Z%de&d<d=dZ'GddejP«Z)ejTGdd««Z+ejTGdd««Z,ejTGdd««Z-e jreee+dfZ.e/e,e-fZ0e,dd«Z1e-dd«Z2e1e2ffZ3de&d<d>d „Z4 d?d!„Z5d@d"„Z6d@d#„Z7dAd$„Z8d@d%„Z9d@d&„Z:d@d'„Z; dBd(„Z<Gd)„d*e=«Z>Gd+„d,ej~¬-«Z@Gd.„d/e@«ZAej„d0«ZC dCd1„ZDdDd2„ZEdEd3„ZFdFd4„ZGdGd5„ZHdHd6„ZIdId7„ZJGd8„d9e@«ZKy)JzŠ
.. testsetup::
from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
from packaging.version import Version
é)Ú annotationsN) Ú
TYPE_CHECKINGÚAnyÚCallableÚFinalÚIterableÚIteratorÚSequenceÚTypeVarÚUnioné)Úcanonicalize_version)ÚInvalidVersionÚVersion)éé
)Ú TypeGuard)Ú
BaseSpecifierÚInvalidSpecifierÚ SpecifierÚ SpecifierSetcótS©N)Ú__all__©óúW/home/antigravity/intellecton/venv/lib/python3.12/site-packages/packaging/specifiers.pyÚ__dir__r0sÜ €Nrcó–t|t«xr8t|«dk(xr(t|dt«xrt|dt«S)rr
)Ú
isinstanceÚtupleÚlenÚstr)Úspecs rÚ_validate_specr&4sIäÓò ‹I˜‰Nò t˜A‘w¤Ó 
t˜AÓ rcó.|duxst|t«Sr)r!Úbool)Úpres rÚ
_validate_prer*=sØ $ˆ /œ* S¬$Ó/rÚUnparsedVersionVar)Úboundz0.dev0zFinal[Version]Ú _MIN_VERSIONcóŽt|«}|dkDr!||dz
dk(r|dz}|dkDr ||dz
dk(rŒ|t|«k(r|S|d|S)zDStrip trailing zeros from a release tuple for normalized comparison.r
rN)r#)ÚreleaseÚends rÚ
_trim_releaser2Js`ä
ˆg,€CØ
Š'g˜c A™gÑ&¨!Ò ˆq‰ˆð Š'g˜c A™gÑ&¨!ÓœS )ˆ<¨w°t¸¨}Ð<rcóTeZdZdZej
«Zej
«Zy)Ú
_BoundaryKindz5Where a boundary marker sits in the version ordering.N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚenumÚautoÚ AFTER_LOCALSÚ AFTER_POSTSrrrr4r4RsÙ4—99“;€LØ$—))“+Krr4cóDeZdZdZdZd
dZd dZd dZd
dZddZ ddZ
y )Ú_BoundaryVersiona
A point on the version line between two real PEP 440 versions.
Some specifier semantics imply boundaries between real versions:
``<=1.0`` includes ``1.0+local`` and ``>1.0`` excludes
``1.0.post0``. No real :class:`Version` falls on those boundaries,
so this class creates values that sort between the real versions
on either side.
Two kinds exist, shown relative to a base version V::
V < V+local < AFTER_LOCALS(V) < V.post0 < AFTER_POSTS(V)
``AFTER_LOCALS`` sits after V and every V+local, but before
V.post0. Upper bound of ``<=V``, ``==V``, ``!=V``.
``AFTER_POSTS`` sits after every V.postN, but before the next
release segment. Lower bound of ``>V`` (final or pre-release V)
to exclude post-releases per PEP 440.
)Ú_kindÚ_trimmed_releaseÚversioncóT||_||_t|j«|_yr)rAr?r2r0r@)ÚselfrAÚkinds rÚ__init__z_BoundaryVersion.__init__qs!؈Œ ؈Œ
Ü -¨g¯o©oÓ >ˆÕrcó¸|j}|j|jk(r;t|j«|jk(r|j
|j
k(sy|j tjk(r4|j|jk(xr|j|jk(S|j|jk(xs|jduS)z6Is ``other`` a version that this boundary sorts above?FN) rAÚepochr2r0r@r)r?r4r;ÚpostÚdev)rCÚotherÚvs rÚ
_is_familyz_BoundaryVersion._is_familyvsà L‰Lˆà K‰K˜1Ÿ7™7Ò ˜eŸm™mÓ×0EÑ0EÒ ˜QŸU™UÒØ :‰:œ× —:: §¡Ñ>¨E¯I©I¸¿¹Ñ,>Ð y‰y˜AŸE™EÑ; U§Z¡Z°tÐ%;Ð;rcó–t|t«r4|j|jk(xr|j|jk(StSr)r!r>rAr?ÚNotImplemented©rCrJs rÚ__eq__z_BoundaryVersion.__eq__…s8Ü  —<< 5§=¡=ÑN°T·Z±ZÀ5Ç;Á;Ñ5NÐ Ðrcó&t|t«r_|j|jk7r|j|jkS|jj|jjkS|j |« xr|j|kSr)r!r>rAr?ÚvaluerLrOs rÚ__lt__z_BoundaryVersion.__lt__ŠsoÜ  |‰|˜uŸ}™}Ò—|‘| e§m¡mÑ—::×# e§k¡k×&7Ñ&7Ñ —?? B¨d¯l©l¸UÑ.BÐBrcóDt|j|jf«Sr)ÚhashrAr?©rCs rÚ__hash__z_BoundaryVersion.__hash__sÜT—\\ 4§:¡:Ð/rcó||jjd|jd|jjdS)(z, ú))Ú __class__r5rAr?ÚnamerVs rÚ__repr__z_BoundaryVersion.__repr__”s4Ø—..×*¨!¨D¯L©LÐ+;¸2¸d¿j¹j¿o¹oÐ=NÈaÐPrN)rArrDr4ÚreturnÚNone)rJrr^r(©rJÚobjectr^r()rJz_BoundaryVersion | Versionr^r(©r^Úint©r^r$) r5r6r7r8Ú __slots__rErLrPrSrWr]rrrr>r>Ys.ñð(9€Ió
ó
CóQrr>có<eZdZdZdZd dZd
dZd dZd dZd
dZ y)Ú _LowerBoundzÂLower bound of a version range.
A version *v* of ``None`` means unbounded below (-inf).
At equal versions, ``[v`` sorts before ``(v`` because an inclusive
bound starts earlier.
©Ú inclusiverAcó ||_||_yr©rAri©rCrAris rrEz_LowerBound.__init__£ó؈Œ Ø"ˆrcó–t|t«stS|j|jk(xr|j|jk(Sr©r!rgrNrArirOs rrPz_LowerBound.__eq__§ó7Ü˜Ô |‰|˜uŸ}™}Ñ·±À5Ç?Á?Ñ1RÐRrcót|t«stS|j|jduS|jy|j|jk7r|j|jkS|jxr
|j S)NFrorOs rrSz_LowerBound.__lt__¬sqÜ˜Ô <‰<Ð Ø—=Ð =‰=Ð ØØ <‰<˜5Ÿ=™=Ò —<< %§-¡-Ñ ~‰~Ò5 e§o¡oÐ"5Ð5rcóDt|j|jf«Sr©rUrArirVs rrWz_LowerBound.__hash__¹óÜT—\\ 4§>¡>Ð3rcót|jrdnd}d|jjd||jdS)[rYú úrir[r5rA©rCÚbrackets rr]z_LowerBound.__repr__¼s8ØŸš#¨SˆØ4—>>×+¨1¨W¨I°d·l±lÐ5EÀQÐGrrAÚ_VersionOrBoundaryrir(r^r_r`)rJrgr^r(rbrd©
r5r6r7r8rerErPrSrWr]rrrrgrg˜ó)ñð)€IóSó
Hrrgcó<eZdZdZdZd dZd
dZd dZd dZd
dZ y)Ú _UpperBoundzÀUpper bound of a version range.
A version *v* of ``None`` means unbounded above (+inf).
At equal versions, ``v)`` sorts before ``v]`` because an exclusive
bound ends earlier.
rhcó ||_||_yrrkrls rrEz_UpperBound.__init__Ìrmrcó–t|t«stS|j|jk(xr|j|jk(Sr©r!rrNrArirOs rrPz_UpperBound.__eq__Ðrprcóüt|t«stS|jy|jy|j|jk7r|j|jkS|j xr |jS©NFTr…rOs rrSz_UpperBound.__lt__ÕseÜ˜Ô <‰<Ð ØØ =‰=Ð ØØ <‰<˜5Ÿ=™=Ò —<< %§-¡-Ñ —>5 e§o¡oÐ5rcóDt|j|jf«SrrsrVs rrWz_UpperBound.__hash__ârtrcót|jrdnd}d|jjd|j|dS)]rZrwrxryrzr{s rr]z_UpperBound.__repr__ås8ØŸš#¨SˆØ4—>>×+¨1¨T¯\©\Ð,<¸W¸IÀQÐGrNr}r`)rJrr^r(rbrdrrrrrrÁr€rrFztuple[_VersionRange]Ú _FULL_RANGEcóÎ|j |jy|j|jk(r|jxr |j S|j|jkDS)zHTrue when the range defined by *lower* and *upper* contains no versions.Frk)ÚlowerÚuppers rÚ_range_is_emptyrösQà ‡} §
¡
Ð 5ØØ ‡}}˜Ÿ
Ò—O‘OÒ¯©Ð =‰=˜5Ÿ=™=Ñ (rcó2g}dx}}|t|«kr|t|«krt||\}}||\}}t||«} t||«}
t| |
«s|j | |
f«||kr|dz
}n|dz
}|t|«kr|t|«krŒt|S)zFIntersect two sorted, non-overlapping range lists (two-pointer merge).rr
)r#ÚmaxÚminrÚappend) ÚleftÚrightÚresultÚ
left_indexÚ right_indexÚ
left_lowerÚ
left_upperÚ right_lowerÚ right_upperrs rÚ_intersect_rangesrÿð
#%€FØ Ð €JØ
”s˜4“yÒ
 [´3°u³:Ò%=Ø!% jÑ!1ш
JØ#(¨Ñ#5Ñ ˆ  ÓÜ Óä˜u eÔ M‰M˜5 %˜.Ô  ˜ Ò ˜!‰O‰Jà ˜1Ñ ˆKð ”s˜4“yÒ
 [´3°u³:Ó%=ð €MrcóŽg|jdd¢|jddz­}tj|j|d¬«S)z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Néÿÿÿÿr
r©rGr0rI)r0rÚ
from_partsrG)rAr0s rÚ_next_prefix_dev0r¢sCà>  Ð> g§o¡o°bÑ&9¸AÑ&=Ñ>€GÜ × Ñ  G§M¡M¸Ô JrcóZtj|j|jd¬«S)z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.rr )rrGr0©rAs rÚ
_base_dev0r¥s ä × Ñ  G§M¡M¸7¿?¹?ÐPQÔ Rrcó`t|t«s t|«}|S|S#t$rYywxYwr)r!rrs rÚ_coerce_versionr§$s:Ü gœwÔ  ܘ&ˆ €Nˆ7€Nøôò Ùð ús !¡ -¬-cóB|j|S|jd¬«S)N)Úlocal)Ú __replace__r¤s rÚ_public_versionr«-s%؇}ØˆØ × Ñ  TÐ Ó *rcó*|jddd¬«S)zyThe version that *version* is a post-release of.
1.0.post1 -> 1.0, 1.0a1.post0 -> 1.0a1, 1.0.post0.dev1 -> 1.0.
rHrI©s rÚ
_post_baser¯3sð
× Ñ  D¨d¸$Ð Ó ?rcó(|jdd¬«S)zZEarliest pre-release of *version*.
1.2 -> 1.2.dev0, 1.2.post1 -> 1.2.post1.dev0.
rrIs rÚ_earliest_prereleaser²;sð
× Ñ  1¨DÐ Ó 1rcó$|yt|t«r\|j}|jr|j ddd¬«S|j
|j
dznd}|j |d¬«S|js|S|j ddd¬«S)z:Smallest non-pre-release version at or above *v*, or None.N)r)rIr
r)rH)r!r>rAÚ
is_prereleaserªrH)rKÚinnerÚks rÚ_nearest_non_prereleaser·Csð €yØÜ— ‘ ˆØ × Ò à×°4¸ !&§
¡
Ð 6ˆUZ‰Z˜!Š^¸AˆØ× Ñ  a¨tÐ Ó ?Š?؈à =‰=˜T t°4ˆ 8rcóeZdZdZy)ra
Raised when attempting to create a :class:`Specifier` with a specifier
string that is invalid.
>>> Specifier("lolwat")
Traceback (most recent call last):
...
packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
N)r5r6r7r8rrrrrXsòrrcóÄeZdZdZdZedd«Zejdd«Z ejdd«Z
ejdd«Z eejdd««Z e jdd«Z ejddd
«Zej d dd «Zej d dd «Zej d dd
«Zy )rr)Ú_strcót|«S)z Internal property for match_args©r$rVs rzBaseSpecifier._strhsô4rcóy)
Returns the str representation of this Specifier-like object. This
should be representative of the Specifier itself.
NrrVs rÚ__str__zBaseSpecifier.__str__mórcóy)zF
Returns a hash value for this Specifier-like object.
NrrVs rrWzBaseSpecifier.__hash__tr¿rcóy)
Returns a boolean representing whether or not the two Specifier-like
objects are equal.
:param other: The other object to check against.
NrrOs rrPzBaseSpecifier.__eq__zr¿rcóy)zîWhether or not pre-releases as a whole are allowed.
This can be set to either ``True`` or ``False`` to explicitly enable or disable
prereleases or it can be set to ``None`` (the default) to use default semantics.
NrrVs rÚ prereleaseszBaseSpecifier.prereleasesƒr¿rcóy)zQSetter for :attr:`prereleases`.
:param value: The value to set.
Nr©rCrRs rzBaseSpecifier.prereleasesŒr¿rNcóy)zR
Determines if the given item is contained within this specifier.
Nr©rCÚitemrÃs rÚcontainszBaseSpecifier.contains“r¿rcóyrr©rCÚiterablerÃÚkeys rÚfilterzBaseSpecifier.filter™óð (+rcóyrrs rzBaseSpecifier.filter¡óð rcóy)z•
Takes an iterable of items and filters them so that only items which
are contained within this specifier are allowed in it.
Nrs rzBaseSpecifier.filter©r¿rrdrbr`©r^ú bool | None)rRr(r^r_r)r$r^r(©N.©zIterable[UnparsedVersionVar]rÃr_r^zIterator[UnparsedVersionVar]©z Iterable[T]rÃzCallable[[T], UnparsedVersion]r^z Iterator[T]©NN©ú
Iterable[Any]rÃú'Callable[[Any], UnparsedVersion] | Noner^ú
Iterator[Any])r5r6r7reÚ__match_args__ÚpropertyrºÚabcÚabstractmethodr¾rWrPÚsetterrÉÚtypingÚoverloadrÎrrrrrdsØ€IØ€Nà
òóðð ×Ñò óð ð  ×Ñò óð ð
 ×Ñò óð ðØ×Ñò óóð ð×Ñò óð ð  ×Ñó óð ð
 ‡_$(Øð ð 
ð ‡_$(Ø.1ð àðððð
ò óðð ×Ñð$(Ø7;ð  àð  ð  ð ð
ò  óñ  rr)Ú metaclassc ó\eZdZUdZdZdZejdezdzejejz«Z
ddddd d
d d d
œZ de d<d1d2dZ
d3dZd4dZd5dZd6dZd6dZed7d«Zej*d8d«Zd9dZd:dZed;d«Zed;d«Zd;dZd;dZed<d«Zd=d „Zd>d!„Zd?d"„Zd@d#„Z dAd$„Z!d@d%„Z"d@d&„Z#d@d'„Z$d@d(„Z%dBd)„Z&dBd*„Z'dCd+„Z(dDd,„Z)dEdFd-„Z*e+jX dG dHd.„«Z-e+jX dG dId/„«Z- dJ dKd0„Z-y)LrThis class abstracts handling of version specifiers.
.. tip::
It is generally not required to instantiate this manually. You should instead
prefer to work with :class:`SpecifierSet` instead, which can parse
comma-separated version specifiers (which is what package metadata contains).
Instances are safe to serialize with :mod:`pickle`. They use a stable
format so the same pickle can be loaded in future packaging releases.
.. versionchanged:: 26.2
Added a stable pickle format. Pickles created with packaging 26.2+ can
be unpickled with future releases. Backward compatibility with pickles
from packaging < 26.2 is supported but may be removed in a future
release.
)Ú _prereleasesÚ_rangesÚ_specÚ
_spec_versionÚ_wildcard_splita 
(?:
(?:
# The identity operators allow for an escape hatch that will
# do an exact string match of the version you wish to install.
# This will not be parsed by PEP 440 and we cannot determine
# any semantic meaning from it. This operator is discouraged
# but included entirely as an escape hatch.
=== # Only match for the identity operator
\s*
[^\s;)]* # The arbitrary version can be just about anything,
# we match everything except for whitespace, a
# semi-colon for marker support, and a closing paren
# since versions can be enclosed in them.
)
|
(?:
# The (non)equality operators allow for wild card and local
# versions to be specified so we have to define these two
# operators separately to enable that.
(?:==|!=) # Only match for equals and not equals
\s*
v?
(?:[0-9]+!)? # epoch
[0-9]+(?:\.[0-9]+)* # release
# You cannot use a wild card and a pre-release, post-release, a dev or
# local version together so group them with a | and make them optional.
(?:
\.\* # Wild card syntax of .*
|
(?a: # pre release
[-_\.]?
(alpha|beta|preview|pre|a|b|c|rc)
[-_\.]?
[0-9]*
)?
(?a: # post release
(?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
)?
(?a:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
(?a:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
)?
)
|
(?:
# The compatible operator requires at least two digits in the
# release segment.
(?:~=) # Only match for the compatible operator
\s*
v?
(?:[0-9]+!)? # epoch
[0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *)
(?: # pre release
[-_\.]?
(alpha|beta|preview|pre|a|b|c|rc)
[-_\.]?
[0-9]*
)?
(?: # post release
(?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
)?
(?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
)
|
(?:
# All other operators only allow a sub set of what the
# (non)equality operators do. Specifically they do not allow
# local versions to be specified nor do they allow the prefix
# matching wild cards.
(?:<=|>=|<|>)
\s*
v?
(?:[0-9]+!)? # epoch
[0-9]+(?:\.[0-9]+)* # release
(?a: # pre release
[-_\.]?
(alpha|beta|preview|pre|a|b|c|rc)
[-_\.]?
[0-9]*
)?
(?a: # post release
(?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
)?
(?a:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
)
)
z\s*Ú
compatibleÚequalÚ not_equalÚless_than_equalÚgreater_than_equalÚ less_thanÚ greater_thanÚ arbitrary)ú~=ú==ú!=ú<=ú>=rwryú===rÚ
_operatorsNcó˜|jj|«std|«|j«}|j d«r|dd|ddj«}}nB|j d«r|dd|ddj«}}n|dd|ddj«}}||f|_||_d|_d|_d|_ y)Initialize a Specifier instance.
:param spec:
The string representation of a specifier which will be parsed and
normalized before use.
:param prereleases:
This tells the specifier if it should accept prerelease versions if
applicable or not. The default of ``None`` will autodetect it from the
given specifiers.
:raises InvalidSpecifier:
If the given specifier is invalid (i.e. bad syntax).
zInvalid specifier: røNr)r r
)
Ú_regexÚ fullmatchrÚstripÚ
startswithrè)rCr%ÚoperatorrAs rrEzSpecifier.__init__=ð{‰{×$ "Ð%8¸¸Ð#AÓ z‰z‹|ˆØ ?‰?˜ !Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:g‰HØ
_‰_Ð
<Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:g‰Hà $ R a ¨$¨q¨r¨(¯.©.Ó*:gˆHà'/°Ð&9ˆŒ
ðÔð:>ˆÔð>BˆÔð8<ˆ rcóŽ|j!|jd|k(r|jdSt|«}|y||f|_|S)zDOne element cache, as only one spec Version is needed per Specifier.Nrr
))rCrAÚversion_specifiers rÚ_get_spec_versionzSpecifier._get_spec_versioncsYà × Ñ Ð )¨d×.@Ñ.@ÀÑ.CÀwÒ.NØ×% aÑ +¨GÓØ Ð à%Ð'8Ð9ˆÔØ Ð rcó0|j|«}|J|S)zÕGet spec version, asserting it's valid (not for === operator).
This method should only be called for operators where version
strings are guaranteed to be valid PEP 440 versions (not ===).
)r)rCrAÚ spec_versions rÚ_require_spec_versionzSpecifier._require_spec_versionos&ð ×-¨gÓ6ˆ ØÐÐrcó |j |jS|j}|j}|dk(rt|_tS|j d«r|j ||«}n|j
||«}||_|S)zØConvert this specifier to sorted, non-overlapping version ranges.
Each standard operator maps to one or two ranges. ``===`` is
modeled as full range (actual check done separately). Cached.
ú.*)rÿrArÚendswithÚ_wildcard_rangesÚ_standard_ranges)rCÚopÚver_strrs rÚ
_to_rangeszSpecifier._to_rangesys|ð <‰<Ð —< à
]‰]ˆØ—,,ˆà
Š;Ü&ˆDŒLÜÐ à × Ñ ˜DÔ ×*¨2¨wÓ7‰Fà×*¨2¨wÓ7ˆFàˆŒ ؈
rcóÚ|j|dd«}t|«}t|«}|dk(rt|d«t |d«fgSt
t |d«ft|d«t fgS)NéþÿÿÿrôTF)rrgrÚ_NEG_INFÚ_POS_INF)rCr r Úbasers rr zSpecifier._wildcard_rangessyà×)¨'°#°2¨,Ó7ˆÜ˜ ˆÜ! $Ó'ˆØ
Š:Ü  ¨Ó-¬{¸5À%Ó/HÐ ”{ 5¨%Ó
˜ Ó
%¤xÐ 
ð
rcó|j|«}|dk(rt|d«tfgS|dk(r+tt t |t j«d«fgS|dk(rª|j3|j|jdzd¬«}t|d«tfgS|j4|j|jdzdd¬«}t|d«tfgStt |t j«d «tfgS|d
k(r?|jr|n|jdd¬«}|tkrgStt |d «fgSd |v}t |t j«}|r|n|}|d k(rt|d«t |d«fgS|d
k(r$tt |d «ft|d «tfgS|dk(rA|j|jdd¬«} t|d«t t| «d «fgSt!d|«)Nr÷Tröryr
rr­Frwú+rô)r0úUnknown operator: )rrgrrrr>r4r;rIrHr<r´r.r0Ú
ValueError)
rCr r rKÚ lower_verr-Ú has_localÚ after_localsrŽÚprefixs
rr
zSpecifier._standard_rangesžs+Ø × &  /ˆà
Š:Ü   DÓ)¬8Ð
Š:ôÜÔ 0°´M×4NÑ4NÓ OÐQUÓðð
ð Š9Øu‰uÐ ðŸM™M¨a¯e©e°a©i¸t˜MÓD Ü$ Y°Ó5´v‰vПM™M¨q¯v©v¸©z¸qȘMÓM Ü$ Y°Ó5´xÐ Ô 0°´M×4MÑ4MÓ NÐPUÓððð
ð Š9🚑A¨a¯m©mÀȨmÓ.NˆEØœ Ò Üœ{¨5°%Ó ˜7Nˆ ܬ=×+EÑ+EÓFˆ Ù Lˆà
Š:Ü   )¬;°u¸dÓ+CÐ
Š:äœ; q¨%Ó˜U EÓ*¬HÐð
ð
Š:Ø—]]¨1¯9©9°S°b¨>:ˆ˜Q Ó%¤{Ô3DÀVÓ3LÈeÓ'TÐð
ôÐ-¨b¨VÐ5rcóÊ|j |jS|j\}}|dk(ry|dk(r|jd«ry|j|«}|y|jS)NrõFrôr)rrr´)rCrÿÚ version_strrAs rzSpecifier.prereleasesÜsyð × Ñ Ð × !%§
¡
ш  Øð    × 4Ñ 4°TÔ :Øð×ÓØ ˆ?Øð×$rcó||_yr)s rzSpecifier.prereleasesøs
àÕrcó2|j|jfSr)rVs rÚ __getstate__zSpecifier.__getstate__üsð
˜D×.rcódd|_d|_d|_t|t«r¦t |«dk(r*|\}}t
|«rt|«r||_||_ yt |«dk(r`t|dt«rM|\}}|jd«}|jdd«}t
|«rt|«r||_||_ yt|t«rH|jd«}|jdd«}t
|«rt|«r||_||_ ytd|«)Nr r
ÚinvalidzCannot restore Specifier from )
r!r"r#r&r*ÚdictÚgetÚ TypeError)rCÚstater%Ú_Ú slot_dicts rÚ __setstate__zSpecifier.__setstate__sàÔØÔØˆŒ ä eœUÔ 5‹z˜QŠà$)Ñ!! '¬M¸+Ô,FØ!%D”JØ(3Ü5‹z˜QФ:¨e°A©h¼Ô#=à$‘  —}} -Ø'Ÿm™m¨N¸F Ü! '¬M¸+Ô,FØ!%D”JØ(3Ü eœTÔ —99˜%ˆŸ)™) N°IÓ>ˆ˜
°kÔ(BØ!
Ø$/Ôäи ÐCrcó |jdS)z`The operator of this specifier.
>>> Specifier("==1.2.3").operator
'=='
r©rVs rrÿzSpecifier.operator$óðz‰z˜!‰}Ðrcó |jdS)zaThe version of this specifier.
>>> Specifier("==1.2.3").version
'1.2.3'
r
r*rVs rrAzSpecifier.version-r+rcóŒ|jd|jnd}d|jjdt |«|dS)aTA representation of the Specifier that shows all internal state.
>>> Specifier('>=1.0.0')
<Specifier('>=1.0.0')>
>>> Specifier('>=1.0.0', prereleases=False)
<Specifier('>=1.0.0', prereleases=False)>
>>> Specifier('>=1.0.0', prereleases=True)
<Specifier('>=1.0.0', prereleases=True)>
ú, prereleases=ÚrwrYú)>©r[r5r$©rCr)s rr]zSpecifier.__repr__6sUð× Ñ Ð˜T× ð ð 4—>>×+¨1¬S°«Y¨M¸#¸¸bÐArcó4dj|jŽS)zÐA string representation of the Specifier that can be round-tripped.
>>> str(Specifier('>=1.0.0'))
'>=1.0.0'
>>> str(Specifier('>=1.0.0', prereleases=False))
'>=1.0.0'
z{}{})ÚformatrèrVs rzSpecifier.__str__Hsðˆv}‰}˜dŸj™jÐ)rcóž|j\}}|dk(s|jd«r||fS|j|«}t||dk7¬«}||fS)Nrør©Ústrip_trailing_zero)rrr)rCrÿrArÚcanonical_versions rÚ_canonical_speczSpecifier._canonical_specRscà ŸJ™Jш   × 0Ñ 0°Ô 6ؘWÐ ×1°'Ó:ˆ ä ¨x¸4Ñ/?ô
ÐðÐ*rcó,t|j«Sr)rUr9rVs rrWzSpecifier.__hash__`sÜD×)rcóît|t«r |jt|««}nt||j«stS|j
|j
k(S#t$r tcYSwxYw)a>Whether or not the two Specifier-like objects are equal.
:param other: The other object to check against.
The value of :attr:`prereleases` is ignored.
>>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
True
>>> (Specifier("==1.2.3", prereleases=False) ==
... Specifier("==1.2.3", prereleases=True))
True
>>> Specifier("==1.2.3") == "==1.2.3"
True
>>> Specifier("==1.2.3") == Specifier("==1.2.4")
False
>>> Specifier("==1.2.3") == Specifier("~=1.2.3")
False
)r!r$r[rrNr9rOs rrPzSpecifier.__eq__csiô& eœSÔ 
Ÿ¤s¨5£zÓ2ô˜E 4§>¡>Ô ×# u×'<Ñ'<Ñ<øô 

&úsA"Á"A4Á3A4có>t|d|j|«}|S)NÚ _compare_)Úgetattrrù)rCr Úoperator_callables rÚ
_get_operatorzSpecifier._get_operator€s+Ü.5Ø I˜dŸo™o¨bÑ/
Ðð rc
óÈtttjtt |«««dd«}|dz
}|j
||«xr|j||«S)NrŸr)Ú
_version_joinÚlistÚ itertoolsÚ takewhileÚ_is_not_suffixÚ_version_splitÚ_compare_greater_than_equalÚ_compare_equal)rCÚ prospectiver%rs rÚ_compare_compatiblezSpecifier._compare_compatible†sdôÜ ×$¤^´^ÀDÓ5IÓ KÈCÈRÐ 
ˆð
$‰ˆà׸dÓ
Ø × Ñ   ¨VÓ 
rcó€|j}|€/t|ddd¬«}t|«}|t|«f}||_|S)zýCached split of a wildcard spec into components and numeric length.
>>> Specifier("==1.*")._get_wildcard_split("1.*")
(['0', '1'], 2)
>>> Specifier("==3.10.*")._get_wildcard_split("3.10.*")
(['0', '3', '10'], 3)
NrFr6)rrGÚ_numeric_prefix_len)rCr%Úwildcard_splitÚ
normalizedÚ
split_specs rÚ_get_wildcard_splitzSpecifier._get_wildcard_splitšsOðר Ð -¨d°3°B¨iÈUÔSˆ
Ó3ˆ(Ô*=¸jÓ*IÐJˆNØ#1ˆ ØÐrcó&|jd«rT|j|«\}}tt|«d¬«}t |«}t ||«}|dt
|«}||k(S|j|«} | js t|«}|| k(S)NrFr6) rrQrrGÚ _left_padr#r)
rCrJr%rPÚspec_numeric_lenÚnormalized_prospectiveÚsplit_prospectiveÚpadded_prospectiveÚshortened_prospectivers
rrIzSpecifier._compare_equalªà =‰=˜Ô Ø+/×+CÑ+CÀDÓ+IÑ (ˆ&:Ü  Ó,À%ô&Ð !/Ð/EÓ FÐ ô"+Ð+<Ð>NÓ!OÐ ð
%7Ð7H¼¸Ð$IÐ (¨JÑ  ×5°dÓ;ˆLð
 ×-¨kÓ: à  .rcó(|j||« Sr)rI©rCrJr%s rÚ_compare_not_equalzSpecifier._compare_not_equalÎsØ×& {°DÓ9rcó<t|«|j|«kSr©rrZs rÚ_compare_less_than_equalz"Specifier._compare_less_than_equalÑóô˜+¨t×/IÑ/IÈ$Ó/OÑOrcó<t|«|j|«k\Srr]rZs rrHz%Specifier._compare_greater_than_equal×r_rcó€|j|«}||ksy|js|jr|t|«k\ryyr‡)rr´©rCrJÚspec_strr%s rÚ_compare_less_thanzSpecifier._compare_less_thanÝsKð×)¨(Óð
˜ð
××Ô3°DÓð
rcó¶|j|«}||kDsy|js|jrt|«|k(ry|jt |«|k(ryyr‡)rÚis_postreleaser¯rbs rÚ_compare_greater_thanzSpecifier._compare_greater_thanösgð×)¨(Óð
˜ð
×ט;Ó'¨4Òð × Ñ Ð (¬_¸[Ó-IÈTÒ-QØð
rcóht|«j«t|«j«k(Sr©r$rrZs rÚ_compare_arbitraryzSpecifier._compare_arbitrarys&Ü×'¬3¨t«9¯?©?Ó+<Ñ<rcó$|j|«S)a:Return whether or not the item is contained in this specifier.
:param item: The item to check for.
This is used for the ``in`` operator and behaves the same as
:meth:`contains` with no ``prereleases`` argument passed.
>>> "1.2.3" in Specifier(">=1.2.3")
True
>>> Version("1.2.3") in Specifier(">=1.2.3")
True
>>> "1.0.0" in Specifier(">=1.2.3")
False
>>> "1.3.0a1" in Specifier(">=1.2.3")
True
>>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
True
©©rCs rÚ __contains__zSpecifier.__contains__óð&}‰}˜"rcóNtt|j|g|¬«««S)asReturn whether or not the item is contained in this specifier.
:param item:
The item to check for, which can be a version string or a
:class:`Version` instance.
:param prereleases:
Whether or not to match prereleases with this Specifier. If set to
``None`` (the default), it will follow the recommendation from
:pep:`440` and match prereleases, as there are no other versions.
>>> Specifier(">=1.2.3").contains("1.2.3")
True
>>> Specifier(">=1.2.3").contains(Version("1.2.3"))
True
>>> Specifier(">=1.2.3").contains("1.0.0")
False
>>> Specifier(">=1.2.3").contains("1.3.0a1")
True
>>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1")
False
>>> Specifier(">=1.2.3").contains("1.3.0a1")
True
©)r(rCs rzSpecifier.contains.s#ô2”D˜Ÿ d V¸˜ÓGrcóyrrs rzSpecifier.filterIrcóyrrs rzSpecifier.filterQrc#óZKg}d}||n |j}|j|j«}|D}t||n||««} d}
| €0|jdk(rj|j ||j
«rN|nI|jdk(r'|j ||n||«|j
«}
n|| |j
«}
|
sŒ˜| €Œ›| j r|rd}|Œ°|Œ³|jdusŒÂ|j|«ŒÔ|s||jdur |Ed{yyyy7Œ­w)a€Filter items in the given iterable, that match the specifier.
:param iterable:
An iterable that can contain version strings and :class:`Version` instances.
The items in the iterable will be filtered according to the specifier.
:param prereleases:
Whether or not to allow prereleases in the returned iterator. If set to
``None`` (the default), it will follow the recommendation from :pep:`440`
and match prereleases if there are no other versions.
:param key:
A callable that takes a single argument (an item from the iterable) and
returns a version string or :class:`Version` instance to be used for
filtering.
>>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
['1.3']
>>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
['1.2.3', '1.3', <Version('1.4')>]
>>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
['1.5a1']
>>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
['1.3', '1.5a1']
>>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
['1.3', '1.5a1']
>>> list(Specifier(">=1.2.3").filter(
... [{"ver": "1.2"}, {"ver": "1.3"}],
... key=lambda x: x["ver"]))
[{'ver': '1.3'}]
FNrøT) rÃr@rÿrjrAr´r“) rCÚprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesr?rAÚparsed_versionÚmatchs rzSpecifier.filterYsSèø€ðFØ %Ðð2‰K¸×8HÑ8Hð ð
.¨t¯}©}Óð ò 9ˆGܸ ©WÉÈWËÓVˆN؈EØÐ—=‘= EÒ)¨d×.EÑ.EؘTŸ\™\ô/ð"“MØ ×"˜{°G³ ¸d¿l¹lóñ*¨.¸$¿,¹,ÓGâ˜Ñ3Ñ7JØ,0Ð!“Mà Ñ(¨T×->Ñ->ÀeÒ-KØ(×Õ8ð/ 9ñ8Ð×Ñ 
,ús*C D+Ã D+ÃD+Ã'D+Ã6*D+Ä D)Ä! D+©r/N)r%r$r^r_)rAr$r^úVersion | None)rAr$r^r©r^úSequence[_VersionRange])r r$r r$r^úlist[_VersionRange]rÓ©rRr^r_)r^z#tuple[tuple[str, str], bool | None]©r%rar^r_rd)r^ztuple[str, str]rbr`)r r$r^ÚCallableOperator)rJrr%r$r^r()r%r$r^ztuple[list[str], int])rJrrcr$r^r()rJz
Version | strr%r$r^r()z
str | Versionr^r(r)ÚUnparsedVersionrÃr^r(r×).r5r6r7r8reÚ_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASErûÚ__annotations__rErrr
r r
rr(rÿrAr]r9rWrPr@rKrQrIr[r^rHrdrgrjrnrrrrrsñð&€IðZ ÐðxˆRZ‰ZØÐÑ·
±
¸R¿]¹]Ñ0Jó€Fð
ØØØØ
Ø
Øñ €Jó ô$<óL
óó0 
ó<6ð|òð%ð6×Ñòð DðDòóððòóðóBó$ò ð =ó: 
ó(ó "/óHPó Pó ó2ó@#ô*Hð6 ‡_$(Øð ð 
ð ‡_$(Ø.1ð àðððð
ò óðð$(Ø7;ð OðOO5ð O
ô O,rrz([0-9]+)((?:a|b|c|rc)[0-9]+)c#ó0Kg}g}d}|D]v}t||n||««}|€*|r|n"|j|«|j|«ŒD|js|s |Ed{d}|Œc|rŒf|j|«Œx|s |Ed{yy7Œ/7Œ­w)z?Filter per PEP 440: exclude prereleases unless no finals exist.FNT)r“r´)Ú all_nonfinalÚarbitrary_stringsÚ found_finalrÈÚparseds rÚ_pep440_filter_prereleasesrŽ®èø€ð!€LØ#%Ðà€KØòÜ ¨¨¡¹#¸d»)Óà ˆ>ñØ
àÔ×# DÔ àר,×" ØŠJØ òØ × Ñ  Õ %ð1&ñ6 Ø×Ñð ð-øð ús*A BÁ"BÁ#
BÁ1BÂ BÂ BÂBcóg}|jd«\}}}|j|xsd«|jd«D]J}tj |«}|r |j |j
««Œ:|j|«ŒL|S)aSplit version into components.
The split components are intended for version comparison. The logic does
not attempt to retain the original version string, so joining the
components back with :func:`_version_join` may not produce the original
version string.
ú.)Ú
rpartitionr“ÚsplitÚ
_prefix_regexrüÚextendÚgroups)rArrGr&ÚrestrÈrys rrGrGØs~ð€Fà×Ó,N€Eˆ1ˆ
‡MM%,˜à
˜3“ò ˆÜ×Ó-ˆÙ Ø M‰M˜%Ÿ,™,›.Õ M‰M˜$Õ ð  ð €Mrcó6|^}}|ddj|«S)zñJoin split version components into a version string.
This function assumes the input came from :func:`_version_split`, where the
first component must be the epoch (either empty or numeric), and all other
components numeric.
rr)Újoin)Ú
componentsrGr˜s rrBrBîs'ð€L€EˆˆWAc—hh˜t“nÐ &rcó.tˆfddD«« S)Nc3ó@K|]}j|«Œy­wr))Ú.0rÚsegments €rú <genexpr>z!_is_not_suffix.<locals>.<genexpr>ús!øèø€òØ'-ˆ×ј6×ùóƒ)rIÚrcrH)Úany)s`rrFrFùs"ø€ÜóØ1Pôóð ðrcóHd}|D]}|j«s|S|dz
}Œ|S)zƒCount leading numeric components in a :func:`_version_split` result.
>>> _numeric_prefix_len(["0", "1", "2", "a1"])
3
rr
)Úisdigit)r”ÚcountrŸs rrMrMÿs<ð
€EØòˆØÔ Ø à €Lð 
ðð €LrcóTt|«}||z
}|dkr|Sg|d|¢dg|z¢||d¢S)zÝPad a :func:`_version_split` result with ``"0"`` segments to reach
``target_numeric_len`` numeric components. Suffix segments are preserved.
>>> _left_pad(["0", "1", "a1"], 4)
['0', '1', '0', '0', 'a1']
rNr)rM)r”Útarget_numeric_lenÚ numeric_lenÚ
pad_neededs rrSrS
sNô& ,€KØ# 1€JØQ؈ Ø NˆU<
Ð N S E¨JÑ$6Ð N¸ À Ð:MÐ Nrcó´|\}}}|dk(r|jd«sdSdS|dvry|dk(ry|dk(r|jd«sd Sd
S|d k(rytd |«)
aLSort key for Cost Based Ordering of specifier operators in _filter_versions.
Operators run sequentially on a shrinking candidate set, so operators that
reject the most versions should run first to minimize work for later ones.
Tier 0: Exact equality (==, ===), likely to narrow candidates to one version
Tier 1: Range checks (>=, <=, >, <), cheap and usually reject a large portion
Tier 2: Wildcard equality (==.*) and compatible release (~=), more expensive
Tier 3: Exact !=, cheap but rarely rejects
Tier 4: Wildcard !=.*, expensive and rarely rejects
rrr )ryrwr
rér)rr)Úop_entryr&Úverr s rÚ_operator_costr±s|ðJ€A€sˆBØ ˆT‚zØŸ  TÔ*ˆqÐÐ Ð
Ø ˆT‚zØØ ˆT‚zØŸ  TÔ*ˆqÐÐ ˆU‚{Øä
Ð)¨"¨Ð
1rcó¢eZdZdZdZ d ddZddZedd«Zejdd«Zd dZ
d!d „Z d"d
Z d"d Z
d#d Zd$d
Zd%dZd#dZd&dZd'dZd(dZd(dZd(dZd)dZ d* d+dZej4 d, d-d«Zej4 d, d.d«Z d* d/dZ d0 d1dZy)2ra…This class abstracts handling of a set of version specifiers.
It can be passed a single specifier (``>=3.0``), a comma-separated list of
specifiers (``>=3.0,!=3.1``), or no specifier at all.
Instances are safe to serialize with :mod:`pickle`. They use a stable
format so the same pickle can be loaded in future packaging
releases.
.. versionchanged:: 26.2
Added a stable pickle format. Pickles created with
packaging 26.2+ can be unpickled with future releases.
Backward compatibility with pickles from
packaging < 26.2 is supported but may be removed in a future
release.
)Ú_canonicalizedÚ_has_arbitraryÚ_is_unsatisfiableræÚ
_resolved_opsÚ_specsNcó¾t|t«re|jd«Dcgc]#}|j«sŒ|j«Œ%}}t t t |««|_d|v|_n1t |«|_td|jD««|_t|j«dk|_ d|_ ||_
d|_ycc}w)a´Initialize a SpecifierSet instance.
:param specifiers:
The string representation of a specifier or a comma-separated list of
specifiers which will be parsed and normalized before use.
May also be an iterable of ``Specifier`` instances, which will be used
as is.
:param prereleases:
This tells the SpecifierSet if it should accept prerelease versions if
applicable or not. The default of ``None`` will autodetect it from the
given specifiers.
:raises InvalidSpecifier:
If the given ``specifiers`` are not parseable than this exception will be
raised.
ú,røc3ó6K|]}dt|«vŒy­w©Nr¼©Úss rr z(SpecifierSet.__init__.<locals>.<genexpr>tsèø€Ò%K¸! e¬s°1«v¤oÑ%Kùór
N)r!r$r”r"Úmaprr´r#)rCÚ
specifiersrÃÚsplit_specifierss rrEzSpecifierSet.__init__Rô, j¤#Ô 4>×3CÑ3CÀCÓ3HÖV¨aÈAÏGÉGÍI §¡¥ Ð ÐVä16´s¼9ÐFVÓ7WÓ1XˆDŒKà"'¨:Ð"5ˆ ä 
Ó+ˆDŒKô#&Ñ%K¸t¿{¹{Ô%KÓ"Kˆ ä! $§+¡+Ó.°!ÑÔØMQˆÔðÔà.2ˆÕùò% Ws
¤CºCcóÔ|jsQttjt |j
t ¬«««|_d|_d|_d|_|j
S)zBDeduplicate, sort, and cache specs for order-sensitive operations.©TN) r³r"r"ÚfromkeysÚsortedr·r$rVs rÚ_canonical_specszSpecifierSet._canonical_specssMàפ§
¡
¬f°T·[±[ÄcÔ.JÓ KÓLˆDŒKØ"&ˆ Ø!%ˆ Ø%)ˆ {‰{Ðrcóˆ|j |jS|jsytd|jD««ryy)Nc3ó4K|]}|jŒy­wrrqs rr z+SpecifierSet.prereleases.<locals>.<genexpr>—sèø€Ò2 ˆq}2ùsT)rVs rzSpecifierSet.prereleasesˆsBð × Ñ Ð ×
{Š{Øô Ñ2 d§k¡kÔ àrcó ||_d|_yr)s rzSpecifierSet.prereleasesœsà!ˆÔØ!%ˆÕrcó2|j|jfSr)rVs rrzSpecifierSet.__getstate__¡sð ˜T×/rcóÖd|_d|_t|t«rft |«dk(rk|\}}t|t«rVt d|D««rDt
|«r9||_||_t |«dk|_ td|D««|_ yt |«dk(rßt|dt«rÌ|\}}|jdd«}|jd«}t|t«rtt|t ¬««}t|t«rjt d „|D««rXt
|«rM||_||_t |j«dk|_ td
|jD««|_ yt|t«rÇ|jdd«}|jd«}t|t«rtt|t ¬««}t|t«rjt d |D««rXt
|«rM||_||_t |j«dk|_ td |jD««|_ yt#d
|«)Nr c3ó<K|]}t|t«Œy­wr©r!rs rr z,SpecifierSet.__setstate__.<locals>.<genexpr>²óèø€ÒœJ q¬)×Dùór
c3ó6K|]}dt|«vŒy­ws rr z,SpecifierSet.__setstate__.<locals>.<genexpr>¸sèø€Ò-MÀ!¨e´s¸1³v¬oÑ-Mùr¾rc3ó<K|]}t|t«Œy­wrs rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Äc3ó6K|]}dt|«vŒy­ws rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Êsèø€Ò-SÀ!¨e´s¸1³v¬oÑ-Sùr¾c3ó<K|]}t|t«Œy­wrs rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Õsèø€Ò@°Qœ
 1¤i×@ùrÏc3ó6K|]}dt|«vŒy­ws rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Ûsèø€Ò)O¸a¨%´3°q³6¬/Ñ)Oùr¾z!Cannot restore SpecifierSet from )r!r"r#Úallr*r´r"r#Ú frozensetrÅr$r$)rCr%ÚspecsrÃr&r's rr(zSpecifierSet.__setstate__§à!ˆÔØ!%ˆÔä eœUÕ 5z˜à%*Ñ"˜u¤eÔÑD¸% 2à"'D”KØ(3%Ü*-¨e«*¸©/'Ü*-Ñ-MÀuÔ-MÓ*MÜ5z˜¤:¨e°A©h¼Ô#=à$‘ 
 Ó3Ø'Ÿm™m¨NÓ; ä˜e¤YÔ!¤&¨´CÔ"8Ó9˜u¤eÔÑD¸% 2à"'D”KØ(3%Ü*-¨d¯k©kÓ*:¸aÑ*?'Ü*-Ñ-SÀtÇ{Á{Ô-SÓ*SÜ eœTÔ —II˜Ó+ˆŸ)™) NÓ3ˆKä˜%¤Ôœf U´Ô5ä˜5¤%ÔÑ@¸%Ô! +Ô# Ø$/Ô!Ü&)¨$¯+©+Ó&6¸!Ñ&;Ô#Ü&)Ñ)OÀ4Ç;Á;Ô)OÓ&OÔäÐ;¸E¸FrcóŒ|jd|jnd}d|jjdt |«|dS)aA representation of the specifier set that shows all internal state.
Note that the ordering of the individual specifiers within the set may not
match the input string.
>>> SpecifierSet('>=1.0.0,!=2.0.0')
<SpecifierSet('!=2.0.0,>=1.0.0')>
>>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
<SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
>>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
<SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
r.r/rwrYr0r1r2s rr]zSpecifierSet.__repr__àsUð× Ñ Ð˜T× ð ð 4—>>×+¨1¬S°«Y¨M¸#¸¸bÐArcóNdjd|j«D««S)anA string representation of the specifier set that can be round-tripped.
Note that the ordering of the individual specifiers within the set may not
match the input string.
>>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
'!=1.0.1,>=1.0.0'
>>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
'!=1.0.1,>=1.0.0'
c3ó2K|]}t|«Œy­wrs rr z'SpecifierSet.__str__.<locals>.<genexpr>sèø€Ò@ 1œ˜AŸÑ@ùs)rVs rzSpecifierSet.__str__õs"ðx‰xÑ×(=Ñ(=Ó(?Ô@rcó4t|j««Sr)rUrVs rrWzSpecifierSet.__hash__sÜD×,rcót|t«r t|«}nt|t«stSt«}|j|jz|_t |j«dk|_|jxs |j|_d|_|j|j|jk(r|j|_ |S|j|j|_ |Std«)aReturn a SpecifierSet which is a combination of the two sets.
:param other: The other object to combine with.
>>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
<SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
>>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
<SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
r
NzFCannot combine SpecifierSets with True and False prerelease overrides.) r!r$rrNr#r´r)rCrJÚ specifiers rÚ__and__zSpecifierSet.__and__ô eœSÔ   Ó'‰EܘE¤<Ô  “Nˆ ØŸ;™;¨¯©Ñ5ˆ ÔÜ#& y×'7Ñ'7Ó#8¸AÑ#=ˆ Ô Ø#'×#6Ñ#6Ò#N¸%×:NÑ:Nˆ Ô Ø"&ˆ Ôð × Ñ Ð ×(9Ñ(9¸U×=OÑ=OÒ(OØ%*×%7Ñ%7ˆ Ðð×
Ñ
Ð
'Ø%)×%6Ñ%6ˆ Ðô Øð
rcóÆt|ttf«rtt|««}nt|t«stS|j «|j «k(S)Whether or not the two SpecifierSet-like objects are equal.
:param other: The other object to check against.
The value of :attr:`prereleases` is ignored.
>>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
True
>>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
True
>>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
True
>>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
False
>>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
False
)r!r$rrrNrOs rrPzSpecifierSet.__eq__&sNô& eœc¤9Ð  ¤ U£Ó,‰EܘE¤<Ô ×&¨%×*@Ñ*@Ó*BÑBrcó,t|j«S)z7Returns the number of specifiers in this specifier set.)r#rVs rÚ__len__zSpecifierSet.__len__@sä4—;Ðrcó,t|j«S)
Returns an iterator over all the underlying :class:`Specifier` instances
in this specifier set.
>>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
[<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
)Úiterr·rVs rÚ__iter__zSpecifierSet.__iter__DsôD—K Ð rcó¬|j}d}|D]3}||j«}Œt||j««}|rŒ3n| td«|S)aIntersect all specifiers into a single list of version ranges.
Returns an empty list when unsatisfiable. ``===`` specs are
modeled as full range; string matching is checked separately
by :meth:`_check_arbitrary_unsatisfiable`.
Nz _get_ranges called with no specs)r
rÚ RuntimeError)rCr×rs rÚ _get_rangeszSpecifierSet._get_rangesNsað ˆà15ˆØò ˆA؈~ØŸä*¨6°1·<±<³>ÓBÚÙð
 ð ˆÐ ˆ
rcóâ|j}||S|jsd|_y|j« }|s|j«}|s|jdur|j «}||_|S)Check whether this specifier set can never be satisfied.
Returns True if no version can satisfy all specifiers simultaneously.
>>> SpecifierSet(">=2.0,<1.0").is_unsatisfiable()
True
>>> SpecifierSet(">=1.0,<2.0").is_unsatisfiable()
False
>>> SpecifierSet("").is_unsatisfiable()
False
>>> SpecifierSet("==1.0,!=1.0").is_unsatisfiable()
True
F)Ú_check_arbitrary_unsatisfiablerÃÚ_check_prerelease_only_ranges)rCÚcachedrs rÚis_unsatisfiablezSpecifierSet.is_unsatisfiabledsyð×'ˆØ Р؈{Š{Ø%*ˆDÔ à×'ˆáØ×:ˆFá˜$×*¨eÑ×9ˆFà!'ˆÔ؈
rcóÜ|j«D]Y\}}t|j«}|y|j||jkry||jk(sŒL|jsŒYyy)z€With prereleases=False, check if every range contains only
pre-release versions (which would be excluded from matching).FT)rAri)rCrÚnearests rz*SpecifierSet._check_prerelease_only_ranges…shð!× ‰LˆE-¨e¯m©mÓ<ˆˆÙØ}‰}а%·-±-Ò(?ÙØ˜%Ÿ-™-Ó'¨E¯O«OÙð ðrcóÎ|jDcgc]}|jdk(sŒ|Œ}}|sy|djj«Št ˆfd|ddD««ryt |dj«Š|j dur
jry|jDcgc]}|jdk7sŒ|Œ}}|syytˆfd|D«« Scc}wcc}w) aCheck === (arbitrary equality) specs for unsatisfiability.
=== uses case-insensitive string comparison, so the only candidate
that can match ``===V`` is the literal string V. This method
checks whether that candidate is excluded by other specifiers.
Frc3óXK|]!}|jj«k7Œ#y­wr)rAr)Úfirsts €rr z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>Ÿs!øèø€ÒA¨aˆqy‰yÓ  Aùsƒ'*r
NTc3ó@K|]}|j«Œy­wrrl)Ú candidates €rr z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>·søèø€Òq—z‘z )×?ùr¡) r·rÿrArr´)rCÚstandardrós @@rz+SpecifierSet._check_arbitrary_unsatisfiableù€ð!%§ ¡ ÖC˜1¨q¯z©z¸UÓ/B’QÐCˆ ÐØð˜!‘ ×Ü ÓA°9¸Q¸R°=Ô ô$ I¨a¡L×$8Ñ$8Ó9ˆ ð