
    F\hmk                     z   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJrJrJr  SSKJrJr  SSKJrJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJr  SSKJ r J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'  SSK(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=   " S S5      r>SS\	4S jjr?g)    N)NoReturn)	os_helper
MS_WINDOWSflush_std_streamssuppress_immortalization   )_parse_args	Namespace)	findtestssplit_test_packages
list_cases)Logger)setup_pgo_tests)State
TestResult)TestResultsEXITCODE_INTERRUPTED)RunTestsHuntRefleak)setup_processsetup_test_dir)run_single_testPROGRESS_MIN_TIME)setup_tsan_tests)StrPathStrJSONTestNameTestList	TestTuple
TestFilterstrip_py_suffixcountformat_duration	printlistget_temp_dirget_work_direxit_timeoutdisplay_headercleanup_temp_dirprint_warningis_cross_compiledget_host_runnerEXIT_TIMEOUTc                   .   \ rS rSrSrS+S\S\4S jjrS,S\SS4S	 jjr	S-S
\
S-  S\\\
S-  4   4S jjr\S
\SS4S j5       rS\S\4S jrS\SS4S jrS\S\S\S\4S jrS\SS4S jrS\SS4S jrS\S\S\R0                  S-  S\4S jrS\SS4S jrS\4S jrS\S\SS4S jrS\R>                  S-  SS4S jr S.S jr!S
\S\4S jr"S \S
\
S-  S\4S! jr#S \S
\
S-  S\4S" jr$S# r%S$ r&S% r'S.S& jr(S' r)\*S\+4S( j5       r,S-S
\
S-  S\-4S) jjr.S*r/g)/Regrtest!   a!  Execute a test suite.

This also parses command-line options and modifies its behavior
accordingly.

tests -- a list of strings containing test names (optional)
testdir -- the directory in which to look for tests (optional)

Users other than the Python test suite will certainly want to
specify testdir; if it's omitted, the directory containing the
Python test suite is searched for.

If the tests argument is omitted, the tests listed on the
command-line will be used.  If that's empty, too, then all *.py
files beginning with test_ will be used.

The other default arguments (verbose, quiet, exclude,
single, randomize, use_resources, trace, coverdir,
print_slow, and random_seed) allow programmers calling main()
directly to set the values that would normally be set by flags
on the command line.
ns_add_python_optsc                 &	   [        UR                  5      U l        UR                  U l        UR                  U l        UR                  U l        UR
                  U l        [        5       U l        S U l        [        U R                  U R                  U R                  5      U l
        UR                  U l        UR                  U l        UR                  U l        UR"                  U l        UR&                  U l        UR*                  U l        UR.                  U l        UR2                  U l        UR6                  =(       d    UR8                  U l        U=(       a    UR<                  U l        UR@                  U l         URB                  U l!        URD                  U l"        URF                  U l$        URJ                  U l&        URN                  U l'        U RN                  (       d  URP                  c  SnOURP                  S::  a  SnOURP                  nX0l)        URT                  U l*        URV                  U l,        URZ                  U l-        UR\                  U l.        UR^                  U l/        UR`                  U l1        URd                  U l2        URf                  (       a@  URf                  u  pEn[h        Rj                  Rm                  U5      n[o        XEU5      U l8        OS U l8        URr                  U l:        URv                  U l<        URz                  U l>        UR~                  U l@        [        UR                  5      U lB        UR                  (       a  [        UR                  5      U lD        OS U lD        UR                  U lF        UR                  U lH        UR                  U lJ        UR                  U lK        S[h        R                  ;   a8  [h        R                  S   (       a   SU lK        [h        R                  S   U lM        O:UR                  c  [        R                  " S5      U lM        OUR                  U lM        S U lP        UR                  U lR        [        R                  " 5       U lU        UR                  U lW        S U lX        S U lY        g )Nr   SOURCE_DATE_EPOCHF    )Zintverbosequietpgopgo_extendedtsanr   resultsfirst_stater   loggerheaderwant_header
list_testswant_list_testsr   want_list_caseswait	want_waitcleanupwant_cleanuprerun
want_rerunrunleakswant_run_leaksbisectwant_bisectfast_cislow_cici_moder2   want_add_python_optsmatch_testsexcludefromfilestartstarting_testargscmdline_argssingle_processuse_mpnum_workersworker_jsonfailfast	fail_fastfail_env_changed
fail_rerunforeververbose3output_on_failuretimeout
huntrleaksospathabspathr   hunt_refleaktestdirtest_dirxmlpathjunit_filenamememlimitmemory_limit	thresholdgc_thresholdtupleuse_resourcespython
python_cmdtracecoveragecoverdircoverage_dirtempdir_tmp_dir	randomizeenvironrandom_seedrandomgetrandbitsfirst_runtests
print_slowprint_slowesttimeperf_counter
start_timesinglesingle_test_runnext_single_testnext_single_filename)selfr1   r2   r\   warmupsrunsfilenames          ,/usr/lib/python3.13/test/libregrtest/main.py__init__Regrtest.__init__8   sE   

O88
"$//''	 %0M'+ T\\4::txx@ "$%']]%']]!ww"$** "$&KK!# jj6BJJ+; ,C/1/B/B 	! (*~~ZZ(*.0hh&(gg %'$5$5"))"3KYY!^K))K ++->>  "{{&(&9&9 "ZZ'){{%'ZZ==&(mm#G8wwx0H4?x4XD $D(*

