
^V\                 @   s  d  Z  d d l Z d d l 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 d/  Z d0 d1   Z d2 d3   Z e j d4 e j  Z i d5 d6 6d5 d7 6d8 d9 6d5 d: 6d; d< 6d d 6d d$ 6Z d= d>   Z Gd? d   d e  Z Gd@ d   d e  Z e j dA e j  Z  dB dC   Z! dD dE   Z" GdF d	   d	 e  Z# GdG d
   d
 e  Z$ GdH dI   dI e  Z% i e% e e e  dJ 6e% e e dK dL    dM 6e% e" e$ e  dN 6Z& e& dJ e& dO <dP d   Z' d S)Qz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
    N   )string_types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-9m6vxulb/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   s5   t  |   t  |  k r1 t d |  | f   n  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__/   s    zVersion.__ne__c             C   s   |  j  |  |  j | j k  S)N)r#   r   )r   r"   r   r   r   __lt__2   s    zVersion.__lt__c             C   s   |  j  |  p |  j |  S)N)r&   r$   )r   r"   r   r   r   __gt__6   s    zVersion.__gt__c             C   s   |  j  |  p |  j |  S)N)r&   r$   )r   r"   r   r   r   __le__9   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__@   s    zVersion.__hash__c             C   s   d |  j  j |  j f S)Nz%s('%s'))	__class__r   r   )r   r   r   r   __repr__C   s    zVersion.__repr__c             C   s   |  j  S)N)r   )r   r   r   r   __str__F   s    zVersion.__str__c             C   s   t  d   d  S)NzPlease implement in subclasses.)r   )r   r   r   r   is_prereleaseI   s    zVersion.is_prereleaseN)r   r   r   r   r   r#   r$   r%   r&   r'   r(   r)   r+   r-   r.   propertyr/   r   r   r   r   r      s   r   c               @   s#  e  Z d  Z d Z e j d  Z e j d  Z e j d  Z i d d   d 6d d   d	 6d
 d   d 6d d   d 6d d   d 6d d   d 6d d   d 6d d   d 6Z	 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)(MatcherNz^(\w[\s\w'.-]*)(\((.*)\))?z'^(<=|>=|<|>|!=|={2,3}|~=)?\s*([^\s,]+)$z^\d+(\.\d+)*$c             C   s
   |  | k  S)Nr   )vcpr   r   r   <lambda>W   s    zMatcher.<lambda><c             C   s
   |  | k S)Nr   )r2   r3   r4   r   r   r   r5   X   s    >c             C   s   |  | k p |  | k  S)Nr   )r2   r3   r4   r   r   r   r5   Y   s    z<=c             C   s   |  | k p |  | k S)Nr   )r2   r3   r4   r   r   r   r5   Z   s    z>=c             C   s
   |  | k S)Nr   )r2   r3   r4   r   r   r   r5   [   s    z==c             C   s
   |  | k S)Nr   )r2   r3   r4   r   r   r   r5   \   s    z===c             C   s   |  | k p |  | k S)Nr   )r2   r3   r4   r   r   r   r5   ^   s    z~=c             C   s
   |  | k S)Nr   )r2   r3   r4   r   r   r   r5   _   s    z!=c       
      C   s  |  j  d  k r t d   n  | j   |  _ } |  j j |  } | s\ t d |   n  | j d  } | d j   |  _ |  j j   |  _	 g  } | d rd d   | d j
 d  D } x | D] } |  j j |  } | s t d	 | | f   n  | j   } | d pd
 } | d } | j d  r| d k rRt d |   n  | d  d  d } }	 |  j j |  s|  j  |  qn |  j  |  d } }	 | j | | |	 f  q Wn  t |  |  _ d  S)NzPlease specify a version classzNot valid: %r r      c             S   s   g  |  ] } | j     q Sr   )r   ).0r3   r   r   r   
<listcomp>n   s   	 z$Matcher.__init__.<locals>.<listcomp>,zInvalid %r in %rz~=r   z.*==!=z#'.*' not allowed for %r constraintsTF)r=   r>   )version_class
ValueErrorr   r   dist_rematchgroupsnamelowerkeysplitcomp_reendswithnum_reappendr   r   )
r   r   mrD   Zclistconstraintsr3   opvnprefixr   r   r   r   b   s:    
 
zMatcher.__init__c             C   s   t  | t  r! |  j |  } n  x |  j D] \ } } } |  j j |  } t  | t  rm t |  |  } n  | s d | |  j j f } t	 |   n  | | | |  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: Strring or :class:`Version` instance.
        z%r not implemented for %sFT)
