Ë
    äO´j~ ã                  ó¸  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZ ddlmZmZ ej0                  dk\  rdd	l	mZ ne
rdd	lmZ g d
¢Zd:d„Zd;d„Zd<d„Z ed«      Zeee f   Z! ede!¬«      Z"eee ge#f   Z$ ed«      Z%de&d<   d=d„Z' G d„ dejP                  «      Z)ejT                   G d„ d«      «       Z+ejT                   G d„ d«      «       Z,ejT                   G d„ d«      «       Z-e	j                  reee+df   Z.e/e,e-f   Z0 e,dd«      Z1 e-dd«      Z2e1e2ffZ3de&d<   d>d „Z4	 	 	 	 	 	 d?d!„Z5d@d"„Z6d@d#„Z7dAd$„Z8d@d%„Z9d@d&„Z:d@d'„Z;	 	 	 	 dBd(„Z< G d)„ d*e=«      Z> G d+„ d,ej~                  ¬-«      Z@ G d.„ d/e@«      ZA ej„                  d0«      ZC	 	 	 	 	 	 dCd1„ZDdDd2„ZEdEd3„ZFdFd4„ZGdGd5„ZHdHd6„ZIdId7„ZJ G d8„ d9e@«      ZKy)Jz¢
.. testsetup::

    from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from pip._vendor.packaging.version import Version
é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚIterableÚIteratorÚSequenceÚTypeVarÚUnioné   )Úcanonicalize_version)ÚInvalidVersionÚVersion)é   é
   )Ú	TypeGuard)ÚBaseSpecifierÚInvalidSpecifierÚ	SpecifierÚSpecifierSetc                 ó   — t         S ©N)Ú__all__© ó    úw/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.pyÚ__dir__r   0   s   € Ü€Nr   c               ó–   — t        | t        «      xr8 t        | «      dk(  xr( t        | d   t        «      xr t        | d   t        «      S )Né   r   r   )Ú
isinstanceÚtupleÚlenÚstr)Úspecs    r   Ú_validate_specr&   4   sI   € ä�4œÓò 	%Ü�‹I˜‰Nò	%ä�t˜A‘w¤Ó$ò	%ô �t˜A‘w¤Ó$ð	r   c               ó.   — | d u xs t        | t        «      S r   )r!   Úbool)Úpres    r   Ú_validate_prer*   =   s   € Ø�$ˆ;Ò/œ* S¬$Ó/Ð/r   ÚTÚUnparsedVersionVar)Úboundz0.dev0zFinal[Version]Ú_MIN_VERSIONc                óŽ   — t        | «      }|dkD  r!| |dz
     dk(  r|dz  }|dkD  r| |dz
     dk(  rŒ|t        | «      k(  r| S | d| S )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)r#   )ÚreleaseÚends     r   Ú_trim_releaser2   J   s`   € ä
ˆg‹,€CØ
�Š'�g˜c A™gÑ&¨!Ò+Øˆq‰ˆð �Š'�g˜c A™gÑ&¨!Ó+àœS ›\Ò)ˆ7Ð<¨w°t¸¨}Ð<r   c                  óT   — e Zd ZdZ ej
                  «       Z ej
                  «       Zy)Ú_BoundaryKindz5Where a boundary marker sits in the version ordering.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚAFTER_LOCALSÚAFTER_POSTSr   r   r   r4   r4   R   s   „ Ù?à�4—9‘9“;€LØ�$—)‘)“+�Kr   r4   c                  óD   — e Zd ZdZdZd
d„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
y	)Ú_BoundaryVersiona  A point on the version line between two real PEP 440 versions.

    Some specifier semantics imply boundaries between real versions:
    ``<=1.0`` includes ``1.0+local`` and ``>1.0`` excludes
    ``1.0.post0``.  No real :class:`Version` falls on those boundaries,
    so this class creates values that sort between the real versions
    on either side.

    Two kinds exist, shown relative to a base version V::

        V < V+local < AFTER_LOCALS(V) < V.post0 < AFTER_POSTS(V)

    ``AFTER_LOCALS`` sits after V and every V+local, but before
    V.post0.  Upper bound of ``<=V``, ``==V``, ``!=V``.

    ``AFTER_POSTS`` sits after every V.postN, but before the next
    release segment.  Lower bound of ``>V`` (final or pre-release V)
    to exclude post-releases per PEP 440.
    )Ú_kindÚ_trimmed_releaseÚversionc                óT   — || _         || _        t        |j                  «      | _        y r   )rA   r?   r2   r0   r@   )ÚselfrA   Úkinds      r   Ú__init__z_BoundaryVersion.__init__q   s!   € ØˆŒØˆŒ
Ü -¨g¯o©oÓ >ˆÕr   c                ó¸  — | j                   }|j                  |j                  k(  r;t        |j                  «      | j                  k(  r|j
                  |j
                  k(  sy| j                  t        j                  k(  r4|j                  |j                  k(  xr |j                  |j                  k(  S |j                  |j                  k(  xs |j                  duS )z6Is ``other`` a version that this boundary sorts above?FN)rA   Úepochr2   r0   r@   r)   r?   r4   r;   ÚpostÚdev)rC   ÚotherÚvs      r   Ú
_is_familyz_BoundaryVersion._is_familyv   s�   € à�L‰Lˆà�K‰K˜1Ÿ7™7Ò"Ü˜eŸm™mÓ,°×0EÑ0EÒEØ—	‘	˜QŸU™UÒ"àØ�:‰:œ×3Ñ3Ò3à—:‘: §¡Ñ'Ò>¨E¯I©I¸¿¹Ñ,>Ð>à�y‰y˜AŸE™EÑ!Ò; U§Z¡Z°tÐ%;Ð;r   c                ó–   — t        |t        «      r4| j                  |j                  k(  xr | j                  |j                  k(  S t        S r   )r!   r>   rA   r?   ÚNotImplemented©rC   rJ   s     r   Ú__eq__z_BoundaryVersion.__eq__…   s8   € Ü�eÔ-Ô.Ø—<‘< 5§=¡=Ñ0ÒN°T·Z±ZÀ5Ç;Á;Ñ5NÐNÜÐr   c                ó&  — t        |t        «      r_| j                  |j                  k7  r| j                  |j                  k  S | j                  j                  |j                  j                  k  S | j                  |«       xr | j                  |k  S r   )r!   r>   rA   r?   ÚvaluerL   rO   s     r   Ú__lt__z_BoundaryVersion.__lt__Š   so   € Ü�eÔ-Ô.Ø�|‰|˜uŸ}™}Ò,Ø—|‘| e§m¡mÑ3Ð3Ø—:‘:×#Ñ# e§k¡k×&7Ñ&7Ñ7Ð7Ø—?‘? 5Ó)Ð)ÒB¨d¯l©l¸UÑ.BÐBr   c                óD   — t        | j                  | j                  f«      S r   )ÚhashrA   r?   ©rC   s    r   Ú__hash__z_BoundaryVersion.__hash__‘   s   € Ü�T—\‘\ 4§:¡:Ð.Ó/Ð/r   c                ó|   — | j                   j                  › d| j                  ›d| j                  j                  › d�S )Nú(z, ú))Ú	__class__r5   rA   r?   ÚnamerV   s    r   Ú__repr__z_BoundaryVersion.__repr__”   s4   € Ø—.‘.×)Ñ)Ð*¨!¨D¯L©LÐ+;¸2¸d¿j¹j¿o¹oÐ=NÈaÐPÐPr   N)rA   r   rD   r4   ÚreturnÚNone)rJ   r   r^   r(   ©rJ   Úobjectr^   r(   )rJ   z_BoundaryVersion | Versionr^   r(   ©r^   Úint©r^   r$   )r5   r6   r7   r8   Ú	__slots__rE   rL   rP   rS   rW   r]   r   r   r   r>   r>   Y   s.   „ ñð( 9€Ió?ó
<óó
Có0ôQr   r>   c                  ó<   — e Zd ZdZdZd	d„Zd
d„Zdd„Zdd„Zdd„Z	y)Ú_LowerBoundzÂLower bound of a version range.

    A version *v* of ``None`` means unbounded below (-inf).
    At equal versions, ``[v`` sorts before ``(v`` because an inclusive
    bound starts earlier.
    ©Ú	inclusiverA   c                ó    — || _         || _        y r   ©rA   ri   ©rC   rA   ri   s      r   rE   z_LowerBound.__init__£   ó   € ØˆŒØ"ˆ�r   c                ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r   ©r!   rg   rN   rA   ri   rO   s     r   rP   z_LowerBound.__eq__§   ó7   € Ü˜%¤Ô-Ü!Ð!Ø�|‰|˜uŸ}™}Ñ,ÒR°·±À5Ç?Á?Ñ1RÐRr   c                ó  — t        |t        «      st        S | j                  €|j                  d uS |j                  €y| j                  |j                  k7  r| j                  |j                  k  S | j                  xr |j                   S )NFro   rO   s     r   rS   z_LowerBound.__lt__¬   sq   € Ü˜%¤Ô-Ü!Ð!à�<‰<ÐØ—=‘=¨Ð,Ð,Ø�=‰=Ð ØØ�<‰<˜5Ÿ=™=Ò(Ø—<‘< %§-¡-Ñ/Ð/à�~‰~Ò5 e§o¡oÐ"5Ð5r   c                óD   — t        | j                  | j                  f«      S r   ©rU   rA   ri   rV   s    r   rW   z_LowerBound.__hash__¹   ó   € Ü�T—\‘\ 4§>¡>Ð2Ó3Ð3r   c                ót   — | j                   rdnd}d| j                  j                  › d|› | j                  ›d�S )Nú[rY   ú<ú ú>©ri   r[   r5   rA   ©rC   Úbrackets     r   r]   z_LowerBound.__repr__¼   s8   € ØŸš‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨W¨I°d·l±lÐ5EÀQÐGÐGr   N©rA   Ú_VersionOrBoundaryri   r(   r^   r_   r`   )rJ   rg   r^   r(   rb   rd   ©
r5   r6   r7   r8   re   rE   rP   rS   rW   r]   r   r   r   rg   rg   ˜   ó)   „ ñð )€Ió#óSó
6ó4ôHr   rg   c                  ó<   — e Zd ZdZdZd	d„Zd
d„Zdd„Zdd„Zdd„Z	y)Ú_UpperBoundzÀUpper bound of a version range.

    A version *v* of ``None`` means unbounded above (+inf).
    At equal versions, ``v)`` sorts before ``v]`` because an exclusive
    bound ends earlier.
    rh   c                ó    — || _         || _        y r   rk   rl   s      r   rE   z_UpperBound.__init__Ì   rm   r   c                ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r   ©r!   r‚   rN   rA   ri   rO   s     r   rP   z_UpperBound.__eq__Ð   rp   r   c                óü   — t        |t        «      st        S | j                  €y|j                  €y| j                  |j                  k7  r| j                  |j                  k  S | j                   xr |j                  S ©NFTr…   rO   s     r   rS   z_UpperBound.__lt__Õ   se   € Ü˜%¤Ô-Ü!Ð!à�<‰<ÐØØ�=‰=Ð ØØ�<‰<˜5Ÿ=™=Ò(Ø—<‘< %§-¡-Ñ/Ð/à—>‘>Ð!Ò5 e§o¡oÐ5r   c                óD   — t        | j                  | j                  f«      S r   rs   rV   s    r   rW   z_UpperBound.__hash__â   rt   r   c                ót   — | j                   rdnd}d| j                  j                  › d| j                  ›|› d�S )Nú]rZ   rw   rx   ry   rz   r{   s     r   r]   z_UpperBound.__repr__å   s8   € ØŸš‘#¨SˆØ�4—>‘>×*Ñ*Ð+¨1¨T¯\©\Ð,<¸W¸IÀQÐGÐGr   Nr}   r`   )rJ   r‚   r^   r(   rb   rd   r   r   r   r   r‚   r‚   Á   r€   r   r‚   Fztuple[_VersionRange]Ú_FULL_RANGEc                óÎ   — | j                   �|j                   €y| j                   |j                   k(  r| j                  xr |j                   S | j                   |j                   kD  S )zHTrue when the range defined by *lower* and *upper* contains no versions.Frk   )ÚlowerÚuppers     r   Ú_range_is_emptyr�   ö   sQ   € à‡}�}Ð §¡Ð 5ØØ‡}�}˜Ÿ™Ò%Ø—O‘OÒ7¨¯©Ð8Ð8Ø�=‰=˜5Ÿ=™=Ñ(Ð(r   c                ó2  — g }dx}}|t        | «      k  r‚|t        |«      k  rt| |   \  }}||   \  }}t        ||«      }	t        ||«      }
