a
    3jk                 	   @   s*  e d kred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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 g dZdZejdkre d	krd
ZdZdZdZ G dd de!Z"G dd de"Z#G dd de#Z$G dd de"Z%G dd dej&Z'ej(dpddZ)dd Z*dqddd d!Z+d"d# Z,d$d% Z-d&d' Z.drd(d)Z/d*d+ Z0dZ1dZ2da3da4dZ5dZ6da7d,d- Z8d.d/ Z9d0d1 Z:d2d3 Z;ej<d4r dsd5d6Z=d7d8 Z>d9d: Z?d;d< Z@d=d> ZAnejBZ>ejCZ?d?d< Z@d@d> ZAdAdB ZBdCdD ZCdEdF ZDdGdH ZEdIdJ ZFdKdL ZGdMdN ZHdtdOdPZIdQdR ZJdSdT ZKdUdV ZLdWdX ZMdYdZ ZNd[ZOd\ZPeQeRSd]<d^d_ZTdudadbZUdvdddeZVdwdgdhZWdxdjdkZXej<dlZYeZedmZ[ejdkr*e[r$dnndoZ\ndZ\ej]dlkr@dpZ^ndqZ^dr_e^e` Z^dsZadtZbduD ]DZczedeeececkrefW n efy   Y n0 ecZb qq`e^dv ZgejdwkrddlhZhehidxegZgej ZkdZlej]dykr8em jdzkrxe^d{ Zlzelnek W n eoy    Y n0 epd|elekf  dZln@ejdwkrxzd}qek W n$ eryv   e^d~qekd ZlY n0 dZsdD ]@Z]ze]qek W n* ery   eee^e] ZsY  qY n0 qebre^eb ZtndZtetpe^Zuev ZwdZxdZyej(dyddZzej(dzddZ{ej(d{ddZ|eZedr@ej(dd Z}ej~ej~eZej~eZej~edZdd Zd|ddZdd Zdd Zdd Zd}dddddZd~dddddZdd ZG dd deZdddZej(dd Zej(dtedfddZej(dd ZG dd deZG dd dejjZG dd deZG dd deZeeejdZeeejdZeeejdZej(dd Zdd Zdd Zdd Zdd Zej(dd Zdd ZdZdZeZedrde ZdZed Zddń ZddǄ ZdZdZdd˄ Zej(dd̈́ Zddτ ZdZde Zdze Zde ZejZddԄ ZG ddք dփZddd؄Zddڄ ZG dd܄ d܃Zddބ Zdd Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd Zdadadadd Zdd ZːdddZdd Zdd Zdd Ze o4ejdko4ed ZejduoFe ZeQedZԐddd ZՐdd Z֐dd Zאdd Zdaِdd Zڐd	d
 Zېdd Zej(dddZݐdddZސdd Zej(dddZej(dd Zej(dd Zdd Zdd ZG dd deZdadd  Zd!d" Zdad#d$ ZG d%d& d&Zdad'd( Zd)d* Zd+d, Zd-d. Zdd/d0d1Zdd2d3Zdd4d5ZG d6d7 d7Zd8d9 Zd:d; Zdd<d=Zg fd>d?Zdad@dA Zej(dBdC ZdDdE ZG dFdG dGZdHdI ZG dJdK dKZG dLdM dMZ e  ZG dNdO dOZe ZejG dPdQ dQZe ZejG dRdS dSZe ZdTdU Z	ej
jZdVdW ZG dXdY dYZG dZd[ d[Zdd\d]d^Zd_d` Zdadb Zej(dcdd Zdedf Zej(ddhdiZeeedjdkdlZeddmdndoZdS (  ztest.supportz.support must be imported from the test package    N   )get_test_runner)^PIPE_MAX_SIZEverbose
max_memuseuse_resourcesfailfastError
TestFailedTestDidNotRunResourceDeniedimport_moduleimport_fresh_moduleCleanImportunloadforgetrecord_original_stdoutget_original_stdoutcaptured_stdoutcaptured_stdincaptured_stderrTESTFNSAVEDCWDunlinkrmtreetemp_cwdfindfilecreate_empty_filecan_symlinkfs_is_case_insensitiveis_resource_enabledrequiresrequires_freebsd_versionrequires_linux_versionrequires_mac_vercheck_syntax_errorcheck_syntax_warningTransientResourcetime_outsocket_peer_resetioerror_peer_resetBasicTestRunnerrun_unittestrun_doctestskip_unless_symlinkrequires_gziprequires_bz2requires_lzma
bigmemtestbigaddrspacetestcpython_onlyget_attributerequires_IEEE_754skip_unless_xattrrequires_zlibanticipate_failureload_package_testsdetect_api_mismatchcheck__all__skip_if_buggy_ucrt_strfptimeignore_warnings	is_jython
is_androidcheck_impl_detail
unix_shellsetswitchintervalopen_urlresource
temp_umaskreap_childrenthreading_setupthreading_cleanupreap_threadsstart_threadscheck_warningscheck_no_resource_warningcheck_no_warningsEnvironmentVarGuardrun_with_locale	swap_item	swap_attrMatcherset_memlimitSuppressCrashReportsortdictrun_with_tzPGOmissing_compiler_executablefd_count	ALWAYS_EQNEVER_EQLARGESTSMALLESTLOOPBACK_TIMEOUTINTERNET_TIMEOUTSHORT_TIMEOUTLONG_TIMEOUTg      @win32ZARM
   g      N@g      >@g     r@c                   @   s   e Zd ZdS )r	   N__name__
__module____qualname__ rh   rh   Q/www/server/python_manager/versions/3.9.10/lib/python3.9/test/support/__init__.pyr	   v   s   r	   c                   @   s   e Zd ZdS )r
   Nrd   rh   rh   rh   ri   r
   y   s   r
   c                       s$   e Zd Z fddZdd Z  ZS )TestFailedWithDetailsc                    s&   || _ || _|| _t ||| d S N)msgerrorsfailuressuper__init__)selfrl   rm   rn   	__class__rh   ri   rp   ~   s    zTestFailedWithDetails.__init__c                 C   s   | j S rk   rl   rq   rh   rh   ri   __str__   s    zTestFailedWithDetails.__str__)re   rf   rg   rp   rv   __classcell__rh   rh   rr   ri   rj   |   s   rj   c                   @   s   e Zd ZdS )r   Nrd   rh   rh   rh   ri   r      s   r   c                   @   s   e Zd ZdS )r   Nrd   rh   rh   rh   ri   r      s   r   Tc                 c   sL   | rBt  $ t ddt d V  W d    qH1 s60    Y  nd V  d S )Nignorez.+ (module|package))warningscatch_warningsfilterwarningsDeprecationWarningrx   rh   rh   ri   _ignore_deprecated_imports   s    
&r~   c                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc                    sP   t  4 t jd d | g|R i |W  d    S 1 sB0    Y  d S )Nrx   category)ry   rz   simplefilter)rq   argskwargs)r   testrh   ri   wrapper   s    
z3ignore_warnings.<locals>.decorator.<locals>.wrapper	functoolswraps)r   r   r   r   ri   	decorator   s    z"ignore_warnings.<locals>.decoratorrh   )r   r   rh   r   ri   r>      s    r>   Frh   )required_onc                C   s   t |p zt| W W  d    S  tyh } z,tjt|rF t	t
|W Y d }~n
d }~0 0 W d    n1 s~0    Y  d S rk   )r~   	importlibr   ImportErrorsysplatform
startswithtupleunittestSkipTeststr)name
deprecatedr   rl   rh   rh   ri   r      s    	
r   c                 C   sL   i }t dd | D }ttjD ]&}|| v s6||r tj|||< q |S )Nc                 s   s   | ]}|d  V  qdS ).Nrh   ).0r   rh   rh   ri   	<genexpr>       z+_save_and_remove_modules.<locals>.<genexpr>)r   listr   modulesr   pop)namesorig_modulesprefixesmodnamerh   rh   ri   _save_and_remove_modules   s    r   c                 C   s   | r
t jS dd S )Nc                 S   s   | S rk   rh   frh   rh   ri   <lambda>   r   z$anticipate_failure.<locals>.<lambda>)r   ZexpectedFailure)Z	conditionrh   rh   ri   r9      s    r9   c                 C   sF   |d u rd}t jt jt jt}|j| ||d}|| |S )Nztest*)Z	start_dirZtop_level_dirpattern)ospathdirname__file__ZdiscoverZaddTests)Zpkg_dirloaderZstandard_testsr   Ztop_dirZpackage_testsrh   rh   ri   r:      s    

r:   c              
   C   s   t | t|}t|}| h||}t|}|D ]}d tj|< q4z|z|D ]}t| qLW n6 ty   Y W t| tj| W d    d S 0 t	| W t| tj| W  d    S t| tj| 0 W d    n1  s0    Y  d S rk   )
r~   r   r   r   r   
__import__r   updater   r   )r   ZfreshZblockedr   r   r   r   rh   rh   ri   r      s0    

  r   c                 C   s<   zt | |}W n$ ty2   td| |f Y n0 |S d S )Nzobject %r has no attribute %r)getattrAttributeErrorr   r   )objr   Z	attributerh   rh   ri   r5   !  s
    r5   c                 C   s   | a d S rk   )_original_stdout)stdoutrh   rh   ri   r   6  s    r   c                   C   s
   t ptjS rk   )r   r   r   rh   rh   rh   ri   r   :  s    r   c                 C   s$   zt j| = W n ty   Y n0 d S rk   )r   r   KeyError)r   rh   rh   ri   r   =  s    r   c              
   G   sx   z
|| W S  t yr } zPtdkrHtd|jj|f  td|j|f  t| tj || W  Y d }~S d }~0 0 d S )N   z%s: %szre-run %s%r)	OSErrorr   printrs   re   r   chmodstatS_IRWXU)r   funcr   errrh   rh   ri   
_force_runC  s    
r   winc                 C   s   | | |r|}nt j|\}}|p(d}d}|dk rjt |}|rJ|sVn||v sVd S t| |d9 }q.tjd| tdd d S )Nr   MbP?g      ?r   z)tests may fail, delete still pending for    
stacklevel)	r   r   splitlistdirtimesleepry   warnRuntimeWarning)r   pathnamewaitallr   r   timeoutLrh   rh   ri   _waitforN  s    



r   c                 C   s   t tj|  d S rk   )r   r   r   filenamerh   rh   ri   _unlinko  s    r   c                 C   s   t tj|  d S rk   )r   r   rmdirr   rh   rh   ri   _rmdirr  s    r   c                    s,    fdd t  | dd t dd |  d S )Nc                    s   t | tj| D ]}tj| |}zt|j}W n> tyn } z&td||f t	j
d d}W Y d }~n
d }~0 0 t|rt |dd t |tj| qt |tj| qd S )Nz-support.rmtree(): os.lstat(%r) failed with %sfiler   Tr   )r   r   r   r   joinlstatst_moder   r   r   
__stderr__r   S_ISDIRr   r   r   )r   r   fullnamemodeexc_rmtree_innerrh   ri   r   v  s    
_rmtree.<locals>._rmtree_innerTr   c                 S   s   t | tj| S rk   )r   r   r   )prh   rh   ri   r     r   z_rmtree.<locals>.<lambda>)r   r   rh   r   ri   _rmtreeu  s    r   c                 C   s\   zdd l }W n ty   Y n:0 |t| d }|jj| |t|}|rX|d | S | S )Nr   r   )ctypesr   Zcreate_unicode_bufferlenwindllZkernel32ZGetLongPathNameW)r   r   bufferlengthrh   rh   ri   	_longpath  s    r   c                    sN   dd l }z||  W d S  ty*   Y n0  fdd  |  t|  d S )Nr   c              	      s~   t | tj| D ]j}tj| |}zt|j}W n tyF   d}Y n0 t	|rj | t | tj
| qt | tj| qd S Nr   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   rh   ri   r     s    

r   )shutilr   r   r   r   )r   r   rh   r   ri   r     s    
c                 C   s   | S rk   rh   r   rh   rh   ri   r     s    c              	   C   s(   zt |  W n ttfy"   Y n0 d S rk   )r   FileNotFoundErrorNotADirectoryErrorr   rh   rh   ri   r     s    r   c                 C   s$   zt |  W n ty   Y n0 d S rk   )r   r   r   rh   rh   ri   r     s    r   c                 C   s$   zt |  W n ty   Y n0 d S rk   )r   r   r   rh   rh   ri   r     s    r   c                 C   sB   t j| }tjtj| }tj|| d }t|| |S )Nc)	r   utilcache_from_sourcer   r   r   abspathr   rename)sourceZpyc_fileZup_oneZ
legacy_pycrh   rh   ri   make_legacy_pyc  s
    r   c                 C   sT   t |  tjD ]@}tj|| d }t|d  dD ]}ttjj||d q4qd S )Nz.pyr   ) r   r   )optimization)	r   r   r   r   r   r   r   r   r   )r   r   r   optrh   rh   ri   r     s    
r   c               
      s  t tdrtjS d } tjdr0t r0d} nBtjdrdd ldd ld}d}G fdddj	}j
j}| }|s | }j }||||||}|sƈ t|j|@ sd} ntjd	krrdd
lm}	m m}
m	} ddlm} |	|d}| dkr,d} nFG  fddd|}| }|
|}||dk sn||dk rrd} | sz.ddlm} | }|   |!  |"  W n^ t#y } zDt$|}t%|dkr|d d d }d&t'|j(|} W Y d }~n
d }~0 0 | t_)|  t_tjS )Nresultr   z(gui is not available on Windows IoT Corer   r   c                       s.   e Zd Zd jjfd jjfd jjfgZdS )z*_is_gui_available.<locals>.USEROBJECTFLAGSZfInheritZ	fReserveddwFlagsN)re   rf   rg   wintypesZBOOLDWORD_fields_rh   )r   rh   ri   USEROBJECTFLAGS  s   


r   z,gui not available (WSF_VISIBLE flag not set)darwin)cdllc_intpointer	Structure)find_libraryZApplicationServicesz0gui tests cannot run without OS X window managerc                       s   e Zd Zd fd fgZdS )z._is_gui_available.<locals>.ProcessSerialNumberZhighLongOfPSNZlowLongOfPSNN)re   rf   rg   r   rh   )r   rh   ri   ProcessSerialNumber  s   r  z#cannot run without OS X gui process)Tk2   z [...]zTk unavailable due to {}: {})*hasattr_is_gui_availabler   r   r   r   Zwin32_is_iotr   Zctypes.wintypesr  r   Zuser32ZGetProcessWindowStationZWinErrorr   r   ZGetUserObjectInformationWZbyrefZsizeofboolr   r   r   r  Zctypes.utilr  ZLoadLibraryZCGMainDisplayIDZGetCurrentProcessZSetFrontProcesstkinterr  Zwithdrawr   Zdestroy	Exceptionr   r   formattypere   reason)r  Z	UOI_FLAGSZWSF_VISIBLEr   dllhZuofZneededresr   r  r  r  Zapp_servicesr  ZpsnZpsn_pr  rooteZ
err_stringrh   )r   r   ri   r    sr    

r  c                 C   s   t d u p| t v S rk   )r   resourcerh   rh   ri   r    -  s    r    c                 C   s<   t | s |d u rd|  }t|| dkr8t s8ttjd S )Nz"Use of the %r resource not enabledgui)r    r   r  r  )r  rl   rh   rh   ri   r!   5  s    r!   c                 C   s   dd l }dtt|}| ddd }| | krrzttt|d}W n t	yf   d}Y qv0 ||k }nd}t
||  d| d| S )Nr   r   -r   Fz	 version z or higher required, not )r   r   mapr   releaser   systemr   int
ValueErrorr   skipIf)sysnamemin_versionr   min_version_txtversion_txtversionskiprh   rh   ri   _requires_unix_version>  s     

r$  c                  G   s
   t d| S )NZFreeBSDr$  r  rh   rh   ri   r"   Y  s    r"   c                  G   s
   t d| S )NZLinuxr%  r&  rh   rh   ri   r#   b  s    r#   c                     s    fdd}|S )Nc                    s"   t   fdd}|_|S )Nc                     sz   t jdkrlt d }zttt|d}W n ty@   Y n,0 |k rldtt	}t
d||f  | i |S )Nr   r   r   z&Mac OS X %s or higher required, not %s)r   r   Zmac_verr   r  r  r   r  r   r   r   r   )r   kwr!  r"  r   )r   r  rh   ri   r   s  s    
z4requires_mac_ver.<locals>.decorator.<locals>.wrapper)r   r   r  r   r   r&  r   ri   r   r  s    z#requires_mac_ver.<locals>.decoratorrh   )r  r   rh   r&  ri   r$   k  s    r$   c                    s   t   fdd}|S )Nc               
      sT   z | i | W n< t yN } z$dt|v r8td W Y d }~n
d }~0 0 d S )NZCERTIFICATE_VERIFY_FAILEDz.system does not contain necessary certificates)r   r   r   r   )r   r   r  r   rh   ri   dec  s    
z&system_must_validate_cert.<locals>.decr   )r   r*  rh   r   ri   system_must_validate_cert  s    r+  i @ i  ZdoubleZIEEEztest requires IEEE 754 doublesrequires zlibc                 C   s0   zdd l }W n ty"   d }Y n0 t|| S r   )zlibr   r   
skipUnless)r  r-  rh   rh   ri   r8     s
    
r8   requires gzipc                 C   s0   zdd l }W n ty"   d }Y n0 t|| S r   )gzipr   r   r.  )r  r0  rh   rh   ri   r/     s
    
r/   requires bz2c                 C   s0   zdd l }W n ty"   d }Y n0 t|| S r   )bz2r   r   r.  )r  r2  rh   rh   ri   r0     s
    
r0   requires lzmac                 C   s0   zdd l }W n ty"   d }Y n0 t|| S r   )lzmar   r   r.  )r  r4  rh   rh   ri   r1     s
    
r1   javagetandroidapilevelz/system/bin/shz/bin/shz$testz@testz	{}_{}_tmpzhttp://www.pythontest.netr   )   æu   İu   Łu   φu   Кu   אu   ،u   تu   ก    u   €u   -àòɘŁğr   ZNFDntr   u   -共Ł♡ͣztWARNING: The filename %r CAN be encoded by the filesystem encoding (%s). Unicode filename tests may not be effective   s   -surrogateescape)s   wr:  s   s   s   c              
   c   s   dd l }d}| d u r.| } d}tj| } nZzt|  d}W nF ty } z.|sV tjd| d| t	dd W Y d }~n
d }~0 0 |rt
 }z"| V  W |r|t
 krt|  n|r|t
 krt|  0 d S )Nr   FTz5tests may fail, unable to create temporary directory :    r   )tempfilemkdtempr   r   realpathmkdirr   ry   r   r   getpidr   )r   quietr>  Zdir_createdr   pidrh   rh   ri   temp_dire  s6    

rE  c              
   c   s   t  }zt t j|  W nF tyd } z.|s4 tjd| d| tdd W Y d }~n
d }~0 0 zt  V  W t | nt | 0 d S )NzBtests may fail, unable to change the current working directory to r<  r=  r   )	r   getcwdchdirr   r@  r   ry   r   r   )r   rC  Z	saved_dirr   rh   rh   ri   
change_cwd  s     rH  tempcwdc              	   c   sb   t | |dB}t||d}|V  W d    n1 s60    Y  W d    n1 sT0    Y  d S )N)r   rC  )rC  )rE  rH  )r   rC  Z	temp_pathZcwd_dirrh   rh   ri   r     s    r   umaskc              	   c   s0   t | }zd V  W t | nt | 0 d S rk   )r   rJ  )rJ  Zoldmaskrh   rh   ri   rE     s    
rE   datac                 C   sX   t jdkrd S dd l}d}|  d}| \}}t||d t| td|  d S )Nr   r   z NOTICE z may generate "malloc can't allocate region"
warnings on macOS systems. This behavior is known. Do not
report a bug unless tests are also failing. See bpo-40928.r  )r   r   r   get_terminal_sizer   center)Z	test_namer   rl   ZdetailZpadding_rh   rh   ri   darwin_malloc_err_warning  s    

rO  c                 C   sb   t j| r| S |d ur&t j|| } tgtj }|D ]&}t j|| }t j|r6|  S q6| S rk   )r   r   isabsr   TEST_HOME_DIRr   exists)r   Zsubdirr   dnfnrh   rh   ri   r     s    r   c                 C   s(   t | t jt jB t jB }t | d S rk   )r   openO_WRONLYO_CREATO_TRUNCclose)r   fdrh   rh   ri   r     s    r   c                 C   s,   t |  }dd |D }d|}d| S )Nc                 S   s   g | ]}d | qS )z%r: %rrh   )r   Zpairrh   rh   ri   
<listcomp>  r   zsortdict.<locals>.<listcomp>z, z{%s})sorteditemsr   )dictr]  Z	reprpairsZ
withcommasrh   rh   ri   rU     s    
rU   c                  C   s<   t td} z|  W |   tt S |   tt 0 d S )Nwb)rU  r   filenorY  r   r   rh   rh   ri   make_bad_fd  s    
  ra  linenooffsetc                C   s   |  t|}t|dd W d    n1 s.0    Y  |j}| |j |d ur`| |j| | |j |d ur| |j| d S )Nz<test string>exec)ZassertRaisesRegexSyntaxErrorcompile	exceptionassertIsNotNonerc  assertEqualrd  )testcase	statementerrtextrc  rd  cmr   rh   rh   ri   r%     s    *r%   c                C   s  t jdd(}t dt t|dd W d    n1 s:0    Y  | t|d| |\}| t|j	t|j	 |r| 
t|j| | |jd | |j |d ur| |j| t jdd.}t dt t| ||||d W d    n1 s0    Y  | |g  d S )	NTrecordalwaysz
<testcase>re  r   errorrb  )ry   rz   r   SyntaxWarningrg  rj  r   
assertTrue
issubclassr   ZassertRegexr   messager   ri  rc  r%   )rk  rl  rm  rc  rd  warnsr   rh   rh   ri   r&     s$    *$r&   c                    s  dd l }dd l}zdd l}W n ty2   d }Y n0 dd |j| d dd }tj	
t|} fdd}tj	|r||}|d ur|S t| td trtd	|  t d
 |j }	|r|	jd |	j| td}|r
