
    RhT                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ dZeZedz   ZdZd	Zed
z   ZeZeZeZ e!edf   Z"e#e   Z$e#e!ee%f      Z&e!edf   Z'e(ee'f   Z)d Z*de#e   dz  ddfdZ+d8dZ,d Z-d9dZ.d Z/da0d Z1d Z2da3d Z4d Z5d Z6d Z7d8dedz  defdZ8d Z9d:dede%defd Z:e jv                  d!        Z<d"ed#e=ddfd$Z>d"ed%edz  defd&Z? e@d'      ZAdd(d)ZBd* ZCd+ ZDd, ZEd-ee   fd.ZFd/ ZGd-e!edf   d0e!edf   dz  fd1ZHdefd2ZId3d4d5d6ZJd7 ZKy);    N)CallableIterable)support)	os_helper)threading_helpertest_python_worker_g      ^@)
audiocurses	largefilenetworkdecimalcpu
subprocessurlfetchguiwalltime)extralargefiletzdata.c                    t        j                  | dz        }t        |d      \  } }t        | d      \  }} t        |d      \  }}g }|r|j                  d|z         |r|j                  d|z         | r1|r|j                  d| z         n|j                  d| |dz  z   z         |sd|z  S |d d	 }d
j	                  |      S )Ng     @@i  <   z%s hourz%s minz%s secz%.1f secz%s ms    )mathceildivmodappendjoin)secondsmsminuteshourspartss        -/usr/lib/python3.12/test/libregrtest/utils.pyformat_durationr%   <   s    	7S=	!BT"KGRgr*GWGR(NE7EY&'X'(LLG+, LLwd':;<|"1IE88E?    namesreturnc                     | sy t        |       D ]2  \  }}t        j                  j                  |      \  }}|dk(  s.|| |<   4 y )Nz.py)	enumerateospathsplitext)r'   idxnamebasenameexts        r$   strip_py_suffixr2   U   sH    u% "	T((.#%<!E#J"r&   c                 "    | dk(  r|S ||S |dz   S )N   s )nsingularplurals      r$   r9   r9   ^   s#    Av		#~r&   c                 *    | dk(  r|  d| S |  d| dS )Nr4   r   r5   r6   )r7   words     r$   countr<   g   s+    AvAdV}AdV1~r&   c           
          d|z  }t        t        j                  dj                  d t	        |       D              |||      |       y)zPrint the elements of iterable x to stdout.

    Optional arg width (default 70) is the maximum line length.
    Optional arg indent (default 4) is the number of blanks with which to
    begin each line.
    r   c              3   2   K   | ]  }t        |        y wN)str).0elts     r$   	<genexpr>zprintlist.<locals>.<genexpr>x   s      ?cS ?s   )initial_indentsubsequent_indent)fileN)printtextwrapfillr   sorted)xwidthindentrF   blankss        r$   	printlistrO   n   s@     6\F	(-- ?VAY ??'-Ir&   c                 .    t        j                  |        y r?   )r   print_warning)msgs    r$   rQ   rQ   }   s    #r&   c                 \   dt         _        t        j                  d       t        j                  }	 t        j
                          t         j                  j                  t        _        t        |        t        j                  j                          |t        _        y # |t        _        w xY w)NTzUnraisable exception)	r   environment_alteredrQ   sysstderrflush_std_streamsorig_stderrorig_unraisablehookflush)
unraisable
old_stderrs     r$   regrtest_unraisable_hookr]      sm    "&G01J !!#**66
J'