t        |	|
«      s|j	                  |	|
f«       ||k  r|dz  }n|dz  }|t        | «      k  r|t        |«      k  rŒt|S )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )r#   ÚmaxÚminr�   Úappend)ÚleftÚrightÚresultÚ
left_indexÚright_indexÚ
left_lowerÚ
left_upperÚright_lowerÚright_upperr�   rŽ   s              r   Ú_intersect_rangesr�   ÿ   s·   € ð
 #%€FØ Ð €J�Ø
”s˜4“yÒ
  [´3°u³:Ò%=Ø!% jÑ!1Ñˆ
�JØ#(¨Ñ#5Ñ ˆ�[ä�J Ó,ˆÜ�J Ó,ˆä˜u eÔ,Ø�M‰M˜5 %˜.Ô)ð ˜Ò#Ø˜!‰O‰Jà˜1ÑˆKð ”s˜4“yÒ
  [´3°u³:Ó%=ð  €Mr   c                óŽ   — g | j                   dd ¢| j                   d   dz   ‘­}t        j                  | j                  |d¬«      S )z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Néÿÿÿÿr   r   ©rG   r0   rI   )r0   r   Ú
from_partsrG   )rA   r0   s     r   Ú_next_prefix_dev0r¢     sC   € à>�—‘  Ð$Ð> g§o¡o°bÑ&9¸AÑ&=Ñ>€GÜ×Ñ G§M¡M¸7ÈÔJÐJr   c                óZ   — t        j                  | j                  | j                  d¬«      S )z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.r   r    )r   r¡   rG   r0   ©rA   s    r   Ú
_base_dev0r¥     s    € ä×Ñ G§M¡M¸7¿?¹?ÐPQÔRÐRr   c                ó`   — t        | t        «      s	 t        | «      } | S | S # t        $ r Y y w xY wr   )r!   r   r   r¤   s    r   Ú_coerce_versionr§   $  s:   € Ü�gœwÔ'ð	Ü˜gÓ&ˆGð €Nˆ7€Nøô ò 	Ùð	ús   ’! ¡	-¬-c                óB   — | j                   €| S | j                  d ¬«      S )N)Úlocal)r©   Ú__replace__r¤   s    r   Ú_public_versionr«   -  s%   € Ø‡}�}ÐØˆØ×Ñ TÐÓ*Ð*r   c                ó*   — | j                  ddd¬«      S )zyThe version that *version* is a post-release of.

    1.0.post1 -> 1.0, 1.0a1.post0 -> 1.0a1, 1.0.post0.dev1 -> 1.0.
    N©rH   rI   r©   ©rª   r¤   s    r   Ú
_post_baser¯   3  s   € ð
 ×Ñ D¨d¸$ÐÓ?Ð?r   c                ó(   — | j                  dd¬«      S )zZEarliest pre-release of *version*.

    1.2 -> 1.2.dev0, 1.2.post1 -> 1.2.post1.dev0.
    r   N©rI   r©   r®   r¤   s    r   Ú_earliest_prereleaser²   ;  s   € ð
 ×Ñ 1¨DÐÓ1Ð1r   c                ó$  — | €yt        | t        «      r\| j                  }|j                  r|j	                  ddd¬«      S |j
                  �|j
                  dz   nd}|j	                  |d¬«      S | j                  s| S | j	                  ddd¬«      S )z:Smallest non-pre-release version at or above *v*, or None.N)r)   rI   r©   r   r   )rH   r©   )r!   r>   rA   Úis_prereleaserª   rH   )rK   ÚinnerÚks      r   Ú_nearest_non_prereleaser·   C  s’   € ð 	€yØÜ�!Ô%Ô&Ø—	‘	ˆØ×Òà×$Ñ$¨°4¸tÐ$ÓDÐDð !&§
¡
Ð 6ˆU�Z‰Z˜!Š^¸AˆØ× Ñ  a¨tÐ Ó4Ð4Ø�?Š?Øˆà�=‰=˜T t°4ˆ=Ó8Ð8r   c                  ó   — e Zd ZdZy)r   a  
    Raised when attempting to create a :class:`Specifier` with a specifier
    string that is invalid.

    >>> Specifier("lolwat")
    Traceback (most recent call last):
        ...
    packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
    N)r5   r6   r7   r8   r   r   r   r   r   X  s   „ òr   r   c                  óÄ  — e Zd ZdZdZedd„«       Zej                  dd„«       Z	ej                  dd„«       Z
ej                  dd„«       Zeej                  dd„«       «       Zej                  dd„«       Zej                  ddd
„«       Zej                   	 	 d	 	 	 	 	 	 	 dd„«       Zej                   	 	 d	 	 	 	 	 	 	 dd„«       Zej                  	 	 d	 	 	 	 	 	 	 dd„«       Zy	)r   r   )Ú_strc                ó   — t        | «      S )z Internal property for match_args©r$   rV   s    r   rº   zBaseSpecifier._strh  s   € ô �4‹yÐr   c                 ó   — y)zŽ
        Returns the str representation of this Specifier-like object. This
        should be representative of the Specifier itself.
        Nr   rV   s    r   Ú__str__zBaseSpecifier.__str__m  ó   � r   c                 ó   — y)zF
        Returns a hash value for this Specifier-like object.
        Nr   rV   s    r   rW   zBaseSpecifier.__hash__t  r¿   r   c                 ó   — y)z«
        Returns a boolean representing whether or not the two Specifier-like
        objects are equal.

        :param other: The other object to check against.
        Nr   rO   s     r   rP   zBaseSpecifier.__eq__z  r¿   r   c                 ó   — y)zîWhether or not pre-releases as a whole are allowed.

        This can be set to either ``True`` or ``False`` to explicitly enable or disable
        prereleases or it can be set to ``None`` (the default) to use default semantics.
        Nr   rV   s    r   ÚprereleaseszBaseSpecifier.prereleasesƒ  r¿   r   c                 ó   — y)zQSetter for :attr:`prereleases`.

        :param value: The value to set.
        Nr   ©rC   rR   s     r   rÃ   zBaseSpecifier.prereleasesŒ  r¿   r   Nc                 ó   — y)zR
        Determines if the given item is contained within this specifier.
        Nr   ©rC   ÚitemrÃ   s      r   ÚcontainszBaseSpecifier.contains“  r¿   r   c                 ó   — y r   r   ©rC   ÚiterablerÃ   Úkeys       r   ÚfilterzBaseSpecifier.filter™  ó   € ð (+r   c                 ó   — y r   r   rË   s       r   rÎ   zBaseSpecifier.filter¡  ó   € ð r   c                 ó   — y)z•
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr   rË   s       r   rÎ   zBaseSpecifier.filter©  r¿   r   rd   rb   r`   ©r^   úbool | None)rR   r(   r^   r_   r   )rÈ   r$   rÃ   rÔ   r^   r(   ©N.©rÌ   zIterable[UnparsedVersionVar]rÃ   rÔ   rÍ   r_   r^   zIterator[UnparsedVersionVar]©rÌ   zIterable[T]rÃ   rÔ   rÍ   zCallable[[T], UnparsedVersion]r^   zIterator[T]©NN©rÌ   úIterable[Any]rÃ   rÔ   rÍ   ú'Callable[[Any], UnparsedVersion] | Noner^   úIterator[Any])r5   r6   r7   re   Ú__match_args__Úpropertyrº   ÚabcÚabstractmethodr¾   rW   rP   rÃ   ÚsetterrÉ   ÚtypingÚoverloadrÎ   r   r   r   r   r   d  s–  „ Ø€IØ€Nàòó ðð 	×Ñòó ðð 	×Ñòó ðð
 	×Ñòó ðð Ø×Ñòó ó ðð ×Ñòó ðð 	×Ñóó ðð
 ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ò+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
òó ðð 	×Ñð $(Ø7;ð		àð	ð !ð	ð 5ð		ð
 
ò	ó ñ	r   r   )Ú	metaclassc            	      ó\  — e Zd ZU dZdZdZ ej                  dez   dz   ej                  ej                  z  «      Z
ddddd	d
dddœZded<   d1d2d„Zd3d„Zd4d„Zd5d„Zd6d„Zd6d„Zed7d„«       Zej*                  d8d„«       Zd9d„Zd:d„Zed;d„«       Zed;d„«       Zd;d„Zd;d„Zed<d„«       Zd=d „Zd>d!„Zd?d"„Zd@d#„Z dAd$„Z!d@d%„Z"d@d&„Z#d@d'„Z$d@d(„Z%dBd)„Z&dBd*„Z'dCd+„Z(dDd,„Z)dEdFd-„Z*e+jX                  	 	 dG	 	 	 	 	 	 	 dHd.„«       Z-e+jX                  	 	 dG	 	 	 	 	 	 	 dId/„«       Z-	 	 dJ	 	 	 	 	 	 	 dKd0„Z-y)Lr   aù  This class abstracts handling of version specifiers.

    .. tip::

        It is generally not required to instantiate this manually. You should instead
        prefer to work with :class:`SpecifierSet` instead, which can parse
        comma-separated version specifiers (which is what package metadata contains).

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from pip._vendor.packaging < 26.2 is supported but may be removed in a future
        release.
    )Ú_prereleasesÚ_rangesÚ_specÚ_spec_versionÚ_wildcard_splita  
        (?:
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                ===  # Only match for the identity operator
                \s*
                [^\s;)]*  # The arbitrary version can be just about anything,
                          # we match everything except for whitespace, a
                          # semi-colon for marker support, and a closing paren
                          # since versions can be enclosed in them.
            )
            |
            (?:
                # The (non)equality operators allow for wild card and local
                # versions to be specified so we have to define these two
                # operators separately to enable that.
                (?:==|!=)            # Only match for equals and not equals

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release

                # You cannot use a wild card and a pre-release, post-release, a dev or
                # local version together so group them with a | and make them optional.
                (?:
                    \.\*  # Wild card syntax of .*
                    |
                    (?a:                                  # pre release
                        [-_\.]?
                        (alpha|beta|preview|pre|a|b|c|rc)
                        [-_\.]?
                        [0-9]*
                    )?
                    (?a:                                  # post release
                        (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                    )?
                    (?a:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?a:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                )?
            )
            |
            (?:
                # The compatible operator requires at least two digits in the
                # release segment.
                (?:~=)               # Only match for the compatible operator

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)+   # release  (We have a + instead of a *)
                (?:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?:<=|>=|<|>)

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?a:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?a:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?a:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        z\s*Ú
compatibleÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_thanÚ	arbitrary)ú~=ú==ú!=ú<=ú>=rw   ry   ú===r   Ú
_operatorsNc                ó˜  — | j                   j                  |«      st        d|›�«      ‚|j                  «       }|j	                  d«      r|dd |dd j                  «       }}nB|j	                  d«      r|dd |dd j                  «       }}n|dd |dd j                  «       }}||f| _        || _        d| _        d| _        d| _	        y)að  Initialize a Specifier instance.

        :param spec:
            The string representation of a specifier which will be parsed and
            normalized before use.
        :param prereleases:
            This tells the specifier if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.
        :raises InvalidSpecifier:
            If the given specifier is invalid (i.e. bad syntax).
        zInvalid specifier: rø   Nr   )ró   rô   rõ   rö   r÷   r    r   )
