U
    sVcb?                  	   @  s  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
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
eef Ze
ee	eef f Ze
eeef Ze
ee	e
ee	eef e	eef f df f Ze	ee	edf eeeef Ze	ee	edf f Zee
eef e
eef gef ZedddddddgZddd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"d#d$d%Z&dd&dd'd(Z'd)Z(G d*d de Z)dd+d,d-d.d/Z*e"d0Z+dd1d2d3d4Z,d5d6d,d,d,d7d8d9d:d;Z-dS )<    )annotationsN)CallableIteratorSupportsIntTupleUnionparseVersionLegacyVersionInvalidVersionVERSION_PATTERNc                   @  s   e Zd ZddddZddddZdd	d
ddZdd	d
ddZdd	d
ddZdd	d
ddZdd	d
ddZ	dd	d
ddZ
dddddZdS )InfinityTypestrreturnc                 C  s   dS )NInfinity selfr   r   @/tmp/pip-unpacked-wheel-xj8nt62q/pandas/util/version/__init__.py__repr__   s    zInfinityType.__repr__intc                 C  s   t t| S Nhashreprr   r   r   r   __hash__   s    zInfinityType.__hash__objectboolotherr   c                 C  s   dS NFr   r   r    r   r   r   __lt__!   s    zInfinityType.__lt__c                 C  s   dS r!   r   r"   r   r   r   __le__$   s    zInfinityType.__le__c                 C  s   t |t| S r   
isinstancetyper"   r   r   r   __eq__'   s    zInfinityType.__eq__c                 C  s   t |t|  S r   r%   r"   r   r   r   __ne__*   s    zInfinityType.__ne__c                 C  s   dS NTr   r"   r   r   r   __gt__-   s    zInfinityType.__gt__c                 C  s   dS r*   r   r"   r   r   r   __ge__0   s    zInfinityType.__ge__NegativeInfinityTyper   r   c                 C  s   t S r   )NegativeInfinityr   r   r   r   __neg__3   s    zInfinityType.__neg__N__name__
__module____qualname__r   r   r#   r$   r(   r)   r+   r,   r0   r   r   r   r   r      s   r   c                   @  s   e Zd ZddddZddddZdd	d
ddZdd	d
ddZdd	d
ddZdd	d
ddZdd	d
ddZ	dd	d
ddZ
dddddZdS )r-   r   r   c                 C  s   dS )Nz	-Infinityr   r   r   r   r   r   ;   s    zNegativeInfinityType.__repr__r   c                 C  s   t t| S r   r   r   r   r   r   r   >   s    zNegativeInfinityType.__hash__r   r   r   c                 C  s   dS r*   r   r"   r   r   r   r#   A   s    zNegativeInfinityType.__lt__c                 C  s   dS r*   r   r"   r   r   r   r$   D   s    zNegativeInfinityType.__le__c                 C  s   t |t| S r   r%   r"   r   r   r   r(   G   s    zNegativeInfinityType.__eq__c                 C  s   t |t|  S r   r%   r"   r   r   r   r)   J   s    zNegativeInfinityType.__ne__c                 C  s   dS r!   r   r"   r   r   r   r+   M   s    zNegativeInfinityType.__gt__c                 C  s   dS r!   r   r"   r   r   r   r,   P   s    zNegativeInfinityType.__ge__r   r.   c                 C  s   t S r   )r   r   r   r   r   r0   S   s    zNegativeInfinityType.__neg__Nr1   r   r   r   r   r-   :   s   r-   ._Versionepochreleasedevprepostlocalr   zLegacyVersion | Versionversionr   c                 C  s,   z
t | W S  tk
r&   t|  Y 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
   )r=   r   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)r2   r3   r4   __doc__r   r   r   r   r      s   c                   @  s   e Zd ZU ded< ddddZd ddd	d
Zd ddddZdddddZd ddddZd ddddZ	dddddZ
dS )_BaseVersionzCmpKey | LegacyCmpKey_keyr   r   c                 C  s
   t | jS r   )r   r@   r   r   r   r   r      s    z_BaseVersion.__hash__r   r   c                 C  s   t |tstS | j|jk S r   r&   r?   NotImplementedr@   r"   r   r   r   r#      s    