Z
s   A B B+c                  B    t         j                  at        t         _        y r?   )rU   unraisablehookrY   r]   r6   r&   r$   setup_unraisable_hookr`      s    ,,1Cr&   c                    dt         _        t        j                  d| j                  j                          t
        j                  }	 t        j                          t         j                  j                  t
        _        t        |        t
        j                  j                          |t
        _        y # |t
        _        w xY w)NTzUncaught thread exception: )r   rT   rQ   exc_type__name__rU   rV   rW   rX   orig_threading_excepthookrZ   )argsr\   s     r$   regrtest_threading_excepthookrf      s    "&G78N8N7OPQJ !!#**66
!$'


Z
s   	A B5 5Cc                  :    dd l } | j                  at        | _        y Nr   )	threading
excepthookrd   rf   )ri   s    r$   setup_threading_excepthookrk      s     ) 4 48Ir&   c                     t         j                  j                         D ]  } t        | d      s| ` t         j
                  t         j                  t         j                  t         j                  fD ]  }||j                           	 t         j                  d   }|j                          	 t         j                  d   }|j                  j                          	 t         j                  d   }|j                          	 t         j                  d   }|j                          	 t         j                  d   }|j!                          	 t         j                  d   }|j#                          	 t         j                  d   }|j$                  j                          	 t         j                  d	   }	|	j'                          	 t         j                  d
   }
d |
_        	 t         j                  d   }|j+                          	 t         j                  d   }|j,                  D ]	  } |         	 	 t         j                  d   }|j.                  j1                          	 t         j                  d   }|j2                  j1                          |j4                  j                          |j6                  j                          	 t         j                  d   }|j8                  j:                  j1                          y # t        $ r Y Qw xY w# t        $ r Y 3w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y uw xY w# t        $ r Y Ww xY w# t        $ r Y w xY w# t        $ r Y y w xY w)N__warningregistry__re	_strptimezurllib.parsezurllib.request	linecache	mimetypesfilecmpstructdoctestctypestyping	fractionsinspectzimportlib.metadata)rU   modulesvalueshasattrrm   stdoutrV   
__stdout__
__stderr__rZ   purgeKeyError_regex_cacheclearclear_cache
urlcleanup
clearcache_default_mime_types_cache_clearcachemaster_reset_cache	_cleanups_hash_algorithmcache_clear_shadowed_dict_from_mro_tuple_filesbymodnamemodulesbyfileFastPath__new__)modstreamrn   ro   urllib_parseurllib_requestrp   rq   rr   rs   rt   ru   rv   frw   rx   importlib_metadatas                    r$   clear_cachesr      s   {{!!# (3-.'( ::szz3>>3>>J LLN[[ 	
'KK,	 	$$&#{{>2 	  "$%56 	!!#KK,	 	(KK,	 	%%'++i( 	X& 	++i( X& 	X& !! 	AC	0KK,	 	!!--/&++i( 	--99;%%'##%: [[)=> 	##++779C                            s   
K2 .L L  L" $L2 M ,M M" >M2 N =N *N" N2 :O 2	K?>K?	LL	LL"	L/.L/2	L?>L?	MM	MM"	M/.M/2	M?>M?	NN	NN"	N/.N/2	N?>N?	OOc                  T   t        j                  d      xs d} t        j                  d      xs d}t        j                  d      xs d}t        j                  d      xs d}g }t        j                  d      r|j                  d       t        t        d      r*|j                  d	       d
||z   v rQ|j                  d       n?|j                  d       d| v r|j                  d       nd
||z   vr|j                  d       t        j                  d      }|r|j                  d|        t        t        j                  d      xs d      }|r|j                  d       g }d|v r|j                  d       nd|v r|j                  d       t        j                         r|j                  d       |r |j                  dj                  |             g }t        j                  d      r|j                  d       t        j                  d      r|j                  d       t        j                  d      r|j                  d        t        j                  d!      r|j                  d"       |r |j                  dj                  |             t        t        d#      r|j                  d$       t        t        d%      r|j                  d&       t        j                  d'      r|j                  d(       t        j                  d)      r|j                  d*       |S )+NCONFIG_ARGS 	PY_CFLAGSPY_CFLAGS_NODISTPY_LDFLAGS_NODISTPy_NOGILnogilgettotalrefcountdebugz-DNDEBUGwithout_assertreleasez--with-assertionswith_assertPYTHONFRAMEWORKz
framework=PY_ENABLE_SHARED0sharedz
-flto=thinThinLTOz-fltoLTOPGO+TaddressASANmemoryMSANubUBSANthreadTSAN
getobjects	TraceRefs	_stats_onpystatsWITH_VALGRINDvalgrindWITH_DTRACEdtrace)
	sysconfigget_config_varr   r{   rU   intr   check_cflags_pgor   check_sanitizer)	config_argscflagscflags_nodistldflags_nodistbuild	frameworkr   optimizations
