a
    ç´«j‚x  ã                   @  sä  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r¢d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�rNe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!< d"d"d#œd$d%„Z'd&d&d'œd(d)„Z(d&d&d'œd*d+„Z)d,d-d'œd.d/„Z*d&d0d'œd1d2„Z+d&d0d'œd3d4„Z,d&d0d'œd5d6„Z-dd-d7œd8d9„Z.ddd:d;œd<d=„Z/d>d>d?d@œdAdB„Z0dhd>dDdEdFd>dGdHœdIdJ„Z1d&d&d'œdKdL„Z2dMd&dNœdOdP„Z3d>d:dQœdRdS„Z4dTd&d?dUœdVdW„Z5dTd&d:d?dXœdYdZ„Z6dTdTd&d?d[œd\d]„Z7d^d>d_œd`da„Z8d>d&d:dbœdcdd„Z9dFdFdFdeœdfdg„Z:dS )izBPrivate 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)   úP/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/packaging/_ranges.pyr    7   s   r    c                   @  s�   e Zd ZdZdZddddœdd„Zdd	d
œdd„Zddœdd„Zdd	d
œdd„Zdd	d
œdd„Z	dd	d
œdd„Z
ddœdd„Zd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Úversionr   r    ÚNone)r2   r1   Úreturnc                 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__Úbool©Úotherr4   c                 C  s¸   |j | jkrdS |j}| j}t|ƒ}t|ƒ|k r4dS |d|… |krHdS t|t|ƒƒD ]}|| dkrV dS qV|j| jkr~dS | jt	j
kr¢|j| jko |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@   Zother_releaseZtrimmed_releaseÚtrimmed_lengthÚir)   r)   r*   Ú
_is_family_   s"    zBoundaryVersion._is_familyÚ_BoundaryOrderKey©r4   c                 C  sH   | j j}|d }| jtjkr4|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<   Zversion_keyÚsuffixr)   r)   r*   Ú
_order_keyx   s
    zBoundaryVersion._order_keyÚobjectc                 C  s   t |tƒr|  ¡ | ¡ kS tS r5   )Ú
isinstancer+   rK   ÚNotImplemented©r<   r@   r)   r)   r*   Ú__eq__�   s    
zBoundaryVersion.__eq__zBoundaryVersion | Versionc                 C  s4   t |tƒr|  ¡ | ¡ k S | j|k s(dS |  |¡ S ©NF©rM   r+   rK   r2   rE   rO   r)   r)   r*   Ú__lt__”   s
    

zBoundaryVersion.__lt__c                 C  s2   t |tƒr|  ¡ | ¡ kS | j|kr(dS |  |¡S )NTrR   rO   r)   r)   r*   Ú__gt__�   s
    

zBoundaryVersion.__gt__Úintc                 C  s   t |  ¡ ƒS r5   )ÚhashrK   ©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   ÚnamerW   r)   r)   r*   Ú__repr__ª   s    zBoundaryVersion.__repr__N)r!   r"   r#   r$   Ú	__slots__r=   rE   rK   rP   rS   rT   rX   r^   r)   r)   r)   r*   r+   >   s   
			r+   c                   @  sb   e Zd ZdZdZddddœdd„Zd	dd
œdd„Zd dd
œdd„Zddœdd„Zd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   Ú_VersionOrBoundaryr>   r3   ©r2   rb   r4   c                 C  sh   || _ || _|d u rd | _nHt|tƒrN|jtjkr@t|j ƒ| _qdt	|j ƒ| _n|r\|j
| _n|j| _d S r5   )r2   rb   ra   rM   r+   r1   r    r(   Ú_make_above_after_postsÚ_make_above_after_localsÚ__le__rS   ©r<   r2   rb   r)   r)   r*   r=   ½   s    

zLowerBound.__init__rL   r?   c                 C  s&   t |tƒstS | j|jko$| j|jkS r5   ©rM   r`   rN   r2   rb   rO   r)   r)   r*   rP   Ñ   s    
zLowerBound.__eq__c                 C  sV   t |tƒstS | jd u r"|jd uS |jd u r0dS | j|jkrH| j|jk S | joT|j S rQ   ri   rO   r)   r)   r*   rS   Ö   s    



zLowerBound.__lt__rU   rG   c                 C  s   t | j| jfƒS r5   ©rV   r2   rb   rW   r)   r)   r*   rX   ã   s    zLowerBound.__hash__rY   c                 C  s*   | j r
dnd}d| jj› d|› | j›d�S )Nú[rZ   ú<ú ú>©rb   r\   r!   r2   ©r<   Zbracketr)   r)   r*   r^   æ   s    zLowerBound.__repr__N©
r!   r"   r#   r$   r_   r=   rP   rS   rX   r^   r)   r)   r)   r*   r`   ²   s   r`   c                   @  sb   e Zd ZdZdZddddœdd„Zd	dd
œdd„Zd dd
œdd„Zddœdd„Zddœdd„Z	dS )Ú
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.
    )Ú_belowrb   r2   rc   r>   r3   rd   c                 C  sd   || _ || _|d u rd | _nDt|tƒrJ|jtjkr@t|j ƒ| _q`|j	| _n|rX|j	| _n|j