|jddkr
|j|d}z\t|d4}
| }|r<|
| | }q W d    n1 sR0    Y  W |  n
|  0 ||}|d ur|S td| d S )Nr   checkr   /c                    sD   t | g R i }d u r"|S |r8|d |S |  d S r   )rU  seekrY  )rT  r   r   rx  r'  rh   ri   check_valid_file?  s    
z*open_urlresource.<locals>.check_valid_fileZurlfetchz	fetching %s ...r   )zAccept-Encodingr0  r   zContent-Encodingr0  )fileobjr_  zinvalid resource %r)Zurllib.requesturllib.parser0  r   r   parseurlparser   r   r   r   TEST_DATA_DIRrR  r   r!   r   r   r   ZrequestZbuild_openerZ
addheadersappendrU  r_   ZheadersgetZGzipFilereadwriterY  r
   )urlr   r'  urllibr0  r   rT  r}  r   openeroutsrh   r|  ri   rD   2  sD    
	

.
rD   c                   @   s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
WarningsRecorderc                 C   s   || _ d| _d S r   	_warnings_last)rq   Zwarnings_listrh   rh   ri   rp   l  s    zWarningsRecorder.__init__c                 C   sD   t | j| jkr t| jd |S |tjjv r0d S td| |f d S )Nrz  z%r has no attribute %r)r   r  r  r   ry   WarningMessage_WARNING_DETAILSr   )rq   attrrh   rh   ri   __getattr__p  s
    zWarningsRecorder.__getattr__c                 C   s   | j | jd  S rk   r  ru   rh   rh   ri   ry   w  s    zWarningsRecorder.warningsc                 C   s   t | j| _d S rk   )r   r  r  ru   rh   rh   ri   reset{  s    zWarningsRecorder.resetN)re   rf   rg   rp   r  propertyry   r  rh   rh   rh   ri   r  h  s
   
