o
    xŸŽiÈ|  ã                   @   sX  d dl mZmZmZ d dlZd dlZd dlZd dlZddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZmZ ered dlmZmZmZmZmZmZmZmZmZ eeef Zeeeef Zeeege f Z!G d	d
„ d
e"ƒZ#G dd„ de
ej$e%ƒƒZ&G dd„ de&ƒZ'G dd„ de'ƒZ(dd„ Z)G dd„ de'ƒZ*e +d¡Z,dd„ Z-dd„ Z.G dd„ de&ƒZ/dS )é    )Úabsolute_importÚdivisionÚprint_functionNé   )Ústring_typesÚwith_metaclass)ÚTYPE_CHECKING)Úcanonicalize_version)ÚVersionÚLegacyVersionÚparse)	ÚListÚDictÚUnionÚIterableÚIteratorÚOptionalÚCallableÚTupleÚ	FrozenSetc                   @   s   e Zd ZdZdS )ÚInvalidSpecifierzH
    An invalid specifier was found, users should refer to PEP 440.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úqC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\setuptools/_vendor/packaging/specifiers.pyr   "   s    r   c                   @   s€   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZej	d	d
„ ƒZ
e
jdd
„ ƒZ
ejddd„ƒZejddd„ƒZdS )ÚBaseSpecifierc                 C   ó   dS )zŽ
        Returns the str representation of this Specifier like object. This
        should be representative of the Specifier itself.
        Nr   ©Úselfr   r   r   Ú__str__)   ó    zBaseSpecifier.__str__c                 C   r   )zF
        Returns a hash value for this Specifier like object.
        Nr   r   r   r   r   Ú__hash__1   r"   zBaseSpecifier.__hash__c                 C   r   )zq
        Returns a boolean representing whether or not the two Specifier like
        objects are equal.
        Nr   ©r    Úotherr   r   r   Ú__eq__8   r"   zBaseSpecifier.__eq__c                 C   r   )zu
        Returns a boolean representing whether or not the two Specifier like
        objects are not equal.
        Nr   r$   r   r   r   Ú__ne__@   r"   zBaseSpecifier.__ne__c                 C   r   )zg
        Returns whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   r   r   r   r   ÚprereleasesH   r"   zBaseSpecifier.prereleasesc                 C   r   )zd
        Sets whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   ©r    Úvaluer   r   r   r(   P   r"   Nc                 C   r   )zR
        Determines if the given item is contained within this specifier.
        Nr   ©r    Úitemr(   r   r   r   ÚcontainsX   r"   zBaseSpecifier.containsc                 C   r   )z•
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr   )r    Úiterabler(   r   r   r   Úfilter_   r"   zBaseSpecifier.filter©N)r   r   r   ÚabcÚabstractmethodr!   r#   r&   r'   Úabstractpropertyr(   Úsetterr-   r/   r   r   r   r   r   (   s"    





r   c                   @   s¬   e Zd Zi Zd"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dd„ Zedd„ ƒZedd„ ƒZedd„ ƒZejdd„ ƒZdd„ Zd#dd„Zd#d d!„ZdS )$Ú_IndividualSpecifierÚ Nc                 C   sF   | j  |¡}|std |¡ƒ‚| d¡ ¡ | d¡ ¡ f| _|| _d S )NzInvalid specifier: '{0}'ÚoperatorÚversion)Ú_regexÚsearchr   ÚformatÚgroupÚstripÚ_specÚ_prereleases)r    Úspecr(   Úmatchr   r   r   Ú__init__l   s   þ
z_IndividualSpecifier.__init__c                 C   s0   | j d urd | j¡nd}d | jjt| ƒ|¡S )Nú, prereleases={0!r}r6   z<{0}({1!r}{2})>)r?   r;   r(   Ú	__class__r   Ústr©r    Úprer   r   r   Ú__repr__z   s
   ÿýz_IndividualSpecifier.__repr__c                 C   s   dj | jŽ S )Nz{0}{1})r;   r>   r   r   r   r   r!   „   s   z_IndividualSpecifier.__str__c                 C   s   | j d t| j d ƒfS )Nr   r   )r>   r	   r   r   r   r   Ú_canonical_specˆ   s   z$_IndividualSpecifier._canonical_specc                 C   ó
   t | jƒS r0   )ÚhashrI   r   r   r   r   r#   �   ó   
