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

702 lines
74 KiB
Plaintext
Raw Normal View History

Ë
KÀ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=d„Z'Gd„dejP«Z)ejTGd„d««Z+ejTGd„d««Z,ejTGd„d««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)Nérr
)Ú
isinstanceÚtupleÚlenÚstr)Úspecs rÚ_validate_specr&4sI€ä�4œÓò %Ü �‹I˜‰Nò %ä �t˜A‘w¤Ó $ò %ô
�t˜A‘w¤Ó $ð rcó.—|duxst|t«Sr)r!Úbool)Úpres rÚ
_validate_prer*=s€Ø �$ˆ;Ò /œ* S¬$Ó/Ð/rÚTÚ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 ›\Ò)ˆ7Ð<¨w°t¸¨}Ð<rcóT—eZdZdZej
«Zej
«Zy)Ú
_BoundaryKindz5Where a boundary marker sits in the version ordering.N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚenumÚautoÚ AFTER_LOCALSÚ AFTER_POSTSrrrr4r4Rs„Ù?à�4—9‘9“;€LØ�$—)‘)“+�Krr4cóD—eZdZdZdZd
d„Zd d„Zd d„Zd
d„Zdd„Z dd„Z
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ÒEØ— ‘ ˜QŸU™UÒ"àØ �:‰:œ×3Ñ3Ò 3à—:‘: §¡Ñ'Ò>¨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€Ü �eÔ-Ô .Ø—<‘< 5§=¡=Ñ0ÒN°T·Z±ZÀ5Ç;Á;Ñ5NÐ NÜÐrcó&—t|t«r_|j|jk7r|j|jkS|jj|jjkS|j |« xr|j|kSr)r!r>rAr?ÚvaluerLrOs rÚ__lt__z_BoundaryVersion.__lt__Šso€Ü �eÔ-Ô .Ø�|‰|˜uŸ}™}Ò,Ø—|‘| e§m¡mÑ3Ð3Ø—:‘:×#Ñ# e§k¡k×&7Ñ&7Ñ7Ð 7Ø—?‘? 5Ó)Ð)ÒB¨d¯l©l¸UÑ.BÐBrcóD—t|j|jf«Sr)ÚhashrAr?©rCs rÚ__hash__z_BoundaryVersion.__hash__‘s€Ü�T—\‘\ 4§:¡:Ð.Ó/Ð/rcó|—|jj›d|j›d|jj›d�S)Nú(z, ú))Ú __class__r5rAr?ÚnamerVs rÚ__repr__z_BoundaryVersion.__repr__”s4€Ø—.‘.×)Ñ)Ð*¨!¨D¯L©LÐ+;¸2¸d¿j¹j¿o¹oÐ=NÈaÐPÐ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ó0ôQrr>có<—eZdZdZdZd d„Zd
d„Zd d„Zd d„Zd
d„Z 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Ÿ}™}Ñ,ÒR°·±À5Ç?Á?Ñ1RÐRrcó—t|t«stS|j€|jduS|j€y|j|jk7r|j|jkS|jxr
|j S)NFrorOs rrSz_LowerBound.__lt__¬sq€Ü˜%¤Ô-Ü!Ð !à �<‰<Ð Ø—=‘=¨Ð,Ð ,Ø �=‰=Ð ØØ �<‰<˜5Ÿ=™=Ò (Ø—<‘< %§-¡-Ñ/Ð /à�~‰~Ò5 e§o¡oÐ"5Ð5rcóD—t|j|jf«Sr©rUrArirVs rrWz_LowerBound.__hash__¹ó€Ü�T—\‘\ 4§>¡>Ð2Ó3Ð3rcót—|jrdnd}d|jj›d|›|j›d�S)Nú[rYú<ú ú>©rir[r5rA©rCÚbrackets rr]z_LowerBound.__repr__¼s8€ØŸš‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨W¨I°d·l±lÐ5EÀQÐGÐGrN©rAÚ_VersionOrBoundaryrir(r^r_r`)rJrgr^r(rbrd©
r5r6r7r8rerErPrSrWr]rrrrgrg˜ó)„ñð)€Ió#óSó
6ó4ôHrrgcó<—eZdZdZdZd d„Zd
d„Zd d„Zd d„Zd
d„Z 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!r‚rNrArirOs rrPz_UpperBound.__eq__Ðrprcóü—t|t«stS|j€y|j€y|j|jk7r|j|jkS|j xr |jS©NFTr…rOs rrSz_UpperBound.__lt__Õse€Ü˜%¤Ô-Ü!Ð !à �<‰<Ð ØØ �=‰=Ð ØØ �<‰<˜5Ÿ=™=Ò (Ø—<‘< %§-¡-Ñ/Ð /à—>‘>Ð!Ò5 e§o¡oÐ5rcóD—t|j|jf«SrrsrVs rrWz_UpperBound.__hash__ârtrcót—|jrdnd}d|jj›d|j›|›d�S)Nú]rZrwrxryrzr{s rr]z_UpperBound.__repr__ås8€ØŸš‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨T¯\©\Ð,<¸W¸IÀQÐGÐGrNr}r`)rJr‚r^r(rbrdrrrrr‚r‚Ár€rr‚Fztuple[_VersionRange]Ú _FULL_RANGEcóΗ|j� |j€y|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Ò7¨¯©Ð8Ð8Ø �=‰=˜5Ÿ=™=Ñ (Ð(rcó2—g}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_upperr�rŽs rÚ_intersect_rangesr�ÿs·€ð
#%€FØ Ð €J�Ø
”s˜4“yÒ
 [´3°u³:Ò%=Ø!% jÑ!1ш
�JØ#(¨Ñ#5Ñ ˆ �[ä�J  Ó,ˆÜ�J  Ó,ˆä˜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¸7ÈÔ JÐJrcóZ—tj|j|jd¬«S)z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.rr )rr¡rGr0©rAs rÚ
_base_dev0r¥s €ä × Ñ  G§M¡M¸7¿?¹?ÐPQÔ RÐRrcó`—t|t«s t|«}|S|S#t$rYywxYwr)r!rrr¤s rÚ_coerce_versionr§$s:€Ü �gœwÔ 'ð ܘgÓ&ˆGð €Nˆ7€Nøôò Ùð ús ’ !¡ -¬-cóB—|j€|S|jd¬«S)N)Úlocal)r©Ú __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.
N©rHrIr©©rªr¤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.
rN©rIr©r®r¤s rÚ_earliest_prereleaser²;s€ð
× Ñ  1¨DÐ Ó 1Ð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
r)rHr©)r!r>rAÚ
is_prereleaserªrH)rKÚinnerÚks rÚ_nearest_non_prereleaser·Cs’€ð €yØÜ�!Ô%Ô&Ø— ‘ ˆØ × Ò à×$Ñ$¨°4¸tÐ$ÓDÐ Dð!&§
¡
Ð 6ˆU�Z‰Z˜!Š^¸AˆØ× Ñ  a¨tÐ Ó4Ð4Ø �?Š?؈à �=‰=˜T t°4ˆ=Ó 8Ð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 rrºzBaseSpecifier._strhs€ô�4‹yÐrcó—y)zŽ
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)z«
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 rrÃzBaseSpecifier.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ó—yrrrËs rrÎzBaseSpecifier.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.
NrrËs rrÎzBaseSpecifier.filter©r¿rrdrbr`©r^ú bool | None)rRr(r^r_r)rÈr$rÃrÔr^r(©N.©rÌzIterable[UnparsedVersionVar]rÃrÔrÍr_r^zIterator[UnparsedVersionVar]©rÌz Iterable[T]rÃrÔrÍzCallable[[T], UnparsedVersion]r^z Iterator[T]©NN©rÌú
Iterable[Any]rÃrÔrÍú'Callable[[Any], UnparsedVersion] | Noner^ú
Iterator[Any])r5r6r7reÚ__match_args__ÚpropertyrºÚabcÚabstractmethodr¾rWrPrÃÚsetterrÉÚtypingÚoverloadrÎrrrrrds–„Ø€IØ€Nà
òóðð ×Ñò óð ð  ×Ñò óð ð
 ×Ñò óð ðØ×Ñò óóð ð×Ñò óð ð  ×Ñó óð ð
 ‡_�_ð$(Øð +à.ð+ð!ð+ðð +ð
&ò +óð+ð ‡_�_ð$(Ø.1ð àðð!ðð,ð ð
ò óðð ×Ñð$(Ø7;ð  àð  ð!ð  ð5ð  ð
ò  óñ  rr)Ú metaclassc ó\—eZdZUdZdZdZejdezdzejejz«Z
ddddd d
d d d
œZ de d<d1d2d„Z
d3d„Zd4d„Zd5d„Zd6d„Zd6d„Zed7d„«Zej*d8d„«Zd9d„Zd:d„Zed;d„«Zed;d„«Zd;d„Zd;d„Zed<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)LraíThis 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)að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ôrõrör÷r r
)
Ú_regexÚ fullmatchrÚstripÚ
startswithrèrærérêrç)rCr%rÃÚoperatorrAs rrEzSpecifier.__init__=sÕ€ð�{‰{×$Ñ$ TÔ*Ü"Ð%8¸¸Ð#AÓBÐ Bà�z‰z‹|ˆØ �?‰?˜5Ô !Ø $ 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
)rér§)rCrAÚversion_specifiers rÚ_get_spec_versionzSpecifier._get_spec_versioncsY€à × Ñ Ð )¨d×.@Ñ.@ÀÑ.CÀwÒ.NØ×%Ñ% aÑ(Ð (ä+¨GÓ4ÐØ Ð $Øà%Ð'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øú.*)rçrÿrAr‹ÚendswithÚ_wildcard_rangesÚ_standard_ranges)rCÚopÚver_strr–s 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)rr¥r¢rgr‚Ú_NEG_INFÚ_POS_INF)rCr r Úbaser�rŽs rr zSpecifier._wildcard_ranges‘sy€à×)Ñ)¨'°#°2¨,Ó7ˆÜ˜4Ó ˆÜ! $Ó'ˆØ
�Š:Ü  ¨Ó-¬{¸5À%Ó/HÐIÐJÐ Jô”{ 5¨%Ó0Ð 1Ü
˜ Ó
%¤xÐ 0ð
ð
rcó—|j|«}|dk(rt|d«tfgS|dk(r+tt t |t j«d«fgS|dk(rª|j�3|j|jdzd¬«}t|d«tfgS|j�4|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
r±rr­Frwú+rôrõrórŸ)r0úUnknown operator: )rrgrrr‚r>r4r;rIrªrHr<r´r.r0r¢Ú
ValueError)
rCr r rKÚ lower_verr-Ú has_localÚ after_localsrŽÚprefixs
rr
zSpecifier._standard_rangesžs+€Ø × &Ñ & wÓ /ˆà
�Š:Ü   DÓ)¬8Ð4Ð5Ð 5à
�Š:ôÜÔ 0°´M×4NÑ4NÓ OÐQUÓVððð
ð �Š9Ø�u‰uÐ ðŸM™M¨a¯e©e°a©i¸t˜MÓD� Ü$ Y°Ó5´xÐ@ÐAÐAØ�v‰vÐ!àŸM™M¨q¯v©v¸©z¸qȘMÓM� Ü$ Y°Ó5´xÐ@ÐAÐAô Ô 0°´M×4MÑ4MÓ NÐPUÓVÜððð
ð �Š9🚑A¨a¯m©mÀȨmÓ.NˆEØœ Ò$Ø� Üœ{¨5°%Ó8Ð9Ð:Ð :ð˜7�Nˆ Ü'¨¬=×+EÑ+EÓFˆ Ù‘ Lˆà
�Š:Ü   DÓ)¬;°u¸dÓ+CÐDÐEÐ Eà
�Š:äœ; q¨%Ó0Ð1ܘU EÓ*¬HÐ5ðð
ð
�Š:Ø—]‘]¨1¯9©9°S°b¨>�]Ó:ˆFä˜Q Ó%¤{Ô3DÀVÓ3LÈeÓ'TÐUðð
ôÐ-¨b¨VÐ4Ó5Ð5rcóÊ—|j� |jS|j\}}|dk(ry|dk(r|jd«ry|j|«}|€y|jS)NrõFrôr)rærèrrr´)rCrÿÚ version_strrAs rrÃzSpecifier.prereleasesÜsy€ð × Ñ Ð (Ø×$Ñ$Ð $ð!%§
¡
ш�+Ø �tÒ Øð �tÒ   × 4Ñ 4°TÔ :Øð×(Ñ(¨Ó5ˆØ ˆ?Øð×$Ñ$Ð$rcó—||_yr)rærÅs rrÃzSpecifier.prereleasesøs
€à!ˆÕrcó2—|j|jfSr)rèrærVs rÚ __getstate__zSpecifier.__getstate__üs€ð—
‘
˜D×-Ñ-Ð.Ð.rcód—d|_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
rèræÚinvalidzCannot restore Specifier from )
rérêrçr!r"r#r&r*rèræÚdictÚgetÚ TypeError)rCÚstater%rÃÚ_Ú slot_dicts rÚ __setstate__zSpecifier.__setstate__s€à!ˆÔØ#ˆÔ؈Œ ä �eœUÔ #Ü�5‹z˜QŠà$)Ñ!��kÜ! $Ô'¬M¸+Ô,FØ!%�D”JØ(3�DÔ%ØÜ�5‹z˜QФ:¨e°A©h¼Ô#=à$‘ ��9Ø —}‘} WÓ-�Ø'Ÿm™m¨N¸IÓF� Ü! $Ô'¬M¸+Ô,FØ!%�D”JØ(3�DÔ%ØÜ �eœTÔ "à—9‘9˜WÓ%ˆDØŸ)™) N°IÓ>ˆKܘdÔ#¬
°kÔ(BØ!�”
Ø$/�Ô!ØäÐ8¸¸ ÐBÓCÐCrcó —|jdS)z`The operator of this specifier.
>>> Specifier("==1.2.3").operator
'=='
r©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óŒ—|j�d|j›�nd}d|jj›dt |«›|›d�S)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ærÃr[r5r$©rCr)s rr]zSpecifier.__repr__6sU€ð× Ñ Ð,ð˜T×-Ñ-Ð0Ñ 1àð ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y¨M¸#¸¸bÐAÐArcó4—dj|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 rr¾zSpecifier.__str__Hs€ðˆv�}‰}˜dŸj™jÐ)Ð)rcóž—|j\}}|dk(s|jd«r||fS|j|«}t||dk7¬«}||fS)Nrørró©Ústrip_trailing_zero)rèrrr)rCrÿrArÚcanonical_versions rÚ_canonical_speczSpecifier._canonical_specRsc€à ŸJ™Jш�'Ø �uÒ  × 0Ñ 0°Ô 6ؘWÐ$Ð $à×1Ñ1°'Ó:ˆ ä0Ø ¨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§>¡>Ô2Ü!Ð !à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ò
&Ü%Ò%ð
&ús’A"Á"A4Á3A4có>—t|d|j|›�«}|S)NÚ _compare_)Úgetattrrù)rCr Úoperator_callables rÚ
_get_operatorzSpecifier._get_operator€s+€Ü.5Ø �I˜dŸo™o¨bÑ1Ð2Ð3ó/
Ðð!Ð 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ÓJÓ KÈCÈRÐ Pó
ˆð
�$‰ˆà×0Ñ0°¸dÓCò
Ø × Ñ   ¨VÓ 4ð
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)rêrrGÚ_numeric_prefix_len)rCr%Úwildcard_splitÚ
normalizedÚ
split_specs rÚ_get_wildcard_splitzSpecifier._get_wildcard_splitšsO€ð×-Ñ-ˆØ Ð !Ü-¨d°3°B¨iÈUÔSˆJÜ'¨
Ó3ˆJØ(Ô*=¸jÓ*IÐJˆNØ#1ˆDÔ ØÐrcó&—|jd«rT|j|«\}}tt|«d¬«}t |«}t ||«}|dt
|«}||k(S|j|«} | js t|«}|| k(S)NrFr6) rrQrr«rGÚ _left_padr#rr©)
rCrJr%rPÚspec_numeric_lenÚnormalized_prospectiveÚsplit_prospectiveÚpadded_prospectiveÚshortened_prospectivers
rrIzSpecifier._compare_equalªs«€à �=‰=˜Ô Ø+/×+CÑ+CÀDÓ+IÑ (ˆJÐ(ô&:Ü  Ó,À%ô&Ð "ô !/Ð/EÓ FÐ ô"+Ð+<Ð>NÓ!OÐ ð
%7Ð7H¼¸Z»Ð$IÐ !à(¨JÑ6Ð 6ð ×5Ñ5°dÓ;ˆLð
 ×%Ò%Ü-¨kÓ:� à ,Ñ.Ð .rcó(—|j||« Sr)rI©rCrJr%s rÚ_compare_not_equalzSpecifier._compare_not_equalÎs€Ø×&Ñ& {°DÓ9Ð9Ð9rcó<—t|«|j|«kSr©r«rrZs rÚ_compare_less_than_equalz"Specifier._compare_less_than_equalÑó€ô˜{Ó+¨t×/IÑ/IÈ$Ó/OÑOÐOrcó<—t|«|j|«k\Srr]rZs rrHz%Specifier._compare_greater_than_equal×r_rcó€—|j|«}||ksy|js|jr|t|«k\ryyr‡)rr´r²©rCrJÚspec_strr%s rÚ_compare_less_thanzSpecifier._compare_less_thanÝsK€ð×)Ñ)¨(Ó3ˆð
˜TÒ!Øð
×"Ò"Ø×)Ò)ØÔ3°DÓ9Ò9àð
rcó¶—|j|«}||kDsy|js|jrt|«|k(ry|j�t |«|k(ryyr‡)rÚis_postreleaser¯r©r«rbs rÚ_compare_greater_thanzSpecifier._compare_greater_thanösg€ð×)Ñ)¨(Ó3ˆð
˜TÒ!Øð
×#Ò#Ø×*Ò*ܘ;Ó'¨4Ò/àð × Ñ Ð (¬_¸[Ó-IÈTÒ-QØð
rcóh—t|«j«t|«j«k(Sr©r$r�rZs 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
©rÉ©rCrÈs rÚ __contains__zSpecifier.__contains__ó€ð&�}‰}˜TÓ"Ð"rcóN—tt|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Ã)r(rCrÎrÇs rrÉzSpecifier.contains.s#€ô2”D˜Ÿ™ d V¸˜ÓEÓFÓGÐGrcó—yrrrËs rrÎzSpecifier.filterIrÏrcó—yrrrËs rrÎzSpecifier.filterQrÑrc#óZK—g}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ÿr§rjrAr´rær“) rCrÌrÃrÍÚprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesr?rAÚparsed_versionÚmatchs rrÎzSpecifier.filterYsSèø€ðF "ÐØ %Ðð'Ð2‰K¸×8HÑ8Hð ð
!×.Ñ.¨t¯}©}Ó=Ðð ò 9ˆGÜ,¸¸ ©WÉÈWËÓVˆN؈EØÐ%à—=‘= EÒ)¨d×.EÑ.EؘTŸ\™\ô/ð"“MØ—‘ %Ò'Ø×/Ñ/Ø"˜{‘G±°G³ ¸d¿l¹ló‘ñ*¨.¸$¿,¹,ÓG�â˜Ñ3à%×3Ò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Ôr^r_)rAr$r^úVersion | None)rAr$r^r©r^úSequence[_VersionRange])r r$r r$r^úlist[_VersionRange]rÓ©rRrÔr^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()rÈz
str | Versionr^r(r)rÈÚUnparsedVersionrÃrÔr^r(rÕrÖr×rØrÙ).r5r6r7r8reÚ_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASErûrùÚ__annotations__rErrr
r r
rÞrÃrárr(rÿrAr]r¾r9rWrPr@rKrQrIr[r^rHrdrgrjrnrÉrârãrÎrrrrrs…ñð&€IðZ ÐðxˆR�Z‰ZØÐ%Ñ%¨Ñ.°·
±
¸R¿]¹]Ñ0Jó€Fð
ØØØØ"Ø
Ø
Øñ €J�ó ô$<óL
!óóó0 
ó<6ð|ò%óð%ð6×Ñò"óð"ó/ó DðDòóððòóðóBó$*ðò +óð +ó*ó=ó:!ó 
ó(ó "/óH:óPó Pó ó2ó@=ó#ô*Hð6 ‡_�_ð$(Øð +à.ð+ð!ð+ðð +ð
&ò +óð+ð ‡_�_ð$(Ø.1ð àðð!ðð,ð ð
ò óðð$(Ø7;ð O,àðO,ð!ðO,ð5ð O,ð
ô O,rrz([0-9]+)((?:a|b|c|rc)[0-9]+)c#ó0K—g}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“r´)rÌrÍÚ all_nonfinalÚarbitrary_stringsÚ found_finalrÈÚparseds rÚ_pep440_filter_prereleasesrŽ®s¼èø€ð!€LØ#%Ðà€KØò&ˆÜ ¨¨¡¹#¸d»)Ó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.
ú!Ú0ú.)Ú
rpartitionr“ÚsplitÚ
_prefix_regexrüÚextendÚgroups)rAr–rGr&ÚrestrÈrys rrGrGØs~€ð€Fà×'Ñ'¨Ó,�N€Eˆ1ˆdØ
‡M�M�%’,˜3Ôà—
‘
˜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.
r�r’)Újoin)Ú
componentsrGr˜s rrBrBîs'€ð€L€EˆD؈W�A�c—h‘h˜t“nÐ%Ð &Ð&rcó.‡—tˆfd„dD«« S)Nc3ó@•K—|]}‰j|«–—Œy­wr)rþ)Ú.0rÚsegments €rú <genexpr>z!_is_not_suffix.<locals>.<genexpr>ús!øèø€òØ'-ˆ×ј6×"ñùóƒ)rIÚaÚbÚrcrH)Úany)rŸs`rrFrFùs"ø€ÜóØ1Pôóð ðrcóH—d}|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óT—t|«}||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€ô& eÓ,€KØ# kÑ1€JØ�Q‚؈ Ø NˆU�<�KÐ
Ð N S E¨JÑ$6Ð N¸%À À Ð:MÐ NÐ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
rôrrr )r÷röryrwr
rórõrérør)rr)Úop_entryr&Úverr s rÚ_operator_costr±s|€ð�J€A€sˆBØ ˆT‚zØŸ ™  TÔ*ˆqÐ1°Ð1Ø Ð
#Ñ#ØØ ˆT‚zØØ ˆT‚zØŸ ™  TÔ*ˆqÐ1°Ð1Ø ˆU‚{Øä
Ð)¨"¨Ð0Ó
1Ð1rcó¢—eZdZdZdZ d dd„Zdd„Zedd„«Zejdd„«Zd d„Z
d!d „Z d"d
„Z d"d „Z
d#d „Zd$d
„Zd%d„Zd#d„Zd&d„Zd'd„Zd(d„Zd(d„Zd(d„Zd)d„Z d* d+d„Zej4 d, d-d„«Zej4 d, d.d„«Z d* d/d„Z d0 d1d„Zy)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«D�cgc]#}|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©røNr¼©ržÚss rr z(SpecifierSet.__init__.<locals>.<genexpr>tsèø€Ò%K¸! e¬s°1«v¤oÑ%Kùó‚r
N)r!r$r”rýr"Úmaprr·r´r¥r#r³r¶rærµ)rCÚ
specifiersrÃr½Úsplit_specifierss rrEzSpecifierSet.__init__Rs¹€ô, �j¤#Ô &ð4>×3CÑ3CÀCÓ3HÖV¨aÈAÏGÉGÍI §¡¥ ÐVÐ ÐVä16´s¼9ÐFVÓ7WÓ1XˆDŒKà"'¨:Ð"5ˆDÕ ä 
Ó+ˆDŒKô#&Ñ%K¸t¿{¹{Ô%KÓ"KˆDÔ ä! $§+¡+Ó.°!Ñ3ˆÔØMQˆÔð(ˆÔà.2ˆÕùò% Ws
¤CºCcóÔ—|jsQttjt |j
t ¬«««|_d|_d|_d|_|j
S)zBDeduplicate, sort, and cache specs for order-sensitive operations.©rÍTN) r³r"r"ÚfromkeysÚsortedr·r$r¶rµrVs rÚ_canonical_specszSpecifierSet._canonical_specssM€à×"Ò"ܤ§
¡
¬f°T·[±[ÄcÔ.JÓ KÓLˆDŒKØ"&ˆDÔ Ø!%ˆDÔ Ø%)ˆDÔ "Ø�{‰{Ðrcóˆ—|j� |jS|jsytd„|jD««ryy)Nc3ó4K—|]}|j–—Œy­wrrqr¼s rr z+SpecifierSet.prereleases.<locals>.<genexpr>—sèø€Ò2 ˆq�}�}Ñ2ùs‚T)rær·r¥rVs rrÃzSpecifierSet.prereleasesˆsB€ð × Ñ Ð (Ø×$Ñ$Ð $ð
�{Š{Øô Ñ2 d§k¡kÔ2Ô 2Øàrcó —||_d|_yr)rærµrÅs rrÃzSpecifierSet.prereleasesœs€à!ˆÔØ!%ˆÕrcó2—|j|jfSr)r·ræ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!rr¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>²óèø€ÒD¸œJ q¬)×4ÑDùó‚r
c3ó6K—|]}dt|«v–—Œy­wr»r¼r¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>¸sèø€Ò-MÀ!¨e´s¸1³v¬oÑ-Mùr¾r·rrærÃc3ó<K—|]}t|t«–—Œy­wrrÍr¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>ÄrÎrÏc3ó6K—|]}dt|«v–—Œy­wr»r¼r¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Êsèø€Ò-SÀ!¨e´s¸1³v¬oÑ-Sùr¾c3ó<K—|]}t|t«–—Œy­wrrÍr¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Õsèø€Ò@°Qœ
 1¤i×0Ñ@ùrÏc3ó6K—|]}dt|«v–—Œy­wr»r¼r¼s rr z,SpecifierSet.__setstate__.<locals>.<genexpr>Ûsèø€Ò)O¸a¨%´3°q³6¬/Ñ)Oùr¾z!Cannot restore SpecifierSet from )r¶rµr!r"r#Úallr*r·rær³r¥r´r"r#Ú frozensetrÅr$r$)rCr%ÚspecsrÃr&r's rr(zSpecifierSet.__setstate__§sô€à!ˆÔØ!%ˆÔä �eœUÕ #Ü�5‹z˜QŠà%*Ñ"��{ä˜u¤eÔ,ÜÑD¸eÔDÔDÜ% kÔ2à"'�D”KØ(3�DÔ%Ü*-¨e«*¸©/�DÔ'Ü*-Ñ-MÀuÔ-MÓ*M�DÔ'ØÜ�5‹z˜QФ:¨e°A©h¼Ô#=à$‘ ��9Ø!Ÿ
