3
ûâdeÙ[  ã               @   sf  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
G dd„ deƒZG dd„ deƒZG dd„ deƒZejdƒZdd„ ZeZG dd„ deƒZdd„ ZG d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d1d2„ Zd3d4„ Zejd5ejƒZd6d6d7d6d8ddd9œZd:d;„ ZG d<d„ deƒZ G d=d	„ d	eƒZ!ejd>ejƒZ"d?d@„ Z#dAdB„ Z$G dCd
„ d
eƒZ%G dDd„ deƒZ&G dEdF„ dFeƒZ'e'eeeƒe'ee!dGdH„ ƒe'e$e&eƒdIœZ(e(dJ e(dK< dLd„ Z)dS )Mz~
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-red6nood/pip/pip/_vendor/distlib/version.pyr      s   c               @   sx   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   s@   |j ƒ  | _}| j|ƒ | _}t|tƒs,t‚t|ƒdks<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   s$   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œ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 ) ÚMatcherNc             C   s   | |k S )Nr   )ÚvÚcÚpr   r   r   Ú<lambda>T   s    zMatcher.<lambda>c             C   s   | |kS )Nr   )r3   r4   r5   r   r   r   r6   U   s    c             C   s   | |kp| |k S )Nr   )r3   r4   r5   r   r   r   r6   V   s    c             C   s   | |kp| |kS )Nr   )r3   r4   r5   r   r   r   r6   W   s    c             C   s   | |kS )Nr   )r3   r4   r5   r   r   r   r6   X   s    c             C   s   | |kS )Nr   )r3   r4   r5   r   r   r   r6   Y   s    c             C   s   | |kp| |kS )Nr   )r3   r4   r5   r   r   r   r6   [   s    c             C   s   | |kS )Nr   )r3   r4   r5   r   r   r   r6   \   s    )ú<ú>z<=z>=z==z===z~=z!=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|ƒ}|s:td| ƒ‚|j| _| jjƒ | _g }|jrÈxn|jD ]d\}}|j	dƒr¤|d
kr†td| ƒ‚|d d… d }}| j |ƒ n| j |ƒd	 }}|j
|||fƒ q`W t|ƒ| _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ÚopZvnÚprefixr   r   r   r   d   s(    


zMatcher.__init__c             C   sz   t |tƒr| j|ƒ}x`| jD ]V\}}}| jj|ƒ}t |tƒrFt| |ƒ}|sbd|| jjf }t	|ƒ‚||||ƒsdS qW d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Ú
constraintrG   ÚfÚmsgr   r   r   Úmatch�   s    



