o
    b                     @   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   9usr/lib/python3.10/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   Z
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 rI   )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 )NrJ   rK   )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?   rJ   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   + rK   %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   rZ   rQ   Fallow_leading_zeroesT)r9   partial_version_re
version_rer_   groupsr   r   rH   r;   rc   _validate_identifiers)rG   rF   rB   ri   rm   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 %rrQ   r   r   z%Invalid leading zero in identifier %r)r9   rb   r   )rG   Zidentifiersrk   itemr   r   r   ro   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=%rFrj   T)r   rH   r9   ro   )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[   rQ   r\   )r=   r>   r?   r@   rB   rA   rb   r   rg   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=TruerZ   )r   r   strrB   r   r   r   r   r     s   zVersion.__repr__c                 C   rq   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)   rS   r   r   r   rV     
    
z0Version._build_precedence_key.<locals>.<genexpr>c                 s   ry   r   rz   rS   r   r   r   rV     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 )NrK   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^   rm   rl   r!   classmethodrH   rL   rM   rN   rP   ri   r:   ro   r<   rs   ru   r   rx   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.*<<====rZ   >=>!=^~~=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   rZ   z%Invalid requirement specification: %rTrW   zEInvalid requirement specification %r: build numbers have no ordering.)
r9   KIND_ANYre_specr_   rn   KIND_ALIASESr1   rA   
KIND_EQUALKIND_NEQ)rG   r   r_   r   rg   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_   rt   r   r   r   r_   A  r   zSpecItem.matchc                 C      d| j | jf S Nr   r   r   r   r   r   r   ru   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   )rw   r   r   r   r   r   r   rx   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_   ru   r   r   rx   r   r   r   r   r     s8    



r   c                 C   s   t | t |S r   )r1   r   )Zv1Zv2r   r   r   compareS     r   c                 C   s   t | t|S r   )r   r_   r1   )r   rg   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   versionsrg   r   r   r   filter  s   
zBaseSpec.filterc                 C   r   )z+Check whether a Version satisfies the Spec.)r   r_   rt   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_   rt   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   )rw   r   r   r   r   r   rx     r$   zBaseSpec.__hash__c                 C   r|   r   )r   r   r   r   r   ru        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   rx   ru   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   rt   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   )rb   _prettyrf   )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   rT   crg   r   r   rV         zAnyOf.match.<locals>.<genexpr>)anyr   rt   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 NrK   )	setr   r   r   r   r   addrd   popr   
subclausesr   Z
simplifiedr   r   r   r        


zAnyOf.simplifyc                 C      t t| jfS r   )rw   r   r   r   r   r   r   rx     r"   zAnyOf.__hash__c                 C   r   r   rr   r   r   r   r   r   rs     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   rV         z!AnyOf.__repr__.<locals>.<genexpr>rb   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   rx   rs   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   )rT   r   r   r   r   rV   $  r   zAllOf.match.<locals>.<genexpr>)allr   rt   r   r   r   r_   #  r   zAllOf.matchc                 C   r   r   )	r   r   r   r   r   r   r   rd   r   r   r   r   r   r   &  r   zAllOf.simplifyc                 C   r   r   )rw   r   r   r   r   r   r   rx   4  r"   zAllOf.__hash__c                 C   r   r   r   r   r   r   r   rs   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   rV   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   rt   r   r   r   r_   t  r   zNever.matchc                 C   
   t tfS r   )rw   r   r   r   r   r   rx   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_   rx   r   r   r   r   r   r   r   r   r   q      r   c                   @   r
  )r   c                 C   r   r(   r   rt   r   r   r   r_     r   zAlways.matchc                 C   r  r   )rw   r   r   r   r   r   rx     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  rP   r@   r   r  PRERELEASE_SAMEPATCHr   r  rA   OP_GTOP_GTEOP_LTPRERELEASE_NATURALOP_LTEr  )r   rg   Z
same_patchr   r   r   r_     sP   






zRange.matchc                 C   s   t t| j| j| jfS r   )rw   r   r   r   r  r   r   r   r   rx     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   ru     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 )NrZ   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_   rx   r   ru   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)rc   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   rZ   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: %rrQ   r   r=   r>   r?   r@   rA   rZ   )r  r  )!r$  r_   r9   rn   PREFIX_ALIASESgetEMPTY_VALUESr   r1   	PREFIX_EQ
PREFIX_GTErc   
PREFIX_NEQPREFIX_CARETr=   rL   r>   rM   rN   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:   r4  r5  r6  r1  r3  r7  r2  r8  r9  r.  r0  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   rK   z]Passing 2+ arguments to SimpleSpec will be removed in 3.0; concatenate them with ',' instead.r   )	r6   r7   PendingDeprecationWarningrd   r8   rb   r   rE  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   rs     s   zLegacySpec.__iter__)r   r   r   r!   r   rG  rs   r   r   r   r   r   rE    s
    
rE  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#  rU   c                 C   s   t ||t jdS )Nr-  )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: %rrK   r+  )r   r   r  r   r   )r=   r>   r?   r@   r  )r   rc   JOINERstripHYPHENparse_simpleNPM_SPEC_BLOCKr_   r9   extendr   r@   r   r   r  r  appendr  r1   r=   r>   r?   r  r  rJ  rP   r   )rG   r   resultrn   groupr   lowr@  r&  r'  Zprerelease_clausesZnon_prerel_clausesr   r   r   r   r:     sd   



	


zNpmSpec.Parser.parser   r   r   r   r   r   r   rZ   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 %rrQ   r   r,  zInvalid NPM spec: %r)rP  r_   rn   r.  r/  r0  r   r1  r1   r2  r9   rc   r4  r=   rP   rL   r>   rM   rN   rJ  r   r  r  r5  r  r7  r  r8  r9  r  )rG   r   r_   r;  r<  r=  r>  r?  rA   r=   r>   r?   r   r@  r   r   r   rO  N  s    



 
 



zNpmSpec.Parser.parse_simpleN) r   r   r   rL  rN  rA  ZPARTr]   r^   rB  rC  rP  r   rJ  r:   r4  r5  r1  r7  r2  r8  r9  r.  r   r  r  r  r  r  ZPREFIX_TO_OPERATORr0  rO  r   r   r   r   r"    s@    


;r"  NrD  r   r   r   r   rI    s
    
rI  )	functoolsr]   r6   r   objectr
   total_orderingr   r)   r1   r   r   r_   r   r   r   r   r   r   r   r   r   r   r   r   rE  r   rI  r   r   r   r   <module>   sB   
   /X	S#?Ao .#