o
    g¹«j‚x  ã                   @  sP  U d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZ erQddlmZmZmZmZ ddlmZ eeeeeeef eef Zeeeed	f eef Zg d
¢ZedƒZded< edƒZded< edƒZded< G dd„ dejƒZejG dd„ dƒƒZer‰eeedf Z ejG dd„ dƒƒZ!ejG dd„ dƒƒZ"er¥ee!e"f Z#e!ddƒZ$ded< e"ddƒZ%ded< e$e%ffZ&d ed!< dod%d&„Z'dpd)d*„Z(dpd+d,„Z)dqd/d0„Z*drd2d3„Z+drd4d5„Z,drd6d7„Z-dsd9d:„Z.dtd>d?„Z/dudDdE„Z0	FdvdwdPdQ„Z1dpdRdS„Z2dxdVdW„Z3dydXdY„Z4dzd]d^„Z5d{d`da„Z6d|dcdd„Z7d}dgdh„Z8d~didj„Z9ddmdn„Z:dS )€zBPrivate version-range helpers used by :mod:`packaging.specifiers`.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚFinalé   )ÚInvalidVersionÚVersion)ÚCallableÚIterableÚIteratorÚSequence)ÚUnion.)Ú
FULL_RANGEÚbounds_for_specÚcoerce_versionÚfilter_by_rangesÚintersect_rangesÚintersect_specifier_boundsÚleast_version_aboveÚmatches_bounds_onlyÚrange_is_emptyÚranges_are_prerelease_onlyÚresolve_prereleasesÚstandard_rangesÚwildcard_rangesz0.dev0zFinal[Version]ÚMIN_VERSIONÚ0ÚMIN_RELEASEÚinfzFinal[float]Ú_BOUNDARY_INFc                   @  s    e Zd ZdZe ¡ Ze ¡ ZdS )ÚBoundaryKindz5Where a boundary marker sits in the version ordering.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚAFTER_LOCALSÚAFTER_POSTS© r)   r)   úQ/var/www/html/laksyashrimp/venv/lib/python3.10/site-packages/packaging/_ranges.pyr    7   s    r    c                   @  sd   e Zd ZdZdZd!d	d
„Zd"dd„Zd#dd„Zd$dd„Zd%dd„Z	d%dd„Z
d&dd„Zd'dd„Zd S )(ÚBoundaryVersiona§  A point on the version line between two real PEP 440 versions.

    Relative to a base version V::

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

    AFTER_LOCALS is the upper bound of ``<=V``, ``==V``, ``!=V`` (no
    local), and the lower bound of the upper-side range of ``!=V``.
    AFTER_POSTS is the lower bound of ``>V`` (V final or pre-release),
    excluding V's post-releases per PEP 440.
    )Ú_cached_devÚ_cached_epochÚ_cached_postÚ_cached_preÚ_cached_trimmed_releaseÚkindÚversionr2   r   r1   r    ÚreturnÚNonec                 C  s<   || _ || _t|jƒ| _|j| _|j| _|j	| _
|j| _d S ©N)r2   r1   Útrim_releaseÚreleaser0   Úepochr-   Úprer/   Úpostr.   Údevr,   )Úselfr2   r1   r)   r)   r*   Ú__init__V   s   zBoundaryVersion.__init__ÚotherÚboolc                 C  s¸   |j | jkrdS |j}| j}t|ƒ}t|ƒ|k rdS |d|… |kr$dS t|t|ƒƒD ]}|| dkr6 dS q+|j| jkr?dS | jt	j
krQ|j| jkoP|j| jkS |j| jkp[|jduS )z6Is ``other`` a version that this boundary sorts above?FNr   )r8   r-   r7   r0   ÚlenÚranger9   r/   r1   r    r'   r:   r.   r;   r,   )r<   r>   Úother_releaseÚtrimmed_releaseÚtrimmed_lengthÚir)   r)   r*   Ú
_is_family_   s$   ÿzBoundaryVersion._is_familyÚ_BoundaryOrderKeyc                 C  sH   | j j}|d }| jtjkr|d |d dtddf}|d |d |tfS )a’  Sort key placing this boundary just above the versions it covers.

        It extends ``V``'s comparison key ``(epoch, release, suffix)`` with
        a trailing ``_BOUNDARY_INF`` local component, so the key sorts after
        ``V`` and every ``V+local`` (whose keys carry a real, finite local
        segment). ``suffix`` is the 6-int comparison suffix
        ``(pre_rank, pre_n, post_rank, post_n, dev_rank, dev_n)``.

        For an AFTER_POSTS boundary the suffix is replaced with one whose
        post number is ``_BOUNDARY_INF``, so the key also sorts after every
        ``V.postN``. An AFTER_LOCALS boundary uses ``V``'s suffix unchanged.
        é   r   r   )r2   Ú_keyr1   r    r(   r   )r<   Úversion_keyÚsuffixr)   r)   r*   Ú