™
 h°Ó3�Ø'Ÿm™m¨NÓ;� ä˜e¤YÔ/Ü!¤&¨´CÔ"8Ó9�Eä˜u¤eÔ,ÜÑD¸eÔDÔDÜ% kÔ2à"'�D”KØ(3�DÔ%Ü*-¨d¯k©kÓ*:¸aÑ*?�DÔ'Ü*-Ñ-SÀtÇ{Á{Ô-SÓ*S�DÔ'ØÜ �eœTÔ "à—I‘I˜h¨Ó+ˆEØŸ)™) NÓ3ˆKä˜%¤Ô+Üœf U´Ô4Ó5�ä˜5¤%Ô(ÜÑ@¸%Ô@Ô@Ü! +Ô.à#�” Ø$/�Ô!Ü&)¨$¯+©+Ó&6¸!Ñ&;�Ô#Ü&)Ñ)OÀ4Ç;Á;Ô)OÓ&O�Ô#ØäÐ;¸E¸9ÐEÓFÐFrcóŒ—|j�d|j›�nd}d|jj›dt |«›|›d�S)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×-Ñ-Ð0Ñ 1àð ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y¨M¸#¸¸bÐAÐArcóN—djd„|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'
r¹c3ó2K—|]}t|«–—Œy­wrr¼r¼s rr z'SpecifierSet.__str__.<locals>.<genexpr>sèø€Ò@ 1œ˜AŸÑ@ùs‚)ršrÆrVs rr¾zSpecifierSet.__str__õs"€ð�x‰xÑ@¨×(=Ñ(=Ó(?Ô@Ó@Ð@rcó4—t|j««Sr)rUrÆrVs 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«‚)a‚Return 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³r´r¶rær)rCrJÚ specifiers rÚ__and__zSpecifierSet.__and__sê€ô �eœSÔ !Ü  Ó'‰EܘE¤<Ô0Ü!Ð !ä “Nˆ ØŸ;™;¨¯©Ñ5ˆ ÔÜ#& y×'7Ñ'7Ó#8¸AÑ#=ˆ Ô Ø#'×#6Ñ#6Ò#N¸%×:NÑ:Nˆ Ô Ø"&ˆ Ôð × Ñ Ð $¨×(9Ñ(9¸U×=OÑ=OÒ(OØ%*×%7Ñ%7ˆIÔ "ðÐð×
Ñ
Ð
'Ø%)×%6Ñ%6ˆIÔ "ð Ðô ØXóð
rcóÆ—t|ttf«rtt|««}nt|t«stS|j «|j «k(S)a¡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$rrrNrÆrOs rrPzSpecifierSet.__eq__&sN€ô& �eœc¤9Ð-Ô .Ü ¤ U£Ó,‰EܘE¤<Ô0Ü!Ð !à×$Ñ$Ó&¨%×*@Ñ*@Ó*BÑBÐBrcó,—t|j«S)z7Returns the number of specifiers in this specifier set.)r#r·rVs rÚ__len__zSpecifierSet.__len__@s€ä�4—;‘;ÓÐrcó,—t|j«S)zð
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‘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
r�Ú RuntimeError)rCr×r–r½s rÚ _get_rangeszSpecifierSet._get_rangesNsa€ð— ‘ ˆà15ˆØò ˆA؈~ØŸ™›‘ä*¨6°1·<±<³>ÓB�ÚÙð
 ð ˆ>ÜÐAÓBÐ B؈