Ú_regexÚ	fullmatchr   ÚstripÚ
startswithrè   ræ   ré   rê   rç   )rC   r%   rÃ   ÚoperatorrA   s        r   rE   zSpecifier.__init__=  sÕ   € ð �{‰{×$Ñ$ TÔ*Ü"Ð%8¸¸Ð#AÓBÐBà�z‰z‹|ˆØ�?‰?˜5Ô!Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:�g‰HØ�_‰_Ð;Ô<Ø $ R a ¨$¨q¨r¨(¯.©.Ó*:�g‰Hà $ R a ¨$¨q¨r¨(¯.©.Ó*:�gˆHà'/°Ð&9ˆŒ
ð (ˆÔð :>ˆÔð >BˆÔð 8<ˆ�r   c                óŽ   — | j                   �!| j                   d   |k(  r| j                   d   S t        |«      }|€y||f| _         |S )zDOne element cache, as only one spec Version is needed per Specifier.Nr   r   )ré   r§   )rC   rA   Úversion_specifiers      r   Ú_get_spec_versionzSpecifier._get_spec_versionc  sY   € à×ÑÐ)¨d×.@Ñ.@ÀÑ.CÀwÒ.NØ×%Ñ% aÑ(Ð(ä+¨GÓ4ÐØÐ$Øà%Ð'8Ð9ˆÔØ Ð r   c                ó0   — | j                  |«      }|€J ‚|S )zÕGet spec version, asserting it's valid (not for === operator).

        This method should only be called for operators where version
        strings are guaranteed to be valid PEP 440 versions (not ===).
        )r  )rC   rA   Úspec_versions      r   Ú_require_spec_versionzSpecifier._require_spec_versiono  s&   € ð ×-Ñ-¨gÓ6ˆØÐ'Ð'Ð'ØÐr   c                ó  — | j                   �| j                   S | j                  }| j                  }|dk(  rt        | _         t        S |j	                  d«      r| j                  ||«      }n| j                  ||«      }|| _         |S )zØConvert this specifier to sorted, non-overlapping version ranges.

        Each standard operator maps to one or two ranges.  ``===`` is
        modeled as full range (actual check done separately).  Cached.
        rø   ú.*)rç   rÿ   rA   r‹   ÚendswithÚ_wildcard_rangesÚ_standard_ranges)rC   ÚopÚver_strr–   s       r   Ú
