
0c@_|                 @   s  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 rd  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! Gd	 d
   d
 e"  Z# Gd d   d e
 e j$ e%   Z& Gd d   d e&  Z' Gd d   d e'  Z( d d   Z) Gd d   d e'  Z* e j+ d  Z, d d   Z- d d   Z. Gd 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   ?/tmp/pip-build-jynh7p1z/pip/pip/_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   s   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__)   s    zBaseSpecifier.__str__c             C   s   d S)zF
        Returns a hash value for this Specifier like object.
        Nr   )r   r   r   r   __hash__1   s    zBaseSpecifier.__hash__c             C   s   d S)zq
        Returns a boolean representing whether or not the two Specifier like
        objects are equal.
        Nr   )r   otherr   r   r   __eq__8   s    zBaseSpecifier.__eq__c             C   s   d S)zu
        Returns a boolean representing whether or not the two Specifier like
        objects are not equal.
        Nr   )r   r!   r   r   r   __ne__@   s    zBaseSpecifier.__ne__c             C   s   d S)zg
        Returns whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   )r   r   r   r   prereleasesH   s    zBaseSpecifier.prereleasesc             C   s   d S)zd
        Sets whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   )r   valuer   r   r   r$   P   s    Nc             C   s   d S)zR
        Determines if the given item is contained within this specifier.
        Nr   )r   itemr$   r   r   r   containsX   s    zBaseSpecifier.containsc             C   s   d S)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_   s    zBaseSpecifier.filter)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 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   sg   |  j  j |  } | s- t d j |    | j d  j   | j d  j   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   sF   |  j  d  k	 r! d j |  j  n d } d j |  j j t |   |  S)Nz, prereleases={0!r}r/   z<{0}({1!r}{2})>)r8   r4   r$   	__class__r   str)r   prer   r   r   __repr__z   s    !z_IndividualSpecifier.__repr__c             C   s   d j  |  j   S)Nz{0}{1})r4   r7   )r   r   r   r   r      s    z_IndividualSpecifier.__str__c             C   s   |  j  d t |  j  d  f S)Nr   r   )r7   r	   )r   r   r   r   _canonical_spec   s    z$_IndividualSpecifier._canonical_specc             C   s   t  |  j  S)N)hashr@   )r   r   r   r   r       s    z_IndividualSpecifier.__hash__c             C   sj   t  | t  rD y |  j t |   } WqZ t k
 r@ t SYqZ Xn t  | |  j  sZ t S|  j | j k S)N)
isinstancer   r<   r=   r   NotImplementedr@   )r   r!   r   r   r   r"      s    z_IndividualSpecifier.__eq__c             C   sj   t  | t  rD y |  j t |   } WqZ t k
 r@ t SYqZ Xn t  | |  j  sZ t S|  j | j k S)N)rB   r   r<   r=   r   rC   r7   )r   r!   r   r   r   r#      s    z_IndividualSpecifier.__ne__c             C   s#   t  |  d j |  j |   } | S)Nz_compare_{0})getattrr4   
