
0c@__[                 @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d d d	 d
 d d d g Z e j e	  Z
 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z e j d  Z d d   Z e Z Gd d   d e  Z d d   Z Gd d   d e  Z e j d  d f e j d  d f e j d  d f e j d  d  f e j d!  d" f e j d#  d" f e j d$  d% f e j d&  d' f e j d(  d) f e j d*  d+ f f
 Z e j d,  d f e j d-  d f e j d.  d% f e j d$  d% f e j d/  d f f Z e j d0  Z d1 d2   Z d3 d4   Z e j d5 e j  Z d6 d7 d8 d7 d9 d: d; d7 d< d= d d d% d i Z d> d?   Z Gd@ d   d e  Z  GdA d	   d	 e  Z! e j dB e j  Z" dC dD   Z# dE dF   Z$ GdG d
   d
 e  Z% GdH d   d e  Z& GdI dJ   dJ e  Z' dK e' e e e  dL e' e e! dM dN    dO e' e$ e& e  i Z( e( dK e( dP <dQ d   Z) d S)Rz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
    N   )string_types)parse_requirementNormalizedVersionNormalizedMatcherLegacyVersionLegacyMatcherSemanticVersionSemanticMatcherUnsupportedVersionError
get_schemec               @   s   e  Z d  Z d Z d S)r   zThis is an unsupported version.N)__name__
__module____qualname____doc__ r   r   :/tmp/pip-build-jynh7p1z/pip/pip/_vendor/distlib/version.pyr      s   c               @   s   e  Z 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
 d d   Z d d   Z d d   Z d d   Z e d d    Z d S)Versionc             C   sZ   | j    |  _ } |  j |  |  _ } t | t  s> t  t |  d k sV t  d  S)Nr   )strip_stringparse_parts
isinstancetupleAssertionErrorlen)selfspartsr   r   r   __init__   s    zVersion.__init__c             C   s   t  d   d  S)Nzplease implement in a subclass)NotImplementedError)r   r   r   r   r   r   %   s    zVersion.parsec             C   s2   t  |   t  |  k r. t d |  | f   d  S)Nzcannot compare %r and %r)type	TypeError)r   otherr   r   r   _check_compatible(   s    zVersion._check_compatiblec             C   s   |  j  |  |  j | j k S)N)r$   r   )r   r#   r   r   r   __eq__,   s    zVersion.__eq__c             C   s   |  j  |  S)N)r%   )r   r#   r   r   r   __ne__0   s    zVersion.__ne__c             C   s   |  j  |  |  j | j k  S)N)r$   r   )r   r#   r   r   r   __lt__3   s    zVersion.__lt__c             C   s   |  j  |  p |  j |  S)N)r'   r%   )r   r#   r   r   r   __gt__7   s    zVersion.__gt__c             C   s   |  j  |  p |  j |  S)N)r'   r%   )r   r#   r   r   r   __le__:   s    zVersion.__le__c             C   s   |  j  |  p |  j |  S)N)r(   r%   )r   r#   r   r   r   __ge__=   s    zVersion.__ge__c             C   s   t  |  j  S)N)hashr   )r   r   r   r   __hash__A   s    zVersion.__hash__c             C   s   d |  j  j |  j f S)Nz%s('%s'))	__class__r   r   )r   r   r   r   __repr__D   s    zVersion.__repr__c             C   s   |  j  S)N)r   )r   r   r   r   __str__G   s    zVersion.__str__c             C   s   t  d   d  S)NzPlease implement in subclasses.)r    )r   r   r   r   is_prereleaseJ   s    zVersion.is_prereleaseN)r   r   r   r   r   r$   r%   r&   r'   r(   r)   r*   r,   r.   r/   propertyr0   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d Z d d d   d d d   d d d   d	 d
 d   d d d   d d d   d d d   d d d   i Z 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 d% d&   Z d S)'MatcherN<c             C   s
   |  | k  S)Nr   )vcpr   r   r   <lambda>T   s    zMatcher.<lambda>>c             C   s
   |  | k S)Nr   )r4   r5   r6   r   r   r   r7   U   s    z<=c             C   s   |  | k p |  | k  S)Nr   )r4   r5   r6   r   r   r   r7   V   s    z>=c             C   s   |  | k p |  | k S)Nr   )r4   r5   r6   r   r   r   r7   W   s    z==c             C   s
   |  | k S)Nr   )r4   r5   r6   r   r   r   r7   X   s    z===c             C   s
   |  | k S)Nr   )r4   r5   r6   r   r   r   r7   Y   s    z~=c             C   s   |  | k p |  | k S)Nr   )r4   r5   r6   r   r   r   r7   [   s    z!=c             C   s
   |  | k S)Nr   )r4   r5   r6   r   r   r   r7   \   s    c             C   s
   t  |  S)N)r   )r   r   r   r   r   r   a   s    zMatcher.parse_requirementc             C   s+  |  j  d  k r t d   | j   |  _ } |  j |  } | sS t d |   | j |  _ |  j j   |  _ g  } | j rx | j D] \ } } | j	 d  r | d
 k r t d |   | d  d  d } } |  j  |  n |  j  |  d	 } } | j
 | | | f  q Wt |  |  _ d  S)NzPlease specify a version classzNot valid: %rz.*==!=z#'.*' not allowed for %r constraints   TF)r9   r:   )version_class
