ó
    ÷Þ j>Î  ã                  ój  • % S r SSKJ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  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  \(       a7  SSKrSS	KJrJrJr  \R>                  S
:¼  a  SSKJ r   OSSK!J r   SSK"J#r#  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,\RZ                  \R\                  \R^                  \R`                  S.r1S\2S'   S'S jr3 " S S\45      r5 " S S\Rl                  S9r7 " S S\75      r8        S(S  jr9 " S! S"\75      r:      S)S# jr;g)*zŠ
.. testsetup::

    from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from packaging.version import Version
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚTypeVarÚUnioné   )	Ú
FULL_RANGEÚbounds_for_specÚcoerce_versionÚfilter_by_rangesÚintersect_specifier_boundsÚmatches_bounds_onlyÚranges_are_prerelease_onlyÚresolve_prereleasesÚtrim_release)Úcanonicalize_version)ÚVersion)ÚIterableÚIteratorÚSequence)é   é
   )Ú	TypeGuard)Úranges)ÚInterval)ÚBaseSpecifierÚInvalidSpecifierÚ	SpecifierÚSpecifierSetc                 ó   • [         $ ©N)Ú__all__© ó    ÚN/var/www/html/gaurav/venv/lib/python3.13/site-packages/packaging/specifiers.pyÚ__dir__r(   <   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_specr0   @   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_prer4   I   s   € Ø�$ˆ;×/œ* S¬$Ó/Ð/r&   ÚTÚUnparsedVersionVar)Úbound)ú>=ú<=ú==ú!=z-dict[str, Callable[[Version, Version], bool]]Ú_DIRECT_COMPARE_OPSr    c                óž  • U R                   u  p#UR                  S5      (       d  UR                  b  g[        R	                  U5      nUb  U" XR                  U5      5      $ US;   af  U R                  U5      nUR                  UR                  :w  d,  [        UR                  5      [        UR                  5      :w  a  US:X  a  X:  $ X:„  $ gg)a  Match ``parsed`` against ``specifier`` without building a range.

Handles ``>=``, ``<=``, ``==``, ``!=``, ``<``, ``>`` when the spec is
not a wildcard and ``parsed`` has no local. Returns ``None`` when the
range path must be used. Pre-release policy is left to the caller.
ú.*N)Ú<Ú>r?   )	Ú_specÚendswithÚlocalr<   ÚgetÚ_require_spec_versionÚepochr   Úrelease)Ú	specifierÚparsedÚop_strÚver_strÚdirect_compareÚspec_vs         r'   Ú_fast_matchrN   ]   s¾   € ð  —o‘o�O€FØ×Ñ˜×Ñ §¡Ñ!9Øä(×,Ñ,¨VÓ4€NØÑ!Ù˜f×&EÑ&EÀgÓ&NÓOÐOà�ÓØ×0Ñ0°Ó9ˆð �<‰<˜6Ÿ<™<Ó'¬<¸¿¹Ó+GÌ<Ø�N‰NóL
ó ,
ð '-°£m�6‘?ÐH¸¹ÐHØàr&   c                  ó   • \ rS rSrSrSrg)r   éz   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)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r%   r&   r'   r   r   z   s   † ôr&   r   c                  óì  • \ rS 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   é†   zG
Abstract base class for :class:`Specifier` and :class:`SpecifierSet`.
r%   )Ú_strc                ó   • [        U 5      $ )z Internal property for match_args©r.   ©Úselfs    r'   rY   ÚBaseSpecifier._strŽ   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__“   ó   � r&   c                ó   • g)z6
Returns a hash value for this Specifier-like object.
Nr%   r\   s    r'   Ú__hash__ÚBaseSpecifier.__hash__š   rb   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%   ©r]   Úothers     r'   Ú__eq__ÚBaseSpecifier.__eq__    rb   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©   rb   r&   c                ó   • g)zASetter for :attr:`prereleases`.

