+
    ª¬‚juŸ  ã                  ó”  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHtHtH	t	H
t
HtHt ^RIHt ^RIHtHt ]]]3,          t]! R]R7      t]]].]3,          tR R	 ltR
 R ltR R lt ! R R]4      t ! R R]P8                  R7      t ! R R]4      t]P>                  ! R4      t R R lt!R R lt"R R lt#R R lt$ ! R R]4      t%R# ) z¢
.. testsetup::

    from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from pip._vendor.packaging.version import Version
)ÚannotationsN)ÚCallableÚFinalÚIterableÚIteratorÚTypeVarÚUnion)Úcanonicalize_version)ÚInvalidVersionÚVersionÚUnparsedVersionVar)Úboundc               ó    € V ^8„  d   QhRRRR/# )é   ÚversionÚUnparsedVersionÚreturnúVersion | None© )Úformats   "Ú]/Users/cheyod/AIGC/DSH/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/specifiers.pyÚ__annotate__r      s   € ÷ ñ ˜_ð °ñ ó    c                ór   € \        V \        4      '       g    \        V 4      p V # V #   \         d     R # i ; i©N)Ú
isinstancer   r
   ©r   s   &r   Ú_coerce_versionr      s=   € Ü�gœw×'Ò'ð	Ü˜gÓ&ˆGð €Nˆ7€Nøô ô 	Úð	ús   ˜' §6µ6c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r   )r   s   "r   r   r   #   s   € ÷ +ñ +˜Wð +¨ñ +r   c                ó&   € V P                  R R7      # )N)Úlocal©Ú__replace__r   s   &r   Ú_public_versionr$   #   s   € Ø×Ñ TÐÓ*Ð*r   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   '   s   € ÷ Jñ J˜7ð J wñ Jr   c                ó,   € V P                  R R R R R7      # )N)ÚpreÚpostÚdevr!   r"   r   s   &r   Ú_base_versionr*   '   s   € Ø×Ñ 4¨d¸ÀDÐÓIÐIr   c                  ó   € ] tR t^+tRtRtR# )ÚInvalidSpecifierzç
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)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r   r   r,   r,   +   s   † õr   r,   c                  ól  € ] tR t^7tRtRt]R R l4       t]P                  R R l4       t
]P                  R R l4       t]P                  R R l4       t]]P                  R	 R
 l4       4       t]P                  R R l4       t]P                  RR R ll4       t]P                  RR R ll4       tRtR# )ÚBaseSpecifierc               ó   € V ^8„  d   QhRR/# ©r   r   Ústrr   )r   s   "r   r   ÚBaseSpecifier.__annotate__<   s   € ÷ ñ �cñ r   c                ó   € \        V 4      # )z Internal property for match_args©r7   ©Úselfs   &r   Ú_strÚBaseSpecifier._str;   s   € ô �4‹yÐr   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r8   A   s   € ÷ ñ ˜ñ r   c                ó   € R# )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__@   ó   ‚ r   c               ó   € V ^8„  d   QhRR/# ©r   r   Úintr   )r   s   "r   r   r8   H   s   € ÷ ñ ˜#ñ r   c                ó   € R# )z6
Returns a hash value for this Specifier-like object.
Nr   r;   s   &r   Ú__hash__ÚBaseSpecifier.__hash__G   rC   r   c               ó    € V ^8„  d   QhRRRR/# ©r   ÚotherÚobjectr   Úboolr   )r   s   "r   r   r8   N   s   € ÷ ñ ˜Fð  tñ r   c                ó   € R# )z‹
Returns a boolean representing whether or not the two Specifier-like
objects are equal.

:param other: The other object to check against.
Nr   ©r<   rL   s   &&r   Ú__eq__ÚBaseSpecifier.__eq__M   rC   r   c               ó   € V ^8„  d   QhRR/# ©r   r   úbool | Noner   )r   s   "r   r   r8   X   s   € ÷ ñ ˜[ñ r   c                ó   € R# )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.prereleasesV   rC   r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚvaluerN   r   ÚNoner   )r   s   "r   r   r8   `   s   € ÷ ñ  ð ¨$ñ r   c                ó   € R# )zASetter for :attr:`prereleases`.

