o
    e                     @   s\  d dl Z d dlZd dlZdd ZG dd deZe jG dd deZe jG dd	 d	eZG d
d deZ	G dd deZ
dd Zdd Zdd ZdZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZejG d%d& d&eZG d'd( d(eZeZejG d)d* d*eZdS )+    Nc                 C   s    | o| d dko|   o| dkS )Nr   0)isdigitvalue r   ED:\Projects\ConvertPro\env\Lib\site-packages\semantic_version/base.py_has_leading_zero
   s   
r   c                   @       e Zd Zg Zdd Zdd ZdS )MaxIdentifierc                 C      dS )NzMaxIdentifier()r   selfr   r   r   __repr__      zMaxIdentifier.__repr__c                 C      t || jS N
isinstance	__class__r   otherr   r   r   __eq__      zMaxIdentifier.__eq__N)__name__
__module____qualname__	__slots__r   r   r   r   r   r   r
      s    r
   c                   @   2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )NumericIdentifierr   c                 C   s   t || _d S r   )intr   r   r   r   r   r   __init__      zNumericIdentifier.__init__c                 C   
   d| j  S )NzNumericIdentifier(%r)r   r   r   r   r   r   "      
zNumericIdentifier.__repr__c                 C      t |tr| j|jkS tS r   )r   r   r   NotImplementedr   r   r   r   r   %      
zNumericIdentifier.__eq__c                 C   s6   t |trdS t |trdS t |tr| j|jk S tS NT)r   r
   AlphaIdentifierr   r   r&   r   r   r   r   __lt__*      


zNumericIdentifier.__lt__Nr   r   r   r   r!   r   r   r*   r   r   r   r   r          r   c                   @   r   )r)   r   c                 C   s   | d| _d S )Nascii)encoder   r    r   r   r   r!   9      zAlphaIdentifier.__init__c                 C   r#   )NzAlphaIdentifier(%r)r   r   r   r   r   r   <   r$   zAlphaIdentifier.__repr__c                 C   r%   r   )r   r)   r   r&   r   r   r   r   r   ?   r'   zAlphaIdentifier.__eq__c                 C   s6   t |trdS t |trdS t |tr| j|jk S tS )NTF)r   r
   r   r)   r   r&   r   r   r   r   r*   D   r+   zAlphaIdentifier.__lt__Nr,   r   r   r   r   r)   5   r-   r)   c                   @   s  e Zd ZedZedZ							d4ddZed5ddZ	d	d
 Z
dd Zdd Zd6ddZed5ddZed7ddZed5ddZedd Zdd Zdd Zdd Zd d! Zd5d"d#Zed$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS )8VersionzB^(\d+)\.(\d+)\.(\d+)(?:-([0-9a-zA-Z.-]+))?(?:\+([0-9a-zA-Z.-]+))?$zL^(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:-([0-9a-zA-Z.-]*))?(?:\+([0-9a-zA-Z.-]*))?$NFc           
      C   s   |r