sanitizerss	            r$   get_build_infor   "  s    **=9?RK%%k28bF,,-?@FBM--.ABHbNE 
+Ws&'W&=01LL)*Y+-LL' 67LL' (():;Iz)-. ))*<=DEFX M~%Y'	N	"U#!U#SXXm,- Jt,&!d+&!$''"d+&!SXXj)* sL![!sK Y0Z .XLr&   tmp_dirc                    | r!t         j                  j                  |       } nt        j                         rt
        j                  sqt        j                  d      } | 9t        j                  d      } | s"t        j                  d      } | st        d      t         j                  j                  | d      } nrt        j                  d      } | st        d| d      t         j                  j                  | d      } t        j                  | d	
       nt        j                         } t         j                  j                  |       S )Nabs_builddir
abs_srcdirsrcdirz1Could not determine the correct value for tmp_dirr   projectbasez>sysconfig.get_config_var('projectbase') unexpectedly returned z on WASIT)exist_ok)r+   r,   
expanduserr   is_python_buildr   is_wasir   RuntimeErrorr   makedirstempfile
gettempdirabspath)r   s    r$   get_temp_dirr   v  s   ''$$W-
 $$&??#22>B?'66|DG"
 #,":":8"D&". S#  '',,w8 $22=A&1188E  '',,w8 Gd3))+G77??7##r&   c                      t         j                  rFt        j                  d      } | dk(  rt        j                  d       y t        j                  |        y y )Nr   i     )r   is_emscriptenr+   umask)old_masks    r$   	fix_umaskr     s>     88A;uHHUOHHX r&   F
parent_dirworkerc                 P   t         j                  st         j                  rt        j                  dd      }nt        j                         }|rt        t        |      z   }nt        t        |      z   }|t        j                  z  }t
        j                  j                  | |      }|S )Nr   i@B )r   r   r   randomrandintr+   getpidWORK_DIR_PREFIXr@   WORKER_WORK_DIR_PREFIXr   FS_NONASCIIr,   r   )r   r   nouncework_dirs       r$   get_work_dirr     sv     9-"S[0)CK7	%%%Hww||J1HOr&   c               #      K   	 d  y # t         $ rT} t        j                  rt        j                  t
        d       t        j                  | j                         Y d } ~ y d } ~ ww xY ww)NT)exit)	
SystemExitr   can_start_threadfaulthandlerdump_traceback_laterEXIT_TIMEOUTrU   r   code)excs    r$   exit_timeoutr     sK       ,,--lFs+   A)	 A)	A&A
A!A)!A&&A)	test_nameverbosec           
      p   t         j                  }t        j                  j	                  |      sy t        j                  j                  |      rdd l}d|j                  }}nAt        j                  j                  |      rdt        j                  }}nt        d|d      |rt        |  d| d|       dt        _        	 dd l}t        j                  ||j                   |j"                  z  |j$                  z          ||       y # t&        $ r }t        |  d| d|d	|        Y d }~y d }~ww xY w)