zMatcher.matchc             C   s6   d }t | jƒdkr2| jd d dkr2| jd d }|S )Nr   r   ú==ú===)rQ   rR   )r   r   )r   Úresultr   r   r   Úexact_version–   s     zMatcher.exact_versionc             C   s0   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=   rH   r   r   rP   r1   rT   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   sÆ  | j ƒ } tj| ƒ}|s"td|  ƒ‚|jƒ }tdd„ |d jdƒD ƒƒ}x(t|ƒdkrn|d dkrn|d d… }qHW |d s~d}nt|d d 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�rf }n|d t|d ƒf}|d k�r8f }nLg }	x>|jdƒD ]0}
|
j	ƒ �rddt|
ƒf}
nd|
f}
|	j
|
ƒ �qHW t|	ƒ}|�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)Ú.0r3   r   r   r   ú	<genexpr>¾   s    z_pep_440_key.<locals>.<genexpr>r   Ú.r   é   é   é   é	   é
   é   é   ÚaÚzÚ_Úfinaléÿÿÿÿrd   rd   )NN)NN)NNrd   )r`   rd   )ra   )rb   )rc   )r   ÚPEP440_VERSION_RErP   r   Úgroupsr   Úsplitr   rU   ÚisdigitrD   )r   Úmrf   ÚnumsÚepochÚpreÚpostÚdevÚlocalr   Úpartr   r   r   Ú_pep_440_key¸   sT    




rq   c               @   s6   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   s<   t |ƒ}tj|ƒ}|jƒ }tdd„ |d jdƒD ƒƒ| _|S )Nc             s   s   | ]}t |ƒV  qd S )N)rU   )rV   r3   r   r   r   rW     s    z*NormalizedVersion.parse.<locals>.<genexpr>r   rX   )Ú_normalized_keyre   rP   rf   r   rg   Ú_release_clause)r   r   rS   ri   rf   r   r   r   r   
  s
    
zNormalizedVersion.parser`   Úbr4   Úrcrn   c                s   t ‡ fdd„ˆ jD ƒƒS )Nc             3   s    | ]}|r|d  ˆ j kV  qdS )r   N)ÚPREREL_TAGS)rV   Út)r   r   r   rW     s    z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)Úanyr   )r   r   )r   r   r0     s    zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   Úsetrv   r1   r0   r   r   r   r   r   ø   s   c             C   s>   t | ƒ} t |ƒ}| |krdS | j|ƒs*dS t|ƒ}| | dkS )NTFrX   )ÚstrÚ
startswithr   )ÚxÚyÚnr   r   r   Ú_match_prefix  s    
r   c            	   @   sn   e Zd ZeZdd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d„ Zdd„ ZdS )r   Ú_match_compatibleÚ	_match_ltÚ	_match_gtÚ	_match_leÚ	_match_geÚ	_match_eqÚ_match_arbitraryÚ	_match_ne)z~=r7   r8   z<=z>=z==z===z!=c             C   sV   |rd|ko|j d }n|j d  o,|j d }|rN|jjddƒd }| j|ƒ}||fS )Nú+r   r   rd   rd   rd   )r   r   rg   r=   )r   rK   rM   rG   Zstrip_localr   r   r   r   Ú_adjust_local6  s    
zNormalizedMatcher._adjust_localc             C   sD   | j |||ƒ\}}||krdS |j}djdd„ |D ƒƒ}t||ƒ S )NFrX   c             S   s   g | ]}t |ƒ‘qS r   )rz   )rV   Úir   r   r   ú
<listcomp>I  s    z/NormalizedMatcher._match_lt.<locals>.<listcomp>)r‰   rs   Újoinr   )r   rK   rM   rG   Úrelease_clauseÚpfxr   r   r   r�   D  s    zNormalizedMatcher._match_ltc             C   sD   | j |||ƒ\}}||krdS |j}djdd„ |D ƒƒ}t||ƒ S )NFrX   c             S   s   g | ]}t |ƒ‘qS r   )rz   )rV   rŠ   r   r   r   r‹   Q  s    z/NormalizedMatcher._match_gt.<locals>.<listcomp>)r‰   rs   rŒ   r   )r   rK   rM   rG   r�   rŽ   r   r   r   r‚   L  s    zNormalizedMatcher._match_gtc             C   s   | j |||ƒ\}}||kS )N)r‰   )r   rK   rM   rG   r   r   r   rƒ   T  s    zNormalizedMatcher._match_lec             C   s   | j |||ƒ\}}||kS )N)r‰   )r   rK   rM   rG   r   r   r   r„   X  s    zNormalizedMatcher._match_gec             C   s.   | j |||ƒ\}}|s ||k}n
t||ƒ}|S )N)r‰   r   )r   rK   rM   rG   rS   r   r   r   r…   \  s
    

zNormalizedMatcher._match_eqc             C   s   t |ƒt |ƒkS )N)rz   )r   rK   rM   rG   r   r   r   r†   d  s    z"NormalizedMatcher._match_arbitraryc             C   s0   | j |||ƒ\}}|s ||k}nt||ƒ }|S )N)r‰   r   )r   rK   rM   rG   rS   r   r   r   r‡   g  s
    