:param value: The value to set.
Nr   ©r<   rZ   s   &&r   rW   rX   _   rC   r   Nc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úitemr7   rW   rU   r   rN   r   )r   s   "r   r   r8   g   s!   € ÷ ñ ˜Sð ¨{ð Àdñ r   c                ó   € R# )zB
Determines if the given item is contained within this specifier.
Nr   ©r<   r_   rW   s   &&&r   ÚcontainsÚBaseSpecifier.containsf   rC   r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   ÚiterablezIterable[UnparsedVersionVar]rW   rU   r   zIterator[UnparsedVersionVar]r   )r   s   "r   r   r8   m   s$   € ÷ ñ Ø4ðØCNðà	%ñr   c                ó   € R# )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<   rf   rW   s   &&&r   ÚfilterÚBaseSpecifier.filterl   rC   r   r   )r=   r   )r-   r.   r/   r0   Ú	__slots__Ú__match_args__Úpropertyr=   ÚabcÚabstractmethodrA   rH   rQ   rW   Úsetterrb   rh   r2   r   r   r   r4   r4   7   sÜ   † Ø€IØ€Nàôó ðð 	×Ñôó ðð 	×Ñôó ðð
 	×Ñôó ðð Ø×Ñôó ó ðð ×Ñôó ðð 	×Ñöó ðð
 	×Ñöó ôr   r4   )Ú	metaclassc                  óN  € ] tR t^vt$ RtRHtRtRt]P                  ! R],           ],           R,           ]P                  ]P                  ,          4      tRRRRR	R
