<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
Pf\                 @   sZ  d Z ddlZddlZddlmZ ddddd	d
ddgZejeZG dd de	Z
G dd deZG dd deZejdZdd ZeZG dd deZdd ZG dd deZejddfejddfejddfejddfejd d!fejd"d!fejd#d$fejd%d&fejd'd(fejd)d*ff
Zejd+dfejd,dfejd-d$fejd#d$fejd.dffZejd/Zd0d1 Zd2d3 Zejd4ejZd5d5d6d5d7ddd8Zd9d: ZG d;d deZG d<d deZejd=ejZ d>d? Z!d@dA Z"G dBd	 d	eZ#G dCd
 d
eZ$G dDdE dEeZ%e%eeee%eedFdG e%e"e$edHZ&e&dI e&dJ< dKd Z'dS )Lz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
    N   )string_typesNormalizedVersionNormalizedMatcherLegacyVersionLegacyMatcherSemanticVersionSemanticMatcherUnsupportedVersionError
get_schemec               @   s   e Zd ZdZdS )r
   zThis is an unsupported version.N)__name__
__module____qualname____doc__ r   r   /usr/lib/python3.6/version.pyr
      s   c               @   sx   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d Zdd Zdd Zedd ZdS )Versionc             C   s"   |j   | _}| j| | _}d S )N)strip_stringparse_parts)selfspartsr   r   r   __init__   s    zVersion.__init__c             C   s   t dd S )Nzplease implement in a subclass)NotImplementedError)r   r   r   r   r   r   $   s    zVersion.parsec             C   s$   t | t |kr td| |f d S )Nzcannot compare %r and %r)type	TypeError)r   otherr   r   r   _check_compatible'   s    zVersion._check_compatiblec             C   s   | j | | j|jkS )N)r   r   )r   r   r   r   r   __eq__+   s    
zVersion.__eq__c             C   s   | j | S )N)r    )r   r   r   r   r   __ne__/   s    zVersion.__ne__c             C   s   | j | | j|jk S )N)r   r   )r   r   r   r   r   __lt__2   s    
zVersion.__lt__c             C   s   | j |p| j| S )N)r"   r    )r   r   r   r   r   __gt__6   s    zVersion.__gt__c             C   s   | j |p| j|S )N)r"   r    )r   r   r   r   r   __le__9   s    zVersion.__le__c             C   s   | j |p| j|S )N)r#   r    )r   r   r   r   r   __ge__<   s    zVersion.__ge__c             C   s
   t | jS )N)hashr   )r   r   r   r   __hash__@   s    zVersion.__hash__c             C   s   d| j j| jf S )Nz%s('%s'))	__class__r   r   )r   r   r   r   __repr__C   s    zVersion.__repr__c             C   s   | j S )N)r   )r   r   r   r   __str__F   s    zVersion.__str__c             C   s   t dd S )NzPlease implement in subclasses.)r   )r   r   r   r   is_prereleaseI   s    zVersion.is_prereleaseN)r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r)   r*   propertyr+   r   r   r   r   r      s   r   c            	   @   s   e Zd ZdZejdZejdZejdZdd dd dd d	d d
d dd dd dd dZ	dd Z
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S )!MatcherNz^(\w[\s\w'.-]*)(\((.*)\))?z'^(<=|>=|<|>|!=|={2,3}|~=)?\s*([^\s,]+)$z^\d+(\.\d+)*$c             C   s   | |k S )Nr   )vcpr   r   r   <lambda>W   s    zMatcher.<lambda>c             C   s   | |kS )Nr   )r.   r/   r0   r   r   r   r1   X   s    c             C   s   | |kp| |k S )Nr   )r.   r/   r0   r   r   r   r1   Y   s    c             C   s   | |kp| |kS )Nr   )r.   r/   r0   r   r   r   r1   Z   s    c             C   s   | |kS )Nr   )r.   r/   r0   r   r   r   r1   [   s    c             C   s   | |kS )Nr   )r.   r/   r0   r   r   r   r1   \   s    c             C   s   | |kp| |kS )Nr   )r.   r/   r0   r   r   r   r1   ^   s    c             C   s   | |kS )Nr   )r.   r/   r0   r   r   r   r1   _   s    )<>z<=z>=z==z===z~=z!=c       
      C   sJ  | j d krtd|j  | _}| jj|}|s<td| |jd}|d j | _| jj | _	g }|d r<dd |d j