zNormalizedMatcher._match_nec             C   sf   | j |||ƒ\}}||krdS ||k r*dS |j}t|ƒdkrH|d d… }djdd„ |D ƒƒ}t||ƒS )NTFr   rX   c             S   s   g | ]}t |ƒ‘qS r   )rz   )rV   rŠ   r   r   r   r‹   z  s    z7NormalizedMatcher._match_compatible.<locals>.<listcomp>rd   )r‰   rs   r   rŒ   r   )r   rK   rM   rG   r�   rŽ   r   r   r   r€   o  s    z#NormalizedMatcher._match_compatibleN)r   r   r   r   r=   rH   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,}rX   z\b(alfa|apha)\bÚalphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$Úbetaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c             C   sZ  | j ƒ jƒ }xtD ]\}}|j||ƒ}qW |s2d}tj|ƒ}|sJd}|}n®|jƒ d jdƒ}dd„ |D ƒ}xt|ƒdk r„|j	dƒ qlW t|ƒdkr¤||j
ƒ d… }n8djdd„ |dd… D ƒƒ||j
ƒ d…  }|dd… }djd	d„ |D ƒƒ}|j ƒ }|�rxtD ]\}}|j||ƒ}�qW |�s*|}nd
|k�r8dnd}|| | }t|ƒ�sVd}|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   rX   c             S   s   g | ]}t |ƒ‘qS r   )rU   )rV   rŠ   r   r   r   r‹   ª  s    z-_suggest_semantic_version.<locals>.<listcomp>é   Nc             S   s   g | ]}t |ƒ‘qS r   )rz   )rV   rŠ   r   r   r   r‹   °  s    c             S   s   g | ]}t |ƒ‘qS r   )rz   )rV   rŠ   r   r   r   r‹   ²  s    rn   ú-rˆ   )r   r@   Ú_REPLACEMENTSÚsubÚ_NUMERIC_PREFIXrP   rf   rg   r   rD   ÚendrŒ   Ú_SUFFIX_REPLACEMENTSÚ	is_semver)r   rS   ÚpatÚreplri   rG   ÚsuffixÚsepr   r   r   Ú_suggest_semantic_version–  s:    
,
rž   c             C   sl  yt | ƒ | S  tk
r    Y nX | jƒ }xdBD ]\}}|j||ƒ}q0W t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d1d2|ƒ}yt |ƒ W n tk
�rf   d!}Y n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.
    ú-alphar`   ú-betart   r�   r‘   ru   r4   ú-finalr�   ú-preú-releaseú.releaseú-stablerˆ   rX   rb   ú ú.finalrc   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?z\1r3   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Ÿ   r`   ©r    rt   ©r�   r`   ©r‘   rt   ©ru   r4   ©r¡   r�   ©r¢   r4   ©r£   r�   ©r¤   r�   ©r¥   r�   ©rˆ   rX   ©rb   rX   ©r¦   r�   ©r§   r�   ©rc   r�   )r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   r´   rµ   r¶   )rr   r   r@   ÚreplaceÚrer•   r{   )r   ÚrsÚorigr›   r   r   r   Ú_suggest_normalized_versionÄ  sH        	
r»   z([a-z]+|\d+|[\.-])r4   zfinal-ú@)rl   Úpreviewr“   ru   rn   r�   rX   c             C   s~   dd„ }g }xh|| ƒD ]\}|j dƒrh|dk rJx|rH|d dkrH|jƒ  q.W x|rf|d	 dkrf|jƒ  qLW |j|ƒ qW t|ƒS )
Nc             S   sx   g }xdt j| jƒ ƒD ]R}tj||ƒ}|rd|d d…   koBdkn  rT|jdƒ}nd| }|j|ƒ qW |jdƒ |S )NÚ0r   Ú9é   Ú*z*final)Ú_VERSION_PARTrg   r@   Ú_VERSION_REPLACErI   ÚzfillrD   )r   rS   r5   r   r   r   Ú	get_partsC  s     
z_legacy_key.<locals>.get_partsrÁ   z*finalr   z*final-Ú00000000rd   rd   )r{   ÚpoprD   r   )r   rÅ   rS   r5   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   s:   d}x0| j D ]&}t|tƒr|jdƒr|dk rd}P qW |S )NFrÁ   z*finalT)r   r   r   r{   )r   rS   r|   r   r   r   r0   `  s    zLegacyVersion.is_prereleaseN)r   r   r   r   r1   r0   r   r   r   r   r   \  s   c               @   s4   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|ƒƒ}|s2tjd||ƒ dS |jƒ d }d|krV|jddƒd }t||ƒS )NFzACannot compute compatible match for version %s  and constraint %sTr   rX   r   )Ú
numeric_rerP   rz   ÚloggerÚwarningrf   Úrsplitr   )r   rK   rM   rG   ri   r   r   r   r   r€   s  s    zLegacyMatcher._match_compatibleN)r   r   r   r   r=   Údictr2   rH   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_RErP   )r   r   r   r   r™   ‰  s    r™   c       	      C   sn   dd„ }t | ƒ}|st| ƒ‚|jƒ }dd„ |d d… D ƒ\}}}||d dƒ||d dƒ }}|||f||fS )	Nc             S   s8   | d kr|f}n$| dd … j dƒ}tdd„ |D ƒƒ}|S )Nr   rX   c             S   s"   g | ]}|j ƒ r|jd ƒn|‘qS )rÀ   )rh   rÄ   )rV   r5   r   r   r   r‹   •  s    z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rg   r   )r   ZabsentrS   r   r   r   r   Ú
make_tupleŽ  s
    z!_semantic_key.<locals>.make_tuplec             S   s   g | ]}t |ƒ‘qS r   )rU   )rV   rŠ   r   r   r   r‹   œ  s    z!_semantic_key.<locals>.<listcomp>r’   ú|é   rÁ   )r™   r   rf   )	r   rÐ   ri   rf   ÚmajorÚminorÚpatchrl   Ú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               @   s6   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   s2   y| j j|ƒ d}W n tk
r,   d}Y nX |S )NTF)rÙ   r=   r   )r   r   rS   r   r   r   Úis_valid_versionµ  s    
zVersionScheme.is_valid_versionc             C   s0   y| j |ƒ d}W n tk
r*   d}Y nX |S )NTF)rÙ   r   )r   r   rS   r   r   r   Úis_valid_matcher½  s    

zVersionScheme.is_valid_matcherc             C   s$   |j dƒr|dd… }| jd| ƒS )z:
        Used for processing some metadata fields
        ú,Nr   zdummy_name (%s)rd   )rC   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   rS   r   r   r   ÚsuggestÎ  s    

zVersionScheme.suggest)N)r   r   r   r   rÛ   rÜ   rÞ   rß   r   r   r   r   rØ   ¯  s
   
	rØ   c             C   s   |S )Nr   )r   r   r   r   r   r6   Ø  s    r6   )Ú
normalizedÚlegacyZsemanticrà   Ú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Î   re   rq   rr   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	'