r  c                 c   s  t d}|jd}|r"|  tjdd*}t jd d t	|V  W d    n1 s^0    Y  t
|}g }| D ]j\}}d}	|d d  D ]8}|j}
t|t|
tjrt|
j|rd}	|| q|	sx|sx|||jf qx|rtd|d	  |rtd
|d	  d S )Nr   Z__warningregistry__Tro  ry   rq  Fzunhandled warning %sr   z)filter (%r, %s) did not catch any warning)r   	_getframe	f_globalsr  clearry   rz   r   r   r  r   rv  rematchr   Iru  rs   remover  re   AssertionError)filtersrC  frameregistrywZreraisemissingrl   catseenwarningrh   rh   ri   _filterwarnings  s4    
(
r  c                  O   s.   | d}| s$dtff} |d u r$d}t| |S )NrC  r   T)r  Warningr  )r  r   rC  rh   rh   ri   rK     s    

rK   c                 c   s\   t jdd0}t jd||d d V  |r.t  W d    n1 sB0    Y  | |g  d S )NTro  rq  )rv  r   )ry   rz   r{   
gc_collectrj  )rk  rv  r   force_gcrw  rh   rh   ri   rM     s    $rM   c                 c   s8   t | tdd d V  W d    n1 s*0    Y  d S )NT)r   r  )rM   ResourceWarning)rk  rh   rh   ri   rL     s    rL   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 G   sJ   t j | _|D ]4}|t jv rt j| }|j|kr<t j|j= t j|= qd S rk   )r   r   copyoriginal_modulesre   )rq   module_namesmodule_namemodulerh   rh   ri   rp     s    



