B
    0d6              	   @   s  d Z ddlZddlZddlZdddddgZG dd	 d	Ze ZG d
d dZe ZedddddddgZdd Z	G dd de
ZG dd dZG dd deZedejZddddddZdd Zdd  Zd!ZG d"d deZd#d$ Zed%Zd&d' Zd(d) ZdS )*zUtility to compare pep440 compatible version strings.

The LooseVersion and StrictVersion classes that distutils provides don't
work; they don't recognize anything like alpha/beta/rc/dev versions.
    NparseVersionLegacyVersionInvalidVersionVERSION_PATTERNc               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )Infinityc             C   s   dS )Nr    )selfr   r   D/var/www/html/venv/lib/python3.7/site-packages/scipy/_lib/_pep440.py__repr__.   s    zInfinity.__repr__c             C   s   t t| S )N)hashrepr)r	   r   r   r
   __hash__1   s    zInfinity.__hash__c             C   s   dS )NFr   )r	   otherr   r   r
   __lt__4   s    zInfinity.__lt__c             C   s   dS )NFr   )r	   r   r   r   r
   __le__7   s    zInfinity.__le__c             C   s   t || jS )N)
isinstance	__class__)r	   r   r   r   r
   __eq__:   s    zInfinity.__eq__c             C   s   t || j S )N)r   r   )r	   r   r   r   r
   __ne__=   s    zInfinity.__ne__c             C   s   dS )NTr   )r	   r   r   r   r
   __gt__@   s    zInfinity.__gt__c             C   s   dS )NTr   )r	   r   r   r   r
   __ge__C   s    zInfinity.__ge__c             C   s   t S )N)NegativeInfinity)r	   r   r   r
   __neg__F   s    zInfinity.__neg__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r
   r   -   s   r   c               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )r   c             C   s   dS )Nz	-Infinityr   )r	   r   r   r
   r   N   s    zNegativeInfinity.__repr__c             C   s   t t| S )N)r   r   )r	   r   r   r
   r   Q   s    zNegativeInfinity.__hash__c             C   s   dS )NTr   )r	   r   r   r   r
   r   T   s    zNegativeInfinity.__lt__c             C   s   dS )NTr   )r	   r   r   r   r
   r   W   s    zNegativeInfinity.__le__c             C   s   t || jS )N)r   r   )r	   r   r   r   r
   r   Z   s    zNegativeInfinity.__eq__c             C   s   t || j S )N)r   r   )r	   r   r   r   r
   r   ]   s    zNegativeInfinity.__ne__c             C   s   dS )NFr   )r	   r   r   r   r
   r   `   s    zNegativeInfinity.__gt__c             C   s   dS )NFr   )r	   r   r   r   r
   r   c   s    zNegativeInfinity.__ge__c             C   s   t S )N)r   )r	   r   r   r
   r   f   s    zNegativeInfinity.__neg__N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   M   s   r   _Versionepochreleasedevprepostlocalc             C   s&   yt | S  tk
r    t| S X dS )z
    Parse the given version string and return either a :class:`Version` object
    or a :class:`LegacyVersion` object depending on if the given version is
    a valid PEP 440 version or a legacy version.
    N)r   r   r   )versionr   r   r
   r   u   s    c               @   s   e Zd ZdZdS )r   zF
    An invalid version was found, users should refer to PEP 440.
    N)r   r   r   __doc__r   r   r   r
   r      s   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_BaseVersionc             C   s
   t | jS )N)r   _key)r	   r   r   r
   r      s    z_BaseVersion.__hash__c             C   s   |  |dd S )Nc             S   s   | |k S )Nr   )sor   r   r
   <lambda>       z%_BaseVersion.__lt__.<locals>.<lambda>)_compare)r	   r   r   r   r
   r      s    z_BaseVersion.__lt__c             C   s   |  |dd S )Nc             S   s   | |kS )Nr   )r(   r)   r   r   r
   r*      r+   z%_BaseVersion.__le__.<locals>.<lambda>)r,   )r	   r   r   r   r
   r      s    z_BaseVersion.__le__c             C   s   |  |dd S )Nc             S   s   | |kS )Nr   )r(   r)   r   r   r
   r*      r+   z%_BaseVersion.__eq__.<locals>.<lambda>)r,   )r	   r   r   r   r
   r      s    z_BaseVersion.__eq__c             C   s   |  |dd S )Nc             S   s   | |kS )Nr   )r(   r)   r   r   r
   r*      r+   z%_BaseVersion.__ge__.<locals>.<lambda>)r,   )r	   r   r   r   r
   r      s    z_BaseVersion.__ge__c             C   s   |  |dd S )Nc             S   s   | |kS )Nr   )r(   r)   r   r   r
   r*      r+   z%_BaseVersion.__gt__.<locals>.<lambda>)r,   )r	   r   r   r   r
   r      s    z_BaseVersion.__gt__c             C   s   |  |dd S )Nc             S   s   | |kS )Nr   )r(   r)   r   r   r
   r*      r+   z%_BaseVersion.__ne__.<locals>.<lambda>)r,   )r	   r   r   r   r
   r      s    z_BaseVersion.__ne__c             C   s   t |tstS || j|jS )N)r   r&   NotImplementedr'   )r	   r   methodr   r   r
   r,      s    
z_BaseVersion._compareN)r   r   r   r   r   r   r   r   r   r   r,   r   r   r   r
   r&      s   r&   c               @   s`   e Zd Zdd Zdd Zdd Zedd Zed	d
 Zedd Z	edd Z