t jdtdd |d u}||  u o&|  u o&|  u o&|  u o&d u n   }	||	A s2td|r@| ||\}}}}}nt|pDd}|sNt|pLd}| |||||| || _|| _|| _	|| _
|| _|| _| jdd| _| jdd| _d S )	NzIPartial versions will be removed in 3.0; use SimpleSpec('1.x.x') instead.   
stacklevelz6Call either Version('1.2.3') or Version(major=1, ...).r   F)
with_buildT)warningswarnDeprecationWarning
ValueErrorparsetuple_validate_kwargsmajorminorpatch
prereleasebuildpartial_build_precedence_key_cmp_precedence_key_sort_precedence_key)
r   version_stringr=   r>   r?   r@   rA   rB   Zhas_textZ	has_partsr   r   r   r!   T   s0   	8zVersion.__init__c                 C   s   |d u r|r|S t |S r   )r   )clsr   
allow_noner   r   r   _coerce   s   zVersion._coercec                 C   sN   | j r| j| j  krdkrn n
t| jdd| jdS t| jd dd| jdS Nr   r=   r>   r?   rB      )r@   r>   r?   r1   r=   rB   r   r   r   r   
next_major   s   "zVersion.next_majorc                 C   s@   | j r| jdkrt| j| jd| jdS t| j| jd d| jdS rJ   )r@   r?   r1   r=   r>   rB   r   r   r   r   
next_minor   s   zVersion.next_minorc                 C   s:   | j rt| j| j| j| jdS t| j| j| jd | jdS )NrK   rL   )r@   r1   r=   r>   r?   rB   r   r   r   r   
next_patch   s   zVersion.next_patchr?   c                 C   s   |dkr| S |dkrt | j| j| j| j| jdS |dkr(t | j| j| j| jdS |dkr<t | j| j| jr6dnd| jdS |d	krTt | j| jrHdnd| jrNdnd| jdS td
| )z@Return a new Version object, truncated up to the selected level.rA   r@   )r=   r>   r?   r@   rB   r?   rK   r>   Nr   r=   zInvalid truncation level `%s`.)r1   r=   r>   r?   r@   rB   r9   )r   levelr   r   r   truncate   s@   zVersion.truncatec           	      C   s  t d}||}|std| |d|  }|s.|ddk r.|d7 }|ddk s#ddd |dD }| t|krIt	||d	S || d }t 
d
d|}|d dkrgd}|dd }n@|d dkrvd}|dd }n1|d dkr|dd }d|v r|dd\}}n|d}}nd|v r|dd\}}n|d}}|dd}|rd||f }|rd||f }| ||d	S )a  Coerce an arbitrary version string into a semver-compatible one.

        The rule is:
        - If not enough components, fill minor/patch with zeroes; unless
          partial=True
        - If more than 3 dot-separated components, extra components are "build"
          data. If some "build" data already appeared, append it to the
          extra components

        Examples:
            >>> Version.coerce('0.1')
            Version(0, 1, 0)
            >>> Version.coerce('0.1.2.3')
            Version(0, 1, 2, (), ('3',))
            >>> Version.coerce('0.1.2.3+4')
            Version(0, 1, 2, (), ('3', '4'))
            >>> Version.coerce('0.1+2-3+4_5')
            Version(0, 1, 0, (), ('2-3', '4-5'))
        z^\d+(?:\.\d+(?:\.\d+)?)?z.Version string lacks a numerical component: %rN.r2   z.0c                 s   s    | ]
}| d p
d V  qdS )r   N)lstrip.0partr   r   r   	<genexpr>   s
    