rcóâ—|j}|�|S|jsd|_y|j« }|s|j«}|s|jdur|j «}||_|S)a¦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)rµr·rçÚ_check_arbitrary_unsatisfiablerÃÚ_check_prerelease_only_ranges)rCÚcachedr–s rÚis_unsatisfiablezSpecifierSet.is_unsatisfiabledsy€ð×'Ñ'ˆØ Р؈Mà�{Š{Ø%*ˆDÔ "Øà×%Ñ%Ó'Ð'ˆáØ×8Ñ8Ó:ˆFá˜$×*Ñ*¨eÑ3Ø×7Ñ7Ó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)rçr·rAri)rCr�rŽÚnearests rrêz*SpecifierSet._check_prerelease_only_ranges…sh€ð!×,Ñ,Ó.ò ‰LˆE�5Ü-¨e¯m©mÓ<ˆGØˆÙØ�}‰}Ð$¨°%·-±-Ò(?ÙØ˜%Ÿ-™-Ó'¨E¯O«OÙð ðrcó·‡—|jD�cgc]}|jdk(sŒ|‘Œ}}|sy|djj«Št ˆfd„|ddD««ryt |dj«Š|j dur‰�
‰jry|jD�cgc]}|jdk7sŒ|‘Œ}}|sy‰€ytˆ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.
røFrc3óX•K—|]!}|jj«‰k7–—Œ#y­wr)rAr�)ržr½Úfirsts €rr z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>Ÿs!øèø€ÒA¨aˆq�y‰y�‰Ó  EÕ)ÑAùsƒ'*r
NTc3ó@•K—|]}|j‰«–—Œy­wrrl)ržr½Ú candidates €rr z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>·søèø€Ò?°�q—z‘z )×,Ñ?ùr¡) r·rÿrAr�r¥r§rÃr´rÕ)rCr½ròÚstandardrórñs @@rréz+SpecifierSet._check_arbitrary_unsatisfiable’sçù€ð!%§ ¡ ÖC˜1¨q¯z©z¸UÓ/B’QÐCˆ ÐCÙØð˜!‘ ×$Ñ$×*Ñ*Ó,ˆÜ ÓA°9¸Q¸R°=ÔAÔ AØô$ I¨a¡L×$8Ñ$8Ó9ˆ ð