z_IndividualSpecifier.__hash__c                 C   sP   t |tƒrz	|  t|ƒ¡}W n ty   t Y S w t || jƒs"tS | j|jkS r0   )Ú
isinstancer   rD   rE   r   ÚNotImplementedrI   r$   r   r   r   r&   ‘   ó   
ÿz_IndividualSpecifier.__eq__c                 C   sP   t |tƒrz	|  t|ƒ¡}W n ty   t Y S w t || jƒs"tS | j|jkS r0   )rM   r   rD   rE   r   rN   r>   r$   r   r   r   r'   �   rO   z_IndividualSpecifier.__ne__c                 C   s   t | d | j| ¡ƒ}|S )Nz_compare_{0})Úgetattrr;   Ú
_operators)r    ÚopÚoperator_callabler   r   r   Ú_get_operator©   s   ÿz"_IndividualSpecifier._get_operatorc                 C   s   t |ttfƒst|ƒ}|S r0   )rM   r   r
   r   ©r    r8   r   r   r   Ú_coerce_version°   s   z$_IndividualSpecifier._coerce_versionc                 C   ó
   | j d S )Nr   ©r>   r   r   r   r   r7   ¶   ó   
z_IndividualSpecifier.operatorc                 C   rW   )Nr   rX   r   r   r   r   r8   »   rY   z_IndividualSpecifier.versionc                 C   s   | j S r0   ©r?   r   r   r   r   r(   À   s   z _IndividualSpecifier.prereleasesc                 C   ó
   || _ d S r0   rZ   r)   r   r   r   r(   Å   rY   c                 C   ó
   |   |¡S r0   ©r-   ©r    r,   r   r   r   Ú__contains__Ê   rL   z!_IndividualSpecifier.__contains__c                 C   s>   |d u r| j }|  |¡}|jr|sdS |  | j¡}||| jƒS ©NF)r(   rV   Úis_prereleaserT   r7   r8   )r    r,   r(   Únormalized_itemrS   r   r   r   r-   Î   s   

z_IndividualSpecifier.containsc                 c   sŽ   � d}g }d|d ur|ndi}|D ]#}|   |¡}| j|fi |¤Žr4|jr/|s/| js/| |¡ qd}|V  q|sA|rC|D ]	}|V  q;d S d S d S )NFr(   T)rV   r-   ra   r(   Úappend)r    r.   r(   ÚyieldedÚfound_prereleasesÚkwr8   Úparsed_versionr   r   r   r/   ä   s*   €
ÿÿ€þz_IndividualSpecifier.filter©r6   Nr0   )r   r   r   rQ   rB   rH   r!   ÚpropertyrI   r#   r&   r'   rT   rV   r7   r8   r(   r4   r_   r-   r/   r   r   r   r   r5   h   s.    







r5   c                   @   sv   e Zd ZdZe de d ejejB ¡Zddddd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S )ÚLegacySpecifieraÛ  
        (?P<operator>(==|!=|<=|>=|<|>))
        \s*
        (?P<version>
            [^,;\s)]* # Since this is a "legacy" specifier, and the version
                      # string can be just about anything, we match everything
                      # except for whitespace, a semi-colon for marker support,
                      # a closing paren since versions can be enclosed in
                      # them, and a comma since it's a version separator.
        )
        ú^\s*ú\s*$ÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_than)ú==ú!=ú<=ú>=ú<ú>c                 C   s   t |tƒstt|ƒƒ}|S r0   )rM   r   rE   rU   r   r   r   rV      s   