ValueErrorr   r   r   namelowerkeyconstraintsendswithappendr   r   )r   r   rZclistopvnprefixr   r   r   r   d   s(    	
zMatcher.__init__c             C   s   t  | t  r |  j |  } x |  j D]} \ } } } |  j j |  } t  | t  rg t |  |  } | s d | |  j j f } t	 |   | | | |  s( d Sq( Wd S)z
        Check if the provided version matches the constraints.

        :param version: The version to match against this instance.
        :type version: String or :class:`Version` instance.
        z%r not implemented for %sFT)
r   r   r=   r   
_operatorsgetgetattrr-   r   r    )r   versionoperator
constraintrH   fmsgr   r   r   match   s    zMatcher.matchc             C   sG   d  } t  |  j  d k rC |  j d d d k rC |  j d d } | S)Nr   r   =====)rR   rS   )r   r   )r   resultr   r   r   exact_version   s    ,zMatcher.exact_versionc             C   sD   t  |   t  |  k s* |  j | j k r@ t d |  | f   d  S)Nzcannot compare %s and %s)r!   r?   r"   )r   r#   r   r   r   r$      s    *zMatcher._check_compatiblec             C   s/   |  j  |  |  j | j k o. |  j | j k S)N)r$   rA   r   )r   r#   r   r   r   r%      s    zMatcher.__eq__c             C   s   |  j  |  S)N)r%   )r   r#   r   r   r   r&      s    zMatcher.__ne__c             C   s   t  |  j  t  |  j  S)N)r+   rA   r   )r   r   r   r   r,      s    zMatcher.__hash__c             C   s   d |  j  j |  j f S)Nz%s(%r))r-   r   r   )r   r   r   r   r.      s    zMatcher.__repr__c             C   s   |  j  S)N)r   )r   r   r   r   r/      s    zMatcher.__str__)r   r   r   r=   rI   r   r   rQ   r1   rU   r$   r%   r&   r,   r.   r/   r   r   r   r   r2   O   s&   r2   zk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c             C   sQ  |  j    }  t j |   } | s1 t d |    | j   } t d d   | d j d  D  } x6 t |  d k r | d d k r | d  d  } qf W| d s d } n t | d  } | d d  } | d	 d
  } | d d  } | d } | d k rf  } n | d t | d  f } | d k r=f  } n | d t | d  f } | d k rlf  } n | d t | d  f } | d  k rf  } nf g  }	 xQ | j d  D]@ }
 |
 j	   rd t |
  f }
 n d |
 f }
 |	 j
 |
  qWt |	  } | s#| r| rd } n d } | s/d } | s;d } | | | | | | f S)NzNot a valid version: %sc             s   s   |  ] } t  |  Vq d  S)N)int).0r4   r   r   r   	<genexpr>   s    z_pep_440_key.<locals>.<genexpr>r   .r            	   
         az_finalre   )NN)NN)NNre   )ra   re   )rb   )rc   )zfinal)r   PEP440_VERSION_RErQ   r   groupsr   splitr   rV   isdigitrD   )r   mrg   numsepochprepostdevlocalr   partr   r   r   _pep_440_key   sT    &%
	
					rr   c               @   sO   e  Z d  Z d Z d d   Z e d d d d d g  Z e d	 d
    Z d S)r   aI  A rational version.

    Good:
        1.2         # equivalent to "1.2.0"
        1.2.0
        1.2a1
        1.2.3a2
        1.2.3b1
        1.2.3c1
        1.2.3.4
        TODO: fill this out

    Bad:
        1           # minimum two numbers
        1.2a        # release level must have a release serial
        1.2.3b
    c             C   sT   t  |  } t j |  } | j   } t d d   | d j d  D  |  _ | S)Nc             s   s   |  ] } t  |  Vq d  S)N)rV   )rW   r4   r   r   r   rX     s    z*NormalizedVersion.parse.<locals>.<genexpr>r   rY   )_normalized_keyrf   rQ   rg   r   rh   _release_clause)r   r   rT   rj   rg   r   r   r   r   
  s
    )zNormalizedVersion.parsera   br5   rcro   c                s    t    f d d     j D  S)Nc             3   s(   |  ] } | r | d    j  k Vq d S)r   N)PREREL_TAGS)rW   t)r   r   r   rX     s    z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)anyr   )r   r   )r   r   r0     s    zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   setrw   r1   r0   r   r   r   r   r      s   c             C   sU   t  |   }  t  |  } |  | k r( d S|  j |  s; d St |  } |  | d k S)NTFrY   )str
