
    z
@hR                        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+d:dZ,d Z-d;dZ.d Z/da0d Z1d Z2da3d Z4d Z5d Z6d Z7d:dedz  defdZ8d Z9d<d ed!e%defd"Z:e j;        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d0ZFd1 ZGd/e!edf         d2e!edf         dz  fd3ZHdefd4ZId5d6d7d8ZJd9 ZKdS )=    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|                    d|z             |r|                    d|z             | r9|r|                    d| z             n|                    d| |dz  z   z             |sd|z  S |d d	         }d
                    |          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.11/test/libregrtest/utils.pyformat_durationr%   <   s   	7S=	!	!BT""KGRgr**GWGR((NE7E (Y&''' )X'((( = 	=LLG+,,,, LLwd':;<<< |"1"IE88E??    namesreturnc                     | sd S t          |           D ]2\  }}t          j                            |          \  }}|dk    r|| |<   3d S )Nz.py)	enumerateospathsplitext)r'   idxnamebasenameexts        r$   strip_py_suffixr2   U   s`     u%% " "	T((..#%<<!E#J" "r&   c                 $    | dk    r|S ||S |dz   S )N   s )nsingularplurals      r$   r9   r9   ^   s%    Avv		#~r&   c                 ,    | dk    r|  d| S |  d| dS )Nr4   r   r5   r6   )r7   words     r$   countr<   g   s-    Avv}}d}}~~d~~~r&   F      c           
          d|z  }t          t          j        d                    d t	          |           D                       |||          |           dS )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   4   K   | ]}t          |          V  d S N)str).0elts     r$   	<genexpr>zprintlist.<locals>.<genexpr>x   s(       ? ?cS ? ? ? ? ? ?r&   )initial_indentsubsequent_indent)fileN)printtextwrapfillr   sorted)xwidthindentrH   blankss        r$   	printlistrQ   n   sq     6\F	(- ? ?VAYY ? ? ???'-I I I     r&   c                 .    t          j        |            d S rA   )r   print_warning)msgs    r$   rS   rS   }   s    #r&   c                 P   dt           _        t          j        d           t          j        }	 t          j                     t           j        j        t          _        t          |            t          j                                         |t          _        d S # |t          _        w xY w)NTzUnraisable exception)	r   environment_alteredrS   sysstderrflush_std_streamsorig_stderrorig_unraisablehookflush)
unraisable
old_stderrs     r$   regrtest_unraisable_hookr_      s    "&G0111J !###*6
J'''



Z
s   AB B%c                  @    t           j        at          t           _        d S rA   )rW   unraisablehookr[   r_   r6   r&   r$   setup_unraisable_hookrb      s    ,1Cr&   c                 j   dt           _        t          j        d| j        j                    t
          j        }	 t          j                     t           j        j        t
          _        t          |            t
          j        
                                 |t
          _        d S # |t
          _        w xY w)NTzUncaught thread exception: )r   rV   rS   exc_type__name__rW   rX   rY   rZ   orig_threading_excepthookr\   )argsr^   s     r$   regrtest_threading_excepthookrh      s    "&GP8NPPQQQJ !###*6
