o
    bB                     @  s  d dl m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 d dlmZ d dlmZ erhd 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ZdZ dZ!dddZ"dd%d&Z#	ddd*d+Z$	ddd/d0Z%G d1d2 d2Z&dd5d6Z'		7		7			dddBdCZ(ddEdFZ)ddGdHZ*ddJdKZ+ddMdNZ,ddOdPZ-ddQdRZ.ddSdTZ/	UdddYdZZ0dd[d\Z1dd]d^Z2dd_d`Z3ddadbZ4ddedfZ5			dddjdkZ6ddldmZ7ddodpZ8ddqdrZ9dddudvZ:ddwdxZ;ddzd{Z<dd|d}Z=dddZ>	ddddZ?edddZ@edddZ@dddZ@dddZAdS )    )annotationsN)date)datetime)timezone)Any)Callable)cast)Iterator)List)Match)overload)Tuple)TYPE_CHECKING)Concatenate   )_types)Version)Configuration)	_VersionT)trace      tagstr | objectconfigr   returndict[str, str] | Nonec                 C  s   t | tr| nt| }|j|}d }|r?t| dkr d}nd}|||dd || |d||d  d}t	d|  d|  |S )Nr   versionr   )r   prefixsuffixztag 'z' parsed to )

isinstancestr	tag_regexmatchlengroupsgroupstartendr   )r   r   	tagstringr#   resultkey r,   :usr/lib/python3.10/site-packages/setuptools_scm/version.py_parse_version_tag"   s   r.   r&   r!   callable_or_name	str | Anyr   c                 C  sP   t d| |f t|r|S ddlm} || |D ]}t d|j |   S d S )Nepr   iter_entry_points	ep found:)r   callable_entrypointsr3   nameload)r&   r/   r3   r1   r,   r,   r-   callable_or_entrypoint:   s   r9   _VersionT | strConfiguration | None_VersionT | Nonec                 C  s   t d|  |s
t }t| |}t|tr|dds%td| d dS |d }t d| |ddr?td	| |d  |	|}t dt
| |S )
z
    take a tag that might be prefixed with a keyword and return only the version part
    :param config: optional configuration object
    r   r   Nztag z no version foundzversion pre parser    z,tag {!r} will be stripped of its suffix '{}')r   r   r.   r    dictgetwarningswarnformatversion_clsrepr)r   r   tagdictversion_strr   r,   r,   r-   tag_to_versionF   s$   



rG   tags	list[str]list[_VersionT]c                 C  s,   g }| D ]}t ||d}|r|| q|S )z
    take tags that might be prefixed with a keyword and return only the version part
    :param tags: an iterable of tags
    :param config: optional configuration object
    )r   )rG   append)rH   r   r*   r   parsedr,   r,   r-   tags_to_versionsg   s   
rM   c                   @  sl   e Zd Z						d-d.ddZed/ddZed0ddZd1ddZd2dd Zd3d#d$Z		%d4d5d+d,Z
dS )6
ScmVersionNFtag_versionr   r   r   distance
int | Nonenode
str | Nonedirtyboolpreformattedbranch	node_datedate | Nonekwobjectc	                 K  s   |	rt d|	 || _|r|d u rd}|| _|| _|| _dtjv r0ttjd }
t	|
t
j| _ntt
j| _|	| _|| _|| _|| _|| _d S )Nzunknown argsr   SOURCE_DATE_EPOCH)r   r   rP   rR   rX   osenvironintr   fromtimestampr   utctimenow_extrarT   rV   rW   r   )selfrO   r   rP   rR   rT   rV   rW   rX   rZ   
date_epochr,   r,   r-   __init__x   s"   


zScmVersion.__init__r   dict[str, Any]c                 C  s   t jdtdd | jS )Nz<ScmVersion.extra is deprecated and will be removed in futurer   category
stacklevel)r@   rA   DeprecationWarningrd   re   r,   r,   r-   extra   s   zScmVersion.extrac                 C  s
   | j d u S N)rP   rm   r,   r,   r-   exact   s   
zScmVersion.exactr!   c                 C  s
   |  dS )NzL<ScmVersion {tag} dist={distance} node={node} dirty={dirty} branch={branch}>format_withrm   r,   r,   r-   __repr__   s   zScmVersion.__repr__fmtc              
   K  s.   |j d| j| j| j| j| j| j| jd|S )N)rb   r   rP   rR   rT   rW   rX   r,   )rB   rb   r   rP   rR   rT   rW   rX   )re   rt   rZ   r,   r,   r-   rr      s   zScmVersion.format_withclean_formatdirty_formatc                 K  s   | j | jr|n|fi |S ro   )rr   rT   )re   ru   rv   rZ   r,   r,   r-   format_choice   s   zScmVersion.format_choice{guessed}.dev{distance}