_to_rangeszSpecifier._to_rangesy  s|   € ð �<‰<Ð#Ø—<‘<Ðà�]‰]ˆØ—,‘,ˆà�Š;Ü&ˆDŒLÜÐà×Ñ˜DÔ!Ø×*Ñ*¨2¨wÓ7‰Fà×*Ñ*¨2¨wÓ7ˆFàˆŒØˆr   c                óÚ   — | j                  |d d «      }t        |«      }t        |«      }|dk(  rt        |d«      t	        |d«      fgS t
        t	        |d«      ft        |d«      t        fgS )Néþÿÿÿrô   TF)r  r¥   r¢   rg   r‚   Ú_NEG_INFÚ_POS_INF)rC   r  r  Úbaser�   rŽ   s         r   r	  zSpecifier._wildcard_ranges‘  sy   € à×)Ñ)¨'°#°2¨,Ó7ˆÜ˜4Ó ˆÜ! $Ó'ˆØ�Š:Ü  ¨Ó-¬{¸5À%Ó/HÐIÐJÐJô ”{ 5¨%Ó0Ð1Ü˜ Ó%¤xÐ0ð
ð 	
r   c                ó  — | j                  |«      }|dk(  rt        |d«      t        fgS |dk(  r+t        t	        t        |t        j                  «      d«      fgS |dk(  rª|j                  �3|j                  |j                  dz   d ¬«      }t        |d«      t        fgS |j                  �4|j                  |j                  dz   dd ¬«      }t        |d«      t        fgS t        t        |t        j                  «      d	«      t        fgS |d
k(  r?|j                  r|n|j                  dd ¬«      }|t        k  rg S t        t	        |d	«      fgS d|v }t        |t        j                  «      }|r|n|}|dk(  rt        |d«      t	        |d«      fgS |dk(  r$t        t	        |d	«      ft        |d	«      t        fgS |dk(  rA|j                  |j                  d d ¬«      }	t        |d«      t	        t        |	«      d	«      fgS t!        d|›�«      ‚)Nr÷   Trö   ry   r   r±   r   r­   Frw   ú+rô   rõ   ró   rŸ   )r0   úUnknown operator: )r  rg   r  r  r‚   r>   r4   r;   rI   rª   rH   r<   r´   r.   r0   r¢   Ú
ValueError)
rC   r  r  rK   Ú	lower_verr-   Ú	has_localÚafter_localsrŽ   Úprefixs
             r   r
  zSpecifier._standard_rangesž  s+  € Ø×&Ñ& wÓ/ˆà�Š:Ü   DÓ)¬8Ð4Ð5Ð5à�Š:ô ÜÔ 0°´M×4NÑ4NÓ OÐQUÓVððð ð �Š9Ø�u‰uÐ ð ŸM™M¨a¯e©e°a©i¸t˜MÓD�	Ü$ Y°Ó5´xÐ@ÐAÐAØ�v‰vÐ!àŸM™M¨q¯v©v¸©z¸qÈ˜MÓM�	Ü$ Y°Ó5´xÐ@ÐAÐAô  Ô 0°´M×4MÑ4MÓ NÐPUÓVÜððð ð �Š9ð Ÿš‘A¨a¯m©mÀÈ¨mÓ.NˆEØœÒ$Ø�	Üœ{¨5°%Ó8Ð9Ð:Ð:ð ˜7�Nˆ	Ü'¨¬=×+EÑ+EÓFˆÙ‘ Lˆà�Š:Ü   DÓ)¬;°u¸dÓ+CÐDÐEÐEà�Š:äœ; q¨%Ó0Ð1Ü˜U EÓ*¬HÐ5ðð ð
 �Š:Ø—]‘]¨1¯9©9°S°b¨>�]Ó:ˆFä˜Q Ó%¤{Ô3DÀVÓ3LÈeÓ'TÐUðð ô Ð-¨b¨VÐ4Ó5Ð5r   c                óÊ   — | j                   �| j                   S | j                  \  }}|dk(  ry|dk(  r|j                  d«      ry| j                  |«      }|€y |j                  S )Nrõ   Frô   r  )ræ   rè   r  r  r´   )rC   rÿ   Úversion_strrA   s       r   rÃ   zSpecifier.prereleasesÜ  sy   € ð ×ÑÐ(Ø×$Ñ$Ð$ð !%§
¡
Ñˆ�+Ø�tÒØð �tÒ × 4Ñ 4°TÔ :Øð ×(Ñ(¨Ó5ˆØˆ?Øð ×$Ñ$Ð$r   c                ó   — || _         y r   )ræ   rÅ   s     r   rÃ   zSpecifier.prereleasesø  s
   € à!ˆÕr   c                ó2   — | j                   | j                  fS r   )rè   ræ   rV   s    r   Ú__getstate__zSpecifier.__getstate__ü  s   € ð —
‘
˜D×-Ñ-Ð.Ð.r   c                ód  — d | _         d | _        d | _        t        |t        «      r¦t        |«      dk(  r*|\  }}t        |«      rt        |«      r|| _        || _	        y t        |«      dk(  r`t        |d   t        «      rM|\  }}|j                  d«      }|j                  dd«      }t        |«      rt        |«      r|| _        || _	        y t        |t        «      rH|j                  d«      }|j                  dd«      }t        |«      rt        |«      r|| _        || _	        y t        d|›�«      ‚)Nr    r   rè   ræ   ÚinvalidzCannot restore Specifier from )ré   rê   rç   r!   r"   r#   r&   r*   rè   ræ   ÚdictÚgetÚ	TypeError)rC   Ústater%   rÃ   Ú_Ú	slot_dicts         r   Ú__setstate__zSpecifier.__setstate__  s  € à!ˆÔØ#ˆÔØˆŒä�eœUÔ#Ü�5‹z˜QŠà$)Ñ!��kÜ! $Ô'¬M¸+Ô,FØ!%�D”JØ(3�DÔ%ØÜ�5‹z˜QŠ¤:¨e°A©h¼Ô#=à$‘��9Ø —}‘} WÓ-�Ø'Ÿm™m¨N¸IÓF�Ü! $Ô'¬M¸+Ô,FØ!%�D”JØ(3�DÔ%ØÜ�eœTÔ"à—9‘9˜WÓ%ˆDØŸ)™) N°IÓ>ˆKÜ˜dÔ#¬°kÔ(BØ!�”
Ø$/�Ô!ØäÐ8¸¸	ÐBÓCÐCr   c                ó    — | j                   d   S )z`The operator of this specifier.

        >>> Specifier("==1.2.3").operator
        '=='
        r   ©rè   rV   s    r   rÿ   zSpecifier.operator$  ó   € ð �z‰z˜!‰}Ðr   c                ó    — | j                   d   S )zaThe version of this specifier.

        >>> Specifier("==1.2.3").version
        '1.2.3'
        r   r*  rV   s    r   rA   zSpecifier.version-  r+  r   c                óŒ   — | j                   �d| j                  ›�nd}d| j                  j                  › dt	        | «      ›|› d�S )aT  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=Ú rw   rY   ú)>©ræ   rÃ   r[   r5   r$   ©rC   r)   s     r   r]   zSpecifier.__repr__6  sU   € ð × Ñ Ð,ð ˜T×-Ñ-Ð0Ñ1àð 	ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y¨M¸#¸¸bÐAÐAr   c                ó4   —  dj                   | j                  Ž S )zÐA string representation of the Specifier that can be round-tripped.

        >>> str(Specifier('>=1.0.0'))
        '>=1.0.0'
        >>> str(Specifier('>=1.0.0', prereleases=False))
        '>=1.0.0'
        z{}{})Úformatrè   rV   s    r   r¾   zSpecifier.__str__H  s   € ð ˆv�}‰}˜dŸj™jÐ)Ð)r   c                óž   — | j                   \  }}|dk(  s|j                  d«      r||fS | j                  |«      }t        ||dk7  ¬«      }||fS )Nrø   r  ró   ©Ústrip_trailing_zero)rè   r  r  r   )rC   rÿ   rA   r  Úcanonical_versions        r   Ú_canonical_speczSpecifier._canonical_specR  sc   € à ŸJ™JÑˆ�'Ø�uÒ × 0Ñ 0°Ô 6Ø˜WÐ$Ð$à×1Ñ1°'Ó:ˆä0Ø¨x¸4Ñ/?ô