r   r   r@   r   
_operatorsgetgetattrr,   r   r   )r   versionoperator
constraintrQ   fmsgr   r   r   rC      s    zMatcher.matchc             C   sJ   d  } t  |  j  d k rF |  j d d d k rF |  j d d } n  | S)Nr   r   =====)rZ   r[   )r   r   )r   resultr   r   r   exact_version   s    ,zMatcher.exact_versionc             C   sG   t  |   t  |  k s* |  j | j k rC t d |  | f   n  d  S)Nzcannot compare %s and %s)r    rE   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#   rG   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*   rG   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@   recompilerB   rI   rK   rR   r   rC   r0   r]   r#   r$   r%   r+   r-   r.   r   r   r   r   r1   N   s,   %r1   zk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c             C   s]  |  j    }  t j |   } | s4 t d |    n  | j   } t d d   | d j d  D  } x6 t |  d k r | d d k r | d  d  } qi 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 ro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 } q)d } n  | s8d } n  | sGd } n  | | | | | | f S)NzNot a valid version: %sc             s   s   |  ] } t  |  Vq d  S)N)int)r:   r2   r   r   r   	<genexpr>   s    z_pep_440_key.<locals>.<genexpr>r   .r            	   
         az_finalrn   )NN)NN)NNrn   )rj   rn   )rk   )rl   )zfinal)r   PEP440_VERSION_RErC   r
   rD   r   rH   r   r`   isdigitrL   )r   rM   rD   Znumsepochprepostdevlocalr   partr   r   r   _pep_440_key   sT    &%
	
								rw   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           # mininum 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)r`   )r:   r2   r   r   r   ra     s    z*NormalizedVersion.parse.<locals>.<genexpr>r   rb   )_normalized_keyro   rC   rD   r   rH   _release_clause)r   r   r\   rM   rD   r   r   r   r     s
    )zNormalizedVersion.parserj   br3   rcrt   c                s    t    f d d     j D  S)Nc             3   s(   |  ] } | r | d    j  k Vq d S)r   N)PREREL_TAGS)r:   t)r   r   r   ra     s    z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)anyr   )r   r   )r   r   r/     s    zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   setr|   r0   r/   r   r   r   r   r      s   c             C   sU   t  |   }  t  |  } |  | k r( d S|  j |  s; d St |  } |  | d k S)NTFrb   )str
startswithr   )xynr   r   r   _match_prefix"  s    r   c               @   s   e  Z d  Z e Z i d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6Z 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   _match_compatiblez~=	_match_ltr6   	_match_gtr7   	_match_lez<=	_match_gez>=	_match_eqz==_match_arbitraryz===	_match_nez!=c             C   sx   | r" d | k o | j  d } n | j  d o: | j  d } | rn | j j d d  d } |  j |  } n  | | f S)N+r   r   rn   rn   rn   )r   r   rH   r@   )r   rU   rW   rQ   Zstrip_localr   r   r   r   _adjust_local<  s    zNormalizedMatcher._adjust_localc             C   s^   |  j  | | |  \ } } | | k r+ d S| j } d j d d   | D  } t | |  S)NFrb   c             S   s   g  |  ] } t  |   q Sr   )r   )r:   ir   r   r   r;   O  s   	 z/NormalizedMatcher._match_lt.<locals>.<listcomp>)r   ry   joinr   )r   rU   rW   rQ   release_clausepfxr   r   r   r   J  s    	zNormalizedMatcher._match_ltc             C   s^   |  j  | | |  \ } } | | k r+ d S| j } d j d d   | D  } t | |  S)NFrb   c             S   s   g  |  ] } t  |   q Sr   )r   )r:   r   r   r   r   r;   W  s   	 z/NormalizedMatcher._match_gt.<locals>.<listcomp>)r   ry   r   r   )r   rU   rW   rQ   r   r   r   r   r   r   R  s    	zNormalizedMatcher._match_gtc             C   s%   |  j  | | |  \ } } | | k S)N)r   )r   rU   rW   rQ   r   r   r   r   Z  s    zNormalizedMatcher._match_lec             C   s%   |  j  | | |  \ } } | | k S)N)r   )r   rU   rW   rQ   r   r   r   r   ^  s    zNormalizedMatcher._match_gec             C   sC   |  j  | | |  \ } } | s0 | | k } n t | |  } | S)N)r   r   )r   rU   rW   rQ   r\   r   r   r   r   b  s
    zNormalizedMatcher._match_eqc             C   s   t  |  t  |  k S)N)r   )r   rU   rW   rQ   r   r   r   r   j  s    z"NormalizedMatcher._match_arbitraryc             C   sD   |  j  | | |  \ } } | s0 | | k } n t | |  } | S)N)r   r   )r   rU   rW   rQ   r\   r   r   r   r   m  s
    zNormalizedMatcher._match_nec             C   s   |  j  | | |  \ } } | | k r+ d S| | k  r; d S| j } t |  d k ri | d  d  } n  d j d d   | D  } t | |  S)NTFr   rb   c             S   s   g  |  ] } t  |   q Sr   )r   )r:   r   r   r   r   r;     s   	 z7NormalizedMatcher._match_compatible.<locals>.<listcomp>rn   )r   ry   r   r   r   )r   rU   rW   rQ   r   r   r   r   r   r   u  s    	z#NormalizedMatcher._match_compatibleN)r   r   r   r   r@   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   -  s&   