_order_keyx   s
   zBoundaryVersion._order_keyÚobjectc                 C  s   t |tƒr|  ¡ | ¡ kS tS r5   )Ú
isinstancer+   rL   ÚNotImplemented©r<   r>   r)   r)   r*   Ú__eq__�   s   
zBoundaryVersion.__eq__úBoundaryVersion | Versionc                 C  s4   t |tƒr|  ¡ | ¡ k S | j|k sdS |  |¡ S ©NF©rN   r+   rL   r2   rF   rP   r)   r)   r*   Ú__lt__”   s
   

zBoundaryVersion.__lt__c                 C  s2   t |tƒr|  ¡ | ¡ kS | j|krdS |  |¡S )NTrT   rP   r)   r)   r*   Ú__gt__�   s
   


zBoundaryVersion.__gt__Úintc                 C  s   t |  ¡ ƒS r5   )ÚhashrL   ©r<   r)   r)   r*   Ú__hash__¦   s   zBoundaryVersion.__hash__Ústrc                 C  s    | j j› d| j›d| jj› d�S )Nú(z, ú))Ú	__class__r!   r2   r1   ÚnamerY   r)   r)   r*   Ú__repr__ª   s    zBoundaryVersion.__repr__N)r2   r   r1   r    r3   r4   )r>   r   r3   r?   )r3   rG   ©r>   rM   r3   r?   )r>   rR   r3   r?   ©r3   rW   ©r3   r[   )r!   r"   r#   r$   Ú	__slots__r=   rF   rL   rQ   rU   rV   rZ   r`   r)   r)   r)   r*   r+   >   s    


	



	
	r+   c                   @  óF   e Zd ZdZdZdd	d
„Zddd„Zddd„Zddd„Zddd„Z	dS )Ú
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.
    )Ú_aboveÚ	inclusiver2   r2   Ú_VersionOrBoundaryrh   r?   r3   r4   c                 C  sp   || _ || _|d u rd | _d S t|tƒr*|jtjkr"t|j ƒ| _d S t	|j ƒ| _d S |r2|j
| _d S |j| _d S r5   )r2   rh   rg   rN   r+   r1   r    r(   Ú_make_above_after_postsÚ_make_above_after_localsÚ__le__rU   ©r<   r2   rh   r)   r)   r*   r=   ½   s   

zLowerBound.__init__r>   rM   c                 C  ó&   t |tƒstS | j|jko| j|jkS r5   ©rN   rf   rO   r2   rh   rP   r)   r)   r*   rQ   Ñ   ó   
zLowerBound.__eq__c                 C  sV   t |tƒstS | jd u r|jd uS |jd u rdS | j|jkr$| j|jk S | jo*|j S rS   ro   rP   r)   r)   r*   rU   Ö   s   