| _d S r5   )r2   rb   rs   rM   r+   r1   r    r'   Ú_make_below_after_localsÚ__ge__rT   rh   r)   r)   r*   r=   ö   s    


zUpperBound.__init__rL   r?   c                 C  s&   t |tƒstS | j|jko$| j|jkS r5   ©rM   rr   rN   r2   rb   rO   r)   r)   r*   rP     s    
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rB| j|jk S | j oN|jS )NFTrv   rO   r)   r)   r*   rS     s    


zUpperBound.__lt__rU   rG   c                 C  s   t | j| jfƒS r5   rj   rW   r)   r)   r*   rX     s    zUpperBound.__hash__rY   c                 C  s*   | j r
dnd}d| jj› d| j›|› d�S )Nú]r[   rl   rm   rn   ro   rp   r)   r)   r*   r^   !  s    zUpperBound.__repr__Nrq   r)   r)   r)   r*   rr   ë   s   rr   FzFinal[LowerBound]ÚNEG_INFzFinal[UpperBound]ÚPOS_INFzFinal[tuple[Interval]]r   ztuple[int, ...])r7   r4   c                 C  sF   t | ƒ}|dkr*| |d  dkr*|d8 }q|t | ƒkr:| S | d|… S )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)rA   )r7   Úendr)   r)   r*   r6   0  s    
r6   r   )r2   r4   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€   zVersion | strzVersion | Nonec                 C  s0   t | tƒs,zt| ƒ} W n ty*   Y d S 0 | S r5   )rM   r   r   r   r)   r)   r*   r   C  s    
r   zCallable[[Version], bool]c                   sD   | j ‰| j‰| j‰t| jƒ‰tˆƒ‰ dd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.
    r   r>   ©Úparsedr4   c                   s|   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k r0dS |d ˆ … ˆkrDdS tˆ t|ƒƒD ]}|| dkrR dS qR| jˆkrxdS dS ©NFTr   )r8   r7   rA   rB   r9   ©r‚   Zparsed_releaserD   ©rC   Úversion_epochÚ
version_geÚversion_preÚversion_release_trimmedr)   r*   ÚaboveY  s    

z&_make_above_after_posts.<locals>.above)ru   r8   r9   r6   r7   rA   ©r2   rŠ   r)   r…   r*   re   L  s    
re   c                   sT   | j ‰| j‰| j‰| j‰| j‰t| jƒ‰tˆƒ‰ dd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>   r�   c                   s�   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k r0dS |d ˆ … ˆkrDdS tˆ t|ƒƒD ]}|| dkrR dS qR| jˆkrxdS | jˆkr†dS | jˆkS rƒ   ©r8   r7   rA   rB   r9   r:   r;   r„   ©rC   Zversion_devr†   r‡   Zversion_postrˆ   r‰   r)   r*   rŠ   ƒ  s"    


z'_make_above_after_locals.<locals>.above©ru   r8   r9   r:   r;   r6   r7   rA   r‹   r)   r�   r*   rf   t  s    
 rf   c                   sT   | j ‰| j‰| j‰| j‰| j‰t| jƒ‰tˆƒ‰ dddœ‡ ‡‡‡‡‡‡fdd„}|S )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>   r�   c                   s�   ˆ| ƒrdS | j ˆkrdS | j}t|ƒˆ k r0dS |d ˆ … ˆkrDdS tˆ t|ƒƒD ]}|| dkrR dS qR| jˆkrxdS | jˆkr†dS | jˆkS )NTFr   rŒ   r„   r�   r)   r*   Úbelowª  s"    


z'_make_below_after_locals.<locals>.belowrŽ   )r2   r�   r)   r�   r*   rt   ›  s    
 rt   )Úboundaryr4   c                 C  sŠ   | j }| jtjkrX|jdur0|j|jd dd�S |jdurD|jd nd}|j|ddd�S |jdur†|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   r>   )ÚlowerÚupperr4   c                 C  s–   |j du rdS | j du r6|j o4t|j tƒo4|j tkS t| j tƒrpt| j ƒ}|durp|j |krf|j S |j |k S | j |j krŠ| jo†|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   rb   rM   r   r   r+   r   )r™   rš   Ú	successorr)   r)   r*   r   ×  s"    


ÿý


