2bi[ SrSSKrSSKrSSKJr SSKJr /SQr\R"\ 5r "SS\ 5r "S S \ 5r"S S \ 5r\R "S 5rSr\r"SS\5rSr"SS\5r\R "S5S4\R "S5S4\R "S5S4\R "S5S4\R "S5S4\R "S5S4\R "S5S4\R "S 5S!4\R "S"5S#4\R "S$5S%44 r\R "S&5S4\R "S'5S4\R "S(5S4\R "S5S4\R "S)5S44r\R "S*5rS+rS,r\R "S-\R85rS.S.S/S.S0SSS1.rS2r"S3S4\5r "S5S6\5r!\R "S7\R85r"S8r#S9r$"S:S;\5r%"S<S=\5r&"S>S?\ 5r'\'"\\\5\'"\\!S@5\'"\$\&\5SA.r(\(SB\(SC'SDr)g)Ez~ Implementation of a flexible versioning scheme providing support for PEP-440, setuptools-compatible and semantic versioning. N) string_typesparse_requirement)NormalizedVersionNormalizedMatcher LegacyVersion LegacyMatcherSemanticVersionSemanticMatcherUnsupportedVersionError get_schemec\rSrSrSrSrg)r zThis is an unsupported version.N)__name__ __module__ __qualname____firstlineno____doc____static_attributes__rڍ/builddir/build/BUILDROOT/alt-python313-pip-23.3.1-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/pip/_vendor/distlib/version.pyr r s)rr cl\rSrSrSrSrSrSrSrSr Sr S r S r S r S rS r\S5rSrg)VersioncUR5=UlnURU5=Uln[ U[ 5(de[ U5S:deg)Nr)strip_stringparse_parts isinstancetuplelen)selfspartss r__init__Version.__init__sK779$ q"jjm+ e%''''5zA~~rc[S5e)Nzplease implement in a subclassNotImplementedErrorr%r&s rr Version.parse%s!"BCCrcZ[U5[U5:wa[SU<SU<35egNzcannot compare z and )type TypeErrorr%others r_check_compatibleVersion._check_compatible(s' :e $$FG G %rcVURU5 URUR:H$Nr5r!r3s r__eq__Version.__eq__,s# u%{{ell**rc.URU5(+$r8r:r3s r__ne__Version.__ne__0;;u%%%rcVURU5 URUR:$r8r9r3s r__lt__Version.__lt__3s# u%{{U\\))rc^URU5=(d URU5(+$r8rBr:r3s r__gt__Version.__gt__7s"KK&<$++e*<==rcTURU5=(d URU5$r8rEr3s r__le__Version.__le__:{{5!7T[[%77rcTURU5=(d URU5$r8)rFr:r3s r__ge__Version.__ge__=rKrc,[UR5$r8)hashr!r%s r__hash__Version.__hash__AsDKK  rcRURR<SUR<S3$)Nz('z') __class__rrrQs r__repr__Version.__repr__Ds!^^44dllCCrcUR$r8rrQs r__str__Version.__str__G ||rc[S5e)NzPlease implement in subclasses.r+rQs r is_prereleaseVersion.is_prereleaseJs!"CDDr)r!rN)rrrrr(r r5r:r>rBrFrIrMrRrWr[propertyr_rrrrrrsW DH+&*>88!DEErrc \rSrSrSrSSSSSSS S S .rS rS rSr\ S5r Sr Sr Sr SrSrSrSrg)MatcherONc X:$r8rvcps rMatcher.TQUrc X:$r8rrfs rrjrkUrlrc X:H=(d X:$r8rrfs rrjrkVafoorc X:H=(d X:$r8rrfs rrjrkWrorc X:H$r8rrfs rrjrkXafrc X:H$r8rrfs rrjrkYsqvrc X:H=(d X:$r8rrfs rrjrk[rorc X:g$r8rrfs rrjrk\rrr)<><=>======~=!=c[U5$r8rr-s rrMatcher.parse_requirementas  ##rcLURc [S5eUR5=UlnUR U5nU(d[SU-5eUR UlUR R 5Ul/nUR(a|URHlupAURS5(a,US;a[SU-5eUSSSpeURU5 OURU5SpeURXEU45 Mn [U5Ul g) NzPlease specify a version classz Not valid: %rz.*)rzr}z#'.*' not allowed for %r constraintsTF) version_class ValueErrorrrrnamelowerkey constraintsendswithappendr#r!)r%r&rclistopvnprefixs rr(Matcher.__init__ds     %=> >779$ q  " "1 %_q01 1FF 99??$ ==::d##-(*:<>*?@@"#3B&&r*"&!3!3A!6 bf-.'El rcp[U[5(aURU5nURHup#nURR U5n[U[5(a [ X5nU(d(U<SURR<3n[U5eU"XU5(aM g g)z Check if the provided version matches the constraints. :param version: The version to match against this instance. :type version: String or :class:`Version` instance. z not implemented for FT) r"rrr! _operatorsgetgetattrrVrr,)r%versionoperator constraintrfmsgs rmatch Matcher.matchs g| , ,((1G,0KK (H&##H-A!\**D$#+T^^-D-DF)#..W&11-8rcSn[UR5S:Xa(URSSS;aURSSnU$)Nrr)rzr{)r$r!)r%results r exact_versionMatcher.exact_versionsC t{{ q T[[^A%6-%G[[^A&F rc[U5[U5:wdURUR:wa[SU<SU<35egr0)r1rr2r3s rr5Matcher._check_compatibles7 :e $ UZZ(?$FG G)@rcURU5 URUR:H=(a URUR:H$r8)r5rr!r3s rr:Matcher.__eq__s5 u%xx599$D )DDrc.URU5(+$r8r=r3s rr>Matcher.__ne__r@rcX[UR5[UR5-$r8)rPrr!rQs rrRMatcher.__hash__sDHH~T[[ 111rcRURR<SUR<S3$)N()rUrQs rrWMatcher.__repr__s>>22DLLAArcUR$r8rZrQs rr[Matcher.__str__r]r)r!rrr)rrrrrrrr(rrarr5r:r>rRrWr[rrrrrcrcOslM# "--$%-$ J$#:* HE&2Brrczk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$cUR5n[RU5nU(d[SU-5eUR 5n[ SUSR S555n[U5S:a(USS:XaUSSn[U5S:a USS:XaMUS(dSnO[USSS5nUSSnUS S nUS S nUS nUS:XaSnOUS[US54nUS:XaSnOUS[US54nUS:XaSnOUS[US54nUcSnO]/n UR S5H;n U R5(aS[U 54n OSU 4n U RU 5 M= [ U 5nU(dU(d U(aSnOSnU(dSnU(dSnXCXVXx4$)NzNot a valid version: %sc38# UHn[U5v M g7fr8int.0rgs r _pep_440_key..s6!5AQ!5r.r )NNr)ar)z)_)final) rPEP440_VERSION_RErr groupsr#splitr$risdigitr) r&mrnumsepochprepostdevlocalr'parts r _pep_440_keyrs  A"A %&?!&CDD XXZF 6!56 6D d)a-DHMCRy d)a-DHM !9F1IcrN# 1+C !A;D B-C 2JE l!fc#a&k! |AwDG $ l!fc#a&k! }KK$D||~~3t9~4y LL %e  CC   3 --rcB\rSrSrSrSr\"/SQ5r\S5r Sr g)raA rational version. Good: 1.2 # equivalent to "1.2.0" 1.2.0 1.2a1 1.2.3a2 1.2.3b1 1.2.3c1 1.2.3.4 TODO: fill this out Bad: 1 # minimum two numbers 1.2a # release level must have a release serial 1.2.3b c[U5n[RU5nUR5n[ SUSR S555UlU$)Nc38# UHn[U5v M g7fr8rrs rr*NormalizedVersion.parse..s$J5ISVV5Irrr)_normalized_keyrrrr#r_release_clause)r%r&rrrs rr NormalizedVersion.parse sN #  # #A &$$JVAY__S5I$JJ r)rbrhrcrcB^[U4SjTR55$)Nc3X># UHo(dM USTR;v M! g7f)rN) PREREL_TAGS)rtr%s rr2NormalizedVersion.is_prerelease..s%F[A+1Q44+++[s **)anyr!rQs`rr_NormalizedVersion.is_prereleasesFT[[FFFr)rN) rrrrrr setrrar_rrrrrrs-" 23K GGrrc[U5n[U5nX:XagURU5(dg[U5nXS:H$)NTFr)str startswithr$)xyns r _match_prefixrsA AA AAv <<?? AA 43;rc d\rSrSr\rSSSSSSSS S .rS rS rS r Sr Sr Sr Sr SrSrSrg)ri'_match_compatible _match_lt _match_gt _match_le _match_ge _match_eq_match_arbitrary _match_ne)r|rvrwrxryrzr{r}cU(aSU;=(a URSnO*URS(+=(a URSnU(a0URRSS5SnURU5nX4$)N+rrr)r!rrr)r%rrr strip_localr&s r _adjust_localNormalizedMatcher._adjust_local6sw Z/FGNN24FK )//33Jr8JK %%c1-a0A((+G""rcURXU5upX:agURnSRUVs/sHn[U5PM sn5n[ X5(+$s snfNFrrrjoinrrr%rrrrelease_clauseipfxs rrNormalizedMatcher._match_ltD_"00fM  #33hh71A78 ...8A"cURXU5upX::agURnSRUVs/sHn[U5PM sn5n[ X5(+$s snfrrrs rrNormalizedMatcher._match_gtLrrc2URXU5upX:*$r8rr%rrrs rrNormalizedMatcher._match_leT "00fM$$rc2URXU5upX:$r8rrs rrNormalizedMatcher._match_geXrrc^URXU5upU(dX:HnU$[X5nU$r8rrr%rrrrs rrNormalizedMatcher._match_eq\s:"00fM+F #77F rc0[U5[U5:H$r8)rrs rr"NormalizedMatcher._match_arbitraryds7|s:..rchURXU5upU(dX:gnU$[X5(+nU$r8r r s rrNormalizedMatcher._match_negs="00fM+F 'w;;F rcURXU5upX:XagX:agURn[U5S:aUSSnSRUVs/sHn[ U5PM sn5n[ X5$s snf)NTFrrr)rrr$rrrrs rr#NormalizedMatcher._match_compatibleos"00fM    $33 ~  "+CR0Nhh71A78W**8sA7rN)rrrrrrrrrrrrrrrrrrrrrr'sU%M"  ! J #//%%/ +rrz[.+-]$z^[.](\d)z0.\1z^[.-]z ^\((.*)\)$\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rz\b(alfa|apha)\balphaz\b(pre-alpha|prealpha)\bz pre.alphaz \(beta\)$betaz ^[:~._+-]+z [,*")([\]]z[~:+_ -]z\.$z (\d+(\.\d+)*)cUR5R5n[Hup#URX15nM U(dSn[R U5nU(dSnUnGOUR 5SRS5nUVs/sHn[U5PM nn[U5S:a"URS5 [U5S:aM"[U5S:XaXR5SnOFSRUSSVs/sHn[U5PM sn5XR5S-nUSSnSRUVs/sHn[U5PM sn5nUR5nU(a [Hup#URX65nM U(dUnOSU;aSOSnXX-U-n[U5(dSnU$s snfs snfs snf) zt Try to suggest a semantic form for a version for which _suggest_normalized_version couldn't come up with anything. z0.0.0rrNr-r)rr _REPLACEMENTSsub_NUMERIC_PREFIXrrrrr$rendrr_SUFFIX_REPLACEMENTS is_semver) r&rpatreplrrsuffixrseps r_suggest_semantic_versionr&s WWY__ F" &#  f%A A$$S)"()&Q#a&&)&kAo MM! &kAo v;! EEGH%FXXvabz:z!s1vz:;fUUWX>NNFBQZF626a3q6623 .ICWWT*F. f_c#& V   M/* ;2sG GGc[U5 U$![a Of=fUR5nSHup#URX#5nM [R "SSU5n[R "SSU5n[R "SSU5n[R "SS U5n[R "S S U5nUR S 5(aUS Sn[R "SS U5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SSU5n[R "SS U5n[U5 U$![a SnU$f=f)!aSuggest a normalized version close to the given version string. If you have a version string that isn't rational (i.e. NormalizedVersion doesn't like it) then you might be able to get an equivalent (or close) rational version from this function. This does a number of simple normalizations to the given string, based on observation of versions currently in use on PyPI. Given a dump of those version during PyCon 2009, 4287 of them: - 2312 (53.93%) match NormalizedVersion without change with the automatic suggestion - 3474 (81.04%) match when using this suggestion method @param s {str} An irrational version string. @returns A rational version string, or None, if couldn't determine one. ))z-alphar)z-betar)rr)rr)rrh)z-finalr)z-prerh)z-releaser)z.releaser)z-stabler)rr)rr) r)z.finalr)rrzpre$pre0zdev$dev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?rrgrNz\b0+(\d+)(?!\d)z (\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$rz\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1)rr rreplacererr)r&rsorigr#s r_suggest_normalized_versionr/s"  "    B&  ZZ # & " %B " %B )7B 7B -x .get_partsCs$$QWWY/A $$Q*Aq!BQ%&3& AaA a 0  h rr7r8rz*final-00000000)rpoprr#)r&r<rris r _legacy_keyr@Bs F q\ <<  8|y!8JJLy!8VBZ:5 VBZ:5 a =rc*\rSrSrSr\S5rSrg)r i\c[U5$r8)r@r-s rr LegacyVersion.parse]s 1~rcSnURH=n[U[5(dMURS5(dM2US:dM:Sn U$ U$)NFr7r8T)r!r"rr)r%rrs rr_LegacyVersion.is_prerelease`sKA1l++ S0A0AH    rrNrrrrr rar_rrrrr r \srr cp\rSrSr\r\"\R5rS\S'\ R"S5r Sr Sr g)r ikrr|z^(\d+(\.\d+)*)cX:agURR[U55nU(d[R SX5 gUR 5SnSU;aUR SS5Sn[X5$)NFzACannot compute compatible match for version %s and constraint %sTrrr) numeric_rerrloggerwarningrrsplitr)r%rrrrr&s rrLegacyMatcher._match_compatiblesst   OO ! !#j/ 2 NN018 F HHJqM !8a #AW((rrN)rrrrr rdictrcrr,compilerIrrrrrr r ks5!Mg(()J*Jt-.J )rr zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c,[RU5$r8) _SEMVER_REr)r&s rr!r!s   A rcSn[U5nU(d [U5eUR5nUSSVs/sHn[U5PM snupVnU"USS5U"USS5pXVU4X4$s snf)NcUcU4nU$USSRS5n[UVs/sH*oDR5(aURS5OUPM, sn5nU$s snf)Nrrr6)rr#rr;)r&absentrr'ris r make_tuple!_semantic_key..make_tuplesf 9YF  abEKK$EeLe))++AGGAJ1> !F ^^A&F rrgr8) rrrrr(rnrqrurxrrrrreres# <rrecU$r8rr-s rrjrjsr) normalizedlegacysemanticr{defaultcDU[;a[SU-5e[U$)Nzunknown scheme name: %r)_SCHEMESr)rs rrrs% 82T9:: D>r)*rloggingr,compatrutilr__all__ getLoggerrrJrr objectrrcrOrrrrrrrr rr&r/Ir9r:r@r r rQr!r]r r rerrrrrrs   # 4   8 $ j .Ef.EbafaHJJ FG :.z!G!GHT+T+nZZ2ZZ g&ZZ"ZZ &ZZ&'/ZZ"#U+ZZ C ZZ"#W-ZZ+,ZZ v&  ZZ r"ZZ #ZZ S!ZZ C ZZ **-.+\ld 0"$$7    4 G )G)2ZZ:;=44A -*(g($g$$F$N 1B ;=K8IJm_79  |,r