Nr   	directoryrF   zos.path says z) exists but is neither directory nor filez left behind r   Tz and it couldn't be removed: )r   TESTFNr+   r,   existsisdirshutilrmtreeisfileunlinkr   rQ   r   rT   statchmodS_IRWXUS_IRWXGS_IRWXO	Exception)r   r   r/   r  kindnukerr  r   s           r$   remove_testfnr    s    D77>>$ 
ww}}T!6==e		biie]4( 30 1 2 	2 =ax@A&*#<
t||dll2T\\ABd <=ax @558E; 	< 	<<s   AD 	D5D00D5test_dirc                 6    | j                  d      s|r| S d| z   S )Nztest.)
startswith)r   r  s     r$   abs_module_namer    s%    G$ ""r&   )
setUpClasstearDownClasssetUpModuletearDownModule)is_errorc                    | j                  d      d   }|rV|t        v rN| j                  d      ry | j                  d      }| j                  d      }| |dz   | j                  d      d   S |S )	Nr   r   )zsetUpModule (ztearDownModule (()r4   .)split_TEST_LIFECYCLE_HOOKSr  index)test_full_namer  
short_namelparrpars        r$   normalize_test_namer&    s    %%c*1-JJ"77$$%JK  ##C(##C(dQh-33C8<<r&   c            
      ^   	 ddl } | j                  | j                        \  }}d}||k  rC||k  r=t	        ||      }	 | j                  | j                  ||f       t        d| d|        yyy# t        $ r Y yw xY w# t        t        f$ r}t        d| d| d| d	       Y d}~yd}~ww xY w)
z
    On macOS the default fd limit (RLIMIT_NOFILE) is sometimes too low (256)
    for our test suite to succeed. Raise it to something more reasonable. 1024
    is a common Linux default.
    r   Ni   zRaised RLIMIT_NOFILE: z -> z#Unable to raise RLIMIT_NOFILE from z to z: r  )
resourceImportError	getrlimitRLIMIT_NOFILEmin	setrlimitrG   
ValueErrorOSErrorrQ   )r(  fd_limitmax_fdsdesired_fdsnew_fd_limiterrs         r$   adjust_rlimit_nofiler5    s     !**8+A+ABHgK+(W"4;0	5x55 ,g68*8*DGH #5   G$ 	5?z)N"SE4 5 5	5s(   A/ /A> /	A;:A;>B,B''B,c                  r    t         j                  j                  d      x} t        j                  d      } | S )N_PYTHON_HOSTRUNNER
HOSTRUNNER)r+   environgetr   r   )
hostrunners    r$   get_host_runnerr<  1  s1    jjnn%9::
C--l;
r&   c                  &    dt         j                  v S )N_PYTHON_HOST_PLATFORM)r+   r9  r6   r&   r$   is_cross_compiledr?  7  s    #rzz12r&   use_resourcesc                    t        |       } t        t              }dg}t        || z
        D ]  }|j                  d|         t        | |z
        D ]  }|j                  |         dj	                  |      }d| }dj	                  t        |             }dt        |        d| }t        |      t        |      k  r|S |S )Nall-,zresources: zresources (z): )setALL_RESOURCESrJ   r   r   len)r@  all_resourcesrelative_allr/   all_texttexts         r$   format_resourcesrL  ;  s    &M&M 7L}}45 (avJ'(}}45 'tf&'xx%HXJ'H 88F=)*D]+,Cv6D 8}D	!r&   c                      t        t        d      rt        t        j                  d            S t        j                         S )Nsched_getaffinityr   )r{   r+   rG  rN  	cpu_countr6   r&   r$   process_cpu_countrP  S  s/    r&'2''*++||~r&   
python_cmdc                    t        dt        j                         gt        j                  j                           t        dt        j                  d      dt        j                  z         t        ddj                  t                            t        dt        j                                t        j                         }|r%t               }|r||k7  r| d| d	}t        d
|       t        dt        j                         dt        j                                | rt!        |       }t        d|        nt        d       t#               }|rt        d       |rt%        j                  |      }t        d|        g |dd}t'        j(                  |t&        j*                  dt,        j.                        }|j0                  j3                  dd      j5                         }	|	rt        d|	        n@|j6                  r4t        d|j6                   d       nt9               }
|
rt        d|
        t;        j<                  d      }t;        j<                  d      }t;        j<                  d      }t;        j<                  d      }g }|r|j?                  d       |r|j?                  d       |r|j?                  d       |r|j?                  d        |rit        d!d"j                  |              |d#f|d$f|d%f|d&ffD ];  \  }}t        j@                  jC                  |      }|s(|+t        d| d'|       = t        d(       y ))Nz==T)aliasedz	%s-endianz== Python build:r   z== cwd:z (process) / z	 (system)z== CPU count:z== encodings: locale=z FS=z== zL== resources: all test resources are disabled, use -u option to unskip testsz== cross compiled: Yesz== host python: z-mplatform)r|   rK  cwd