zCleanImport.__init__c                 C   s   | S rk   rh   ru   rh   rh   ri   	__enter__  s    zCleanImport.__enter__c                 G   s   t j| j d S rk   )r   r   r   r  rq   
ignore_excrh   rh   ri   __exit__  s    zCleanImport.__exit__Nre   rf   rg   rp   r  r  rh   rh   rh   ri   r     s   r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )rN   c                 C   s   t j| _i | _d S rk   )r   environ_environ_changedru   rh   rh   ri   rp     s    zEnvironmentVarGuard.__init__c                 C   s
   | j | S rk   )r  rq   envvarrh   rh   ri   __getitem__  s    zEnvironmentVarGuard.__getitem__c                 C   s*   || j vr| j|| j |< || j|< d S rk   r  r  r  rq   r  valuerh   rh   ri   __setitem__  s    
zEnvironmentVarGuard.__setitem__c                 C   s2   || j vr| j|| j |< || jv r.| j|= d S rk   r  r  rh   rh   ri   __delitem__  s    

zEnvironmentVarGuard.__delitem__c                 C   s
   | j  S rk   )r  keysru   rh   rh   ri   r  !  s    zEnvironmentVarGuard.keysc                 C   s
   t | jS rk   )iterr  ru   rh   rh   ri   __iter__$  s    zEnvironmentVarGuard.__iter__c                 C   s
   t | jS rk   )r   r  ru   rh   rh   ri   __len__'  s    zEnvironmentVarGuard.__len__c                 C   s   || |< d S rk   rh   r  rh   rh   ri   set*  s    zEnvironmentVarGuard.setc                 C   s
   | |= d S rk   rh   r  rh   rh   ri   unset-  s    zEnvironmentVarGuard.unsetc                 C   s   | S rk   rh   ru   rh   rh   ri   r  0  s    zEnvironmentVarGuard.__enter__c                 G   sF   | j  D ].\}}|d u r.|| jv r8| j|= q
|| j|< q
| jt_d S rk   )r  r]  r  r   r  )rq   r  kvrh   rh   ri   r  3  s    

zEnvironmentVarGuard.__exit__N)re   rf   rg   rp   r  r  r  r  r  r  r  r  r  r  rh   rh   rh   ri   rN     s   rN   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DirsOnSysPathc                 G   s(   t jd d  | _t j| _t j| d S rk   )r   r   original_valueoriginal_objectextend)rq   pathsrh   rh   ri   rp   I  s    zDirsOnSysPath.__init__c                 C   s   | S rk   rh   ru   rh   rh   ri   r  N  s    zDirsOnSysPath.__enter__c                 G   s   | j t_| jtjd d < d S rk   )r  r   r   r  r  rh   rh   ri   r  Q  s    zDirsOnSysPath.__exit__Nr  rh   rh   rh   ri   r  =  s   r  c                   @   s&   e Zd Zdd Zdd ZdddZdS )	r'   c                 K   s   || _ || _d S rk   )r   attrs)rq   r   r   rh   rh   ri   rp   [  s    zTransientResource.__init__c                 C   s   | S rk   rh   ru   rh   rh   ri   r  _  s    zTransientResource.__enter__Nc                 C   sT   |d urPt | j|rP| j D ](\}}t||s4 qPt|||kr qPqtdd S )Nz%an optional resource is not available)ru  r   r  r]  r  r   r   )rq   type_r  	tracebackr  Z
attr_valuerh   rh   ri   r  b  s    
zTransientResource.__exit__)NNNr  rh   rh   rh   ri   r'   V  s   r'   )errnoc              
   c   sR   dd l }tt| }tt| |  ztt| V  W tt| | ntt| | 0 d S r   )ior   r   setattrStringIO)Zstream_namer  Zorig_stdoutrh   rh   ri   captured_outputw  s    
r  c                   C   s   t dS )Nr   r  rh   rh   rh   ri   r     s    r   c                   C   s   t dS )Nstderrr  rh   rh   rh   ri   r     s    r   c                   C   s   t dS )Nstdinr  rh   rh   rh   ri   r     s    
r   c                  C   s2   dd l } |   trtd |   |   d S )Nr   皙?)gcZcollectr?   r   r   )r  rh   rh   ri   r    s    

r  c                  c   sB   dd l } |  }|   zd V  W |r>|   n|r<|   0 d S r   )r  	isenableddisableenable)r  Zhave_gcrh   rh   ri   
disable_gc  s    
r  c                  C   s6   t dpd} d}|  D ]}|dr|}q|dvS )NZ	PY_CFLAGSr   z-O)r   z-O0z-Og)	sysconfigget_config_varr   r   )ZcflagsZ	final_optr   rh   rh   ri   python_is_optimized  s    
r  ZnPZ0nZ
getobjectsZ2PZ0Pnc                 C   s   t t|  t S rk   )structcalcsize_header_alignfmtrh   rh   ri   calcobjsize  s    r  c                 C   s   t t|  t S rk   )r  r  _vheaderr  r  rh   rh   ri   calcvobjsize  s    r  i @  i   c                 C   sp   dd l }t|}t|tkr(|jt@ sBt|tkrLt|jt@ rL||j7 }dt|||f }| ||| d S )Nr   z&wrong size for %s: got %d, expected %d)	_testinternalcapir   	getsizeofr  	__flags___TPFLAGS_HEAPTYPE_TPFLAGS_HAVE_GCZSIZEOF_PYGC_HEADrj  )r   osizer  r   rl   rh   rh   ri   check_sizeof  s    


r  c              
   g   s   z dd l }t|| }||}W n& ty4    Y nB   d  }}Y n00 |D ](}z||| W  qvW qL   Y qL0 qLzd V  W |r|r||| n|r|r||| 0 d S r   )localer   	setlocaler   )ZcatstrZlocalesr  r   Zorig_localelocrh   rh   ri   rO     s(    

rO   c                    s    fdd}|S )Nc                    s"    fdd} j |_  j|_|S )Nc               	      s   z
t j}W n ty&   tdY n0 dtjv r>tjd }nd }tjd< |  zH | i |W |d u rttjd= n
|tjd< t   S |tjd< t   n&|d u rtjd= n
|tjd< t   0 d S )Nztzset requiredZTZ)r   tzsetr   r   r   r   r  )r   kwdsr  Zorig_tz)r   tzrh   ri   inner	  s0    




  



z-run_with_tz.<locals>.decorator.<locals>.inner)re   __doc__)r   r  r  r)  ri   r     s    zrun_with_tz.<locals>.decoratorrh   )r  r   rh   r  ri   rV     s    rV   i      r   c                 C   s   dt tdt d}td| tjtjB }|d u r>td| f tt|	d||	d
   }|a|tkrrt}|td k rtd| f |ad S )Nr  )r  mgtz(\d+(\.\d+)?) (K|M|G|T)b?$zInvalid memory limit %rr   r=  z$Memory limit %r too low to be useful)_1M_1Gr  r  
IGNORECASEVERBOSEr  r  floatgrouplowerreal_max_memuseMAX_Py_ssize_t_2Gr   )limitZsizesr  memlimitrh   rh   ri   rS   1  s"    
$rS   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_MemoryWatchdogc                 C   s   dj t d| _d| _d S )Nz/proc/{pid}/statm)rD  F)r  r   rB  procfilestartedru   rh   rh   ri   rp   K  s    z_MemoryWatchdog.__init__c              
   C   s   zt | jd}W nB tyR } z*td|t tj	  W Y d }~d S d }~0 0 |2 t