:param value: The value to set.
Nr%   ©r]   Úvalues     r'   rl   rm   ²   rb   r&   Nc                ó   • g)zB
Determines if the given item is contained within this specifier.
Nr%   )r]   Úitemrl   s      r'   ÚcontainsÚBaseSpecifier.contains¹   rb   r&   c                ó   • g r#   r%   ©r]   Úiterablerl   Úkeys       r'   ÚfilterÚBaseSpecifier.filter¿   ó   € ð (+r&   c                ó   • g r#   r%   rv   s       r'   ry   rz   Ç   ó   € ð 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%   rv   s       r'   ry   rz   Ï   rb   r&   ©Úreturnr.   ©r€   Úint©rh   Úobjectr€   r2   ©r€   úbool | None)rp   r2   r€   ÚNoner#   )rr   r.   rl   r†   r€   r2   ©N.©rw   zIterable[UnparsedVersionVar]rl   r†   rx   r‡   r€   zIterator[UnparsedVersionVar]©rw   zIterable[T]rl   r†   rx   zCallable[[T], UnparsedVersion]r€   zIterator[T]©NN©rw   úIterable[Any]rl   r†   rx   ú'Callable[[Any], UnparsedVersion] | Noner€   úIterator[Any])rQ   rR   rS   rT   rU   Ú	__slots__Ú__match_args__ÚpropertyrY   ÚabcÚabstractmethodr`   rd   ri   rl   Úsetterrs   ÚtypingÚoverloadry   rV   r%   r&   r'   r   r   †   s�  † ñð €IØ€Nàóó ðð 	×Ñóó ðð 	×Ñóó ðð
 	×Ñóó ðð Ø×Ñóó ó ðð ×Ñóó ðð 	×Ñõó ðð
 ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ô+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
ôó ðð 	×Ñð $(Ø7;ð		àð	ð !ð	ð 5ð		ð
 
ô	ó ó	r&   r   )Ú	metaclassc            	      ó6  • \ 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'   S&S'S jjrS(S jrS)S 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5       r\S/S j5       rS/S jrS/S jr\S0S j5       rS1S jrS2S  jrS3S! jrS4S5S" jjr\ RB                    S6       S7S# jj5       r"\ RB                    S6       S8S$ jj5       r"  S9       S:S% jjr"Sr#g);r    éÜ   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 packaging < 26.2 is supported but may be removed in a future
    release.
)Ú_prereleasesÚ_rangesrA   Ú_spec_versiona  
        (?:
            (?:
                # 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;   r9   r8   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        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;   r9   r8   r*   r
   )	Ú_regexÚ	fullmatchr   ÚstripÚ
startswithrA   r›   r�   rœ   )r]   r/   rl   ÚoperatorÚversions        r'   Ú__init__ÚSpecifier.__init__c  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ˆŒ
ð (Ôð :>ˆÔð 37ˆ�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   )r]   r¯   Úversion_specifiers      r'   Ú_get_spec_versionÚSpecifier._get_spec_version†  sV   € à×ÑÑ)¨d×.@Ñ.@ÀÑ.CÀwÓ.NØ×%Ñ% aÑ(Ð(ä*¨7Ó3ÐØÑ$Øà%Ð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´   )r]   r¯   Úspec_versions      r'   rE   ÚSpecifier._require_spec_version’  s&   € ð ×-Ñ-¨gÓ6ˆØÑ'Ð'Ð'ØÐr&   c                óæ   • U R                   b  U R                   $ U R                  nU R                  nUS:X  a  [        nO,U R	                  UR                  S5      5      n[        XU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œ   r®   r¯   r   rE   Úremovesuffixr   )r]   ÚoprK   Úresultr¯   s        r'   Ú
_to_rangesÚSpecifier._to_rangesœ  sg   € ð �<‰<Ñ#Ø—<‘<Ðà�]‰]ˆØ—,‘,ˆà�‹;Ü)3‰Fà×0Ñ0°×1EÑ1EÀdÓ1KÓLˆGÜ$ R°'Ó:ˆFàŒØˆr&   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›   rA   rB   r´   Úis_prerelease)r]   r®   Úversion_strr¯   s       r'   rl   ÚSpecifier.prereleases±  sz   € ð ×ÑÑ(Ø×$Ñ$Ð$ð !%§
¡
ÑˆØ�tÓØð �tÓ × 4Ñ 4°T× :Ñ :Øð ×(Ñ(¨Ó5ˆØ‰?Øð ×$Ñ$Ð$r&   c                ó   • Xl         g r#   )r›   ro   s     r'   rl   rÂ   Í  s   € à!Õr&   c                ó2   • U R                   U R                  4$ r#   )rA   r›   r\   s    r'   Ú__getstate__ÚSpecifier.__getstate__Ñ  s   € ð —
‘
˜D×-Ñ-Ð.Ð.r&   c                ó¦  • 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
   rA   r›   ÚinvalidzCannot restore Specifier from )r�   rœ   r+   r,   r-   r0   r4   rA   r›   ÚdictrD   Ú	TypeError)r]   Ústater/   rl   Ú_Ú	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   ©rA   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
   rÑ   r\   s    r'   r¯   ÚSpecifier.version  rÓ   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?   Ú(ú)>©r›   rl   Ú	__class__rQ   r.   ©r]   r3   s     r'   Ú__repr__ÚSpecifier.__repr__
  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{}{})ÚformatrA   r\   s    r'   r`   ÚSpecifier.__str__  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)rA   rB   rE   r   )r]   r®   r¯   r·   Úcanonical_versions        r'   Ú_canonical_specÚSpecifier._canonical_spec&  s]   € à ŸJ™JÑˆØ�uÓ × 0Ñ 0°× 6Ñ 6ØÐ$Ð$à×1Ñ1°'Ó:ˆä0Ø¸4Ñ/?ñ