Ðð Ð*Ð*Ð*r   c                ó,   — t        | j                  «      S r   )rU   r9  rV   s    r   rW   zSpecifier.__hash__`  s   € Ü�D×(Ñ(Ó)Ð)r   c                óî   — t        |t        «      r	 | j                  t        |«      «      }nt        || j                  «      st        S | j
                  |j
                  k(  S # t        $ r	 t        cY S w xY w)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   rN   r9  rO   s     r   rP   zSpecifier.__eq__c  si   € ô& �eœSÔ!ð&ØŸ™¤s¨5£zÓ2‘ô ˜E 4§>¡>Ô2Ü!Ð!à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ò &Ü%Ò%ð&ús   ’A" Á"A4Á3A4c                ó>   — t        | d| j                  |   › �«      }|S )NÚ	_compare_)Úgetattrrù   )rC   r  Úoperator_callables      r   Ú_get_operatorzSpecifier._get_operator€  s+   € Ü.5Ø�I˜dŸo™o¨bÑ1Ð2Ð3ó/
Ðð !Ð r   c           
     óÈ   — t        t        t        j                  t        t        |«      «      «      d d «      }|dz  }| j                  ||«      xr | j                  ||«      S )NrŸ   r  )Ú_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitÚ_compare_greater_than_equalÚ_compare_equal)rC   Úprospectiver%   r  s       r   Ú_compare_compatiblezSpecifier._compare_compatible†  sd   € ô Ü”×$Ñ$¤^´^ÀDÓ5IÓJÓKÈCÈRÐPó
ˆð
 	�$‰ˆà×0Ñ0°¸dÓCò 
Ø×Ñ ¨VÓ4ð	
r   c                ó€   — | j                   }|€/t        |dd d¬«      }t        |«      }|t        |«      f}|| _         |S )zýCached split of a wildcard spec into components and numeric length.

        >>> Specifier("==1.*")._get_wildcard_split("1.*")
        (['0', '1'], 2)
        >>> Specifier("==3.10.*")._get_wildcard_split("3.10.*")
        (['0', '3', '10'], 3)
        Nr  Fr6  )rê   r   rG  Ú_numeric_prefix_len)rC   r%   Úwildcard_splitÚ
normalizedÚ
split_specs        r   Ú_get_wildcard_splitzSpecifier._get_wildcard_splitš  sO   € ð ×-Ñ-ˆØÐ!Ü-¨d°3°B¨iÈUÔSˆJÜ'¨
Ó3ˆJØ(Ô*=¸jÓ*IÐJˆNØ#1ˆDÔ ØÐr   c                ó&  — |j                  d«      rT| j                  |«      \  }}t        t        |«      d¬«      }t	        |«      }t        ||«      }|d t        |«       }||k(  S | j                  |«      }	|	j                  st        |«      }||	k(  S )Nr  Fr6  )	r  rQ  r   r«   rG  Ú	_left_padr#   r  r©   )
rC   rJ  r%   rP  Úspec_numeric_lenÚnormalized_prospectiveÚsplit_prospectiveÚpadded_prospectiveÚshortened_prospectiver  s
             r   rI  zSpecifier._compare_equalª  s«   € à�=‰=˜ÔØ+/×+CÑ+CÀDÓ+IÑ(ˆJÐ(ô &:Ü Ó,À%ô&Ð"ô !/Ð/EÓ FÐô "+Ð+<Ð>NÓ!OÐð
 %7Ð7H¼¸Z»Ð$IÐ!à(¨JÑ6Ð6ð  ×5Ñ5°dÓ;ˆLð
  ×%Ò%Ü-¨kÓ:�à ,Ñ.Ð.r   c                ó(   — | j                  ||«       S r   )rI  ©rC   rJ  r%   s      r   Ú_compare_not_equalzSpecifier._compare_not_equalÎ  s   € Ø×&Ñ& {°DÓ9Ð9Ð9r   c                ó<   — t        |«      | j                  |«      k  S r   ©r«   r  rZ  s      r   Ú_compare_less_than_equalz"Specifier._compare_less_than_equalÑ  ó   € ô ˜{Ó+¨t×/IÑ/IÈ$Ó/OÑOÐOr   c                ó<   — t        |«      | j                  |«      k\  S r   r]  rZ  s      r   rH  z%Specifier._compare_greater_than_equal×  r_  r   c                ó€   — | j                  |«      }||k  sy|j                  s|j                  r|t        |«      k\  ryyr‡   )r  r´   r²   ©rC   rJ  Úspec_strr%   s       r   Ú_compare_less_thanzSpecifier._compare_less_thanÝ  sK   € ð ×)Ñ)¨(Ó3ˆð
 ˜TÒ!Øð
 ×"Ò"Ø×)Ò)ØÔ3°DÓ9Ò9àð
 r   c                ó¶   — | j                  |«      }||kD  sy|j                  s|j                  rt        |«      |k(  ry|j                  �t	        |«      |k(  ryyr‡   )r  Úis_postreleaser¯   r©   r«   rb  s       r   Ú_compare_greater_thanzSpecifier._compare_greater_thanö  sg   € ð ×)Ñ)¨(Ó3ˆð
 ˜TÒ!Øð
 ×#Ò#Ø×*Ò*Ü˜;Ó'¨4Ò/àð ×ÑÐ(¬_¸[Ó-IÈTÒ-QØð
 r   c                óh   — t        |«      j                  «       t        |«      j                  «       k(  S r   ©r$   r�   rZ  s      r   Ú_compare_arbitraryzSpecifier._compare_arbitrary  s&   € Ü�;Ó×%Ñ%Ó'¬3¨t«9¯?©?Ó+<Ñ<Ð<r   c                ó$   — | j                  |«      S )a:  Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in Specifier(">=1.2.3")
        True
        >>> Version("1.2.3") in Specifier(">=1.2.3")
        True
        >>> "1.0.0" in Specifier(">=1.2.3")
        False
        >>> "1.3.0a1" in Specifier(">=1.2.3")
        True
        >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
        True
        ©rÉ   ©rC   rÈ   s     r   Ú__contains__zSpecifier.__contains__  ó   € ð& �}‰}˜TÓ"Ð"r   c                óN   — t        t        | j                  |g|¬«      «      «      S )as  Return whether or not the item is contained in this specifier.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this Specifier. If set to
            ``None`` (the default), it will follow the recommendation from
            :pep:`440` and match prereleases, as there are no other versions.

        >>> Specifier(">=1.2.3").contains("1.2.3")
        True
        >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
        True
        >>> Specifier(">=1.2.3").contains("1.0.0")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        ©rÃ   )r(   rC  rÎ   rÇ   s      r   rÉ   zSpecifier.contains.  s#   € ô2 ”D˜Ÿ™ d V¸˜ÓEÓFÓGÐGr   c                 ó   — y r   r   rË   s       r   rÎ   zSpecifier.filterI  rÏ   r   c                 ó   — y r   r   rË   s       r   rÎ   zSpecifier.filterQ  rÑ   r   c              #  óZ  K  — g }d}|�|n| j                   }| j                  | j                  «      }|D ]Ò  }t        |€|n ||«      «      }	d}
|	€0| j                  dk(  rj| j	                  || j
                  «      rN|–— nI| j                  dk(  r'| j	                  |€|n ||«      | j
                  «      }
n ||	| j
                  «      }
|
sŒ˜|	€Œ›|	j                  r|rd}|–— Œ°|�Œ³| j                  dusŒÂ|j                  |«       ŒÔ |s|€| j                  dur|E d{  –—†  yyyy7 Œ­w)a€  Filter items in the given iterable, that match the specifier.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.
        :param key:
            A callable that takes a single argument (an item from the iterable) and
            returns a version string or :class:`Version` instance to be used for
            filtering.

        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
        ['1.2.3', '1.3', <Version('1.4')>]
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3").filter(
        ... [{"ver": "1.2"}, {"ver": "1.3"}],
        ... key=lambda x: x["ver"]))
        [{'ver': '1.3'}]
        FNrø   T)	rÃ   r@  rÿ   r§   rj  rA   r´   ræ   r“   )rC   rÌ   rÃ   rÍ   Úprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesr?  rA   Úparsed_versionÚmatchs              r   rÎ   zSpecifier.filterY  sS  è ø€ ðF  "ÐØ %Ðð 'Ð2‰K¸×8HÑ8Hð 	ð
 !×.Ñ.¨t¯}©}Ó=Ðð  ò 	9ˆGÜ,¸¸©WÉÈWËÓVˆNØˆEØÐ%à—=‘= EÒ)¨d×.EÑ.EØ˜TŸ\™\ô/ð "“MØ—‘ %Ò'Ø×/Ñ/Ø"˜{‘G±°G³¸d¿l¹ló‘ñ *¨.¸$¿,¹,ÓG�â˜Ñ3à%×3Ò3Ñ7JØ,0Ð)Ø!“Mà Ñ(¨T×->Ñ->ÀeÒ-KØ(×/Ñ/°Õ8ð/	9ñ8 &ØÐ#Ø×!Ñ!¨Ñ.à+×+Ñ+ð /ð $ð &ð ,ús*   ‚C	D+ÃD+ÃD+Ã'D+Ã6*D+Ä D)Ä!	D+©r/  N)r%   r$   rÃ   rÔ   r^   r_   )rA   r$   r^   úVersion | None)rA   r$   r^   r   ©r^   úSequence[_VersionRange])r  r$   r  r$   r^   úlist[_VersionRange]rÓ   ©rR   rÔ   r^   r_   )r^   z#tuple[tuple[str, str], bool | None]©r%  ra   r^   r_   rd   )r^   ztuple[str, str]rb   r`   )r  r$   r^   ÚCallableOperator)rJ  r   r%   r$   r^   r(   )r%   r$   r^   ztuple[list[str], int])rJ  r   rc  r$   r^   r(   )rJ  zVersion | strr%   r$   r^   r(   )rÈ   zstr | Versionr^   r(   r   )rÈ   ÚUnparsedVersionrÃ   rÔ   r^   r(   rÕ   rÖ   r×   rØ   rÙ   ).r5   r6   r7   r8   re   Ú_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASErû   rù   Ú__annotations__rE   r  r  r  r	  r
  rÞ   rÃ   rá   r  r(  rÿ   rA   r]   r¾   r9  rW   rP   r@  rK  rQ  rI  r[  r^  rH  rd  rg  rj  rn  rÉ   râ   rã   rÎ   r   r   r   r   r   ¶  s  … ñð&€IðZÐðx ˆR�Z‰ZØÐ%Ñ%¨Ñ.°·
±
¸R¿]¹]Ñ0Jó€Fð
 ØØØØ"ØØØñ	€J�ó 	ô$<óL
!óóó0
ó<6ð| ò%ó ð%ð6 ×Ñò"ó ð"ó/ó DðD òó ðð òó ðóBó$*ð ò+ó ð+ó*ó=ó:!ó
ó(ó "/óH:óPóPóó2ó@=ó#ô*Hð6 ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ò+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
òó ðð $(Ø7;ð	O,àðO,ð !ðO,ð 5ð	O,ð
 
ôO,r   r   z([0-9]+)((?:a|b|c|rc)[0-9]+)c              #  ó0  K  — g }g }d}| D ]v  }t        |€|n ||«      «      }|€*|r|–— n"|j                  |«       |j                  |«       ŒD|j                  s|s|E d{  –—†  d}|–— Œc|rŒf|j                  |«       Œx |s|E d{  –—†  yy7 Œ/7 Œ­w)z?Filter per PEP 440: exclude prereleases unless no finals exist.FNT)r§   r“   r´   )rÌ   rÍ   Úall_nonfinalÚarbitrary_stringsÚfound_finalrÈ   Úparseds          r   Ú_pep440_filter_prereleasesrŽ  ®  s¼   è ø€ ð !€LØ#%Ðà€KØò &ˆÜ ¨¨¡¹#¸d»)ÓDˆàˆ>ñ Ø“
à!×(Ñ(¨Ô.Ø×#Ñ# DÔ)Øà×#Ò#áØ,×,Ð,Ø"�ØŠJØò Ø×Ñ Õ%ð1&ñ6 Ø×Ñð ð -øð 	 ús*   ‚A BÁ"BÁ#BÁ1BÂBÂBÂBc                ó  — g }| j                  d«      \  }}}|j                  |xs d«       |j                  d«      D ]J  }t        j	                  |«      }|r |j                  |j                  «       «       Œ:|j                  |«       ŒL |S )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)rA   r–   rG   r&  ÚrestrÈ   ry  s          r   rG  rG  Ø  s~   € ð €Fà×'Ñ'¨Ó,�N€Eˆ1ˆdØ
‡M�M�%’,˜3Ôà—
‘
˜3“ò  ˆÜ×'Ñ'¨Ó-ˆÙØ�M‰M˜%Ÿ,™,›.Õ)à�M‰M˜$Õð ð €Mr   c                ó6   — | ^}}|› ddj                  |«      › �S )zñJoin split version components into a version string.

    This function assumes the input came from :func:`_version_split`, where the
    first component must be the epoch (either empty or numeric), and all other
    components numeric.
    r�  r’  )Újoin)Ú