.0jj(*(*.3B4D4D.E996;BII6FDO"DO hh,.KK(*

  "||2::-

./"DN +-**5H*ID^^#%11"5D!~~D 04 $&== ++- &(YY1548!    linereturnNc                 :    U R                   R                  U5        g N)r?   log)r   r   s     r   r   Regrtest.log   s    r   testsc                 *   Uc  / nU R                   (       ap  [        R                  R                  U R                  S5      U l         [        U R
                  S5       nUR                  5       R                  5       nU/nS S S 5        U R                  (       a  / n[        R                  " S5      n[        [        R                  R                  [        R                  U R                  5      5       nU H]  nUR                  SS5      S   nUR                  5       nUR!                  U5      nUc  M>  UR#                  UR%                  5       5        M_     S S S 5        ['        U5        U R(                  (       a   [+        U R,                  U R.                  5        U R0                  (       a  [3        U R,                  5        [5        5       nU R6                  (       a+  U R,                   H  nUR9                  U5        M     / U l        [;        U R<                  US9n	U R                  (       d+  U=(       d    U R,                  n
U
(       a  [?        U
5      n
OU	n
OUn
U R                   (       a&  U
S S n
 U	RA                  U
S   5      nXS-      U l!        U RF                  (       a   U
S U
RA                  U RF                  5      2	 [P        RR                  " U RT                  5        U RV                  (       a  [P        RX                  " U
5        [[        U
5      U4$ ! , (       d  f       GN= f! [         a     GNf = f! , (       d  f       GN= f! [D         a     Nf = f! [H         a1    [K        SU RF                   35        [L        RN                  " S5         Nf = f)	N
pynexttestrz\btest_[a-zA-Z0-9_]+\b#r   r   )rk   rT   zCannot find starting test: ).r   rg   rh   jointmp_dirr   openreadstripOSErrorrU   recompiler   SAVEDCWDsplitsearchappendgroupr!   r:   r   rY   r;   r<   r   setrT   addr   rl   r   indexr   
IndexErrorrW   
ValueErrorprintsysexitr   seedr   r}   shufflers   )r   r   fp	next_testregexr   matchexclude_testsargalltestsselectedposs               r   
find_testsRegrtest.find_tests   s   =E(*T\\<(PD%$33S9R "	 1I&KE : ==E JJ89Ebggll9#5#5t}}EF"D::c1-a0D::<D!LL.E(U[[]3  G 	88D--t/@/@A99T../<<((!!#& ) "DT]]%24 }}1 1 1H.x8#H|HnnXa[1(0q(9%
 @hnnT-?-?@@A
 	D$$%>>NN8$h''E :9   GFP    3D4F4F3GHIsf   L$ "L?L$ 1=L52#L5. M  M 
L!L$ !L$ $
L21L25
M
MM8NNc                 ,    U  H  n[        U5        M     g r   )r   )r   names     r   rB   Regrtest.list_tests   s    D$K r   runtestsc           
         U R                   S:X  a  U R                  (       d  SU l         U R                  R                  5       u  p#UR	                  USSSSUSS9nU R
                  R                  U5        S[        U5       S3nU R                  (       d3  U S3nU R                  U5        U R                  XR                   5        U$ U R                  U5        U R                  U5        U$ )	Nr   r   TF)r   rI   r8   rb   r_   match_tests_dictrd   zRe-running z failed tests in verbose modez in subprocesses)r\   rZ   r=   prepare_reruncopyr?   	set_testslenr   _run_tests_mprun_tests_sequentially)r   r   r   r   msgs        r   _rerun_failed_testsRegrtest._rerun_failed_tests   s    q )<)<
  !D"&,,"<"<"> ==-# ! % 	h'CJ<'DE""E)*CHHSMx)9)9:  HHSM''1r   c                    U R                   (       a  U R                  S5        g U R                  5       U l        [	        5         U R                  U5      nU R                  R                  (       aR  [	        [        [        U R                  R                  5      S5      S5        [        U R                  R                  5        U R                  U5        g )NzJRe-running failed tests is not supported with --python host runner option.testzfailed again:)rv   r   	get_stater>   r   r   r=   badr"   r   r$   display_result)r   r   rerun_runtestss      r   rerun_failed_testsRegrtest.rerun_failed_tests  s    ??HH& >>+11(;<<%DLL,,-v6Hdll&&'N+r   r   progressc                 r   [        5         SU 3nU(       a  U SU S3n[        U5        [        S[        U5      -  5        [        5         UR                  5       nUR                  / SQ5        UR                  UR	                  5       5        UR                  U5        [        S[        R                  " U5      SS9  [        5         S	S K	nUR                  XQR                  S
9nUR                  nU SU 3n[        U5        [        S[        U5      -  5        [        SS9  U(       a  [        SU 35        gg)NzBisect z ()r   )-uz-mztest.bisect_cmdz
--max-iter25z-v+Tflushr   re   z: exit code zBisect failed with exit code F)r   r   create_python_cmdextendbisect_cmd_argsr   shlexr   r   
subprocessrunre   
returncode)	r   r   r   r   titlecmdr   procexitcodes	            r   _run_bisectRegrtest._run_bisect%  s   $ gRz+EecCJ((*

 
 	 	

8++-.

4c5::c?$/~~c+;+;~<??'hZ0ecCJD1(<=r   c                     U R                   R                  SS9u  p#[        US5       H@  u  pE[        U5      S:  a  U S[        U5       3nOSnU R	                  XU5      (       a  M@    g    g )NF)clearr   / )r=   r   	enumerater   r   )r   r   r   _r   r   r   s          r   
run_bisectRegrtest.run_bisectK  sh    <<--E-:$UA.KE5zA~#WAc%j\2##HH== /r   c                     UR                   (       a  g U R                  5       n[        5         [        SU S35        U R                  R	                  UR
                  U R                  U R                  5        g )Nz== Tests result: z ==)r:   r   r   r=   r   r   r9   r   )r   r   states      r   r   Regrtest.display_resultV  sW    << !%,-##HNN$(JJ0B0B	Dr   	test_nametracerc                     UbN  Sn[        [        5       5      nUR                  U[        5       US9  US   n[	        UR
                  5      Ul        O[        X5      nU R                  R                  Xb5        U$ )Nz-result = run_single_test(test_name, runtests))globalslocalsresult)
dictr   runctxr   listcountscovered_linesr   r=   accumulate_result)r   r   r   r   r   	namespacer   s          r   run_testRegrtest.run_testb  sm      CCVXIMM#wyMCx(F#'#6F $Y9F&&v8r   c                    U R                   (       a  [        R                  " SSS9nOS n[        [        R
                  5      nUR                  5       nUb  [        US5      nOSnSU S3nUR                  (       a  US[        UR                  5      -  -  nU R                  U5        UR                  5       n[        US	5       GHh  u  p[        R                  " 5       n
U R                  R!                  X5        U R#                  XU5      n[        R
                   Vs/ s H$  nX;  d  M
  UR%                  S
5      (       d  M"  UPM&     nnU HU  n[        R
                  R'                  US 5        UR)                  S5      u  pn [+        [        R
                  U   U5        MW     [1        U5      n[        R                  " 5       U
-
  nU[2        :  a  U S[        U5       3nU R                  R!                  UU5        UR5                  U R6                  U R8                  5      (       d  GMi    g    g s  snf ! [,        [.        4 a     M  f = f)NFT)rw   r"   r   r   zRun z! sequentially in a single processz (timeout: %s)r   )ztest.test_.z in )rx   rw   Tracer   r   modulesget_jobsr"   re   r#   r   
iter_testsr   r   r   r?   display_progressr  
startswithpop
rpartitiondelattrKeyErrorAttributeErrorstrr   	must_stopr_   r`   )r   r   r   save_modulesjobsr   r   
tests_iter
test_indexr   r   r   modulenew_modulesparentr   r   text	test_times                      r   r   Regrtest.run_tests_sequentiallyt  s   ==[[uD9FF3;;'  "$'EEUG<=#oh6F6F&GGGC((*
%.z1%=!J**,JKK((?]]9?F 14 Gf$8 " & 1 12D E "K G &-"("3"3C"84CKK/6 & v;D))+j8I--tOI$>#?@KK((T:0E0EFF7 &>G !.1 s$   	H2+H2H2H77I
Ic                     U R                   R                  U R                  5      nU R                  (       a  U R                   SU 3nU$ )Nz then )r=   r   r`   r>   )r   r   s     r   r   Regrtest.get_state  sA    &&t'<'<=''(ug6Er   r\   c                 h    SSK Jn  U" X!U R                  U R                  5      R	                  5         g )Nr   )
RunWorkers)run_workersr%  r?   r=   r   )r   r   r\   r%  s       r   r   Regrtest._run_tests_mp  s"    +;$++t||DHHJr   rx   c                 L   U R                   (       ao  U R                  (       a>  [        U R                   S5       nUR                  U R                  S-   5        S S S 5        O [        R
                  " U R                   5        Ub  UR                  SSU R                  SS9  U R                  (       a,  [        R                  " S[        R                  " 5       -  5        U R                  (       a&  U R                  R                  U R                  5        g g ! , (       d  f       N= f)Nw
T)show_missingsummaryry   ignore_missing_fileszleaks %d)r   r   r   writerg   unlinkwrite_resultsrz   rL   systemgetpidrn   r=   write_junit)r   rx   r   s      r   finalize_testsRegrtest.finalize_tests  s    $$$$$33S9RHHT22T9: :9 		$334""d,0,=,=8< # > IIj299;./LL$$T%8%89  :9s   D
D#c                    U R                   c  [        S5      e[        R                  " 5       U R                  R
                  -
  n[        U R                  5      n[        5         [        S[        U5      -  5        U R                  R                  U R                   U5        U R                  5       n[        SU 35        g )NzBShould never call `display_summary()` before calling `_run_test()`zTotal duration: %szResult: )r   r   r   r   r?   r   boolrS   r   r#   r=   display_summaryr   )r   durationfilteredr   s       r   r8  Regrtest.display_summary  s    &T  $$&)?)??(() 	"_X%>>?$$T%8%8(C   !r   c                 .   [        U40 SU R                  _SU R                  _SU R                  _SS _SS_SU R                  _SU R
                  _S	U R                  _S
U R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  S L_SU R                  _SU R                  _SU R                   _SU R"                  _SU R$                  _SU R&                  _SU R(                  _6$ )Nr_   r`   rS   r   rI   Frb   r:   r;   rd   re   r8   r9   rj   rl   	use_junitrx   rp   rr   rt   rv   r}   r   )r   r_   r`   rS   rb   r:   r;   rd   re   r8   r9   rj   rl   rn   rx   rp   rr   rt   rv   r}   r   )r   r   s     r   create_run_testsRegrtest.create_run_tests  sU   
nn
 "22
 ((	

 "
 
 LL
 
 **
 #44
 LL
 LL
 **
 **
 ]]
  **$6!
" ]]#
$ **%
& **'
( ,,)
* +
, nn-
. ((/
 	
r   r   c                 |   U R                   (       a5  U R                   R                  S:  a  Sn[        U[        R                  SS9  U R
                  S:  a&  [        R                  " 5       =(       d    SS-   U l        U R                  (       dK  U R                  (       dZ  U R                  (       dI  U R                  (       d8  U(       d1  U R                  (       d   [        U R                  U R                  5        [        SU R                   5        U R#                  U5      nX@l        U R&                  R)                  U5        UR                   b  U R
                  (       d  S	nO[*        nU(       a  U R&                  R-                  5          U R
                  (       a  U R/                  X@R
                  5        O/[1        UR                   5         U R3                  U5        S S S 5        U R4                  R7                  5       nU R9                  U5        U R:                  (       a0  U R4                  R=                  5       (       a  U R?                  U5        U R@                  (       a0  U R4                  R=                  5       (       a  U RC                  U5        U(       a  U R&                  RE                  5         U RG                  5         U RI                  U5        U R4                  RK                  U RL                  U RN                  5      $ ! , (       d  f       GN.= f! U(       a  U R&                  RE                  5         f f = f)
N   zhWARNING: Running tests with --huntrleaks/-R and less than 3 warmup repetitions can give false positives!T)filer   r   r      zUsing random seed:F)(rj   r   r   r   stdoutr\   rg   process_cpu_countrA   r:   r9   r   rY   r(   rt   rv   r   r>  r   r?   r   r   start_load_trackerr   r   r   r=   get_coverage_resultsr   rJ   
need_rerunr   rN   r   stop_load_trackerr8  r4  get_exitcoder`   ra   )r   r   r   r   r   use_load_trackerrx   s          r   
_run_testsRegrtest._run_tests  s<   !2!2!:!:Q!>NC#CJJd3a !# 4 4 6 ;!q@D 88tzzT-A-At004--t?"D$4$45((2&h'!!-8H8H$  *KK**,	0""8-=-=> .h.C.CD//9 E ||88:H)4<<#:#:#<#<''1DLL$;$;$=$=)--/H%||(()>)>)-: 	:% ED  --/  s&   
AL LB5L 
LL $L;c                 J   [         R                  " U R                  SS9  [        U R                  5      n[	        5          [
        R                  " USS9   U R                  X5      sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)NT)exist_ok)r9   )rg   makedirsr   r&   r'   r   temp_cwdrL  )r   r   r   work_dirs       r   	run_testsRegrtest.run_tests.  sn    
DLL40- ^
 ##HD9
 x7 :9 ^
 :99 ^^s#   BA9&	B9
B	B
B"c                 Z   [        U R                  5      nS n[        5       n[        5       nU(       al  1 Skn[        R
                  n[        R
                  R                  5        VV	s0 s H$  u  pUR                  S5      (       a  X;   d  M"  X_M&     n
nn	X:w  a  U
nSnU(       a~  U(       aw  U R                  S:X  a$  U R                  (       d  UR                  SS/5        U R                  (       d2  [        R                  " S5      nU SU 3nUR                  S	U/5        SnX24$ s  sn	nf )
N>   
PYTHONPATH_PYTHON_PROJECT_BASE_PYTHON_HOST_PLATFORM_PYTHON_SYSCONFIGDATA_NAME_PYTHON_SYSCONFIGDATA_PATH)PYTHON_PYTHONTr   z-j2BUILDPYTHON z--python)r7  rv   r+   r,   rg   r~   itemsr  r\   rZ   r   	sysconfigget_config_var)r   regrtest_optskeep_environr~   cross_compile
hostrunnerkeepold_environr   valuenew_environbuildpythonrv   s                r   _add_cross_compile_opts Regrtest._add_cross_compile_opts?  s    DOO, *+ %&
D **K/1zz/?/?/A/A'<== /A  
 )%LZ1$T-@-@ $$dC[1 ??'66}E *|1[M:
$$j*%=>#&&/s   (!D'D'c                 ~   [         R                  R                  (       d  UR                  S5        S[         R                  ;  a  UR                  S5        [         R                  R                  S:  a  UR                  S5        U(       d2  [         R                  R                  (       d  UR                  S5        g g g )Nr   default)z-WerrorrC  z-bbz-E)	r   rD  write_throughr   warnoptionsr   flagsbytes_warningignore_environment)r   python_optsrd  s      r   _add_ci_python_optsRegrtest._add_ci_python_optso  s    
 zz''t$ COO+/ 99""Q&u%99//""4( 0 r   c                 2   [         R                  R                  5         [         R                  R                  5         [        R
                  " U5      n [        SU 3SS9  [        [        S5      (       a&  [        (       d  [        R                  " US   U5        g SS KnUR                  XS9 n UR                  5         S S S 5        [         R$                  " WR(                  5        g ! [         ah     UR                  [        S9   NI! UR                    a>    UR#                  5         UR                  5         [         R$                  " [&        5          Nf = ff = f! , (       d  f       N= f! [*         a  n[-        SU< S	U 35         S nAg S nAff = f)
Nz+ Tr   execvr   )envr   z!Failed to change Python options: z

Command: )r   rD  r   stderrr   r   r   hasattrrg   r   rz  r   PopenrE   KeyboardInterruptr-   TimeoutExpiredkillr   r   r   	Exceptionr*   )r   r   r~   cmd_textr   r   excs          r   _execute_pythonRegrtest._execute_python  s:   



::c?	2Bxj/.r7##JJQ% "%%c%74
;		 8 ) - ;; IIlI;)88 ; IIK IIKHH%9:;; 87  	2=cW E&&.Z1 2 2	2st   AE0 E0 /E1C*(E0 *
E5D
E
A
EEEEEE
E-)E0 0
F:FFc                 V   / n/ nU R                  U5      u  p4U R                  (       a  U R                  X5        U(       d  U(       d  Uc  g [        [        R
                  5      nU(       a  XSS& U(       a  UR                  U5        UR                  S5        U R                  XS5        g )Nr   z--dont-add-python-opts)	rl  rQ   rw  r  r   	orig_argvr   r   r  )r   rv  rc  r~   rd  r   s         r   r2   Regrtest._add_python_opts  s    !##% $ < <] K<<$$[?m'/ 3==!"!HJJ}%

+,S*r   c                 P   [        5         U R                  (       a\  [        R                  R	                  U R                  5      (       d.  [        R                  R                  U R                  5      U l        [        U R                  5        [        U R                  5      U l	        g r   )
r   rn   rg   rh   isabsri   r!   rY   r%   r|   r   s    r   _initRegrtest._init  sa    rww}}T5H5H'I'I"$''//$2E2E"FD))*$T]]3r   c                 J    U R                   c  [        S5      eU R                   $ )Nz4Should never use `.tmp_dir` before calling `.main()`)r|   r   r  s    r   r   Regrtest.tmp_dir  s(    == F  }}r   c                 `   U R                   (       a  U R                  5         U R                  5         U R                  (       a+  [	        U R
                  5        [        R                  " S5        U R                  (       a  [        S5        [        U R                  5        U R                  U5      u  p!SnU R                  (       a  U R                  U5        OBU R                  (       a   [!        UU R"                  U R                  S9  OU R%                  X!5      n[        R                  " U5        g )Nr   zPress any key to continue...)rS   rl   )rR   r2   r  rH   r)   r   r   r   rF   inputr   rl   r   rC   rB   rD   r   rS   rS  )r   r   r   r   s       r   mainRegrtest.main  s    $$!!#

T\\*HHQK>>01t}}%//%0OOH%!!x#'#3#3 $/ ~~h6Hr   )2r|   rQ   rY   rx   rz   rT   r`   r_   ra   r   r>   rb   rU   rr   rj   rn   r?   rS   rp   r   r   r\   rd   r:   r;   r   rv   r9   r   r}   r=   rZ   r   r   rW   rl   re   r<   rt   r8   rR   rN   rH   rA   rD   rC   rJ   rL   rF   r]   )F)r   r   )r   N)0__name__
__module____qualname____firstlineno____doc__r
   r7  r   r  r   r   rs   r   r   staticmethodrB   r   r   r   r   r   r   r   rw   r  r   r  r   r   r7   r   CoverageResultsr4  r8  r>  rL  rS  rl  rw  r  r2   r  propertyr   r   r   r  __static_attributes__ r   r   r/   r/   !   s    ,e99 e9 e9N T H(4 H(5HW[OA[;\ H(T )   H  @,8 , ,($H $C $3 $4 $L	8 	 	
Dx 
DD 
D!-5?D{{T?Q	$.x .D .`3 Kh KS KT K:u'<'<t'C : :("&
i 
H 
6<:9 <:X_ <: <:|8) 8HtO 8 8".'`)*2D+,4   (T/ X  r   r/   r   c                 j    [        [        R                  SS 40 UD6n[        X1S9R	                  U S9  g)zRun the Python suite.r   N)r2   )r   )r	   r   argvr/   r  )r   r2   kwargsr1   s       r   r  r    s1    	SXXab\	,V	,BR388u8Er   )NF)@rg   r   r   r   r   ra  r   rw   typingr   test.supportr   r   r   r   cmdliner	   r
   r   r   r   r?   r   r:   r   r   r   r   r=   r   r   r   r   r   setupr   r   r   r   r   r<   r   utilsr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r/   r  r  r   r   <module>r     s    	  	  
    4 4 , A A    % 6 + 0 6 "     G GTF( Fr   