RRRRRRRRRR/tR]R&   RIR R lltR R ltR R lt]R R l4       t]P(                  R  R! l4       t]R" R# l4       t]R$ R% l4       tR& R' ltR( R) lt]R* R+ l4       tR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 ltR6 R7 ltR8 R9 lt R: R; lt!R< R= lt"R> R? lt#R@ RA lt$RB RC lt%RJRD RE llt&RJRF RG llt'RHt(R# )KÚ	Specifiera+  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).
z8
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        aÈ  
        (?P<version>
            (?:
                # 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 .*
                    |
                    (?:                                  # 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
                    (?:\+[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.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # 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
            )
        )
        z\s*ú~=Ú
compatibleú==Úequalú!=Ú	not_equalz<=Úless_than_equalú>=Úgreater_than_equalÚ<Ú	less_thanÚ>Úgreater_thanú===Ú	arbitraryr   Ú
_operatorsNc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úspecr7   rW   rU   r   r[   r   )r   s   "r   r   ÚSpecifier.__annotate__ó   s!   € ÷ >ñ >˜Sð >°Kð >È4ñ >r   c                ó
  € V P                   P                  V4      pV'       g   \        RV: 24      hVP                  R4      P	                  4       VP                  R4      P	                  4       3V n        W n        RV n        R# )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: Úoperatorr   N)Ú_regexÚ	fullmatchr,   ÚgroupÚstripÚ_specÚ_prereleasesÚ_spec_version)r<   r„   rW   Úmatchs   &&& r   Ú__init__ÚSpecifier.__init__ó   su   € ð —‘×%Ñ% dÓ+ˆßÜ"Ð%8¸¹Ð#AÓBÐBð �K‰K˜
Ó#×)Ñ)Ó+Ø�K‰K˜	Ó"×(Ñ(Ó*ð'
ˆŒ
ð (Ôð :>ˆÖr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r7   r   r   r   )r   s   "r   r   r…     s   € ÷ 
!ñ 
!¨ð 
!°ñ 
!r   c                óª   € V P                   e,   V P                   ^ ,          V8X  d   V P                   ^,          # \        V4      pVf   R# W3V n         V# )zDOne element cache, as only one spec Version is needed per Specifier.N)rŽ   r   )r<   r   Úversion_specifiers   && r   Ú_get_spec_versionÚSpecifier._get_spec_version  sV   € à×ÑÒ)¨d×.@Ñ.@ÀÕ.CÀwÔ.NØ×%Ñ% aÕ(Ð(ä+¨GÓ4ÐØÒ$Ùà%Ð9ˆÔØ Ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r7   r   r   r   )r   s   "r   r   r…     s   € ÷ ñ ¨Sð °Wñ r   c                ó4   € V P                  V4      pVf   Q hV# )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•   )r<   r   Úspec_versions   && r   Ú_require_spec_versionÚSpecifier._require_spec_version  s&   € ð ×-Ñ-¨gÓ6ˆØÒ'Ð'Ð'ØÐr   c               ó   € V ^8„  d   QhRR/# rT   r   )r   s   "r   r   r…   &  s   € ÷ ñ ˜[ñ r   c                	óú   € V P                   e   V P                   # V P                  w  rVR8w  dL   VR8X  d   VP                  R4      '       d   R# V P                  V4      pVf   R # VP                  '       d   R# R# )Nrw   ru   ú.*FT)r�   rŒ   Úendswithr•   Úis_prerelease)r<   r‡   Úversion_strr   s   &   r   rW   ÚSpecifier.prereleases%  s}   € ð ×ÑÒ(Ø×$Ñ$Ð$ð !%§
¡
ÑˆØ�tÔð ˜4Ô K×$8Ñ$8¸×$>Ò$>Ùð ×,Ñ,¨[Ó9ˆGØŠÙð ×$×$Ð$Ùár   c               ó    € V ^8„  d   QhRRRR/# ©r   rZ   rU   r   r[   r   )r   s   "r   r   r…   C  ó   € ÷ "ñ " ð "°ñ "r   c                	ó   € Wn         R # r   ©r�   r]   s   &&r   rW   r¢   B  ó   € à!Ör   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r…   G  s   € ÷ ñ ˜#ñ r   c                ó(   € V P                   ^ ,          # )zHThe operator of this specifier.

>>> Specifier("==1.2.3").operator
'=='
©rŒ   r;   s   &r   r‡   ÚSpecifier.operatorF  ó   € ð �z‰z˜!�}Ðr   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r…   P  s   € ÷ ñ ˜ñ r   c                ó(   € V P                   ^,          # )zIThe version of this specifier.

>>> Specifier("==1.2.3").version
'1.2.3'
r«   r;   s   &r   r   ÚSpecifier.versionO  r­   r   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r…   X  s   € ÷ Bñ B˜#ñ Br   c                ó”   € V P                   e   RV P                  : 2MRpRV P                  P                   R\	        V 4      : V R2# )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|   Ú(ú)>)r�   rW   Ú	__class__r-   r7   ©r<   r'   s   & r   Ú__repr__ÚSpecifier.__repr__X  sU   € ð × Ñ Ò,ð ˜T×-Ñ-Ñ0Ñ1àð 	ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y©M¸#¸¸bÐAÐAr   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r…   j  s   € ÷ *ñ *˜ñ *r   c                ó6   € RP                   ! V P                  !  # )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{}{})r   rŒ   r;   s   &r   rA   ÚSpecifier.__str__j  s   € ð �}Š}˜dŸj™jÑ)Ð)r   c               ó   € V ^8„  d   QhRR/# )r   r   ztuple[str, str]r   )r   s   "r   r   r…   u  s   € ÷ +ñ + ñ +r   c                	ó¦   € V P                   w  rVR 8X  g   VP                  R4      '       d   W3# V P                  V4      p\        W1R8g  R7      pW3# )r€   rž   rs   ©Ústrip_trailing_zero)rŒ   rŸ   rš   r	   )r<   r‡   r   r™   Úcanonical_versions   &    r   Ú_canonical_specÚSpecifier._canonical_spect  s]   € à ŸJ™JÑˆØ�uÔ × 0Ñ 0°× 6Ò 6ØÐ$Ð$à×1Ñ1°'Ó:ˆä0Ø¸4Ñ/?ô
Ðð Ð*Ð*r   c               ó   € V ^8„  d   QhRR/# rE   r   )r   s   "r   r   r…   ‚  s   € ÷ *ñ *˜#ñ *r   c                	ó,   € \        V P                  4      # r   )ÚhashrÃ   r;   s   &r   rH   ÚSpecifier.__hash__‚  s   € Ü�D×(Ñ(Ó)Ð)r   c               ó    € V ^8„  d   QhRRRR/# rK   r   )r   s   "r   r   r…   …  s   € ÷ =ñ =˜Fð = tñ =r   c                ó  € \        V\        4      '       d    V P                  \        V4      4      pM!\        WP                  4      '       g   \        # V P
                  VP
                  8H  #   \         d
    \        u # i ; i)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   r7   r·   r,   ÚNotImplementedrÃ   rP   s   &&r   rQ   ÚSpecifier.__eq__…  sm   € ô& �eœS×!Ò!ð&ØŸ™¤s¨5£zÓ2‘ô ˜E§>¡>×2Ò2Ü!Ð!à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ô &Ü%Ò%ð&ús   ˜A- Á-BÂ Bc               ó    € V ^8„  d   QhRRRR/# )r   Úopr7   r   ÚCallableOperatorr   )r   s   "r   r   r…   ¢  s   € ÷ !ñ ! ð !Ð(8ñ !r   c                	óF   € \        V R V P                  V,           24      pV# )Ú	_compare_)Úgetattrr‚   )r<   rÎ   Úoperator_callables   && r   Ú_get_operatorÚSpecifier._get_operator¢  s+   € Ü.5Ø�I˜dŸo™o¨bÕ1Ð2Ð3ó/
Ðð !Ð r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   Úprospectiver   r„   r7   r   rN   r   )r   s   "r   r   r…   ¨  s!   € ÷ 
ñ 
¨wð 
¸cð 
Àdñ 
r   c           
     	óò   € \        \        \        P                  ! \        \        V4      4      4      R R 4      pVR,          pV P                  R4      ! W4      ;'       d    V P                  R4      ! W4      # )Nrž   rz   ru   éÿÿÿÿ)Ú_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitrÔ   )r<   rØ   r„   Úprefixs   &&& r   Ú_compare_compatibleÚSpecifier._compare_compatible¨  ss   € ô Ü”×$Ò$¤^´^ÀDÓ5IÓJÓKÈCÈRÐPó
ˆð
 	�$�ˆà×!Ñ! $Ô'¨Ó:÷ 
ð 
¸t×?QÑ?QÐRVÔ?WØó@
ð 	
r   c               ó$   € V ^8„  d   QhRRRRRR/# r×   r   )r   s   "r   r   r…   ¼  s!   € ÷ &/ñ &/¨'ð &/¸ð &/Àñ &/r   c                	óJ  € VP                  R 4      '       d\   \        \        V4      RR7      p\        VRR RR7      p\        V4      p\        V4      p\	        We4      w  rxVR\        V4       p	W•8H  # V P                  V4      p
V
P                  '       g   \        V4      pW8H  # )rž   FrÀ   Néþÿÿÿ)rŸ   r	   r$   rà   Ú_pad_versionÚlenrš   r!   )r<   rØ   r„   Únormalized_prospectiveÚnormalized_specÚ
split_specÚsplit_prospectiveÚpadded_prospectiveÚ_Úshortened_prospectiver™   s   &&&        r   Ú_compare_equalÚSpecifier._compare_equal¼  s¶   € à�=‰=˜×Òä%9Ü Ó,À%ô&Ð"ô 3°4¸¸°9ÐRWÔXˆOô (¨Ó8ˆJô
 !/Ð/EÓ FÐô %1Ð1BÓ$OÑ!Ðð
 %7Ð7H¼¸Z»Ð$IÐ!à(Ñ6Ð6ð  ×5Ñ5°dÓ;ˆLð
  ×%×%Ð%Ü-¨kÓ:�àÑ.Ð.r   c               ó$   € V ^8„  d   QhRRRRRR/# r×   r   )r   s   "r   r   r…   ä  s!   € ÷ :ñ :¨gð :¸Sð :ÀTñ :r   c                	ó.   € V P                  W4      '       * # r   )rð   ©r<   rØ   r„   s   &&&r   Ú_compare_not_equalÚSpecifier._compare_not_equalä  s   € Ø×&Ñ& {Ó9Ô9Ð9r   c               ó$   € V ^8„  d   QhRRRRRR/# r×   r   )r   s   "r   r   r…   ç  s&   € ÷ Pñ P°Gð PÀ3ð PÈ4ñ Pr   c                	ó<   € \        V4      V P                  V4      8*  # r   ©r$   rš   rô   s   &&&r   Ú_compare_less_than_equalÚ"Specifier._compare_less_than_equalç  ó   € ô ˜{Ó+¨t×/IÑ/IÈ$Ó/OÑOÐOr   c               ó$   € V ^8„  d   QhRRRRRR/# r×   r   )r   s   "r   r   r…   í  s&   € ÷ Pñ P°wð PÀcð PÈdñ Pr   c                	ó<   € \        V4      V P                  V4      8¬  # r   rù   rô   s   &&&r   Ú_compare_greater_than_equalÚ%Specifier._compare_greater_than_equalí  rü   r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   rØ   r   Úspec_strr7   r   rN   r   )r   s   "r   r   r…   ó  s!   € ÷ ñ ¨gð Àð Èñ r   c                	ó¶   € V P                  V4      pW8  g   R # VP                  '       g.   VP                  '       d   \        V4      \        V4      8X  d   R # R# ©FT)rš   r    r*   ©r<   rØ   r  r„   s   &&& r   Ú_compare_less_thanÚSpecifier._compare_less_thanó  sS   € ð ×)Ñ)¨(Ó3ˆð
 Ô!Ùð ×"×"Ð"Ø×)×)Ð)Ü˜kÓ*¬m¸DÓ.AÔAáñ
 r   c               ó$   € V ^8„  d   QhRRRRRR/# r  r   )r   s   "r   r   r…     s!   € ÷  ñ  °ð  ÀCð  ÈDñ  r   c                	ó  € V P                  V4      pW8”  g   R # VP                  '       g.   VP                  '       d   \        V4      \        V4      8X  d   R # VP                  e   \        V4      \        V4      8X  d   R # R# r  )rš   Úis_postreleaser*   r!   r  s   &&& r   Ú_compare_greater_thanÚSpecifier._compare_greater_than  s}   € ð ×)Ñ)¨(Ó3ˆð
 Ô!Ùð ×#×#Ð#Ø×*×*Ð*Ü˜kÓ*¬m¸DÓ.AÔAáð ×ÑÒ(¬]Øó.
ä˜4Ó ô.!ñ ñ
 r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   zVersion | strr„   r7   r   rN   r   )r   s   "r   r   r…   0  s!   € ÷ =ñ =¨mð =À3ð =È4ñ =r   c                	óh   € \        V4      P                  4       \        V4      P                  4       8H  # r   )r7   Úlowerrô   s   &&&r   Ú_compare_arbitraryÚSpecifier._compare_arbitrary0  s&   € Ü�;Ó×%Ñ%Ó'¬3¨t«9¯?©?Ó+<Ñ<Ð<r   c               ó    € V ^8„  d   QhRRRR/# )r   r_   zstr | Versionr   rN   r   )r   s   "r   r   r…   3  s   € ÷ #ñ # ð #°4ñ #r   c                ó$   € V P                  V4      # )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
©rb   ©r<   r_   s   &&r   Ú__contains__ÚSpecifier.__contains__3  ó   € ð& �}‰}˜TÓ"Ð"r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r_   r   rW   rU   r   rN   r   )r   s   "r   r   r…   H  s'   € ÷ Hñ H˜_ð H¸;ð HÐRVñ Hr   c           	     óN   € \        \        V P                  V.VR7      4      4      # )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
©rW   )rN   rÜ   rh   ra   s   &&&r   rb   ÚSpecifier.containsH  s#   € ô2 ”D˜Ÿ™ d V¸˜ÓEÓFÓGÐGr   c               ó$   € V ^8„  d   QhRRRRRR/# re   r   )r   s   "r   r   r…   c  s$   € ÷ <,ñ <,Ø4ð<,ØCNð<,à	%ñ<,r   c              #  ó>  "  € . pRpVe   TMV P                   pV P                  V P                  4      pV F³  p\        V4      pVf=   V P                  R8X  d*   V P	                  WpP
                  4      '       d   Vx € KJ  KL  KN  V! W€P
                  4      '       g   Kh  VP                  '       d	   V'       d	   RpVx € KŠ  Ve   K�  V P                  RJg   K¢  VP                  V4       Kµ  	  V'       g%   Vf   V P                  RJd   T Rj  x€L
  R# R# R# R#  L5i)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.