r   zSequence[Interval]zlist[Interval])ÚleftÚrightr4   c                 C  sˆ   g }d }}|t | ƒk r„|t |ƒk r„| | \}}|| \}}t||ƒ}	t||ƒ}
t|	|
ƒsh| |	|
f¡ ||k rz|d7 }q|d7 }q|S )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )rA   ÚmaxÚminr   Úappend)rœ   r�   ÚresultZ
left_indexZright_indexZ
left_lowerZ
left_upperZright_lowerZright_upperr™   rš   r)   r)   r*   r   ÷  s    




r   r)   zIterable[Any]z%Callable[[Any], Version | str] | Nonezbool | NonezIterator[Any])ÚrangesÚiterableÚkeyÚprereleasesÚregionr4   c                 c  sÞ  |du �r”g }d}t | ƒdkrÎ| d \}}|j}	|j}
|D ]€}t|du rL|n||ƒƒ}|du r`q:|	durr|	|ƒsrq:|
dur„|
|ƒs„q:|js–d}|V  q:|r¬t||ƒr¬|V  q:|s:| |¡ q:|sÊ|E dH  dS |D ]¬}t|du rä|n||ƒƒ}|du røqÒ| D ]€\}}|j}	|	du�r"|	|ƒ�s" qÒ|j}
|
du �s:|
|ƒrü|j�sNd}|V  n*|�rht||ƒ�rh|V  n|�sx| |¡  qÒqüqÒ|�s�|E dH  dS |du }t | ƒdk�r>| d \}}|j}	|j}
|D ]r}t|du �rÚ|n||ƒƒ}|du �rò�qÆ|�r|j�r�qÆ|	du�r|	|ƒ�s�qÆ|
du �s0|
|ƒ�rÆ|V  �qÆdS |D ]–}t|du �rV|n||ƒƒ}|du �rn�qB|�r€|j�r€�qB| D ]P\}}|j}	|	du�r¬|	|ƒ�s¬ �qB|j}
|
du �sÆ|
|ƒ�r„|V   �qB�q„�qBd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)rA   ra   rs   r   Úis_prereleaser   r    )r¢   r£   r¤   r¥   r¦   Zprerelease_bufferZfound_finalr™   rš   rŠ   r�   Úitemr‚   Z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©   z Version | BoundaryVersion | None)Úvaluer4   c                 C  sb   | du rt S t| tƒrP| j}|jr*t|ƒS |jdur>|jd nd}|j|dd�S | jsZ| 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   rM   r+   r2   r§   r©   r:   r•   )rª   Zinner_versionr—   r)   r)   r*   Ú_lowest_release_at_or_aboveƒ  s    
r«   )r¢   r4   c                 C  sL   | D ]B\}}t |jƒ}|jdu s*||jk r0 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   rb   )r¢   r™   rš   Znearestr)   r)   r*   r   š  s    
r   rY   )Úopr–   r4   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~   r`   rr   rx   ry   )r¬   r–   r™   rš   r)   r)   r*   r   ©  s    þr   )r¬   r2   Ú	has_localr4   c                 C  sž  | dkrt |dƒtfgS | dkr8ttt|tjƒdƒfgS | dkr¶|jdurn|j|jd dd�}t |dƒtfgS |j	durž|j|j	d d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d�}|tkrâg S tt|d
ƒfgS t|tjƒ}|�r|n|}| dk�r,t |dƒt|dƒfgS | dk�rRt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| ›�ƒ‚dS )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<=rn   Nr   r‘   r   r“   Frl   r­   z!=z~=r{   )r7   zUnknown operator: )r`   ry   rx   rr   r+   r    r'   r;   r•   r:   r(   r§   r   r7   r~   Ú
ValueError)r¬   r2   r®   Úlower_boundÚboundZafter_localsrš   Úprefixr)   r)   r*   r   ¹  sJ    þÿ

þÿÿ

þ
ÿr   )r¬   Úversion_strr2   r4   c                 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   zIterable[Sequence[Interval]])Úper_specifier_rangesr4   c                 C  sB   d}| D ]$}|du r|}qt ||ƒ}|s q.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   )r¢   r2   r4   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)ra   rs   )r¢   r2   r™   rš   rŠ   r�   r)   r)   r*   r   #  s    r   )Ú
configuredÚautodetectedr4   c                 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   )r)   );r$   Ú
__future__r   r%   Ú	functoolsÚtypingr   r   r   r2   r   r   Úcollections.abcr	   r
   r   r   r   ÚtuplerU   ÚfloatZ_BoundaryOrderSuffixrF   Ú__all__r   Ú__annotations__r   r   ÚEnumr    Útotal_orderingr+   rc   r`   rr   ZIntervalrx   ry   r   r6   r~   r€   r   re   rf   rt   r   r   r   r   r©   r«   r   r   r   r   r   r   r   r)   r)   r)   r*   Ú<module>   sb   o8:	(''  ûfE