z[.+-]$r8   z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$z\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rb   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| sJ d } n  t j |  } | sn 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 | |  } qjWn  | s| } n& d
 | k rd n d } | | | } t |  sd } n  | 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   rb   c             S   s   g  |  ] } t  |   q Sr   )r`   )r:   r   r   r   r   r;     s   	 z-_suggest_semantic_version.<locals>.<listcomp>   Nc             S   s   g  |  ] } t  |   q Sr   )r   )r:   r   r   r   r   r;     s   	 c             S   s   g  |  ] } t  |   q Sr   )r   )r:   r   r   r   r   r;     s   	 rt   -r   )r   rF   _REPLACEMENTSsub_NUMERIC_PREFIXrC   rD   rH   r   rL   endr   _SUFFIX_REPLACEMENTS	is_semver)r   r\   patreplrM   rQ   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!  } n  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.
    -alpharj   -betarz   r   r   r{   r3   -finalr8   -pre-release.release-stabler   rb   rl    .finalrm   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?z\1r2   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   rj   r   rz   zalpharj   zbetarz   zrcr3   r   r8   r   r3   r   r8   r   r8   r   r8   r   rb   rl   rb   r   r8   r   r8   zfinalr8   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rx   r
   rF   replacer^   r   r   )r   rsorigr   r   r   r   _suggest_normalized_version  sH    
    	r   z([a-z]+|\d+|[\.-])r3   rr   previewzfinal-r   r{   @rt   c             C   s   d d   } g  } x | |   D] } | j  d  r | d k  rj x' | rf | d d k rf | j   qC Wn  x' | r | d	 d k r | j   qm Wn  | j |  q Wt |  S)
Nc             S   s   g  } x t  j |  j    D]p } t j | |  } | r d | d  d  k o[ d k n rr | j d  } n
 d | } | j |  q q W| j d  | S)N0r   9   *z*final)_VERSION_PARTrH   rF   _VERSION_REPLACErS   zfillrL   )r   r\   r4   r   r   r   	get_partsI  s    &
z_legacy_key.<locals>.get_partsr   z*finalr   z*final-00000000rn   rn   )r   poprL   r   )r   r   r\   r4   r   r   r   _legacy_keyH  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   c  s    zLegacyVersion.parsec             C   sR   d } xE |  j  D]: } t | t  r | j d  r | d k  r d } Pq q W| S)NFr   z*finalT)r   r   r   r   )r   r\   r   r   r   r   r/   f  s    zLegacyVersion.is_prereleaseN)r   r   r   r   r0   r/   r   r   r   r   r   b  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 rz | j d d  d } n  t | |  S)NFzACannot compute compatible match for version %s  and constraint %sTr   rb   r   )
numeric_rerC   r   loggerwarningrD   rsplitr   )r   rU   rW   rQ   rM   r   r   r   r   r   y  s    	
zLegacyMatcher._match_compatibleN)r   r   r   r   r@   dictr1   rR   r^   r_   r   r   r   r   r   r   r   q  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_RErC   )r   r   r   r   r     s    r   c       	      C   s   d d   } t  |   } | s- t |    n  | 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   rb   c             S   s1   g  |  ]' } | j    r' | j d   n |  q S)r   )rp   r   )r:   r4   r   r   r   r;     s   	 z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rH   r   )r   Zabsentr\   r   r   r   r   
make_tuple  s
    z!_semantic_key.<locals>.make_tuplec             S   s   g  |  ] } t  |   q Sr   )r`   )r:   r   r   r   r   r;     s   	 z!_semantic_key.<locals>.<listcomp>r   |   r   )r   r
   rD   )	r   r   rM   rD   majorminorpatchrr   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   r/     s    zSemanticVersion.is_prereleaseN)r   r   r   r   r0   r/   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)rG   matcher	suggester)r   rG   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   r\   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   r\   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   r\   r   r   r   suggest  s    	zVersionScheme.suggest)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   r   
normalizedc             C   s   | S)Nr   )r   r   r   r   r   r5     s    r5   legacyZsemanticdefaultc             C   s'   |  t  k r t d |    n  t  |  S)Nzunknown scheme name: %r)_SCHEMESrA   )rE   r   r   r   r     s    )(r   loggingr^   compatr   __all__	getLoggerr   r   rA   r
   objectr   r1   r_   ro   rw   rx   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k=$W.r
		#	
	