a
    ñ»j×  ã                   @   sä   d Z ddlZddlmZ e dej¡Ze dej¡Ze dej¡Ze dej¡Z	e
e
d	œd
d„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„Ze
e
dœdd„ZdS ) zZ
Helpers for normalization as expected in wheel/sdist/module file names
and core metadata
é    Né   )Ú	packagingz)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$z[^A-Z0-9._-]+z
[^A-Z0-9]+z,^v?(?P<safe>(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*))ÚnameÚreturnc                 C   s   t  dd| ¡}| ¡ sJ ‚|S )zÍMake a string safe to be used as Python identifier.
    >>> safe_identifier("12abc")
    '_12abc'
    >>> safe_identifier("__editable__.myns.pkg-78.9.3_local")
    '__editable___myns_pkg_78_9_3_local'
    z
\W|^(?=\d)Ú_)ÚreÚsubÚisidentifier)r   Úsafe© r   ú?E:\soccer\ml_env\Lib\site-packages\setuptools/_normalization.pyÚsafe_identifier   s    r   )Ú	componentr   c                 C   s   t  d| ¡S )zãEscape a component used as a project name according to Core Metadata.
    >>> safe_name("hello world")
    'hello-world'
    >>> safe_name("hello?world")
    'hello-world'
    >>> safe_name("hello_world")
    'hello_world'
    ú-)Ú_UNSAFE_NAME_CHARSr   )r   r   r   r   Ú	safe_name   s    
r   )Úversionr   c                 C   sV   |   dd¡}zttj |¡ƒW S  tjjyP   t d|¡}ttj |¡ƒ Y S 0 dS )a
  Convert an arbitrary string into a valid version string.
    Can still raise an ``InvalidVersion`` exception.
    To avoid exceptions use ``best_effort_version``.
    >>> safe_version("1988 12 25")
    '1988.12.25'
    >>> safe_version("v0.2.1")
    '0.2.1'
    >>> safe_version("v0.2?beta")
    '0.2b0'
    >>> safe_version("v0.2 beta")
    '0.2b0'
    >>> safe_version("ubuntu lts")
    Traceback (most recent call last):
    ...
    setuptools.extern.packaging.version.InvalidVersion: Invalid version: 'ubuntu.lts'
    ú Ú.r   N)ÚreplaceÚstrr   r   ÚVersionÚInvalidVersionr   r   )r   ÚvÚattemptr   r   r   Úsafe_version*   s    r   c                 C   s–   z
t | ƒW S  tjjy�   |  dd¡}t |¡}|rP|d }|t|ƒd… }nd}| }t 	d|¡ 
d¡}d|› � 
d¡}t |› d|› �ƒ Y S 0 dS )aû  Convert an arbitrary string into a version-like string.
    Fallback when ``safe_version`` is not safe enough.
    >>> best_effort_version("v0.2 beta")
    '0.2b0'
    >>> best_effort_version("ubuntu lts")
    '0.dev0+sanitized.ubuntu.lts'
    >>> best_effort_version("0.23ubuntu1")
    '0.23.dev0+sanitized.ubuntu1'
    >>> best_effort_version("0.23-")
    '0.23.dev0+sanitized'
    >>> best_effort_version("0.-_")
    '0.dev0+sanitized'
    >>> best_effort_version("42.+?1")
    '42.dev0+sanitized.1'
    r   r   r
   NÚ0z
sanitized.z.dev0+)r   r   r   r   r   Ú_PEP440_FALLBACKÚsearchÚlenÚ_NON_ALPHANUMERICr   Ústrip)r   r   Úmatchr
   ÚrestZ	safe_restÚlocalr   r   r   Úbest_effort_versionC   s    

r%   )Úextrar   c                 C   s   t  d| ¡ d¡ ¡ S )z¬Normalize extra name according to PEP 685
    >>> safe_extra("_FrIeNdLy-._.-bArD")
    'friendly-bard'
    >>> safe_extra("FrIeNdLy-._.-bArD__._-")
    'friendly-bard'
    r   )r    r   r!   Úlower)r&   r   r   r   Ú
safe_extrad   s    r(   )Úvaluer   c                 C   s   |   dd¡ d¡S )z»Normalize each component of a filename (e.g. distribution/version part of wheel)
    Note: ``value`` needs to be already normalized.
    >>> filename_component("my-pkg")
    'my_pkg'
    r   r   )r   r!   ©r)   r   r   r   Úfilename_componentn   s    r+   c                 C   s   |   dd¡S )a  
    Produce the incorrect filename component for compatibility.

    See pypa/setuptools#4167 for detailed analysis.

    TODO: replace this with filename_component after pip 24 is
    nearly-ubiquitous.

    >>> filename_component_broken('foo_bar-baz')
    'foo-bar-baz'
    r   r   )r   r*   r   r   r   Úfilename_component_brokenw   s    r,   c                 C   s   t t| ƒƒS )zBLike ``safe_name`` but can be used as filename component for wheel)r+   r   r*   r   r   r   Ú
safer_name†   s    r-   c                 C   s   t t| ƒƒS )zLLike ``best_effort_version`` but can be used as filename component for wheel)r+   r%   r*   r   r   r   Úsafer_best_effort_versionŒ   s    r.   )Ú__doc__r   Zexternr   ÚcompileÚIZ_VALID_NAMEr   r    r   r   r   r   r   r%   r(   r+   r,   r-   r.   r   r   r   r   Ú<module>   s   !
	