a
    d                     @   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   ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/semantic_version/base.py_has_leading_zero
   s    
r   c                   @   s    e Zd Zg Zdd Zdd ZdS )MaxIdentifierc                 C   s   dS )NzMaxIdentifier()r   selfr   r   r   __repr__   s    zMaxIdentifier.__repr__c                 C   s   t || jS N
isinstance	__class__r   otherr   r   r   __eq__   s    zMaxIdentifier.__eq__N)__name__
__module____qualname__	__slots__r   r   r   r   r   r   r	      s   r	   c                   @   s2   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__   s    zNumericIdentifier.__init__c                 C   s
   d| j  S )NzNumericIdentifier(%r)r   r
   r   r   r   r   "   s    zNumericIdentifier.__repr__c                 C   s   t |tr| j|jkS tS r   )r   r   r   NotImplementedr   r   r   r   r   %   s    
zNumericIdentifier.__eq__c                 C   s:   t |trdS t |trdS t |tr2| j|jk S tS d S NT)r   r	   AlphaIdentifierr   r   r   r   r   r   r   __lt__*   s    


zNumericIdentifier.__lt__Nr   r   r   r   r   r   r   r   r   r   r   r   r      s
   r   c                   @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )r   r   c                 C   s   | d| _d S )Nascii)encoder   r   r   r   r   r   9   s    zAlphaIdentifier.__init__c                 C   s
   d| j  S )NzAlphaIdentifier(%r)r   r
   r   r   r   r   <   s    zAlphaIdentifier.__repr__c                 C   s   t |tr| j|jkS tS r   )r   r   r   r   r   r   r   r   r   ?   s    
zAlphaIdentifier.__eq__c                 C   s:   t |trdS t |trdS t |tr2| j|jk S tS d S )NTF)r   r	   r   r   r   r   r   r   r   r   r   D   s    


zAlphaIdentifier.__lt__Nr    r   r   r   r   r   5   s
   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d7ddZed8ddZed9ddZedd Zdd Zdd Zdd Zd d! Zd:d"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 );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 oL|  u oL|  u oL|  u oLd u n   }	||	A sdtd|r| ||\}}}}}n0t|pd}|st|pd}| |||||| || _|| _|| _	|| _
|| _|| _| 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/   r0   r1   r2   r3   r4   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   sR   | j r6| j| j  krdkr6n nt| jdd| jdS t| jd dd| jdS d S Nr   r/   r0   r1   r4      )r2   r0   r1   r#   r/   r4   r
   r   r   r   
next_major   s    "zVersion.next_majorc                 C   sD   | j r&| jdkr&t| j| jd| jdS t| j| jd d| jdS d S r<   )r2   r1   r#   r/   r0   r4   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 d S )Nr=   r>   )r2   r#   r/   r0   r1   r4   r
   r   r   r   
next_patch   s    zVersion.next_patchr1   c                 C   s   |dkr| S |dkr0t | j| j| j| j| jdS |dkrPt | j| j| j| jdS |dkrxt | j| j| jrldnd| jdS |d	krt | j| jrdnd| jrdnd| jdS td
| dS )z@Return a new Version object, truncated up to the selected level.r3   r2   )r/   r0   r1   r2   r4   r1   r=   r0   Nr   r/   zInvalid truncation level `%s`.)r#   r/   r0   r1   r2   r4   r+   )r   levelr   r   r   truncate   s@    zVersion.truncatec           	      C   s  t d}||}|s$td| |d|  }|sP|ddk rP|d7 }q8ddd |dD }| t|krt	||d	S || d }t 
d
d|}|d dkrd}|dd }n|d dkrd}|dd }nh|d dkr"|dd }d|v r|dd\}}n
|d }}n&d|v r>|dd\}}n
|d }}|dd}|rfd||f }|rxd||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.r$   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>r4   z[^a-zA-Z0-9+.-]-r   + r>   %s-%s%s+%s)recompilematchr+   endcountjoinsplitlenr#   subreplace)	r9   r8   r4   Zbase_rerR   versionrestr2   r3   r   r   r   coerce   sN    