z== host platform: z1== host platform: <command failed with exit code >z== host runner: r   r   r   r   r   r   zundefined behaviorr   z== sanitizers: z, ASAN_OPTIONSMSAN_OPTIONSUBSAN_OPTIONSTSAN_OPTIONS=)rZ   )"rG   rT  python_implementationrU   versionr  	byteorderr   r   r+   getcwdrO  rP  localegetencodinggetfilesystemencodingrL  r?  shlexr   runPIPEr   SAVEDCWDr|   replacestrip
returncoder<  r   r   r   r9  r:  )r@  rQ  rO  affinityrK  cross_compilecmdget_cmdprocr|   r;  asanmsanubsantsanr   	sanitizerenv_varoptionss                      r$   display_headerrw  Z  s    
$..0G3;;3D3D3FG	$!!$/-/	
chh~'789	)RYY[!I$&I-#*M)IFIoy)	!3#<#<#>@ A .D6l . 	/ &'M&'jj$ &'1J11j1~~??""	$
 $$T3/557&vh/0__EdooEVVWXY$&
$ZL12 ""40D""$/D##t,E""$/DJ)$(#./(#		* 5678>">"O$>"	#
 	3Iw ZZ^^G,GW0G9Ag[12	3 
r&   c                    dd l }t        j                  j                  |j	                  |       t
        dz         }t        d| z         |j                  |      D ]h  }t        j                  j                  |      r$t        d|z         t        j                  |       Ft        d|z         t        j                  |       j y )Nr   *zCleanup %s directoryzRemove directory: %szRemove file: %s)globr+   r,   r   escape
TMP_PREFIXrG   r  r   r  r  )r   rz  r,   r/   s       r$   cleanup_temp_dirr}    s    77<<G,j3.>?D	
 7
*+		$ #77==(4/0T"#d*+T"#r&   STATUS_ACCESS_VIOLATIONSTATUS_STACK_OVERFLOWSTATUS_CONTROL_C_EXIT)l       l       l   :   c                     | dk  r#|  }	 t        j                  |      j                  S 	 t        |    S # t        $ r Y w xY w# t
        $ r Y y w xY wrh   )signalSignalsr/   r.  WINDOWS_STATUSr   )exitcodesignums     r$   get_signal_namer    sd    !|	>>&)...h''	  		
  s   3 A 	??	AAr?   )F      N)F)L
contextlibr   ra  r   os.pathr+   rT  r   rd  r  r   rU   r   r   rH   collections.abcr   r   testr   test.supportr   r   r|  r   r   r   rF  RESOURCE_NAMESr@   StrPathTestNameStrJSONtuple	TestTuplelistTestListbool
TestFilterFilterTupledict
FilterDictr%   r2   r9   r<   rO   rQ   rY   r]   r`   rd   rf   rk   r   r   r   r   r   contextmanagerr   r   r  r  	frozensetr   r&  r5  r<  r?  rL  rP  rw  r}  r  r  r6   r&   r$   <module>r     sI             
    .  " )
 
(94 
 P !== 
(C- 	> %$'(
HcM"(K'(
2"49t+ " "   2 !  9o:dQh)$'D. )$G )$XW d w (  "<X "< "< "<J#x #7T> #h # " #  
 5: *543HSM 0K%S/ K$S#X5K\#g # *''r&   