Ðð Ð*Ð*r&   c                ó,   • [        U R                  5      $ r#   )Úhashræ   r\   s    r'   rd   ÚSpecifier.__hash__4  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.   rÜ   r   ÚNotImplementedræ   rg   s     r'   ri   ÚSpecifier.__eq__7  sm   € ô& �eœS×!Ñ!ð&ØŸ™¤s¨5£zÓ2‘ô ˜E§>¡>×2Ñ2Ü!Ð!à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ó &Ü%Ò%ð&ús   —A+ Á+A>Á=A>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
©rs   ©r]   rr   s     r'   Ú__contains__ÚSpecifier.__contains__T  ó   € ð& �}‰}˜TÓ"Ð"r&   c           	     óT  • U R                   S   S:X  a#  [        [        U R                  U/US95      5      $ [	        U5      nUc  gUc   [        U R                  U R                  5      nUSL a  UR                  (       a  g[        X5      nUb  U$ [        U R                  5       U5      $ )aW  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:`~packaging.version.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

.. versionchanged:: 26.0

    With ``prereleases=None``, a prerelease now matches. A single
    version has no alternatives, so the :pep:`440` rule to accept
    prereleases when nothing else satisfies the specifier applies.
    Earlier versions rejected it. An unparsable version now returns
    ``False`` instead of raising :exc:`~packaging.version.InvalidVersion`.
r   r§   ©rl   F)rA   r2   Úlistry   r   r   r›   rl   rÀ   rN   r   r½   )r]   rr   rl   rI   Úmatchs        r'   rs   ÚSpecifier.containsi  s¢   € ðD �:‰:�a‰=˜EÓ!Üœ˜TŸ[™[¨$¨¸[˜[ÐIÓJÓKÐKä Ó%ˆØ‰>ààÑÜ-¨d×.?Ñ.?À×AQÑAQÓRˆKà˜%Ò F×$8×$8Øô ˜DÓ)ˆØÑØˆLä" 4§?¡?Ó#4°fÓ=Ð=r&   c                ó   • g r#   r%   rv   s       r'   ry   ÚSpecifier.filter¡  r{   r&   c                ó   • g r#   r%   rv   s       r'   ry   rú   ©  r}   r&   c                ó  ^^• Uc   [        U R                  U R                  5      nU R                  S:X  a4  U R                  R                  5       mUU4S jU 5       n[        UTU5      $ [        U R                  5       UTU5      $ )a  Filter items in the given iterable, that match the specifier.

:param iterable:
    An iterable that can contain version strings and
    :class:`~packaging.version.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:`~packaging.version.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'}]

.. versionchanged:: 26.1

    Added the ``key`` parameter.
r§   c              3  óz   >#   • U H1  n[        Tc  UOT" U5      5      R                  5       T:X  d  M-  Uv •  M3     g 7fr#   )r.   Úlower)Ú.0rr   rx   Ú
spec_lowers     €€r'   Ú	<genexpr>Ú#Specifier.filter.<locals>.<genexpr>Þ  s:   øé € ð á$�DÜ˜s™{‘t±°D³	Ó:×@Ñ@ÓBÀjÑP÷ ‘Ú$ùs   ƒ+;²	;)	r   r›   rl   r®   r¯   rþ   Ú_apply_prereleases_filterr   r½   )r]   rw   rl   rx   Úmatchesr   s      ` @r'   ry   rú   ±  sz   ù€ ðP ÑÜ-¨d×.?Ñ.?À×AQÑAQÓRˆKà�=‰=˜EÓ!ØŸ™×+Ñ+Ó-ˆJõá$óˆGô
 -¨W°c¸;ÓGÐGä §¡Ó 1°8¸SÀ+ÓNÐNr&   ©rØ   N)r/   r.   rl   r†   r€   r‡   )r¯   r.   r€   zVersion | None)r¯   r.   r€   r   ©r€   zSequence[Interval]r…   ©rp   r†   r€   r‡   )r€   z#tuple[tuple[str, str], bool | None]©rË   r„   r€   r‡   r   )r€   ztuple[str, str]r�   rƒ   )rr   zstr | Versionr€   r2   r#   )rr   ÚUnparsedVersionrl   r†   r€   r2   rˆ   r‰   rŠ   r‹   rŒ   )$rQ   rR   rS   rT   rU   r�   Ú_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASErª   r¨   Ú__annotations__r°   r´   rE   r½   r’   rl   r•   rÅ   rÎ   r®   r¯   rÞ   r`   ræ   rd   ri   rñ   rs   r–   r—   ry   rV   r%   r&   r'   r    r    Ü   sâ  ‡ ñð&€IðZÐðx �ZŠZØÐ%Ñ%¨Ñ.°·