!$'''



Z
s   AB$ $B2c                  4    dd l } | j        at          | _        d S Nr   )	threading
excepthookrf   rh   )rk   s    r$   setup_threading_excepthookrm      s%     ) 48Ir&   c                  >   t           j                                        D ]} t          | d          r| `t           j        t           j        t           j        t           j        fD ]}||	                                 	 t           j        d         }|j
                                         n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d         }|j                                         n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d	         }	|	j                                         n# t          $ r Y nw xY w	 t           j        d
         }
|
                                 n# t          $ r Y nw xY w	 t           j        d         }d |_        n# t          $ r Y nw xY w	 t           j        d         }|                                 n# t          $ r Y nw xY w	 t           j        d         }|j        D ]} |             d S # t          $ r Y d S w xY w)N__warningregistry__zdistutils.dir_utilre	_strptimezurllib.parsezurllib.request	linecache	mimetypesfilecmpstructdoctestctypestyping)rW   modulesvalueshasattrro   stdoutrX   
__stdout__
__stderr__r\   _path_createdclearKeyErrorpurge_regex_cacheclear_cache
urlcleanup
clearcache_default_mime_types_cache_clearcachemaster_reset_cache	_cleanups)modstreamdistutils_dir_utilrp   rq   urllib_parseurllib_requestrr   rs   rt   ru   rv   rw   rx   fs                  r$   clear_cachesr      s   {!!## ( (3-.. 	(' :sz3>3>J  LLNNN1 [)=> 	(..0000    
[ 	



    
'K,	 	$$&&&&    
#{>2 	  """"    
$%56 	!!####    
K,	 	    
(K,	 	%%''''    
+i( 	    
X& 	    
+i(     
X& 	    
X& ! 	 	AACCCC	 	    s   <B( (
B54B59C   
C-,C-1D 
D*)D*.E 
E"!E"&F 
FFG 
GGG= =
H
	H
H: :
III2 2
I?>I?J 
J*)J*.K 
K"!K"&L 
LLc                     t          j        d          pd} t          j        d          pd}t          j        d          pd}t          j        d          pd}g }t          j        d          r|                    d           t          t          d          r2|                    d	           d
||z   v r|                    d           nK|                    d           d| v r|                    d           nd
||z   vr|                    d           t          j        d          }|r|                    d|            t          t          j        d          pd          }|r|                    d           g }d|v r|                    d           nd|v r|                    d           t          j                    r|                    d           |r(|                    d                    |                     g }t          j	        d          r|                    d           t          j	        d          r|                    d           t          j	        d          r|                    d            |r(|                    d                    |                     t          t          d!          r|                    d"           t          t          d#          r|                    d$           t          j        d%          r|                    d&           t          j        d'          r|                    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
getobjects	TraceRefs	_stats_onpystatsWITH_VALGRINDvalgrindWITH_DTRACEdtrace)
	sysconfigget_config_varr   r{   rW   intr   check_cflags_pgor   check_sanitizer)	config_argscflagscflags_nodistldflags_nodistbuild	frameworkr   optimizations
sanitizerss	            r$   get_build_infor     sj    *=99?RK%k228bF,-?@@FBM-.ABBHbNE 
++ Ws&'' (W&=011LL)***Y+--LL'''' 677LL''' ():;;I /-)--... )*<==DEEF X M~%%Y''''	N	"	"U###!! $U### .SXXm,,--- Jt,,, "&!!!d+++ "&!!!$''' #'""" +SXXj))*** sL!! "[!!!sK    Y00 !Z   .. XLr&   tmp_dirc                    | r!t           j                            |           } nt          j                    rt
          j        srt          j        d          } | ;t          j        d          } | s%t          j        d          } | st          d          t           j        	                    | d          } nst          j        d          } | st          d| d          t           j        	                    | d          } t          j
        | d	
           nt          j                    } t           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   e  sM    &,'$$W--
 $&&  	,? 4#2>BB?'6|DDG" 	
 #,":8"D"D& ". S# #  ',,w88 $2=AA &E18E E E   ',,w88 Gd33333)++G7??7###r&   c                      t           j        rFt          j        d          } | dk    rt          j        d           d S t          j        |            d S d S )Nr   i     )r   is_emscriptenr+   umask)old_masks    r$   	fix_umaskr     sX      8A;;uHUOOOOOHX r&   F
parent_dirworkerc                 H   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                            | |          }|S )Nr   i@B )r   r   r   randomrandintr+   getpidWORK_DIR_PREFIXrB   WORKER_WORK_DIR_PREFIXr   FS_NONASCIIr,   r   )r   r   nouncework_dirs       r$   get_work_dirr     s       9-- 8"S[[0)CKK7	%%Hw||J11HOr&   c               #      K   	 d V  d S # t           $ rK} t          j        rt          j        t
          d           t          j        | j                   Y d } ~ d S d } ~ ww xY w)NT)exit)	