zVersion.coercec                 C   sR  |st d| |r| j}n| j}||}|s<t d| | \}}}}	}
t|rbt d| t|rvt d| t|rt d| t|}| ||}| ||}|	du r|r|
du r|||ddfS d}	n*|	dkrd}	nt|		d	}	| j
|	d
d |
du r|rd}
nd}
n,|
dkr(d}
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   rM   rD   Fallow_leading_zeroesT)r+   partial_version_re
version_rerR   groupsr   r   r;   r-   rV   _validate_identifiers)r9   r8   r4   r\   r`   rR   r/   r0   r1   r2   r3   r   r   r   r,   )  sF    


zVersion.parsec                 C   sT   |D ]J}|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 %rrD   r   r   z%Invalid leading zero in identifier %r)r+   rU   r   )r9   Zidentifiersr^   itemr   r   r   rb   f  s     zVersion._validate_identifiersc                 C   s   |t |ksD|| ||ksD|| ||ksD|d u r8|rD|d u r\|s\td||||||f |d urr| j|dd |d ur| j|dd d S )Nz[Invalid kwargs to Version(major=%r, minor=%r, patch=%r, prerelease=%r, build=%r, partial=%rFr]   T)r   r;   r+   rb   )r9   r/   r0   r1   r2   r3   r4   r   r   r   r.   r  s0    
zVersion._validate_kwargsc                 C   s   t | j| j| j| j| jfS r   )iterr/   r0   r1   r2   r3   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sZ| jrn| jdkrn| jd u rnd|d| jf }| js| jr| jdkrd|d| jf }|S )Nz%dz%s.%dr   rN   rD   rO   )r/   r0   r1   r2   r4   r3   rU   r   rZ   r   r   r   __str__  s    


 zVersion.__str__c                 C   s    d| j jt| | jrdndf S )Nz%s(%r%s)z, partial=TruerM   )r   r   strr4   r
   r   r   r   r     s
    zVersion.__repr__c                 C   s   t | j| j| j| j| jfS r   )hashr/   r0   r1   r2   r3   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pJd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   s&   | ]}|  rt|nt|V  qd S r   r   r   r   rF   r   r   r   rI     s   z0Version._build_precedence_key.<locals>.<genexpr>c                 s   s&   | ]}|  rt|nt|V  qd S r   rk   rF   r   r   r   rI     s   r   )r2   r-   r	   r/   r0   r1   r3   )r   r'   Zprerelease_keyZ	build_keyr   r   r   r5     s*    
zVersion._build_precedence_keyc                 C   s   | j S r   )r7   r
   r   r   r   precedence_key  s    zVersion.precedence_keyc                 C   s<   t || jstS | |k rdS | |kr(dS | |kr4dS tS d S )Nr>   r   )r   r   r   r   r   r   r   __cmp__  s    zVersion.__cmp__c                 C   s\   t || jstS | j|jkoZ| j|jkoZ| j|jkoZ| jp<d|jpDdkoZ| jpPd|jpXdkS )Nr   )r   r   r   r/   r0   r1   r2   r3   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   r6   r   r   r   r   r     s    zVersion.__lt__c                 C   s   t || jstS | j|jkS r   rp   r   r   r   r   __le__  s    zVersion.__le__c                 C   s   t || jstS | j|jkS r   rp   r   r   r   r   __gt__  s    zVersion.__gt__c                 C   s   t || jstS | j|jkS r   rp   r   r   r   r   __ge__  s    zVersion.__ge__)NNNNNNF)F)r1   )F)FF)F)F) r   r   r   rP   rQ   r`   r_   r   classmethodr;   r?   r@   rA   rC   r\   r,   rb   r.   re   rg   r   rj   r5   propertyrl   rn   r   ro   r   rq   rr   rs   r   r   r   r   r#   O   sL   

       
+
$O<

%
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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.*<<====rM   >=>!=^~~=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.r$   r%   )	r(   r)   r*   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r|| j| j	fvrt d| ||fS )Nz+Invalid empty requirement specification: %rrw   rM   z%Invalid requirement specification: %rTrJ   zEInvalid requirement specification %r: build numbers have no ordering.)
r+   KIND_ANYre_specrR   ra   KIND_ALIASESr#   r3   
KIND_EQUALKIND_NEQ)r9   r   rR   r   rZ   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rN| d|j|jf ddS d S )Nrw   F)r   z<0.0.0-%s%s)AlwaysNeverr   Rangeoperatortarget)r9   Zmatcherr   r   r   from_matcher8  s    