±
¸R¿]¹]Ñ0Jó€Fð ØØØØ"ØØØñ	€J�ó 	ö!7ôF
!ôôð* ó%ó ð%ð6 ×Ñó"ó ð"ô/ôDðB óó ðð óó ðôBô$*ð ó+ó ð+ô*ô=ô:#ö*6>ðp ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ô+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
ôó ðð $(Ø7;ð	4Oàð4Oð !ð4Oð 5ð	4Oð
 
÷4Oð 4Or&   c                ób   ^^• Uc  [        U T5      $ U(       a  [        U 5      $ UU4S jU  5       $ )zÇApply ``prereleases=`` handling to an already-matched iterable.

``None`` means PEP 440 default (buffer pre-releases until a final
appears); ``True`` yields everything; ``False`` drops pre-releases.
c              3  ó~   >#   • U H3  n[        Tc  UOT" U5      5      =mb  TR                  (       a  M/  Uv •  M5     g 7fr#   )r   rÀ   )rÿ   rr   rx   rI   s     €€r'   r  Ú,_apply_prereleases_filter.<locals>.<genexpr>ö  s=   øé € ð áˆDÜ$¨S©[¡T¹cÀ$»iÓHÐHˆFÑQØ×#Õ#÷ 	‰Úùs   ƒ-=´	=)Ú_pep440_filter_prereleasesÚiter)r  rx   rl   rI   s    ` @r'   r  r  è  s7   ù€ ð ÑÜ)¨'°3Ó7Ð7ÞÜ�G‹}Ðõáóð r&   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 jrS/S jrS/S jrS0S jr  S1       S2S jjr\R>                    S3       S4S jj5       r \R>                    S3       S5S jj5       r   S1       S6S jjr Sr!g)7r!   iþ  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›   rœ   Ú_specsNc                óÖ  • [        U[        5      (       am  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        SU l        X 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><  s   é € Ð%K¹{¸! e¬s°1«v¦oº{ùó   ‚r
   N)r+   r.   Úsplitr¬   r,   Úmapr    r  r  Úanyr-   r  r  rœ   r›   )r]   Ú