>>> 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']
FNr€   T)	rW   rÔ   r‡   r   r  r   r    r�   Úappend)	r<   rf   rW   Úprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesrÓ   r   Úparsed_versions	   &&&      r   rh   ÚSpecifier.filterc  s  é € ð0  "ÐØ %Ðð 'Ò2‰K¸×8HÑ8Hð 	ð
 !×.Ñ.¨t¯}©}Ó=Ðó  ˆGÜ,¨WÓ5ˆNØÒ%à—=‘= EÔ)¨d×.EÑ.EØŸ\™\÷/ò /ð "”Mñ/Ñ)ñ # >·<±<×@Ô@à%×3×3Ð3×7JØ,0Ð)Ø!”Mà Ô(¨T×->Ñ->ÀeÕ-KØ(×/Ñ/°Ö8ñ  ÷( &ØÒ#Ø×!Ñ!¨Ó.à+×+Ò+ñ /ñ $ñ &ñ ,ùs6   ‚BDÂDÂ0DÂ8	DÃDÃDÃ5DÄDÄD)r�   rŒ   rŽ   ©r´   Nr   ))r-   r.   r/   r0   r1   rj   Ú_operator_regex_strÚ_version_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASErˆ   r‚   Ú__annotations__r�   r•   rš   rl   rW   ro   r‡   r   r¹   rA   rÃ   rH   rQ   rÔ   râ   rð   rõ   rú   rÿ   r  r  r  r  rb   rh   r2   r   r   r   rr   rr   v   sb  ‡ ñð ;€IðÐð\Ðð| �ZŠZØÐ$Õ$Ð'9Õ9¸FÕBØ