zLowerBound.__lt__rW   c                 C  ó   t | j| jfƒS r5   ©rX   r2   rh   rY   r)   r)   r*   rZ   ã   ó   zLowerBound.__hash__r[   c                 C  s*   | j rdnd}d| jj› d|› | j›d�S )Nú[r\   ú<ú ú>©rh   r^   r!   r2   ©r<   Úbracketr)   r)   r*   r`   æ   ó   zLowerBound.__repr__N©r2   ri   rh   r?   r3   r4   ra   )r>   rf   r3   r?   rb   rc   ©
r!   r"   r#   r$   rd   r=   rQ   rU   rZ   r`   r)   r)   r)   r*   rf   ²   s    



rf   c                   @  re   )Ú
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.
    )Ú_belowrh   r2   r2   ri   rh   r?   r3   r4   c                 C  sl   || _ || _|d u rd | _d S t|tƒr(|jtjkr"t|j ƒ| _d S |j	| _d S |r0|j	| _d S |j
| _d S r5   )r2   rh   r   rN   r+   r1   r    r'   Ú_make_below_after_localsÚ__ge__rV   rm   r)   r)   r*   r=   ö   s   

zUpperBound.__init__r>   rM   c                 C  rn   r5   ©rN   r~   rO   r2   rh   rP   r)   r)   r*   rQ     rp   zUpperBound.__eq__c                 C  sP   t |tƒstS | jd u rdS |jd u rdS | j|jkr!| j|jk S | j o'|jS )NFTr‚   rP   r)   r)   r*   rU     s   