specifiersrl   r  Úsplit_specifierss        r'   r°   ÚSpecifierSet.__init__  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ˆÔØ.2ˆÔØ26ˆŒð (Õùò#  Ws   ©C&ÁC&c           	     ó¼   • U R                   (       d@  [        [        R                  [	        U R
                  [        S95      5      U l        SU l         U R
                  $ )zBDeduplicate, sort, and cache specs for order-sensitive operations.©rx   T)r  r,   rÉ   ÚfromkeysÚsortedr  r.   r\   s    r'   Ú_canonical_specsÚSpecifierSet._canonical_specsF  s=   € à×"×"Ü¤§¡¬f°T·[±[ÄcÑ.JÓ KÓLˆDŒKØ"&ˆDÔØ�{‰{Ðr&   c                óž   • U R                   b  U R                   $ U R                  (       d  g [        S U R                   5       5      (       a  gg )Nc              3  ó6   #   • 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'   rl   ÚSpecifierSet.prereleasesM  sE   € ð ×ÑÑ(Ø×$Ñ$Ð$ð
 �{�{Øô Ñ2 d§k¢kÓ2×2Ñ2Øàr&   c                ó   • Xl         S U l        g r#   )r›   r  ro   s     r'   rl   r2  a  s   € à!ÔØ!%ˆÕr&   c                ó2   • U R                   U R                  4$ r#   )r  r›   r\   s    r'   rÅ   ÚSpecifierSet.__getstate__f  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  ó@   #   • U H  n[        U[        5      v •  M     g 7fr#   ©r+   r    r  s     r'   r  Ú,SpecifierSet.__setstate__.<locals>.<genexpr>w  ó   é € Ð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  r9  }  s   é € Ð-MÁuÀ!¨e´s¸1³v®oÂuùr!  r  r%   r›   r)  c              3  ó@   #   • U H  n[        U[        5      v •  M     g 7fr#   r8  r  s     r'   r  r9  ‰  r:  r;  c              3  ó<   #   • U H  nS [        U5      ;   v •  M     g7fr  r[   r  s     r'   r  r9  �  s   é € Ð-SÁ{À!¨e´s¸1³v®oÂ{ùr!  c              3  ó@   #   • U H  n[        U[        5      v •  M     g 7fr#   r8  r  s     r'   r  r9  š  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  r9     s   é € Ð)OÁ;¸a¨%´3°q³6®/Â;ùr!  z!Cannot restore SpecifierSet from )rœ   r  r+   r,   r-   Úallr4   r  r›   r  r$  r  rÉ   rD   Ú	frozensetr+  r.   rÊ   )r]   rË   Úspecsrl   rÌ   rÍ   s         r'   rÎ   ÚSpecifierSet.__setstate__l  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)>
r×   rØ   r?   rÙ   rÚ   rÛ   rÝ   s     r'   rÞ   Ú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  ó6   #   • U H  n[        U5      v •  M     g 7fr#   r[   r  s     r'   r  Ú'SpecifierSet.__str__.<locals>.<genexpr>Å  s   é € Ð@Ñ(? 1œ˜AŸ˜Ò(?ùr1  )Újoinr,  r\   s    r'   r`   ÚSpecifierSet.__str__º  s"   € ð �x‰xÑ@¨×(=Ñ(=Ô(?Ó@Ó@Ð@r&   c                ó4   • [        U R                  5       5      $ r#   )ré   r,  r\   s    r'   rd   Ú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        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
   zFCannot combine SpecifierSets with True and False prerelease overrides.)
r+   r.   r!   rì   r  r-   r  r  r›   Ú
ValueError)r]   rh   rH   s      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!   rì   r,  rg   s     r'   ri   Ú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')>]
)r  r  r\   s    r'   Ú__iter__ÚSpecifierSet.__iter__  s   € ô �D—K‘KÓ Ð r&   c                óŽ   • U R                   b  U R                   $ [        S U R                   5       5      U l         U R                   $ )z�Intersect all specifiers into a single sequence of version ranges.

Empty when unsatisfiable. Callers must ensure ``self._specs``
is non-empty.
c              3  ó>   #   • U H  oR                  5       v •  M     g 7fr#   )r½   r  s     r'   r  Ú+SpecifierSet._get_ranges.<locals>.<genexpr>  s   é € Ð1VÉ+ÀQ·,±,·.°.Ê+ùs   ‚)rœ   r   r  r\   s    r'   Ú_get_rangesÚSpecifierSet._get_ranges  s8   € ð �<‰<Ñ#Ø—<‘<Ðä1Ñ1VÈ$Ï+Ê+Ó1VÓVˆŒØ�|‰|Ð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       5      nX l         U$ )an  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

.. versionadded:: 26.1
F)r  r  r]  Ú_check_arbitrary_unsatisfiablerl   r   )r]   Úcachedr¼   s      r'   Úis_unsatisfiableÚSpecifierSet.is_unsatisfiable  s|   € ð  ×'Ñ'ˆØÑØˆMà�{�{Ø%*ˆDÔ"Øà×%Ñ%Ó'Ô'ˆæØ×8Ñ8Ó:ˆFæ˜$×*Ñ*¨eÒ3Ü/°×0@Ñ0@Ó0BÓCˆFà!'ÔØˆ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  óZ   >#   • U H!  oR                   R                  5       T:g  v •  M#     g 7fr#   )r¯   rþ   )rÿ   r  Úfirsts     €r'   r  Ú>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>N  s   øé € ÐA±=¨a�y‰y�‰Ó  EÖ)²=ùs   ƒ(+r
   NTc              3  óB   >#   • U H  oR                  T5      v •  M     g 7fr#   rï   )rÿ   r  Ú	candidates     €r'   r  rg  f  s   øé € Ð?±h°—z‘z )×,Ð,²hùs   ƒ)	r  r®   r¯   rþ   r$  r   rl   rÀ   rA  )r]   r  r¥   Ústandardri  rf  s       @@r'   r`  Ú+SpecifierSet._check_arbitrary_unsatisfiableA  sè   ù€ ð !%§¢ÓC¡˜1¯z©z¸UÑ/B—Q¡ˆ	ÐCÞØð ˜!‘×$Ñ$×*Ñ*Ó,ˆÜÔA°9¸Q¸R±=ÓA×AÑAØô # 9¨Q¡<×#7Ñ#7Ó8ˆ	ð
 ×Ñ Ò%ØÑ%Ø×'×'àà#Ÿ{š{ÓB™{˜!¯j©j¸EÑ.A—A™{ˆÐBÞØàÑàäÔ?±hÓ?Ó?Ô?Ð?ùò= Dùò, Cs   ‘D §D Â<DÃDc                ó0   • SSK Jn  UR                  U 5      $ )a3  Return the :class:`~packaging.ranges.VersionRange` this set accepts.

An empty set yields the full range; an unsatisfiable set yields the
empty range. ``===`` specifiers contribute literal-string admission.

>>> SpecifierSet(">=1.0,<2.0").to_range()
<VersionRange '[1.0, 2.0.dev0)'>

.. versionadded:: 26.3
r
   )ÚVersionRange)r   rm  Ú_from_specifier_set)r]   rm  s     r'   Úto_rangeÚSpecifierSet.to_rangeh  s   € õ 	)à×/Ñ/°Ó5Ð5r&   c                óž   • [        U[        5      (       d  [        S5      eU R                  (       d  UR                  (       a  [	        S5      eg )Nzexpected a SpecifierSetz+set relations do not support === specifiers)r+   r!   rÊ   r  rO  rg   s     r'   Ú_check_relation_operandÚ$SpecifierSet._check_relation_operandw  s=   € Ü˜%¤×.Ñ.ÜÐ5Ó6Ð6Ø×× %×"6×"6ÜÐJÓKÐKð #7r&   c                ó~   • U R                  U5        U R                  5       R                  UR                  5       5      $ )aÝ  Return whether every version matching this set also matches other.

