ó
    T=Œj~ ã                  óê  • % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK	J
r
JrJrJrJrJrJrJrJr  SSKJr  SSKJrJr  \R0                  S:¼  a  SS	K	Jr  O\
(       a  SS	KJr  / S
QrS:S jrS;S jrS<S jr\" S5      r\\\ 4   r!\" S\!S9r"\\\ /\#4   r$\" S5      r%S\&S'   S=S jr' " S S\RP                  5      r)\RT                   " S S5      5       r+\RT                   " S S5      5       r,\RT                   " S S5      5       r-\	R                  (       a  \\\+S4   r.\/\,\-4   r0\," SS5      r1\-" SS5      r2\1\244r3S\&S'   S>S  jr4      S?S! jr5S@S" jr6S@S# jr7SAS$ jr8S@S% jr9S@S& jr:S@S' jr;    SBS( jr< " S) S*\=5      r> " S+ S,\R~                  S-9r@ " S. S/\@5      rA\R„                  " S05      rC      SCS1 jrDSDS2 jrESES3 jrFSFS4 jrGSGS5 jrHSHS6 jrISIS7 jrJ " S8 S9\@5      rKg)Jz¢
.. testsetup::

    from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from pip._vendor.packaging.version import Version
é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚIterableÚIteratorÚSequenceÚTypeVarÚUnioné   )Úcanonicalize_version)ÚInvalidVersionÚVersion)é   é
   )Ú	TypeGuard)ÚBaseSpecifierÚInvalidSpecifierÚ	SpecifierÚSpecifierSetc                 ó   • [         $ ©N)Ú__all__© ó    Úd/Users/stevendouglas/BidBrain/.venv/lib/python3.13/site-packages/pip/_vendor/packaging/specifiers.pyÚ__dir__r   0   s   € Ü€Nr   c               ó´   • [        U [        5      =(       aB    [        U 5      S:H  =(       a-    [        U S   [        5      =(       a    [        U S   [        5      $ )Né   r   r   )Ú
isinstanceÚtupleÚlenÚstr)Úspecs    r   Ú_validate_specr&   4   sI   € ä�4œÓ÷ 	%Ü�‹I˜‰N÷	%ä�t˜A‘w¤Ó$÷	%ô �t˜A‘w¤Ó$ð	r   c               ó8   • U S L =(       d    [        U [        5      $ r   )r!   Úbool)Úpres    r   Ú_validate_prer*   =   s   € Ø�$ˆ;×/œ* S¬$Ó/Ð/r   ÚTÚUnparsedVersionVar)Úboundz0.dev0zFinal[Version]Ú_MIN_VERSIONc                ó–   • [        U 5      nUS:”  a#  XS-
     S:X  a  US-  nUS:”  a  XS-
     S:X  a  M  U[        U 5      :X  a  U $ U SU $ )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)r#   )ÚreleaseÚends     r   Ú_trim_releaser2   J   s\   € ä
ˆg‹,€CØ
�‹'�g A™gÑ&¨!Ó+Øˆq‰ˆð �‹'�g A™gÑ&¨!Õ+àœS ›\Ó)ˆ7Ð<¨w°t¸¨}Ð<r   c                  ó\   • \ rS rSrSr\R                  " 5       r\R                  " 5       rSr	g)Ú_BoundaryKindéR   z5Where a boundary marker sits in the version ordering.r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚenumÚautoÚAFTER_LOCALSÚAFTER_POSTSÚ__static_attributes__r   r   r   r4   r4   R   s   † Ù?à—9’9“;€LØ—)’)“+ƒKr   r4   c                  óX   • \ rS rSrSrSrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSrg
)Ú_BoundaryVersionéY   aÙ  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                óP   • Xl         X l        [        UR                  5      U l        g r   )rE   rC   r2   r0   rD   )ÚselfrE   Úkinds      r   Ú__init__Ú_BoundaryVersion.__init__q   s   € ØŒØŒ
Ü -¨g¯o©oÓ >ˆÕr   c                óÔ  • U R                   nUR                  UR                  :X  a=  [        UR                  5      U R                  :X  a  UR
                  UR
                  :X  d  gU R                  [        R                  :X  a9  UR                  UR                  :H  =(       a    UR                  UR                  :H  $ UR                  UR                  :H  =(       d    UR                  SL$ )z6Is ``other`` a version that this boundary sorts above?FN)rE   Úepochr2   r0   rD   r)   rC   r4   r=   ÚpostÚdev)rG   ÚotherÚvs      r   Ú