z_BaseVersion.__lt__c                 C  s   t |tstS | j|jkS r   rA   r"   r   r   r   r$      s    
z_BaseVersion.__le__r   c                 C  s   t |tstS | j|jkS r   rA   r"   r   r   r   r(      s    
z_BaseVersion.__eq__c                 C  s   t |tstS | j|jkS r   rA   r"   r   r   r   r,      s    
z_BaseVersion.__ge__c                 C  s   t |tstS | j|jkS r   rA   r"   r   r   r   r+      s    
z_BaseVersion.__gt__c                 C  s   t |tstS | j|jkS r   rA   r"   r   r   r   r)      s    
z_BaseVersion.__ne__N)r2   r3   r4   __annotations__r   r#   r$   r(   r,   r+   r)   r   r   r   r   r?      s   
r?   c                   @  s   e Zd ZdddddZddddZddd	d
ZeddddZeddddZeddddZ	eddddZ
eddddZeddddZeddddZeddddZeddddZedddd Zeddd!d"Zd#S )$r
   r   Noner<   c                 C  s&   t || _t| j| _tdt d S )Nz[Creating a LegacyVersion has been deprecated and will be removed in the next major release.)r   _version_legacy_cmpkeyr@   warningswarnDeprecationWarning)r   r=   r   r   r   __init__   s    
zLegacyVersion.__init__r   c                 C  s   | j S r   rE   r   r   r   r   __str__   s    zLegacyVersion.__str__c                 C  s   d|  dS )Nz<LegacyVersion('')>r   r   r   r   r   r      s    zLegacyVersion.__repr__c                 C  s   | j S r   rK   r   r   r   r   public   s    zLegacyVersion.publicc                 C  s   | j S r   rK   r   r   r   r   base_version   s    zLegacyVersion.base_versionr   c                 C  s   dS )Nr   r   r   r   r   r6      s    zLegacyVersion.epochc                 C  s   d S r   r   r   r   r   r   r7      s    zLegacyVersion.releasec                 C  s   d S r   r   r   r   r   r   r9      s    zLegacyVersion.prec                 C  s   d S r   r   r   r   r   r   r:      s    zLegacyVersion.postc                 C  s   d S r   r   r   r   r   r   r8      s    zLegacyVersion.devc                 C  s   d S r   r   r   r   r   r   r;      s    zLegacyVersion.localr   c                 C  s   dS r!   r   r   r   r   r   is_prerelease   s    zLegacyVersion.is_prereleasec                 C  s   dS r!   r   r   r   r   r   is_postrelease   s    zLegacyVersion.is_postreleasec                 C  s   dS r!   r   r   r   r   r   is_devrelease   s    zLegacyVersion.is_devreleaseN)r2   r3   r4   rJ   rL   r   propertyrN   rO   r6   r7   r9   r:   r8   r;   rQ   rR   rS   r   r   r   r   r
      s2   