:raises ValueError:
    If either set uses ``===`` specifiers, or the two sets were
    given different ``prereleases`` arguments (unset on one side
    counts as different).
:raises TypeError:
    If other is not a :class:`SpecifierSet`.

>>> SpecifierSet(">=3.12,<3.13").is_subset(SpecifierSet(">=3.12"))
True
>>> SpecifierSet(">=3.12").is_subset(SpecifierSet(">=3.12,<3.13"))
False

.. versionadded:: 26.3
)rr  ro  Ú	is_subsetrg   s     r'   ru  ÚSpecifierSet.is_subset}  s0   € ð" 	×$Ñ$ UÔ+Ø�}‰}‹×(Ñ(¨¯©Ó)9Ó:Ð:r&   c                ó~   • U R                  U5        U R                  5       R                  UR                  5       5      $ )a–  Return whether every version matching other also matches this set.

:raises ValueError:
    If either set uses ``===`` specifiers, or the two sets were
    given different ``prereleases`` arguments (unset on one side
    counts as different).
:raises TypeError:
    If other is not a :class:`SpecifierSet`.

>>> SpecifierSet(">=3.12").is_superset(SpecifierSet(">=3.12,<3.13"))
True

.. versionadded:: 26.3
)rr  ro  Úis_supersetrg   s     r'   rx  ÚSpecifierSet.is_superset‘  s0   € ð 	×$Ñ$ UÔ+Ø�}‰}‹×*Ñ*¨5¯>©>Ó+;Ó<Ð<r&   c                ó~   • U R                  U5        U R                  5       R                  UR                  5       5      $ )aÎ  Return whether this set and other share no matching versions.

