o
    8)iL                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d d	l
mZ d
dlmZ d
dlmZ d
dlmZ er~d dlZejdkrnd dl
mZ d dl
mZ nd dlmZ d dlmZ edZd dl
mZ d
dlmZ d
dlmZ d
dlmZ d
dlm Z  e!e"Z#dZ$dZ%dZ&G dd deZ'dxd!d"Z(dyd(d)Z)dzd,d-Z*d{d/d0Z+ej,G d1d2 d2Z-d|d6d7Z.d d8dd8dddd9d}dEdFZ/d~dHdIZ0ddKdLZ1	MdddPdQZ2ddRdSZ3ddTdUZ4ddVdWZ5ddXdYZ6ddZd[Z7e8d\ej9Z:dd_d`Z;			dddddeZ<ddfdgZ=ddhdiZ>ddjdkZ?ddldmZ@ddndoZAddpdqZBddtduZCddvdwZDdS )    )annotationsN)date)datetime)timezone)TYPE_CHECKING)Any)Callable)Match   )_entrypoints)_modify_version)_format_node_for_output)   
   )Concatenate)	ParamSpec_P)	TypedDict)_config)_version_cls)Version)	_VersionT   r   c                   @  s&   e Zd ZU ded< ded< ded< dS )_TagDictstrversionprefixsuffixN)__name__
__module____qualname____annotations__ r"   r"   Q/home/app/PyTorch/.pytorch/lib/python3.10/site-packages/setuptools_scm/version.pyr   0   s   
 r   tagstr | objectconfig_config.Configurationreturn_TagDict | Nonec                 C  s   |j t| }|rct| dkrdnd}|d}td| |j | td|| | | || }rVt	||d |
| |||d  d}td| | |S td|j j d	|  d
td|  d S )Nr
   r   r   z%r %r %szkey %s data %s, %s, %r)r   r   r   ztag %r parsed to %rzThe tag_regex "z" matched tag "z*", however the matched group has no value.ztag %r did not parse)Z	tag_regexmatchr   lengroupsgrouplogdebug	groupdictr   startend
ValueErrorpattern)r$   r&   r*   keyfullr   resultr"   r"   r#   _parse_version_tag6   s*   
r8   r-   r   callable_or_name	str | Anyr   c                 C  s0   t d| | t|r|S ddlm} || |S )Nzep %r %rr
   )_get_ep)r.   r/   callabler   r;   )r-   r9   r;   r"   r"   r#   callable_or_entrypointW   s
   
r=   _VersionT | str_VersionT | Nonec                 C  s*  t d|  t| |}|du s|dds td| d dS |d }t d| z||}t d| W n% ty\   td| d|d	d
 ||}t d| | Y S w |d	d
 }rt d| | z||| }t d| |W S  ty   td| d| | Y S w |S )z[
    take a tag that might be prefixed with a keyword and return only the version part
    ztag %sNr   ztag z no version foundzversion pre parse %sz
version=%rz  will be stripped of its suffix r    z2tag %r includes local build data %r, preserving itzversion with suffix=%r)r.   r/   r8   getwarningswarnversion_cls	Exception)r$   r&   Ztag_dictversion_strr   r   Zversion_with_suffixr"   r"   r#   tag_to_versionb   s:   



rG   r   c                  C  s2   dt jv rtt jd } t| tjS ttjS )NSOURCE_DATE_EPOCH)osenvironintr   fromtimestampr   utcnow)Z
date_epochr"   r"   r#   _source_epoch_or_utc_now   s   
rO   c                   @  s   e Zd ZU dZded< 	 ded< 	 dZded< 	 d	Zd
ed< 	 dZded< 	 dZded< 	 d	Z	d
ed< 	 d	Z
ded< 	 ejedZded< 	 ed/ddZed0ddZd1ddZd2d!d"Zd3d%d&Z	'd4d5d-d.Zd	S )6
ScmVersionz$represents a parsed version from scmz$_v.Version | _v.NonNormalizedVersionr$   r'   r&   r   rK   distanceN
str | NonenodeFbooldirtypreformattedbranchdate | None	node_date)default_factoryr   timer(   c                 C  s   | j dko| j S )zDreturns true checked out exactly on a tag and no local changes applyr   )rQ   rU   selfr"   r"   r#   exact   s   zScmVersion.exactc                 C  s
   t | jS )z%Return the node formatted for output.)r   rS   r\   r"   r"   r#   
short_node   s   
zScmVersion.short_noder   c                 C  s.   d| j  d| j d| j d| j d| j dS )Nz<ScmVersion z dist=z node=z dirty=z branch=>)r$   rQ   rS   rU   rW   r\   r"   r"   r#   __repr__   s   zScmVersion.__repr__fmtkwobjectc              
   K  s2   |j d| j| j| jt| j| j| j| jd|S )z;format a given format string with attributes of this object)r[   r$   rQ   rS   rU   rW   rY   Nr"   )	formatr[   r$   rQ   r   rS   rU   rW   rY   )r]   rb   rc   r"   r"   r#   format_with   s   zScmVersion.format_withclean_formatdirty_formatc                 K  s   | j | jr|n|fi |S )zxgiven `clean_format` and `dirty_format`

        choose one based on `self.dirty` and format it using `self.format_with`)rf   rU   )r]   rg   rh   rc   r"   r"   r#   format_choice   s   zScmVersion.format_choice{guessed}.dev{distance}
guess_next*Callable[Concatenate[ScmVersion, _P], str]k_P.args	_P.kwargsc                 O  s$   || g|R i |}| j ||dS )N)guessedrf   )r]   rk   rb   rm   rc   rp   r"   r"   r#   format_next_version   s   zScmVersion.format_next_version)r(   rT   )r(   rR   )r(   r   )rb   r   rc   rd   r(   r   )rg   r   rh   r   rc   rd   r(   r   )rj   )
rk   rl   rb   r   rm   rn   rc   ro   r(   r   )r   r   r    __doc__r!   rQ   rS   rU   rV   rW   rY   dataclassesfieldrO   r[   propertyr^   r_   ra   rf   ri   rr   r"   r"   r"   r#   rP      s:   
 



rP   rV   rT   r   c                 C  sF   |rt | trt| S | S t | |js!t| |}|d usJ |S | S N)
isinstancer   _vNonNormalizedVersionrD   rG   )r$   rV   r&   r   r"   r"   r#   
_parse_tag   s   


r{   F)rQ   rU   rS   rV   rW   rY   r[   str | _VersionTrQ   rK   rU   rS   rR   rW   rY   rX   r[   datetime | Nonec             
   C  s|   |rt | trt| }	nt| ||}	td| |	 |	d us%J d|  t|	|||||||d}
|d ur<tj	|
|d}
|
S )Nzversion %s -> %szCan't parse version )rQ   rS   rU   rV   rW   r&   rY   )r[   )
rx   r   ry   rz   r{   r.   inforP   rt   replace)r$   rQ   rU   rS   rV   rW   r&   rY   r[   parsed_versionZscm_versionr"   r"   r#   meta   s$   
r   tag_versionc                 C  s$   t t| j}t |pt |S rw   )r   Zstrip_localr   r$   Z	_bump_devZ_bump_regex)r   r   r"   r"   r#   guess_next_version  s   r   r   c                 C  s   | j r| dS | tS N{tag})r^   rf   rr   r   r   r"   r"   r#   guess_next_dev_version      

r   Tretain	incrementc                 C  s   t | jtjrt| jjd | }n#zdd t| jdd | D }W n ty4   t|  dd w t	||k rF|
d t	||k s;|rP|d  d7  < t	|tk ra|
d t	|tk sVddd	 |D S )
Nc                 S  s   g | ]}t |qS r"   )rK   .0ir"   r"   r#   
<listcomp>.  s    z,guess_next_simple_semver.<locals>.<listcomp>.z# can't be parsed as numeric versionr   r
   c                 s  s    | ]}t |V  qd S rw   )r   r   r"   r"   r#   	<genexpr>7  s    z+guess_next_simple_semver.<locals>.<genexpr>)rx   r$   ry   r   listreleaser   splitr3   r+   append
SEMVER_LENjoin)r   r   r   partsr"   r"   r#   guess_next_simple_semver'  s    &

r   c                 C  sD   | j r
t| tddS | jd urd| jv r| jttdS | jttdS )NF)r   r   featurer   )r^   r   r   rW   rr   SEMVER_MINORSEMVER_PATCHr   r"   r"   r#   simplified_semver_version:  s   r   c                 C  s   | j r| dS | jd urKt| jdd | j}|d urK|d }|d dkr-|dd  }t| jdd t }|dd t }||krK| 	t
S | j	ttd	S )
Nr   /r   r   r   vr
   r   r   )r^   rf   rW   r8   r   r&   r   r$   r   rr   r   r   )r   Zbranch_ver_data
branch_verZtag_ver_up_to_minorZbranch_ver_up_to_minorr"   r"   r#   release_branch_semver_versionG  s   


r   c                 C  s   t jdtdd t| S )Nzprelease_branch_semver is deprecated and will be removed in the future. Use release_branch_semver_version insteadr   )category
stacklevel)rB   rC   DeprecationWarningr   r   r"   r"   r#   release_branch_semver`  s   r   c                 C  s
   |  dS r   rq   r   r"   r"   r#   only_versionj     
r   c                 C  s   | j r| dS | tjS r   )r^   rf   rr   r   Z_dont_guess_next_versionr   r"   r"   r#   no_guess_dev_versionn  s   
r   z|
    ^(?P<date>
        (?P<prefix>[vV]?)
        (?P<year>\d{2}|\d{4})(?:\.\d{1,2}){2})
        (?:\.(?P<patch>\d*))?$
    verMatch[str] | Nonec                 C  s
   t | S rw   )_DATE_REGEXr*   )r   r"   r"   r#   date_ver_match  r   r   date_fmtrD   type | Nonec                 C  sP  t t| j}|du rt|  d |du rd}n!|du r+t|ddkr)dnd}|d }r;||s;|| }| j	 }|pC|}|du rVdd	l