dD }x|D ]}| jj|}|std	||f |j }|d pd
}|d }|jdr|dkrtd| |d d d }}	| jj|s(| j | n| j |d }}	|j|||	f qW t|| _d S )NzPlease specify a version classzNot valid: %r r      c             S   s   g | ]}|j  qS r   )r   ).0r/   r   r   r   
<listcomp>n   s    z$Matcher.__init__.<locals>.<listcomp>,zInvalid %r in %rz~=r   z.*==!=z#'.*' not allowed for %r constraintsTF)r9   r:   )version_class
ValueErrorr   r   dist_rematchgroupsnamelowerkeysplitcomp_reendswithnum_reappendtupler   )
r   r   mr@   ZclistZconstraintsr/   opZvnprefixr   r   r   r   b   s:    



zMatcher.__init__c             C   sz   t |tr| j|}x`| jD ]V\}}}| jj|}t |trFt| |}|sbd|| jjf }t	|||||sdS qW dS )z
        Check if the provided version matches the constraints.

        :param version: The version to match against this instance.
        :type version: String or :class:`Version` instance.
        z%r not implemented for %sFT)

isinstancer   r<   r   
_operatorsgetgetattrr(   r   r   )r   versionoperator
constraintrL   fmsgr   r   r   r?      s    



zMatcher.matchc             C   s6   d }t | jdkr2| jd d dkr2| jd d }|S )Nr   r   =====)rV   rW   )lenr   )r   resultr   r   r   exact_version   s     zMatcher.exact_versionc             C   s0   t | t |ks| j|jkr,td| |f d S )Nzcannot compare %s and %s)r   rA   r   )r   r   r   r   r   r      s    zMatcher._check_compatiblec             C   s"   | j | | j|jko | j|jkS )N)r   rC   r   )r   r   r   r   r   r       s    
zMatcher.__eq__c             C   s   | j | S )N)r    )r   r   r   r   r   r!      s    zMatcher.__ne__c             C   s   t | jt | j S )N)r&   rC   r   )r   r   r   r   r'      s    zMatcher.__hash__c             C   s   d| j j| jf S )Nz%s(%r))r(   r   r   )r   r   r   r   r)      s    zMatcher.__repr__c             C   s   | j S )N)r   )r   r   r   r   r*      s    zMatcher.__str__)r   r   r   r<   recompiler>   rE   rG   rN   r   r?   r,   rZ   r   r    r!   r'   r)   r*   r   r   r   r   r-   N   s*   


%r-   zk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c             C   s  | j  } tj| }|s"td|  |j }tdd |d jdD }x(t|dkrn|d dkrn|d d }qHW |d s~d}nt|d }|dd }|d	d
 }|dd }|d }|dkrf }n|d t|d f}|dkrf }n|d t|d f}|dkr
f }n|d t|d f}|d kr.f }nLg }	x>|jdD ]0}
|
j	 rZdt|
f}
nd|
f}
|	j
|
 q>W t|	}|s| r|rd}nd}|sd}|sd}||||||fS )NzNot a valid version: %sc             s   s   | ]}t |V  qd S )N)int)r6   r.   r   r   r   	<genexpr>   s    z_pep_440_key.<locals>.<genexpr>r   .r            	   
         az_finalrk   )NN)NN)NNrk   )rg   rk   )rh   )ri   )rj   )r   PEP440_VERSION_REr?   r
   r@   rI   rD   rX   r]   isdigitrH   )r   rJ   r@   ZnumsZepochpreZpostdevZlocalr   partr   r   r   _pep_440_key   sT    



rq   c               @   s6   e Zd ZdZdd ZedddddgZed	d
 ZdS )r   aI  A rational version.

    Good:
        1.2         # equivalent to "1.2.0"
        1.2.0
        1.2a1
        1.2.3a2
        1.2.3b1
        1.2.3c1
        1.2.3.4
        TODO: fill this out

    Bad:
        1           # minimum two numbers
        1.2a        # release level must have a release serial
        1.2.3b
    c             C   s<   t |}tj|}|j }tdd |d jdD | _|S )Nc             s   s   | ]}t |V  qd S )N)r]   )r6   r.   r   r   r   r^     s    z*NormalizedVersion.parse.<locals>.<genexpr>r   r_   )_normalized_keyrl   r?   r@   rI   rD   _release_clause)r   r   rY   rJ   r@   r   r   r   r     s
    
zNormalizedVersion.parserg   br/   rcro   c                s   t  fdd jD S )Nc             3   s    | ]}|r|d   j kV  qdS )r   N)PREREL_TAGS)r6   t)r   r   r   r^     s    z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)anyr   )r   r   )r   r   r+     s    zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   setrv   r,   r+   r   r   r   r   r      s   c             C   s>   t | } t |}| |krdS | j|s*dS t|}| | dkS )NTFr_   )str
startswithrX   )xynr   r   r   _match_prefix"  s    
r   c            	   @   sn   e Zd ZeZddddddd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dS )r   _match_compatible	_match_lt	_match_gt	_match_le	_match_ge	_match_eq_match_arbitrary	_match_ne)z~=r2   r3   z<=z>=z==z===z!=c             C   sV   |rd|ko|j d }n|j d  o,|j d }|rN|jjddd }| j|}||fS )N+r   r   rk   rk   rk   )r   r   rD   r<   )r   rQ   rS   rL   Zstrip_localr   r   r   r   _adjust_local<  s    
zNormalizedMatcher._adjust_localc             C   sD   | j |||\}}||krdS |j}djdd |D }t|| S )NFr_   c             S   s   g | ]}t |qS r   )rz   )r6   ir   r   r   r7   O  s    z/NormalizedMatcher._match_lt.<locals>.<listcomp>)r   rs   joinr   )r   rQ   rS   rL   release_clausepfxr   r   r   r   J  s    zNormalizedMatcher._match_ltc             C   sD   | j |||\}}||krdS |j}djdd |D }t|| S )NFr_   c             S   s   g | ]}t |qS r   )rz   )r6   r   r   r   r   r7   W  s    z/NormalizedMatcher._match_gt.<locals>.<listcomp>)r   rs   r   r   )r   rQ   rS   rL   r   r   r   r   r   r   R  s    zNormalizedMatcher._match_gtc             C   s   | j |||\}}||kS )N)r   )r   rQ   rS   rL   r   r   r   r   Z  s    zNormalizedMatcher._match_lec             C   s   | j |||\}}||kS )N)r   )r   rQ   rS   rL   r   r   r   r   ^  s    zNormalizedMatcher._match_gec             C   s.   | j |||\}}|s ||k}n
t||}|S )N)r   r   )r   rQ   rS   rL   rY   r   r   r   r   b  s
    

zNormalizedMatcher._match_eqc             C   s   t |t |kS )N)rz   )r   rQ   rS   rL   r   r   r   r   j  s    z"NormalizedMatcher._match_arbitraryc             C   s0   | j |||\}}|s ||k}nt|| }|S )N)r   r   )r   rQ   rS   rL   rY   r   r   r   r   m  s
    
zNormalizedMatcher._match_nec             C   sf   | j |||\}}||krdS ||k r*dS |j}t|dkrH|d d }djdd |D }t||S )NTFr   r_   c             S   s   g | ]}t |qS r   )rz   )r6   r   r   r   r   r7     s    z7NormalizedMatcher._match_compatible.<locals>.<listcomp>rk   )r   rs   rX   r   r   )r   rQ   rS   rL   r   r   r   r   r   r   u  s    z#NormalizedMatcher._match_compatibleN)r   r   r   r   r<   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   -  s$   z[.+-]$r4   z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$z\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}r_   z\b(alfa|apha)\balphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$betaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c             C   sZ  | j  j }xtD ]\}}|j||}qW |s2d}tj|}|sJd}|}n|j d jd}dd |D }xt|dk r|j	d qlW t|dkr||j
 d }n8djdd |dd D ||j
 d  }|dd }djd	d |D }|j  }|rxtD ]\}}|j||}qW |s*|}nd
|kr8dnd}|| | }t|sVd}|S )z
    Try to suggest a semantic form for a version for which
    _suggest_normalized_version couldn't come up with anything.
    z0.0.0r   r_   c             S   s   g | ]}t |qS r   )r]   )r6   r   r   r   r   r7     s    z-_suggest_semantic_version.<locals>.<listcomp>   Nc             S   s   g | ]}t |qS r   )rz   )r6   r   r   r   r   r7     s    c             S   s   g | ]}t |qS r   )rz   )r6   r   r   r   r   r7     s    ro   -r   )r   rB   _REPLACEMENTSsub_NUMERIC_PREFIXr?   r@   rD   rX   rH   endr   _SUFFIX_REPLACEMENTS	is_semver)r   rY   ZpatreplrJ   rL   suffixsepr   r   r   _suggest_semantic_version  s:    
,
r   c             C   sl  yt |  | S  tk
r    Y nX | j }xdBD ]\}}|j||}q0W tjdd|}tjdd|}tjdd|}tjdd|}tjdd|}|jd r|d d! }tjd"d|}tjd#d$|}tjd%d&|}tjd'd|}tjd(d)|}tjd*d)|}tjd+d
|}tjd,d-|}tjd.d&|}tjd/d0|}tjd1d2|}yt | W n tk
rf   d!}Y nX |S )Ca  Suggest a normalized version close to the given version string.

    If you have a version string that isn't rational (i.e. NormalizedVersion
    doesn't like it) then you might be able to get an equivalent (or close)
    rational version from this function.

    This does a number of simple normalizations to the given string, based
    on observation of versions currently in use on PyPI. Given a dump of
    those version during PyCon 2009, 4287 of them:
    - 2312 (53.93%) match NormalizedVersion without change
      with the automatic suggestion
    - 3474 (81.04%) match when using this suggestion method

    @param s {str} An irrational version string.
    @returns A rational version string, or None, if couldn't determine one.
    -alpharg   -betart   r   r   ru   r/   -finalr4   -pre-release.release-stabler   r_   ri    .finalrj   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?z\1r.   r   Nz\b0+(\d+)(?!\d)z(\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$z\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1r   rg   r   rt   r   rg   r   rt   ru   r/   r   r4   r   r/   r   r4   r   r4   r   r4   r   r_   ri   r_   r   r4   r   r4   rj   r4   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rr   r
   rB   replacer[   r   r{   )r   ZrsZorigr   r   r   r   _suggest_normalized_version  sH        	
r   z([a-z]+|\d+|[\.-])r/   zfinal-@)rn   Zpreviewr   ru   ro   r4   r_   c             C   s~   dd }g }xh|| D ]\}|j drh|dk rJx|rH|d dkrH|j  q.W x|rf|d	 dkrf|j  qLW |j| qW t|S )
Nc             S   sx   g }xdt j| j D ]R}tj||}|rd|d d   koBdkn  rT|jd}nd| }|j| qW |jd |S )N0r   9   *z*final)_VERSION_PARTrD   rB   _VERSION_REPLACErO   zfillrH   )r   rY   r0   r   r   r   	get_partsI  s     
z_legacy_key.<locals>.get_partsr   z*finalr   z*final-Z00000000rk   rk   )r{   poprH   rI   )r   r   rY   r0   r   r   r   _legacy_keyH  s    
r   c               @   s    e Zd Zdd Zedd ZdS )r   c             C   s   t |S )N)r   )r   r   r   r   r   r   c  s    zLegacyVersion.parsec             C   s:   d}x0| j D ]&}t|tr|jdr|dk rd}P qW |S )NFr   z*finalT)r   rM   r   r{   )r   rY   r|   r   r   r   r+   f  s    zLegacyVersion.is_prereleaseN)r   r   r   r   r,   r+   r   r   r   r   r   b  s   c               @   s4   e Zd ZeZeejZded< ej	dZ
dd ZdS )r   r   z~=z^(\d+(\.\d+)*)c             C   s`   ||k rdS | j jt|}|s2tjd|| dS |j d }d|krV|jddd }t||S )NFzACannot compute compatible match for version %s  and constraint %sTr   r_   r   )
numeric_rer?   rz   loggerZwarningr@   rsplitr   )r   rQ   rS   rL   rJ   r   r   r   r   r   y  s    zLegacyMatcher._match_compatibleN)r   r   r   r   r<   dictr-   rN   r[   r\   r   r   r   r   r   r   r   q  s
   

zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c             C   s
   t j| S )N)