�
‰
�R—]‘]Õ"ó€Fð 	ˆlØˆgØˆkØÐØÐ"Øˆ[Øˆ^Øˆ{ð	€J�ó 	÷>õ8
!õð ôó ðð8 ×Ñô"ó ð"ð ôó ðð ôó ðõBõ$*ð ô+ó ð+õ*õ=õ:!õ
õ(&/õP:õPõPõõ6 õD=õ#÷*H÷6<,ó <,r   rr   z([0-9]+)((?:a|b|c|rc)[0-9]+)c               ó    € V ^8„  d   QhRRRR/# )r   r   r7   r   ú	list[str]r   )r   s   "r   r   r   ¥  s   € ÷ ñ ˜Cð  Iñ r   c                ó6  € . pV P                  R4      w  r#pTP                  T;'       g    R4       VP                  R4       FR  p\        P	                  V4      pV'       d"   VP                  VP                  4       4       KA  VP                  V4       KT  	  V# )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)r   ÚresultÚepochrî   Úrestr_   r�   s   &      r   rà   rà   ¥  sy   € ð €Fà×'Ñ'¨Ó,�N€EˆdØ
‡M�M�%—,�,˜3Ôà—
‘
˜3–ˆÜ×'Ñ'¨Ó-ˆßØ�M‰M˜%Ÿ,™,›.Ö)à�M‰M˜$Öñ  ð €Mr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
componentsr/  r   r7   r   )r   s   "r   r   r   »  s   € ÷ 'ñ '˜ið '¨Cñ 'r   c                ó4   € V vrV RRP                  V4       2# )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.
r1  r3  )Újoin)r=  r:  r;  s   &  r   rÛ   rÛ   »  s%   € ð €L€EØˆW�A�c—h‘h˜t“nÐ%Ð&Ð&r   c               ó    € V ^8„  d   QhRRRR/# )r   Úsegmentr7   r   rN   r   )r   s   "r   r   r   Æ  s   € ÷ ñ ˜Cð  Dñ r   c                ó–   a € \         ;QJ d)    V 3R  lR 4       F  '       g   K   R'       * # 	  R'       * # ! V 3R  lR 4       4      '       * # )c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir   )Ú
startswith)Ú.0rá   rA  s   & €r   Ú	<genexpr>Ú!_is_not_suffix.<locals>.<genexpr>Ç  s#   øé € ð Ù1P vˆ×Ñ˜6×"Ð"Ó1Pùs   ƒ!TF)r)   ÚaÚbÚrcr(   )Úany)rA  s   fr   rß   rß   Æ  sM   ø€ ß‹sô Ù1Pó�sŒsô ð Šsô ð ˆsô Ù1Póó ô ð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úleftr/  Úrightr   ztuple[list[str], list[str]]r   )r   s   "r   r   r   Ì  s"   € ÷ ñ �yð ¨ð Ð7Rñ r   c                ó$  € . . r2VP                  \        \        P                  ! R  V 4      4      4       VP                  \        \        P                  ! R V4      4      4       VP                  V \	        V^ ,          4      R 4       VP                  V\	        V^ ,          4      R 4       VP                  ^R.\        ^ \	        V^ ,          4      \	        V^ ,          4      ,
          4      ,          4       VP                  ^R.\        ^ \	        V^ ,          4      \	        V^ ,          4      ,
          4      ,          4       \        \        P                  P                  V4      4      \        \        P                  P                  V4      4      3# )c                ó"   € V P                  4       # r   ©Úisdigit©Úxs   &r   Ú<lambda>Ú_pad_version.<locals>.<lambda>Ð  s
   € ¸¿¹¼r   c                ó"   € V P                  4       # r   rQ  rS  s   &r   rU  rV  Ñ  s
   € ¸!¿)¹)¼+r   Nr2  )	r   rÜ   rÝ   rÞ   rè   ÚinsertÚmaxÚchainÚfrom_iterable)rM  rN  Ú
