K isdZddlZddlmZddlZej dej Zej dej Zej dej Z ej dej Z de d e fd Z d e d e fd Z d e d e fdZd e d e fdZde d e fdZde d e fdZde d e fdZde d e fdZde d e fdZde d e fdZ ddlmZy#e$r eseZYyYywxYw)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(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)namereturncXtjdd|}|jsJ|S)zMake 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)_)resub isidentifier)rsafes _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/setuptools/_normalization.pysafe_identifierr s- 66-d +D      K componentc.tjd|S)zEscape 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 )rs r safe_namers  ! !#y 11rversionc:|jdd} ttjj |S#tjj $rAt jd|}ttjj |cYSwxYw)aConvert 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)replacestr packagingrVersionInvalidVersionrr )rvattempts r safe_versionr*s~" S!A79$$,,Q/00    + +7$((a09$$,,W5667s'<ABBct t|S#tjj$r|j dd}t j |}|r|d}|t|d}nd}|}tjd|jd}d|jd}t|d|cYSwxYw)aConvert 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' rrr N0z sanitized.z.dev0+) rrrrr_PEP440_FALLBACKsearchlen_NON_ALPHANUMERICr strip)rrmatchr rest safe_restlocals r best_effort_versionr+Cs 4G$$    + + 4 OOC % ''* =DSY[>DDD%))#t4::3? YK(..s3tfF5'233 4s B'B76B7extrachtjd|jdjS)zNormalize 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/cs+  e , 2 23 7 = = ??rvaluecD|jddjdS)zNormalize 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' rr)rr&r0s r filename_componentr3ms ==c " ( ( --rc&|jddS)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' rr)rr2s r filename_component_brokenr5vs ==c ""rc~tjddt|jj ddS)zBLike ``safe_name`` but can be used as filename component for wheelz[-_.]+rr)rr rr.rr2s r safer_namer7s1 y#y/0  c  rc*tt|S)zLLike ``best_effort_version`` but can be used as filename component for wheel)r3r+r2s r safer_best_effort_versionr9s 1%8 99r expressionctd)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`... zCannot 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__rtypingrrcompileI _VALID_NAMErr%r"rr rrr+r/r3r5r7r9r=packaging.licensesr> _canonicalize_license_expressionr<rr rGsc  bjjErttL RZZ 0"$$7BJJ}bdd32::MrttT # #  2 2 27#7#72444@@c@c@.c.c. #S #S # c c :S:S:$TT +S( TsC C+*C+