startswithr   )xynr   r   r   _match_prefix  s    r   c               @   s   e  Z d  Z e Z d d d d 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 d    Z d! d"   Z d# S)$r   z~=_match_compatibler3   	_match_ltr8   	_match_gtz<=	_match_lez>=	_match_gez==	_match_eqz===_match_arbitraryz!=	_match_nec             C   su   | r" d | k o | j  d } n | j  d o: | j  d } | rk | j j d d  d } |  j |  } | | f S)N+r   r   re   re   re   )r   r   rh   r=   )r   rL   rN   rH   Zstrip_localr   r   r   r   _adjust_local6  s    zNormalizedMatcher._adjust_localc             C   s^   |  j  | | |  \ } } | | k r+ d S| j } d j d d   | D  } t | |  S)NFrY   c             S   s   g  |  ] } t  |   q Sr   )r{   )rW   ir   r   r   
<listcomp>I  s   	 z/NormalizedMatcher._match_lt.<locals>.<listcomp>)r   rt   joinr   )r   rL   rN   rH   release_clausepfxr   r   r   r   D  s    	zNormalizedMatcher._match_ltc             C   s^   |  j  | | |  \ } } | | k r+ d S| j } d j d d   | D  } t | |  S)NFrY   c             S   s   g  |  ] } t  |   q Sr   )r{   )rW   r   r   r   r   r   Q  s   	 z/NormalizedMatcher._match_gt.<locals>.<listcomp>)r   rt   r   r   )r   rL   rN   rH   r   r   r   r   r   r   L  s    	zNormalizedMatcher._match_gtc             C   s%   |  j  | | |  \ } } | | k S)N)r   )r   rL   rN   rH   r   r   r   r   T  s    zNormalizedMatcher._match_lec             C   s%   |  j  | | |  \ } } | | k S)N)r   )r   rL   rN   rH   r   r   r   r   X  s    zNormalizedMatcher._match_gec             C   sC   |  j  | | |  \ } } | s0 | | k } n t | |  } | S)N)r   r   )r   rL   rN   rH   rT   r   r   r   r   \  s
    zNormalizedMatcher._match_eqc             C   s   t  |  t  |  k S)N)r{   )r   rL   rN   rH   r   r   r   r   d  s    z"NormalizedMatcher._match_arbitraryc             C   sD   |  j  | | |  \ } } | s0 | | k } n t | |  } | S)N)r   r   )r   rL   rN   rH   rT   r   r   r   r   g  s
    zNormalizedMatcher._match_nec             C   s   |  j  | | |  \ } } | | k r+ d S| | k  r; d S| j } t |  d k rf | d  d  } d j d d   | D  } t | |  S)NTFr   rY   c             S   s   g  |  ] } t  |   q Sr   )r{   )rW   r   r   r   r   r   z  s   	 z7NormalizedMatcher._match_compatible.<locals>.<listcomp>re   )r   rt   r   r   r   )r   rL   rN   rH   r   r   r   r   r   r   o  s    	z#NormalizedMatcher._match_compatibleN)r   r   r   r   r=   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   '  s$   z[.+-]$ z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$z\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rY   z\b(alfa|apha)\balphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$betaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c             C   s  |  j    j   } x& t D] \ } } | j | |  } q W| sG d } t j |  } | sk d } | } n | j   d j d  } d d   | D } x# t |  d k  r | j	 d  q Wt |  d k r | | j
   d  } nJ d j d d   | d d  D  | | j
   d  } | d d  } d j d	 d   | D  } | j    } | rx& t D] \ } } | j | |  } qgW| s| } n& d
 | k rd n d } | | | } t |  sd } | S)z
    Try to suggest a semantic form for a version for which
    _suggest_normalized_version couldn't come up with anything.
    z0.0.0r   rY   c             S   s   g  |  ] } t  |   q Sr   )rV   )rW   r   r   r   r   r     s   	 z-_suggest_semantic_version.<locals>.<listcomp>   Nc             S   s   g  |  ] } t  |   q Sr   )r{   )rW   r   r   r   r   r     s   	 c             S   s   g  |  ] } t  |   q Sr   )r{   )rW   r   r   r   r   r     s   	 ro   -r   )r   r@   _REPLACEMENTSsub_NUMERIC_PREFIXrQ   rg   rh   r   rD   endr   _SUFFIX_REPLACEMENTS	is_semver)r   rT   patreplrj   rH   suffixsepr   r   r   _suggest_semantic_version  s:    	:	r   c             C   s  y t  |   |  SWn t k
 r& Yn X|  j   } x& dB D] \ } } | j | |  } q: Wt j d d |  } t j d d |  } t j d d |  } t j d d |  } t j d d |  } | j d  r | d  d!  } t j d" d |  } t j d# d$ |  } t j d% d& |  } t j d' d |  } t j d( d) |  } t j d* d) |  } t j d+ d
 |  } t j d, d- |  } t j d. d& |  } t j d/ d0 |  } t j d1 d2 |  } y t  |  Wn t k
 rd! } Yn X| S)Ca  Suggest a normalized version close to the given version string.

    If you have a version string that isn't rational (i.e. NormalizedVersion
    doesn't like it) then you might be able to get an equivalent (or close)
    rational version from this function.

    This does a number of simple normalizations to the given string, based
    on observation of versions currently in use on PyPI. Given a dump of
    those version during PyCon 2009, 4287 of them:
    - 2312 (53.93%) match NormalizedVersion without change
      with the automatic suggestion
    - 3474 (81.04%) match when using this suggestion method

    @param s {str} An irrational version string.
    @returns A rational version string, or None, if couldn't determine one.
    -alphara   -betaru   r   r   rv   r5   -finalr   -pre-release.release-stabler   rY   rc    .finalrd   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?z\1r4   r   Nz\b0+(\d+)(?!\d)z(\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$z\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1r   ra   r   ru   zalphara   zbetaru   zrcr5   r   r   r   r5   r   r   r   r   r   r   r   rY   rc   rY   r   r   r   r   zfinalr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rs   r   r@   replacerer   r|   )r   rsorigr   r   r   r   _suggest_normalized_version  sH    
    	r   z([a-z]+|\d+|[\.-])rm   r5   previewr   zfinal-rv   ro   @c             C   s   d d   } g  } x | |   D]| } | j  d  r | d k  rg x$ | rf | d d k rf | j   qC Wx$ | r | d	 d k r | j   qj W| j |  q Wt |  S)