componentsrG   r˜  s      r   rB  rB  î  s'   € ð €L€EˆDØˆW�A�c—h‘h˜t“nÐ%Ð&Ð&r   c                ó.   ‡ — t        ˆ fd„dD «       «       S )Nc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr   )rþ   )Ú.0r  Úsegments     €r   ú	<genexpr>z!_is_not_suffix.<locals>.<genexpr>ú  s!   øè ø€ ò Ø'-ˆ×Ñ˜6×"ñùó   ƒ)rI   ÚaÚbÚrcrH   )Úany)rŸ  s   `r   rF  rF  ù  s"   ø€ Üó Ø1Pôó ð ð r   c                óH   — d}| D ]  }|j                  «       s |S |dz  }Œ |S )zƒCount leading numeric components in a :func:`_version_split` result.

    >>> _numeric_prefix_len(["0", "1", "2", "a1"])
    3
    r   r   )Úisdigit)r”  ÚcountrŸ  s      r   rM  rM  ÿ  s<   € ð €EØò ˆØ�‰Ô Øà€Lð 	�‰
‰ðð €Lr   c                óT   — t        | «      }||z
  }|dk  r| S g | d| ¢dg|z  ¢| |d ¢S )zÝPad a :func:`_version_split` result with ``"0"`` segments to reach
    ``target_numeric_len`` numeric components.  Suffix segments are preserved.

    >>> _left_pad(["0", "1", "a1"], 4)
    ['0', '1', '0', '0', 'a1']
    r   Nr‘  )rM  )r”  Útarget_numeric_lenÚnumeric_lenÚ
pad_neededs       r   rS  rS    sN   € ô & eÓ,€KØ# kÑ1€JØ�Q‚ØˆØNˆU�<�KÐ ÐN S E¨JÑ$6ÐN¸%ÀÀÐ:MÐNÐNr   c                ó´   — | \  }}}|dk(  r|j                  d«      sdS dS |dv ry|dk(  ry|dk(  r|j                  d«      sd	S d
S |dk(  ryt        d|›�«      ‚)aL  Sort key for Cost Based Ordering of specifier operators in _filter_versions.

    Operators run sequentially on a shrinking candidate set, so operators that
    reject the most versions should run first to minimize work for later ones.

    Tier 0: Exact equality (==, ===), likely to narrow candidates to one version
    Tier 1: Range checks (>=, <=, >, <), cheap and usually reject a large portion
    Tier 2: Wildcard equality (==.*) and compatible release (~=), more expensive
    Tier 3: Exact !=, cheap but rarely rejects
    Tier 4: Wildcard !=.*, expensive and rarely rejects
    rô   r  r   r    )r÷   rö   ry   rw   r   ró   rõ   r   é   rø   r  )r  r  )Úop_entryr&  Úverr  s       r   Ú_operator_costr±    s|   € ð �J€A€sˆBØ	ˆT‚zØŸ™ TÔ*ˆqÐ1°Ð1Ø	Ð#Ñ#ØØ	ˆT‚zØØ	ˆT‚zØŸ™ TÔ*ˆqÐ1°Ð1Ø	ˆU‚{Øä
Ð)¨"¨Ð0Ó
1Ð1r   c                  ó¢  — e Zd ZdZdZ	 	 d	 	 	 	 	 dd„Zdd„Zedd„«       Zej                  dd„«       Zd d„Z
d!d	„Zd"d
„Zd"d„Zd#d„Zd$d„Zd%d„Zd#d„Zd&d„Zd'd„Zd(d„Zd(d„Zd(d„Zd)d„Z	 	 d*	 	 	 	 	 	 	 d+d„Zej4                  	 	 d,	 	 	 	 	 	 	 d-d„«       Zej4                  	 	 d,	 	 	 	 	 	 	 d.d„«       Z	 	 d*	 	 	 	 	 	 	 d/d„Z	 d0	 	 	 	 	 	 	 d1d„Zy)2r   a…  This class abstracts handling of a set of version specifiers.

    It can be passed a single specifier (``>=3.0``), a comma-separated list of
    specifiers (``>=3.0,!=3.1``), or no specifier at all.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging
    releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with
        packaging 26.2+ can be unpickled with future releases.
        Backward compatibility with pickles from
        packaging < 26.2 is supported but may be removed in a future
        release.
    )Ú_canonicalizedÚ_has_arbitraryÚ_is_unsatisfiableræ   Ú_resolved_opsÚ_specsNc                ó¾  — t        |t        «      re|j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}t	        t        t        |«      «      | _        d|v | _        n1t	        |«      | _        t        d„ | j                  D «       «      | _        t        | j                  «      dk  | _        d| _        || _        d| _        yc c}w )a´  Initialize a SpecifierSet instance.

        :param specifiers:
            The string representation of a specifier or a comma-separated list of
            specifiers which will be parsed and normalized before use.
            May also be an iterable of ``Specifier`` instances, which will be used
            as is.
        :param prereleases:
            This tells the SpecifierSet if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.

        :raises InvalidSpecifier:
            If the given ``specifiers`` are not parseable than this exception will be
            raised.
        ú,rø   c              3  ó6   K  — | ]  }d t        |«      v –— Œ y­w©rø   Nr¼   ©rž  Úss     r   r   z(SpecifierSet.__init__.<locals>.<genexpr>t  s   è ø€ Ò%K¸! e¬s°1«v¤oÑ%Kùó   ‚r   N)r!   r$   r”  rý   r"   Úmapr   r·  r´  r¥  r#   r³  r¶  ræ   rµ  )rC   Ú
specifiersrÃ   r½  Úsplit_specifierss        r   rE   zSpecifierSet.__init__R  s¹   € ô, �j¤#Ô&ð 4>×3CÑ3CÀCÓ3HÖV¨aÈAÏGÉGÍI §¡¥	ÐVÐÐVä16´s¼9ÐFVÓ7WÓ1XˆDŒKà"'¨:Ð"5ˆDÕä 
Ó+ˆDŒKô #&Ñ%K¸t¿{¹{Ô%KÓ"KˆDÔä! $§+¡+Ó.°!Ñ3ˆÔØMQˆÔð (ˆÔà.2ˆÕùò%  Ws
   ¤CºCc                óÔ   — | j                   sQt        t        j                  t	        | j
                  t        ¬«      «      «      | _        d| _         d| _        d| _        | j
                  S )zBDeduplicate, sort, and cache specs for order-sensitive operations.©rÍ   TN)	r³  r"   r"  ÚfromkeysÚsortedr·  r$   r¶  rµ  rV   s    r   Ú_canonical_specszSpecifierSet._canonical_specs  sM   € à×"Ò"Ü¤§¡¬f°T·[±[ÄcÔ.JÓ KÓLˆDŒKØ"&ˆDÔØ!%ˆDÔØ%)ˆDÔ"Ø�{‰{Ðr   c                óˆ   — | j                   �| j                   S | j                  sy t        d„ | j                  D «       «      ryy )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   rq  r¼  s     r   r   z+SpecifierSet.prereleases.<locals>.<genexpr>—  s   è ø€ Ò2 ˆq�}�}Ñ2ùs   ‚T)ræ   r·  r¥  rV   s    r   rÃ   zSpecifierSet.prereleasesˆ  sB   € ð ×ÑÐ(Ø×$Ñ$Ð$ð
 �{Š{Øô Ñ2 d§k¡kÔ2Ô2Øàr   c                ó    — || _         d | _        y r   )ræ   rµ  rÅ   s     r   rÃ   zSpecifierSet.prereleasesœ  s   € à!ˆÔØ!%ˆÕr   c                ó2   — | j                   | j                  fS r   )r·  ræ   rV   s    r   r  zSpecifierSet.__getstate__¡  s   € ð —‘˜T×.Ñ.Ð/Ð/r   c                óÖ  — d | _         d | _        t        |t        «      �rft	        |«      dk(  rk|\  }}t        |t        «      rVt        d„ |D «       «      rDt        |«      r9|| _        || _        t	        |«      dk  | _	        t        d„ |D «       «      | _        y t	        |«      dk(  rßt        |d   t        «      rÌ|\  }}|j                  dd«      }|j                  d«      }t        |t        «      rt        t        |t         ¬«      «      }t        |t        «      rjt        d	„ |D «       «      rXt        |«      rM|| _        || _        t	        | j                  «      dk  | _	        t        d
