2bi\ SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK r SSK r SSK r SSKJr SSKJr SSKJrJrJr SSKJr SSKJrJr SSKJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r* SSK+J,r, SS K-J.r. SS K/J0r0J1r1J2r2 SS K3J4r4 SS K5J6r6J7r7 SS K8J9r9 SSK:J;r; SSK\R~"\@5rA\("S5rB\&\'\C\C\4rD\&\E\E\E4rF\&\G\&\$\G\$\G44rH\\\\C/\4rI\\\\D/\4rJS\G4SjrKS\&\ES4S\&\E\E\E44SjrLS\GSS4SjrMS\G4SjrN\0"S\1"S5\2"S5S9StS\GS\OS \$\ISS4S!jj5rPS"\SS4S#jrQS"\SS4S$jrR\RS%.S&\S\S'\)\D\C4S \ISS4 S(jjrSS\GS\G4S)jrTSuS\GS*\GS\G4S+jjrUS,\GS-\!\GS\G4S.jrVS,\GSS4S/jrWS,\GS-\!\GS\G4S0jrXS,\GS\G4S1jrYS,\GS\G4S2jrZS3\GS\E4S4jr[S5\\S\G4S6jr]S7\!\!\S\&\#\G\#\E44S8jr^S\GS\O4S9jr_\R4S:\S;\ES\ \aSS44S<jjrbSvS\GS=\OS\G4S>jjrcS\GS\&\G\G44S?jrdS@\GSA\GSS4SBjreS\GS\O4SCjrfSD\SE\SS4SFjrg"SGSH\5rh\RSI\GS\ \hSS44SJj5rjS\\h4SKjrkS\\h4SLjrlSM\SN\S\'\4SOjrmSP\GSQ\$\ES\G4SRjrnSwSS\GST\GS\G4SUjjroSS\GS\&\$\G\$\E44SVjrpSS\GS\H4SWjrqSS\GS\G4SXjrrSY\GSZ\\G/\&\S44S\&\G\H44S[jrsSS\GS\H4S\jrtSS\GS\&\G4S]jruSY\GS\&\G\G\&\$\G\$\G444S^jrvSY\GS\G4S_jrwSY\GS\G4S`jrxSa\,S\G4Sbjry"ScSd5rzSe\GS\z4Sfjr{SY\GS\z4Sgjr|Sh\OSS4Sijr}SxSjjr~S\O4SkjrSyS\GSl\ES\&\\E44SmjjrSn\!\S\"\&\\44SojrSp\\B/\O4Sn\!\BS\&\!\B\!\B44Sqjr"SrSs\.5rg)zN)partial)StringIO) filterfalsetee zip_longest)Path) FunctionType TracebackType)AnyBinaryIOCallableContextManagerDict GeneratorIterableIteratorListOptionalTextIOTupleTypeTypeVarUnioncast) Requirement)BuildBackendHookCaller)retrystop_after_delay wait_fixed) __version__) CommandErrorExternallyManagedEnvironment)get_major_minor_version)WINDOWS)running_under_virtualenv)rmtree display_path backup_dirasksplitext format_sizeis_installable_dirnormalize_pathrenamesget_progcaptured_stdout ensure_dirremove_auth_from_urlcheck_externally_managed ConfiguredBuildBackendHookCallerTreturnc[RR[RR[5SS5n[RR U5nSR [U[55$)Nz..zpip {} from {} (python {})) ospathjoindirname__file__abspathformatr r#) pip_pkg_dirs ڊ/builddir/build/BUILDROOT/alt-python313-pip-23.3.1-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/pip/_internal/utils/misc.pyget_pip_versionrALsV'',,rwwx8$EK''//+.K ' . .! py_version_info.c[U5S:aUS[U5- S-- nO[U5S:aUSSn[SU5$)a\ Convert a tuple of ints representing a Python version to one of length three. :param py_version_info: a tuple of ints representing a Python version, or None to specify no version. The tuple can have any length. :return: a tuple of length three if `py_version_info` is non-None. Otherwise, return `py_version_info` unchanged (i.e. None). )rN VersionInfo)lenr)rCs r@normalize_version_inforHWsP ?aAO 44<< _  !)"1-   //rBr9c[R"U5 g![aLnUR[R:wa$UR[R :waeSnAgSnAgSnAff=f)z os.path.makedirs without EEXIST.N)r8makedirsOSErrorerrnoEEXIST ENOTEMPTY)r9es r@r1r1jsN D  77ell "qww%//'A (B "s A/=A**A/c[RR[RS5nUS;a[R S3$U$![ [[4a gf=f)Nr)z __main__.pyz-cz -m pippip) r8r9basenamesysargv executableAttributeError TypeError IndexError)progs r@r/r/ts_ ww , ( (nn%W- -K Iz 2   sAA A A%$A%TrEg?)reraisestopwaitdir ignore_errorsonexccU(a[nUc[n[[[[ [ 4[5US9n[RS:a[R"XS9 g[R"XS9 g)Nr_)rE )onerror) _onerror_ignore_onerror_reraiserrrOnExcOnErrrmtree_errorhandlerrS version_infoshutilr&)r]r^r_handlers r@r&r&sa  }  U5%< "56 G  7" c) c+rB_argscgNrls r@rdrdsrBcernrorps r@reres rBrafuncexc_infoc[R"U5RnU[R-(d2[R "X[R-5 U"U5 g[ U[5(dUupRnU"XU5 g![a gf=f![a N@f=f![a NPf=f)a `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`). * If a file is readonly then it's write flag is set and operation is retried. * `onerror` is the original callback from `rmtree(... onerror=onerror)` that is chained at the end if the "rm -f" still fails. N)r8statst_moderKS_IWRITEchmod isinstance BaseException)rrr9rsr_rv_s r@rhrhs ''$-'' T]] "  HHTT]]2 3  T  h . .!Q $h)      s4 B'B0#B  BB B-,B-0 B=<B=cN[RR[RRU55nUR [R "5[RR -5(a$SU[[R "55S-nU$)zPGives the display value for a given path, making it relative to cwd if possible..N)r8r9normcaser= startswithgetcwdseprGr9s r@r'r'si 77  BGGOOD1 2D ryy{RWW[[011T#biik*,-- KrBextcSnUn[RRX-5(a;US- nU[U5-n[RRX-5(aM;X-$)zXFigure out the name of a directory to back up the given dir to (adding .bak, .bak2, etc))r8r9existsstr)r]rn extensions r@r(r(sZ AI ''.. ) ) Q#a&L  ''.. ) ) ?rBmessageoptionsc[RRSS5R5H nX!;dM Us $ [ X5$)NPIP_EXISTS_ACTION)r8environgetsplitr))rractions r@ask_path_existsrs>**..!4b9??A  MB w  rBch[RRS5(a[SU35eg)z&Raise an error if no input is allowed. PIP_NO_INPUTz5No input was expected ($PIP_NO_INPUT set); question: N)r8rr Exceptionrs r@_check_no_inputrs1 zz~~n%%CG9 M  &rBc[U5 [U5nUR5R5nX!;a+[ SR USR U555 OU$Mh)z@Ask the message interactively, with the given possible responsesz>Your response ({!r}) was not one of the expected responses: {}z, )rinputstriplowerprintr>r:)rrresponses r@r)r)s_  >>>#))+  " VHdii&89  O rBc.[U5 [U5$)zAsk for input interactively.)rrrs r@ ask_inputrsG >rBcD[U5 [R"U5$)z!Ask for a password interactively.)rgetpassrs r@ ask_passwordrsG ??7 ##rBvalc\UR5nUS;agUS;ag[SU<35e)zConvert a string representation of truth to true (1) or false (0). True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. )yyesttrueon1r)rnoffalseoff0rzinvalid truth value )r ValueError)rs r@ strtoboolrs: ))+C 22 5 5/w788rBbytescUS:aSRUS- S- 5$US:aSR[US- 55$US:aSRUS- 5$SR[U55$) Ni@Bz {:.1f} MBg@@ii'z{} kBz {:.1f} kBz{} bytes)r>int)rs r@r+r+su {!!%&.4"788  ~~c%$,/00 !!%&.11  U,,rBrowsc jUVs/sHn[[[U55PM nn[USS06Vs/sHn[ [[ U55PM nnUVs/sH:nSR [[RX55R5PM< nnXC4$s snfs snfs snf)zReturn a list of formatted rows and a list of column sizes. For example:: >>> tabulate([['foobar', 2000], [0xdeadbeef]]) (['foobar 2000', '3735928559'], [10, 4]) fillvaluer ) tuplemaprrmaxrGr:ljustrstrip)rrowcolsizestables r@tabulater#s-1 1DSE#c3- DD 1+6+K+K L+KCSS# +KE LFJ KdsSXXc#))S0 1 8 8 :dE K < 2 L Ks#B&#B+ AB0cZ[RRU5(dg[RR[RR US55(ag[RR[RR US55(agg)a`Is path is a directory containing pyproject.toml or setup.py? If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for a legacy setuptools layout by identifying setup.py. We don't check for the setup.cfg because using it without setup.py is only available for PEP 517 projects, which are already covered by the pyproject.toml check. Fzpyproject.tomlTzsetup.py)r8r9isdirisfiler:rs r@r,r,1sh 77==   ww~~bggll4)9:;; ww~~bggll4455 rBfilesizec#J# URU5nU(dgUv M7f)z7Yield pieces of data from a file-like object until EOF.N)read)rrchunks r@ read_chunksrBs'  $  s!#resolve_symlinksc [RRU5nU(a [RRU5nO[RR U5n[RR U5$)zF Convert a path to its canonical, case-normalized, absolute version. )r8r9 expanduserrealpathr=r~)r9rs r@r-r-MsV 77  d #Dww%wwt$ 77  D !!rBc[R"U5upUR5RS5(a USSU-nUSSnX4$)z,Like os.path.splitext, but take off .tar tooz.tarN) posixpathr*rendswith)r9basers r@r*r*ZsM""4(ID zz|V$$23i#oCRy 9rBoldnewc[RRU5up#U(aAU(a:[RRU5(d[R"U5 [ R "X5 [RRU5up#U(a U(a[R"U5 ggg![a gf=f)z7Like os.renames(), but handles renaming across devices.N) r8r9rrrJrjmove removedirsrK)rrheadtails r@r.r.css#JD RWW^^D11 D KKs#JD   MM$ t   s0C CCcr[5(dgUR[[R55$)z Return True if path is within sys.prefix, if we're running in a virtualenv. If we're not in a virtualenv, all paths are considered "local." Caution: this function assumes the head of path has been normalized with normalize_path. T)r%rr-rSprefixrs r@is_localrts( $ % % ??>#**5 66rBmsgargsc2[R"U/UQ76 grn)loggerinfo)rrs r@ write_outputrs KKdrBcT\rSrSr%\\S'\S\SS4Sj5r\S\ 4Sj5r Sr g) StreamWrapperi orig_streamr6c U"5nXlU$rn)r)clsrrets r@ from_streamStreamWrapper.from_streamse% rBc.URR$rn)rencodingselfs r@rStreamWrapper.encodings(((rBroN) __name__ __module__ __qualname____firstlineno__r__annotations__ classmethodrpropertyrr__static_attributes__rorBr@rrsCf)#))rBr stream_namec## [[U5n[[U[R U55 [[U5v [[X5 g![[X5 f=f7f)zReturn a context manager used by captured_stdout/stdin/stderr that temporarily replaces the sys stream *stream_name* with a StringIO. Taken from Lib/support/__init__.py in the CPython repo. N)getattrrSsetattrrr)r orig_stdouts r@captured_outputrsP#{+K Cm77 DE/c;''[.[.s5A0A A0A--A0c[S5$)zCapture the output of sys.stdout: with captured_stdout() as stdout: print('hello') self.assertEqual(stdout.getvalue(), 'hello ') Taken from Lib/support/__init__.py in the CPython repo. stdoutrrorBr@r0r0s 8 $$rBc[S5$)z See captured_stdout(). stderrrrorBr@captured_stderrrs 8 $$rB sequentialnamedc [[U[[U55540UD6nUR 5VVs0sHup4XC_M nnnXRS'[ SSU5$s snnf)Nreverse_mappingEnumro)dictziprangerGitemstype)rrenumskeyvaluereverses r@enumrs\ Zs:!78 BE BE,1KKM:MjcuzMG:&  E "";sAhostportc2UcU$SU;aSUS3nUSU3$)z& Build a netloc from a host-port pair :[]ro)rrs r@ build_netlocrs3 |  d{4&{V1TF rBnetlocschemec^URS5S:aSU;a SU;aSUS3nUSU3$)z! Build a full URL from a netloc. r@rrz://)count)rrs r@build_url_from_netlocr#sA||CA#V"368IVHAXS !!rBc[U5n[RRU5nURUR 4$)z* Return the host-port pair from a netloc. )r#urllibparseurlparsehostnamer)rurlparseds r@ parse_netlocr+s5  'C \\ " "3 'F ??FKK ''rBc SU;aUS4$URSS5upSnSU;aURSS5up2OUSp#[RR U5nUb[RR U5nXU44$)zd Parse out and remove the auth information from a netloc. Returns: (netloc, (username, password)). r!NNrNr)rsplitrr%r&unquote)rauthpwusers r@split_auth_from_netlocr3s  &|## ==a(LDB d{::c1%bb <<   %D ~ \\ ! !" % ": rBc[U5unupUcU$UcSnSnO![RRU5nSnSR XUS9$)z Replace the sensitive data in a netloc with "****", if it exists. For example: - "user:pass@example.com" returns "user:****@example.com" - "accesstoken@example.com" returns "****@example.com" ****rz:****z{user}{password}@{netloc})r2passwordr)r3r%r&quoter>)rr2r6s r@ redact_netlocr8sf 6f=F T | ||!!$' & - - V . rBr)transform_netlocc"[RRU5nU"UR5nURUSUR UR UR4n[RRU5nU[SU54$)a:Transform and replace netloc in a url. transform_netloc is a function taking the netloc and returning a tuple. The first element of this tuple is the new netloc. The entire tuple is returned. Returns a tuple containing the transformed url as item 0 and the original tuple returned by transform_netloc as item 1. r NetlocTuple) r%r&urlsplitrrr9queryfragment urlunsplitr)r)r9purl netloc_tuple url_piecessurls r@_transform_urlrDsp <<  %D#DKK0L++|A 4::t}}UJ << " ": .D m\2 22rBc[U5$rn)r3rs r@ _get_netlocrG&s !& ))rBc[U54$rn)r8rFs r@_redact_netlocrI*s & ! ##rBc4[U[5unup#XU4$)zz Parse a url into separate netloc, auth, and url with no auth. Returns: (url_without_auth, netloc, (username, password)) rDrG)r)url_without_authrr0s r@split_auth_netloc_from_urlrM.s#(6c;'G$nv T ))rBc([U[5S$)z7Return a copy of url with 'username:password@' removed.rrKr)s r@r2r2:s #{ +A ..rBc([U[5S$)z.Replace the password in a given url with ****.r)rDrIrOs r@redact_auth_from_urlrQAs #~ .q 11rBreqcUR(d [U5$[U5RUR[UR55$)z:Replace the password in a given requirement url with ****.)r)rreplacerQ)rRs r@redact_auth_from_requirementrUFs7 773x s8  CGG%9#''%B CCrBcX\rSrSrS\S\SS4SjrS\4SjrS\4SjrS \S\ 4S jr S r g) HiddenTextiMsecretredactedr6NcXlX lgrn)rXrY)rrXrYs r@__init__HiddenText.__init__Ns   rBc6SR[U55$)Nz)r>rrs r@__repr__HiddenText.__repr__Rs"))#d)44rBcUR$rnrYrs r@__str__HiddenText.__str__Us }}rBothercf[U5[U5:wagURUR:H$)NF)rrX)rrds r@__eq__HiddenText.__eq__Ys* :e ${{ell**rB)rYrX) rrrrrr[r^rbr boolrfrrorBr@rWrWMsG!s!c!d!5#5+C+D+rBrWrc[USS9$)Nr5ra)rW)rs r@ hide_valuerjbs ef --rBc*[U5n[XS9$)Nra)rQrW)r)rYs r@hide_urlrlfs#C(H c --rB modifying_pipcSS[RR3S[RRS[RR3/nU=(a@ [=(a3 [ R R[RS5U;nU(aP[RSS/[RSS-n[SRSRU555eg) zProtection of pip.exe from modification on Windows On Windows, any operation modifying pip should be run as: python -m pip ... rQr}rz-mrNz3To modify pip, please run the following command: {}r) rSrimajorminorr$r8r9rRrTrUr!r>r:)rm pip_namesshould_show_use_python_msg new_commands r@(protect_pip_from_modification_on_windowsrtks  c$$ %& c$$ %Qs'7'7'='=&>?I P'Pbgg&6&6sxx{&Cy&P"~~tU3chhqrlB  B I I%   "rBc[5(ag[RR[R "S5S5n[RR U5(dg[R"U5e)zCheck whether the current environment is externally managed. If the ``EXTERNALLY-MANAGED`` config file is found, the current environment is considered externally managed, and an ExternallyManagedEnvironment is raised. NstdlibzEXTERNALLY-MANAGED) r%r8r9r: sysconfigget_pathrr" from_config)markers r@r3r3sW !! WW\\),,X68L MF 77>>& ! ! & 2 26 ::rBcp[RSL=(a [RR5$)zIs this console interactive?N)rSstdinisattyrorBr@is_console_interactiver~s# 99D 7SYY%5%5%77rB blocksizec[R"5nSn[US5n[XAS9H"nU[ U5- nUR U5 M$ SSS5 X#4$!,(df  X#4$=f)z5Return (hash, length) for path using hashlib.sha256()rrb)rN)hashlibsha256openrrGupdate)r9rhlengthrblocks r@ hash_filersk A F dD Q 3E c%j F HHUO4  9   9s 0A A/iterablec.[U5n[X5$)zR Return paired elements. For example: s -> (s0, s1), (s2, s3), (s4, s5), ... )iterr)rs r@pairwisersH~H x **rBpredcH[U5up#[X5[X54$)z Use a predicate to partition entries into false entries and true entries, like partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 )rrfilter)rrt1t2s r@ partitionrs$]FB t &"2 22rBc^\rSrSrSS\S\S\S\\S\\SS\\4 U4S jjjrSS \S \\ \\ \\ \44S \\S \4U4Sjjjr SS\S \\ \\ \\ \44S \4U4Sjjjr SS \S \\ \\ \\ \44S \\S \4U4SjjjrSS \\ \\ \\ \44S \ \4U4SjjjrSS \\ \\ \\ \44S \ \4U4SjjjrSS \\ \\ \\ \44S \ \4U4SjjjrSS \S \\ \\ \\ \44S\S \4U4SjjjrSS \S \\ \\ \\ \44S\S \4U4SjjjrSrU=r$)r4i config_holder source_dir build_backend backend_pathrunner).Npython_executablec4>[TU]X#XEU5 Xlgrn)superr[r)rrrrrrr __class__s r@r[)ConfiguredBuildBackendHookCaller.__init__s"  |=N +rBwheel_directoryconfig_settingsmetadata_directoryr6cL>URRn[TU] XUS9$N)rr)rrr build_wheelrrrrcsrs r@r,ConfiguredBuildBackendHookCaller.build_wheels3    / /w" DV#  rBsdist_directorycJ>URRn[TU] XS9$N)r)rrr build_sdist)rrrrrs r@r,ConfiguredBuildBackendHookCaller.build_sdists)    / /w"?"GGrBcL>URRn[TU] XUS9$r)rrrbuild_editablers r@r/ConfiguredBuildBackendHookCaller.build_editables3    / /w% DV&  rBcJ>URRn[TU] US9$r)rrrget_requires_for_build_wheelrrrrs r@r=ConfiguredBuildBackendHookCaller.get_requires_for_build_wheel)   / /w3B3GGrBcJ>URRn[TU] US9$r)rrrget_requires_for_build_sdistrs r@r=ConfiguredBuildBackendHookCaller.get_requires_for_build_sdistrrBcJ>URRn[TU] US9$r)rrrget_requires_for_build_editablers r@r@ConfiguredBuildBackendHookCaller.get_requires_for_build_editables)   / /w6r6JJrB_allow_fallbackcN>URRn[TU] UUUS9$N)rrr)rrr prepare_metadata_for_build_wheelrrrrrrs r@rAConfiguredBuildBackendHookCaller.prepare_metadata_for_build_wheels6    / /w71+8  rBcN>URRn[TU] UUUS9$r)rrr#prepare_metadata_for_build_editablers r@rDConfiguredBuildBackendHookCaller.prepare_metadata_for_build_editable s6    / /w:1+;  rB)r)NNNr-rn)NT)rrrrr rrr r[rrrrrrrrrrhrrr __classcell__)rs@r@r4r4s '+04+/ + + + + sm + ),- +$C= + +"GK,0    "$sE#tCy.,A'A"BC  %SM    GKHH"$sE#tCy.,A'A"BCH HHGK,0    "$sE#tCy.,A'A"BC  %SM    MQH'S%T#Y2G-G(HIH cHHMQH'S%T#Y2G-G(HIH cHHMQK'S%T#Y2G-G(HIK cKKGK $    "$sE#tCy.,A'A"BC      GK $    "$sE#tCy.,A'A"BC      rBr4)FN)z.bak)T)https)r6N)i) contextlibrLrriologgingr8rrjrurSrw urllib.parser% functoolsrr itertoolsrrrpathlibrtypesr r typingr r r rrrrrrrrrrrrr"pip._vendor.packaging.requirementsrpip._vendor.pyproject_hooksrpip._vendor.tenacityrrrrQr pip._internal.exceptionsr!r"pip._internal.locationsr#pip._internal.utils.compatr$pip._internal.utils.virtualenvr%__all__ getLoggerrrr5rzExcInforrFrr;rfrgrArHr1r/rhr&rdrerhr'r(rrr)rrrfloatr+rr,DEFAULT_BUFFER_SIZErrr-r*r.rrrcontextmanagerrr0rrrr#r+r3r8rDrGrIrMr2rQrUrWrjrlrtr3r~rrrr4rorBr@rs    33-&;>DDO;.C $   8 $ CL ]#]MA BCcM" Cx}hsm;<<= ,m4c9:,g.340E#s(O0c3PSm@T0&ST # t*1-JsOD !, ,, E?, ,E,, C D  S T $ & & & G]*+&  &  & RssCcs!S!8C=!S! S T   x}  ss $#$#$ 93 93 9 -u-- 8HSM* uT#YS 5I/J ST$!# 6 6 udD ! " " " "35c?34" 73 74 7c#$ )H )   / /=$3L)M / / % 6 %% 6%#c#C#DI# s (3- C "#"s""((x}hsm'C!D(3;:##,3 3 (#c3h)? @3 3 3(** *$3$5:$ *  * 3U8C=(3-78 89 */c/c/2c2c2 DkDcD++*.c.j..#.*.  D T 4 ;88 C C eCHo +x}+%S/)B+ 3 A39  3qk 3 8A; #$ 3W '=W rB