SystemExitr   can_start_threadfaulthandlerdump_traceback_laterEXIT_TIMEOUTrW   r   code)excs    r$   exit_timeoutr     s          , 	G-lFFFFs   
 
AA AA	test_nameverbosec           
      ^   t           j        }t          j                            |          sd S t          j                            |          rdd l}d|j        }}nAt          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              ||           d S # t&          $ r%}t          |  d| d|d	|            Y d }~d S d }~ww xY w)
Nr   	directoryrH   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   rS   r   rV   statchmodS_IRWXUS_IRWXGS_IRWXO	Exception)r   r   r/   r   kindnukerr   r   s           r$   remove_testfnr    s    D7>>$  
w}}T 2!6=e			 2bie 14 1 1 1 2 2 	2  +@@@@@@AAA&*#<
t|dl2T\ABBBd < < < ; ; ; ; ; ;58; ; 	< 	< 	< 	< 	< 	< 	< 	< 	<<s   9C= =
D,D''D,test_dirc                 >    |                      d          s|r| S d| z   S )Nztest.)
startswith)r   r  s     r$   abs_module_namer    s2    G$$ # # ""r&   )
setUpClasstearDownClasssetUpModuletearDownModule)is_errorc                    |                      d          d         }|rp|t          v rg|                     d          rd S |                     d          }|                     d          }| |dz   |                              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7$$%JKK 	 4 ##C((##C((dQhn-33C88<<r&   c            
         	 ddl } n# t          $ r Y dS w xY w|                     | j                  \  }}d}||k     r||k     rt	          ||          }	 |                     | j        ||f           t          d| d|            dS # t          t          f$ r$}t          d| d| d| d	           Y d}~dS d}~ww xY wdS dS )
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	setrlimitrI   
ValueErrorOSErrorrS   )r  fd_limitmax_fdsdesired_fdsnew_fd_limiterrs         r$   adjust_rlimit_nofiler,    s[       !**8+ABBHgK+(W"4"4;00	5x5 ,g68 8 8G8GGGGHHHHHG$ 	5 	5 	5 4 4 4)4 4-04 4 4 5 5 5 5 5 5 5 5 5	5 "4"4s$    
2B B=B88B=c                  p    t           j                            d          x} t          j        d          } | S )N_PYTHON_HOSTRUNNER
HOSTRUNNER)r+   environgetr   r   )
hostrunners    r$   get_host_runnerr3     s2    jnn%9:::
C-l;;
r&   c                      dt           j        v S )N_PYTHON_HOST_PLATFORM)r+   r0  r6   r&   r$   is_cross_compiledr6  &  s    #rz12r&   use_resourcesc                    t          |           } t          t                    }dg}t          || z
            D ]}|                    d|            t          | |z
            D ]}|                    |            d                    |          }d| }d                    t          |                     }dt          |            d| }t          |          t          |          k    r|S |S )Nall-,zresources: zresources (z): )setALL_RESOURCESrL   r   r   len)r7  all_resourcesrelative_allr/   all_texttexts         r$   format_resourcesrC  *  s   &&M&&M 7L}}455 ( (JJJ''''}}455 ' 'tI&&&&xx%%H'X''H 88F=))**D6]++6666D 8}}D		!!r&   c                      t          t          d          r!t          t          j        d                    S t          j                    S )Nsched_getaffinityr   )r{   r+   r>  rE  	cpu_countr6   r&   r$   process_cpu_countrG  B  s:    r&'' 2'**+++|~~r&   
python_cmdc                    t          dt          j                    gt          j                                        R   t          dt          j        d          dt          j        z             t          dd                    t                                           t          dt          j
                               t          j                    }|r.t                      }|r||k    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                  }|j                            dd                                          }	|	rt          d|	            nB|j        rt          d|j         d           n"t9                      }
|
rt          d|
            t;          j        d          }t;          j        d          }t;          j        d          }g }|r|                    d           |r|                    d           |r|                    d           |rnt          dd                     |                      |d!f|d"f|d#ffD ]=\  }}t          j         !                    |          }|r|t          d| d$|           >t          d%           d S )&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|   rB  cwd
z== host platform: z1== host platform: <command failed with exit code >z== host runner: r   r   r   r   r   zundefined behaviorz== sanitizers: z, ASAN_OPTIONSMSAN_OPTIONSUBSAN_OPTIONS=)r\   )"rI   rK  python_implementationrW   versionr  	byteorderr   r   r+   getcwdrF  rG  localegetencodinggetfilesystemencodingrC  r6  shlexr   runPIPEr   SAVEDCWDr|   replacestrip
returncoder3  r   r   r   r0  r1  )r7  rH  rF  affinityrB  cross_compilecmdget_cmdprocr|   r2  asanmsanubsanr   	sanitizerenv_varoptionss                     r$   display_headerrl  I  s    
$.00G3;3D3D3F3FGGGG	$!$///-/ / /	
chh~'7'788999	)RY[[!!!I *$&& 	GI--#FF)FFFIoy)))	E!!!!3#<#>#>#>@ A A A  /..lDll . 	/ 	/ 	/ &''M (&''' 3j$$&&&'''1J11j1~?"	$ $ $
 $$T3//5577 	Z/v//0000_ 	ZXdoXXXYYY$&&
 	31Z11222 "4000D"$///D#t,,,EJ %)$$$ $(### 0./// 	37		* 5 577888>">"O$#
 	3 	3Iw
 Z^^G,,G 3W01G11g11222	r&   c                    dd l }t          j                            |                    |           t
          dz             }t          d| z             |                     |          D ]n}t          j                            |          r't          d|z             t          j	        |           Ht          d|z             t          j
        |           od S )Nr   *zCleanup %s directoryzRemove directory: %szRemove file: %s)globr+   r,   r   escape
TMP_PREFIXrI   r   r   r   r   )r   ro  r,   r/   s       r$   cleanup_temp_dirrr    s    KKK7<<G,,j3.>??D	
 7
*+++		$ # #7== 	#(4/00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          $ r Y nw xY w	 t          |          S # t
          $ r Y nw xY wd S rj   )signalSignalsr/   r%  WINDOWS_STATUSr   )exitcodesignums     r$   get_signal_namer|    s    !||	>&)).. 	 	 	D	h''    4s   $ 
11A 
AArA   )r=   r>   N)F)L
contextlibr   rW  r   os.pathr+   rK  r   rZ  rw  r   rW   r   r   rJ   collections.abcr   r   testr   test.supportr   r   rq  r   r   r   r=  RESOURCE_NAMESrB   StrPathTestNameStrJSONtuple	TestTuplelistTestListbool
TestFilterFilterTupledict
FilterDictr%   r2   r9   r<   rQ   rS   r[   r_   rb   rf   rh   rm   r   r   r   r   r   contextmanagerr   r   r  r  	frozensetr  r  r,  r3  r6  rC  rG  rl  rr  ry  r|  r6   r&   r$   <module>r     sW                      



       . . . . . . . .       " " " " " " ) ) ) ) ) )
 
(94 
 P !== 
(C- 	> %$'(
HcM"(K'(
  2"49t+ " " " " "                 2 2 2 !      9 9 9a a aHN N Nb)$ )$'D. )$G )$ )$ )$ )$X   W d w    (   "<X "< "< "< "< "< "<J#x #7T> #h # # # # "	 #   
 5:     *5 5 54  3 3 3HSM    0  G%S/ G$S#X5G G G GT#g # # # # *''     r&   