5 v `SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK J r SSK J r \RS:wa\ R"S5eSSKrSrSr\R&R)5R+SR)55(aS rS rS S S \R,SS.S.S\R,SS.S.S\R,SSS.S.SS\R,0S.S.SS\R,\R&S.S.S.S.r\"SSSS 9rS!R5S"/\R75VVs/sHupUS#SR95S$U3PM snnQ5rS!R5S%S&/5rS'rS(r S)r!S*r"S+r#"S,S-5r$"S.S/5r%"S0S1\ RL\%5r'gs snnf)2N)Path)supportwin32ztest only applies to Windowspy.exeFz_d.exezpy_d.exeTzPython Test Suitezhttps://www.python.org/z X.Y versionX.Y.exe)NExecutablePath) DisplayName InstallPathzX.Y-32 version X.Y-32.exezX.Y-arm64 versionz X.Y-arm64.exez-X fake_arg_for_test)NrExecutableArgumentsz!Ignored because no ExecutablePath)r SupportUrl3.1003.100-32 3.100-arm64ignoredzPython Test Suite SinglezSingle Interpreter)r r)PythonTestSuitePythonTestSuite1PythonTestSuite/3.100zPythonTestSuite/3.100-32zPythonTestSuite/3.100-arm64) PY_PYTHON PY_PYTHON2 PY_PYTHON3 [defaults]=z [commands]ztest-command=TEST_EXE.exec4[U5nSU;aSUS3$U$)N ")str)ss 9/opt/alt/python313/lib64/python3.13/test/test_launcher.pyquoter"^s$ AAaxQqc8&Q&cV^U4SjmUR5Hup#T"XU5 M g)Nc>[U[5(aB[R"X5nUR 5HupET"X4U5 M SSS5 g[U[ 5(a([R "XS[RU5 g[SRU55e!,(df  g=f)Nz&don't know how to create data for '{}') isinstancedictwinreg CreateKeyExitemsr SetValueExREG_SZ TypeErrorformat)rootkeyvaluehkeykv_create_registry_datas r!r53create_registry_data.._create_registry_datads eT " "##D.$!KKMDA)$15*/.s # #   dv}}e DDKKERS S/.s #B00 B>)r*)r/datar3r4r5s @r!create_registry_datar8cs' T dq)r#c## [R"5Hn[R"X5v M g![anUR S:XaSnA geSnAff=f7f)Ni) itertoolscountr(EnumKeyOSErrorwinerror)r/iexs r! enum_keysrAtsM __  ..) ) {{c!  s1A"9A" AAA"AAA"c[R[R-n[U5HLn[R"XUS9n[ U[ U55 SSS5 [R"X5 MN g!,(df  N)=f)Naccess)r( KEY_WRITEKEY_ENUMERATE_SUB_KEYSlistOpenKeydelete_registry_datarA DeleteKey)r/keysACCESSr0r2s r!rIrI~s^    = = =FDz ^^Df 5 y 76# 5 5s A>> B c \SUS3n[RS4[R[R4[R[R44H@up#[R "[R "X![RU-S95 g g![a MRf=f)NzSoftware\Python\PythonCore\z \InstallPathrrCTF) r(HKEY_CURRENT_USERHKEY_LOCAL_MACHINEKEY_WOW64_64KEYKEY_WOW64_32KEYCloseKeyrHKEY_READr=)tagr0r/flags r! is_installedrVs (\ :C  ! !1%  " "F$:$:;  " "F$:$:;    OOFNN4V__t=ST U    s:B B+*B+c&\rSrSrSrSrSrSrg) PreservePyInic>[U5UlX lSUlgN)rpathcontent _preserved)selfr\r]s r!__init__PreservePyIni.__init__sJ  r#cURR5UlURR UR SS9 g![a SUlN8f=f)Nzutf-16encoding)r\ read_bytesr^FileNotFoundError write_textr]r_s r! __enter__PreservePyIni.__enter__sP #"ii224DO T\\H=! #"DO #sAAAcURcURR5 gURRUR5 gr[)r^r\unlink write_bytes)r_exc_infos r!__exit__PreservePyIni.__exit__s2 ?? " II    II ! !$// 2r#)r^r]r\N)__name__ __module__ __qualname____firstlineno__r`riro__static_attributes__r#r!rXrXs >3r#rXc\rSrSrSr\S5rSrS SjrSr \ RS Sj5r \ RS5r S rg) RunPyMixinNc Sn[R"5(a+[[R5R [ - nO`[R"S5RS5H5nU(dM [U5[ - nUR5(dM5 O SnU(a[R"US/[R[R[RSSS9nURR5 [!UR"S5R%5SR'S 5S nUR"R)5 UR+S 5 SSS5 [R,R/W5(dSnU(d)[2R4"S R7[ 55eU$!,(df  Nf=f![0a SnNQf=f) NPATH;-hasciiignore)stdinstdoutstderrrderrorsrrr zcannot locate '{}' for test) sysconfigis_python_buildrsys executableparentPY_EXEosgetenvsplitis_file subprocessPopenPIPErclosenextr splitlines rpartitionreadwaitversion startswithr=unittestSkipTestr.)clspy_exeprs r!find_pyRunPyMixin.find_pysx  $ $ & &#..)0069FYYv&,,S11!!Wv-F~~'' 2   %%TN$//%??%??$# GGMMO"188T2==?BMMcRSTUGHHMMOFF2J{{--g66!F##-44V<  +  s,0AG%5A?G4.G% G"G%% G43G4cfUR(dUR5UlUR$r[)rrrhs r! get_py_exeRunPyMixin.get_py_exes {{,,.DK{{r#c UR(dUR5Ul1Skn0[RR 5VVs0sH,upxUR 5U;dMUR 5U_M. snnESSSS.EU=(d 0R 5VVs0sHupxUR 5U_M snnEnU(dUR/UQn[ R"UUUR[ R[ R[ RS9n U RR5 U RS5 U RR5RSS5n U RR5RS S5R!S S 5n SSS5 W R"U:wak[$R&(aVU(dO[)S 5 [)UR/UQ5 [)S 5 [)W 5 [)S5 [)W 5 U(a@U R"U:wa0[ R*"U R"UR/UQW W 5eUR-XIR"5 W R/5V s0sHXn U R1S5(aMSU ;dM#U R3S5SU R3S5SR55_MZ n n W U S'XS'U $s snnfs snnf!,(df  GNv=fs sn f)N>rrr VIRTUAL_ENV1)PYLAUNCHER_DEBUGPYLAUNCHER_DRYRUNPYLAUNCHER_LIMIT_TO_COMPANY)envrrrrrutf-8replacer~u�?z ++ COMMAND ++z ++ STDOUT ++z ++ STDERR ++#:rrrr)rrrenvironr*upperrrrrrrrrdecoderr returncoderverboseprintCalledProcessError assertEqualrr partitionlstrip)r_argsr allow_failexpect_returncodeargvrr3r4routerrr r7s r!run_pyRunPyMixin.run_pys{{,,.DKI (* (8(8(:V(:aggiv>U|qwwy!|(:V #!$+-  *-(9(9(;<(;qwwy!|(;<  KK'$'D    {{//????   GGMMO FF2J((--/(()RT>RTWY\] ]   . =^^% %<<$ >), >AKK Q S!1!!4!;!;!= =%  XX MW=  . s1 L+L&L$+BL*2L<L<9L<* L9c[RRS5nU(d[R"S5e[ [ U5S- U5$)N LOCALAPPDATAz5LOCALAPPDATA environment variable is missing or emptyzpy.ini)rrgetrrrXr)r_r] local_appdatas r!py_iniRunPyMixin.py_inisF ~6 ##%78 8T-08;WEEr#c#2# [[R"[R"5S9S-5n[ U[ 5(aURU5 OURXS9 Uv UR5 g!UR5 f=f7f)N)dirz.pyrc) rtempfilemktemprgetcwdr&bytesrmrgrl)r_r]rdfiles r!scriptRunPyMixin.scriptshHOO 4u<= gu % %   W % OOGO 7 J KKMDKKMsA*B-B1BBBc#:# [R"5S- nURSSS9 U[(aSOS- nUR 5 US[ UR 504v [R"U5 g![R"U5 f=f7f)NScriptsT)exist_okparentsz python_d.exez python.exer) rcwdmkdir DEBUG_BUILDtouchrrshutilrmtree)r_venvvenv_exes r! fake_venvRunPyMixin.fake_venvsuxxzI% D$ /kkN|L ]C ,<== = MM$ FMM$ sA BB)BBB)r)NFrN)r)rqrrrsrtr classmethodrrrr contextlibcontextmanagerrrrurvr#r!rxrxs_ F&&P ,\F    r#rxcH\rSrSr\S5r\S5rSrSrSr Sr Sr S r S r S rS rS rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"S r#S!r$S"r%S#r&S$r'S%r(S&r)S'r*S(r+S)r,S*r-S+r.S,r/S-r0S.r1S/r2S0r3S1r4S2r5g3)4 TestLauncheri'c[R"[RS5n[U[5 SSS5 [ R (a[R"S5ngg!,(df  N;=f)NSoftware\Pythonz!reg query HKCU\Software\Python /s) r( CreateKeyrNr8 TEST_DATArrr check_output)rr0rs r! setUpClassTestLauncher.setUpClass(sT   f66? LPS i 0M ??''(MNA M Ls A,, A:c[R"[RS[R[R-S9n[ U[ 5 SSS5 g!,(df  g=f)NrrC)r(rHrNrErFrIr)rr0s r! tearDownClassTestLauncher.tearDownClass2s^ ^^F44RXRbRbekfCfCSCDHK i 0DDDs A A,cURS/5nURUR[US55 UR[R R S5SUS5 g)N-0argv0rrr)rrrrrrrr_r7s r! test_versionTestLauncher.test_version8sW{{D6" d4=&9: ..s3A6YHr#cRURS/5nURSUS5 g)Nr}TruezSearchInfo.helprrrs r!test_help_optionTestLauncher.test_help_option=s({{D6" &7!89r#cSHZupnURU5 URU/5nURX$S5 URX4S5 SSS5 M\ g!,(df  Mn=f)N))rrFalse)-0prr)--listrr) --list-pathsrrzSearchInfo.listzSearchInfo.listPaths)subTestrr)r_optv1v2r7s r!test_list_optionTestLauncher.test_list_optionAsi KCR c"{{C5)  *;%<=  *@%AB#"  #"s ;A"" A1 cURS/5n0n0nUSR5HEn[R"SU5nU(dM#UR S5X%R S5'MG [ Hgn[ UnUVs/sHn[ Xx[5(dMUPM n nU Hn SUSU 3n XzSX;'M URSUS 3S5 Mi UR5V V s0sHupX;dM X_M nn n URX>5 gs snfs sn n f! [R(a[S 5 [US5 e=f) Nrr\s*(.+?)\s+?(\*\s+)?(.+)$r-V:/r /ignored*** STDOUT ***)rrrematchgrouprr&r'popr*assertDictEqualrrr)r_r7foundexpectlinemcompany company_datattagsrTargr3r4actuals r! test_listTestLauncher.test_listMsE{{H:&N--/D5t  JJWIX. 5 !$);;=@=41AK$!$=@    0R A &'d8n% s$ D"(D"7 D'D'D--1Ec URS/5n0n0nUSR5HEn[R"SU5nU(dM#UR S5X%R S5'MG [ Hn[ UnUVs/sHn[ Xx[5(dMUPM n nU H-n SUSU 3n XzSn U S X;'X;==S U S -- ss'M/ URSUS 3S5 M UR5V Vs0sHupX;dM X_M nn nUR!X?5 gs snf![a Mf=f![aA [[U S5[[R5R- 5X;'Mf=fs snn f! ["R$(a['S 5 ['US5 e=f)Nrrrrrr r r rrr r r )rrr rrrr&r'KeyErrorrrrrnamerr*rrrr)r_r7rrrrrrrrrTrinstallr3r4rs r!test_list_pathsTestLauncher.test_list_pathsfs{{N+,N--/D5t6TestLauncher.test_search_major_3_32..s G,Q|b3K00,s z/requires at least one 32-bit Python 3.x installr>r&r'r?rE) rrranyrangerrrr@rendswithrs r!test_search_major_3_32#TestLauncher.test_search_major_3_32s ;;yT;:D tM':; Y2248$y/J Y007iI ,, G%2,GGG''(YZZ  s A77A Cc URS/SS9nUR SWS5 URUSRS 5US5 g![Ra) [S5(d[R "S5eNyf=f) N-2Tr=z2.7z(requires at least one Python 2.x installr>r&r'z2.) rrrrVrrrr@rrs r!test_search_major_2 TestLauncher.test_search_major_2s T;;v$;7D tM':; Y2248$y/J ,, T&&''(RSS' TsA:B  B c UR[5 URS/5nSSS5 URSWS5 URSUS5 URSUSR 55 g!,(df  N\=f)N-argrSearchInfo.companyrSearchInfo.tag X.Y.exe -argrrTEST_PY_DEFAULTSrrstriprs r!test_py_defaultTestLauncher.test_py_defaultsw [[) *;;x(D+ *D1E,FG $'7"89 h)=)=)?@ + *s A?? B c"UR[5 URSS/5nSSS5 URSWS5 URSUS5 URSUSR 55 g!,(df  N\=f) NrQrUrrVrrWX.Y-32.exe -argrrYrs r!test_py2_defaultTestLauncher.test_py2_defaultsz [[) *;;f~.D+ *D1E,FG T*:%;< *DN,@,@,BC + * B Bc"UR[5 URSS/5nSSS5 URSWS5 URSUS5 URSUSR 55 g!,(df  N\=f) Nr<rUrrVrrW'X.Y-arm64.exe -X fake_arg_for_test -argrrYrs r!test_py3_defaultTestLauncher.test_py3_defaultsz [[) *;;f~.D+ *D1E,FG -=(>? BDNDXDXDZ[ + *rbcURS/[S9nURSUS5 URSUS5 URSUSR55 g) NrUr,rrVrrWrXrr TEST_PY_ENVrr[rs r!test_py_default_env TestLauncher.test_py_default_envs`{{F8{5 *D1E,FG $'7"89 h)=)=)?@r#cURSS/[S9nURSUS5 URSUS5 URSUS R55 g) NrQrUr,rrVrrWr_rrhrs r!test_py2_default_env!TestLauncher.test_py2_default_envsc{{D&>{{; *D1E,FG T*:%;< *DN,@,@,BCr#cURSS/[S9nURSUS5 URSUS5 URSUS R55 g) Nr<rUr,rrVrrWrdrrhrs r!test_py3_default_env!TestLauncher.test_py3_default_envsc{{D&>{{; *D1E,FG -=(>? BDNDXDXDZ[r#cUR[5 SH~nURU5 URS/US3S9nUR SUS5 UR SUS5 UR S US R 55 SSS5 M SSS5 g!,(df  M=f!,(df  g=f) N)z"py.exe"rz"py"py --versionz --versionrrrVrrWzX.Y.exe --versionr)rrZrrrr[)r_rr7s r!test_py_default_short_argv0(TestLauncher.test_py_default_short_argv0s [[) *=\\%(;; }eWJ;O;PD$$%6=Q8RS$$Wd3C.DE$$%8$x.:N:N:PQ )(>+ *((+ *s#B6A"B$ B6$ B3 .B66 CcURS/[S9nSnUSR5H4n[R"SU5nU(dM#UR S5n O UR SU5 g)Nrr,rz\s*-V:(.+?)\s+?\*\s+(.+)$rr)rrirr rrr)r_r7defaultrrs r!test_py_default_in_list$TestLauncher.test_py_default_in_listsk{{D6{{3N--/D5tg>gkSf>gKhE x..0%/B :;VD E(O113U8_E E"=>G s 0C  CcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) N#! /usr/bin/python -prearg-postargrrVrrWX.Y.exe -prearg -postargrrrZrrrr"r[r_rr7s r!test_py_shebangTestLauncher.test_py_shebang0s [[) *9:f{{FJ#78;+ *D1E,FG $'7"89 +E&M?)Dd8nFZFZF\] ;:+ *!B8B'B8' B5 1B88 CcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) Nz#! python -preargrrrVrrWrrrrrs r!test_python_shebang TestLauncher.test_python_shebang8s [[) *01V{{FJ#782+ *D1E,FG $'7"89 +E&M?)Dd8nFZFZF\] 21+ *rcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) Nz#! /usr/bin/python2 -preargrrrVrrWX.Y-32.exe -prearg rrrrs r!test_py2_shebangTestLauncher.test_py2_shebang@s [[) *:;v{{FJ#78<+ *D1E,FG T*:%;< .uV}oYGh--/ 1 <;+ *rcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) N#! /usr/bin/python3 -preargrrrVrrW+X.Y-arm64.exe -X fake_arg_for_test -prearg rrrrs r!test_py3_shebangTestLauncher.test_py3_shebangIs [[) *:;v{{FJ#78<+ *D1E,FG -=(>? FuV}oU^_h--/ 1 <;+ *rcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) Nz#! /usr/bin/python -prearg rrrVrrWrrrrrs r!test_py_shebang_nlTestLauncher.test_py_shebang_nlRs [[) *;<{{FJ#78=+ *D1E,FG $'7"89 +E&M?)Dh--/ 1 =<+ *rcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) Nz#! /usr/bin/python2 -prearg rrrVrrWrrrrrs r!test_py2_shebang_nl TestLauncher.test_py2_shebang_nl[s [[) *<={{FJ#78>+ *D1E,FG T*:%;< .uV}oYGh--/ 1 >=+ *rcUR[5 URS5nURUS/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S[ W5S3US R 55 g!,(df  Nq=f!,(df  Nz=f) Nz#! /usr/bin/python3 -prearg rrrVrrWrrrrrs r!test_py3_shebang_nl TestLauncher.test_py3_shebang_nlds [[) *<={{FJ#78>+ *D1E,FG -=(>? FuV}oU^_h--/ 1 >=+ *rcUR[5 URS5nURUS/SUS3S9nSSS5 SSS5 UR SWS5 UR SUS 5 UR S WS3US R 55 g!,(df  Nh=f!,(df  Nq=f) Nrrz "py.exe" "z " -postargrurrVrrWzX.Y.exe -prearg "r)rrZrrrr[rs r!test_py_shebang_short_argv0(TestLauncher.test_py_shebang_short_argv0ms [[) *9:f{{FJ#7 6(R\>]{^;+ *D1E,FG $'7"89 ,VHJ?hAUAUAWX ;:+ *s!B2B!B2! B/ +B22 CcUR[5 SRS5nURSU-5nUR US/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S [ W5S 3US R55 g!,(df  Nq=f!,(df  Nz=f) NrrsrrrVrrWrrr)rrZencoderrrr"r[r_r]rr7s r!test_py_shebang_valid_bom&TestLauncher.test_py_shebang_valid_bomvs [[) *299'BG_w676{{FJ#788+ *D1E,FG $'7"89 +E&M?)Dd8nFZFZF\] 87+ *s"&C B;C ; C C  CcUR[5 SRS5nURSU-5nUR US/5nSSS5 SSS5 UR SWS5 UR SUS5 UR S US 5 UR S [W5S 3US R55 g!,(df  N=f!,(df  N=f)Nrrs謹rz Invalid BOMrrrVrrWX.Y.exe rr) rrZrrrassertInrr"r[rs r!test_py_shebang_invalid_bom(TestLauncher.test_py_shebang_invalid_boms [[) *3::7CG_w676{{FJ#788+ mT(^4 *D1E,FG $'7"89 8E&M?)R>R>TU 87+ *s"&C!CC! C C!! C/cURSRSS/55 UR/SSS9nSSS5 URSWS5 URS US 5 g!,(df  N9=f) Nrrzpython=3.999-64Tr3)rrz3.999-64rWrzSearchInfo.oldStyleTag)rjoinrrrs r!test_py_handle_64_in_ini%TestLauncher.test_py_handle_64_in_iniso [[L2C#DE F;;rdc;JDG T*:%;< &>!?@ G Fs A(( A6c @[S5R5nUR5 URUR5 UR [ 5 URSURS35nURUS/SURS[R"S530S9nSSS5 SSS5 UR[U5S[W5S 3WS R55 g!,(df  NR=f!,(df  N[=f Nzarbitrary-exe-name.exe#! /usr/bin/env z -preargrr{r|r,z -prearg rr)rabsoluter addCleanuprlrrZrstemrrrrrr"r[r_exerr7s r!test_search_pathTestLauncher.test_search_paths+,557   # [[) */zBCv{{Z(CJJ2D> D D Dc @[S5R5nUR5 URUR5 UR [ 5 URSURS35nURUS/SURS[R"S530S9nSSS5 SSS5 UR[U5S[W5S 3WS R55 g!,(df  NR=f!,(df  N[=fr)rrrrrlrrZrr rrrrrr"r[rs r!test_search_path_exe!TestLauncher.test_search_path_exes+,557   # [[) */zBCv{{Z(CJJQ!RS#8+ 8E&M?3T(^5I5I5KL 87+ *s$CAC  C C C C)cHURS/SS0SS9nUSR5n[R"SS/[R[R S 9 UR SU5 UR S U5 g![a UR S U5 N1f=f) Nz-V:3.10PYLAUNCHER_ALWAYS_INSTALLror8rz winget.exert)rrzms-windows-store:// 9PJPW5LDXLZ5)rr[r check_callrSTDOUTrrf)r_r7cmds r! test_installTestLauncher.test_installs{{I;-H#,Nbe{f8n""$ -  ! !<"=joo^h^o^o p MM, , nc* ! 6 MM/ 5 6s4BB! B!cURS5nURU/5nSSS5 URS[W53WSR 55 g!,(df  N>=f)Nz#! C:/some_random_app -withargzC:\some_random_app -witharg r)rrrr"r[rs r!test_literal_shebang_absolute*TestLauncher.test_literal_shebang_absolutes[ [[9 :f;;x(D; +E&M? ; N " ; :s A A+c URS5nURU/5nSSS5 UR[WRRS- 5S[U53WSR 55 g!,(df  N`=f)Nz#! ..\some_random_app -withargsome_random_app -witharg rrrrr"rr[rs r!test_literal_shebang_relative*TestLauncher.test_literal_shebang_relativesv [[: ;v;;x(D< V]])),==>?z%PV- Y N " < ;s A?? B cURS5nURU/5nSSS5 UR[WRS- 5S[U53WSR 55 URS5nURU/5nSSS5 UR[URS- 5S[U53USR 55 g!,(df  N=f!,(df  Ng=f)Nz#! "some random app" -withargzsome random apprrz#! some" random "app -withargrrs r!test_literal_shebang_quoted(TestLauncher.test_literal_shebang_quoteds [[8 9V;;x(D: V]]%6678 5=/ R N " [[8 9V;;x(D: V]]%6678 5=/ R N " : 9: 9sC(C9( C69 Dc URS5nURU/5nSSS5 UR[WRS- 5S[U53WSR 55 g!,(df  NV=f)Nz#! some\" random "app -withargzsome/ random apprrrrs r!"test_literal_shebang_quoted_escape/TestLauncher.test_literal_shebang_quoted_escapeso [[: ;v;;x(D< V]]%7789E&M? S N " < ;s A55 Bc:UR[5 URS5nURU/5nSSS5 SSS5 UR S[ W53WSR 55 g!,(df  NF=f!,(df  NO=f)Nz#! test-command arg1zTEST_EXE.exe arg1 r)rTEST_PY_COMMANDSrrrr"r[rs r!test_literal_shebang_command)TestLauncher.test_literal_shebang_commandsx [[) *34{{F8,5+  v 0 N " 54+ *s!B A;B ; B B  BcURS5nURU/5nSSS5 WRS- nUR[ U5S[ U53WSR 55 g!,(df  NX=f)Nz#! /usr/bin/not-python arg1z/usr/bin/not-python arg1 r)rrrrr"r[)r_rr7rs r!%test_literal_shebang_invalid_template2TestLauncher.test_literal_shebang_invalid_templatesr [[6 76;;x(D8!66 V}oVE&M? 3 N " 8 7s A77 Bc SnURSUS35nURU/SS9nSSS5 UR5upE[[U5R5R 5nUR 5 URUR5 URS[RS3US'URSUS35nURU/US9nSSS5 URWS R5[U5S [W535 URSURS35nURU/US9nSSS5 URUS R5[U5S [U535 SSS5 g!,(df  GN=f!,(df  N=f!,(df  Nt=f!,(df  g=f) Nzpython-that-is-not-on-pathrz arg1r3r4r|r{r,rr)rrrrr rrrrlrrrrr[r"r)r_rrr7rrrs r!test_shebang_command_in_venv)TestLauncher.test_shebang_command_in_venvs+[[+D67 8F;;x3;?D9^^ (tH~**+446C IIK OOCJJ ' ZZL"**V*<)=>CK/vU;<{{F8{5=   T(^113h7HuU[}o5^ _/z?@F{{F8{5A   T(^113c |6%PV-5Y Z 9 8=<A@ sJF&BGF8(A!G G AG& F58 G G G G G(cBURS5nURU/SS9nSSS5 SnWSR5Vs/sH+nURS5(dMUR 5PM- nnUR U/U5 g!,(df  Nm=fs snf)Nz#! /usr/bin/env python3.99r3r4z # Search PATH for python3.99.exerz # Search PATH)rrrrr[r)r_rr7rrrs r!!test_shebang_executable_extension.TestLauncher.test_shebang_executable_extensions [[5 6&;;x3;?D73+/>+D+D+F7+F4___5$**,+F7 &6* 7 67sB B!B BrvN)6rqrrrsrtrrrrrrrr"r)r-r0r5r9rArNrRr\r`rerjrmrprvrzr~rrrrrrrrrrrrrrrrrrrrrrrrrurvr#r!rr's&OO11 I : C2 D339"3 K JKAD\A D \ R;<. H^^11111Y^VA 1 1 M +       [2+r#r)(rr:rr rrrrrrpathlibrtestrplatformrr(rrrcasefoldrMprefixrr'rirr*lowerrZrr"r8rArIrVrXrxTestCaser)r3r4s00r!rs  <<7   : ;;  >>%%h&7&7&9:: FK +/(jj"+ ,jj". /jj"1'= ?cjj 3B2/jj"%..  C+  \%), 99)4):):)<=)<12q)<= 99 ' *"$ 33({ { |u+8$$ju+g>s0$F*