zSpecItem.from_matcherc                 C   s   | j |S r   )r   rR   rf   r   r   r   rR   A  s    zSpecItem.matchc                 C   s   d| j | jf S Nr   r   r   r
   r   r   r   rg   D  s    zSpecItem.__str__c                 C   s   d| j | jf S )Nz<SpecItem: %s %r>r   r
   r   r   r   r   G  s    zSpecItem.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r   )r   rv   r   r   r   r   r   r   r   r   J  s    
zSpecItem.__eq__c                 C   s   t | j| jfS r   )ri   r   r   r
   r   r   r   rj   O  s    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   rP   rQ   r   r   rt   r,   r   rR   rg   r   r   rj   r   r   r   r   rv     s6   



rv   c                 C   s   t | t |S r   )r#   rn   )Zv1Zv2r   r   r   compareS  s    r   c                 C   s   t | t|S r   )r   rR   r#   )r   rZ   r   r   r   rR   W  s    rR   c                 C   s*   zt |  W dS  ty$   Y dS 0 dS )z;Validates a version string againt the SemVer specification.TFN)r#   r,   r+   )r8   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   sH   |j }|d u rtdn"|| 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)SYNTAXr+   SYNTAXES)r9   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   )r9   r   r   r   r   r   r,     s    zBaseSpec.parsec                 C   s
   t  dS )z#Converts an expression to a clause.NNotImplementedErrorr9   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rR   )r   versionsrZ   r   r   r   filter  s    
zBaseSpec.filterc                 C   s   | j |S )z+Check whether a Version satisfies the Spec.)r   rR   rf   r   r   r   rR     s    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   r#   rR   rf   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   s
   t | jS r   )ri   r   r
   r   r   r   rj     s    zBaseSpec.__hash__c                 C   s   | j S r   )r   r
   r   r   r   rg     s    zBaseSpec.__str__c                 C   s   d| j j| jf S )Nz<%s: %r>)r   r   r   r
   r   r   r   r     s    zBaseSpec.__repr__)r   r   r   r   r   rt   r   r   DEFAULT_SYNTAXr,   r   r   rR   r   r   r   rj   rg   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   s
   t  d S r   r   rf   r   r   r   rR     s    zClause.matchc                 C   s
   t  d S r   r   r   r   r   r   __and__  s    zClause.__and__c                 C   s
   t  d S r   r   r   r   r   r   __or__  s    zClause.__or__c                 C   s
   t  d S r   r   r   r   r   r   r     s    zClause.__eq__	c                 C   s   d |  d|S )z!Pretty-print the clause.
        
r   )rU   _prettyrY   )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   ro     s    zClause.__ne__c                 C   s   | S r   r   r
   r   r   r   simplify  s    zClause.simplifyN)r   )r   r   r   r   rR   r   r   r   r   r   ro   r   r   r   r   r   r     s   
r   c                       sj   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                    s   t t|   t|| _d S r   )r   r   r   	frozensetr   r   r   r   r   r   r     s    zAnyOf.__init__c                    s   t  fdd| jD S )Nc                 3   s   | ]}|  V  qd S r   r   rG   crZ   r   r   rI         zAnyOf.match.<locals>.<genexpr>)anyr   rf   r   r   r   rR     s    zAnyOf.matchc                 C   sd   t  }| jD ]:}| }t|tr.||jO }q|t kr<qq|| qt|dkr\| S t| S Nr>   )	setr   r   r   r   r   addrW   popr   
subclausesr   Z
simplifiedr   r   r   r     s    


zAnyOf.simplifyc                 C   s   t t| jfS r   )ri   r   r   r
   r   r   r   rj     s    zAnyOf.__hash__c                 C   s
   t | jS r   rd   r   r
   r   r   r   re     s    zAnyOf.__iter__c                 C   s   t || jo| j|jkS r   r   r   r   r   r   r   r   r     s    zAnyOf.__eq__c                 C   s8   t |tr|| @ S t |ts&t |tr0t| |S tS d S r   r   AllOfMatcherr   r   r   r   r   r   r     s
    