zUpperBound.__lt__rW   c                 C  rq   r5   rr   rY   r)   r)   r*   rZ     rs   zUpperBound.__hash__r[   c                 C  s*   | j rdnd}d| jj› d| j›|› d�S )Nú]r]   ru   rv   rw   rx   ry   r)   r)   r*   r`   !  r{   zUpperBound.__repr__Nr|   ra   )r>   r~   r3   r?   rb   rc   r}   r)   r)   r)   r*   r~   ë   s    



r~   FzFinal[LowerBound]ÚNEG_INFzFinal[UpperBound]ÚPOS_INFzFinal[tuple[Interval]]r   r7   útuple[int, ...]r3   c                 C  s\   t | ƒ}|dkr | |d  dkr |d8 }|dkr | |d  dks|t | ƒkr(| S | d|… S )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)r@   )r7   Úendr)   r)   r*   r6   0  s
   ÿr6   r2   r   c                 C  s4   g | j dd… ¢| j d d ‘R }tj| j|dd�S )z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Néÿÿÿÿr   r   ©r8   r7   r;   )r7   r   Ú
from_partsr8   )r2   r7   r)   r)   r*   Ú_next_prefix_dev08  s   "r‹   c                 C  s   t j| j| jdd�S )z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.r   r‰   )r   rŠ   r8   r7   ©r2   r)   r)   r*   Ú
_base_dev0>  s   r�   úVersion | strúVersion | Nonec                 C  s2   t | tƒszt| ƒ} W | S  ty   Y d S w | S r5   )rN   r   r   rŒ   r)   r)   r*   r   C  s   

þÿr   úCallable[[Version], bool]c                   s>   | j ‰| j‰| j‰t| jƒ‰tˆƒ‰ d‡ ‡‡‡‡fdd„}|S )	a  Predicate ``parsed > AFTER_POSTS(V)`` for a lower bound.

    Per PEP 440, ``>V`` excludes V's post-releases unless V is itself
    a post-release. AFTER_POSTS sits above V and every V.postN (with
    or without local), and just below the next release.
    Úparsedr   r3   r?   c                   s|   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k rdS |d ˆ … ˆkr"dS tˆ t|ƒƒD ]}|| dkr4 dS q)| jˆkr<dS dS ©NFTr   )r8   r7   r@   rA   r9   ©r‘   Úparsed_releaserE   ©rD   Úversion_epochÚ
version_geÚversion_preÚversion_release_trimmedr)   r*   ÚaboveY  s    
ÿ
z&_make_above_after_posts.<locals>.aboveN©r‘   r   r3   r?   )r�   r8   r9   r6   r7   r@   ©r2   rš   r)   r•   r*   rj   L  s   
rj   c                   óN   | j ‰| j‰| j‰| j‰| j‰t| jƒ‰tˆƒ‰ d‡ ‡‡‡‡‡‡fdd„}|S )	zÞPredicate ``parsed > AFTER_LOCALS(V)`` for a lower bound.

    Used by the upper-side range of ``!=V`` (when V has no local
    segment). AFTER_LOCALS sits above V and every ``V+local`` but
    just below ``V.post0``.
    r‘   r   r3   r?   c                   s�   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k rdS |d ˆ … ˆkr"dS tˆ t|ƒƒD ]}|| dkr4 dS q)| jˆkr<dS | jˆkrCdS | jˆkS r’   ©r8   r7   r@   rA   r9   r:   r;   r“   ©rD   Úversion_devr–   r—   Úversion_postr˜   r™   r)   r*   rš   ƒ  ó$   
ÿ


z'_make_above_after_locals.<locals>.aboveNr›   ©r�   r8   r9   r:   r;   r6   r7   r@   rœ   r)   rŸ   r*   rk   t  ó   
rk   c                   r�   )	zëPredicate ``parsed <= AFTER_LOCALS(V)`` for an upper bound.

    Used by ``<=V``, ``==V``, ``!=V`` (no local). ``parsed`` is at or
    below the boundary when it is at or below V cmpkey-wise, or when
    it is in V's local family.
    r‘   r   r3   r?   c                   s�   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k rdS |d ˆ … ˆkr"dS tˆ t|ƒƒD ]}|| dkr4 dS q)| jˆkr<dS | jˆkrCdS | jˆkS )NTFr   rž   r“   rŸ   r)   r*   Úbelowª  r¢   z'_make_below_after_locals.<locals>.belowNr›   r£   )r2   r¥   r)   rŸ   r*   r€   ›  r¤   r€   Úboundaryc                 C  sŠ   | j }| jtjkr,|jdur|j|jd dd�S |jdur"|jd nd}|j|ddd�S |jdurC|j\}}|j||d fdddd�S dS )zLSmallest real version strictly above *boundary*, or ``None`` if none exists.Nr   ©r;   Úlocalr   ©r:   r;   r¨   ©r9   r:   r;   r¨   )r2   r1   r    r'   r;   Ú__replace__r:   r9   )r¦   ÚbaseÚ	next_postr1   Únumberr)   r)   r*   r   Â  s   


r   ÚlowerÚupperr?   c                 C  s–   |j du rdS | j du r|j ot|j tƒo|j tkS t| j tƒr8t| j ƒ}|dur8|j |kr3|j S |j |k S | j |j krE| joC|j S | j |j kS )a  True when the range defined by *lower* and *upper* contains no versions.

    A boundary lower sits just below the next real version, so an ordered pair
    is still empty when the upper excludes that least successor:
    ``(AFTER_POSTS(1.0a1), 1.0a2.dev0)`` holds no version.
    NF)r2   rh   rN   r   r   r+   r   )r¯   r°   Ú	successorr)   r)   r*   r   ×  s"   


ÿý


r   ÚleftúSequence[Interval]Úrightúlist[Interval]c                 C  sž   g }d }}|t | ƒk rM|t |ƒk rM| | \}}|| \}}t||ƒ}	t||ƒ}
t|	|
ƒs4| |	|
f¡ ||k r=|d7 }n|d7 }|t | ƒk rM|t |ƒk s|S )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )r@   ÚmaxÚminr   Úappend)r²   r´   ÚresultÚ
left_indexÚright_indexÚ
left_lowerÚ
left_upperÚright_lowerÚright_upperr¯   r°   r)   r)   r*   r   ÷  s   



òr   r)   ÚrangesÚiterableúIterable[Any]Úkeyú%Callable[[Any], Version | str] | NoneÚprereleasesúbool | NoneÚregionúIterator[Any]c                 c  s¶  � |du rÂg }d}t | ƒdkrg| d \}}|j}	|j}
|D ]@}t|du r&|n||ƒƒ}|du r0q|	dur9|	|ƒs9q|
durB|
|ƒsBq|jsKd}|V  q|rVt||ƒrV|V  q|s]| |¡ q|se|E dH  dS |D ]O}t|du rr|n||ƒƒ}|du r|qi| D ]9\}}|j}	|	dur�|	|ƒs� n)|j}
|
du sš|
|ƒr·|js£d}|V  n|r®t||ƒr®|V  n|sµ| |¡  nq~qi|sÀ|E dH  dS |du }t | ƒdk�r| d \}}|j}	|j}
|D ]/}t|du rä|n||ƒƒ}|du rîqÛ|rô|jrôqÛ|	durý|	|ƒsýqÛ|
du �s|
|ƒ�r
|V  qÛdS |D ]I}t|du �r|n||ƒƒ}|du �r%�q|�r.|j�r.�q| D ]&\}}|j}	|	du�rC|	|ƒ�sC n|j}
|
du �sP|
|ƒ�rU|V   n�q0�qdS )aÉ  Filter *iterable* against precomputed version *ranges*.

    With ``prereleases=None``, the PEP 440 default applies: pre-releases are
    excluded unless no final matches, in which case buffered pre-releases come
    out at the end. A pre-release inside the opt-in ``region`` is the exception:
    it is force-admitted in place, as ``prereleases=True`` would yield it. A
    force-admitted pre-release is not a final, so it never suppresses the buffer.
    NFr   r   T)r@   rg   r   r   Úis_prereleaser   r¸   )rÀ   rÁ   rÃ   rÅ   rÇ   Úprerelease_bufferÚfound_finalr¯   r°   rš   r¥   Úitemr‘   Úexclude_prereleasesr)   r)   r*   r     s¨   €
€

ø€	

€
þ€õr   c                 C  s*   | j dur| jddddd�S | jddd�S )z=Smallest non-pre-release at or above a pre-release *version*.Nrª   r§   )r9   r«   rŒ   r)   r)   r*   Ú!_nearest_release_above_prereleasew  s   
rÎ   Úvalueú Version | BoundaryVersion | Nonec                 C  sb   | du rt S t| tƒr(| j}|jrt|ƒS |jdur|jd nd}|j|dd�S | js-| S t| ƒS )z™Smallest non-pre-release version at or above *value*.

    ``None`` is the ``-inf`` floor, whose nearest non-pre-release is
    :data:`MIN_RELEASE`.
    Nr   r   )r:   r¨   )r   rN   r+   r2   rÉ   rÎ   r:   r«   )rÏ   Úinner_versionr­   r)   r)   r*   Ú_lowest_release_at_or_aboveƒ  s   
rÒ   c                 C  sL   | D ]!\}}t |jƒ}|jdu s||jk r dS ||jkr#|jr# dS qdS )zÜTrue when every range in *ranges* contains only pre-releases.

    Used to detect unsatisfiable specifier sets when ``prereleases=False``:
    if every range is pre-release-only, every contained version is excluded.
    NFT)rÒ   r2   rh   )rÀ   r¯   r°   Únearestr)   r)   r*   r   š  s   
€r   Úopr[   r¬   c                 C  sJ   t |ƒ}t|ƒ}| dkrt|dƒt|dƒfgS tt|dƒft|dƒtfgS )z^Ranges for ==V.* and !=V.*.

    ==1.2.* -> [1.2.dev0, 1.3.dev0);  !=1.2.* -> complement.
    ú==TF)r�   r‹   rf   r~   r„   r…   )rÔ   r¬   r¯   r°   r)   r)   r*   r   ©  s   þr   Ú	has_localc                 C  s’  | 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dur7|j|jd dd�}t |dƒtfgS |j	durO|j|j	d ddd	�}t |dƒtfgS t t|tj
ƒd
ƒtfgS | dkry|jrd|n|jddd�}|tkrqg S tt|d
ƒfgS 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rÂ|j|jdd… d�}t |dƒtt|ƒd
ƒfgS td| ›�ƒ‚)zþRanges for the standard PEP 440 operators (no wildcard, no ===).

    *has_local* indicates whether the spec string included a ``+local``
    segment; relevant only for ``==`` / ``!=`` to decide whether the
    upper bound includes V's local family.
    z>=Tz<=rw   Nr   r§   r   r©   Fru   rÕ   z!=z~=rˆ   )r7   zUnknown operator: )rf   r…   r„   r~   r+   r    r'   r;   r«   r:   r(   rÉ   r   r7   r‹   Ú
ValueError)rÔ   r2   rÖ   Úlower_boundÚboundÚafter_localsr°   Úprefixr)   r)   r*   r   ¹  sJ   þÿ

þÿÿþÿr   Úversion_strc                 C  s$   |  d¡r
t| |ƒS t| |d|v ƒS )aD  Ranges for one specifier's ``(op, version_str)``.

    Dispatches between the wildcard and standard builders. ``version`` is the
    parsed ``version_str`` (its base, without the trailing ``.*``, for
    wildcards). ``===`` is not handled here; its match is a literal string
    compared in :mod:`packaging.specifiers`.
    z.*ú+)Úendswithr   r   )rÔ   rÜ   r2   r)   r)   r*   r   þ  s   

r   Úper_specifier_rangesúIterable[Sequence[Interval]]c                 C  sB   d}| D ]}|du r|}qt ||ƒ}|s nq|du rtdƒ‚|S )zÐIntersect each specifier's ranges into a single sequence.

    Short-circuits once the running intersection is empty, since no later
    specifier can revive it. Callers must pass at least one specifier.
    Nz4intersect_specifier_bounds called with no specifiers)r   ÚRuntimeError)rß   r¹   Úsubr)   r)   r*   r     s   
ÿr   c                 C  sJ   | D ] \}}|j }|dur||ƒs dS |j}|du s||ƒr" dS qdS )a$  Whether ``version`` falls within any of ``ranges``.

    The pure bounds membership test, for a single already-parsed version with
    no pre-release policy applied. ``ranges`` are sorted and non-overlapping,
    so a version below one range's lower bound is below every later range too.
    NFT)rg   r   )rÀ   r2   r¯   r°   rš   r¥   r)   r)   r*   r   #  s   ÿr   Ú
configuredÚautodetectedc                 C  s   | dur| S |r
dS dS )zÞResolve a specifier's effective default pre-release policy.

    An explicit ``configured`` value wins; otherwise an autodetected ``True``
    propagates and anything else falls back to the PEP 440 default (``None``).
    NTr)   )rã   rä   r)   r)   r*   r   6  s
   r   )r7   r†   r3   r†   )r2   r   r3   r   )r2   rŽ   r3   r�   )r2   r   r3   r�   )r¦   r+   r3   r�   )r¯   rf   r°   r~   r3   r?   )r²   r³   r´   r³   r3   rµ   )r)   )rÀ   r³   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   r³   r3   rÈ   )rÏ   rÐ   r3   r   )rÀ   r³   r3   r?   )rÔ   r[   r¬   r   r3   rµ   )rÔ   r[   r2   r   rÖ   r?   r3   rµ   )rÔ   r[   rÜ   r[   r2   r   r3   rµ   )rß   rà   r3   r³   )rÀ   r³   r2   r   r3   r?   )rã   rÆ   rä   rÆ   r3   rÆ   );r$   Ú
__future__r   r%   Ú	functoolsÚtypingr   r   r   r2   r   r   Úcollections.abcr	   r
   r   r   r   ÚtuplerW   ÚfloatÚ_BoundaryOrderSuffixrG   Ú__all__r   Ú__annotations__r   r   ÚEnumr    Útotal_orderingr+   ri   rf   r~   ÚIntervalr„   r…   r   r6   r‹   r�   r   rj   rk   r€   r   r   r   r   rÎ   rÒ   r   r   r   r   r   r   r   r)   r)   r)   r*   Ú<module>   sd   o8:




	
(
'
'

 û
f




E