z(\d+ | [a-z]+ | \.| -)czfinal-@)r9   preview-rcr8   zIterator[str])sr   c                 c  s\   t | D ]F}t||}|r
|dkr(q
|d d dkrF|dV  q
d| V  q
dV  d S )N.   
0123456789   **final)_legacy_version_component_resplit_legacy_version_replacement_mapgetzfill)rZ   partr   r   r   _parse_version_parts   s    rg   LegacyCmpKeyc                 C  sv   d}g }t |  D ]T}|dr^|dk rD|rD|d dkrD|  q*|r^|d dkr^|  qD|| q|t|fS )NrP   r_   r`   z*final-00000000)rg   lower
startswithpopappendtuple)r=   r6   partsrf   r   r   r   rF     s    


rF   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                   @  sP  e Zd Zede d ejejB ZdddddZ	ddd	d
Z
ddddZeddddZeddddZeddddZeddddZeddddZeddddZeddddZeddd d!Zed"dd#d$Zed"dd%d&Zed"dd'd(Zeddd)d*Zeddd+d,Zeddd-d.Zd/S )0r	   z^\s*z\s*$r   rD   r<   c              
   C  s   | j |}|s td| dt|dr:t|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: ''r6   r   c                 s  s   | ]}t |V  qd S r   )r   .0ir   r   r   	<genexpr>Z  s     z#Version.__init__.<locals>.<genexpr>r7   r[   pre_lpre_npost_lpost_n1post_n2dev_ldev_nr;   )r6   r7   r9   r:   r8   r;   )_regexsearchr   r5   groupr   rn   rb   _parse_letter_version_parse_local_versionrE   _cmpkeyr6   r7   r9   r:   r8   r;   r@   )r   r=   matchr   r   r   rJ   P  s,     zVersion.__init__r   c                 C  s   d|  dS )Nz
<Version('rM   r   r   r   r   r   r   m  s    zVersion.__repr__c                 C  s   g }| j dkr || j  d |ddd | jD  | jd k	rb|ddd | jD  | jd k	r~|d| j  | jd k	r|d	| j  | jd k	r|d
| j  d|S )Nr   !r[   c                 S  s   g | ]}t |qS r   r   rr   xr   r   r   
<listcomp>x  s     z#Version.__str__.<locals>.<listcomp> c                 S  s   g | ]}t |qS r   r   r   r   r   r   r   |  s     z.postz.dev+)r6   rm   joinr7   r9   r:   r8   r;   r   ro   r   r   r   rL   p  s    




zVersion.__str__r   c                 C  s   | j j}|S r   )rE   r6   )r   _epochr   r   r   r6     s    zVersion.epochtuple[int, ...]c                 C  s   | j j}|S r   )rE   r7   )r   _releaser   r   r   r7     s    zVersion.releasetuple[str, int] | Nonec                 C  s   | j j}|S r   )rE   r9   )r   _prer   r   r   r9     s    zVersion.prez
int | Nonec                 C  s   | j jr| j jd S d S Nr\   )rE   r:   r   r   r   r   r:     s    zVersion.postc                 C  s   | j jr| j jd S d S r   )rE   r8   r   r   r   r   r8     s    zVersion.devz
str | Nonec                 C  s(   | j jr ddd | j jD S d S d S )Nr[   c                 S  s   g | ]}t |qS r   r   r   r   r   r   r     s     z!Version.local.<locals>.<listcomp>)rE   r;   r   r   r   r   r   r;     s    zVersion.localc                 C  s   t | ddd S )Nr   r\   r   )r   rb   r   r   r   r   rN     s    zVersion.publicc                 C  sF   g }| j dkr || j  d |ddd | jD  d|S )Nr   r   r[   c                 S  s   g | ]}t |qS r   r   r   r   r   r   r     s     z(Version.base_version.<locals>.<listcomp>r   )r6   rm   r   r7   r   r   r   r   rO     s
    
zVersion.base_versionr   c                 C  s   | j d k	p| jd k	S r   )r8   r9   r   r   r   r   rQ     s    zVersion.is_prereleasec                 C  s
   | j d k	S r   )r:   r   r   r   r   rR     s    zVersion.is_postreleasec                 C  s
   | j d k	S r   )r8   r   r   r   r   rS     s    zVersion.is_devreleasec                 C  s   t | jdkr| jd S dS )Nr\   r   lenr7   r   r   r   r   major  s    zVersion.majorc                 C  s   t | jdkr| jd S dS )N   r\   r   r   r   r   r   r   minor  s    zVersion.minorc                 C  s   t | jdkr| jd S dS )N   r   r   r   r   r   r   r   micro  s    zVersion.microN)r2   r3   r4   recompiler   VERBOSE
IGNORECASEr|   rJ   r   rL   rT   r6   r7   r9   r:   r8   r;   rN   rO   rQ   rR   rS   r   r   r   r   r   r   r   r	   L  s@   zstr | bytes | SupportsIntr   )letternumberr   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)rU   r9   rW   rY   )revrr:   )rj   r   )r   r   r   r   r   r     s"    r   z[\._-]zLocalType | None)r;   r   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 r   )isdigitrj   r   )rr   rf   r   r   r   rt      s   z'_parse_local_version.<locals>.<genexpr>)rn   _local_version_separatorsrb   )r;   r   r   r   r     s
    r   r   r   ztuple[SubLocalType] | NoneCmpKey)r6   r7   r9   r:   r8   r;   r   c                 C  s   t tttdd t|}|d kr>|d kr>|d k	r>t}n|d krLt}n|}|d kr^t}n|}|d krpt}	n|}	|d krt}
nt dd |D }
| ||||	|
fS )Nc                 S  s   | dkS )Nr   r   )r   r   r   r   <lambda>      z_cmpkey.<locals>.<lambda>c                 s  s(   | ] }t |tr|d fnt|fV  qdS )r   N)r&   r   r/   rq   r   r   r   rt   ?  s    z_cmpkey.<locals>.<genexpr>)rn   reversedlist	itertools	dropwhiler/   r   )r6   r7   r9   r:   r8   r;   r   r   _post_dev_localr   r   r   r     s(    	r   ).
__future__r   collectionsr   r   typingr   r   r   r   r   rG   __all__r   r   r-   r/   ZInfiniteTypesr   r   ZPrePostDevTypeZSubLocalTypeZ	LocalTyper   rh   r   ZVersionComparisonMethod
namedtupler5   r   
ValueErrorr   r?   r
   r   r   ra   rc   rg   rF   r   r	   r   r   r   r   r   r   r   r   <module>	   st   

 .>	  	$