_operators)r   opoperator_callabler   r   r   _get_operator   s    z"_IndividualSpecifier._get_operatorc             C   s%   t  | t t f  s! t |  } | S)N)rB   r   r
   r   )r   r1   r   r   r   _coerce_version   s    z$_IndividualSpecifier._coerce_versionc             C   s   |  j  d S)Nr   )r7   )r   r   r   r   r0      s    z_IndividualSpecifier.operatorc             C   s   |  j  d S)Nr   )r7   )r   r   r   r   r1      s    z_IndividualSpecifier.versionc             C   s   |  j  S)N)r8   )r   r   r   r   r$      s    z _IndividualSpecifier.prereleasesc             C   s   | |  _  d  S)N)r8   )r   r%   r   r   r   r$      s    c             C   s   |  j  |  S)N)r'   )r   r&   r   r   r   __contains__   s    z!_IndividualSpecifier.__contains__c             C   sZ   | d  k r |  j  } |  j |  } | j r8 | r8 d S|  j |  j  } | | |  j  S)NF)r$   rI   is_prereleaserH   r0   r1   )r   r&   r$   Znormalized_itemrG   r   r   r   r'      s    	z_IndividualSpecifier.containsc             c   s   d } g  } d | d  k	 r! | n d i } xc | D][ } |  j  |  } |  j | |  r1 | j r | pm |  j r | j |  q1 d } | Vq1 W| r | r x | D] } | Vq Wd  S)NFr$   T)rI   r'   rK   r$   append)r   r(   r$   yieldedfound_prereleaseskwr1   parsed_versionr   r   r   r)      s    		z_IndividualSpecifier.filter)r   r   r   rE   r;   r?   r   propertyr@   r    r"   r#   rH   rI   r0   r1   r$   r-   rJ   r'   r)   r   r   r   r   r.   h   s"   
r.   c               @   s   e  Z d  Z d Z e j d e d e j e j B Z d d d d d d	 d
 d d d d d i 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.
        )
        z^\s*z\s*$z==equalz!=	not_equalz<=less_than_equalz>=greater_than_equal<	less_than>greater_thanc             C   s%   t  | t  s! t t |   } | S)N)rB   r   r=   )r   r1   r   r   r   rI      s    zLegacySpecifier._coerce_versionc             C   s   | |  j  |  k S)N)rI   )r   prospectiver9   r   r   r   _compare_equal&  s    zLegacySpecifier._compare_equalc             C   s   | |  j  |  k S)N)rI   )r   r[   r9   r   r   r   _compare_not_equal*  s    z"LegacySpecifier._compare_not_equalc             C   s   | |  j  |  k S)N)rI   )r   r[   r9   r   r   r   _compare_less_than_equal.  s    z(LegacySpecifier._compare_less_than_equalc             C   s   | |  j  |  k S)N)rI   )r   r[   r9   r   r   r   _compare_greater_than_equal2  s    z+LegacySpecifier._compare_greater_than_equalc             C   s   | |  j  |  k  S)N)rI   )r   r[   r9   r   r   r   _compare_less_than6  s    z"LegacySpecifier._compare_less_thanc             C   s   | |  j  |  k S)N)rI   )r   r[   r9   r   r   r   _compare_greater_than:  s    z%LegacySpecifier._compare_greater_thanN)r   r   r   