left_splitÚright_splits   &&  r   rç   rç   Ì  s3  € Ø  "�ð ×Ñ”dœ9×.Ò.Ñ/DÀdÓKÓLÔMØ×Ñ”tœI×/Ò/Ñ0EÀuÓMÓNÔOð ×Ñ�dœ3˜z¨!�}Ó-Ð/Ð0Ô1Ø×Ñ�uœS ¨Q¥Ó0Ð2Ð3Ô4ð ×Ñ�a˜#˜¤ Q¬¨K¸­NÓ(;¼cÀ*ÈQÅ-Ó>PÕ(PÓ!QÕQÔRØ×Ñ�q˜3˜%¤# a¬¨Z¸­]Ó);¼cÀ+ÈaÅ.Ó>QÕ)QÓ"RÕRÔSô 	ŒY�_‰_×*Ñ*¨:Ó6Ó7ÜŒY�_‰_×*Ñ*¨;Ó7Ó8ðð r   c                  óî   € ] tR tRtRtRtRR R llt]R R l4       t]P                  R R	 l4       tR
 R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R R lltR!R R lltRtR# )"ÚSpecifierSetiá  zÀ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.
Nc               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
specifierszstr | Iterable[Specifier]rW   rU   r   r[   r   )r   s   "r   r   ÚSpecifierSet.__annotate__ê  s(   € ÷ $(ñ $(à-ð$(ð !ð$(ð 
ñ	$(r   c                ó0  € \        V\        4      '       de   VP                  R4       Uu. uF*  q3P                  4       '       g   K  VP                  4       NK,  	  pp\	        \        \        V4      4      V n        M\	        V4      V n        W n        R# u upi )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.
Ú,N)	r   r7   r5  r‹   Ú	frozensetÚmaprr   Ú_specsr�   )r<   ra  rW   ÚsÚsplit_specifierss   &&&  r   r�   ÚSpecifierSet.__init__ê  su   € ô, �j¤#×&Ò&ð 4>×3CÑ3CÀCÔ3HÓVÑ3H¨aÏGÉGÏI¤	 §¡¦	Ñ3HÐÐVô $¤C¬	Ð3CÓ$DÓEˆD�Kô $ JÓ/ˆDŒKð (Öùò  Ws   ªBÁBc               ó   € V ^8„  d   QhRR/# rT   r   )r   s   "r   r   rb    s   € ÷ ñ ˜[ñ r   c                	ó  € V P                   e   V P                   # V P                  '       g   R # \        ;QJ d&    R V P                   4       F  '       g   K   RM	  RM! R V P                   4       4      '       d   R# R # )Nc              3  ó8   "  € T F  qP                   x € K  	  R # 5ir   r  ©rE  rh  s   & r   rF  Ú+SpecifierSet.prereleases.<locals>.<genexpr>  s   é € Ð2¡k �}Ž}£kùó   ‚TF)r�   rg  rK  r;   s   &r   rW   ÚSpecifierSet.prereleases  s[   € ð ×ÑÒ(Ø×$Ñ$Ð$ð
 �{�{ˆ{Ù÷ ‹3Ñ2 d§k¢kÓ2�3�3Š3Ñ2 d§k¢kÓ2×2Ò2Ùár   c               ó    € V ^8„  d   QhRRRR/# r¤   r   )r   s   "r   r   rb  %  r¥   r   c                	ó   € Wn         R # r   r§   r]   s   &&r   rW   rq  $  r¨   r   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   rb  (  s   € ÷ 5ñ 5˜#ñ 5r   c                óf   € V P                   e   RV P                  : 2MRpR\        V 4      : V R2# )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)>
r³   r´   z<SpecifierSet(r¶   )r�   rW   r7   r¸   s   & r   r¹   ÚSpecifierSet.__repr__(  sD   € ð × Ñ Ò,ð ˜T×-Ñ-Ñ0Ñ1àð 	ð  ¤ D£	™}¨S¨E°Ð4Ð4r   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   rb  =  s   € ÷ =ñ =˜ñ =r   c                óX   € RP                  \        R V P                   4       4      4      # )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'
rd  c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir   r:   rn  s   & r   rF  Ú'SpecifierSet.__str__.<locals>.<genexpr>H  s   é € Ð;©{¨!œs 1Ÿv˜v«{ùrp  )r?  Úsortedrg  r;   s   &r   rA   ÚSpecifierSet.__str__=  s"   € ð �x‰xœÑ;¨t¯{ª{Ó;Ó;Ó<Ð<r   c               ó   € V ^8„  d   QhRR/# rE   r   )r   s   "r   r   rb  J  s   € ÷ !ñ !˜#ñ !r   c                	ó,   € \        V P                  4      # r   )rÇ   rg  r;   s   &r   rH   ÚSpecifierSet.__hash__J  s   € Ü�D—K‘KÓ Ð r   c               ó    € V ^8„  d   QhRRRR/# )r   rL   zSpecifierSet | strr   r_  r   )r   s   "r   r   rb  M  s   € ÷ ñ Ð/ð °Lñ r   c                óð  € \        V\        4      '       d   \        V4      pM\        V\        4      '       g   \        # \        4       p\	        V P
                  VP
                  ,          4      Vn        V P                  f"   VP                  e   VP                  Vn        V# V P                  e   VP                  e   V P                  VP                  8X  d   V P                  Vn        V# \        R4      h)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')>
zFCannot combine SpecifierSets with True and False prerelease overrides.)r   r7   r_  rË   re  rg  r�   Ú
ValueError)r<   rL   Ú	specifiers   && r   Ú__and__ÚSpecifierSet.__and__M  sÑ   € ô �eœS×!Ò!Ü  Ó'‰EÜ˜E¤<×0Ò0Ü!Ð!ä “Nˆ	Ü$ T§[¡[°5·<±<Õ%?Ó@ˆ	Ôà×ÑÒ$¨×);Ñ);Ò)GØ%*×%7Ñ%7ˆIÔ"ð Ðð ×ÑÒ)¨e×.@Ñ.@Ò.HØ×Ñ %×"4Ñ"4Ô4Ø%)×%6Ñ%6ˆIÔ"ð Ðô	 ØXóð r   c               ó    € V ^8„  d   QhRRRR/# rK   r   )r   s   "r   r   rb  l  s   € ÷ +ñ +˜Fð + tñ +r   c                óÎ   € \        V\        \        34      '       d   \        \        V4      4      pM\        V\        4      '       g   \        # V P
                  VP
                  8H  # )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   r7   rr   r_  rË   rg  rP   s   &&r   rQ   ÚSpecifierSet.__eq__l  sJ   € ô& �eœc¤9Ð-×.Ò.Ü ¤ U£Ó,‰EÜ˜E¤<×0Ò0Ü!Ð!à�{‰{˜eŸl™lÑ*Ð*r   c               ó   € V ^8„  d   QhRR/# rE   r   )r   s   "r   r   rb  †  s   € ÷  ñ  ˜ñ  r   c                ó,   € \        V P                  4      # )z7Returns the number of specifiers in this specifier set.)rè   rg  r;   s   &r   Ú__len__ÚSpecifierSet.__len__†  s   € ä�4—;‘;ÓÐr   c               ó   € V ^8„  d   QhRR/# )r   r   zIterator[Specifier]r   )r   s   "r   r   rb  Š  s   € ÷ !ñ !Ð-ñ !r   c                ó,   € \        V P                  4      # )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')>]
)Úiterrg  r;   s   &r   Ú__iter__ÚSpecifierSet.__iter__Š  s   € ô �D—K‘KÓ Ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r_   r   r   rN   r   )r   s   "r   r   rb  ”  s   € ÷ #ñ # ð #°Tñ #r   c                ó$   € V P                  V4      # )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               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r_   r   rW   rU   Ú	installedr   rN   r   )r   s   "r   r   rb  ©  s8   € ÷ &Nñ &Nàð&Nð !ð&Nð ð	&Nð
 