z!Version.coerce.<locals>.<genexpr>rB   z[^a-zA-Z0-9+.-]-r   + rL   %s-%s%s+%s)recompilematchr9   endcountjoinsplitlenr1   subreplace)	rG   rF   rB   Zbase_rer`   versionrestr@   rA   r   r   r   coerce   sP   



zVersion.coercec                 C   sL  |st d| |r| j}n| j}||}|st d| | \}}}}	}
t|r1t d| t|r;t d| t|rEt d| t|}| ||}| ||}|	du ri|rf|
du rf|||ddfS d}	n|	dkrpd}	nt|		d	}	| j
|	d
d |
du r|rd}
nd}
n|
dkrd}
nt|
	d	}
| j
|
dd ||||	|
fS )ah  Parse a version string into a tuple of components:
           (major, minor, patch, prerelease, build).

        Args:
            version_string (str), the version string to parse
            partial (bool), whether to accept incomplete input
            coerce (bool), whether to try to map the passed in string into a
                valid Version.
        z Invalid empty version string: %rzInvalid version string: %rz!Invalid leading zero in major: %rz!Invalid leading zero in minor: %rz!Invalid leading zero in patch: %rNr   r[   rR   Fallow_leading_zeroesT)r9   partial_version_re
version_rer`   groupsr   r   rI   r;   rd   _validate_identifiers)rG   rF   rB   rj   rn   r`   r=   r>   r?   r@   rA   r   r   r   r:   )  sF   
zVersion.parsec                 C   sT   |D ]%}|st d|d|f |d dkr'| r'|dkr'|s't d| qd S )Nz!Invalid empty identifier %r in %rrR   r   r   z%Invalid leading zero in identifier %r)r9   rc   r   )rG   Zidentifiersrl   itemr   r   r   rp   f  s    zVersion._validate_identifiersc                 C   s   |t |ks"|| ||ks"|| ||ks"|d u r|r"|d u r.|s.td||||||f |d ur9| j|dd |d urF| j|dd d S d S )Nz[Invalid kwargs to Version(major=%r, minor=%r, patch=%r, prerelease=%r, build=%r, partial=%rFrk   T)r   rI   r9   rp   )rG   r=   r>   r?   r@   rA   rB   r   r   r   r<   r  s    zVersion._validate_kwargsc                 C      t | j| j| j| j| jfS r   )iterr=   r>   r?   r@   rA   r   r   r   r   __iter__  s   zVersion.__iter__c                 C   s   d| j  }| jd urd|| jf }| jd urd|| jf }| js-| jr7| jdkr7| jd u r7d|d| jf }| jsB| jrL| jdkrLd|d| jf }|S )Nz%dz%s.%dr   r\   rR   r]   )r=   r>   r?   r@   rB   rA   rc   r   rh   r   r   r   __str__  s   


 zVersion.__str__c                 C   s$   d| j jt| | jrdf S df S )Nz%s(%r%s)z, partial=Truer[   )r   r   strrB   r   r   r   r   r     s   zVersion.__repr__c                 C   rr   r   )hashr=   r>   r?   r@   rA   r   r   r   r   __hash__  s   zVersion.__hash__c                 C   sf   | j rtdd | j D }nt f}|s| j| j| j|fS tdd | jp%dD }| j| j| j||fS )zBuild a precedence key.

        The "build" component should only be used when sorting an iterable
        of versions.
        c                 s   (    | ]}|  rt|nt|V  qd S r   r   r   r)   rT   r   r   r   rW     
    
z0Version._build_precedence_key.<locals>.<genexpr>c                 s   rz   r   r{   rT   r   r   r   rW     r|   r   )r@   r;   r
   r=   r>   r?   rA   )r   r5   Zprerelease_keyZ	build_keyr   r   r   rC     s*   
zVersion._build_precedence_keyc                 C      | j S r   )rE   r   r   r   r   precedence_key  s   zVersion.precedence_keyc                 C   s8   t || jstS | |k rdS | |krdS | |krdS tS )NrL   r   )r   r   r&   r   r   r   r   __cmp__  s   zVersion.__cmp__c                 C   s\   t || jstS | j|jko-| j|jko-| j|jko-| jpd|jp"dko-| jp(d|jp,dkS )Nr   )r   r   r&   r=   r>   r?   r@   rA   r   r   r   r   r     s   

zVersion.__eq__c                 C   s    t || jstS t| t|kS r   )r   r   r&   r;   r   r   r   r   __ne__  s   zVersion.__ne__c                 C   s   t || jstS | j|jk S r   r   r   r&   rD   r   r   r   r   r*        zVersion.__lt__c                 C   s   t || jstS | j|jkS r   r   r   r   r   r   __le__  r   zVersion.__le__c                 C   s   t || jstS | j|jkS r   r   r   r   r   r   __gt__  r   zVersion.__gt__c                 C   s   t || jstS | j|jkS r   r   r   r   r   r   __ge__  r   zVersion.__ge__)NNNNNNF)F)r?   )FF) r   r   r   r^   r_   rn   rm   r!   classmethodrI   rM   rN   rO   rQ   rj   r:   rp   r<   rt   rv   r   ry   rC   propertyr~   r   r   r   r*   r   r   r   r   r   r   r   r1   O   sN    


+
$O<

%
r1   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZeee	eiZedZd!ddZedd Zedd Zdd Zdd Zdd Zdd Zdd Zd S )"SpecItemzA requirement specification.*<<====r[   >=>!=^~~=z$^(<|<=||=|==|>=|>|!=|\^|~|~=)(\d.*)$Tc                 C   s>   |r
t jdtdd | |\}}|| _|| _t|j| _d S )Nz,The `SpecItem` class will be removed in 3.0.r2   r3   )	r6   r7   r8   r:   kindspecSpecclause_clause)r   requirement_string_warnr   r   r   r   r   r!     s   zSpecItem.__init__c                 C   s   |st d| |dkr| jdfS | j|}|st d| | \}}|| jv r/| j| }t|dd}|jd urH|| j| j	fvrHt d| ||fS )Nz+Invalid empty requirement specification: %rr   r[   z%Invalid requirement specification: %rTrX   zEInvalid requirement specification %r: build numbers have no ordering.)
r9   KIND_ANYre_specr`   ro   KIND_ALIASESr1   rA   
KIND_EQUALKIND_NEQ)rG   r   r`   r   rh   r   r   r   r   r:     s$   


zSpecItem.parsec                 C   sR   |t  kr| dddS |t kr| dddS t|tr'| d|j|jf ddS d S )Nr   F)r   z<0.0.0-%s%s)AlwaysNeverr   Rangeoperatortarget)rG   Zmatcherr   r   r   from_matcher8  s   


zSpecItem.from_matcherc                 C      | j |S r   )r   r`   ru   r   r   r   r`   A  r   zSpecItem.matchc                 C      d| j | jf S Nr   r   r   r   r   r   r   rv   D  r0   zSpecItem.__str__c                 C   r   )Nz<SpecItem: %s %r>r   r   r   r   r   r   G  r0   zSpecItem.__repr__c                 C   s&   t |tstS | j|jko| j|jkS r   )r   r   r&   r   r   r   r   r   r   r   J  s   
zSpecItem.__eq__c                 C   s   t | j| jfS r   )rx   r   r   r   r   r   r   ry   O  r0   zSpecItem.__hash__N)T)r   r   r   __doc__r   ZKIND_LTZKIND_LTEr   ZKIND_SHORTEQZ
KIND_EMPTYZKIND_GTEZKIND_GTr   Z
KIND_CARETZ
KIND_TILDEZKIND_COMPATIBLEr   r^   r_   r   r!   r   r:   r   r`   rv   r   r   ry   r   r   r   r   r     s8    