zLegacySpecifier._coerce_versionc                 C   s   ||   |¡kS r0   ©rV   ©r    Úprospectiver@   r   r   r   Ú_compare_equal&  ó   zLegacySpecifier._compare_equalc                 C   s   ||   |¡kS r0   ry   rz   r   r   r   Ú_compare_not_equal*  r}   z"LegacySpecifier._compare_not_equalc                 C   s   ||   |¡kS r0   ry   rz   r   r   r   Ú_compare_less_than_equal.  r}   z(LegacySpecifier._compare_less_than_equalc                 C   s   ||   |¡kS r0   ry   rz   r   r   r   Ú_compare_greater_than_equal2  r}   z+LegacySpecifier._compare_greater_than_equalc                 C   s   ||   |¡k S r0   ry   rz   r   r   r   Ú_compare_less_than6  r}   z"LegacySpecifier._compare_less_thanc                 C   s   ||   |¡kS r0   ry   rz   r   r   r   Ú_compare_greater_than:  r}   z%LegacySpecifier._compare_greater_thanN)r   r   r   Ú
_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEr9   rQ   rV   r|   r~   r   r€   r�   r‚   r   r   r   r   rj     s"    ú	rj   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                    s   t |tƒsdS ˆ | ||ƒS r`   )rM   r
   rz   ©Úfnr   r   ÚwrappedC  s   
z)_require_version_compare.<locals>.wrapped)Ú	functoolsÚwraps)r‰   rŠ   r   rˆ   r   Ú_require_version_compare?  s   r�   c                	   @   s¸   e Zd ZdZe de d ejejB ¡Zdddddd	d
ddœZ	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZe
dd„ ƒZe
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdd„ Zedd„ ƒZejdd„ ƒZd S )!Ú	Specifiera  
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        (?P<version>
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                (?<====)  # Only match for the identity operator
                \s*
                [^\s]*    # We just match everything, except for whitespace
                          # since we are only testing for strict identity.
            )
            |
            (?:
                # 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
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?

                # You cannot use a wild card and a dev or local version
                # together so group them with a | and make them optional.
                (?:
                    (?:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                    |
                    \.\*  # Wild card syntax of .*
                )?
            )
            |
            (?:
                # 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
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        rk   rl   Ú
compatiblerm   rn   ro   rp   rq   rr   Ú	arbitrary)ú~=rs   rt   ru   rv   rw   rx   ú===c                 C   sN   d  tt dd„ t|ƒ¡ƒd d… ¡}|d7 }|  d¡||ƒo&|  d¡||ƒS )NÚ.c                 S   s   |   d¡ o|   d¡ S )NÚpostÚdev)Ú
startswith©Úxr   r   r   Ú<lambda>É  s    z/Specifier._compare_compatible.<locals>.<lambda>éÿÿÿÿú.*rv   rs   )ÚjoinÚlistÚ	itertoolsÚ	takewhileÚ_version_splitrT   )r    r{   r@   Úprefixr   r   r   Ú_compare_compatible¹  s   þÿûÿ
ÿzSpecifier._compare_compatiblec           	      C   sv   |  d¡r+t|jƒ}t|d d… ƒ}tt|ƒƒ}|d t|ƒ… }t||ƒ\}}||kS t|ƒ}|js7t|jƒ}||kS )Nr›   éþÿÿÿ)Úendswithr
   Úpublicr    rE   ÚlenÚ_pad_versionÚlocal)	r    r{   r@   Ú
split_specÚsplit_prospectiveÚshortened_prospectiveÚpadded_specÚpadded_prospectiveÚspec_versionr   r   r   r|   Ö  s   

ÿ
zSpecifier._compare_equalc                 C   s   |   ||¡ S r0   )r|   rz   r   r   r   r~   ÿ  s   zSpecifier._compare_not_equalc                 C   s   t |jƒt |ƒkS r0   ©r
   r¥   rz   r   r   r   r     ó   z"Specifier._compare_less_than_equalc                 C   s   t |jƒt |ƒkS r0   r¯   rz   r   r   r   r€     r°   z%Specifier._compare_greater_than_equalc                 C   s<   t |ƒ}||k s