_regex_strrecompileVERBOSE
IGNORECASEr2   rE   rI   r\   r]   r^   r_   r`   ra   r   r   r   r   rR     s   $rR   c                s%   t  j      f d d    } | S)Nc                s#   t  | t  s d S  |  | |  S)NF)rB   r
   )r   r[   r9   )fnr   r   wrappedC  s    z)_require_version_compare.<locals>.wrapped)	functoolswraps)rg   rh   r   )rg   r   _require_version_compare?  s    !rk   c               @   s!  e  Z d  Z d Z e j d e d e j e j B Z d d d d d d	 d
 d d d d d d d d d i 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
            )
        )
        z^\s*z\s*$z~=
compatiblez==rS   z!=rT   z<=rU   z>=rV   rW   rX   rY   rZ   z===	arbitraryc             C   so   d j  t t j d d   t |    d  d   } | d 7} |  j d  | |  on |  j d  | |  S)	N.c             S   s   |  j  d  o |  j  d  S)Npostdev)
startswith)xr   r   r   <lambda>  s    z/Specifier._compare_compatible.<locals>.<lambda>r   z.*z>=z==)joinlist	itertools	takewhile_version_splitrH   )r   r[   r9   prefixr   r   r   _compare_compatible  s    	
$zSpecifier._compare_compatiblec       	      C   s   | j  d  r{ t | j  } t | d  d   } t t |   } | d  t |   } t | |  \ } } | | k St |  } | j s t | j  } | | k Sd  S)Nz.*   )endswithr
   publicrz   r=   len_pad_versionlocal)	r   r[   r9   Z
split_specZsplit_prospectiveZshortened_prospectiveZpadded_specZpadded_prospectiveZspec_versionr   r   r   r\     s    
	zSpecifier._compare_equalc             C   s   |  j  | |  S)N)r\   )r   r[   r9   r   r   r   r]     s    zSpecifier._compare_not_equalc             C   s   t  | j  t  |  k S)N)r
   r   )r   r[   r9   r   r   r   r^     s    z"Specifier._compare_less_than_equalc             C   s   t  | j  t  |  k S)N)r
   r   )r   r[   r9   r   r   r   r_     s    z%Specifier._compare_greater_than_equalc             C   sU   t  |  } | | k  s d S| j rQ | j rQ t  | j  t  | j  k rQ d Sd S)NFT)r
   rK   base_version)r   r[   spec_strr9   r   r   r   r`     s    zSpecifier._compare_less_thanc             C   s   t  |  } | | k s d S| j rQ | j rQ t  | j  t  | j  k rQ d S| j d  k	 r t  | j  t  | j  k r d Sd S)NFT)r
   is_postreleaser   r   )r   r[   r   r9   r   r   r   ra   1  s    zSpecifier._compare_greater_thanc             C   s"   t  |  j   t  |  j   k S)N)r=   lower)r   r[   r9   r   r   r   _compare_arbitraryR  s    zSpecifier._compare_arbitraryc             C   ss   |  j  d  k	 r |  j  S|  j \ } } | d
 k ro | d k r\ | j d  r\ | d  d  } t |  j ro d Sd	 S)N==>=<=~====z.*r}   TF)r   r   r   r   r   r~   )r8   r7   r   r   rK   )r   r0   r1   r   r   r   r$   V  s    zSpecifier.prereleasesc             C   s   | |  _  d  S)N)r8   )r   r%   r   r   r   r$   p  s    N)r   r   r   rb   rc   rd   re   rf   r2   rE   rk   r|   r\   r]   r^   r_   r`   ra   r   rQ   r$   r-   r   r   r   r   rl   M  s(   ]$)		!rl   z^([0-9]+)((?:a|b|c|rc)[0-9]+)$c             C   s\   g  } xO |  j  d  D]> } t j |  } | rG | j | j    q | j |  q W| S)Nro   )split_prefix_regexr3   extendgroupsrL   )r1   resultr&   r:   r   r   r   rz   y  s    rz   c          	   C   s1  g  g  } } | j  t t j d d   |     | j  t t j d d   |    | j  |  t | d  d    | j  | t | d  d    | j d d g t d t | d  t | d    | j d d g t d t | d  t | d    t t j |    t t j |    f S)Nc             S   s
   |  j    S)N)isdigit)rs   r   r   r   rt     s    z_pad_version.<locals>.<lambda>c             S   s
   |  j    S)N)r   )rs   r   r   r   rt     s    r   r   0)rL   rw   rx   ry   r   insertmaxchain)leftright
left_splitright_splitr   r   r   r     s    %%!!88r   c               @   s   e  Z d  Z 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 d   Z e d d    Z e j d d    Z d d   Z d d d  Z d d d  Z d S)SpecifierSetr/   Nc             C   s   d d   | j  d  D } t   } xM | D]E } y | j t |   Wq, t k
 rp | j t |   Yq, Xq, Wt |  |  _ | |  _ d  S)Nc             S   s(   g  |  ] } | j    r | j     q Sr   )r6   ).0sr   r   r   
<listcomp>  s   	 z)SpecifierSet.__init__.<locals>.<listcomp>,)	r   setaddrl   r   rR   	frozenset_specsr8   )r   
specifiersr$   Zsplit_specifiersparsed	specifierr   r   r   r;     s    	zSpecifierSet.__init__c             C   s=   |  j  d  k	 r! d j |  j  n d } d j t |   |  S)Nz, prereleases={0!r}r/   z<SpecifierSet({0!r}{1})>)r8   r4   r$   r=   )r   r>   r   r   r   r?     s    !zSpecifierSet.__repr__c             C   s#   d j  t d d   |  j D   S)Nr   c             s   s   |  ] } t  |  Vq d  S)N)r=   )r   r   r   r   r   	<genexpr>  s    z'SpecifierSet.__str__.<locals>.<genexpr>)rv   sortedr   )r   r   r   r   r     s    zSpecifierSet.__str__c             C   s   t  |  j  S)N)rA   r   )r   r   r   r   r      s    zSpecifierSet.__hash__c             C   s   t  | t  r t |  } n t  | t  s1 t St   } t |  j | j B | _ |  j d  k r | j d  k	 r | j | _ nZ |  j d  k	 r | j d  k r |  j | _ n- |  j | j k r |  j | _ n t d   | S)NzFCannot combine SpecifierSets with True and False prerelease overrides.)rB   r   r   rC   r   r   r8   
ValueError)r   r!   r   r   r   r   __and__  s    		zSpecifierSet.__and__c             C   sM   t  | t t f  r* t t |   } n t  | t  s= t S|  j | j k S)N)rB   r   r.   r   r=   rC   r   )r   r!   r   r   r   r"     s
    zSpecifierSet.__eq__c             C   sM   t  | t t f  r* t t |   } n t  | t  s= t S|  j | j k S)N)rB   r   r.   r   r=   rC   r   )r   r!   r   r   r   r#     s
    zSpecifierSet.__ne__c             C   s   t  |  j  S)N)r   r   )r   r   r   r   __len__  s    zSpecifierSet.__len__c             C   s   t  |  j  S)N)iterr   )r   r   r   r   __iter__  s    zSpecifierSet.__iter__c             C   s=   |  j  d  k	 r |  j  S|  j s# d  St d d   |  j D  S)Nc             s   s   |  ] } | j  Vq d  S)N)r$   )r   r   r   r   r   r     s    z+SpecifierSet.prereleases.<locals>.<genexpr>)r8   r   any)r   r   r   r   r$     s
    	zSpecifierSet.prereleasesc             C   s   | |  _  d  S)N)r8   )r   r%   r   r   r   r$     s    c             C   s   |  j  |  S)N)r'   )r   r&   r   r   r   rJ     s    zSpecifierSet.__contains__c                sm   t    t t f  s! t       d  k r6 |  j   rJ   j rJ d St    f d d   |  j D  S)NFc             3   s$   |  ] } | j    d   Vq d S)r$   N)r'   )r   r   )r&   r$   r   r   r   *  s    z(SpecifierSet.contains.<locals>.<genexpr>)rB   r   r
   r   r$   rK   allr   )r   r&   r$   r   )r&   r$   r   r'     s    	zSpecifierSet.containsc             C   s  | d  k r |  j  } |  j rQ x, |  j D]! } | j | d t |  } q( W| Sg  } g  } x} | D]u } t | t t f  s t |  } n | } t | t  r qd | j r | r | s | j	 |  qd | j	 |  qd W| r | r | d  k r | S| Sd  S)Nr$   )
r$   r   r)   boolrB   r   r
   r   rK   rL   )r   r(   r$   r9   filteredrN   r&   rP   r   r   r   r)   ,  s*    
		zSpecifierSet.filter)r   r   r   r;   r?   r   r    r   r"   r#   r   r   rQ   r$   r-   rJ   r'   r)   r   r   r   r   r     s   
		r   )0
__future__r   r   r   r*   ri   rx   rc   _compatr   r   Z_typingr   utilsr	   r1   r
   r   r   Ztypingr   r   r   r   r   r   r   r   r   ZParsedVersionr=   ZUnparsedVersionr   ZCallableOperatorr   r   ABCMetaobjectr   r.   rR   rk   rl   rd   r   rz   r   r   r   r   r   r   <module>   s0   @"@8 *