r   c                 C   s   t | t |S r   )r1   r   )v1v2r   r   r   compareS     r   c                 C   s   t | t|S r   )r   r`   r1   )r   rh   r   r   r   r`   W  r   r`   c                 C   s&   zt |  W dS  ty   Y dS w )z;Validates a version string againt the SemVer specification.TF)r1   r:   r9   )rF   r   r   r   validate[  s   
r   simplec                       s   e Zd ZdZi Zedd Z fddZeef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d Zdd Z  ZS )BaseSpeca'  A specification of compatible versions.

    Usage:
    >>> Spec('>=1.0.0', syntax='npm')

    A version matches a specification if it matches any
    of the clauses of that specification.

    Internally, a Spec is AnyOf(
        AllOf(Matcher, Matcher, Matcher),
        AllOf(...),
    )
    c                 C   sF   |j }|d u rtd|| jv rtd|| j| |f || j|< |S )Nz(A Spec needs its SYNTAX field to be set.zDuplicate syntax for %s: %r, %r)SYNTAXr9   SYNTAXES)rG   subclasssyntaxr   r   r   register_syntaxw  s   

zBaseSpec.register_syntaxc                    s$   t t|   || _| || _d S r   )superr   r!   
expression_parse_to_clauser   )r   r   r   r   r   r!     s   zBaseSpec.__init__c                 C   s   | j | |S )z>Convert a syntax-specific expression into a BaseSpec instance.)r   )rG   r   r   r   r   r   r:     s   zBaseSpec.parsec                 C      t  )z#Converts an expression to a clause.NotImplementedErrorrG   r   r   r   r   r     s   zBaseSpec._parse_to_clausec                 c   s     |D ]
}|  |r|V  qdS )z3Filter an iterable of versions satisfying the Spec.Nr`   )r   versionsrh   r   r   r   filter  s   
zBaseSpec.filterc                 C   r   )z+Check whether a Version satisfies the Spec.)r   r`   ru   r   r   r   r`        zBaseSpec.matchc                 C   s   t | |}|rt|S dS )z@Select the best compatible version among an iterable of options.N)listr   max)r   r   optionsr   r   r   select  s   zBaseSpec.selectc                 C   s   t |tr
| |S dS )zWhether `version in self`.F)r   r1   r`   ru   r   r   r   __contains__  s   

zBaseSpec.__contains__c                 C   s   t || jstS | j|jkS r   )r   r   r&   r   r   r   r   r   r     s   zBaseSpec.__eq__c                 C   
   t | jS r   )rx   r   r   r   r   r   ry     r$   zBaseSpec.__hash__c                 C   r}   r   )r   r   r   r   r   rv        zBaseSpec.__str__c                 C   s   d| j j| jf S )Nz<%s: %r>)r   r   r   r   r   r   r   r     r   zBaseSpec.__repr__)r   r   r   r   r   r   r   r!   DEFAULT_SYNTAXr:   r   r   r`   r   r   r   ry   rv   r   __classcell__r   r   r   r   r   g  s$    