d}tjtj|g|tjd| _W d    n1 s0    Y  d| _d S )Nrz!/proc not available for stats: {}zmemory_watchdog.py)r  r  T)rU  r  r   ry   r   r  r   r   r  flushr   
subprocessPopen
executableDEVNULLmem_watchdogr  )rq   r   r  Zwatchdog_scriptrh   rh   ri   startO  s    
&z_MemoryWatchdog.startc                 C   s   | j r| j  | j  d S rk   )r  r  	terminatewaitru   rh   rh   ri   stop_  s    
z_MemoryWatchdog.stopN)re   rf   rg   rp   r  r  rh   rh   rh   ri   r  F  s   r  c                    s    fdd}|S )Nc                    s     fdd_ _S )Nc                    s   j }j}tsd}n|}ts" sDt|| k rDtd|| d  trztrzt  tdj|| d d t }|	  nd }z| |W |r|
  S n|r|
  0 d S )Ni  'not enough memory: %.1fG minimum needed   @z* ... expected peak memory use: {peak:.1f}G)Zpeak)r  memuser  r   r   r   r   r  r  r  r  )rq   r  r  maxsizeZwatchdog)dry_runr   r   rh   ri   r   s  s<    




 z.bigmemtest.<locals>.decorator.<locals>.wrapper)r  r  r   r  r  r  r   r   ri   r   r  s    zbigmemtest.<locals>.decoratorrh   )r  r  r  r   rh   r   ri   r2   e  s    !r2   c                    s    fdd}|S )Nc                    sD   t tk r8tdkr$t dkr$tdq@tdtd  n | S d S )Nl    l        z-not enough memory: try a 32-bit build insteadr  r  )r   r	  r   r   ru   r   rh   ri   r     s    z!bigaddrspacetest.<locals>.wrapperrh   r!  rh   r   ri   r3     s    r3   c                   @   s   e Zd Zdd ZdS )r+   c                 C   s   t  }|| |S rk   )r   Z
TestResult)rq   r   r   rh   rh   ri   run  s    zBasicTestRunner.runN)re   rf   rg   r"  rh   rh   rh   ri   r+     s   r+   c                 C   s   | S rk   rh   )r   rh   rh   ri   _id  s    r#  c                 C   s:   | dkrt  stt jS t| r&tS td| S d S )Nr  zresource {0!r} is not enabled)r  r   r#  r  r    r#  r  r  rh   rh   ri   requires_resource  s
    r$  c                 C   s   t dd| S )NT)cpython)impl_detailr   rh   rh   ri   r4     s    r4   c                 K   sZ   t f i |rtS | d u rPt|\}}|r0d} nd} t| }| d|} t| S )Nz*implementation detail not available on {0}z%implementation detail specific to {0}z or )	rA   r#  _parse_guardsr\  r  r  r   r   r#  )rl   guardsZ
guardnamesdefaultrh   rh   ri   r&    s    r&  c                 C   s*   | sddidfS t |  d }| | fS )Nr%  TFr   )r   values)r(  Zis_truerh   rh   ri   r'    s    r'  c                  K   s    t | \} }| t  |S rk   )r'  r  r   Zpython_implementationr  )r(  r)  rh   rh   ri   rA     s    rA   c                    s,   t tds S t  fdd}|S d S )Ngettracec               	      s>   t  }z$t d   | i |W t | S t | 0 d S rk   )r   r+  settrace)r   r   Zoriginal_tracer)  rh   ri   r     s    

zno_tracing.<locals>.wrapper)r  r   r   r   r(  rh   r)  ri   
no_tracing  s
    
r-  c                 C   s   t t| S rk   )r-  r4   r   rh   rh   ri   refcount_test  s    r.  c                 C   sN   g }| j D ]8}t|tjr0t|| || q
||r
|| q
|| _ d S rk   )Z_tests
isinstancer   	TestSuite_filter_suiter  )suiteZpredZnewtestsr   rh   rh   ri   r1    s    

r1  c                 C   s   t tjttd ud}|| }td ur4t|  |jsD|j	sDt
| st|jdkrp|jsp|jd d }n4t|jdkr|js|jd d }nd}ts|d7 }dd |jD }dd |jD }t|||d S )	N)	verbositycapture_outputr   r   zmultiple errors occurredz!; run in verbose mode for detailsc                 S   s   g | ]\}}t ||fqS rh   r   r   ZtcZexc_strrh   rh   ri   r[    r   z_run_suite.<locals>.<listcomp>c                 S   s   g | ]\}}t ||fqS rh   r5  r6  rh   rh   ri   r[    r   )r   r   r   r   junit_xml_listr"  r  Zget_xml_elementZtestsRunZskippedr   ZwasSuccessfulr   rm   rn   rj   )r2  Zrunnerr   r   rm   rn   rh   rh   ri   
_run_suite  s&    
r8  c                 C   s   t d u rdS t |  S d S NT)_match_test_funcidr   rh   rh   ri   
match_test(  s    r<  c                 C   s   d| v ot d|  S )Nr   z[?*\[\]])r  search)r   rh   rh   ri   _is_full_match_test0  s    r>  c                    s~   | d u rd} |d u rd}d   | t kr4t| \}  |tkrHt|\}t| a t|a d ushd urz fdd}|ad S )Nrh   c                    s*   d}d} r | }r | }|o(| S NTFrh   )test_idacceptrx   Zaccept_funcZignore_funcrh   ri   match_functionO  s    z'set_match_tests.<locals>.match_function)_accept_test_patterns_compile_match_function_ignore_test_patternsr   r:  )Zaccept_patternsignore_patternsrC  rh   rB  ri   set_match_tests:  s    	rH  c                    s^   | sd }d} nHt tt| r(t| j}n.dttj| }t	|j
  fdd}|}| |fS )Nrh   |c                    s$    | rdS t t | dS d S )NTr   )anyr  r   )r@  Zregex_matchrh   ri   match_test_regexj  s    z1_compile_match_function.<locals>.match_test_regex)allr  r>  r  __contains__r   fnmatch	translater  rg  r  )patternsr   ZregexrL  rh   rK  ri   rE  [  s    rE  c                  G   s   t jt jf}t  }| D ]`}t|trR|tjv rH|t tj|  qxt	dqt||rh|| q|t 
| qt|t t| d S )Nz)str arguments must be keys in sys.modules)r   r0  ZTestCaser/  r   r   r   ZaddTestZfindTestCasesr  Z	makeSuiter1  r<  r8  )classesZvalid_typesr2  clsrh   rh   ri   r,   z  s    




r,   c                   C   s   d S rk   rh   rh   rh   rh   ri   _check_docstrings  s    rT  ZWITH_DOC_STRINGSztest requires docstringsc                 C   s`   dd l }|d u rt}nd }|j| ||d\}}|rBtd||f trXtd| j|f  ||fS )Nr   )r   optionflagsz%d of %d doctests failedz,doctest (%s) ... %d tests with zero failures)doctestr   testmodr
   r   re   )r  r3  rU  rV  r   r   rh   rh   ri   r-     s    r-   c                 C   s(   |   D ]}td| tjdd qd S )NzWarning -- T)r   r  )
splitlinesr   r   r   )rl   linerh   rh   ri   print_warning  s    rZ  c                   C   s   t j fS rk   )r   r   r  rh   rh   rh   ri   modules_setup  s    r[  c                 C   s:   dd t j D }t j  t j| t j|  d S )Nc                 S   s"   g | ]\}}| d r||fqS )z
encodings.)r   )r   r  r  rh   rh   ri   r[    s   
z#modules_cleanup.<locals>.<listcomp>)r   r   r]  r  r   )Z
oldmodules	encodingsrh   rh   ri   modules_cleanup  s    
r]  c                   C   s   t  tj fS rk   )_thread_count	threading	_danglingr  rh   rh   rh   ri   rG     s    rG   c               	   G   s   d}t |D ]}t tjf}|| kr* q|sda|d }td|d | d   d|d  dt| d |D ]}td	| qnd }d }t	d
 t
  qd S )Nd   Tr   z&threading_cleanup() failed to cleanup r   z threads (count: z, dangling: )zDangling thread: {Gz?)ranger^  r_  r`  ra  environment_alteredrZ  r   r   r   r  )Zoriginal_valuesZ
_MAX_COUNTcountr*  Zdangling_threadsthreadrh   rh   ri   rH     s*    

rH   c                    s   t   fdd}|S )Nc                     s(   t  }z |  W t|  S t|  0 d S rk   )rG   rH   )r   keyr)  rh   ri   r     s    zreap_threads.<locals>.decoratorr   )r   r   rh   r)  ri   rI   	  s    rI   c                 c   s  | d u rt } t }zd V  W t }||  }t }||kr@qt |krt | }d||  d|dd| d| d	}t|td t  q.n~t }||  }t }||krqt |krt | }d||  d|dd| d| d	}t|td t  q0 d S )Nz!wait_threads() failed to cleanup z threads after .1fz seconds (count: z, old count: rc  rd  )r`   r^  r_  r   	monotonicr  r   r  )r   Z	old_countZ
start_timedeadlinerg  dtrl   rh   rh   ri   wait_threads_exit  sN    