dS |js|jrt |jƒt |jƒkrdS dS ©NFT)r
   ra   Úbase_version©r    r{   Úspec_strr@   r   r   r   r�     s   zSpecifier._compare_less_thanc                 C   s^   t |ƒ}||ks
dS |js|jrt |jƒt |jƒkrdS |jd ur-t |jƒt |jƒkr-dS dS r±   )r
   Úis_postreleaser²   r¨   r³   r   r   r   r‚   1  s   
zSpecifier._compare_greater_thanc                 C   s   t |ƒ ¡ t |ƒ ¡ kS r0   )rE   Úlowerrz   r   r   r   Ú_compare_arbitraryR  s   zSpecifier._compare_arbitraryc                 C   sR   | j d ur| j S | j\}}|dv r'|dkr | d¡r |d d… }t|ƒjr'dS dS )N)rs   rv   ru   r‘   r’   rs   r›   r£   TF)r?   r>   r¤   r   ra   )r    r7   r8   r   r   r   r(   V  s   


zSpecifier.prereleasesc                 C   r[   r0   rZ   r)   r   r   r   r(   p  rY   N)r   r   r   rƒ   r„   r…   r†   r‡   r9   rQ   r�   r¢   r|   r~   r   r€   r�   r‚   r·   ri   r(   r4   r   r   r   r   rŽ   M  s>    ]ø

(




 
rŽ   z^([0-9]+)((?:a|b|c|rc)[0-9]+)$c                 C   s@   g }|   d¡D ]}t |¡}|r| | ¡ ¡ q| |¡ q|S )Nr“   )ÚsplitÚ_prefix_regexr:   ÚextendÚgroupsrc   )r8   Úresultr,   rA   r   r   r   r    y  s   
r    c              
   C   sæ   g g }}|  tt dd„ | ¡ƒ¡ |  tt dd„ |¡ƒ¡ |  | t|d ƒd … ¡ |  |t|d ƒd … ¡ | ddgtdt|d ƒt|d ƒ ƒ ¡ | ddgtdt|d ƒt|d ƒ ƒ ¡ ttj|Ž ƒttj|Ž ƒfS )Nc                 S   ó   |   ¡ S r0   ©Úisdigitr—   r   r   r   r™   Š  ó    z_pad_version.<locals>.<lambda>c                 S   r½   r0   r¾   r—   r   r   r   r™   ‹  rÀ   r   r   Ú0)rc   r�   rž   rŸ   r¦   ÚinsertÚmaxÚchain)ÚleftÚrightÚ
left_splitÚright_splitr   r   r   r§   …  s   
,,r§   c                   @   sŽ   e Zd Zd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edd„ ƒZejdd„ ƒZdd„ Zddd„Z	ddd„ZdS ) ÚSpecifierSetr6   Nc              	   C   sj   dd„ |  d¡D ƒ}tƒ }|D ]}z	| t|ƒ¡ W q ty*   | t|ƒ¡ Y qw t|ƒ| _|| _d S )Nc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r   )r=   ©Ú.0Úsr   r   r   Ú
<listcomp>ž  s    z)SpecifierSet.__init__.<locals>.<listcomp>ú,)	r¸   ÚsetÚaddrŽ   r   rj   Ú	frozensetÚ_specsr?   )r    Ú
specifiersr(   Úsplit_specifiersÚparsedÚ	specifierr   r   r   rB   ™  s   ÿ

zSpecifierSet.__init__c                 C   s*   | j d urd | j¡nd}d t| ƒ|¡S )NrC   r6   z<SpecifierSet({0!r}{1})>)r?   r;   r(   rE   rF   r   r   r   rH   °  s
   ÿýzSpecifierSet.__repr__c                 C   s   d  tdd„ | jD ƒƒ¡S )NrÎ   c                 s   s   � | ]}t |ƒV  qd S r0   )rE   rÊ   r   r   r   Ú	<genexpr>¼  s   € z'SpecifierSet.__str__.<locals>.<genexpr>)rœ   ÚsortedrÒ   r   r   r   r   r!   º  s   zSpecifierSet.__str__c                 C   rJ   r0   )rK   rÒ   r   r   r   r   r#   ¾  rL   zSpecifierSet.__hash__c                 C   sš   t |tƒr