Nc             S   s   g  } x t  j |  j    D]m } t j | |  } | r d | d  d  k o[ d k n rr | j d  } n
 d | } | j |  q W| j d  | S)N0r   9   *z*final)_VERSION_PARTrh   r@   _VERSION_REPLACErJ   zfillrD   )r   rT   r6   r   r   r   	get_partsC  s    &
z_legacy_key.<locals>.get_partsr   z*finalr   z*final-00000000re   re   )r|   poprD   r   )r   r   rT   r6   r   r   r   _legacy_keyB  s    r   c               @   s.   e  Z d  Z d d   Z e d d    Z d S)r   c             C   s
   t  |  S)N)r   )r   r   r   r   r   r   ]  s    zLegacyVersion.parsec             C   sO   d } xB |  j  D]7 } t | t  r | j d  r | d k  r d } Pq W| S)NFr   z*finalT)r   r   r   r|   )r   rT   r}   r   r   r   r0   `  s    zLegacyVersion.is_prereleaseN)r   r   r   r   r1   r0   r   r   r   r   r   \  s   c               @   sJ   e  Z d  Z e Z e e j  Z d e d <e j	 d  Z
 d d   Z d S)r   r   z~=z^(\d+(\.\d+)*)c             C   s   | | k  r d S|  j  j t |   } | sE t j d | |  d S| j   d } d | k rw | j d d  d } t | |  S)NFzACannot compute compatible match for version %s  and constraint %sTr   rY   r   )
numeric_rerQ   r{   loggerwarningrg   rsplitr   )r   rL   rN   rH   rj   r   r   r   r   r   s  s    	
zLegacyMatcher._match_compatibleN)r   r   r   r   r=   dictr2   rI   r   compiler   r   r   r   r   r   r   k  s
   
zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c             C   s   t  j |   S)N)
_SEMVER_RErQ   )r   r   r   r   r     s    r   c       	      C   s   d d   } t  |   } | s* t |    | j   } d d   | d  d  D \ } } } | | d d  | | d d  } } | | | f | | f S)	Nc             S   sN   |  d  k r | f } n2 |  d d   j  d  } t d d   | D  } | S)Nr   rY   c             S   s1   g  |  ]' } | j    r' | j d   n |  q S)r   )ri   r   )rW   r6   r   r   r   r     s   	 z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rh   r   )r   ZabsentrT   r   r   r   r   
make_tuple  s
    z!_semantic_key.<locals>.make_tuplec             S   s   g  |  ] } t  |   q Sr   )rV   )rW   r   r   r   r   r     s   	 z!_semantic_key.<locals>.<listcomp>r   |   r   )r   r   rg   )	r   r   rj   rg   majorminorpatchrm   buildr   r   r   _semantic_key  s    
&'r   c               @   s.   e  Z d  Z d d   Z e d d    Z d S)r	   c             C   s
   t  |  S)N)r   )r   r   r   r   r   r     s    zSemanticVersion.parsec             C   s   |  j  d d d k S)Nr   r   r   )r   )r   r   r   r   r0     s    zSemanticVersion.is_prereleaseN)r   r   r   r   r1   r0   r   r   r   r   r	     s   c               @   s   e  Z d  Z e Z d S)r
   N)r   r   r   r	   r=   r   r   r   r   r
     s   c               @   sO   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d
 d   Z d S)VersionSchemeNc             C   s   | |  _  | |  _ | |  _ d  S)N)rA   matcher	suggester)r   rA   r   r   r   r   r   r     s    		zVersionScheme.__init__c             C   s9   y |  j  j |  d } Wn t k
 r4 d } Yn X| S)NTF)r   r=   r   )r   r   rT   r   r   r   is_valid_version  s    
zVersionScheme.is_valid_versionc             C   s6   y |  j  |  d } Wn t k
 r1 d } Yn X| S)NTF)r   r   )r   r   rT   r   r   r   is_valid_matcher  s    
zVersionScheme.is_valid_matcherc             C   s   |  j  d |  S)z:
        Used for processing some metadata fields
        zdummy_name (%s))r   )r   r   r   r   r   is_valid_constraint_list  s    z&VersionScheme.is_valid_constraint_listc             C   s+   |  j  d  k r d  } n |  j  |  } | S)N)r   )r   r   rT   r   r   r   suggest  s    	zVersionScheme.suggest)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   r   
normalizedlegacyc             C   s   | S)Nr   )r   r   r   r   r   r7     s    r7   Zsemanticdefaultc             C   s$   |  t  k r t d |    t  |  S)Nzunknown scheme name: %r)_SCHEMESr>   )r?   r   r   r   r     s    )*r   loggingr   compatr   utilr   __all__	getLoggerr   r   r>   r   objectr   r2   r   rf   rr   rs   r   r   r   r   r   r   r   r   Ir   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   <module>	   s|   1d=$W.r		$