r   c                   @   sR   e Zd Zg Zdd Zdd Zdd Zdd Zdd
dZdd Z	dd Z
dd ZdS )Clausec                 C   r   r   r   ru   r   r   r   r`     r   zClause.matchc                 C   r   r   r   r   r   r   r   __and__  r   zClause.__and__c                 C   r   r   r   r   r   r   r   __or__  r   zClause.__or__c                 C   r   r   r   r   r   r   r   r     r   zClause.__eq__	c                 C   s   d |  d|S )z!Pretty-print the clause.
        
r   )rc   _prettyrg   )r   indentr   r   r   prettyprint  s   zClause.prettyprintc                 c   s    t | V  dS )zvActual pretty-printing logic.

        Yields:
            A list of string. Indentation is performed with 	.
        Nreprr   r   r   r   r     s   zClause._prettyc                 C   s
   | |k S r   r   r   r   r   r   r     r$   zClause.__ne__c                 C      | S r   r   r   r   r   r   simplify  r   zClause.simplifyN)r   )r   r   r   r   r`   r   r   r   r   r   r   r   r   r   r   r   r     s    
r   c                       j   e Zd ZdgZ f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  ZS )AnyOfclausesc                       t t|   t|| _d S r   )r   r   r!   	frozensetr   r   r   r   r   r   r!        zAnyOf.__init__c                       t  fdd| jD S )Nc                 3       | ]}|  V  qd S r   r   rU   crh   r   r   rW         zAnyOf.match.<locals>.<genexpr>)anyr   ru   r   r   r   r`        zAnyOf.matchc                 C   b   t  }| jD ]}| }t|tr||jO }q|t krq|| qt|dkr-| S t| S NrL   )	setr   r   r   r   r   addre   popr   
subclausesr   Z
simplifiedr   r   r   r        


zAnyOf.simplifyc                 C      t t| jfS r   )rx   r   r   r   r   r   r   ry     r"   zAnyOf.__hash__c                 C   r   r   rs   r   r   r   r   r   rt     r$   zAnyOf.__iter__c                 C      t || jo| j|jkS r   r   r   r   r   r   r   r   r     r   zAnyOf.__eq__c                 C   4   t |tr	|| @ S t |tst |trt| |S tS r   r   AllOfMatcherr   r&   r   r   r   r   r     
   

zAnyOf.__and__c                 C   sV   t |trt| j|jB }t| S t |tst |tr)t| jt|gB }t| S tS r   )r   r   r   r   r   r   r   r&   r   r   r   r   r   r   r     s   
zAnyOf.__or__c                 C      dd tdd | jD  S )Nz	AnyOf(%s), c                 s       | ]}t |V  qd S r   r   r   r   r   r   rW         z!AnyOf.__repr__.<locals>.<genexpr>rc   sortedr   r   r   r   r   r        zAnyOf.__repr__c                 c   X    dV  | j D ]}t| }|d d D ]}d| V  qd|d  d V  qdV  d S )NzAnyOF(r   r   ,)r   r   r   r   r   linesliner   r   r   r        

zAnyOf._prettyr   r   r   r   r!   r`   r   ry   rt   r   r   r   r   r   r   r   r   r   r   r     s    	r   c                       r   )r   r   c                    r   r   )r   r   r!   r   r   r   r   r   r   r!     r   zAllOf.__init__c                    r   )Nc                 3   r   r   r   )rU   r   r   r   r   rW   $  r   zAllOf.match.<locals>.<genexpr>)allr   ru   r   r   r   r`   #  r   zAllOf.matchc                 C   r   r   )	r   r   r   r   r   r   r   re   r   r   r   r   r   r   &  r   zAllOf.simplifyc                 C   r   r   )rx   r   r   r   r   r   r   ry   4  r"   zAllOf.__hash__c                 C   r   r   r   r   r   r   r   rt   7  r$   zAllOf.__iter__c                 C   r   r   r   r   r   r   r   r   :  r   zAllOf.__eq__c                 C   sV   t |ts
t |trt| jt|gB }t| S t |tr)t| j|jB }t| S tS r   )r   r   r   r   r   r   r   r&   r   r   r   r   r   =  s   
zAllOf.__and__c                 C   sB   t |tr	|| B S t |trt| t|S t |trt| |S tS r   r   r   r   r   r&   r   r   r   r   r   F  s   



zAllOf.__or__c                 C   r   )Nz	AllOf(%s)r   c                 s   r   r   r   r   r   r   r   rW   Q  r   z!AllOf.__repr__.<locals>.<genexpr>r   r   r   r   r   r   P  r  zAllOf.__repr__c                 c   r  )NzAllOF(r   r   r  r  r  r  r   r   r   r   S  r	  zAllOf._prettyr
  r   r   r   r   r     s    	
r   c                   @   r	   )r   c                 C   r   r   r   r   r   r   r   r   `  r   zMatcher.__and__c                 C   s4   t |tr	|| B S t |tst |trt| |S tS r   r  r   r   r   r   r   h  r   zMatcher.__or__N)r   r   r   r   r   r   r   r   r   r   r   ]  s    r   c                   @   @   e Zd Zg Zdd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )r   c                 C   r   )NFr   ru   r   r   r   r`   t  r   zNever.matchc                 C   
   t tfS r   )rx   r   r   r   r   r   ry   w  r$   zNever.__hash__c                 C   r   r   r   r   r   r   r   r   z  r   zNever.__eq__c                 C   r   r   r   r   r   r   r   r   }  r   zNever.__and__c                 C      |S r   r   r   r   r   r   r     r   zNever.__or__c                 C   r   )NzNever()r   r   r   r   r   r     r   zNever.__repr__N
r   r   r   r   r`   ry   r   r   r   r   r   r   r   r   r   q      r   c                   @   r  )r   c                 C   r   r(   r   ru   r   r   r   r`     r   zAlways.matchc                 C   r  r   )rx   r   r   r   r   r   ry     r$   zAlways.__hash__c                 C   r   r   r   r   r   r   r   r     r   zAlways.__eq__c                 C   r  r   r   r   r   r   r   r     r   zAlways.__and__c                 C   r   r   r   r   r   r   r   r     r   zAlways.__or__c                 C   r   )NzAlways()r   r   r   r   r   r     r   zAlways.__repr__Nr  r   r   r   r   r     r  r   c                       s~   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZg dZe
ef fdd	Zdd Zdd Zdd Zdd Zdd Z  ZS )r   r   r   r   r   r   r   alwaysZnaturalz
same-patchZimplicitstrict)r   r   prerelease_policybuild_policyc                    sb   t t|   |jr|| j| jfvrtd||f || _|| _|| _	|jr,| j
| _d S || _d S )Nz3Invalid range %s%s: build numbers have no ordering.)r   r   r!   rA   OP_EQOP_NEQr9   r   r   r  BUILD_STRICTr  )r   r   r   r  r  r   r   r   r!     s   zRange.__init__c                 C   s  | j | jkr|d}|jr!| j | k}| j| jkr!|s!dS | j| jkrD| j | jkr?| jd|dko>|j	| jj	kS || jkS | j| j
krO|| jkS | j| jkrZ|| jkS | j| jkr}|jrx| j| jkrx| | j krx| jjsxdS || jk S | j| jkr|| jkS | j| jksJ | j | jkr| jd|dko|j	| jj	k S |jr| j| jkr| | j kr| jjsdS || jkS )Nr@   F)r  r  rQ   r@   r   r  PRERELEASE_SAMEPATCHr   r  rA   OP_GTOP_GTEOP_LTPRERELEASE_NATURALOP_LTEr  )r   rh   Z
same_patchr   r   r   r`     sP   






zRange.matchc                 C   s   t t| j| j| jfS r   )rx   r   r   r   r  r   r   r   r   ry     s   zRange.__hash__c                 C   s0   t || jo| j|jko| j|jko| j|jkS r   )r   r   r   r   r  r   r   r   r   r     s   