guess_next,Callable[Concatenate[ScmVersion, _t.P], str]k	_t.P.args_t.P.kwargsc                 O  s$   || g|R i |}| j ||dS )N)guessedrq   )re   ry   rt   r{   rZ   r~   r,   r,   r-   format_next_version   s   zScmVersion.format_next_version)NNFFNN)rO   r   r   r   rP   rQ   rR   rS   rT   rU   rV   rU   rW   rS   rX   rY   rZ   r[   )r   rh   )r   rU   )r   r!   )rt   r!   rZ   r[   r   r!   )ru   r!   rv   r!   rZ   r[   r   r!   )rx   )
ry   rz   rt   r!   r{   r|   rZ   r}   r   r!   )__name__
__module____qualname__rg   propertyrn   rp   rs   rr   rw   r   r,   r,   r,   r-   rN   w   s"    


rN   rV   rU   c                 C  s:   |r| S |d u st | |jst| |}|d usJ |S | S ro   )r    rC   rG   )r   rV   r   r   r,   r,   r-   
_parse_tag   s   
r   Fstr | _VersionTrP   rQ   rT   rR   rS   rW   rX   rY   rZ   c           
   
   K  sb   |s
t d t }t| ||}	td| d|	 |	d us!J d|  t|	f|||||||d|S )NzNmeta invoked without explicit configuration, will use defaults where required.r   z->zCan't parse version %s)rP   rR   rT   rV   rW   r   rX   )r@   rA   r   r   r   rN   )
r   rP   rT   rR   rV   rW   r   rX   rZ   parsed_versionr,   r,   r-   meta   s*   	r   rO   c                 C     t t| j}t|pt|S ro   )_strip_localr!   r   	_bump_dev_bump_regexrO   r   r,   r,   r-   guess_next_version      r   c                 C  r   ro   )r   r!   r   r   	_add_postr   r,   r,   r-   _dont_guess_next_version   r   r   version_stringc                 C  s   |  d\}}}|S )N+)	partition)r   publicseplocalr,   r,   r-   r      s   r   r   c                 C  s    d| v rt |  d|  dS )Npostz8 already is a post release, refusing to guess the updatez.post1)
ValueErrorr   r,   r,   r-   r     s
   
r   c                 C  s8   d| vrd S |  dd\}}|dkrtd|  d|S )Nz.devr   0zHchoosing custom numbers for the `.devX` distance is not supported.
 The zR can't be bumped
Please drop the tag or create a new supported one ending in .dev0)rsplitr   )r   r   tailr,   r,   r-   r   	  s   r   c                 C  sD   t d| }|d u rtdj| d| \}}d|t|d f S )Nz(.*?)(\d+)$z[{version} does not end with a number to bump, please correct or use a custom version schemer   z%s%dr   )rer#   r   rB   r%   r_   )r   r#   r   r   r,   r,   r-   r     s   r   c                 C     | j r| dS | tS N{tag})rp   rr   r   r   r   r,   r,   r-   guess_next_dev_version$     

r   Tretainr_   	incrementc                 C  s   zdd t | jdd | D }W n ty!   t|  dw t||k r3|d t||k s(|r=|d  d7  < t|tk rN|d t|tk sCddd	 |D S )
Nc                 S  s   g | ]}t |qS r,   )r_   .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 ro   )r!   r   r,   r,   r-   	<genexpr>8  s    z+guess_next_simple_semver.<locals>.<genexpr>)r!   r   splitr   r$   rK   
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   )rp   r   r   rW   r   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   )rp   rr   rW   r.   r   r   r!   r   r   r   r   r   )r   branch_ver_data
branch_vertag_ver_up_to_minorbranch_ver_up_to_minorr,   r,   r-   release_branch_semver_versionI  s   


r   c                 C  s   t jdtdd t| S )Nzlrelease_branch_semver is deprecated and will be removed in future. Use release_branch_semver_version insteadr   ri   )r@   rA   rl   r   r   r,   r,   r-   release_branch_semverb  s   r   c                 C  r   r   )rp   rr   r   r   r   r,   r,   r-   no_guess_dev_versionl  r   r   verMatch[str] | Nonec                 C  s   t d| }|S )NzK^(?P<date>(?P<year>\d{2}|\d{4})(?:\.\d{1,2}){2})(?:\.(?P<patch>\d*)){0,1}?$)r   r#   )r   r#   r,   r,   r-   date_ver_matchs  s
   r   date_fmtrC   type | Nonec           
      C  s  t t| j}|du rt|  d |du rd}n|du r+t|ddkr)dnd}tt	j
 }|p6|}|du r>|}nt|d| }||kra|du rSdn|d	pYd}t|d
 }n||krr|durrt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   patchr   z4your previous tag  ({}) is ahead your node date ({})r   z{node_date:{date_fmt}}.{patch})rX   r   r   )r   r!   r   r@   rA   r$   r&   r   rc   r   ra   r   strptimer_   rB   