rn  c                 C   s8   |d u rt }| | |  r4d|dd}t|d S )Nzfailed to join the thread in rj   seconds)r`   r   is_aliver  )rh  r   rl   rh   rh   ri   join_thread<  s    
rq  c                  C   sh   t tdrt tdsd S ztdtj\} }W n tyD   Y qdY n0 | dkrPqdtd|   daqd S )NwaitpidWNOHANGrz  r   z%reap_children() reaped child process T)r  r   rr  rs  r   rZ  rf  )rD  statusrh   rh   ri   rF   H  s    	
rF   c                 c   sL  dd l }t| } g }z<z | D ]}|  || qW n*   tr\tdt| t|f   Y n0 d V  W z|rx|  t  }}t	ddD ]\}|d7 }|D ]}|
t|t  d qdd |D }|s qtrtd	t||f  qW d
d |D }|rR|tj tdt| n2d
d |D }|rP|tj tdt| 0 nz|rb|  t  }}t	ddD ]f}|d7 }|D ]}|
t|t  d qdd |D }|s qtrxtd	t||f  qxW d
d |D }|rF|tj tdt| n2d
d |D }|rD|tj tdt| 0 0 d S )Nr   z/Can't start %d threads, only %d threads startedr      <   rd  c                 S   s   g | ]}|  r|qS rh   rp  r   r   rh   rh   ri   r[  }  r   z!start_threads.<locals>.<listcomp>z7Unable to join %d threads during a period of %d minutesc                 S   s   g | ]}|  r|qS rh   rw  rx  rh   rh   ri   r[    r   zUnable to join %d threads)faulthandlerr   r  r  r   r   r   r   rk  re  r   maxZdump_tracebackr   r   r  )threadsZunlockry  r  r   endtimeZ	starttimer   rh   rh   ri   rJ   d  sz    


rJ   c              
   c   s   t | |rHt| |}t| || z|V  W t| || qt| || 0 nBt| || zd V  W t | |rt| | nt | |rt| | 0 d S rk   )r  r   r  delattr)r   r  new_valreal_valrh   rh   ri   rQ     s    



rQ   c              	   c   sn   || v r8| | }|| |< z|V  W || |< qj|| |< 0 n2|| |< zd V  W || v rj| |= n|| v rh| |= 0 d S rk   rh   )r   itemr~  r  rh   rh   ri   rP     s    rP   c                   C   s   t  S rk   )r  _args_from_interpreter_flagsrh   rh   rh   ri   args_from_interpreter_flags  s    r  c                   C   s   t  S rk   )r  "_optim_args_from_interpreter_flagsrh   rh   rh   ri   !optim_args_from_interpreter_flags  s    r  c                   @   s    e Zd ZdZdd Zdd ZdS )rR   )rl   rv  c                 K   s:   d}|D ],}|| }| |}| |||sd} q6q|S r?  )r  match_value)rq   dr   r   r  r  dvrh   rh   ri   matches  s    
zMatcher.matchesc                 C   sH   t |t |krd}n.t |tus,|| jvr6||k}n||dk}|S )NFr   )r  r   _partial_matchesfind)rq   r  r  r  r   rh   rh   ri   r    s    
zMatcher.match_valueN)re   rf   rg   r  r  r  rh   rh   rh   ri   rR     s   rR   c               
   C   sX   t d urt S td } ztt|  d}W n tttfyD   d}Y n0 t|  |a |S )Nr   TF)_can_symlinkr   r   symlinkr   NotImplementedErrorr   r  )Zsymlink_pathcanrh   rh   ri   r     s    

r   c                 C   s    t  }d}|r| S t|| S )Nz*Requires functional symlink implementation)r   r   r#  r   okrl   rh   rh   ri   r.   	  s    r.   c                 C   sX   dd l }td u rBtjdkr>| d dkr>t jdkr>dandatrTt	d| S | S )	Nr   rb   r   cp65001r   TFz!buggy MSVC UCRT strptime/strftime)
r  _buggy_ucrtr   r   getdefaultlocaler   	localtimetm_zoner   r#  )r   r  rh   rh   ri   r=   	  s    

r=   c                   @   sd   e Zd ZdddZdd Zejdkr,dd Zdd	 Zd
d Zdd Z	ddddZ
ddddZdS )PythonSymlinkNc                 C   s@   |pt jt| _g | _t jtj| _	g | _
d | _|   d S rk   )r   r   r   r   link_linkedr@  r   r  real
_also_link_env_platform_specific)rq   r  rh   rh   ri   rp   "	  s    zPythonSymlink.__init__c                 C   s   d S rk   rh   ru   rh   rh   ri   r  ,	  s    z PythonSymlink._platform_specificrb   c              
   C   s  dd l }tj| jr0tj| js0|d| _|tj}tj	|}tj	| j
}| j|tj|tj|f ttjt|dD ]&}| j|tj|tj|f qdd tjD | _tj	| j| jd< tdrtj	tj| jd< d S )Nr   zvcruntime*.dllc                 S   s   i | ]}|  t|qS rh   )upperr   getenv)r   r  rh   rh   ri   
<dictcomp>E	  r   z4PythonSymlink._platform_specific.<locals>.<dictcomp>Z
PYTHONHOMETZ
PYTHONPATH)_winapir   r   lexistsr  rR  ZGetModuleFileNamer   Z	dllhandler   r  r  r  r   basenameglobescaper  r  r  Zis_python_buildr   )rq   r  r  Zsrc_dirZdest_dirZruntimerh   rh   ri   r  0	  s&    
c                 C   sJ   t | j| j | j| j | jD ] \}}t || | j| q$| S rk   )r   r  r  r  r  r  r  )rq   r  r  rh   rh   ri   r  J	  s    zPythonSymlink.__enter__c                 C   sX   | j D ]L}zt| W q tyP } z tr<td|| W Y d }~qd }~0 0 qd S )Nzfailed to clean up {}: {})r  r   r  IOErrorr   r   r  )rq   exc_type	exc_valueexc_tbr  exrh   rh   ri   r  R	  s    
zPythonSymlink.__exit__c                 C   sp   |g|}t j|t jt j|d}| }|j|krltr\tt|d  tt|d tj	d t
d|j|S )N)r   r  envr   r   r   z'unexpected return code: {0} (0x{0:08X}))r  r  PIPEcommunicate
returncoder   r   reprr   r  RuntimeErrorr  )rq   Zpythonr   r  r  cmdr   r  rh   rh   ri   _callZ	  s    



zPythonSymlink._callr   )r  c                G   s   |  | j|d |S rk   )r  r  rq   r  r   rh   rh   ri   	call_realg	  s    zPythonSymlink.call_realc                G   s   |  | j|| j|S rk   )r  r  r  r  rh   rh   ri   	call_linkj	  s    zPythonSymlink.call_link)N)re   rf   rg   rp   r  r   r   r  r  r  r  r  rh   rh   rh   ri   r   	  s   


r  c               	   C   s  dd l } td urtS ttds$d}n|  }| j|d\}}zttd}z`t|dd t|dd	 t|	 dd t
 }td