zRange.__eq__c                 C   r   r   r   r   r   r   r   r   rv     r0   zRange.__str__c                 C   sF   | j | jkrdnd| j  | j| jkrdnd| j  }d| j| j|f S )Nr[   z, prerelease_policy=%rz, build_policy=%rzRange(%r, %r%s))r  r  r  BUILD_IMPLICITr   r   )r   Zpolicy_partr   r   r   r     s   zRange.__repr__)r   r   r   r  r  r  r  r  r  PRERELEASE_ALWAYSr  r  r   r  r   r!   r`   ry   r   rv   r   r   r   r   r   r   r     s&    1r   c                   @   *   e Zd ZdZedd ZG dd dZdS )
SimpleSpecr   c                 C   r   r   Parserr:   r   r   r   r   r     r   zSimpleSpec._parse_to_clausec                   @   st   e Zd ZdZedjedejZe	dd Z
dZdZdZd	Zd
ZdZdZdZdZeedZg dZe	dd ZdS )zSimpleSpec.Parserz\*|0|[1-9][0-9]*z^
            (?P<op><|<=||=|==|>=|>|!=|\^|~|~=)
            (?P<major>{nb})(?:\.(?P<minor>{nb})(?:\.(?P<patch>{nb}))?)?
            (?:-(?P<prerel>[a-z0-9A-Z.-]*))?
            (?:\+(?P<build>[a-z0-9A-Z.-]*))?
            $
            )nbc                 C   sD   | d}t }|D ]}| j|std| || |M }q
|S )Nr  zInvalid simple block %r)rd   r   
NAIVE_SPECr`   r9   parse_block)rG   r   blocksr   blockr   r   r   r:   !  s   
zSimpleSpec.Parser.parser   r   r   r   r   r   r   r   r   )r   r[   r   xXNc                 C   s  | j |std| | j | \}}}}}}| j||}|| jv r(d nt|}|| jv r3d nt|}	|| jv r>d nt|}
|d u r\tdddd}|| j	| j
fvr[td| n/|	d u rht|ddd}n#|
d u rtt||	dd}nt||	|
|r|dnd|r|dndd}|d u s|	d u s|
d u r|s|rtd| |d ur|| j	| jfvrtd| || jkr|jr| }n|jr| }n| }ttj|ttj|@ S || jkr|d usJ |	d u r| }n| }ttj|ttj|@ S || jkr(|d us	J |	d u s|
d u r| }n| }ttj|ttj|@ S || j	krs|d u r9ttj|S |	d u rLttj|ttj| @ S |
d u r_ttj|ttj| @ S |dkrmttj|tjd	S ttj|S || jkr|d usJ |	d u rttj|ttj| B S |
d u rttj|ttj| B S |dkrttj|tjd
S |dkrttj|tjd	S ttj|S || jkr|d usJ |	d u rttj| S |
d u rttj| S ttj|S || j
krttj|S || jkr"|d usJ |dkrttj|tjd
S ttj|S || jks*J |d us1J |	d u r>ttj| S |
d u rKttj| S ttj |S )Nz!Invalid simple spec component: %rr   r=   r>   r?   zInvalid simple spec: %rrR   r   r=   r>   r?   r@   rA   r[   )r  r  )!r'  r`   r9   ro   PREFIX_ALIASESgetEMPTY_VALUESr   r1   	PREFIX_EQ
PREFIX_GTErd   
PREFIX_NEQPREFIX_CARETr=   rM   r>   rN   rO   r   r  r  PREFIX_TILDEPREFIX_COMPATIBLEr  r  r  r!  	PREFIX_GTr  	PREFIX_LT
PREFIX_LTEr  )rG   exprprefixmajor_tminor_tpatch_tprerelrA   r=   r>   r?   r   highr   r   r   r(  =  s    


















zSimpleSpec.Parser.parse_blockN)r   r   r   NUMBERr^   r_   formatVERBOSEr'  r   r:   r7  r8  r9  r4  r6  r:  r5  r;  r<  r1  r3  r(  r   r   r   r   r%    s0    