:raises ValueError:
    If either set uses ``===`` specifiers, or the two sets were
    given different ``prereleases`` arguments (unset on one side
    counts as different).
:raises TypeError:
    If other is not a :class:`SpecifierSet`.

>>> SpecifierSet("<3.12").is_disjoint(SpecifierSet(">=3.12"))
True
>>> SpecifierSet("<3.12").is_disjoint(SpecifierSet(">=3.11"))
False

.. versionadded:: 26.3
)rr  ro  Úis_disjointrg   s     r'   r{  ÚSpecifierSet.is_disjoint£  s0   € ð" 	×$Ñ$ UÔ+Ø�}‰}‹×*Ñ*¨5¯>©>Ó+;Ó<Ð<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 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           	     ód  • [        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bµ  U R                  (       d¤  UR
                  c—  U R                  (       a†  UR                  (       a  USL d  Uc  U R                  SL a  gU R                  nUcC  U R                   H  n[        Xt5      nUc    OU(       a  M    g   gU R                  5       =o`l        [        Xd5      $ [        [        U R                  U/US95      5      $ )aT  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:`~packaging.version.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

.. versionchanged:: 26.0

    With ``prereleases=None``, a prerelease now matches. A single
    version has no alternatives, so the :pep:`440` rule to accept
    prereleases when nothing else satisfies the specifiers applies.
    Earlier versions rejected it. An unparsable version now returns
    ``False`` instead of raising :exc:`~packaging.version.InvalidVersion`.
TFrõ   )r   rÀ   r  r+   r   rC   r  r›   rœ   rN   r]  r   r2   rö   ry   )	r]   rr   rl   Ú	installedr¯   Ú
check_itemÚboundsr/   r÷   s	            r'   rs   ÚSpecifierSet.containsÌ  s  € ôP ! Ó&ˆàÑ¦9°×1F×1FØˆKð ‰?˜t×2×2¼:ÀdÌG×;TÑ;TØ‰Jà ˆJð ÑØ×'×'Ø—‘Ñ%Ø——à×$×$Ø˜uÒ$ØÑ'¨D×,=Ñ,=ÀÒ,Fàà—\‘\ˆFØ‰~ð
 !ŸKœK�DÜ'¨Ó6�EØ‘}Ùß ˜5Ù$ñ (ð  à(,×(8Ñ(8Ó(:Ð:�œä& vÓ7Ð7ä”D˜Ÿ™ j \¸{˜ÐKÓLÓMÐMr&   c                ó   • g r#   r%   rv   s       r'   ry   ÚSpecifierSet.filter$  r{   r&   c                ó   • g r#   r%   rv   s       r'   ry   r…  ,  r}   r&   c                ó@  ^^• Uc  U R                   b  U R                   nU R                  (       ac  U R                  (       a&  U R                  mUU4S jU 5       n[        UTU5      $ U R                  nUc  U R                  5       n[        XQTU5      $ [        UTU5      $ )aG  Filter items in the given iterable, that match the specifiers in this set.

:param iterable:
    An iterable that can contain version strings and
    :class:`~packaging.version.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:`~packaging.version.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']

.. versionchanged:: 26.0

    Prerelease filtering now follows the PEP 440 recommendation of
    yielding prereleases only when no final release is present.

.. versionchanged:: 26.1

    Added the ``key`` parameter.
c              3  ób   >^#   • U H$  m[        UU4S  jT 5       5      (       d  M   Tv •  M&     g7f)c              3  óX   >#   • U H   nUR                  Tc  TOT" T5      SS9v •  M"     g 7f)NTrõ   rï   )rÿ   r  rr   rx   s     €€r'   r  Ú0SpecifierSet.filter.<locals>.<genexpr>.<genexpr>z  s0   øé € ð á!&˜Að Ÿ
™
¨3©;¡4¹CÀ»IÐSW˜
ÕXÚ!&ùs   ƒ'*N)rA  )rÿ   rr   rx   rC  s    @€€r'   r  Ú&SpecifierSet.filter.<locals>.<genexpr>w  s/   ùé € ð á (˜Üõ á!&ó÷ ÷ ‘DÚ (ùs   „/¦	/)rl   r  r  r  rœ   r]  r   )r]   rw   rl   rx   r  r   rC  s      `  @r'   ry   r…  4  s—   ù€ ðx Ñ 4×#3Ñ#3Ñ#?Ø×*Ñ*ˆKà�;�;Ø×"×"àŸ™�õá (ó�ô 1°¸#¸{ÓKÐKà—\‘\ˆFØ‰~Ø×)Ñ)Ó+�Ü# F°c¸;ÓGÐGô )¨°3¸ÓDÐDr&   r  )r%  zstr | Iterable[Specifier]rl   r†   r€   r‡   )r€   ztuple[Specifier, ...]r…   r  )r€   z)tuple[tuple[Specifier, ...], bool | None]r  r   r�   )rh   zSpecifierSet | strr€   r!   rƒ   )r€   zIterator[Specifier]r  )r€   r2   )r€   zranges.VersionRange)rh   r„   r€   r‡   )rh   r!   r€   r2   )rr   r	  r€   r2   r‹   )rr   r	  rl   r†   r€  r†   r€   r2   rˆ   r‰   rŠ   rŒ   )"rQ   rR   rS   rT   rU   r�   r°   r,  r’   rl   r•   rÅ   rÎ   rÞ   r`   rd   rP  ri   rU  rX  r]  rb  r`  ro  rr  ru  rx  r{  rñ   rs   r–   r—   ry   rV   r%   r&   r'   r!   r!   þ  sÝ  † ñð$€Ið 13Ø#'ð*(à-ð*(ð !ð*(ð 
õ	*(ôXð óó ðð& ×Ñó&ó ð&ô0ô7GôrBô*Aô-ôô@Cô4 ô!ô
ô!ôF%@ôN6ôLô;ô(=ô$=ô(#ð0 $(Ø!%ð	VNàðVNð !ðVNð ð	VNð
 
õVNðp ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ô+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
ôó ðð $(Ø7;ð	SEàðSEð !ðSEð 5ð	SEð
 
÷SEð SEr&   r!   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   ÚappendrÀ   )rw   rx   Úall_nonfinalÚarbitrary_stringsÚfound_finalrr   rI   s          r'   r  r  Š  s·   é € ð !€LØ#%Ðà€KÛˆÜ¨©¡¹¸T»ÓCˆà‰>ö Ø“
à!×(Ñ(¨Ô.Ø×#Ñ# DÔ)Ùà×#×#æØ,×,Ð,Ø"�ØŠJÙ÷ ˆ{Ø×Ñ Ö%ñ1 ö6 Ø×Ñð ñ -ñ 	 ùs*   ‚A2B6Á4B2Á5B6Â
!B6Â+B4Â,B6Â4B6)r€   z	list[str])r/   r„   r€   zTypeGuard[tuple[str, str]])r3   r„   r€   zTypeGuard[bool | None])rH   r    rI   r   r€   r†   )r  r�   rx   rŽ   rl   r†   r€   r�   )rw   r�   rx   rŽ   r€   r�   )<rU   Ú
__future__r   r“   r  r–   r   r   r   r   r   r	   rœ   r   r   r   r   r   r   r   r   r   Úutilsr   r¯   r   ÚsysÚcollections.abcr   r   r   Úversion_infor   Útyping_extensionsrØ   r   r   r$   r(   r0   r4   r5   r.   r	  r6   Ú__ge__Ú__le__ri   Ú__ne__r<   r  rN   rO  r   ÚABCMetar   r    r  r!   r  r%   r&   r'   Ú<module>r›     sW  ðòõ #ã 
Û 	Û ÷÷ ÷
÷ 
õ 
õ (Ý æÛß<Ñ<à
×Ñ˜7Ó"Þ$å/åÝ!ò€ôôô0ñ ˆCƒL€Ø˜ ˜Ñ%€ÙÐ1¸ÑIÐ ð �.‰.Ø
�.‰.Ø
�.‰.Ø
�.‰.ñ	FÐ ÐBó ôô:	�zô 	ôS˜cŸk™kò SôlIO�ô IOðXØðà	0ðð ðð ô	ô,I
E�=ô I
EðX' Øð' Ø"Ið' àõ' r&   