|}|d u pt|ddk}W n ty   d}Y n0 W d    n1 s0    Y  W tt t| t| ntt t| t| 0 |a|S )Nr   setxattrFdirr_  s	   user.testr   s   trusted.foos   42z2.6.(\d{1,2})r   '   )r>  
_can_xattrr  r   r?  mkstemprU  r   r  r`  r   r  r  r  r  r  r   r   r   )r>  r  Ztmp_dirZtmp_fpZtmp_namefpZkernel_versionr  rh   rh   ri   	can_xattro	  s4    
*

r  c                 C   s    t  }d}|r| S t|| S )Nz(no non-broken extended attribute support)r  r   r#  r  rh   rh   ri   r7   	  s    r7   c                 C   s$   t  pt}d}|r| S t|| S )Nz#Not run for (non-extended) PGO task)rW   PGO_EXTENDEDr   r#  r  rh   rh   ri   skip_if_pgo_task	  s    
r  c              	   C   s   dd l }|j| dn}|j}| }||kr4| }ztj||W W  d    S  tyr   Y W d    dS 0 W d    n1 s0    Y  d S )Nr   r  F)	r>  NamedTemporaryFiler   r  r  r   r   samefiler   )Z	directoryr>  base	base_pathZ	case_pathrh   rh   ri   r   	  s    r   r}   c                C   s>   t t| t t| }|r(|t |8 }t dd |D }|S )Nc                 s   s&   | ]}| d r|dr|V  qdS )rN  __N)r   endswith)r   r  rh   rh   ri   r   	  s   z&detect_api_mismatch.<locals>.<genexpr>)r  r  )Zref_apiZ	other_apirx   Zmissing_itemsrh   rh   ri   r;   	  s
    r;   c                 C   s   |d u r|j f}nt|tr"|f}t|}t|D ]R}|ds2||v rJq2t||}t|dd |v szt|ds2t|tj	s2|
| q2| |j| d S )NrN  rf   )re   r/  r   r  r  r   r   r  types
ModuleTypeaddZassertCountEqual__all__)Z	test_caser  Zname_of_moduleextraZ	blacklistZexpectedr   r   rh   rh   ri   r<   	  s     )



r<   c                 C   s   zdd l }W n ty    Y d S 0 ||j|jB |jB |jB  t|dr|j|j	|j
fD ]2}| r|||j |||j qZ||d qZd S )Nr   CrtSetReportMode)msvcrtr   SetErrorModeZSEM_FAILCRITICALERRORSZSEM_NOALIGNMENTFAULTEXCEPTSEM_NOGPFAULTERRORBOXZSEM_NOOPENFILEERRORBOXr  CRT_WARN	CRT_ERROR
CRT_ASSERTr  CRTDBG_MODE_FILECrtSetReportFileCRTDBG_FILE_STDERR)r   r  r  rh   rh   ri   suppress_msvcrt_asserts	  s"    
r  c                   @   s$   e Zd ZdZdZdd Zdd ZdS )rT   Nc           	   	   C   s  t jdrzdd l}W n ty,   Y d S 0 ||j| _|| j|jB  t|dri | _	|j
|j|jfD ].}|||j}|||j}||f| j	|< qnnzdd l}|| _W n ty   d | _Y n0 | jd ur$z2| j| jj| _| j| jjd| jd f W n ttfy"   Y n0 t jdkrg d}tj|tjtjd}| | d }W d    n1 st0    Y  | dkrtd	d
dd | S )Nr   r   r  r   r   )z/usr/bin/defaultsr  zcom.apple.CrashReporterZ
DialogType)r   r  s	   developerz:this test triggers the Crash Reporter, that is intentionalr   T)endr  )r   r   r   r  r   r  r  	old_valuer  	old_modesr  r  r  r  r  r  r  r  Z	getrlimitRLIMIT_CORE	setrlimitr  r   r  r  r  r  stripr   )	rq   r  report_typeold_modeold_filer  r  procr   rh   rh   ri   r  
  s\    

,zSuppressCrashReport.__enter__c              	   G   s   | j d u rd S tjdrfdd l}|| j  | jr| j D ]$\}\}}||| |	|| q>n:| j
d urz| j
| j
j| j  W n ttfy   Y n0 d S )Nr   r   )r  r   r   r   r  r  r  r]  r  r  r  r  r  r  r   )rq   r  r  r  r  r  rh   rh   ri   r  T
  s    

zSuppressCrashReport.__exit__)re   rf   rg   r  r  r  r  rh   rh   rh   ri   rT   
  s   CrT   c              	      sp   t  d zj W n" ttfy>   t d Y n0 d  fdd}| | t| d S )NFTc                      s     rt  n
t d S rk   )r  r}  rh   Zattr_is_local	attr_nameobject_to_patchr  rh   ri   cleanup
  s    zpatch.<locals>.cleanup)r   __dict__r   r   Z
addCleanupr  )Ztest_instancer  r  Z	new_valuer  rh   r  ri   patchi
  s    


r  c                 C   sD   zdd l }W n ty   Y n0 | r2tddd l}|| S )Nr   zUrun_in_subinterp() cannot be used if tracemalloc module is tracing memory allocations)tracemallocr   
is_tracingr   r   	_testcapirun_in_subinterp)coder  r  rh   rh   ri   r  
  s    
r  c                    sH   G  fddd|}d ||| |  tt t  |   d S )Nc                       s   e Zd Z fddZdS )z%check_free_after_iterating.<locals>.Ac                    s(   d zt  W n ty"   Y n0 d S r9  )nextStopIterationru   doneitrh   ri   __del__
  s
    z-check_free_after_iterating.<locals>.A.__del__N)re   rf   rg   r  rh   r  rh   ri   A
  s   r  F)ZassertRaisesr  r  r  rt  )r   r  rS  r   r  rh   r  ri   check_free_after_iterating
  s    	r  c                 C   s   ddl m}m}m}m} | }|| |jdkrXz|  W n |j	yV   Y dS 0 |j
D ]F}| rp|| vrpq^t||}| rn|sq^||d d u r^|d   S q^d S )Nr   )	ccompilerr  spawnrm   Zmsvc)Z	distutilsr  r  r  rm   Znew_compilerZcustomize_compilerZcompiler_typeZ
initializeZDistutilsPlatformErrorZexecutablesr   Zfind_executable)Z	cmd_namesr  r  r  rm   Zcompilerr   r  rh   rh   ri   rX   
  s$    	



rX   c                 C   s@   d}t r6| |k r6td u r.tddg dkatr6|} t| S )Ngh㈵>Zgetpropzro.kernel.qemu   1)r@   _is_android_emulatorr  check_outputr  r   rC   )intervalZminimum_intervalrh   rh   ri   rC   
  s    rC   c               
   c   sX   dd l } tj }|  }z$|   d V  W |rT| j|dd n|rR| j|dd 0 d S )Nr   T)r   Zall_threads)ry  r   r   r`  
is_enabledr  r  )ry  rZ  r  rh   rh   ri   disable_faulthandler
  s    
r  c            	      C   s  t jdr8ztd} t| d W S  ty6   Y n0 d}ttdrhztd}W n t	yf   Y n0 d }t jdkrzdd l
}|j W n ttfy   Y n,0 i }|j|j|jfD ]}||d||< qzd}t|D ]\}zt|}W n6 t	y  } z|jtjkr W Y d }~qd }~0 0 t| |d7 }qW |d ur|j|j|jfD ]}||||  qRn4|d ur|j|j|jfD ]}||||  q0 |S )	N)linuxZfreebsdz/proc/self/fdr      sysconfSC_OPEN_MAXrb   r   )r   r   r   r   r   r   r   r  r  r   r  r  r   r   r  r  r  re  dupr  EBADFrY  )	r   MAXFDr  r  r  rg  rZ  fd2r  rh   rh   ri   rY   
  s`    






rY   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SaveSignalsc              	   C   s^   dd l }|| _ | | _dD ]6}zt||}W n tyD   Y qY n0 | j| qi | _d S )Nr   )SIGKILLSIGSTOP)signalvalid_signalssignalsr   r   r  handlers)rq   r  signamesignumrh   rh   ri   rp   6  s    

zSaveSignals.__init__c                 C   s0   | j D ]$}| j|}|d u r q|| j|< qd S rk   )r  r  	getsignalr  rq   r
  handlerrh   rh   ri   saveC  s
    
zSaveSignals.savec                 C   s&   | j  D ]\}}| j|| q
d S rk   )r  r]  r  r  rh   rh   ri   restoreO  s    zSaveSignals.restoreN)re   rf   rg   rp   r  r  rh   rh   rh   ri   r  -  s   	r  c                  C   s   dd l } | jS r   )r  ZWITH_PYMALLOC)r  rh   rh   ri   with_pymallocT  s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )FakePathc                 C   s
   || _ d S rk   r   )rq   r   rh   rh   ri   rp   \  s    zFakePath.__init__c                 C   s   d| j dS )Nz
<FakePath >r   ru   rh   rh   ri   __repr___  s    zFakePath.__repr__c                 C   s6   t | jts$t | jtr,t| jtr,| jn| jS d S rk   )r/  r   BaseExceptionr  ru  ru   rh   rh   ri   
__fspath__b  s    

zFakePath.__fspath__N)re   rf   rg   rp   r  r  rh   rh   rh   ri   r  Y  s   r  c                   @   s   e Zd Zdd Zdd ZdS )
_ALWAYS_EQc                 C   s   dS r9  rh   rq   otherrh   rh   ri   __eq__o  s    z_ALWAYS_EQ.__eq__c                 C   s   dS NFrh   r  rh   rh   ri   __ne__q  s    z_ALWAYS_EQ.__ne__N)re   rf   rg   r  r  rh   rh   rh   ri   r  k  s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	_NEVER_EQc                 C   s   dS r  rh   r  rh   rh   ri   r  z  s    z_NEVER_EQ.__eq__c                 C   s   dS r9  rh   r  rh   rh   ri   r  |  s    z_NEVER_EQ.__ne__c                 C   s   dS )Nr   rh   ru   rh   rh   ri   __hash__~  s    z_NEVER_EQ.__hash__N)re   rf   rg   r  r  r  rh   rh   rh   ri   r  v  s   r  c                   @   s   e Zd Zdd Zdd ZdS )_LARGESTc                 C   s
   t |tS rk   )r/  r  r  rh   rh   ri   r    s    z_LARGEST.__eq__c                 C   s   dS r  rh   r  rh   rh   ri   __lt__  s    z_LARGEST.__lt__N)re   rf   rg   r  r  rh   rh   rh   ri   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )	_SMALLESTc                 C   s
   t |tS rk   )r/  r   r  rh   rh   ri   r    s    z_SMALLEST.__eq__c                 C   s   dS r  rh   r  rh   rh   ri   __gt__  s    z_SMALLEST.__gt__N)re   rf   rg   r  r!  rh   rh   rh   ri   r     s   r   c                  C   s   dd l } | jjS r   )Zasyncio.eventseventsZ_event_loop_policy)Zasynciorh   rh   ri   maybe_get_event_loop_policy  s    r#  c                 C   s   | | }}dd l }| }| d }t|d|_||}|d | | }|| }	||	 }
||
 }||d  |d | |  |	d|	   }t|t| fW  d    S 1 s0    Y  d S )Nr   r      r   )decimalZlocalcontext
bit_lengthrz  ZprecZDecimalr  sqrt)ZnbinsZnballsr  r  r%  ctxbitsrS  Zp1emptyZ	meanemptyZoccupiedZ
collisionsvarrh   rh   ri   collision_stats  s    


(r+  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
catch_unraisable_exceptionc                 C   s   d | _ d | _d S rk   )
unraisable	_old_hookru   rh   rh   ri   rp     s    z#catch_unraisable_exception.__init__c                 C   s
   || _ d S rk   )r-  )rq   r-  rh   rh   ri   _hook  s    z catch_unraisable_exception._hookc                 C   s   t j| _| jt _| S rk   )r   unraisablehookr.  r/  ru   rh   rh   ri   r    s    z$catch_unraisable_exception.__enter__c                 G   s   | j t_| `d S rk   )r.  r   r0  r-  rq   exc_inforh   rh   ri   r    s    z#catch_unraisable_exception.__exit__Nre   rf   rg   rp   r/  r  r  rh   rh   rh   ri   r,    s   r,  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