PkgVersion)
r   rX   r   rC   r#   today	head_datetag_dater   next_versionr,   r,   r-   guess_next_date_ver~  s@   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   )rX   rC   )rp   rT   rr   rW   
startswithr.   r   r   r   r   r   rX   rC   )r   r   r   r#   r,   r,   r-   calver_by_date  s   
r   time_formatc                 C  s0   | j s| jd u r| jdd|dS | jdd|dS )Nr=   z+d{time:{time_format}}r   z+{node}z+{node}.d{time:{time_format}})rp   rR   rw   )r   r   r,   r,   r-   _format_local_with_time  s   r   c                 C  s   t | ddS )Nz%Y%m%dr   r   r   r,   r,   r-   get_local_node_and_date     r   %Y%m%d%H%M%Srt   c                 C  s   t | |dS )Nr   r   )r   rt   r,   r,   r-   get_local_node_and_timestamp  r   r   c                 C  s   |  ddS )Nr=   z+dirty)rw   r   r,   r,   r-   get_local_dirty_tag  r   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})rp   rr   r   r,   r,   r-   postrelease_version  r   r   r7   
Any | Nonec                 C  s6   ddl m} || |D ]}td|j |   S d S )Nr   r2   r4   )r6   r3   r   r7   r8   )r&   r7   r3   r1   r,   r,   r-   _get_ep  s
   r   
entrypointscheme_valueFstr | list[str] | tuple[str, ...] | Callable[[ScmVersion], str] | None_memoset[object] | None%Iterator[Callable[[ScmVersion], str]]c                 c  s    |d u rt  }t|trtdt| |}t|ttfr6|D ]}||vr3|| t| ||dE d H  qd S t	|r?|V  d S d S )Nz@str|List[str]|Tuple[str, ...]|Callable[["ScmVersion"], str]|None)r   )
setr    r!   r   r   listtupleadd_iter_version_schemesr5   )r   r   r   variantr,   r,   r-   r     s$   	


r   	entypointgiven_valuedefaultc                 C     d S ro   r,   r   r   r   r   r,   r,   r-   _call_version_scheme     r   Nonec                 C  r   ro   r,   r   r,   r,   r-   r     r   c                 C  s,   t ||D ]}|| }|d ur|  S q|S ro   )r   )r   r   r   r   schemer*   r,   r,   r-   r     s   c                 K  s|   t d|  t d| | jrt| jtsJ | jS t| d|d d }t d| |d us,J t| d|d d}t d	| || S )
Nzscm versionr   zsetuptools_scm.version_schemeversion_schemer   zsetuptools_scm.local_schemelocal_schemez+unknownlocal_version)r   rV   r    r   r!   r   )r   r   main_versionr   r,   r,   r-   format_version$  s   



r   )r   r   r   r   r   r   )r&   r!   r/   r0   r   r   ro   )r   r:   r   r;   r   r<   )rH   rI   r   r;   r   rJ   )r   r:   rV   rU   r   r;   r   r:   )NFNFNNN)r   r   rP   rQ   rT   rU   rR   rS   rV   rU   rW   rS   r   r;   rX   rY   rZ   r   r   rN   )rO   rN   r   r!   )r   r!   r   r!   )r   r!   r   r!   )r   r!   r   rS   )r   rN   r   r!   )T)r   rN   r   r_   r   rU   r   r!   )r   r!   r   r   )NNN)
r   rN   rX   rY   r   rS   rC   r   r   r!   )r   rN   r   r!   r   r!   )r   )r   rN   rt   r!   r   r!   )r   r   r   r!   )r&   r!   r7   r!   r   r   )r   r!   r   r   r   r   r   r   )
r   rN   r   r!   r   r!   r   r!   r   r!   )
r   rN   r   r!   r   r!   r   r   r   rS   )
r   rN   r   r!   r   r!   r   rS   r   rS   )r   rN   r   r   r   r!   )B
__future__r   r]   r   r@   r   r   r   typingr   r   r   r	   r
   r   r   r   r   typing_extensionsr   r=   r   Z_t_version_clsr   r   r   r   r   utilsr   r   r   r   r.   r9   rG   rM   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   s    

"
M
!












5







