o knh@s4ddlmZddlZddlZddlmZmZmZmZddl m Z m Z ddl m Z mZmZeedeeeffZedeZGd d d eZGd d d eZGd ddeZedejZedZedZedZddd.ddZd/ddZej ddd0d#d$Z!e!j"ddd1d%d&Z#d2d)d*Z$d3d,d-Z%dS)4) annotationsN)NewTypeTupleUnioncast)Tag parse_tag)InvalidVersionVersion_TrimmedReleaseNormalizedNamec@eZdZdZdS) InvalidNamezW An invalid distribution name; users should refer to the packaging user guide. N__name__ __module__ __qualname____doc__r r r :/usr/local/lib/python3.10/dist-packages/packaging/utils.pyrrc@r)InvalidWheelFilenamezM An invalid wheel filename was found, users should refer to PEP 427. Nrr r r rrrrc@r)InvalidSdistFilenamez^ An invalid sdist filename was found, users should refer to the packaging user guide. Nrr r r rrrrz)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$z[-_.]+z/^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$z (\d+)(.*)F)validatenamestrrboolreturncCs6|rt|std|td|}tt|S)Nzname is invalid: -)_validate_regexmatchr_canonicalize_regexsublowerrr)rrvaluer r rcanonicalize_name.s r&cCst|duS)N)_normalized_regexr!)rr r ris_normalized_name6sr(Tstrip_trailing_zeroversion Version | strr*cCst|r tt|S|S)a Return a canonical form of a version as a string. >>> canonicalize_version('1.0.1') '1.0.1' Per PEP 625, versions may have multiple canonical forms, differing only by trailing zeros. >>> canonicalize_version('1.0.0') '1' >>> canonicalize_version('1.0.0', strip_trailing_zero=False) '1.0.0' Invalid versions are returned unaltered. >>> canonicalize_version('foo bar baz') 'foo bar baz' )rr )r+r*r r rcanonicalize_version:sr-cCs0zt|}Wn ty|YSwt||dS)Nr))r r r-)r+r*parsedr r r_Ts    r/filename8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]c Cs:|ds td||dd}|d}|dvr"td||d|d}|d}d |vsr ValueErrorrrrcompile IGNORECASEr r"r'r=r&r(singledispatchr-registerr/rIrPr r r rs4       +