zAnyOf.__and__c                 C   sR   t |trt| j|jB }n.t |ts0t |trFt| jt|gB }n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   s   dd tdd | jD  S )Nz	AnyOf(%s), c                 s   s   | ]}t |V  qd S r   r   r   r   r   r   rI     r   z!AnyOf.__repr__.<locals>.<genexpr>rU   sortedr   r
   r   r   r   r     s    zAnyOf.__repr__c                 c   sV   dV  | j D ]>}t| }|d d D ]}d| V  q(d|d  d V  qdV  d S )NzAnyOF(rm   r   ,)r   r   r   r   r   linesliner   r   r   r     s    
zAnyOf._prettyr   r   r   r   r   rR   r   rj   re   r   r   r   r   r   r   r   r   r   r   r     s   	r   c                       sj   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 )r   r   c                    s   t t|   t|| _d S r   )r   r   r   r   r   r   r   r   r   r     s    zAllOf.__init__c                    s   t  fdd| jD S )Nc                 3   s   | ]}|  V  qd S r   r   )rG   r   r   r   r   rI   $  r   zAllOf.match.<locals>.<genexpr>)allr   rf   r   r   r   rR   #  s    zAllOf.matchc                 C   sd   t  }| jD ]:}| }t|tr.||jO }q|t kr<qq|| qt|dkr\| S t| S r   )	r   r   r   r   r   r   r   rW   r   r   r   r   r   r   &  s    


zAllOf.simplifyc                 C   s   t t| jfS r   )ri   r   r   r
   r   r   r   rj   4  s    zAllOf.__hash__c                 C   s
   t | jS r   r   r
   r   r   r   re   7  s    zAllOf.__iter__c                 C   s   t || jo| j|jkS r   r   r   r   r   r   r   :  s    zAllOf.__eq__c                 C   sR   t |tst |tr*t| jt|gB }n t |trFt| j|jB }ntS t| S r   )r   r   r   r   r   r   r   r   r   r   r   r   r   =  s    
zAllOf.__and__c                 C   sF   t |tr|| B S t |tr*t| t|S t |tr>t| |S tS d S r   r   r   r   r   r   r   r   r   r   r   F  s    