catch_threading_exceptionc                 C   s"   d | _ d | _d | _d | _d | _d S rk   )r  r  exc_tracebackrh  r.  ru   rh   rh   ri   rp     s
    z"catch_threading_exception.__init__c                 C   s$   |j | _ |j| _|j| _|j| _d S rk   )r  r  r5  rh  )rq   r   rh   rh   ri   r/    s    zcatch_threading_exception._hookc                 C   s   t j| _| jt _| S rk   )r`  
excepthookr.  r/  ru   rh   rh   ri   r  "  s    z#catch_threading_exception.__enter__c                 G   s   | j t_| `| `| `| `d S rk   )r.  r`  r6  r  r  r5  rh  r1  rh   rh   ri   r  '  s
    z"catch_threading_exception.__exit__Nr3  rh   rh   rh   ri   r4    s   r4  r~  c                C   s&  t jdkrdd l}|d u rt}t }d}d}t | t j\}}|dkrJqt | }	|	tkrzt | |j	 t | d W n t
y   Y n0 td|  d|	ddt|d	 |}t| q.nt | d\}}t |}
|
|krtd|  d
|
 d| d|| kr"td| d|  d S )Nr9  r   r   r  zprocess z is still running after rj  ro  r   z exited with code z, but exit code z is expectedzpid z != pid )r   r   r  r`   r   rk  rr  rs  killr  r   r  minr   waitstatus_to_exitcode)rD  exitcoder   r  t0r   Z	max_sleepZpid2rt  rm  Z	exitcode2rh   rh   ri   wait_process/  s<    






r<  c                  C   s    dd l } |  }|d d dkS )Nr   configZ_use_peg_parser)r  Zget_configs)r  r=  rh   rh   ri   use_old_parserd  s    r>  c                 C   s   t t  | S rk   )r   r  r>  rt   rh   rh   ri   skip_if_new_parserj  s    r?  c               
   c   s<   t jd d  } zd V  W | t jd d < n| t jd d < 0 d S rk   )ry   r  )Zold_filtersrh   rh   ri   save_restore_warnings_filtersn  s    r@  c               
   C   sd   t d t d} tjdkr`z| jd d W n4 ty^ } ztd|W Y d }~n
d }~0 0 d S )N_multiprocessingzmultiprocessing.synchronizer  )r(  z broken multiprocessing SemLock: )r   r   r   Lockr   r   r   )synchronizer   rh   rh   ri   *skip_if_broken_multiprocessing_synchronizew  s    
rD  K   c              	   c   s8   t  }zt |  d V  W t | nt | 0 d S rk   )r   getrecursionlimitsetrecursionlimit)Z	max_depthZoriginal_depthrh   rh   ri   infinite_recursion  s
    
rH  )r  likereturnc                C   s,   t  }tjdt| |dt| d d |S )Nrx   
(?#supportrc  )r   r  rv  )objectry   r{   r|   r;  )r  rI  tokenrh   rh   ri   ignore_deprecations_from  s    rN  )tokensrJ  c            	      G   s   | st dg }tdd | D }tjD ]Z\}}}}}|dkrn|tu rnt|tjrZ|j}n|p`d}|	|rnq(|
|||||f q(tj|kr|tjd d < t  d S )Nz<Provide token or tokens returned by ignore_deprecations_fromc                 s   s   | ]}d t | dV  qdS )rK  rc  N)r;  )r   rM  rh   rh   ri   r     r   z-clear_ignored_deprecations.<locals>.<genexpr>rx   r   )r  r   ry   r  r|   r/  r  Patternr   r  r  _filters_mutated)	rO  Znew_filtersr  actionrv  r   r  rc  rl   rh   rh   ri   clear_ignored_deprecations  s    

rS  )T)F)rh   rh   F)F)N)r,  )r/  )r1  )r3  )NF)F)rI  F)N)r   )r   )F)T)N)NN)Nr   )N)N)N)Nrh   rh   )F)rh   )rE  (  re   r   collections.abccollections
contextlibr  rO  r   r  r   importlib.utilr   r   r  r   r  r  r   r  r^  r`  r   r  r   ry   Z
testresultr   r  r^   machiner_   r`   ra   r  r	   r
   rj   r   r   r   contextmanagerr~   r>   r   r   r9   r:   r   r5   r   r   r   r  r7  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    r!   r$  r"   r#   r$   r+  r   ZSOCK_MAX_SIZEr.  r  __getformat__r6   r8   r/   r0   r1   r?   r  r@   rB   r   ZTESTFN_ASCIIr  rB  ZTEST_HTTP_URLZFS_NONASCII	characterfsdecodefsencodeUnicodeErrorZTESTFN_UNICODEunicodedata	normalizegetfilesystemencodingZTESTFN_ENCODINGZTESTFN_UNENCODABLEgetwindowsversionencodeUnicodeEncodeErrorr   decodeUnicodeDecodeErrorZTESTFN_UNDECODABLEZTESTFN_NONASCIIr   rF  r   rW   r  rE  rH  r   rE   r   r   r   r   ZTEST_SUPPORT_DIRrQ  r   r  rO  r   r   rU   ra  r%   r&   rD   rL  r  r  rK   r  rM   rL   r   abcMutableMappingrN   r  r'   r   Z	ETIMEDOUTr(   Z
ECONNRESETr)   r*   r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  rO   rV   r  r  r
  Z_4Gr  r	  rS   r  r2   r3   r+   r#  r$  r4   r&  r'  rA   r-  r.  r1  r8  r:  rD  rF  r<  r>  rH  rE  r,   rT  r  ZMISSING_C_DOCSTRINGSr  ZHAVE_DOCSTRINGSZrequires_docstringsr-   rZ  r[  r]  rf  rG   rH   rI   rn  rq  rF   rJ   rQ   rP   r  r  rR   r  r   r.   r  r=   r  r  r  r7   r  r   r;   r<   r  rT   r  r  r  rX   r  rC   r  rY   r  r  r  r  rZ   r  r[   total_orderingr  r\   r   r]   r#  	hash_infowidthZ	NHASHBITSr+  r,  r4  r<  r>  r?  r@  rD  rH  r   rN  rS  rh   rh   rh   ri   <module>   s~  8	
6	
!
L			
!




'

6'

 5
		


#0

!

$$"N ;a";'	

	
	
",95