edd ZdS )r   c             C   s   t || _t| j| _d S )N)str_version_legacy_cmpkeyr'   )r	   r$   r   r   r
   __init__   s    
zLegacyVersion.__init__c             C   s   | j S )N)r0   )r	   r   r   r
   __str__   s    zLegacyVersion.__str__c             C   s   d tt| S )Nz<LegacyVersion({0})>)formatr   r/   )r	   r   r   r
   r      s    zLegacyVersion.__repr__c             C   s   | j S )N)r0   )r	   r   r   r
   public   s    zLegacyVersion.publicc             C   s   | j S )N)r0   )r	   r   r   r
   base_version   s    zLegacyVersion.base_versionc             C   s   d S )Nr   )r	   r   r   r
   r#      s    zLegacyVersion.localc             C   s   dS )NFr   )r	   r   r   r
   is_prerelease   s    zLegacyVersion.is_prereleasec             C   s   dS )NFr   )r	   r   r   r
   is_postrelease   s    zLegacyVersion.is_postreleaseN)r   r   r   r2   r3   r   propertyr5   r6   r#   r7   r8   r   r   r   r
   r      s   z(\d+ | [a-z]+ | \.| -)czfinal-@)r!   preview-rcr    c             c   s`   xTt | D ]F}t||}|r|dkr*q|d d dkrH|dV  qd| V  qW dV  d S )N.   
0123456789   *z*final)_legacy_version_component_resplit_legacy_version_replacement_mapgetzfill)r(   partr   r   r
   _parse_version_parts   s    rJ   c             C   s   d}g }xlt |  D ]\}|drh|dk rJx|rH|d dkrH|  q.W x|rf|d dkrf|  qLW || qW t|}||fS )NrC   z*finalz*final-00000000)rJ   lower
startswithpopappendtuple)r$   r   partsrI   r   r   r
   r1      s    
r1   a  
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
c               @   s|   e Zd Zede d ejejB Zdd Z	dd Z
dd Zed	d
 Zedd Zedd Zedd Zedd ZdS )r   z^\s*z\s*$c          
   C   s   | j |}|std|t|dr8t|dndtdd |ddD t	|d|d	t	|d
|dp|dt	|d|dt
|dd| _t| jj| jj| jj| jj| jj| jj| _d S )NzInvalid version: '{0}'r   r   c             s   s   | ]}t |V  qd S )N)int).0ir   r   r
   	<genexpr>-  s    z#Version.__init__.<locals>.<genexpr>r   r?   pre_lpre_npost_lpost_n1post_n2dev_ldev_nr#   )r   r   r!   r"   r    r#   )_regexsearchr   r4   r   grouprS   rQ   rE   _parse_letter_version_parse_local_versionr0   _cmpkeyr   r   r!   r"   r    r#   r'   )r	   r$   matchr   r   r
   r2   $  s.    

zVersion.__init__c             C   s   d tt| S )Nz<Version({0})>)r4   r   r/   )r	   r   r   r
   r   G  s    zVersion.__repr__c             C   s   g }| j jdkr$|d| j j |ddd | j jD  | j jd k	rl|ddd | j jD  | j jd k	r|d| j jd	  | j jd k	r|d
| j jd	  | j j	d k	r|dddd | j j	D  d|S )Nr   z{0}!r?   c             s   s   | ]}t |V  qd S )N)r/   )rT   xr   r   r
   rV   R  s    z"Version.__str__.<locals>.<genexpr> c             s   s   | ]}t |V  qd S )N)r/   )rT   re   r   r   r
   rV   V  s    z.post{0}r@   z.dev{0}z+{0}c             s   s   | ]}t |V  qd S )N)r/   )rT   re   r   r   r
   rV   c  s    )
r0   r   rP   r4   joinr   r!   r"   r    r#   )r	   rR   r   r   r
   r3   J  s     zVersion.__str__c             C   s   t | ddd S )N+r@   r   )r/   rE   )r	   r   r   r
   r5   h  s    zVersion.publicc             C   sL   g }| j jdkr$|d| j j |ddd | j jD  d|S )Nr   z{0}!r?   c             s   s   | ]}t |V  qd S )N)r/   )rT   re   r   r   r
   rV   u  s    z'Version.base_version.<locals>.<genexpr>rf   )r0   r   rP   r4   rg   r   )r	   rR   r   r   r
   r6   l  s
    zVersion.base_versionc             C   s$   t | }d|kr |ddd S d S )Nrh   r@   )r/   rE   )r	   version_stringr   r   r
   r#   y  s    zVersion.localc             C   s   t | jjp| jjS )N)boolr0   r    r!   )r	   r   r   r
   r7     s    zVersion.is_prereleasec             C   s   t | jjS )N)rj   r0   r"   )r	   r   r   r
   r8     s    zVersion.is_postreleaseN)r   r   r   recompiler   VERBOSE
IGNORECASEr^   r2   r   r3   r9   r5   r6   r#   r7   r8   r   r   r   r
   r     s   
#c             C   sv   | rZ|d krd}|   } | dkr&d} n(| dkr4d} n| dkrBd} n| dkrNd	} | t|fS | sr|rrd	} | t|fS d S )
Nr   alphaabetab)r:   r!   r<   r>   )revrr"   )rM   rS   )letternumberr   r   r
   ra     s     ra   z[\._-]c             C   s$   | dk	r t dd t| D S dS )zR
    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
    Nc             s   s&   | ]}|  s| nt|V  qd S )N)isdigitrM   rS   )rT   rI   r   r   r
   rV     s   z'_parse_local_version.<locals>.<genexpr>)rQ   _local_version_seperatorsrE   )r#   r   r   r
   rb     s    rb   c             C   s   t tttdd t|}|d kr@|d kr@|d k	r@t }n|d krLt}|d krZt }|d krft}|d krvt }nt dd |D }| |||||fS )Nc             S   s   | dkS )Nr   r   )re   r   r   r
   r*     r+   z_cmpkey.<locals>.<lambda>c             s   s*   | ]"}t |tr|d fnt |fV  qdS )rf   N)r   rS   r   )rT   rU   r   r   r
   rV     s   z_cmpkey.<locals>.<genexpr>)rQ   reversedlist	itertools	dropwhiler   )r   r   r!   r"   r    r#   r   r   r
   rc     s&    		
rc   )r%   collectionsr{   rk   __all__r   r   
namedtupler   r   
ValueErrorr   r&   r   rl   rm   rD   rF   rJ   r1   r   r   ra   rx   rb   rc   r   r   r   r
   <module>   s4    !
:k