zAllOf.__or__c                 C   s   dd tdd | jD  S )Nz	AllOf(%s)r   c                 s   s   | ]}t |V  qd S r   r   r   r   r   r   rI   Q  r   z!AllOf.__repr__.<locals>.<genexpr>r   r
   r   r   r   r   P  s    zAllOf.__repr__c                 c   sV   dV  | j D ]>}t| }|d d D ]}d| V  q(d|d  d V  qdV  d S )NzAllOF(rm   r   r   r   r   r   r   r   r   r   S  s    
zAllOf._prettyr   r   r   r   r   r     s   	
r   c                   @   s    e Zd Zg Zdd Zdd ZdS )r   c                 C   s8   t |tr|| @ S t |ts&t |tr0t| |S tS d S r   r   r   r   r   r   r   `  s
    

zMatcher.__and__c                 C   s8   t |tr|| B S t |ts&t |tr0t| |S tS d S r   r   r   r   r   r   r   h  s
    

zMatcher.__or__N)r   r   r   r   r   r   r   r   r   r   r   ]  s   r   c                   @   s@   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   s   dS )NFr   rf   r   r   r   rR   t  s    zNever.matchc                 C   s
   t tfS r   )ri   r   r
   r   r   r   rj   w  s    zNever.__hash__c                 C   s   t || jS r   r   r   r   r   r   r   z  s    zNever.__eq__c                 C   s   | S r   r   r   r   r   r   r   }  s    zNever.__and__c                 C   s   |S r   r   r   r   r   r   r     s    zNever.__or__c                 C   s   dS )NzNever()r   r
   r   r   r   r     s    zNever.__repr__N
r   r   r   r   rR   rj   r   r   r   r   r   r   r   r   r   q  s   r   c                   @   s@   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   s   dS r   r   rf   r   r   r   rR     s    zAlways.matchc                 C   s
   t tfS r   )ri   r   r
   r   r   r   rj     s    zAlways.__hash__c                 C   s   t || jS r   r   r   r   r   r   r     s    zAlways.__eq__c                 C   s   |S r   r   r   r   r   r   r     s    zAlways.__and__c                 C   s   | S r   r   r   r   r   r   r     s    zAlways.__or__c                 C   s   dS )NzAlways()r   r
   r   r   r   r     s    zAlways.__repr__Nr   r   r   r   r   r     s   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   rz   r}   r|   rx   ry   r~   alwaysZnaturalz
same-patchZimplicitstrict)r   r   prerelease_policybuild_policyc                    s\   t t|   |jr4|| j| jfvr4td||f || _|| _|| _	|jrR| j
n|| _d S )Nz3Invalid range %s%s: build numbers have no ordering.)r   r   r   r3   OP_EQOP_NEQr+   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rB| j | k}| j| jkrB|sBdS | j| jkr| j | jkr~| jd|dko||j	| jj	kS || jkS | j| j
kr|| jkS | j| jkr|| jkS | j| jk r|jr| j| jkr| | j kr| jjsdS || jk S | j| jkr|| jkS | j| jks&J | j | jkr\| jd|dkoX|j	| jj	k S |jr| j| jkr| | j kr| jjsdS || jkS d S )Nr2   F)r   r   rC   r2   r   r   PRERELEASE_SAMEPATCHr   r   r3   OP_GTOP_GTEOP_LTPRERELEASE_NATURALOP_LTEr   )r   rZ   Z
same_patchr   r   r   rR     sX    







zRange.matchc                 C   s   t t| j| j| jfS r   )ri   r   r   r   r   r
   r   r   r   rj     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   s   d| j | jf S r   r   r   r
   r   r   r   rg     s    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 )NrM   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   rR   rj   r   rg   r   r   r   r   r   r   r     s$   1r   c                   @   s*   e Zd ZdZedd ZG dd dZdS )
SimpleSpecr   c                 C   s   | j |S r   Parserr,   r   r   r   r   r     s    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|s0td| || |M }q|S )Nr   zInvalid simple block %r)rV   r   
NAIVE_SPECrR   r+   parse_block)r9   r   blocksr   blockr   r   r   r,   !  s    
zSimpleSpec.Parser.parser   r   r   rz   r~   r}   r|   rx   ry   )r{   rM   rw   xXNc                 C   s  | j |std| | j | \}}}}}}| j||}|| jv rPd nt|}|| jv rfd nt|}	|| jv r|d nt|}
|d u rtdddd}|| j	| j
fvrtd| n`|	d u rt|ddd}nH|
d u rt||	dd}n0t||	|
|r|dnd|r|dndd}|d u s6|	d u s6|
d u rN|sB|rNtd| |d urv|| j	| jfvrvt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rl|d us.J |	d u sB|
d u rL| }n| }ttj|ttj|@ S || j	kr|d u rttj|S |	d u rttj|ttj| @ S |
d u rttj|ttj| @ S |dkrttj|tjd	S ttj|S n|| jkr|d us J |	d u rFttj|ttj| B S |
d u rlt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 n|| jkr|d usJ |	d u rttj| S |
d u rttj| S ttj|S n|| j
kr(ttj|S || jkrj|d usBJ |dkr^ttj|tjd
S ttj|S || jkszJ |d usJ |	d u rttj| S |
d u rttj| S ttj |S d S )Nz!Invalid simple spec component: %rr   r/   r0   r1   zInvalid simple spec: %rrD   r   r/   r0   r1   r2   r3   rM   )r   r   )!r   rR   r+   ra   PREFIX_ALIASESgetEMPTY_VALUESr   r#   	PREFIX_EQ
PREFIX_GTErV   
PREFIX_NEQPREFIX_CARETr/   r?   r0   r@   rA   r   r   r   PREFIX_TILDEPREFIX_COMPATIBLEr   r   r   r   	PREFIX_GTr   	PREFIX_LT
PREFIX_LTEr   )r9   exprprefixmajor_tminor_tpatch_tprerelr3   r/   r0   r1   r   highr   r   r   r   =  s    *

