m} ||d
d }	nt
|d|jtjd	 }	|	|kr||duspJ t|dpwdd
 }
n|	|kr|durtd|	 d| d d}
dj|||
d}|du rt}t||}|S )z\
    same-day -> patch +1
    other-day -> today

    distance is always added as .devX
    NzH does not correspond to a valid versioning date, assuming legacy versionz%y.%m.%dyear   z%Y.%m.%dr   r   )	timedeltar
   )daysr   )tzinfopatch0zyour previous tag  (z) is ahead your node date ()z{node_date:{date_fmt}}.{patch})rY   r   r   )r   r   r$   rB   rC   r+   r-   
startswithr[   r   r   r   strptimer   r   rM   rK   re   
PkgVersion)r   rY   r   rD   r*   r   todayZ	head_dater   Ztag_dater   Znext_versionr"   r"   r#   guess_next_date_ver  sL   

r   c                 C  sz   | j r| js| dS | jd ur2| jdr2t| jdd | j}|d ur2|d }t|}|r2|S | j	t
| j| jjdS )Nr   zrelease--r   r   )rY   rD   )r^   rU   rf   rW   r   r8   r   r&   r   rr   r   rY   rD   )r   r   r   r*   r"   r"   r#   calver_by_date  s   
r   c                 C     t j| ddS )Nz%Y%m%dtime_formatr   Z_format_local_with_timer   r"   r"   r#   get_local_node_and_date     r   c                 C  r   )Nz%Y%m%d%H%M%Sr   r   r   r"   r"   r#   get_local_node_and_timestamp  r   r   c                 C  s   |  ddS )Nr@   z+dirty)ri   r   r"   r"   r#   get_local_dirty_tag  s   r   c                 C  s   dS )Nr@   r"   r   r"   r"   r#   get_no_local_node  s   r   c                 C  s   | j r| dS | dS )Nr   z{tag}.post{distance})r^   rf   r   r"   r"   r#   postrelease_version  r   r   main_versionlocal_partsc           	      G  s   d| v r|  dd\}}| d}n| }g }|D ]&}|r | s!q|d}|s)q| d}|D ]}|r=||vr=|| q0q|rJ|d d| S |S )a  
    Combine a main version with multiple local parts into a valid PEP 440 version string.
    Handles deduplication of local parts to avoid adding the same local data twice.

    Args:
        main_version: The main version string (e.g., "1.2.0", "1.2.dev3")
        *local_parts: Variable number of local version parts, can be None or empty

    Returns:
        A valid PEP 440 version string

    Examples:
        _combine_version_with_local_parts("1.2.0", "build.123", "d20090213") -> "1.2.0+build.123.d20090213"
        _combine_version_with_local_parts("1.2.0", "build.123", None) -> "1.2.0+build.123"
        _combine_version_with_local_parts("1.2.0+build.123", "d20090213") -> "1.2.0+build.123.d20090213"
        _combine_version_with_local_parts("1.2.0+build.123", "build.123") -> "1.2.0+build.123"  # no duplication
        _combine_version_with_local_parts("1.2.0", None, None) -> "1.2.0"
    +r
   r   )r   stripr   r   )	r   r   Z	main_partZexisting_localZall_local_partspartZ