_SEMVER_REr?   )r   r   r   r   r     s    r   c       	      C   sn   dd }t | }|st| |j }dd |d d D \}}}||d d||d d }}|||f||fS )	Nc             S   s8   | d kr|f}n$| dd  j d}tdd |D }|S )Nr   r_   c             S   s"   g | ]}|j  r|jd n|qS )r   )rm   r   )r6   r0   r   r   r   r7     s    z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rD   rI   )r   ZabsentrY   r   r   r   r   
make_tuple  s
    z!_semantic_key.<locals>.make_tuplec             S   s   g | ]}t |qS r   )r]   )r6   r   r   r   r   r7     s    z!_semantic_key.<locals>.<listcomp>r   |   r   )r   r
   r@   )	r   r   rJ   r@   majorminorZpatchrn   Zbuildr   r   r   _semantic_key  s    
r   c               @   s    e Zd Zdd Zedd ZdS )r   c             C   s   t |S )N)r   )r   r   r   r   r   r     s    zSemanticVersion.parsec             C   s   | j d d dkS )Nr   r   r   )r   )r   r   r   r   r+     s    zSemanticVersion.is_prereleaseN)r   r   r   r   r,   r+   r   r   r   r   r     s   c               @   s   e Zd ZeZdS )r	   N)r   r   r   r   r<   r   r   r   r   r	     s   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )VersionSchemeNc             C   s   || _ || _|| _d S )N)rC   matcher	suggester)r   rC   r   r   r   r   r   r     s    zVersionScheme.__init__c             C   s2   y| j j| d}W n tk
r,   d}Y nX |S )NTF)r   r<   r
   )r   r   rY   r   r   r   is_valid_version  s    
zVersionScheme.is_valid_versionc             C   s0   y| j | d}W n tk
r*   d}Y nX |S )NTF)r   r
   )r   r   rY   r   r   r   is_valid_matcher  s    

zVersionScheme.is_valid_matcherc             C   s   | j d| S )z:
        Used for processing some metadata fields
        zdummy_name (%s))r   )r   r   r   r   r   is_valid_constraint_list  s    z&VersionScheme.is_valid_constraint_listc             C   s   | j d krd }n
| j |}|S )N)r   )r   r   rY   r   r   r   suggest  s    

zVersionScheme.suggest)N)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   
r   c             C   s   |S )Nr   )r   r   r   r   r   r1     s    r1   )
normalizedlegacyZsemanticr   defaultc             C   s   | t krtd|  t |  S )Nzunknown scheme name: %r)_SCHEMESr=   )rA   r   r   r   r     s    )(r   Zloggingr[   compatr   __all__Z	getLoggerr   r   r=   r
   objectr   r-   r\   rl   rq   rr   r   r   r   r   r   r   r   r   Ir   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   <module>	   sz   
1k
=$W
.r	$