_is_familyÚ_BoundaryVersion._is_familyv   s�   € à�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Ð%;Ð;r   c                óª   • [        U[        5      (       a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $ [        $ r   )r!   rA   rE   rC   ÚNotImplemented©rG   rO   s     r   Ú__eq__Ú_BoundaryVersion.__eq__…   s;   € Ü�eÔ-×.Ñ.Ø—<‘< 5§=¡=Ñ0×N°T·Z±ZÀ5Ç;Á;Ñ5NÐNÜÐr   c                óD  • [        U[        5      (       a`  U R                  UR                  :w  a  U R                  UR                  :  $ U R                  R                  UR                  R                  :  $ U R                  U5      (       + =(       a    U R                  U:  $ r   )r!   rA   rE   rC   ÚvaluerQ   rU   s     r   Ú__lt__Ú_BoundaryVersion.__lt__Š   sr   € Ü�eÔ-×.Ñ.Ø�|‰|˜uŸ}™}Ó,Ø—|‘| e§m¡mÑ3Ð3Ø—:‘:×#Ñ# e§k¡k×&7Ñ&7Ñ7Ð7Ø—?‘? 5Ó)Ô)×B¨d¯l©l¸UÑ.BÐBr   c                óD   • [        U R                  U R                  45      $ r   )ÚhashrE   rC   ©rG   s    r   Ú__hash__Ú_BoundaryVersion.__hash__‘   s   € Ü�T—\‘\ 4§:¡:Ð.Ó/Ð/r   c                ó~   • U R                   R                   SU R                  < SU R                  R                   S3$ )NÚ(z, Ú))Ú	__class__r6   rE   rC   Únamer^   s    r   Ú__repr__Ú_BoundaryVersion.__repr__”   s4   € Ø—.‘.×)Ñ)Ð*¨!¨D¯L©LÑ+;¸2¸d¿j¹j¿o¹oÐ=NÈaÐPÐPr   N)rE   r   rH   r4   ÚreturnÚNone)rO   r   rh   r(   ©rO   Úobjectrh   r(   )rO   z_BoundaryVersion | Versionrh   r(   ©rh   Úint©rh   r$   )r6   r7   r8   r9   r:   Ú	__slots__rI   rQ   rV   rZ   r_   rf   r?   r   r   r   rA   rA   Y   s.   † ñð( 9€Iô?ô
<ôô
Cô0÷Qr   rA   c                  óN   • \ rS rSrSrSrS
S jrSS jrSS jrSS jr	SS jr
Srg	)Ú_LowerBoundé˜   z²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.
©Ú	inclusiverE   c                ó   • Xl         X l        g r   ©rE   rt   ©rG   rE   rt   s      r   rI   Ú_LowerBound.__init__£   ó   € ØŒØ"�r   c                óª   • [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   ©r!   rq   rT   rE   rt   rU   s     r   rV   Ú_LowerBound.__eq__§   ó:   € Ü˜%¤×-Ñ-Ü!Ð!Ø�|‰|˜uŸ}™}Ñ,×R°·±À5Ç?Á?Ñ1RÐRr   c                ó8  • [        U[        5      (       d  [        $ U R                  c  UR                  S L$ UR                  c  gU R                  UR                  :w  a  U R                  UR                  :  $ U R                  =(       a    UR                  (       + $ )NFr{   rU   s     r   rZ   Ú_LowerBound.__lt__¬   st   € Ü˜%¤×-Ñ-Ü!Ð!à�<‰<ÑØ—=‘=¨Ð,Ð,Ø�=‰=Ñ ØØ�<‰<˜5Ÿ=™=Ó(Ø—<‘< %§-¡-Ñ/Ð/à�~‰~×5 e§o¡oÔ"5Ð5r   c                óD   • [        U R                  U R                  45      $ r   ©r]   rE   rt   r^   s    r   r_   Ú_LowerBound.__hash__¹   ó   € Ü�T—\‘\ 4§>¡>Ð2Ó3Ð3r   c                ó€   • U R                   (       a  SOSnSU R                  R                   SU U R                  < S3$ )NÚ[rb   Ú<Ú Ú>©rt   rd   r6   rE   ©rG   Úbrackets     r   rf   Ú_LowerBound.__repr__¼   s8   € ØŸŸ‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨W¨I°d·l±lÑ5EÀQÐGÐGr   N©rE   Ú_VersionOrBoundaryrt   r(   rh   ri   rj   )rO   rq   rh   r(   rl   rn   ©r6   r7   r8   r9   r:   ro   rI   rV   rZ   r_   rf   r?   r   r   r   rq   rq   ˜   ó)   † ñð )€Iô#ôSô
6ô4÷Hr   rq   c                  óN   • \ rS rSrSrSrS
S jrSS jrSS jrSS jr	SS jr
Srg	)Ú_UpperBoundéÁ   z°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.
rs   c                ó   • Xl         X l        g r   rv   rw   s      r   rI   Ú_UpperBound.__init__Ì   ry   r   c                óª   • [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   ©r!   r’   rT   rE   rt   rU   s     r   rV   Ú_UpperBound.__eq__Ð   r}   r   c                ó  • [        U[        5      (       d  [        $ U R                  c  gUR                  c  gU R                  UR                  :w  a  U R                  UR                  :  $ U R                  (       + =(       a    UR                  $ ©NFTr—   rU   s     r   rZ   Ú_UpperBound.__lt__Õ   sh   € Ü˜%¤×-Ñ-Ü!Ð!à�<‰<ÑØØ�=‰=Ñ ØØ�<‰<˜5Ÿ=™=Ó(Ø—<‘< %§-¡-Ñ/Ð/à—>‘>Ô!×5 e§o¡oÐ5r   c                óD   • [        U R                  U R                  45      $ r   r�   r^   s    r   r_   Ú_UpperBound.__hash__â   rƒ   r   c                ó€   • U R                   (       a  SOSnSU R                  R                   SU R                  < U S3$ )NÚ]rc   r†   r‡   rˆ   r‰   rŠ   s     r   rf   Ú_UpperBound.__repr__å   s8   € ØŸŸ‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨T¯\©\Ñ,<¸W¸IÀQÐGÐGr   Nr�   rj   )rO   r’   rh   r(   rl   rn   r�   r   r   r   r’   r’   Á   r�   r   r’   Fztuple[_VersionRange]Ú_FULL_RANGEc                óæ   • U R                   b  UR                   c  gU R                   UR                   :X  a$  U R                  =(       a    UR                  (       + $ U R                   UR                   :„  $ )zHTrue when the range defined by *lower* and *upper* contains no versions.Frv   )ÚlowerÚuppers     r   Ú_range_is_emptyr¥   ö   sQ   € à‡}�}Ñ §¡Ñ 5ØØ‡}�}˜Ÿ™Ó%Ø—O‘O×7¨¯©Ô8Ð8Ø�=‰=˜5Ÿ=™=Ñ(Ð(r   c                ó4  • / nS=p4U[        U 5      :  aƒ  U[        U5      :  at  X   u  pVX   u  px[        XW5      n	[        Xh5      n
[        Xš5      (       d  UR	                  Xš45        Xh:  a  US-  nOUS-  nU[        U 5      :  a  U[        U5      :  a  Mt  U$ )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )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³:Ó%=Ø!%Ñ!1Ñˆ
Ø#(Ñ#5Ñ ˆä�JÓ,ˆÜ�JÓ,ˆä˜u×,Ñ,Ø�M‰M˜5˜.Ô)ð Ó#Ø˜!‰O‰Jà˜1ÑˆKð ”s˜4“yÓ
  [´3°u³:Õ%=ð  €Mr   c                óŠ   • / U R                   SS QU R                   S   S-   P7n[        R                  " U R                  USS9$ )z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Néÿÿÿÿr   r   ©rL   r0   rN   )r0   r   Ú
from_partsrL   )rE   r0   s     r   Ú_next_prefix_dev0r¸     sC   € à>�—‘  Ð$Ð> g§o¡o°bÑ&9¸AÑ&=Ñ>€GÜ×Ò G§M¡M¸7ÈÑJÐJr   c                óV   • [         R                  " U R                  U R                  SS9$ )z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.r   r¶   )r   r·   rL   r0   ©rE   s    r   Ú
_base_dev0r»     s    € ä×Ò G§M¡M¸7¿?¹?ÐPQÑRÐRr   c                ól   • [        U [        5      (       d   [        U 5      n U $ U $ ! [         a     g f = fr   )r!   r   r   rº   s    r   Ú_coerce_versionr½   $  s=   € Ü�gœw×'Ñ'ð	Ü˜gÓ&ˆGð €Nˆ7€Nøô ó 	Ùð	ús   —& ¦
3²3c                ó>   • U R                   c  U $ U R                  S S9$ )N)Úlocal)r¿   Ú__replace__rº   s    r   Ú_public_versionrÁ   -  s%   € Ø‡}�}ÑØˆØ×Ñ TÐÐ*Ð*r   c                ó$   • U R                  SSSS9$ )zqThe 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©rM   rN   r¿   ©rÀ   rº   s    r   Ú
_post_baserÅ   3  s   € ð
 ×Ñ D¨d¸$ÐÐ?Ð?r   c                ó"   • U R                  SSS9$ )zREarliest pre-release of *version*.

1.2 -> 1.2.dev0, 1.2.post1 -> 1.2.post1.dev0.
r   N©rN   r¿   rÄ   rº   s    r   Ú_earliest_prereleaserÈ   ;  s   € ð
 ×Ñ 1¨DÐÐ1Ð1r   c                ó4  • U c  g[        U [        5      (       a\  U R                  nUR                  (       a  UR	                  SSSS9$ UR
                  b  UR
                  S-   OSnUR	                  USS9$ U R                  (       d  U $ U R	                  SSSS9$ )z:Smallest non-pre-release version at or above *v*, or None.N)r)   rN   r¿   r   r   )rM   r¿   )r!   rA   rE   Úis_prereleaserÀ   rM   )rP   ÚinnerÚks      r   Ú_nearest_non_prereleaserÍ   C  s•   € ð 	�yØÜ�!Ô%×&Ñ&Ø—	‘	ˆØ××à×$Ñ$¨°4¸tÐ$ÐDÐDð !&§
¡
Ñ 6ˆU�Z‰Z˜!Š^¸AˆØ× Ñ  a¨tÐ Ð4Ð4Ø�?�?Øˆà�=‰=˜T t°4ˆ=Ð8Ð8r   c                  ó   • \ rS rSrSrSrg)r   iX  zç
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'
r   N)r6   r7   r8   r9   r:   r?   r   r   r   r   r   X  s   † ôr   r   c                  óè  • \ rS rSrSrSr\SS j5       r\R                  SS j5       r
\R                  SS j5       r\R                  SS j5       r\\R                  SS j5       5       r\R                  SS	 j5       r\R                  SSS jj5       r\R"                    S       SS jj5       r\R"                    S       SS jj5       r\R                    S       SS jj5       rSrg
)r   id  r   )Ú_strc                ó   • [        U 5      $ )z Internal property for match_args©r$   r^   s    r   rÐ   ÚBaseSpecifier._strh  s   € ô �4‹yÐr   c                ó   • g)zv
Returns the str representation of this Specifier-like object. This
should be representative of the Specifier itself.
Nr   r^   s    r   Ú__str__ÚBaseSpecifier.__str__m  ó   � r   c                ó   • g)z6
Returns a hash value for this Specifier-like object.
Nr   r^   s    r   r_   ÚBaseSpecifier.__hash__t  r×   r   c                ó   • g)z‹
Returns a boolean representing whether or not the two Specifier-like
objects are equal.

:param other: The other object to check against.
Nr   rU   s     r   rV   ÚBaseSpecifier.__eq__z  r×   r   c                ó   • g)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.
Nr   r^   s    r   ÚprereleasesÚBaseSpecifier.prereleasesƒ  r×   r   c                ó   • g)zASetter for :attr:`prereleases`.

:param value: The value to set.
Nr   ©rG   rY   s     r   rÝ   rÞ   Œ  r×   r   Nc                ó   • g)zB
Determines if the given item is contained within this specifier.
Nr   ©rG   ÚitemrÝ   s      r   ÚcontainsÚBaseSpecifier.contains“  r×   r   c                ó   • g r   r   ©rG   ÚiterablerÝ   Úkeys       r   ÚfilterÚBaseSpecifier.filter™  ó   € ð (+r   c                ó   • g r   r   rç   s       r   rê   rë   ¡  ó   € ð r   c                ó   • g)z}
Takes an iterable of items and filters them so that only items which
are contained within this specifier are allowed in it.
Nr   rç   s       r   rê   rë   ©  r×   r   rn   rl   rj   ©rh   úbool | None)rY   r(   rh   ri   r   )rã   r$   rÝ   rñ   rh   r(   ©N.©rè   zIterable[UnparsedVersionVar]rÝ   rñ   ré   ri   rh   zIterator[UnparsedVersionVar]©rè   zIterable[T]rÝ   rñ   ré   zCallable[[T], UnparsedVersion]rh   zIterator[T]©NN©rè   úIterable[Any]rÝ   rñ   ré   ú'Callable[[Any], UnparsedVersion] | Nonerh   úIterator[Any])r6   r7   r8   r9   ro   Ú__match_args__ÚpropertyrÐ   ÚabcÚabstractmethodrÕ   r_   rV   rÝ   Úsetterrä   ÚtypingÚoverloadrê   r?   r   r   r   r   r   d  s–  † Ø€IØ€Nàóó ðð 	×Ñóó ðð 	×Ñóó ðð
 	×Ñóó ðð Ø×Ñóó ó ðð ×Ñóó ðð 	×Ñõó ðð
 ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ô+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
ôó ðð 	×Ñð $(Ø7;ð		àð	ð !ð	ð 5ð		ð
 
ô	ó ó	r   r   )Ú	metaclassc            	      ó®  • \ rS rSr% SrSrSr\R                  " S\-   S-   \R                  \R                  -  5      rSSSS	S
SSSS.rS\S'   S2S3S jjrS4S jrS5S jrS6S jrS7S jrS7S jr\S8S j5       r\R,                  S9S j5       rS:S jrS;S jr\S<S j5       r\S<S j5       rS<S jrS<S jr\S=S  j5       rS>S! jrS?S" jrS@S# jr SAS$ jr!SBS% jr"SAS& jr#SAS' jr$SAS( jr%SAS) jr&SCS* jr'SCS+ jr(SDS, jr)SES- jr*SFSGS. jjr+\,RZ                    SH       SIS/ jj5       r.\,RZ                    SH       SJS0 jj5       r.  SK       SLS1 jjr.Sr/g)Mr   i¶  aÉ  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 pip._vendor.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)ú~=ú==ú!=ú<=ú>=r†   rˆ   ú===r   Ú
_operatorsNc                ó®  • U R                   R                  U5      (       d  [        SU< 35      eUR                  5       nUR	                  S5      (       a  USS USS R                  5       pCOEUR	                  S5      (       a  USS USS R                  5       pCOUSS USS R                  5       pCX44U l        X l        SU l        SU l        SU l	        g)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).
zInvalid specifier: r  Nr   )r  r  r  r  r  r    r   )
Ú_regexÚ	fullmatchr   ÚstripÚ
startswithr  r  r  r  r  )rG   r%   rÝ   ÚoperatorrE   s        r   rI   ÚSpecifier.__init__=  sÔ   € ð �{‰{×$Ñ$ T×*Ñ*Ü"Ð%8¸¹Ð#AÓBÐBà�z‰z‹|ˆØ�?‰?˜5×!Ñ!Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:‘gØ�_‰_Ð;×<Ñ<Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:‘gà $ R a ¨$¨q¨r¨(¯.©.Ó*:�gà'/Ð&9ˆŒ
ð (Ôð :>ˆÔð >BˆÔð 8<ˆ�r   c                ó’   • U R                   b"  U R                   S   U:X  a  U R                   S   $ [        U5      nUc  gX4U l         U$ )zDOne element cache, as only one spec Version is needed per Specifier.Nr   r   )r  r½   )rG   rE   Úversion_specifiers      r   Ú_get_spec_versionÚSpecifier._get_spec_versionc  sV   € à×ÑÑ)¨d×.@Ñ.@ÀÑ.CÀwÓ.NØ×%Ñ% aÑ(Ð(ä+¨GÓ4ÐØÑ$Øà%Ð9ˆÔØ Ð r   c                ó2   • U R                  U5      nUc   eU$ )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   )rG   rE   Úspec_versions      r   Ú_require_spec_versionÚSpecifier._require_spec_versiono  s&   € ð ×-Ñ-¨gÓ6ˆØÑ'Ð'Ð'ØÐr   c                ó  • U R                   b  U R                   $ U R                  nU R                  nUS:X  a  [        U l         [        $ UR	                  S5      (       a  U R                  X5      nOU R                  X5      nX0l         U$ )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  rE   r¡   ÚendswithÚ_wildcard_rangesÚ_standard_ranges)rG   ÚopÚver_strr¬   s       r   Ú
_to_rangesÚSpecifier._to_rangesy  sy   € ð �<‰<Ñ#Ø—<‘<Ðà�]‰]ˆØ—,‘,ˆà�‹;Ü&ˆDŒLÜÐà×Ñ˜D×!Ñ!Ø×*Ñ*¨2Ó7‰Fà×*Ñ*¨2Ó7ˆFàŒØˆr   c                óÜ   • U R                  US S 5      n[        U5      n[        U5      nUS:X  a  [        US5      [	        US5      4/$ [
        [	        US5      4[        US5      [        4/$ )Néþÿÿÿr  TF)r$  r»   r¸   rq   r’   Ú_NEG_INFÚ_POS_INF)rG   r+  r,  Úbaser£   r¤   s         r   r)  ÚSpecifier._wildcard_ranges‘  sy   € à×)Ñ)¨'°#°2¨,Ó7ˆÜ˜4Ó ˆÜ! $Ó'ˆØ�‹:Ü  ¨Ó-¬{¸5À%Ó/HÐIÐJÐJô ”{ 5¨%Ó0Ð1Ü˜ Ó%¤xÐ0ð
ð 	
r   c                ó,  • U R                  U5      nUS:X  a  [        US5      [        4/$ US:X  a+  [        [	        [        U[        R                  5      S5      4/$ US:X  a¦  UR                  b0  UR                  UR                  S-   S S9n[        US5      [        4/$ UR                  b1  UR                  UR                  S-   SS S9n[        US5      [        4/$ [        [        U[        R                  5      S	5      [        4/$ US
:X  aB  UR                  (       a  UOUR                  SS S9nU[        ::  a  / $ [        [	        US	5      4/$ SU;   n[        U[        R                  5      nU(       a  UOUnUS:X  a  [        US5      [	        US5      4/$ US:X  a$  [        [	        US	5      4[        US	5      [        4/$ US:X  a>  UR                  UR                  S S S9n	[        US5      [	        [        U	5      S	5      4/$ [!        SU< 35      e)Nr  Tr  rˆ   r   rÇ   r   rÃ   Fr†   Ú+r  r  r  rµ   )r0   úUnknown operator: )r$  rq   r2  r1  r’   rA   r4   r=   rN   rÀ   rM   r>   rÊ   r.   r0   r¸   Ú
ValueError)
rG   r+  r,  rP   Ú	lower_verr-   Ú	has_localÚafter_localsr¤   Úprefixs
             r   r*  ÚSpecifier._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Ð5r   c                óÚ   • U R                   b  U R                   $ U R                  u  pUS:X  a  gUS:X  a  UR                  S5      (       a  gU R                  U5      nUc  g UR                  $ )Nr  Fr  r'  )r  r  r(  r   rÊ   )rG   r  Úversion_strrE   s       r   rÝ   ÚSpecifier.prereleasesÜ  sz   € ð ×ÑÑ(Ø×$Ñ$Ð$ð !%§
¡
ÑˆØ�tÓØð �tÓ × 4Ñ 4°T× :Ñ :Øð ×(Ñ(¨Ó5ˆØ‰?Øð ×$Ñ$Ð$r   c                ó   • Xl         g r   )r  rà   s     r   rÝ   r@  ø  s   € à!Õr   c                ó2   • U R                   U R                  4$ r   )r  r  r^   s    r   Ú__getstate__ÚSpecifier.__getstate__ü  s   € ð —
‘
˜D×-Ñ-Ð.Ð.r   c                ó´  • S U l         S U l        S U l        [        U[        5      (       a»  [        U5      S:X  a1  Uu  p#[        U5      (       a  [        U5      (       a  X l        X0l	        g [        U5      S:X  al  [        US   [        5      (       aT  Uu  pEUR                  S5      nUR                  SS5      n[        U5      (       a  [        U5      (       a  X l        X0l	        g [        U[        5      (       aP  UR                  S5      nUR                  SS5      n[        U5      (       a  [        U5      (       a  X l        X0l	        g [        SU< 35      e)Nr    r   r  r  ÚinvalidzCannot restore Specifier from )r  r  r  r!   r"   r#   r&   r*   r  r  ÚdictÚgetÚ	TypeError)rG   Ústater%   rÝ   Ú_Ú	slot_dicts         r   Ú__setstate__ÚSpecifier.__setstate__  s   € à!ˆÔØ#ˆÔØˆŒä�eœU×#Ñ#Ü�5‹z˜Q‹à$)Ñ!�Ü! $×'Ñ'¬M¸+×,FÑ,FØ!%”JØ(3Ô%ØÜ�5‹z˜Q‹¤:¨e°A©h¼×#=Ñ#=à$‘�Ø —}‘} WÓ-�Ø'Ÿm™m¨N¸IÓF�Ü! $×'Ñ'¬M¸+×,FÑ,FØ!%”JØ(3Ô%ØÜ�eœT×"Ñ"à—9‘9˜WÓ%ˆDØŸ)™) N°IÓ>ˆKÜ˜d×#Ñ#¬°k×(BÑ(BØ!”
Ø$/Ô!ØäÐ8¸¹	ÐBÓCÐCr   c                ó    • U R                   S   $ )zHThe operator of this specifier.

>>> Specifier("==1.2.3").operator
'=='
r   ©r  r^   s    r   r  ÚSpecifier.operator$  ó   € ð �z‰z˜!‰}Ðr   c                ó    • U R                   S   $ )zIThe version of this specifier.

>>> Specifier("==1.2.3").version
'1.2.3'
r   rP  r^   s    r   rE   ÚSpecifier.version-  rR  r   c                ó’   • U R                   b  SU R                  < 3OSnSU R                  R                   S[	        U 5      < U S3$ )a  A 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=Ú r†   rb   ú)>©r  rÝ   rd   r6   r$   ©rG   r)   s     r   rf   ÚSpecifier.__repr__6  sU   € ð × Ñ Ñ,ð ˜T×-Ñ-Ñ0Ñ1àð 	ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y©M¸#¸¸bÐAÐAr   c                ó4   • SR                   " U R                  6 $ )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  r^   s    r   rÕ   ÚSpecifier.__str__H  s   € ð �}Š}˜dŸj™jÐ)Ð)r   c                óœ   • U R                   u  pUS:X  d  UR                  S5      (       a  X4$ U R                  U5      n[        X1S:g  S9nX4$ )Nr  r'  r  ©Ústrip_trailing_zero)r  r(  r$  r   )rG   r  rE   r#  Úcanonical_versions        r   Ú_canonical_specÚSpecifier._canonical_specR  s]   € à ŸJ™JÑˆØ�uÓ × 0Ñ 0°× 6Ñ 6ØÐ$Ð$à×1Ñ1°'Ó:ˆä0Ø¸4Ñ/?ñ
Ðð Ð*Ð*r   c                ó,   • [        U R                  5      $ r   )r]   rc  r^   s    r   r_   ÚSpecifier.__hash__`  s   € Ü�D×(Ñ(Ó)Ð)r   c                ó  • [        U[        5      (       a   U R                  [        U5      5      nO [        XR                  5      (       d  [        $ U R
                  UR
                  :H  $ ! [         a	    [        s $ f = f)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$   rd   r   rT   rc  rU   s     r   rV   ÚSpecifier.__eq__c  sm   € ô& �eœS×!Ñ!ð&ØŸ™¤s¨5£zÓ2‘ô ˜E§>¡>×2Ñ2Ü!Ð!à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ó &Ü%Ò%ð&ús   —A+ Á+A>Á=A>c                ó>   • [        U SU R                  U    35      nU$ )NÚ	_compare_)Úgetattrr  )rG   r+  Úoperator_callables      r   Ú_get_operatorÚSpecifier._get_operator€  s+   € Ü.5Ø�I˜dŸo™o¨bÑ1Ð2Ð3ó/
Ðð !Ð r   c           
     óÐ   • [        [        [        R                  " [        [        U5      5      5      S S 5      nUS-  nU R                  X5      =(       a    U R                  X5      $ )Nrµ   r'  )Ú_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitÚ_compare_greater_than_equalÚ_compare_equal)rG   Úprospectiver%   r<  s       r   Ú_compare_compatibleÚSpecifier._compare_compatible†  s`   € ô Ü”×$Ò$¤^´^ÀDÓ5IÓJÓKÈCÈRÐPó
ˆð
 	�$‰ˆà×0Ñ0°ÓC÷ 
Ø×Ñ Ó4ð	
r   c                óz   • U R                   nUc+  [        USS SS9n[        U5      nU[        U5      4nX l         U$ )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)
Nr0  Fr`  )r  r   ru  Ú_numeric_prefix_len)rG   r%   Úwildcard_splitÚ
normalizedÚ
split_specs        r   Ú_get_wildcard_splitÚSpecifier._get_wildcard_splitš  sM   € ð ×-Ñ-ˆØÑ!Ü-¨d°3°B¨iÈUÑSˆJÜ'¨
Ó3ˆJØ(Ô*=¸jÓ*IÐJˆNØ#1Ô ØÐr   c                ó,  • UR                  S5      (       aN  U R                  U5      u  p4[        [        U5      SS9n[	        U5      n[        Xd5      nUS [        U5       nXƒ:H  $ U R                  U5      n	U	R                  (       d  [        U5      nX:H  $ )Nr'  Fr`  )	r(  r€  r   rÁ   ru  Ú	_left_padr#   r$  r¿   )
rG   rx  r%   r  Úspec_numeric_lenÚnormalized_prospectiveÚsplit_prospectiveÚpadded_prospectiveÚshortened_prospectiver#  s
             r   rw  ÚSpecifier._compare_equalª  s¤   € à�=‰=˜×ÑØ+/×+CÑ+CÀDÓ+IÑ(ˆJô &:Ü Ó,À%ñ&Ð"ô !/Ð/EÓ FÐô "+Ð+<Ó!OÐð
 %7Ð7H¼¸Z»Ð$IÐ!à(Ñ6Ð6ð  ×5Ñ5°dÓ;ˆLð
  ×%×%Ü-¨kÓ:�àÑ.Ð.r   c                ó.   • U R                  X5      (       + $ r   )rw  ©rG   rx  r%   s      r   Ú_compare_not_equalÚSpecifier._compare_not_equalÎ  s   € Ø×&Ñ& {Ó9Ô9Ð9r   c                ó<   • [        U5      U R                  U5      :*  $ r   ©rÁ   r$  r‹  s      r   Ú_compare_less_than_equalÚ"Specifier._compare_less_than_equalÑ  ó   € ô ˜{Ó+¨t×/IÑ/IÈ$Ó/OÑOÐOr   c                ó<   • [        U5      U R                  U5      :¬  $ r   r�  r‹  s      r   rv  Ú%Specifier._compare_greater_than_equal×  r’  r   c                ó–   • U R                  U5      nX:  d  gUR                  (       d!  UR                  (       a  U[        U5      :¼  a  ggrš   )r$  rÊ   rÈ   ©rG   rx  Úspec_strr%   s       r   Ú_compare_less_thanÚSpecifier._compare_less_thanÝ  sI   € ð ×)Ñ)¨(Ó3ˆð
 Ó!Øð
 ×"×"Ø×)×)ØÔ3°DÓ9Ó9àð
 r   c                óÐ   • U R                  U5      nX:”  d  gUR                  (       d!  UR                  (       a  [        U5      U:X  a  gUR                  b  [	        U5      U:X  a  ggrš   )r$  Úis_postreleaserÅ   r¿   rÁ   r–  s       r   Ú_compare_greater_thanÚSpecifier._compare_greater_thanö  se   € ð ×)Ñ)¨(Ó3ˆð
 Ó!Øð
 ×#×#Ø×*×*Ü˜;Ó'¨4Ó/àð ×ÑÑ(¬_¸[Ó-IÈTÓ-QØð
 r   c                óh   • [        U5      R                  5       [        U5      R                  5       :H  $ r   ©r$   r£   r‹  s      r   Ú_compare_arbitraryÚSpecifier._compare_arbitrary  s&   € Ü�;Ó×%Ñ%Ó'¬3¨t«9¯?©?Ó+<Ñ<Ð<r   c                ó$   • U R                  U5      $ )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ä   ©rG   rã   s     r   Ú__contains__ÚSpecifier.__contains__  ó   € ð& �}‰}˜TÓ"Ð"r   c           	     óH   • [        [        U R                  U/US95      5      $ )aÓ  Return 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(   rq  rê   râ   s      r   rä   ÚSpecifier.contains.  s#   € ô2 ”D˜Ÿ™ d V¸˜ÐEÓFÓGÐGr   c                ó   • g r   r   rç   s       r   rê   ÚSpecifier.filterI  rì   r   c                ó   • g r   r   rç   s       r   rê   r¬  Q  rî   r   c              #  ó¬  #   • / nSnUb  UOU R                   nU R                  U R                  5      nU Hò  n[        Uc  UOU" U5      5      n	Sn
U	c5  U R                  S:X  a$  U R	                  X€R
                  5      (       a  Uv •  OJU R                  S:X  a(  U R	                  Uc  UOU" U5      U R
                  5      n
OU" X�R
                  5      n
U
(       d  M¦  U	c  M«  U	R                  (       a  U(       a  SnUv •  MË  Ub  MÐ  U R                  SLd  Má  UR                  U5        Mô     U(       d  Uc  U R                  SLa  U Sh  v•N   gggg N7f)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Ý   rm  r  r½   r   rE   rÊ   r  r©   )rG   rè   rÝ   ré   Úprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesrl  rE   Úparsed_versionÚmatchs              r   rê   r¬  Y  sQ  é € ðF  "ÐØ %Ðð 'Ñ2‰K¸×8HÑ8Hð 	ð
 !×.Ñ.¨t¯}©}Ó=Ðó  ˆGÜ,¸¹©WÉÈWËÓVˆNØˆEØÑ%à—=‘= EÓ)¨d×.EÑ.EØŸ\™\÷/ñ /ð "’MøØ—‘ %Ó'Ø×/Ñ/Ø"™{‘G±°G³¸d¿l¹ló‘ñ *¨.¿,¹,ÓG�çˆu˜Ó3à%×3×3Ö7JØ,0Ð)Ø!”Mà Ó(¨T×->Ñ->ÀeÔ-KØ(×/Ñ/°Ö8ñ/  ö8 &ØÑ#Ø×!Ñ!¨Ò.à+×+Ñ+ð /ð $ð &ñ ,ùs*   ‚CEÃEÃ !EÄEÄ3EÅ	EÅ
	E©rW  N)r%   r$   rÝ   rñ   rh   ri   )rE   r$   rh   úVersion | None)rE   r$   rh   r   ©rh   úSequence[_VersionRange])r+  r$   r,  r$   rh   úlist[_VersionRange]rð   ©rY   rñ   rh   ri   )rh   z#tuple[tuple[str, str], bool | None]©rJ  rk   rh   ri   rn   )rh   ztuple[str, str]rl   rj   )r+  r$   rh   ÚCallableOperator)rx  r   r%   r$   rh   r(   )r%   r$   rh   ztuple[list[str], int])rx  r   r—  r$   rh   r(   )rx  zVersion | strr%   r$   rh   r(   )rã   zstr | Versionrh   r(   r   )rã   ÚUnparsedVersionrÝ   rñ   rh   r(   rò   ró   rô   rõ   rö   )0r6   r7   r8   r9   r:   ro   Ú_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEr  r  Ú__annotations__rI   r   r$  r-  r)  r*  rû   rÝ   rþ   rC  rM  r  rE   rf   rÕ   rc  r_   rV   rm  ry  r€  rw  rŒ  r�  rv  r˜  rœ  r   r¥  rä   rÿ   r   rê   r?   r   r   r   r   r   ¶  s#  ‡ ñð&€IðZÐðx �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,ð O,r   r   z([0-9]+)((?:a|b|c|rc)[0-9]+)c              #  óp  #   • / n/ nSnU  H�  n[        Uc  UOU" U5      5      nUc0  U(       a  Uv •  O"UR                  U5        UR                  U5        ML  UR                  (       d  U(       d  U Sh  v•N   SnUv •  Mv  U(       a  M  UR                  U5        M’     U(       d  U Sh  v•N   gg N= N7f)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*   ‚A2B6Á4B2Á5B6Â
!B6Â+B4Â,B6Â4B6c                ó2  • / nU R                  S5      u  p#nUR                  U=(       d    S5        UR                  S5       HQ  n[        R	                  U5      nU(       a!  UR                  UR                  5       5        M@  UR                  U5        MS     U$ )a  Split 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)rE   r¬   rL   rK  Úrestrã   r³  s          r   ru  ru  Ø  sw   € ð €Fà×'Ñ'¨Ó,�N€EˆdØ
‡M�M�%—,˜3Ôà—
‘
˜3–ˆÜ×'Ñ'¨Ó-ˆÞØ�M‰M˜%Ÿ,™,›.Ö)à�M‰M˜$Öñ  ð €Mr   c                ó4   • U tpU SSR                  U5       3$ )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)Ú
componentsrL   rÒ  s      r   rp  rp  î  s%   € ð €L€EØˆW�A�c—h‘h˜t“nÐ%Ð&Ð&r   c                ó8   ^ • [        U 4S jS 5       5      (       + $ )Nc              3  óF   >#   • U  H  nTR                  U5      v •  M     g 7fr   )r  )Ú.0r<  Úsegments     €r   Ú	<genexpr>Ú!_is_not_suffix.<locals>.<genexpr>ú  s#   øé € ð Ú1P vˆ×Ñ˜6×"Ð"Ò1Pùs   ƒ!)rN   ÚaÚbÚrcrM   )Úany)rÙ  s   `r   rt  rt  ù  s"   ø€ Üô Ù1Póó ô ð r   c                óV   • SnU  H   nUR                  5       (       d    U$ US-  nM"     U$ )zwCount leading numeric components in a :func:`_version_split` result.

>>> _numeric_prefix_len(["0", "1", "2", "a1"])
3
r   r   )Úisdigit)rÎ  ÚcountrÙ  s      r   r|  r|  ÿ  s:   € ð €EÛˆØ�‰× Ñ Øà€Lð 	�‰
Šñ ð €Lr   c                óR   • [        U 5      nX-
  nUS::  a  U $ / U SU QS/U-  QXS Q$ )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']
r   NrË  )r|  )rÎ  Útarget_numeric_lenÚnumeric_lenÚ
pad_neededs       r   rƒ  rƒ    sJ   € ô & eÓ,€KØ#Ñ1€JØ�QƒØˆØNˆU�<�KÐ ÐN S E¨JÑ$6ÐN¸%ÀÐ:MÐNÐNr   c                óÔ   • U u  pnUS:X  a  UR                  S5      (       d  S$ S$ US;   a  gUS:X  a  gUS:X  a  UR                  S5      (       d  S	$ S
$ US:X  a  g[        SU< 35      e)a,  Sort 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  r'  r   r    )r  r  rˆ   r†   r   r  r  r   é   r  r7  )r(  r8  )Úop_entryrK  Úverr+  s       r   Ú_operator_costrë    s€   € ð �J€AˆBØ	ˆTƒzØŸ™ T×*Ñ*ˆqÐ1°Ð1Ø	Ð#Ó#ØØ	ˆTƒzØØ	ˆTƒzØŸ™ T×*Ñ*ˆqÐ1°Ð1Ø	ˆUƒ{Øä
Ð)¨"©Ð0Ó
1Ð1r   c                  óä  • \ rS rSrSrSr  S     SS jjrSS jr\SS j5       r	\	R                  S S j5       r	S!S	 jrS"S
 jrS#S jrS#S jrS$S jrS%S jrS&S jrS$S jrS'S jrS(S jrS)S jrS)S jrS)S jrS*S jr  S+       S,S jjr\R6                    S-       S.S jj5       r\R6                    S-       S/S jj5       r  S+       S0S jjr S1       S2S jjrSrg)3r   i6  aU  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                óØ  • [        U[        5      (       an  UR                  S5       Vs/ s H)  o3R                  5       (       d  M  UR                  5       PM+     nn[	        [        [        U5      5      U l        SU;   U l        O1[	        U5      U l        [        S U R                   5       5      U l        [        U R                  5      S:*  U l        SU l        X l        SU l        gs  snf )aL  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  c              3  ó>   #   • U  H  nS [        U5      ;   v •  M     g7f©r  NrÒ   ©rØ  Úss     r   rÚ  Ú(SpecifierSet.__init__.<locals>.<genexpr>t  s   é € Ð%Kº{¸! e¬s°1«v¦oº{ùó   ‚r   N)r!   r$   rÎ  r  r"   Úmapr   rñ  rî  rß  r#   rí  rð  r  rï  )rG   Ú
specifiersrÝ   r÷  Úsplit_specifierss        r   rI   ÚSpecifierSet.__init__R  s½   € ô, �j¤#×&Ñ&ð 4>×3CÑ3CÀCÔ3HÓVÒ3H¨aÏGÉGÏI£	 §¡¦	Ñ3HÐÐVä16´s¼9ÐFVÓ7WÓ1XˆDŒKà"'¨:Ñ"5ˆDÕä 
Ó+ˆDŒKô #&Ñ%K¸t¿{º{Ó%KÓ"KˆDÔä! $§+¡+Ó.°!Ñ3ˆÔØMQˆÔð (Ôà.2ˆÕùò%  Ws   ©C'ÁC'c           	     óØ   • U R                   (       dN  [        [        R                  [	        U R
                  [        S95      5      U l        SU l         SU l        SU l        U R
                  $ )zBDeduplicate, sort, and cache specs for order-sensitive operations.©ré   TN)	rí  r"   rG  ÚfromkeysÚsortedrñ  r$   rð  rï  r^   s    r   Ú_canonical_specsÚSpecifierSet._canonical_specs  sM   € à×"×"Ü¤§¡¬f°T·[±[ÄcÑ.JÓ KÓLˆDŒKØ"&ˆDÔØ!%ˆDÔØ%)ˆDÔ"Ø�{‰{Ðr   c                óž   • U R                   b  U R                   $ U R                  (       d  g [        S U R                   5       5      (       a  gg )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7fr   r©  rö  s     r   rÚ  Ú+SpecifierSet.prereleases.<locals>.<genexpr>—  s   é € Ð2¢k �}Ž}¢kùó   ‚T)r  rñ  rß  r^   s    r   rÝ   ÚSpecifierSet.prereleasesˆ  sE   € ð ×ÑÑ(Ø×$Ñ$Ð$ð
 �{�{Øô Ñ2 d§k¢kÓ2×2Ñ2Øàr   c                ó   • Xl         S U l        g r   )r  rï  rà   s     r   rÝ   r  œ  s   € à!ÔØ!%ˆÕr   c                ó2   • U R                   U R                  4$ r   )rñ  r  r^   s    r   rC  ÚSpecifierSet.__getstate__¡  s   € ð —‘˜T×.Ñ.Ð/Ð/r   c                óL  • S U l         S U l        [        U[        5      (       Ga‡  [	        U5      S:X  aw  Uu  p#[        U[        5      (       a^  [        S U 5       5      (       aG  [        U5      (       a7  X l        X0l        [	        U5      S:*  U l	        [        S U 5       5      U l        g [	        U5      S:X  aò  [        US   [        5      (       aÚ  Uu  pEUR                  SS5      nUR                  S5      n[        U[        5      (       a  [        [        U[         S95      n[        U[        5      (       ar  [        S	 U 5       5      (       a[  [        U5      (       aK  X l        X0l        [	        U R                  5      S:*  U l	        [        S
 U R                   5       5      U l        g [        U[        5      (       aÖ  UR                  SS5      nUR                  S5      n[        U[        5      (       a  [        [        U[         S95      n[        U[        5      (       ar  [        S U 5       5      (       a[  [        U5      (       aK  X l        X0l        [	        U R                  5      S:*  U l	        [        S U R                   5       5      U l        g [#        SU< 35      e)Nr    c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr   ©r!   r   rö  s     r   rÚ  Ú,SpecifierSet.__setstate__.<locals>.<genexpr>²  ó   é € ÐDºe¸œJ q¬)×4Ð4ºeùó   ‚r   c              3  ó>   #   • U  H  nS [        U5      ;   v •  M     g7frõ  rÒ   rö  s     r   rÚ  r  ¸  s   é € Ð-MÂuÀ!¨e´s¸1³v®oÂuùrù  rñ  r   r  rÿ  c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr   r  rö  s     r   rÚ  r  Ä  r  r  c              3  ó>   #   • U  H  nS [        U5      ;   v •  M     g7frõ  rÒ   rö  s     r   rÚ  r  Ê  s   é € Ð-SÂ{À!¨e´s¸1³v®oÂ{ùrù  c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr   r  rö  s     r   rÚ  r  Õ  s   é € Ð@º%°Qœ
 1¤i×0Ð0º%ùr  c              3  ó>   #   • U  H  nS [        U5      ;   v •  M     g7frõ  rÒ   rö  s     r   rÚ  r  Û  s   é € Ð)OÂ;¸a¨%´3°q³6®/Â;ùrù  z!Cannot restore SpecifierSet from )rð  rï  r!   r"   r#   Úallr*   rñ  r  rí  rß  rî  rG  rH  Ú	frozensetr  r$   rI  )rG   rJ  ÚspecsrÝ   rK  rL  s         r   rM  ÚSpecifierSet.__setstate__§  s  € à!ˆÔØ!%ˆÔä�eœU×#Ò#Ü�5‹z˜Q‹à%*Ñ"�ä˜u¤e×,Ñ,ÜÑD¹eÓD×DÑDÜ% k×2Ñ2à"'”KØ(3Ô%Ü*-¨e«*¸©/�DÔ'Ü*-Ñ-MÁuÓ-MÓ*M�DÔ'ØÜ�5‹z˜Q‹¤:¨e°A©h¼×#=Ñ#=à$‘�Ø!Ÿ™ h°Ó3�Ø'Ÿm™m¨NÓ;�ä˜e¤Y×/Ñ/Ü!¤&¨´CÑ"8Ó9�Eä˜u¤e×,Ñ,ÜÑD¹eÓD×DÑDÜ% k×2Ñ2à"'”KØ(3Ô%Ü*-¨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ÐFr   c                ó’   • U R                   b  SU R                  < 3OSnSU R                  R                   S[	        U 5      < U S3$ )aÆ  A 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)>
rV  rW  r†   rb   rX  rY  rZ  s     r   rf   ÚSpecifierSet.__repr__à  sU   € ð × Ñ Ñ,ð ˜T×-Ñ-Ñ0Ñ1àð 	ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y©M¸#¸¸bÐAÐAr   c                óN   • SR                  S U R                  5        5       5      $ )a6  A 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ó  c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr   rÒ   rö  s     r   rÚ  Ú'SpecifierSet.__str__.<locals>.<genexpr>   s   é € Ð@Ò(? 1œ˜AŸ˜Ò(?ùr  )rÔ  r  r^   s    r   rÕ   ÚSpecifierSet.__str__õ  s"   € ð �x‰xÑ@¨×(=Ñ(=Ô(?Ó@Ó@Ð@r   c                ó4   • [        U R                  5       5      $ r   )r]   r  r^   s    r   r_   ÚSpecifierSet.__hash__  s   € Ü�D×)Ñ)Ó+Ó,Ð,r   c                ó$  • [        U[        5      (       a  [        U5      nO[        U[        5      (       d  [        $ [        5       nU R                  UR                  -   Ul        [        UR                  5      S:*  Ul        U R                  =(       d    UR                  Ul        SUl        U R                  b  U R                  UR                  :X  a  UR                  Ul	        U$ UR                  c  U R                  Ul	        U$ [        S5      e)aR  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$   r   rT   rñ  r#   rí  rî  rð  r  r8  )rG   rO   Ú	specifiers      r   Ú__and__ÚSpecifierSet.__and__  sð   € ô �eœS×!Ñ!Ü  Ó'‰EÜ˜E¤<×0Ñ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óð r   c                óÚ   • [        U[        [        45      (       a  [        [        U5      5      nO[        U[        5      (       d  [        $ U R                  5       UR                  5       :H  $ )a1  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$   r   r   rT   r  rU   s     r   rV   ÚSpecifierSet.__eq__&  sT   € ô& �eœc¤9Ð-×.Ñ.Ü ¤ U£Ó,‰EÜ˜E¤<×0Ñ0Ü!Ð!à×$Ñ$Ó&¨%×*@Ñ*@Ó*BÑBÐBr   c                ó,   • [        U R                  5      $ )z7Returns the number of specifiers in this specifier set.)r#   rñ  r^   s    r   Ú__len__ÚSpecifierSet.__len__@  s   € ä�4—;‘;ÓÐr   c                ó,   • [        U R                  5      $ )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ñ  r^   s    r   Ú__iter__ÚSpecifierSet.__iter__D  s   € ô �D—K‘KÓ Ð r   c                ó¾   • U R                   nSnU H:  nUc  UR                  5       nM  [        X#R                  5       5      nU(       a  M:    O   Uc  [        S5      eU$ )zåIntersect 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)rG   r  r¬   r÷  s       r   Ú_get_rangesÚSpecifierSet._get_rangesN  s\   € ð —‘ˆà15ˆÛˆAØ‰~ØŸ™›’ä*¨6·<±<³>ÓB�ß�vÙñ ð ‰>ÜÐAÓBÐBØˆr   c                ó
  • U R                   nUb  U$ U R                  (       d  SU l         gU R                  5       (       + nU(       d  U R                  5       nU(       d  U R                  SL a  U R                  5       nX l         U$ )aV  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ñ  r2  Ú_check_arbitrary_unsatisfiablerÝ   Ú_check_prerelease_only_ranges)rG   Úcachedr¬   s      r   Úis_unsatisfiableÚSpecifierSet.is_unsatisfiabled  sw   € ð ×'Ñ'ˆØÑØˆMà�{�{Ø%*ˆDÔ"Øà×%Ñ%Ó'Ô'ˆæØ×8Ñ8Ó:ˆFæ˜$×*Ñ*¨eÒ3Ø×7Ñ7Ó9ˆFà!'ÔØˆr   c                óî   • U R                  5        Ha  u  p[        UR                  5      nUc    gUR                  b  X2R                  :  a    gX2R                  :X  d  MN  UR                  (       d  Ma    g   g)zxWith prereleases=False, check if every range contains only
pre-release versions (which would be excluded from matching).FT)r2  rÍ   rE   rt   )rG   r£   r¤   Únearests       r   r6  Ú*SpecifierSet._check_prerelease_only_ranges…  s_   € ð !×,Ñ,Ö.‰LˆEÜ-¨e¯m©mÓ<ˆGØ‰ÙØ�}‰}Ñ$¨·-±-Ó(?ÙØŸ-™-Õ'¨E¯O¯O©OÙñ /ð r   c                ó  ^^• U R                    Vs/ s H  oR                  S:X  d  M  UPM     nnU(       d  gUS   R                  R                  5       m[	        U4S jUSS  5       5      (       a  g[        US   R                  5      mU R                  SL a  Tb  TR                  (       a  gU R                    Vs/ s H  oR                  S:w  d  M  UPM     nnU(       d  gTc  g[        U4S jU 5       5      (       + $ s  snf s  snf )	züCheck === (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  Fr   c              3  ó\   >#   • U  H!  oR                   R                  5       T:g  v •  M#     g 7fr   )rE   r£   )rØ  r÷  Úfirsts     €r   rÚ  Ú>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>Ÿ  s   øé € ÐA²=¨a�y‰y�‰Ó  EÖ)²=ùs   ƒ),r   NTc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7fr   r£  )rØ  r÷  Ú	candidates     €r   rÚ  r@  ·  s   øé € Ð?²h°—z‘z )×,Ð,²hùs   ƒ )	rñ  r  rE   r£   rß  r½   rÝ   rÊ   r  )rG   r÷  r  ÚstandardrB  r?  s       @@r   r5  Ú+SpecifierSet._check_arbitrary_unsatisfiable’  sè   ù€ ð !%§¢ÓC¢˜1¯z©z¸UÑ/B—Q¡ˆ	ÐCÞØð ˜!‘×$Ñ$×*Ñ*Ó,ˆÜÔA°9¸Q¸R±=ÓA×AÑAØô $ I¨a¡L×$8Ñ$8Ó9ˆ	ð
 ×Ñ Ò%ØÑ%Ø×'×'àà#Ÿ{š{ÓBš{˜!¯j©j¸EÑ.A—A™{ˆÐBÞØàÑàäÔ?±hÓ?Ó?Ô?Ð?ùò= Dùò, Cs   ‘D¨DÂ=DÃDc                ó$   • U R                  U5      $ )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 SpecifierSet(">=1.0.0,!=1.0.1")
True
>>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
True
>>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
False
>>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
True
>>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
True
r£  r¤  s     r   r¥  ÚSpecifierSet.__contains__¹  r§  r   c           	     óô   • [        U5      nUb  U(       a  UR                  (       a  SnUb&  U R                  (       a  [        U[        5      (       d  UnOUn[        [        U R                  U/US95      5      $ )aÏ  Return whether or not the item is contained in this SpecifierSet.

: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 SpecifierSet. If set to
    ``None`` (the default), it will follow the recommendation from :pep:`440`
    and match prereleases, as there are no other versions.
:param installed:
    Whether or not the item is installed. If set to ``True``, it will
    accept prerelease versions even if the specifier does not allow them.

>>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
True
>>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
True
>>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
False
>>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
True
>>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1")
False
>>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
True
Tr©  )r½   rÊ   rî  r!   r   r(   rq  rê   )rG   rã   rÝ   Ú	installedrE   Ú
check_items         r   rä   ÚSpecifierSet.containsÎ  sh   € ô@ " $Ó'ˆàÑ¦9°×1F×1FØˆKð ‰?˜t×2×2¼:ÀdÌG×;TÑ;TØ‰Jà ˆJÜ”D˜Ÿ™ j \¸{˜ÐKÓLÓMÐMr   c                ó   • g r   r   rç   s       r   rê   ÚSpecifierSet.filterû  rì   r   c                ó   • g r   r   rç   s       r   rê   rL    rî   r   c                ó„  ^^• Uc  U R                   b  U R                   nU R                  (       ad  [        U R                  5      S:X  a$  U R                  S   R                  UUc  SOUTS9nOU R	                  UTUc  SOUS9nUb  U$ [        UT5      $ USL a  [        U5      $ USL a  UU4S jU 5       $ [        UT5      $ )aC  Filter items in the given iterable, that match the specifiers in this set.

: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(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
['1.3']
>>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
['1.3', <Version('1.4')>]
>>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
['1.5a1']
>>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
['1.3', '1.5a1']
>>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
['1.3', '1.5a1']
>>> list(SpecifierSet(">=1.2.3").filter(
... [{"ver": "1.2"}, {"ver": "1.3"}],
... key=lambda x: x["ver"]))
[{'ver': '1.3'}]

An "empty" SpecifierSet will filter items based on the presence of prerelease
versions in the set.

>>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
['1.3']
>>> list(SpecifierSet("").filter(["1.5a1"]))
['1.5a1']
>>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
['1.3', '1.5a1']
>>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
['1.3', '1.5a1']
r   r   T)rÝ   ré   r©  Fc              3  ó‚   >#   • U  H4  n[        Tc  UOT" U5      5      =m b  TR                  (       a  M0  Uv •  M6     g 7fr   )r½   rÊ   )rØ  rã   ré   rE   s     €€r   rÚ  Ú&SpecifierSet.filter.<locals>.<genexpr>^  sB   øé € ð â$�Dä /¸¹±ÉÈTËÓ SÐS�WØñà"×0Õ0÷ ‘Ú$ùs   ƒ/?¶	?)rÝ   rñ  r#   rê   Ú_filter_versionsrÈ  r-  )rG   rè   rÝ   ré   ÚfilteredrE   s      ` @r   rê   rL    sé   ù€ ðd Ñ 4×#3Ñ#3Ñ#?Ø×*Ñ*ˆKð �;�;ô �4—;‘;Ó 1Ó$ØŸ;™; q™>×0Ñ0ØØ(3Ñ(;¡ÀØð 1ð ‘ð  ×0Ñ0ØØØ(3Ñ(;¡Àð 1ð �ð Ñ&Ø�ä-¨h¸Ó<Ð<ð ˜$ÒÜ˜“>Ð!à˜%Òõá$óð ô *¨(°CÓ8Ð8r   c              #  ó”  ^^^#   • U R                   c$  [        S U R                   5       [        S9U l         U R                   nUSL nU Hz  m[	        Tc  TOT" T5      5      mTc"  [        U4S jU 5       5      (       a  Tv •  M<  M>  U(       a  TR                  (       a  MX  [        UUU4S jU 5       5      (       d  Mv  Tv •  M|     g7f)a  Filter versions against all specifiers in a single pass.

Uses Cost Based Ordering: specifiers are sorted by _operator_cost so
that cheap range operators reject versions early, avoiding expensive
wildcard or compatible operators on versions that would have been
rejected anyway.
Nc              3  ó†   #   • U  H7  nUR                  UR                  5      UR                  UR                  4v •  M9     g 7fr   )rm  r  rE   )rØ  r%   s     r   rÚ  Ú0SpecifierSet._filter_versions.<locals>.<genexpr>{  s5   é € ð â +˜ð ×'Ñ'¨¯©Ó6¸¿¹ÀdÇmÁmÕTÚ +ùs   ‚?Arÿ  Fc              3  ó–   >#   • U  H>  u  pnUS :H  =(       a*    [        T5      R                  5       UR                  5       :H  v •  M@     g7frõ  rŸ  )rØ  rK  rê  r+  rã   s       €r   rÚ  rU  ‰  s>   øé € ð â&)™
˜ ð ˜%‘K×D¤C¨£I§O¡OÓ$5¸¿¹»Ñ$DÔDÚ&)ùs   ƒAA	c              3  ó²   >#   • U  HL  u  pnUS :X  a5  [        Tc  TOT" T5      5      R                  5       UR                  5       :H  OU" TU5      v •  MN     g7frõ  rŸ  )rØ  Úop_fnrê  r+  rã   ré   rÇ  s       €€€r   rÚ  rU  �  s[   øé € ð ò '*‘N�E ð ˜“;ô ˜C™K‘D©S°«YÓ7×=Ñ=Ó?À3Ç9Á9Ã;ÒNá˜6 3Ó'ô(ò '*ùs   ƒAA)rð  r  rñ  rë  r½   r  rÊ   )rG   rè   ré   rÝ   ÚopsÚexclude_prereleasesrã   rÇ  s     `   @@r   rQ  ÚSpecifierSet._filter_versionsk  sË   úé € ð ×ÑÑ%Ü!'ñà $§¢óô #ñ"ˆDÔð × Ñ ˆØ)¨UÐ2ÐãˆDÜ$¨S©[¡T¹cÀ$»iÓHˆFà‰~äô á&)ó÷ ñ ð ”Jñ	ö
 %¨×)=×)=ÙÜö ñ '*ó	÷ ó ð ”
ò' ùs   …B6CÂ?	Cr´  )rû  zstr | Iterable[Specifier]rÝ   rñ   rh   ri   )rh   ztuple[Specifier, ...]rð   r¹  )rh   z)tuple[tuple[Specifier, ...], bool | None]rº  rn   rl   )rO   zSpecifierSet | strrh   r   rj   )rh   zIterator[Specifier]r¶  )rh   r(   )rã   r¼  rh   r(   rõ   )rã   r¼  rÝ   rñ   rH  rñ   rh   r(   rò   ró   rô   rö   r   )rè   r÷   ré   rø   rÝ   rñ   rh   rù   )r6   r7   r8   r9   r:   ro   rI   r  rû   rÝ   rþ   rC  rM  rf   rÕ   r_   r%  rV   r*  r.  r2  r8  r6  r5  r¥  rä   rÿ   r   rê   rQ  r?   r   r   r   r   r   6  sí  † ñð$€Ið 13Ø#'ð+3à-ð+3ð !ð+3ð 
õ	+3ôZð óó ðð& ×Ñó&ó ð&ô0ô7GôrBô*Aô-ôôBCô4 ô!ôô,ôBô%@ôN#ð0 $(Ø!%ð	+Nàð+Nð !ð+Nð ð	+Nð
 
õ+NðZ ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ô+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
ôó ðð $(Ø7;ð	^9àð^9ð !ð^9ð 5ð	^9ð
 
õ^9ðH $(ð	,àð,ð 5ð,ð !ð	,ð
 
÷,ð ,r   r   )rh   ú	list[str])r%   rk   rh   zTypeGuard[tuple[str, str]])r)   rk   rh   zTypeGuard[bool | None])r0   útuple[int, ...]rh   r]  )r£   rq   r¤   r’   rh   r(   )rª   r·  r«   r·  rh   r¸  )rE   r   rh   r   )rE   r¼  rh   rµ  )rP   rŽ   rh   rµ  )rè   r÷   ré   rø   rh   rù   )rE   r$   rh   r\  )rÕ  r\  rh   r$   )rÙ  r$   rh   r(   )rÎ  r\  rh   rm   )rÎ  r\  rä  rm   rh   r\  )ré  z!tuple[CallableOperator, str, str]rh   rm   )Lr:   Ú
__future__r   rü   r;   Ú	functoolsrr  r¾  Úsysrÿ   r   r   r   r   r   r	   r
   r   r   Úutilsr   rE   r   r   Úversion_infor   Útyping_extensionsr   r   r&   r*   r+   r$   r¼  r,   r(   r»  r.   rÂ  r2   ÚEnumr4   Útotal_orderingrA   rq   r’   rŽ   r"   Ú_VersionRanger1  r2  r¡   r¥   r³   r¸   r»   r½   rÁ   rÅ   rÈ   rÍ   r8  r   ÚABCMetar   r   r¿  rÏ  rÈ  ru  rp  rt  r|  rƒ  rë  r   r   r   r   Ú<module>rh     sp  ðòõ #ã 
Û Û Û Û 	Û 
Û ÷
÷ 
õ 
õ (ß ,à×Ñ�wÓÞ ÞÝ+ò€ôôô0ñ ˆCƒL€Ø˜ ˜Ñ%€ÙÐ1¸ÑIÐ Ø˜W c˜N¨DÐ0Ñ1Ð ñ  ' xÓ0€ˆnÓ 0ô=ô�D—I‘Iô ð ×Ñ÷;Qð ;Qó ð;Qð| ×Ñ÷%Hð %Hó ð%HðP ×Ñ÷%Hð %Hó ð%HðP 
××Ø˜wÐ(8¸$Ð>Ñ?Ðð ˜+ {Ð2Ñ3€Má�t˜UÓ#€Ù�t˜UÓ#€Ø&.°Ð%9Ð$;€Ð!Ó ;ô)ðØ
!ðà"ðð ôô4KôSô
ô+ô@ô2ð9Øð9àô9ô*	�zô 	ôO˜cŸk™kò Oôdr,�ô r,ðj —
’
Ð:Ó;€ð' Øð' Ø"Ið' àô' ôTô,'ôôôOô2ô6a	�=õ a	r   