„ | j                  D «       «      | _        y t        |t        «      rÇ|j                  dd«      }|j                  d«      }t        |t        «      rt        t        |t         ¬«      «      }t        |t        «      rjt        d„ |D «       «      rXt        |«      rM|| _        || _        t	        | j                  «      dk  | _	        t        d„ | j                  D «       «      | _        y t#        d|›�«      ‚)Nr    c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©r!   r   r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>²  ó   è ø€ ÒD¸œJ q¬)×4ÑDùó   ‚r   c              3  ó6   K  — | ]  }d t        |«      v –— Œ y­wr»  r¼   r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>¸  s   è ø€ Ò-MÀ!¨e´s¸1³v¬oÑ-Mùr¾  r·  r   ræ   rÃ  c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rÍ  r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>Ä  rÎ  rÏ  c              3  ó6   K  — | ]  }d t        |«      v –— Œ y­wr»  r¼   r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>Ê  s   è ø€ Ò-SÀ!¨e´s¸1³v¬oÑ-Sùr¾  c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rÍ  r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>Õ  s   è ø€ Ò@°Qœ
 1¤i×0Ñ@ùrÏ  c              3  ó6   K  — | ]  }d t        |«      v –— Œ y­wr»  r¼   r¼  s     r   r   z,SpecifierSet.__setstate__.<locals>.<genexpr>Û  s   è ø€ Ò)O¸a¨%´3°q³6¬/Ñ)Oùr¾  z!Cannot restore SpecifierSet from )r¶  rµ  r!   r"   r#   Úallr*   r·  ræ   r³  r¥  r´  r"  r#  Ú	frozensetrÅ  r$   r$  )rC   r%  ÚspecsrÃ   r&  r'  s         r   r(  zSpecifierSet.__setstate__§  sô  € à!ˆÔØ!%ˆÔä�eœUÕ#Ü�5‹z˜QŠà%*Ñ"��{ä˜u¤eÔ,ÜÑD¸eÔDÔDÜ% kÔ2à"'�D”KØ(3�DÔ%Ü*-¨e«*¸©/�DÔ'Ü*-Ñ-MÀuÔ-MÓ*M�DÔ'ØÜ�5‹z˜QŠ¤:¨e°A©h¼Ô#=à$‘��9Ø!Ÿ™ h°Ó3�Ø'Ÿm™m¨NÓ;�ä˜e¤YÔ/Ü!¤&¨´CÔ"8Ó9�Eä˜u¤eÔ,ÜÑD¸eÔDÔDÜ% kÔ2à"'�D”KØ(3�DÔ%Ü*-¨d¯k©kÓ*:¸aÑ*?�DÔ'Ü*-Ñ-SÀtÇ{Á{Ô-SÓ*S�DÔ'ØÜ�eœTÔ"à—I‘I˜h¨Ó+ˆEØŸ)™) NÓ3ˆKä˜%¤Ô+Üœf U´Ô4Ó5�ä˜5¤%Ô(ÜÑ@¸%Ô@Ô@Ü! +Ô.à#�”Ø$/�Ô!Ü&)¨$¯+©+Ó&6¸!Ñ&;�Ô#Ü&)Ñ)OÀ4Ç;Á;Ô)OÓ&O�Ô#ØäÐ;¸E¸9ÐEÓFÐFr   c                óŒ   — | j                   �d| j                  ›�nd}d| j                  j                  › dt	        | «      ›|› d�S )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/  rw   rY   r0  r1  r2  s     r   r]   zSpecifierSet.__repr__à  sU   € ð × Ñ Ð,ð ˜T×-Ñ-Ð0Ñ1àð 	ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y¨M¸#¸¸bÐAÐAr   c                óN   — dj                  d„ | j                  «       D «       «      S )an  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  ó2   K  — | ]  }t        |«      –— Œ y ­wr   r¼   r¼  s     r   r   z'SpecifierSet.__str__.<locals>.<genexpr>   s   è ø€ Ò@ 1œ˜AŸÑ@ùs   ‚)rš  rÆ  rV   s    r   r¾   zSpecifierSet.__str__õ  s"   € ð �x‰xÑ@¨×(=Ñ(=Ó(?Ô@Ó@Ð@r   c                ó4   — t        | j                  «       «      S r   )rU   rÆ  rV   s    r   rW   zSpecifierSet.__hash__  s   € Ü�D×)Ñ)Ó+Ó,Ð,r   c                ó   — t        |t        «      rt        |«      }nt        |t        «      st        S t        «       }| j                  |j                  z   |_        t        |j                  «      dk  |_        | j                  xs |j                  |_        d|_        | j                  �| j                  |j                  k(  r|j                  |_	        |S |j                  €| j                  |_	        |S t        d«      ‚)a‚  Return a SpecifierSet which is a combination of the two sets.

        :param other: The other object to combine with.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        r   NzFCannot combine SpecifierSets with True and False prerelease overrides.)r!   r$   r   rN   r·  r#   r³  r´  r¶  ræ   r  )rC   rJ   Ú	specifiers      r   Ú__and__zSpecifierSet.__and__  sê   € ô �eœSÔ!Ü  Ó'‰EÜ˜E¤<Ô0Ü!Ð!ä “Nˆ	ØŸ;™;¨¯©Ñ5ˆ	ÔÜ#& y×'7Ñ'7Ó#8¸AÑ#=ˆ	Ô Ø#'×#6Ñ#6Ò#N¸%×:NÑ:Nˆ	Ô Ø"&ˆ	Ôð ×ÑÐ$¨×(9Ñ(9¸U×=OÑ=OÒ(OØ%*×%7Ñ%7ˆIÔ"ð Ðð ×ÑÐ'Ø%)×%6Ñ%6ˆIÔ"ð Ðô	 ØXóð r   c                óÆ   — t        |t        t        f«      rt        t        |«      «      }nt        |t        «      st        S | j                  «       |j                  «       k(  S )a¡  Whether or not the two SpecifierSet-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
        ...  SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
        False
        )r!   r$   r   r   rN   rÆ  rO   s     r   rP   zSpecifierSet.__eq__&  sN   € ô& �eœc¤9Ð-Ô.Ü ¤ U£Ó,‰EÜ˜E¤<Ô0Ü!Ð!à×$Ñ$Ó&¨%×*@Ñ*@Ó*BÑBÐBr   c                ó,   — t        | j                  «      S )z7Returns the number of specifiers in this specifier set.)r#   r·  rV   s    r   Ú__len__zSpecifierSet.__len__@  s   € ä�4—;‘;ÓÐr   c                ó,   — t        | j                  «      S )zð
        Returns an iterator over all the underlying :class:`Specifier` instances
        in this specifier set.

        >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
        [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
        )Úiterr·  rV   s    r   Ú__iter__zSpecifierSet.__iter__D  s   € ô �D—K‘KÓ Ð r   c                ó¬   — | j                   }d}|D ]3  }|€|j                  «       }Œt        ||j                  «       «      }|rŒ3 n |€t        d«      ‚|S )a  Intersect all specifiers into a single list of version ranges.

        Returns an empty list when unsatisfiable.  ``===`` specs are
        modeled as full range; string matching is checked separately
        by :meth:`_check_arbitrary_unsatisfiable`.
        Nz _get_ranges called with no specs)r·  r  r�   ÚRuntimeError)rC   r×  r–   r½  s       r   Ú_get_rangeszSpecifierSet._get_rangesN  sa   € ð —‘ˆà15ˆØò 	ˆAØˆ~ØŸ™›‘ä*¨6°1·<±<³>ÓB�ÚÙð	ð ˆ>ÜÐAÓBÐBØˆr   c                óâ   — | j                   }|�|S | j                  sd| _         y| j                  «        }|s| j                  «       }|s| j                  du r| j                  «       }|| _         |S )a¦  Check whether this specifier set can never be satisfied.

        Returns True if no version can satisfy all specifiers simultaneously.

        >>> SpecifierSet(">=2.0,<1.0").is_unsatisfiable()
        True
        >>> SpecifierSet(">=1.0,<2.0").is_unsatisfiable()
        False
        >>> SpecifierSet("").is_unsatisfiable()
        False
        >>> SpecifierSet("==1.0,!=1.0").is_unsatisfiable()
        True
        F)rµ  r·  rç  Ú_check_arbitrary_unsatisfiablerÃ   Ú_check_prerelease_only_ranges)rC   Úcachedr–   s      r   Úis_unsatisfiablezSpecifierSet.is_unsatisfiabled  sy   € ð ×'Ñ'ˆØÐØˆMà�{Š{Ø%*ˆDÔ"Øà×%Ñ%Ó'Ð'ˆáØ×8Ñ8Ó:ˆFá˜$×*Ñ*¨eÑ3Ø×7Ñ7Ó9ˆFà!'ˆÔØˆr   c                óÜ   — | j                  «       D ]Y  \  }}t        |j                  «      }|€ y|j                  �||j                  k  r y||j                  k(  sŒL|j                  sŒY y y)z€With prereleases=False, check if every range contains only
        pre-release versions (which would be excluded from matching).FT)rç  r·   rA   ri   )rC   r�   rŽ   Únearests       r   rê  z*SpecifierSet._check_prerelease_only_ranges…  sh   € ð !×,Ñ,Ó.ò 	‰LˆE�5Ü-¨e¯m©mÓ<ˆGØˆÙØ�}‰}Ð$¨°%·-±-Ò(?ÙØ˜%Ÿ-™-Ó'¨E¯O«OÙð	ð r   c                óÎ  ‡‡— | j                   D �cg c]  }|j                  dk(  sŒ|‘Œ }}|sy|d   j                  j                  «       Št	        ˆfd„|dd D «       «      ryt        |d   j                  «      Š| j                  du r‰�‰j                  ry| j                   D �cg c]  }|j                  dk7  sŒ|‘Œ }}|sy‰€yt        ˆfd„|D «       «       S c c}w c c}w )	a  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  óX   •K  — | ]!  }|j                   j                  «       ‰k7  –— Œ# y ­wr   )rA   r�   )rž  r½  Úfirsts     €r   r   z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>Ÿ  s!   øè ø€ ÒA¨aˆq�y‰y�‰Ó  EÕ)ÑAùs   ƒ'*r   NTc              3  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wr   rl  )rž  r½  Ú	candidates     €r   r   z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>·  s   øè ø€ Ò?°�q—z‘z )×,Ñ?ùr¡  )	r·  rÿ   rA   r�   r¥  r§   rÃ   r´   rÕ  )rC   r½  rò   Ústandardró  rñ  s       @@r   ré  z+SpecifierSet._check_arbitrary_unsatisfiable’  sç   ù€ ð !%§¡ÖC˜1¨q¯z©z¸UÓ/B’QÐCˆ	ÐCÙØð ˜!‘×$Ñ$×*Ñ*Ó,ˆÜÓA°9¸Q¸R°=ÔAÔAØô $ I¨a¡L×$8Ñ$8Ó9ˆ	ð
 ×Ñ Ñ%ØÐ%Ø×'Ò'àà#Ÿ{™{ÖB˜!¨a¯j©j¸EÓ.A’AÐBˆÐBÙØàÐàäÓ?°hÔ?Ó?Ð?Ð?ùò= Dùò, Cs   ‘C¦CÂ'C"Â<C"c                ó$   — | j                  |«      S )aq  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
        rl  rm  s     r   rn  zSpecifierSet.__contains__¹  ro  r   c                óÎ   — t        |«      }|�|r|j                  rd}|�| j                  rt        |t        «      s|}n|}t        t        | j                  |g|¬«      «      «      S )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
        Trq  )r§   r´   r´  r!   r   r(   rC  rÎ   )rC   rÈ   rÃ   Ú	installedrA   Ú
