ó
    Eñi¦  ã                   óü  • S r SSKrSSKJr  SSKr\R
                  " S\R                  5      r\R
                  " S\R                  5      r\R
                  " S\R                  5      r	\R
                  " S\R                  5      r
S\S	\4S
 jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jrS\S	\4S jr SSKJr  g! \ a    \(       d  \r g gf = f)zZ
Helpers for normalization as expected in wheel/sdist/module file names
and core metadata
é    N)ÚTYPE_CHECKINGz)^([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                 ód   • [         R                  " SSU 5      nUR                  5       (       d   eU$ )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   Úsafes     ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/setuptools/_normalization.pyÚsafe_identifierr      s0   € ô �6Š6�-  dÓ+€DØ×Ñ×ÑÐÐØ€Kó    Ú	componentc                 ó.   • [         R                  SU 5      $ )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   s    r   Ú	safe_namer       s   € ô ×!Ñ! # yÓ1Ð1r   Úversionc                 ó<  • U R                  SS5      n [        [        R                  R	                  U5      5      $ ! [        R                  R
                   aA    [        R                  SU5      n[        [        R                  R	                  U5      5      s $ f = f)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):
...
packaging.version.InvalidVersion: Invalid version: 'ubuntu.lts'
Ú Ú.r   )ÚreplaceÚstrÚ	packagingr   ÚVersionÚInvalidVersionr   r	   )r   ÚvÚattempts      r   Úsafe_versionr   ,   s~   € ð" 	�‰˜˜SÓ!€Að7Ü”9×$Ñ$×,Ñ,¨QÓ/Ó0Ð0øÜ×Ñ×+Ñ+ó 7Ü$×(Ñ(¨¨aÓ0ˆÜ”9×$Ñ$×,Ñ,¨WÓ5Ó6Ò6ð7ús   ”'< ¼ABÂBc                 ó€  •  [        U 5      $ ! [        R                  R                   a’    U R	                  SS5      n[
        R                  U5      nU(       a  US   nU[        U5      S nOSnU n[        R                  SU5      R                  S5      nSU 3R                  S5      n[        U SU 35      s $ f = f)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   ÚrestÚ	safe_restÚlocals          r   Úbest_effort_versionr+   E   s¼   € ð 4Ü˜GÓ$Ð$øÜ×Ñ×+Ñ+ó 4Ø�O‰O˜C Ó%ˆÜ ×'Ñ'¨Ó*ˆÞØ˜‘=ˆDØ”S˜“Y�[�>‰DàˆDØˆDÜ%×)Ñ)¨#¨tÓ4×:Ñ:¸3Ó?ˆ	Ø˜Y˜KÐ(×.Ñ.¨sÓ3ˆÜ˜t˜f F¨5¨'Ð2Ó3Ò3ð4ús   ‚
 �B-B=Â<B=Úextrac                 óh   • [         R                  SU 5      R                  S5      R                  5       $ )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,   s    r   Ú
safe_extrar/   e   s+   € ô × Ñ   eÓ,×2Ñ2°3Ó7×=Ñ=Ó?Ð?r   Úvaluec                 óD   • U R                  SS5      R                  S5      $ )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&   ©r0   s    r   Úfilename_componentr3   o   s    € ð �=‰=˜˜cÓ"×(Ñ(¨Ó-Ð-r   c                 ó&   • U R                  SS5      $ )zù
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   r2   s    r   Úfilename_component_brokenr5   x   s   € ð �=‰=˜˜cÓ"Ð"r   c                 ó€   • [         R                  " SS[        U 5      5      R                  5       R	                  SS5      $ )zBLike ``safe_name`` but can be used as filename component for wheelz[-_.]+r   r   )r   r	   r   r.   r   r2   s    r   Ú
safer_namer7   ‡   s:   € ô
 	ß	‰ð	Ø˜œY uÓ-ó	/ç	‰‹ç	‰��cÓ	ðr   c                 ó*   • [        [        U 5      5      $ )zLLike ``best_effort_version`` but can be used as filename component for wheel)r3   r+   r2   s    r   Úsafer_best_effort_versionr9   ”   s   € ô Ô1°%Ó8Ó9Ð9r   Ú
expressionc                 ó   • [        S5      e)a  
Defer import error to affect only users that actually use it
https://github.com/pypa/setuptools/issues/4894
>>> _missing_canonicalize_license_expression("a OR b")
Traceback (most recent call last):
...
ImportError: ...Cannot import `packaging.licenses`...
z´Cannot import `packaging.licenses`.
        Setuptools>=77.0.0 requires "packaging>=24.2" to work properly.
        Please make sure you have a suitable version installed.
        )ÚImportError)r:   s    r   Ú(_missing_canonicalize_license_expressionr=   ›   s   € ô ð	óð r   )Úcanonicalize_license_expression)Ú__doc__r   Útypingr   r   ÚcompileÚ
IGNORECASEÚ_VALID_NAMEr   r%   r"   r   r   r   r   r+   r/   r3   r5   r7   r9   r=   Úpackaging.licensesr>   Ú _canonicalize_license_expressionr<   © r   r   Ú<module>rG      s]  ðñó
 
Ý  ã ð �jŠjÐEÀrÇ}Á}ÓU€Ø—Z’ZÐ 0°"·-±-Ó@Ð Ø—J’J˜}¨b¯m©mÓ<Ð Ø—:’:Ø3°R·]±]óÐ ð
	˜#ð 	 #ô 	ð	2˜ð 	2 ô 	2ð7˜#ð 7 #ô 7ð24 ð 4¨ô 4ð@@�cð @˜cô @ð.˜cð . cô .ð# Sð #¨Sô #ð
�cð 
˜cô 
ð: Sð :¨Sô :ð¸ð Àô ð$Töøð ó TÞà+SÒ(ñ ðTús   Ã C' Ã'C;Ã:C;