ñ&Nr   c           	     ó´   € \        V4      pVe   V'       d   VP                  '       d   RpVf   TMTp\        \        V P	                  V.VR7      4      4      # )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    rN   rÜ   rh   )r<   r_   rW   r–  r   Ú
check_items   &&&&  r   rb   ÚSpecifierSet.contains©  sQ   € ô@ " $Ó'ˆàÒ§9°×1F×1FÐ1FØˆKà$š_‘T°'ˆ
Ü”D˜Ÿ™ j \¸{˜ÓKÓLÓMÐMr   c               ó$   € V ^8„  d   QhRRRRRR/# re   r   )r   s   "r   r   rb  Ñ  s.   € ÷ [Rñ [RØ4ð[RØCNð[Rà	%ñ[Rr   c                óF  a	€ Vf   V P                   e   V P                   pV P                  '       d<   V P                   F  pTP                  Yf   RMTR7      pK  	  Ve   \        V4      # M#VRJ d   \        V4      # VRJ d   V	3R lV 4       # . p. pRpV Fn  p\	        V4      pVf%   VP                  V4       VP                  V4       K6  VP                  '       d   VP                  V4       K[  VP                  V4       RpKp  	  \        V'       d   V4      # T4      # )a  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.

>>> 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']

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']
Tr  Fc              3  ón   <"  € T F*  p\        V4      ;oe   SP                  '       d   K&  Vx € K,  	  R # 5ir   )r   r    )rE  r_   r   s   & €r   rF  Ú&SpecifierSet.filter.<locals>.<genexpr>  s3   øé € ð á (˜Ü#2°4Ó#8Ð8˜ÒAØ"×0Õ0÷ ’DÛ (ùs   ƒ#5«
5)rW   rg  rh   r�  r   r   r    )
r<   rf   rW   r„   Úfiltered_itemsÚfound_prereleasesÚfound_final_releaser_   r$  r   s
   &&&      @r   rh   ÚSpecifierSet.filterÑ  s3  ø€ ðN Ò 4×#3Ñ#3Ò#?Ø×*Ñ*ˆKð
 �;�;ˆ;ð Ÿœ�ØŸ;™;ØÒ2E©$È;ð 'ó ’ñ $ð
 Ò&ô ˜H“~Ð%ð 'ð ˜dÓ"Ü˜H“~Ð%à˜eÓ#ôá (óð ð 46ˆØ68ÐØ#ÐãˆDÜ,¨TÓ2ˆNð Ò%Ø×%Ñ% dÔ+Ø!×(Ñ(¨Ö.Ø×-×-Ð-Ø!×(Ñ(¨Ö.à×%Ñ% dÔ+Ø&*Ò#ñ ô ×&9�NÓQÐQÐ?PÓQÐQr   )r�   rg  r&  )NNr   )r-   r.   r/   r0   r1   rj   r�   rl   rW   ro   r¹   rA   rH   r„  rQ   r‹  r�  r  rb   rh   r2   r   r   r   r_  r_  á  s   † ñð +€I÷$(ðL ôó ðð& ×Ñô"ó ð"õ5õ*=õ!õõ>+õ4 õ!õ#÷*&N÷P[Ró [Rr   r_  )&r1   Ú
__future__r   rm   rÝ   r)  Útypingr   r   r   r   r   r   Úutilsr	   r   r
   r   r7   r   r   rN   rÏ   r   r$   r*   r‚  r,   ÚABCMetar4   rr   r*  r6  rà   rÛ   rß   rç   r_  r   r   r   Ú<module>r¦     sÅ   ðñõ #ã 
Û Û 	ß F× Få 'ß ,à˜ ˜Õ%€ÙÐ1¸ÔIÐ Ø˜W c˜N¨DÐ0Õ1Ð õõ+õJô	�zô 	ô<˜cŸk™kõ <ô~i,�ô i,ðX —
’
Ð:Ó;€õõ,'õõô*KR�=ö KRr   