clean_partZpart_segmentssegmentr"   r"   r#   !_combine_version_with_local_parts  s(   


r   c                 C  s   t d|  t d| j | jrt| jS d}t| jdr)| jjd ur)t| jj}ddlm	} t| jj
}| j|}|| |d}t|d| jj}t d	| |d usVJ t| d
| jjd}t d| tt|||S )Nzscm version %sz	config %sr@   localr   )r   )r$   zsetuptools_scm.version_schemez
version %szsetuptools_scm.local_schemez+unknownzlocal_version %s)r.   r/   r&   rV   r   r$   hasattrr   rt   r   publicrD   r   Z_call_version_schemeZversion_schemeZlocal_schemer   )r   Zoriginal_localr   Zbase_version_strZbase_tagZversion_for_schemer   local_versionr"   r"   r#   format_version$  s2   

r   )r$   r%   r&   r'   r(   r)   )r-   r   r9   r:   r(   r   )r$   r>   r&   r'   r(   r?   )r(   r   )r$   r>   rV   rT   r&   r'   r(   r   )r$   r|   rQ   rK   rU   rT   rS   rR   rV   rT   rW   rR   r&   r'   rY   rX   r[   r}   r(   rP   )r   rP   r(   r   )r   rP   r(   r   )T)r   rP   r   rK   r   rT   r(   r   )r   r   r(   r   )NNN)
r   rP   rY   rX   r   rR   rD   r   r(   r   )r   r   r   rR   r(   r   )E
__future__r   rt   loggingrI   rerB   r   r   r   typingr   r   r   r	   r@   r   r   Z_node_utilsr   sysversion_infor   r   Ztyping_extensionsr   r   r   r   ry   r   r   r   	getLoggerr   r.   r   r   r   r   r8   r=   rG   rO   	dataclassrP   r{   r   r   r   r   r   r   r   r   r   compileVERBOSEr   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s    



!

-
H
'








A





6