zSimpleSpec.Parser.parse_blockN)r   r   r   NUMBERrP   rQ   formatVERBOSEr   rt   r,   r  r  r  r   r  r  r  r  r  r   r   r   r   r   r   r   r     s.   


r   Nr   r   r   r   rt   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.r$   r%   r>   z]Passing 2+ arguments to SimpleSpec will be removed in 3.0; concatenate them with ',' instead.r   )	r(   r)   PendingDeprecationWarningrW   r*   rU   r   r  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   sT   t jdtdd zt| j}W n ty8   | jg}Y n0 |D ]}t|V  q>d S )NzLIterating over the components of a SimpleSpec object will be removed in 3.0.r$   r%   )r(   r)   r*   r   r   	TypeErrorrv   r   )r   r   r   r   r   r   re     s    zLegacySpec.__iter__)r   r   r   r   ru   r  re   r   r   r   r   r   r    s   
r  c                   @   s*   e Zd ZdZedd ZG dd dZdS )NpmSpecZnpmc                 C   s   | j |S r   r   r   r   r   r   r     s    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   rH   c                 C   s   t ||t jdS )Nr   )r   r   )r9   r   r   r   r   r   range  s    zNpmSpec.Parser.rangec                 C   s  t  }|| j}|D ]}| }|s,d}g }| j|v rj|| jd\}}| d| | d|  }n@|d}|D ]0}	| j|	std||	f |	| |	 qxg }
g }|D ]}|j
jrt|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 rL|
ttjt|j
j|j
jd
ddtjd	 |
| || j|j|j
 d q|| q|
r|t|
 O }|t| O }q|S )Nz>=0.0.0r$   r|   ry    zInvalid NPM block in %r: %rr>   r   )r   r   r   r   r   )r/   r0   r1   r2   r   )r   rV   JOINERstripHYPHENparse_simpleNPM_SPEC_BLOCKrR   r+   extendr   r2   r   r   r   r   appendr   r#   r/   r0   r1   r   r   r  rC   r   )r9   r   resultra   groupr   lowr  r   r   Zprerelease_clausesZnon_prerel_clausesr   r   r   r   r,     sd    





	


zNpmSpec.Parser.parser   r   r{   r}   r|   rx   ry   rM   r   c                 C   s  | j |}| \}}}}}}| j||}|| jv r<d nt|}	|| jv rRd nt|}
|| jv rhd nt|}|d ur|| jfvrd }|	d u rtdddd}|| j| j	fvrt
d| | j	}nb|
d u rt|	ddd}nJ|d u rt|	|
dd}n2t|	|
||r
|dnd|r|dndd}|	d u sB|
d u sB|d u rZ|sN|rZt
d| || jkr|jr||  }nR|jr|  }n<|
d u r|  }n$|d u r|  }n|  }| tj|| tj|gS || jkr<|	d usJ |
d u r| }n| }| tj|| tj|gS || jkr|	d u rb| tj|gS |
d u r| tj|| tj| gS |d u r| tj|| tj| gS | tj|gS n|| jkr2|	d usJ |
d u r| tj| gS |d u r | tj| gS | tj|gS n|| j	krN| tj|gS || jkrx|	d ushJ | 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 d S )Nr   r   zInvalid expression %rrD   r   r   zInvalid NPM spec: %r)r  rR   ra   r   r   r   r   r   r#   r  r+   rV   r  r/   rC   r?   r0   r@   rA   r  r   r   r   r  r   r  r   r  r  r   )r9   r   rR   r
  r  r  r  r  r3   r/   r0   r1   r   r  r   r   r   r  N  s    *





 
 



zNpmSpec.Parser.parse_simpleN) r   r   r   r  r  r  ZPARTrP   rQ   r  r  r  rt   r  r,   r  r  r   r  r  r  r  r   r   r   r   r   r   r   ZPREFIX_TO_OPERATORr   r  r   r   r   r   r     s>   


;r   Nr  r   r   r   r   r    s   
r  )	functoolsrP   r(   r   objectr	   total_orderingr   r   r#   rv   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r   <module>   s@   
   /X	S#?Ao .#