t|ƒ}nt |tƒstS tƒ }t| j|jB ƒ|_| jd u r-|jd ur-|j|_|S | jd ur=|jd u r=| j|_|S | j|jkrI| j|_|S tdƒ‚)NzFCannot combine SpecifierSets with True and False prerelease overrides.)rM   r   rÉ   rN   rÑ   rÒ   r?   Ú
ValueError)r    r%   rÖ   r   r   r   Ú__and__Â  s$   


ö	øûÿzSpecifierSet.__and__c                 C   s6   t |ttfƒrtt|ƒƒ}nt |tƒstS | j|jkS r0   ©rM   r   r5   rÉ   rE   rN   rÒ   r$   r   r   r   r&   Ú  ó
   
zSpecifierSet.__eq__c                 C   s6   t |ttfƒrtt|ƒƒ}nt |tƒstS | j|jkS r0   rÛ   r$   r   r   r   r'   ã  rÜ   zSpecifierSet.__ne__c                 C   rJ   r0   )r¦   rÒ   r   r   r   r   Ú__len__ì  rL   zSpecifierSet.__len__c                 C   rJ   r0   )ÚiterrÒ   r   r   r   r   Ú__iter__ð  rL   zSpecifierSet.__iter__c                 C   s.   | j d ur| j S | jsd S tdd„ | jD ƒƒS )Nc                 s   s   � | ]}|j V  qd S r0   ©r(   rÊ   r   r   r   r×     s   € z+SpecifierSet.prereleases.<locals>.<genexpr>)r?   rÒ   Úanyr   r   r   r   r(   ô  s
   
zSpecifierSet.prereleasesc                 C   r[   r0   rZ   r)   r   r   r   r(     rY   c                 C   r\   r0   r]   r^   r   r   r   r_     rL   zSpecifierSet.__contains__c                    sL   t ˆ ttfƒstˆ ƒ‰ ˆd u r| j‰ˆsˆ jrdS t‡ ‡fdd„| jD ƒƒS )NFc                 3   s   � | ]
}|j ˆ ˆd �V  qdS )rà   Nr]   rÊ   ©r,   r(   r   r   r×   *  s   € z(SpecifierSet.contains.<locals>.<genexpr>)rM   r   r
   r   r(   ra   ÚallrÒ   r+   r   râ   r   r-     s   
zSpecifierSet.containsc                 C   s¬   |d u r| j }| jr| jD ]}|j|t|ƒd�}q|S g }g }|D ](}t|ttfƒs/t|ƒ}n|}t|tƒr7q!|jrD|sD|sC| 	|¡ q!| 	|¡ q!|sT|rT|d u rT|S |S )Nrà   )
r(   rÒ   r/   ÚboolrM   r   r
   r   ra   rc   )r    r.   r(   r@   Úfilteredre   r,   rg   r   r   r   r/   ,  s,   





€zSpecifierSet.filterrh   r0   )r   r   r   rB   rH   r!   r#   rÚ   r&   r'   rÝ   rß   ri   r(   r4   r_   r-   r/   r   r   r   r   rÉ   ˜  s$    

		


ýrÉ   )0Ú
__future__r   r   r   r1   r‹   rž   r„   Z_compatr   r   Z_typingr   Úutilsr	   r8   r
   r   r   Útypingr   r   r   r   r   r   r   r   r   ÚParsedVersionrE   ÚUnparsedVersionrä   ÚCallableOperatorrÙ   r   ÚABCMetaÚobjectr   r5   rj   r�   rŽ   r…   r¹   r    r§   rÉ   r   r   r   r   Ú<module>   s6   ,@  8  
+