check_items         r   rÉ   zSpecifierSet.containsÎ  se   € ô@ " $Ó'ˆàÐ¡9°×1FÒ1FØˆKð ˆ?˜t×2Ò2¼:ÀdÌGÔ;TØ‰Jà ˆJÜ”D˜Ÿ™ j \¸{˜ÓKÓLÓMÐMr   c                 ó   — y r   r   rË   s       r   rÎ   zSpecifierSet.filterû  rÏ   r   c                 ó   — y r   r   rË   s       r   rÎ   zSpecifierSet.filter  rÑ   r   c                ót  ‡‡— |€| j                   �| j                   }| j                  rft        | j                  «      dk(  r&| j                  d   j                  ||€dn|‰¬«      }n| j	                  |‰|€dn|¬«      }|�|S t        |‰«      S |du rt        |«      S |du rˆˆfd„|D «       S t        |‰«      S )ac  Filter items in the given iterable, that match the specifiers in this set.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.
        :param key:
            A callable that takes a single argument (an item from the iterable) and
            returns a version string or :class:`Version` instance to be used for
            filtering.

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

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

        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet("").filter(["1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        r   r   T)rÃ   rÍ   rq  Fc              3  ój   •K  — | ]*  }t        ‰€|n ‰|«      «      xŠ	 �‰j                  s|–— Œ, y ­wr   )r§   r´   )rž  rÈ   rÍ   rA   s     €€r   r   z&SpecifierSet.filter.<locals>.<genexpr>^  sA   øè ø€ ò àä /¸¸±ÉÈTËÓ SÐS�WØðà"×0Ò0ô ñùs   ƒ03)rÃ   r·  r#   rÎ   Ú_filter_versionsrŽ  rã  )rC   rÌ   rÃ   rÍ   ÚfilteredrA   s      ` @r   rÎ   zSpecifierSet.filter  sé   ù€ ðd Ð 4×#3Ñ#3Ð#?Ø×*Ñ*ˆKð �;Š;ô �4—;‘;Ó 1Ò$ØŸ;™; q™>×0Ñ0ØØ(3Ð(;¡ÀØð 1ó ‘ð  ×0Ñ0ØØØ(3Ð(;¡Àð 1ó �ð Ð&Ø�ä-¨h¸Ó<Ð<ð ˜$ÑÜ˜“>Ð!à˜%Ñôà$ôð ô *¨(°CÓ8Ð8r   c              #  ó\  ‡‡‡K  — | j                   €'t        d„ | j                  D «       t        ¬«      | _         | j                   }|du }|D ]]  Št	        ‰€‰n ‰‰«      «      Š‰€t        ˆfd„|D «       «      sŒ/‰–— Œ4|r‰j                  rŒCt        ˆˆˆfd„|D «       «      sŒZ‰–— Œ_ y­w)a?  Filter versions against all specifiers in a single pass.

        Uses Cost Based Ordering: specifiers are sorted by _operator_cost so
        that cheap range operators reject versions early, avoiding expensive
        wildcard or compatible operators on versions that would have been
        rejected anyway.
        Nc              3  ó€   K  — | ]6  }|j                  |j                  «      |j                  |j                  f–— Œ8 y ­wr   )r@  rÿ   rA   )rž  r%   s     r   r   z0SpecifierSet._filter_versions.<locals>.<genexpr>{  s6   è ø€ ò àð ×'Ñ'¨¯©Ó6¸¿¹ÀdÇmÁmÔTñùs   ‚<>rÃ  Fc              3  óˆ   •K  — | ]9  \  }}}|d k(  xr* t        ‰«      j                  «       |j                  «       k(  –— Œ; y­wr»  ri  )rž  r&  r°  r  rÈ   s       €r   r   z0SpecifierSet._filter_versions.<locals>.<genexpr>‰  sA   øè ø€ ò á"˜˜3 ð ˜%‘KÒD¤C¨£I§O¡OÓ$5¸¿¹»Ñ$DÓDñùs   ƒ?Ac              3  óª   •K  — | ]J  \  }}}|d k(  r4t        ‰€‰n ‰‰«      «      j                  «       |j                  «       k(  n |‰|«      –— ŒL y­wr»  ri  )rž  Úop_fnr°  r  rÈ   rÍ   r�  s       €€€r   r   z0SpecifierSet._filter_versions.<locals>.<genexpr>�  s\   øè ø€ ò ñ #�E˜3 ð ˜’;ô ˜C˜K‘D©S°«YÓ7×=Ñ=Ó?À3Ç9Á9Ã;ÒNá˜6 3Ó'ó(ñùs   ƒAA)r¶  rÅ  r·  r±  r§   rÕ  r´   )rC   rÌ   rÍ   rÃ   ÚopsÚexclude_prereleasesrÈ   r�  s     `   @@r   rý  zSpecifierSet._filter_versionsk  sÀ   úè ø€ ð ×ÑÐ%Ü!'ñà $§¡ôô #ô"ˆDÔð × Ñ ˆØ)¨UÐ2Ðàò 	ˆDÜ$¨S¨[¡T¹cÀ$»iÓHˆFàˆ~äó à&)ôõ ð “JÙ$¨×)=Ò)=ØÜõ ð '*ô	õ ð “
ñ'	ùs   …A4B,Á:*B,Â%B,rz  )rÀ  zstr | Iterable[Specifier]rÃ   rÔ   r^   r_   )r^   ztuple[Specifier, ...]rÓ   r  )r^   z)tuple[tuple[Specifier, ...], bool | None]r€  rd   rb   )rJ   zSpecifierSet | strr^   r   r`   )r^   zIterator[Specifier]r|  )r^   r(   )rÈ   r‚  r^   r(   rØ   )rÈ   r‚  rÃ   rÔ   r÷  rÔ   r^   r(   rÕ   rÖ   r×   rÙ   r   )rÌ   rÚ   rÍ   rÛ   rÃ   rÔ   r^   rÜ   )r5   r6   r7   r8   re   rE   rÆ  rÞ   rÃ   rá   r  r(  r]   r¾   rW   rÞ  rP   rá  rä  rç  rì  rê  ré  rn  rÉ   râ   rã   rÎ   rý  r   r   r   r   r   6  sè  „ ñð$€Ið 13Ø#'ð+3à-ð+3ð !ð+3ð 
ó	+3óZð òó ðð& ×Ñò&ó ð&ó0ó7GórBó*Aó-óóBCó4 ó!óó,óBó%@óN#ð0 $(Ø!%ð	+Nàð+Nð !ð+Nð ð	+Nð
 
ó+NðZ ‡_�_ð $(Øð	+à.ð+ð !ð+ð ð	+ð
 
&ò+ó ð+ð ‡_�_ð $(Ø.1ð	àðð !ðð ,ð	ð
 
òó ðð $(Ø7;ð	^9àð^9ð !ð^9ð 5ð	^9ð
 
ó^9ðH $(ð	,àð,ð 5ð,ð !ð	,ð
 
ô,r   r   )r^   ú	list[str])r%   ra   r^   zTypeGuard[tuple[str, str]])r)   ra   r^   zTypeGuard[bool | None])r0   útuple[int, ...]r^   r  )r�   rg   rŽ   r‚   r^   r(   )r”   r}  r•   r}  r^   r~  )rA   r   r^   r   )rA   r‚  r^   r{  )rK   r~   r^   r{  )rÌ   rÚ   rÍ   rÛ   r^   rÜ   )rA   r$   r^   r  )r›  r  r^   r$   )rŸ  r$   r^   r(   )r”  r  r^   rc   )r”  r  rª  rc   r^   r  )r¯  z!tuple[CallableOperator, str, str]r^   rc   )Lr8   Ú
__future__r   rß   r9   Ú	functoolsrD  r„  Úsysrâ   r   r   r   r   r   r	   r
   r   r   Úutilsr   rA   r   r   Úversion_infor   Útyping_extensionsr   r   r&   r*   r+   r$   r‚  r,   r(   r�  r.   rˆ  r2   ÚEnumr4   Útotal_orderingr>   rg   r‚   r~   r"   Ú_VersionRanger  r  r‹   r�   r�   r¢   r¥   r§   r«   r¯   r²   r·   r  r   ÚABCMetar   r   r…  r•  rŽ  rG  rB  rF  rM  rS  r±  r   r   r   r   ú<module>r     sr  ðòõ #ã 
Û Û Û Û 	Û 
Û ÷
÷ 
õ 
õ (ß ,à×Ñ�wÒÞ ÙÝ+ò€óóó0ñ ˆCƒL€Ø˜ ˜Ñ%€ÙÐ1¸ÔIÐ Ø˜W c˜N¨DÐ0Ñ1Ð ñ  ' xÓ0€ˆnÓ 0ó=ô�D—I‘Iô ð ×Ñ÷;Qð ;Qó ð;Qð| ×Ñ÷%Hð %Hó ð%HðP ×Ñ÷%Hð %Hó ð%HðP 
×ÒØ˜wÐ(8¸$Ð>Ñ?Ðð ˜+ {Ð2Ñ3€Má�t˜UÓ#€Ù�t˜UÓ#€Ø&.°Ð%9Ð$;€Ð!Ó ;ó)ðØ
!ðà"ðð óó4KóSó
ó+ó@ó2ð9Øð9àó9ô*	�zô 	ôO˜cŸk™kõ Oôdr,�ô r,ðj �—
‘
Ð:Ó;€ð' Øð' Ø"Ið' àó' óTó,'óóóOó2ô6a	�=õ a	r   