o
    *h|                     @   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   m/home/www/facesmatcher.com/frenv_anti/lib/python3.10/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 q" 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 q" 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  
+