r%  Nr   r   r   r   r   r   r%  r   r   r   r   r#    s
    
r#  c                       s0   e Zd Z fddZedd Zdd Z  ZS )
LegacySpecc                    sJ   t jdtdd t|dkrt jdtdd d|}tt| | d S )NzBThe Spec() class will be removed in 3.1; use SimpleSpec() instead.r2   r3   rL   z]Passing 2+ arguments to SimpleSpec will be removed in 3.0; concatenate them with ',' instead.r  )	r6   r7   PendingDeprecationWarningre   r8   rc   r   rH  r!   )r   Zexpressionsr   r   r   r   r!     s   
zLegacySpec.__init__c                 C   s   t | S r   )r   r   r   r   r   specs  s   zLegacySpec.specsc                 c   sV    t jdtdd zt| j}W n ty   | jg}Y nw |D ]}t|V  q d S )NzLIterating over the components of a SimpleSpec object will be removed in 3.0.r2   r3   )r6   r7   r8   r   r   	TypeErrorr   r   )r   r   r   r   r   r   rt     s   zLegacySpec.__iter__)r   r   r   r!   r   rJ  rt   r   r   r   r   r   rH    s
    
rH  c                   @   r"  )NpmSpecZnpmc                 C   r   r   r$  r   r   r   r   r     r   zNpmSpec._parse_to_clausec                
   @   s   e Zd ZdZdZdZdZedj	eedej
Zedd Zed	d
 ZdZdZdZdZdZdZdZdeiZeejeejeejeejeejiZg dZedd ZdS )zNpmSpec.Parserz||z - zx|X|\*|0|[1-9][0-9]*z[a-zA-Z0-9.-]*aQ  
            ^(?:v)?                     # Strip optional initial v
            (?P<op><|<=|>=|>|=|\^|~|)   # Operator, can be empty
            (?P<major>{nb})(?:\.(?P<minor>{nb})(?:\.(?P<patch>{nb}))?)?
            (?:-(?P<prerel>{part}))?    # Optional re-release
            (?:\+(?P<build>{part}))?    # Optional build
            $)r&  rV   c                 C   s   t ||t jdS )Nr0  )r   r  )rG   r   r   r   r   r   range  s   zNpmSpec.Parser.rangec                 C   s  t  }|| j}|D ]}| }|sd}g }| j|v r4|| jd\}}| d| | d|  }n |d}|D ]}	| j|	sKtd||	f |	| |	 q;g }
g }|D ]a}|j
jr|jtjtjfv r|
ttjt|j
j|j
j|j
jd dtjd	 n|jtjtjfv r|
ttjt|j
j|j
jd
ddtjd	 |
| || j|j|j
 d qZ|| qZ|
r|t|
 O }|t| O }q|S )Nz>=0.0.0r2   r   r    zInvalid NPM block in %r: %rrL   r.  )r   r   r  r   r   )r=   r>   r?   r@   r  )r   rd   JOINERstripHYPHENparse_simpleNPM_SPEC_BLOCKr`   r9   extendr   r@   r   r   r  r  appendr  r1   r=   r>   r?   r!  r  rM  rQ   r   )rG   r   resultro   groupr   lowrC  r)  r*  Zprerelease_clausesZnon_prerel_clausesr   r   r   r   r:     sd   



	


zNpmSpec.Parser.parser   r   r   r   r   r   r   r[   r+  c                 C   s  | j |}| \}}}}}}| j||}|| jv rd nt|}	|| jv r)d nt|}
|| jv r4d nt|}|d urD|| jfvrDd }|	d u ratdddd}|| j| j	fvr]t
d| | j	}n/|
d u rmt|	ddd}n#|d u ryt|	|
dd}nt|	|
||r|dnd|r|dndd}|	d u s|
d u s|d u r|s|rt
d| || jkr|jr|  }n&|jr|  }n|
d u r|  }n|d u r|  }n|  }| tj|| tj|gS || jkr|	d usJ |
d u r| }n| }| tj|| tj|gS || jkrU|	d u r#| tj|gS |
d u r8| tj|| tj| gS |d u rM| tj|| tj| gS | tj|gS || jkr|	d usbJ |
d u rq| tj| gS |d u r| tj| gS | tj|gS || j	kr| tj|gS || jkr|	d usJ | tj|gS || jksJ |	d usJ |
d u r| tj| gS |d u r| tj| gS | tj|gS )Nr   r.  zInvalid expression %rrR   r   r/  zInvalid NPM spec: %r)rS  r`   ro   r1  r2  r3  r   r4  r1   r5  r9   rd   r7  r=   rQ   rM   r>   rN   rO   rM  r   r  r  r8  r  r:  r  r;  r<  r  )rG   r   r`   r>  r?  r@  rA  rB  rA   r=   r>   r?   r   rC  r   r   r   rR  N  s    



 
 



zNpmSpec.Parser.parse_simpleN) r   r   r   rO  rQ  rD  ZPARTr^   r_   rE  rF  rS  r   rM  r:   r7  r8  r4  r:  r5  r;  r<  r1  r   r  r  r  r  r  ZPREFIX_TO_OPERATORr3  rR  r   r   r   r   r%    s@    


;r%  NrG  r   r   r   r   rL    s
    
rL  )	functoolsr^   r6   r   objectr
   total_orderingr   r)   r1   r   r   r`   r   r   r   r   r   r   r   r   r   r   r   r#  rH  r   rL  r   r   r   r   <module>   sB   
   /X	S#?Ao .#