
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„j�“ ã            œ   @   sf  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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$ yddl%Z%ddl&Z&W n ek
�r>   dZ%dZ&Y nX yddl'Z(W n ek
�rf   dZ(Y nX yddl)Z)W n ek
�rŽ   dZ)Y nX yddl*Z*W n ek
�r¶   dZ*Y nX yddl+Z+W n ek
�rÞ   dZ+Y nX yddl,Z,W n ek
�r   dZ,Y nX yddl-Z-W n ek
�r.   dZ-Y nX yddl.Z.W n ek
�rV   dZ.Y nX dddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dag\Z/G dbd„ de0ƒZ1G dcd„ de1ƒZ2G ddd„ de1ƒZ3G ded„ dej4ƒZ5ej6�dgdgdh„ƒZ7�dhf djœdkd„Z8dldm„ Z9dndo„ Z:dpd<„ Z;dqd=„ Z<f f difdrd„Z=dsd8„ Z>dZ?dZ@daAdaBdZCdiZDdaEdtd„ ZFdud„ ZGdvd„ ZHdwdx„ ZIejjJdyƒ�r*�didzd{„ZKd|d}„ ZLd~d„ ZMd€d�„ ZNd‚dƒ„ ZOnejPZLejQZMd„d�„ ZNd…dƒ„ ZOd†d„ ZPd‡dˆ„ ZQd‰d„ ZRdŠd‹„ ZSdŒd„ ZTd�dŽ„ ZUd�d"„ ZV�djd�d#„ZWd‘d’„ ZXd“d$„ ZYd”d%„ ZZd•d&„ Z[�dkd–d'„Z\d—Z]d˜Z^ej_ej`fd™dI„Zae]fdšdJ„Zbd›dL„ Zcdœd�„ Zdedƒ ZedždŸ„ Zf�dnZg�dqZhejiejjkd£ƒjJd¤ƒd¥ƒZlejie)d¦ƒZmejie*d§ƒZnejie+d¨ƒZoejie,d©ƒZpejjJdªƒZqejrd«ƒZsesdk	�otesdkZtejd¬k�r’et�rŒd­nd®ZundZuejvdªk�r¨d¯Zwnd°Zwd±jxewejyƒ ƒZwdZzxL�drD ]BZ{yej|ej}e{ƒƒe{k�rèe~‚W n e~k
�r    Y nX e{ZzP �qÈW ewd½ Zejd¾k�r6ddl€Z€e€j�d¿eƒZej‚ƒ ZƒdZ„ejvdÀk�r¢ej…ƒ jdÁk�räewdÂ Z„ye„j†eƒƒ W n e‡k
�rŠ   Y nX eˆdÃe„eƒf ƒ dZ„nBejd¾k�räydÄj‰eƒƒ W n& eŠk
�râ   ewdÅj‰eƒdÆƒ Z„Y nX dZ‹xF�dsD ]<Zvyevj‰eƒƒ W n& eŠk
�r(   ej}ewƒev Z‹P Y nX �qðW ez�rDewdË ez ZŒndZŒej�ƒ ZŽdiZ�diZ�ej6�dtdÌdÍ„ƒZ‘ej6�dudÎdÏ„ƒZ’ej6�dvdÑd„ƒZ“e”edÒƒ�r¨ej6dÓdM„ ƒZ•ej–j—ej–j˜e™ƒƒZšej–j—ešƒZ›ej–jœe›dÔƒZ��dwdÕd„ZždÖd„ ZŸd×d]„ Z dØdÙ„ Z¡dddÚœdÛd(„Z¢dÜdK„ Z£G dÝdÞ„ dÞe¤ƒZ¥�dxdßdà„Z¦ej6dádT„ ƒZ§ej6dâe¨difdãdä„ƒZ©ej6dådU„ ƒZªG dæd„ de¤ƒZ«G dçdV„ dVej¬j­ƒZ®G dèdé„ dée¤ƒZ¯G dêd)„ d)e¤ƒZ°e°e±ej²dë�Z³e°e±ej´dë�Zµe°e±ej´dë�Z¶ej6dìf díœdîd-„ƒZ·ej6dïdð„ ƒZ¸dñd„ Z¹dòd„ Zºdód„ Z»dôdõ„ Z¼ej6död÷„ ƒZ½dødù„ Z¾dúZ¿dûZÀe”edüƒ�	rHdýe¿ Z¿dþZÀe¿dÿ ZÁ�d �d„ ZÂ�d�d„ ZÃ�dyZÄ�dzZÅ�d�d„ ZÆ�ddW„ ZÇ�d	d^„ ZÈ�d{ZÉd¡eÉ ZÊdÁeÊ ZËd eÊ ZÌejÍZÎ�d
d[„ ZÏG �d�d„ �dƒZÐ�d|�dd5„ZÑ�dd6„ ZÒG �dd.„ d.ƒZÓ�d�d„ ZÔ�d�d„ ZÕ�dd@„ ZÖ�dd7„ Z×�d}�d�d„ZØdaÙ�ddA„ ZÚ�d�d„ ZÛ�ddD„ ZÜ�d�d„ ZÝ�d�d„ ZÞ�d �d!„ Zß�d"�d#„ Zàdaádaâ�d$�d%„ Zã�d&�d'„ Zä�d(�d)„ Zå�d*d/„ Zæ�d+�d,„ ZçeÜƒ �
oðejd¬k�
oðejr�d-ƒ Zèeçjédk	�oeè Zêejieê�d.ƒZë�d~�d/d0„Zì�d0�d1„ Zí�d2�d3„ ZîdiZï�d4dP„ Zð�d5dQ„ Zñ�d6dR„ Zòej6�d�d8�d9„ƒZó�d:dN„ Zôej6�d€�d;dS„ƒZõej6�d<dY„ ƒZöej6�d=dX„ ƒZ÷�d>�d?„ Zøejùe”e�d@ƒ�dAƒZú�dB�dC„ Zû�dD�dE„ ZüG �dFdO„ dOejýjþƒZÿG �dGdZ„ dZe¤ƒ�Z d�a�dHd „ �Z�dId1„ �Zd�a�dJ�dK„ �Z�dLd:„ �Z�dM�dN„ �Z�dOd!„ �Zf �dPœ�dQd>„�Z	df f f�dRd?„�Z
G �dSd\„ d\ƒ�Z�dT�dU„ �Z�dV�dW„ �Zf f�dX�dY„�Zg f�dZd`„�Zd�a�d[dF„ �Zej6�d\�d]„ ƒ�Z�d^da„ �ZG �d_�d`„ �d`ƒ�ZG �da�db„ �dbƒ�Zej6�dc�dd„ ƒ�Z�de�df„ �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Úrequires_hashdigestÚcheck_syntax_errorÚTransientResourceÚtime_outÚsocket_peer_resetÚioerror_peer_resetÚtransient_internetÚ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__Úrequires_android_levelÚrequires_multiprocessing_queueÚ	is_jythonÚ
is_androidÚcheck_impl_detailÚ
unix_shellÚsetswitchintervalÚHOSTÚIPV6_ENABLEDÚfind_unused_portÚ	bind_portÚopen_urlresourceÚbind_unix_socketÚ
temp_umaskÚreap_childrenÚTestHandlerÚthreading_setupÚthreading_cleanupÚreap_threadsÚstart_threadsÚcheck_warningsÚcheck_no_resource_warningÚEnvironmentVarGuardÚrun_with_localeÚ	swap_itemÚ	swap_attrÚMatcherÚset_memlimitÚSuppressCrashReportÚsortdictÚrun_with_tzÚPGOÚmissing_compiler_executableÚfd_countc               @   s   e Zd ZdS )r	   N)Ú__name__Ú
__module__Ú__qualname__© rc   rc   ú-/usr/lib64/python3.6/test/support/__init__.pyr	   |   s   c               @   s   e Zd ZdS )r
   N)r`   ra   rb   rc   rc   rc   rd   r
      s   c               @   s   e Zd ZdS )r   N)r`   ra   rb   rc   rc   rc   rd   r   ‚   s   c               @   s   e Zd ZdS )r   N)r`   ra   rb   rc   rc   rc   rd   r   …   s   Tc             c   s8   | r.t jƒ � t jddtƒ d V  W d Q R X nd V  d S )NÚignorez.+ (module|package))ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarning)re   rc   rc   rd   Ú_ignore_deprecated_imports�   s    
rj   F)Úrequired_onc            C   sf   t |ƒ�T y
tj| ƒS  tk
rV } z&tjjt|ƒƒr8‚ tj	t
|ƒƒ‚W Y d d }~X nX W d Q R X d S )N)rj   Ú	importlibr   ÚImportErrorÚsysÚplatformÚ
startswithÚtupleÚunittestÚSkipTestÚstr)ÚnameÚ
deprecatedrk   Úmsgrc   rc   rd   r   �   s    	

c             C   s^   | t jkrt| ƒ t j| = x>tt jƒD ]0}|| ks@|j| d ƒr&t j| ||< t j|= q&W d S )NÚ.)rn   ÚmodulesÚ
__import__Úlistrp   )ru   Úorig_modulesÚmodnamerc   rc   rd   Ú_save_and_remove_module¯   s    
r~   c             C   s>   d}yt j|  || < W n tk
r.   d}Y nX d t j| < |S )NTF)rn   ry   ÚKeyError)ru   r|   Zsavedrc   rc   rd   Ú_save_and_block_module½   s    

r€   c             C   s   | r
t jS dd„ S )Nc             S   s   | S )Nrc   )Úfrc   rc   rd   Ú<lambda>Ó   s    z$anticipate_failure.<locals>.<lambda>)rr   ZexpectedFailure)Z	conditionrc   rc   rd   r:   Ë   s    c             C   sF   |d krd}t jjt jjt jjtƒƒƒ}|j| ||d�}|j|ƒ |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_testsrc   rc   rd   r;   Õ   s    
c             C   sÊ   t |ƒ�¸ i }g }t| |ƒ zfyHx|D ]}t||ƒ q&W x |D ]}t||ƒs>|j|ƒ q>W tj| ƒ}W n tk
r~   d }Y nX W d x|jƒ D ]\}	}
|
tj	|	< qŽW x|D ]}tj	|= qªW X |S Q R X d S )N)
rj   r~   r€   Úappendrl   r   rm   Úitemsrn   ry   )ru   ZfreshZblockedrv   r|   Znames_to_removeZ
fresh_nameZblocked_nameZfresh_moduleZ	orig_nameÚmoduleZname_to_removerc   rc   rd   r   é   s$    





c             C   s>   yt | |ƒ}W n& tk
r4   tjd| |f ƒ‚Y nX |S d S )Nzobject %r has no attribute %r)ÚgetattrÚAttributeErrorrr   rs   )Úobjru   Z	attributerc   rc   rd   r6     s
    c             C   s   | a d S )N)Ú_original_stdout)Ústdoutrc   rc   rd   r   0  s    c               C   s
   t ptjS )N)r�   rn   r�   rc   rc   rc   rd   r   4  s    c             C   s&   yt j| = W n tk
r    Y nX d S )N)rn   ry   r   )ru   rc   rc   rd   r   7  s    c             G   sn   y||Ž S  t k
rh } zDtdkrHtd|jj|f ƒ td|j|f ƒ tj| tjƒ ||Ž S d }~X nX d S )Né   z%s: %szre-run %s%r)	ÚOSErrorr   ÚprintÚ	__class__r`   r„   ÚchmodÚstatÚS_IRWXU)r…   ÚfuncÚargsÚerrrc   rc   rd   Ú
_force_run=  s    r›   Úwinc             C   s„   | |ƒ |r|}nt jj|ƒ\}}|p(d}d}x<|dk rjt j|ƒ}|rJ|n||ksVd S tj|ƒ |d9 }q0W tjd| tdd� d S )Nrx   gü©ñÒMbP?g      ð?r‘   z)tests may fail, delete still pending for é   )Ú
stacklevel)	r„   r…   ÚsplitÚlistdirÚtimeÚsleeprf   ÚwarnÚRuntimeWarning)r˜   ÚpathnameÚwaitallr†   ru   ÚtimeoutÚLrc   rc   rd   Ú_waitforH  s    



r©   c             C   s   t tj| ƒ d S )N)r©   r„   r   )Úfilenamerc   rc   rd   Ú_unlinki  s    r«   c             C   s   t tj| ƒ d S )N)r©   r„   Úrmdir)r†   rc   rc   rd   Ú_rmdirl  s    r­   c                s,   ‡ fdd„‰ t ˆ | dd� t dd„ | ƒ d S )Nc                s®   x¨t | tj| ƒD ]–}tjj| |ƒ}ytj|ƒj}W n< tk
rn } z td||f t	j
d� d}W Y d d }~X nX tj|ƒr˜tˆ |dd� t |tj|ƒ qt |tj|ƒ qW d S )Nz-support.rmtree(): os.lstat(%r) failed with %s)Úfiler   T)r¦   )r›   r„   r    r…   ÚjoinÚlstatÚst_moder’   r“   rn   Ú
__stderr__r–   ÚS_ISDIRr©   r¬   r   )r…   ru   ÚfullnameÚmodeÚexc)Ú_rmtree_innerrc   rd   r·   p  s    

z_rmtree.<locals>._rmtree_innerT)r¦   c             S   s   t | tj| ƒS )N)r›   r„   r¬   )Úprc   rc   rd   r‚     s    z_rmtree.<locals>.<lambda>)r©   )r…   rc   )r·   rd   Ú_rmtreeo  s    r¹   c             C   s^   ydd l }W n tk
r    Y n:X |jt| ƒd ƒ}|jjj| |t|ƒƒ}|rZ|d |… S | S )Nr   r‘   )Úctypesrm   Zcreate_unicode_bufferÚlenÚwindllÚkernel32ZGetLongPathNameW)r…   rº   ÚbufferZlengthrc   rc   rd   Ú	_longpath�  s    
r¿   c                sF   yt j| ƒ d S  tk
r"   Y nX ‡ fdd„‰ ˆ | ƒ tj| ƒ d S )Nc                s„   x~t | tj| ƒD ]l}tjj| |ƒ}ytj|ƒj}W n tk
rJ   d}Y nX tj	|ƒrnˆ |ƒ t | tj
|ƒ qt | tj|ƒ qW d S )Nr   )r›   r„   r    r…   r¯   r°   r±   r’   r–   r³   r¬   r   )r…   ru   r´   rµ   )r·   rc   rd   r·   ™  s    

z_rmtree.<locals>._rmtree_inner)Úshutilr   r’   r„   r¬   )r…   rc   )r·   rd   r¹   ’  s    
c             C   s   | S )Nrc   )r…   rc   rc   rd   r¿   ¨  s    c             C   s*   yt | ƒ W n ttfk
r$   Y nX d S )N)r«   ÚFileNotFoundErrorÚNotADirectoryError)rª   rc   rc   rd   r   «  s    c             C   s&   yt | ƒ W n tk
r    Y nX d S )N)r­   rÁ   )r†   rc   rc   rd   r¬   ±  s    r¬   c             C   s&   yt | ƒ W n tk
r    Y nX d S )N)r¹   rÁ   )r…   rc   rc   rd   r   ·  s    c             C   sB   t jj| ƒ}tjjtjj| ƒƒ}tjj|| d ƒ}tj||ƒ |S )NÚc)	rl   ÚutilÚcache_from_sourcer„   r…   r†   Úabspathr¯   Úrename)ÚsourceZpyc_fileZup_oneZ
legacy_pycrc   rc   rd   Úmake_legacy_pyc½  s
    rÉ   c             C   s\   t | ƒ xNtjD ]D}tjj|| d ƒ}t|d ƒ x dD ]}ttjj||d�ƒ q8W qW d S )Nz.pyrÃ   Ú r   r‘   )Úoptimization)rÊ   r   r‘   )	r   rn   r…   r„   r¯   r   rl   rÄ   rÅ   )r}   r†   rÈ   Úoptrc   rc   rd   r   Ê  s    
c                 sü  t tdƒrtjS d } tjjdƒr¾dd l‰dd l‰d}d}G ‡fdd„dˆjƒ}ˆj	j
}|jƒ }|sjˆjƒ ‚|ƒ }ˆjjƒ }|j||ˆj|ƒˆj|ƒˆj|ƒƒ}|sªˆjƒ ‚t|j|@ ƒs¼d} n˜tjdk�rVdd	lm}	m‰ m}
m} dd
lm} |	j|dƒƒ}|jƒ dk�rd} nFG ‡ fdd„d|ƒ}|ƒ }|
|ƒ}|j|ƒdk �sR|j|ƒdk �rVd} | �sèy.ddlm} |ƒ }|jƒ  |j ƒ  |j!ƒ  W n\ t"k
�ræ } z>t#|ƒ}t$|ƒdk�rÄ|d d… d }dj%t&|ƒj'|ƒ} W Y d d }~X nX | t_(|  t_tjS )NÚresultrœ   r   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)r`   ra   rb   ÚwintypesZBOOLÚDWORDÚ_fields_rc   )rº   rc   rd   Ú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)r`   ra   rb   rÑ   rc   )rÕ   rc   rd   ÚProcessSerialNumber  s   rÙ   z#cannot run without OS X gui process)ÚTké2   z [...]zTk unavailable due to {}: {}))ÚhasattrÚ_is_gui_availablerÍ   rn   ro   rp   rº   Zctypes.wintypesr×   r¼   Zuser32ZGetProcessWindowStationZWinErrorrÏ   rÐ   ZGetUserObjectInformationWZbyrefZsizeofÚboolrÎ   rÔ   rÕ   rÖ   Zctypes.utilrØ   ZLoadLibraryZCGMainDisplayIDZGetCurrentProcessZSetFrontProcessZtkinterrÚ   ZwithdrawÚupdateZdestroyÚ	Exceptionrt   r»   ÚformatÚtyper`   Úreason)rã   Z	UOI_FLAGSZWSF_VISIBLErÒ   ZdllÚhZuofZneededÚresrÔ   rÖ   r×   rØ   Zapp_servicesrÙ   ZpsnZpsn_prÚ   ÚrootÚeZ
err_stringrc   )rÕ   rº   rd   rÝ   Ú  sh    

rÝ   c             C   s   t d kp| t kS )N)r   )Úresourcerc   rc   rd   r    $  s    c             C   s>   t | ƒs |d krd|  }t|ƒ‚| dkr:tƒ  r:ttjƒ‚d S )Nz"Use of the %r resource not enabledÚgui)r    r   rÝ   rã   )rè   rw   rc   rc   rd   r!   ,  s    c                s   ‡ ‡fdd„}|S )Nc                s$   t jˆ ƒ‡ ‡‡fdd„ƒ}ˆ|_|S )Nc                 s„   t jƒ ˆkrzt jƒ jddƒd }yttt|jdƒƒƒ}W n tk
rL   Y n.X |ˆk rzdjtt	ˆƒƒ}t
jdˆ||f ƒ‚ˆ | |ŽS )Nú-r   r   rx   z(%s version %s or higher required, not %s)ro   ÚsystemÚreleaserŸ   rq   ÚmapÚintÚ
ValueErrorr¯   rt   rr   rs   )r™   ÚkwÚversion_txtÚversionÚmin_version_txt)r˜   Úmin_versionÚsysnamerc   rd   Úwrapper=  s    z:_requires_unix_version.<locals>.decorator.<locals>.wrapper)Ú	functoolsÚwrapsrô   )r˜   rö   )rô   rõ   )r˜   rd   Ú	decorator<  s    z)_requires_unix_version.<locals>.decoratorrc   )rõ   rô   rù   rc   )rô   rõ   rd   Ú_requires_unix_version5  s    rú   c              G   s
   t d| ƒS )NZFreeBSD)rú   )rô   rc   rc   rd   r"   P  s    c              G   s
   t d| ƒS )NZLinux)rú   )rô   rc   rc   rd   r#   Y  s    c                 s   ‡ fdd„}|S )Nc                s"   t jˆ ƒ‡ ‡fdd„ƒ}ˆ|_|S )Nc                 sx   t jdkrntjƒ d }yttt|jdƒƒƒ}W n tk
rB   Y n,X |ˆk rndjtt	ˆƒƒ}t
jd||f ƒ‚ˆ | |ŽS )NrÓ   r   rx   z&Mac OS X %s or higher required, not %s)rn   ro   Zmac_verrq   rí   rî   rŸ   rï   r¯   rt   rr   rs   )r™   rð   rñ   rò   ró   )r˜   rô   rc   rd   rö   j  s    
z4requires_mac_ver.<locals>.decorator.<locals>.wrapper)r÷   rø   rô   )r˜   rö   )rô   )r˜   rd   rù   i  s    z#requires_mac_ver.<locals>.decoratorrc   )rô   rù   rc   )rô   rd   r$   b  s    c                s   ‡ ‡fdd„}|S )Nc                s   t jˆ ƒ‡‡ ‡fdd„ƒ}|S )Nc                 sX   y&ˆrt d k	rt jˆ ƒ n
tjˆ ƒ W n& tk
rL   tjdˆ › d�ƒ‚Y nX ˆ| |ŽS )Nzhash digest 'z' is not available.)Ú_hashlibÚnewÚhashlibrï   rr   rs   )r™   Úkwargs)Ú
digestnamer˜   Úopensslrc   rd   rö   ‹  s    z7requires_hashdigest.<locals>.decorator.<locals>.wrapper)r÷   rø   )r˜   rö   )rÿ   r   )r˜   rd   rù   Š  s    z&requires_hashdigest.<locals>.decoratorrc   )rÿ   r   rù   rc   )rÿ   r   rd   r%   }  s    z	127.0.0.1z::1c             C   s"   t j | |ƒ}t|ƒ}|jƒ  ~|S )N)ÚsocketrH   Úclose)ÚfamilyZsocktypeZtempsockÚportrc   rc   rd   rG      s
    8c             C   s¸   | j tjkrš| jtjkršttdƒr>| jtjtjƒdkr>t	dƒ‚ttdƒr~y | jtjtj
ƒdkrft	dƒ‚W n tk
r|   Y nX ttdƒrš| jtjtjdƒ | j|dfƒ | jƒ d }|S )NÚSO_REUSEADDRr   zHtests should never set the SO_REUSEADDR socket option on TCP/IP sockets!ÚSO_REUSEPORTzHtests should never set the SO_REUSEPORT socket option on TCP/IP sockets!ÚSO_EXCLUSIVEADDRUSEr   )r  r  ÚAF_INETrâ   ÚSOCK_STREAMrÜ   Z
getsockoptZ
SOL_SOCKETr  r
   r  r’   Z
setsockoptr  ÚbindZgetsockname)ÚsockÚhostr  rc   rc   rd   rH   Þ  s    


c             C   s:   y| j |ƒ W n& tk
r4   | jƒ  tjdƒ‚Y nX d S )Nzcannot bind AF_UNIX sockets)r
  ÚPermissionErrorr  rr   rs   )r  Zaddrrc   rc   rd   rJ     s
    c              C   sZ   t jrVd } z<y"t j t jt jƒ} | jtdfƒ dS  tk
rB   Y nX W d | rT| jƒ  X dS )Nr   TF)r  Zhas_ipv6ZAF_INET6r	  r
  ÚHOSTv6r’   r  )r  rc   rc   rd   Ú_is_ipv6_enabled  s    

r  c                s   t jˆ ƒ‡ fdd„ƒ}|S )Nc                 sN   yˆ | |Ž W n: t k
rH } zdt|ƒkr6tjdƒ‚‚ W Y d d }~X nX d S )NZCERTIFICATE_VERIFY_FAILEDz.system does not contain necessary certificates)ÚIOErrorrt   rr   rs   )r™   rþ   rç   )r�   rc   rd   Údec  s    
z&system_must_validate_cert.<locals>.dec)r÷   rø   )r�   r  rc   )r�   rd   Úsystem_must_validate_cert  s    	r  r�   i   é   ZdoubleZIEEEztest requires IEEE 754 doubleszrequires zlibzrequires gzipzrequires bz2zrequires lzmaÚjavaÚANDROID_API_LEVELÚwin32z/system/bin/shz/bin/shz$testz@testz	{}_{}_tmpõ   Ã¦õ   Ä°õ   Å�õ   Ï†õ   Ðšõ   ×�õ   ØŒõ   Øªõ   à¸�õ   Â õ   â‚¬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ó   çwðó   ®Õí²€ó   í´€ó   �˜rê   c             c   sž   d}| d kr&t jƒ } d}tjj| ƒ} nBytj| ƒ d}W n. tk
rf   |sN‚ tjd|  t	dd� Y nX |rttj
ƒ }z
| V  W d |r˜|tj
ƒ kr˜t| ƒ X d S )NFTz+tests may fail, unable to create temp dir: é   )rž   )ÚtempfileÚmkdtempr„   r…   ÚrealpathÚmkdirr’   rf   r£   r¤   Úgetpidr   )r…   ÚquietZdir_createdÚpidrc   rc   rd   Útemp_dirã  s&    


r1  c             c   sf   t jƒ }yt j| ƒ W n. tk
rD   |s,‚ tjd|  tdd� Y nX zt jƒ V  W d t j|ƒ X d S )Nz)tests may fail, unable to change CWD to: r)  )rž   )r„   ÚgetcwdÚchdirr’   rf   r£   r¤   )r…   r/  Z	saved_dirrc   rc   rd   Ú
change_cwd	  s    
r4  Útempcwdc             c   s:   t | |d��$}t||d��}|V  W d Q R X W d Q R X d S )N)r…   r/  )r/  )r1  r4  )ru   r/  Z	temp_pathZcwd_dirrc   rc   rd   r   $  s    Úumaskc             c   s&   t j| ƒ}z
d V  W d t j|ƒ X d S )N)r„   r6  )r6  Zoldmaskrc   rc   rd   rK   8  s    

Údatac             C   sb   t jj| ƒr| S |d k	r&t jj|| ƒ} tgtj }x*|D ]"}t jj|| ƒ}t jj|ƒr8|S q8W | S )N)r„   r…   Úisabsr¯   ÚTEST_HOME_DIRrn   Úexists)rª   Zsubdirr…   ZdnÚfnrc   rc   rd   r   I  s    
 c             C   s(   t j| t jt jB t jB ƒ}t j|ƒ d S )N)r„   ÚopenÚO_WRONLYÚO_CREATÚO_TRUNCr  )rª   Úfdrc   rc   rd   r   [  s    c             C   s,   t | jƒ ƒ}dd„ |D ƒ}dj|ƒ}d| S )Nc             S   s   g | ]}d | ‘qS )z%r: %rrc   )Ú.0Zpairrc   rc   rd   ú
<listcomp>c  s    zsortdict.<locals>.<listcomp>z, z{%s})ÚsortedrŠ   r¯   )ÚdictrŠ   Z	reprpairsZ
withcommasrc   rc   rd   r[   `  s    
c              C   s*   t tdƒ} z| jƒ S | jƒ  ttƒ X d S )NÚwb)r<  r   Úfilenor  r   )r®   rc   rc   rd   Úmake_bad_fdg  s
    
rG  )ÚlinenoÚoffsetc            C   sp   | j tƒ�}t|ddƒ W d Q R X |j}| j|jƒ |d k	rJ| j|j|ƒ | j|jƒ |d k	rl| j|j|ƒ d S )Nz<test string>Úexec)ÚassertRaisesÚSyntaxErrorÚcompileZ	exceptionZassertIsNotNonerH  ÚassertEqualrI  )ÚtestcaseZ	statementrH  rI  Úcmrš   rc   rc   rd   r&   s  s    c                sV  dd l }dd l}ˆjdd ƒ‰|jj| ƒd jdƒd }tjjt	|ƒ}‡ ‡‡fdd„}tjj
|ƒr|||ƒ}|d k	rt|S t|ƒ tdƒ trštd	|  tƒ d
� |jjƒ }tr´|jjdƒ |j| dd�}trâ|jjdƒdkrâtj|d�}zBt|dƒ�.}	|jƒ }
x|
�r|	j|
ƒ |jƒ }
� qúW W d Q R X W d |jƒ  X ||ƒ}|d k	�rF|S td| ƒ‚d S )Nr   Úcheckr‘   ú/r   c                s>   t | fˆ žˆŽ}ˆd kr|S ˆ|ƒr2|jdƒ |S |jƒ  d S )Nr   )r<  Úseekr  )r;  r�   )r™   rQ  rð   rc   rd   Úcheck_valid_file‡  s    
z*open_urlresource.<locals>.check_valid_fileZurlfetchz	fetching %s ...)r®   úAccept-EncodingÚgzipé   )r§   zContent-Encoding)ZfileobjrE  zinvalid resource %réÿÿÿÿ)rU  rV  )Zurllib.requestZurllib.parseÚpopÚparseZurlparserŸ   r„   r…   r¯   ÚTEST_DATA_DIRr:  r   r!   r   r“   r   ZrequestZbuild_openerrV  Z
addheadersr‰   r<  ZheadersÚgetZGzipFileÚreadÚwriter  r
   )Zurlr™   rð   Úurllibrª   r;  rT  r�   ÚopenerÚoutÚsrc   )r™   rQ  rð   rd   rI   ~  s<    	



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 )Nr   )Ú	_warningsÚ_last)ÚselfZwarnings_listrc   rc   rd   Ú__init__´  s    zWarningsRecorder.__init__c             C   sD   t | jƒ| jkr t| jd |ƒS |tjjkr0d S td| |f ƒ‚d S )Nr   z%r has no attribute %rrX  )r»   rd  re  rŒ   rf   ÚWarningMessageÚ_WARNING_DETAILSr�   )rf  Úattrrc   rc   rd   Ú__getattr__¸  s
    zWarningsRecorder.__getattr__c             C   s   | j | jd … S )N)rd  re  )rf  rc   rc   rd   rf   ¿  s    zWarningsRecorder.warningsc             C   s   t | jƒ| _d S )N)r»   rd  re  )rf  rc   rc   rd   ÚresetÃ  s    zWarningsRecorder.resetN)r`   ra   rb   rg  rk  Úpropertyrf   rl  rc   rc   rc   rd   rc  °  s   rc  c             c   s
  t jdƒ}|jjdƒ}|r"|jƒ  tjdd�� }t jd jdƒ t	|ƒV  W d Q R X t
|ƒ}g }xz| D ]r\}}d}	xH|d d … D ]8}|j}
tj|t|
ƒtjƒr€t|
j|ƒr€d}	|j|ƒ q€W |	 rf| rf|j||jfƒ qfW |rðtd|d	  ƒ‚|�rtd
|d	  ƒ‚d S )Nr‘   Z__warningregistry__T)Úrecordrf   ÚalwaysFzunhandled warning %sr   z)filter (%r, %s) did not catch any warning)rn   Ú	_getframeÚ	f_globalsr\  Úclearrf   rg   ry   Úsimplefilterrc  r{   ÚmessageÚreÚmatchrt   ÚIÚ
issubclassr”   Úremover‰   r`   ÚAssertionError)Úfiltersr/  ÚframeÚregistryÚwZreraiseZmissingrw   ÚcatÚseenZwarningrc   rc   rd   Ú_filterwarningsÇ  s0    
r�  c              O   s.   |j dƒ}| s$dtff} |d kr$d}t| |ƒS )Nr/  rÊ   T)r\  ÚWarningr�  )r{  rþ   r/  rc   rc   rd   rR   î  s    

rÊ   c             c   sH   t jdd��&}t jd||d� d V  |r.tƒ  W d Q R X | j|g ƒ d S )NT)rn  ro  )rt  Úcategory)rf   rg   rh   Ú
gc_collectrN  )rO  rt  rƒ  Zforce_gcÚwarnsrc   rc   rd   Úcheck_no_warnings  s    r†  c             c   sB   t jdd�� }t jdtd� d V  tƒ  W d Q R X | j|g ƒ d S )NT)rn  ro  )rƒ  )rf   rg   rh   ÚResourceWarningr„  rN  )rO  r…  rc   rc   rd   rS     s
    c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r   c             G   sN   t jjƒ | _x<|D ]4}|t jkrt j| }|j|kr>t j|j= t j|= qW d S )N)rn   ry   ÚcopyÚoriginal_modulesr`   )rf  Zmodule_namesZmodule_namer‹   rc   rc   rd   rg  ?  s    




zCleanImport.__init__c             C   s   | S )Nrc   )rf  rc   rc   rd   Ú	__enter__L  s    zCleanImport.__enter__c             G   s   t jj| jƒ d S )N)rn   ry   rß   r‰  )rf  Ú
ignore_excrc   rc   rd   Ú__exit__O  s    zCleanImport.__exit__N)r`   ra   rb   rg  rŠ  rŒ  rc   rc   rc   rd   r   3  s   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 )rT   c             C   s   t j| _i | _d S )N)r„   ÚenvironÚ_environÚ_changed)rf  rc   rc   rd   rg  X  s    zEnvironmentVarGuard.__init__c             C   s
   | j | S )N)rŽ  )rf  Úenvvarrc   rc   rd   Ú__getitem__\  s    zEnvironmentVarGuard.__getitem__c             C   s*   || j kr| jj|ƒ| j |< || j|< d S )N)r�  rŽ  r\  )rf  r�  Úvaluerc   rc   rd   Ú__setitem___  s    
zEnvironmentVarGuard.__setitem__c             C   s2   || j kr| jj|ƒ| j |< || jkr.| j|= d S )N)r�  rŽ  r\  )rf  r�  rc   rc   rd   Ú__delitem__e  s    

zEnvironmentVarGuard.__delitem__c             C   s
   | j jƒ S )N)rŽ  Úkeys)rf  rc   rc   rd   r•  l  s    zEnvironmentVarGuard.keysc             C   s
   t | jƒS )N)ÚiterrŽ  )rf  rc   rc   rd   Ú__iter__o  s    zEnvironmentVarGuard.__iter__c             C   s
   t | jƒS )N)r»   rŽ  )rf  rc   rc   rd   Ú__len__r  s    zEnvironmentVarGuard.__len__c             C   s   || |< d S )Nrc   )rf  r�  r’  rc   rc   rd   Úsetu  s    zEnvironmentVarGuard.setc             C   s
   | |= d S )Nrc   )rf  r�  rc   rc   rd   Úunsetx  s    zEnvironmentVarGuard.unsetc             C   s   | S )Nrc   )rf  rc   rc   rd   rŠ  {  s    zEnvironmentVarGuard.__enter__c             G   sJ   x<| j jƒ D ].\}}|d kr0|| jkr:| j|= q|| j|< qW | jt_d S )N)r�  rŠ   rŽ  r„   r�  )rf  r‹  ÚkÚvrc   rc   rd   rŒ  ~  s    

zEnvironmentVarGuard.__exit__N)r`   ra   rb   rg  r‘  r“  r”  r•  r—  r˜  r™  rš  rŠ  rŒ  rc   rc   rc   rd   rT   S  s   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j|ƒ d S )N)rn   r…   Úoriginal_valueÚoriginal_objectÚextend)rf  Úpathsrc   rc   rd   rg  ”  s    zDirsOnSysPath.__init__c             C   s   | S )Nrc   )rf  rc   rc   rd   rŠ  ™  s    zDirsOnSysPath.__enter__c             G   s   | j t_| jtjd d …< d S )N)rŸ  rn   r…   rž  )rf  r‹  rc   rc   rd   rŒ  œ  s    zDirsOnSysPath.__exit__N)r`   ra   rb   rg  rŠ  rŒ  rc   rc   rc   rd   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 )N)r¶   Úattrs)rf  r¶   rþ   rc   rc   rd   rg  ¦  s    zTransientResource.__init__c             C   s   | S )Nrc   )rf  rc   rc   rd   rŠ  ª  s    zTransientResource.__enter__Nc             C   sT   |d k	rPt | j|ƒrPx:| jjƒ D ]$\}}t||ƒs4P t||ƒ|kr P q W tdƒ‚d S )Nz%an optional resource is not available)rx  r¶   r¢  rŠ   rÜ   rŒ   r   )rf  Ztype_r’  Ú	tracebackrj  Z
attr_valuerc   rc   rd   rŒ  ­  s    
zTransientResource.__exit__)NNN)r`   ra   rb   rg  rŠ  rŒ  rc   rc   rc   rd   r'   ¡  s   )Úerrnog      >@)r§   Úerrnosc      	      #   sp  d d!d"d#d$d%g}d'd)d+d-d.g}t d|  ƒ‰|‰ g ‰ˆ sRdd„ |D ƒ‰ dd„ |D ƒ‰‡ ‡‡fdd„}tjƒ }zôy|d k	r€tj|ƒ d V  W nÒ tjk
� rÎ } z&tr¸tjj	ˆj
d d ƒ ˆ|‚W Y d d }~X nŽ tk
�rZ } zpx^|j
}t|ƒdk�rt|d tƒ�r|d }n*t|ƒdk�r8t|d tƒ�r8|d }nP � qâW ||ƒ ‚ W Y d d }~X nX W d tj|ƒ X d S )/NÚECONNREFUSEDéo   Ú
ECONNRESETéh   ÚEHOSTUNREACHéq   ÚENETUNREACHée   Ú	ETIMEDOUTén   ÚEADDRNOTAVAILéc   Ú	EAI_AGAINr)  ÚEAI_FAILr�   Ú
EAI_NONAMEr‘   Ú
EAI_NODATAé   Ú
WSANO_DATAéü*  zResource %r is not availablec             S   s   g | ]\}}t t||ƒ‘qS rc   )rŒ   r¤  )rA  ru   Únumrc   rc   rd   rB  Ý  s   z&transient_internet.<locals>.<listcomp>c             S   s   g | ]\}}t t||ƒ‘qS rc   )rŒ   r  )rA  ru   r¹  rc   rc   rd   rB  ß  s   c                s¬   t | dd ƒ}t| tjƒsˆt| tjƒr,|ˆksˆt| tjjƒrTd| j  koNdkn  sˆt| tjj	ƒr€d| j
ksˆd| j
ksˆd| j
ksˆ|ˆ kr¨ts¢tjjˆjd d ƒ ˆ| ‚d S )	Nr¤  iô  iW  ÚConnectionRefusedErrorÚTimeoutErrorÚEOFErrorr   Ú
)rŒ   Ú
isinstancer  r§   Zgaierrorr_  ÚerrorZ	HTTPErrorÚcodeZURLErrorrã   r   rn   Ústderrr^  r™   )rš   Ún)Úcaptured_errnosÚdeniedÚ
gai_errnosrc   rd   Úfilter_errorâ  s    


z(transient_internet.<locals>.filter_errorr   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getdefaulttimeoutZsetdefaulttimeoutÚnntplibZNNTPTemporaryErrorr   rn   rÁ  r^  r™   r’   r»   r¾  )	Zresource_namer§   r¥  Zdefault_errnosZdefault_gai_errnosrÆ  Zold_timeoutrš   Úarc   )rÃ  rÄ  rÅ  rd   r+   Â  sP    



c             c   sF   dd l }tt| ƒ}tt| |jƒ ƒ ztt| ƒV  W d tt| |ƒ X d S )Nr   )ÚiorŒ   rn   ÚsetattrÚStringIO)Zstream_namerÍ  Zorig_stdoutrc   rc   rd   Úcaptured_output  s    
rÐ  c               C   s   t dƒS )Nr�   )rÐ  rc   rc   rc   rd   r     s    c               C   s   t dƒS )NrÁ  )rÐ  rc   rc   rc   rd   r   %  s    c               C   s   t dƒS )NÚstdin)rÐ  rc   rc   rc   rd   r   .  s    
c               C   s*   t jƒ  trtjdƒ t jƒ  t jƒ  d S )Ngš™™™™™¹?)ÚgcZcollectr@   r¡   r¢   rc   rc   rc   rd   r„  ;  s
    

r„  c           
   c   s.   t jƒ } t jƒ  z
d V  W d | r(t jƒ  X d S )N)rÒ  Ú	isenabledÚdisableÚenable)Zhave_gcrc   rc   rd   Ú
disable_gcK  s    
rÖ  c              C   s:   t jdƒpd} d}x| jƒ D ]}|jdƒr|}qW |dkS )NÚ	PY_CFLAGSrÊ   z-Oú-O0ú-Og)rÊ   rØ  rÙ  )Ú	sysconfigÚget_config_varrŸ   rp   )ZcflagsZ	final_optrÌ   rc   rc   rd   Úpython_is_optimizedV  s    
rÜ  ZnPZ0nÚgettotalrefcountZ2PZ0PrÂ  c             C   s   t jt|  t ƒS )N)ÚstructÚcalcsizeÚ_headerÚ_align)Úfmtrc   rc   rd   Úcalcobjsizeg  s    rã  c             C   s   t jt|  t ƒS )N)rÞ  rß  Ú_vheaderrá  )râ  rc   rc   rd   Úcalcvobjsizej  s    rå  é   é	   c             C   sp   dd l }tj|ƒ}t|ƒtkr(|jt@ sBt|ƒtkrLt|ƒjt@ rL||j7 }dt|ƒ||f }| j|||ƒ d S )Nr   z&wrong size for %s: got %d, expected %d)	Ú	_testcapirn   Ú	getsizeofrâ   Ú	__flags__Ú_TPFLAGS_HEAPTYPEÚ_TPFLAGS_HAVE_GCZSIZEOF_PYGC_HEADrN  )ÚtestÚoÚsizerè  rÍ   rw   rc   rc   rd   Úcheck_sizeofq  s    

rð  c                s   ‡ ‡fdd„}|S )Nc                s$   ‡‡ ‡fdd„}ˆ j |_ ˆ j|_|S )Nc                 sž   y dd l }t|ˆ ƒ}|j|ƒ}W n( tk
r6   ‚ Y nB   d  }}Y n0X x,ˆD ]$}y|j||ƒ P W qP   Y qPX qPW z
ˆ| |ŽS |r˜|r˜|j||ƒ X d S )Nr   )ÚlocalerŒ   Ú	setlocaler�   )r™   Úkwdsrñ  rƒ  Zorig_localeÚloc)Úcatstrr˜   Úlocalesrc   rd   Úinner‚  s$    



z1run_with_locale.<locals>.decorator.<locals>.inner)r`   Ú__doc__)r˜   r÷  )rõ  rö  )r˜   rd   rù   �  s    z"run_with_locale.<locals>.decoratorrc   )rõ  rö  rù   rc   )rõ  rö  rd   rU   €  s    c                s   ‡ fdd„}|S )Nc                s"   ‡ ‡fdd„}ˆ j |_ ˆ j|_|S )Nc                 sŠ   y
t j}W n tk
r(   tjdƒ‚Y nX dtjkr@tjd }nd }ˆtjd< |ƒ  z
ˆ | |ŽS |d krrtjd= n
|tjd< t jƒ  X d S )Nztzset requiredZTZ)r¡   Útzsetr�   rr   rs   r„   r�  )r™   ró  rù  Zorig_tz)r˜   Útzrc   rd   r÷  ¦  s    





z-run_with_tz.<locals>.decorator.<locals>.inner)r`   rø  )r˜   r÷  )rú  )r˜   rd   rù   ¥  s    zrun_with_tz.<locals>.decoratorrc   )rú  rù   rc   )rú  rd   r\   ¤  s    c             C   s”   dt tdt dœ}tjd| tjtjB ƒ}|d kr>td| f ƒ‚tt|j	dƒƒ||j	dƒj
ƒ   ƒ}|a|tkrrt}|td k rŒtd| f ƒ‚|ad S )Ni   )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Ú_1Gru  rv  Ú
IGNORECASEÚVERBOSErï   rî   ÚfloatÚgroupÚlowerÚreal_max_memuseÚMAX_Py_ssize_tÚ_2Gr   )ÚlimitZsizesrû  Zmemlimitrc   rc   rd   rY   Î  s    $c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_MemoryWatchdogc             C   s   dj tjƒ d�| _d| _d S )Nz/proc/{pid}/statm)r0  F)rá   r„   r.  ÚprocfileÚstarted)rf  rc   rc   rd   rg  è  s    z_MemoryWatchdog.__init__c             C   s‚   yt | jdƒ}W n< tk
rL } z tjdj|ƒtƒ tjj	ƒ  d S d }~X nX t
dƒ}tjtj|g|tjd�| _|jƒ  d| _d S )NÚrz!/proc not available for stats: {}zmemory_watchdog.py)rÑ  rÁ  T)r<  r
  r’   rf   r£   rá   r¤   rn   rÁ  Úflushr   Ú
subprocessÚPopenÚ
executableZDEVNULLÚmem_watchdogr  r  )rf  r�   rç   Zwatchdog_scriptrc   rc   rd   Ústartì  s    
z_MemoryWatchdog.startc             C   s   | j r| jjƒ  | jjƒ  d S )N)r  r  Z	terminateÚwait)rf  rc   rc   rd   Ústopû  s    
z_MemoryWatchdog.stopN)r`   ra   rb   rg  r  r  rc   rc   rc   rd   r	  ã  s   r	  c                s   ‡ ‡‡fdd„}|S )Nc                s    ‡‡ ‡fdd„‰ˆˆ_ ˆˆ_ˆS )Nc          
      sž   ˆj }ˆj}tsd}n|}ts$ˆ  rFt|| k rFtjd|| d  ƒ‚tr|tr|tƒ  tdj|| d d�ƒ tƒ }|j	ƒ  nd }z
ˆ| |ƒS |r˜|j
ƒ  X d S )	Ni  z'not enough memory: %.1fG minimum neededi   r)  z* ... expected peak memory use: {peak:.1f}G)Zpeaki   @i   @)rï  Úmemuser  rr   rs   r   r“   rá   r	  r  r  )rf  rï  r  ÚmaxsizeZwatchdog)Údry_runr�   rö   rc   rd   rö     s*    


z.bigmemtest.<locals>.decorator.<locals>.wrapper)rï  r  )r�   )r  r  rï  )r�   rö   rd   rù     s    zbigmemtest.<locals>.decoratorrc   )rï  r  r  rù   rc   )r  r  rï  rd   r3     s    !c                s   ‡ fdd„}|S )Nc                sD   t tk r8td
kr$t dkr$tjdƒ‚q@tjdtd  ƒ‚nˆ | ƒS d S )Nr‘   é?   r   é   z-not enough memory: try a 32-bit build insteadz'not enough memory: %.1fG minimum neededi   r)  l            l   ÿÿÿÿ l        i   @)r   r  rr   rs   )rf  )r�   rc   rd   rö   3  s    z!bigaddrspacetest.<locals>.wrapperrc   )r�   rö   rc   )r�   rd   r4   1  s    c               @   s   e Zd Zdd„ ZdS )r,   c             C   s   t jƒ }||ƒ |S )N)rr   Z
TestResult)rf  rí  rÍ   rc   rc   rd   ÚrunD  s    zBasicTestRunner.runN)r`   ra   rb   r  rc   rc   rc   rd   r,   C  s   c             C   s   | S )Nrc   )rŽ   rc   rc   rd   Ú_idI  s    r  c             C   s<   | dkrt ƒ  rtjt jƒS t| ƒr(tS tjdj| ƒƒS d S )Nré   zresource {0!r} is not enabled)rÝ   rr   Úskiprã   r    r  rá   )rè   rc   rc   rd   Úrequires_resourceL  s
    r  c             C   s&   t rt| k rtjd|tf ƒS tS d S )Nz%s at Android API level %d)rA   Ú_ANDROID_API_LEVELrr   r  r  )Úlevelrã   rc   rc   rd   r>   T  s    c             C   s   t dd�| ƒS )NT)Úcpython)Úimpl_detail)rí  rc   rc   rd   r5   [  s    c             K   sV   t f |ŽrtS | d krLt|ƒ\}}|r,d} nd} t|jƒ ƒ}| jdj|ƒƒ} tj| ƒS )Nz*implementation detail not available on {0}z%implementation detail specific to {0}z or )	rB   r  Ú_parse_guardsrC  r•  rá   r¯   rr   r  )rw   ÚguardsZ
guardnamesÚdefaultrc   rc   rd   r!  a  s    
r!  c             C   sT   t d kr:dd l}y|jƒ  da W n tk
r8   da Y nX d}t rF| S tj|ƒ| ƒS )Nr   TFz6requires a functioning shared semaphore implementation)Ú_have_mp_queueÚmultiprocessingZQueuerm   rr   r  )rí  r&  rw   rc   rc   rd   r?   o  s    
c             C   s*   | sddidfS t | jƒ ƒd }| | fS )Nr   TFr   )r{   Úvalues)r#  Zis_truerc   rc   rd   r"  ~  s    r"  c              K   s    t | ƒ\} }| jtjƒ jƒ |ƒS )N)r"  r\  ro   Zpython_implementationr  )r#  r$  rc   rc   rd   rB   ˆ  s    c                s,   t tdƒsˆ S tjˆ ƒ‡ fdd„ƒ}|S d S )NÚgettracec                 s.   t jƒ }zt jd ƒ ˆ | |ŽS t j|ƒ X d S )N)rn   r(  Úsettrace)r™   rþ   Zoriginal_trace)r˜   rc   rd   rö   ˜  s
    

zno_tracing.<locals>.wrapper)rÜ   rn   r÷   rø   )r˜   rö   rc   )r˜   rd   Ú
no_tracing“  s    
r*  c             C   s   t t| ƒƒS )N)r*  r5   )rí  rc   rc   rd   Úrefcount_test£  s    r+  c             C   sR   g }xB| j D ]8}t|tjƒr2t||ƒ |j|ƒ q||ƒr|j|ƒ qW || _ d S )N)Z_testsr¾  rr   Ú	TestSuiteÚ_filter_suiter‰   )ÚsuiteZpredZnewtestsrí  rc   rc   rd   r-  ®  s    
r-  c             C   s®   t tjttd k	d�}|j| ƒ}td k	r4tj|jƒ ƒ |js>t	‚|j
ƒ sªt|jƒdkrl|j rl|jd d }n6t|jƒdkr’|j r’|jd d }nd}ts¢|d7 }t|ƒ‚d S )N)Ú	verbosityZcapture_outputr   r   zmultiple errors occurredz!; run in verbose mode for details)r   rn   r�   r   Újunit_xml_listr  r‰   Zget_xml_elementZtestsRunr   ZwasSuccessfulr»   ÚerrorsZfailuresr
   )r.  ZrunnerrÍ   rš   rc   rc   rd   Ú
_run_suiteº  s"    
 r2  c             C   s   t d krdS t | jƒ ƒS d S )NT)Ú_match_test_funcÚid)rí  rc   rc   rd   Ú
match_test×  s    r5  c             C   s   d| kot jd| ƒ S )Nrx   z[?*\[\]])ru  Úsearch)rƒ   rc   rc   rd   Ú_is_full_match_testß  s    r7  c                sr   | t krd S | sd }f } nHttt| ƒƒr4t| ƒj}n.djttj| ƒƒ}t	j
|ƒj‰ ‡ fdd„}|}t| ƒa |ad S )Nú|c                s$   ˆ | ƒrdS t tˆ | jdƒƒƒS d S )NTrx   )Úanyrí   rŸ   )Ztest_id)Úregex_matchrc   rd   Úmatch_test_regexþ  s    z)set_match_tests.<locals>.match_test_regex)Ú_match_test_patternsÚallrí   r7  r™  Ú__contains__r¯   ÚfnmatchÚ	translateru  rM  rv  rq   r3  )Zpatternsr˜   Zregexr;  rc   )r:  rd   Úset_match_testsé  s    rA  c              G   s”   t jt jf}t jƒ }xh| D ]`}t|tƒrT|tjkrJ|jt jtj| ƒƒ qzt	dƒ‚qt||ƒrj|j|ƒ q|jt j
|ƒƒ qW t|tƒ t|ƒ d S )Nz)str arguments must be keys in sys.modules)rr   r,  ZTestCaser¾  rt   rn   ry   ZaddTestZfindTestCasesrï   Z	makeSuiter-  r5  r2  )ÚclassesZvalid_typesr.  Úclsrc   rc   rd   r-     s    





c               C   s   d S )Nrc   rc   rc   rc   rd   Ú_check_docstrings(  s    rD  ÚWITH_DOC_STRINGSztest requires docstringsc             C   s`   dd l }|d k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   Ztestmodr
   r“   r`   )r‹   r/  rF  rG  r�   rý  rc   rc   rd   r.   9  s    c               C   s   t jjƒ fS )N)rn   ry   rˆ  rc   rc   rc   rd   Úmodules_setupT  s    rH  c             C   s:   dd„ t jjƒ D ƒ}t jjƒ  t jj|ƒ t jj| ƒ d S )Nc             S   s"   g | ]\}}|j d ƒr||f‘qS )z
encodings.)rp   )rA  r›  rœ  rc   rc   rd   rB  [  s    z#modules_cleanup.<locals>.<listcomp>)rn   ry   rŠ   rr  rß   )Z
oldmodulesZ	encodingsrc   rc   rd   Úmodules_cleanupW  s    
rI  c               C   s"   t rt jƒ tjjƒ fS df fS d S )Nr   )Ú_threadÚ_countÚ	threadingÚ	_danglingrˆ  rc   rc   rc   rd   rN   z  s    c              G   sJ   t sd S d}x8t|ƒD ],}t jƒ tjf}|| kr2P tjdƒ tƒ  qW d S )Néd   g{®Gáz„?)rJ  ÚrangerK  rL  rM  r¡   r¢   r„  )Zoriginal_valuesZ
_MAX_COUNTÚcountr'  rc   rc   rd   rO   €  s    
c                s"   t sˆ S tjˆ ƒ‡ fdd„ƒ}|S )Nc                 s   t ƒ }zˆ | Ž S t|Ž  X d S )N)rN   rO   )r™   Úkey)r˜   rc   rd   rù   ”  s    zreap_threads.<locals>.decorator)rJ  r÷   rø   )r˜   rù   rc   )r˜   rd   rP   Œ  s    ç      N@c             c   s–   t jƒ }z
d V  W d tjƒ }||  }xjt jƒ }||kr8P tjƒ |kr|tjƒ | }d|| › d|d›d|› d|› d�	}t|ƒ‚tjdƒ tƒ  q&W X d S )Nz!wait_threads() failed to cleanup z threads after z.1fz seconds (count: z, old count: ú)g{®Gáz„?)rJ  rK  r¡   Z	monotonicrz  r¢   r„  )r§   Z	old_countZ
start_timeZdeadlinerP  Zdtrw   rc   rc   rd   Úwait_threads_exitž  s    
$
rT  c           
   C   sZ   t tdƒrVd} xFy2tj| tjƒ\}}|dkr.P td| tjd� W q   P Y qX qW d S )NÚwaitpidr   r   z2Warning -- reap_children() reaped child process %s)r®   rX  )rÜ   r„   rU  ÚWNOHANGr“   rn   rÁ  )Zany_processr0  Zstatusrc   rc   rd   rL   Á  s    
c             c   s*  t | ƒ} g }zZy$x| D ]}|jƒ  |j|ƒ qW W n*   trVtdt| ƒt|ƒf ƒ ‚ Y nX d V  W d zˆ|rt|ƒ  tjƒ  }}xltddƒD ]^}|d7 }x$|D ]}|jt	|tjƒ  dƒƒ qžW dd„ |D ƒ}|sÒP trŒtdt|ƒ|f ƒ qŒW W d d	d„ |D ƒ}|�r"t
jtjƒ td
t|ƒ ƒ‚X X d S )Nz/Can't start %d threads, only %d threads startedr   r  é<   g{®Gáz„?c             S   s   g | ]}|j ƒ r|‘qS rc   )ÚisAlive)rA  rý  rc   rc   rd   rB  î  s    z!start_threads.<locals>.<listcomp>z7Unable to join %d threads during a period of %d minutesc             S   s   g | ]}|j ƒ r|‘qS rc   )rX  )rA  rý  rc   rc   rd   rB  õ  s    zUnable to join %d threads)r{   r  r‰   r   r“   r»   r¡   rO  r¯   ÚmaxÚfaulthandlerZdump_tracebackrn   r�   rz  )ZthreadsZunlockr  rý  ZendtimeZ	starttimer§   rc   rc   rd   rQ   Ö  s>    


c             c   sn   t | |ƒr<t| |ƒ}t| ||ƒ z
|V  W d t| ||ƒ X n.t| ||ƒ z
d V  W d t | |ƒrht| |ƒ X d S )N)rÜ   rŒ   rÎ  Údelattr)rŽ   rj  Únew_valÚreal_valrc   rc   rd   rW   ú  s    




c             c   sX   || kr0| | }|| |< z
|V  W d || |< X n$|| |< z
d V  W d || krR| |= X d S )Nrc   )rŽ   Úitemr\  r]  rc   rc   rd   rV   	  s    

c             C   s   t jdd| ƒjƒ } | S )Ns   \[\d+ refs, \d+ blocks\]\r?\n?ó    )ru  ÚsubÚstrip)rÁ  rc   rc   rd   Ústrip_python_stderr8	  s    rb  Z	getcountsz-types are immortal if COUNT_ALLOCS is definedc               C   s   t jƒ S )N)r  Z_args_from_interpreter_flagsrc   rc   rc   rd   Úargs_from_interpreter_flagsE	  s    rc  c               C   s   t jƒ S )N)r  Z"_optim_args_from_interpreter_flagsrc   rc   rc   rd   Ú!optim_args_from_interpreter_flagsJ	  s    rd  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
rM   c             C   s   t jjj| dƒ || _d S )Nr   )ÚloggingÚhandlersÚBufferingHandlerrg  Úmatcher)rf  rh  rc   rc   rd   rg  T	  s    zTestHandler.__init__c             C   s   dS )NFrc   )rf  rc   rc   rd   ÚshouldFlush]	  s    zTestHandler.shouldFlushc             C   s   | j |ƒ | jj|jƒ d S )N)rá   r¾   r‰   Ú__dict__)rf  rn  rc   rc   rd   Úemit`	  s    
zTestHandler.emitc             K   s.   d}x$| j D ]}| jj|f|Žrd}P qW |S )NFT)r¾   rh  Úmatches)rf  rþ   rÍ   Údrc   rc   rd   rl  d	  s    zTestHandler.matchesN)r`   ra   rb   rg  ri  rk  rl  rc   rc   rc   rd   rM   S	  s   	c               @   s    e Zd ZdZdd„ Zdd„ ZdS )	rX   rw   rt  c             K   s<   d}x2|D ]*}|| }|j |ƒ}| j|||ƒs
d}P q
W |S )NTF)r\  Úmatch_value)rf  rm  rþ   rÍ   r›  rœ  Údvrc   rc   rd   rl  s	  s    

zMatcher.matchesc             C   sH   t |ƒt |ƒkrd}n.t |ƒtk	s,|| jkr6||k}n|j|ƒdk}|S )NFr   )râ   rt   Ú_partial_matchesÚfind)rf  r›  ro  rœ  rÍ   rc   rc   rd   rn  „	  s    
zMatcher.match_valueN)rw   rt  )r`   ra   rb   rp  rl  rn  rc   rc   rc   rd   rX   o	  s   c              C   sZ   t d k	rt S td } ytjt| ƒ d}W n tttfk
rF   d}Y nX tj| ƒ |a |S )Nr   TF)Ú_can_symlinkr   r„   Úsymlinkr’   ÚNotImplementedErrorr�   ry  )Zsymlink_pathÚcanrc   rc   rd   r   ’	  s    

c             C   s    t ƒ }d}|r| S tj|ƒ| ƒS )Nz*Requires functional symlink implementation)r   rr   r  )rí  Úokrw   rc   rc   rd   r/   ¡	  s    c              C   sì   t d k	rt S ttdƒsd} nÈtjƒ }tj|d�\}}z”ttdƒ�€}y`tj|ddƒ tj|ddƒ tj|j	ƒ ddƒ t
jƒ }tjd	|ƒ}|d kpžt|jd
ƒƒdk} W n tk
rº   d} Y nX W d Q R X W d ttƒ t|ƒ t|ƒ X | a | S )NÚsetxattrF)ÚdirrE  s	   user.testr_  s   trusted.foos   42z2.6.(\d{1,2})r   é'   )Ú
_can_xattrrÜ   r„   r*  r+  Zmkstempr<  r   rw  rF  ro   rì   ru  rv  rî   r  r’   r   r¬   )ru  Ztmp_dirZtmp_fpZtmp_nameÚfpZkernel_versionrû  rc   rc   rd   Ú	can_xattr¨	  s,    

r|  c             C   s    t ƒ }d}|r| S tj|ƒ| ƒS )Nz(no non-broken extended attribute support)r|  rr   r  )rí  rv  rw   rc   rc   rd   r8   Æ	  s    c             C   s$   t  pt}d}|r| S tj|ƒ| ƒS )Nz#Not run for (non-extended) PGO task)r]   ÚPGO_EXTENDEDrr   r  )rí  rv  rw   rc   rc   rd   Úskip_if_pgo_taskÌ	  s    
r~  c             C   s^   t j| d��H}|j}|jƒ }||kr,|jƒ }ytjj||ƒS  tk
rN   dS X W d Q R X d S )N)rx  F)	r*  ZNamedTemporaryFileru   Úupperr  r„   r…   ÚsamefilerÁ   )Z	directoryÚbaseÚ	base_pathZ	case_pathrc   rc   rd   r   Ò	  s    )re   c            C   s>   t t| ƒƒt t|ƒƒ }|r(|t |ƒ8 }t dd„ |D ƒƒ}|S )Nc             s   s(   | ] }|j d ƒ s|jdƒr|V  qdS )Ú_Ú__N)rp   Úendswith)rA  rû  rc   rc   rd   ú	<genexpr>é	  s    z&detect_api_mismatch.<locals>.<genexpr>)r™  rx  )Zref_apiZ	other_apire   Zmissing_itemsrc   rc   rd   r<   ß	  s
    c             C   s    |d kr|j f}nt|tƒr"|f}t|ƒ}xbt|ƒD ]V}|jdƒs4||krLq4t||ƒ}t|dd ƒ|ks€t|dƒ r4t|tj	ƒ r4|j
|ƒ q4W | j|j|ƒ d S )Nrƒ  ra   )r`   r¾  rt   r™  rx  rp   rŒ   rÜ   ÚtypesÚ
ModuleTypeÚaddZassertCountEqualÚ__all__)Z	test_caser‹   Zname_of_moduleZextraZ	blacklistZexpectedru   rŽ   rc   rc   rd   r=   î	  s    )


c               @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )rZ   Nc       
      C   sr  t jjdƒrºdd l}|jj| _d}| jj|ƒ| _| jj| j|B ƒ ydd l	}|j
 W n ttfk
rl   Y nLX i | _xø|j|j|jgD ].}|j
||jƒ}|j||jƒ}||f| j|< q†W n´td k	�r
y*tjtjƒ| _tjtjd| jd fƒ W n ttfk
�r   Y nX t jdk�rndddd	g}tj|tjtjd
�}|� |jƒ d }	W d Q R X |	jƒ dk�rnt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  ) rn   ro   rp   rº   r¼   r½   Ú_k32ÚSetErrorModeÚ	old_valueÚmsvcrtÚCrtSetReportModer�   rm   Ú	old_modesÚCRT_WARNÚ	CRT_ERRORÚ
CRT_ASSERTZCRTDBG_MODE_FILEÚCrtSetReportFileZCRTDBG_FILE_STDERRrè   Z	getrlimitÚRLIMIT_COREÚ	setrlimitrï   r’   r  r  ÚPIPEZcommunicatera  r“   )
rf  rº   ZSEM_NOGPFAULTERRORBOXr�  Úreport_typeÚold_modeÚold_fileÚcmdÚprocr�   rc   rc   rd   rŠ  2
  sN    




zSuppressCrashReport.__enter__c             G   s¦   | j d krd S tjjdƒrl| jj| j ƒ | jr¢dd l}xj| jjƒ D ]$\}\}}|j	||ƒ |j
||ƒ qBW n6td k	r¢ytjtj| j ƒ W n ttfk
r    Y nX d S )Nrœ   r   )rŽ  rn   ro   rp   rŒ  r�  r‘  r�  rŠ   r�  r•  rè   r—  r–  rï   r’   )rf  r‹  r�  r™  rš  r›  rc   rc   rd   rŒ  s
  s    
zSuppressCrashReport.__exit__)r`   ra   rb   rŽ  r‘  rŠ  rŒ  rc   rc   rc   rd   rZ   )
  s   Ac                sr   t ˆˆƒ d‰ yˆjˆ ‰W n$ ttfk
r@   t ˆˆd ƒ‰Y nX d‰ ‡ ‡‡‡fdd„}| j|ƒ tˆˆ|ƒ d S )NFTc                  s    ˆ rt ˆˆˆƒ n
tˆˆƒ d S )N)rÎ  r[  rc   )Úattr_is_localÚ	attr_nameÚobject_to_patchrŽ  rc   rd   Úcleanupž
  s    zpatch.<locals>.cleanup)rŒ   rj  r�   r   Z
addCleanuprÎ  )Ztest_instancer   rŸ  Z	new_valuer¡  rc   )rž  rŸ  r   rŽ  rd   Úpatchˆ
  s    


r¢  c             C   sF   ydd l }W n tk
r    Y nX |jƒ r4tjdƒ‚dd l}|j| ƒS )Nr   zUrun_in_subinterp() cannot be used if tracemalloc module is tracing memory allocations)Útracemallocrm   Z
is_tracingrr   rs   rè  Úrun_in_subinterp)rÀ  r£  rè  rc   rc   rd   r¤  ª
  s    
r¤  c                sH   G ‡ ‡fdd„d|ƒ}d‰ |||Ž ƒ‰| j ttˆƒ tƒ  | jˆ ƒ d S )Nc                   s   e Zd Z‡ ‡fdd„ZdS )z%check_free_after_iterating.<locals>.Ac                s*   d‰ yt ˆƒ W n tk
r$   Y nX d S )NT)ÚnextÚStopIteration)rf  )ÚdoneÚitrc   rd   Ú__del__À
  s
    z-check_free_after_iterating.<locals>.A.__del__N)r`   ra   rb   r©  rc   )r§  r¨  rc   rd   ÚA¿
  s   rª  F)rK  r¦  r¥  r„  Z
assertTrue)rí  r–  rC  r™   rª  rc   )r§  r¨  rd   Úcheck_free_after_iterating¾
  s    	r«  c             C   s|   ddl m}m}m} |jƒ }|j|ƒ xP|jD ]F}| r@|| kr@q.t||ƒ}| rPn
|d krZq.|j|d ƒd kr.|d S q.W d S )Nr   )Ú	ccompilerrÚ  Úspawn)	Z	distutilsr¬  rÚ  r­  Znew_compilerZcustomize_compilerZexecutablesrŒ   Zfind_executable)Z	cmd_namesr¬  rÚ  r­  Zcompilerru   rœ  rc   rc   rd   r^   Ñ
  s    	

c             C   s@   d}t r6| |k r6td kr.tjddgƒjƒ dkatr6|} tj| ƒS )Ngñhãˆµøä>Zgetpropzro.kernel.qemuó   1)rA   Ú_is_android_emulatorr  Zcheck_outputra  rn   rD   )ZintervalZminimum_intervalrc   rc   rd   rD   ë
  s    c              c   s>   t jjƒ } tjƒ }ztjƒ  d V  W d |r8tj| dd� X d S )NT)r®   Zall_threads)rn   r²   rF  rZ  Ú
is_enabledrÔ  rÕ  )r@  r°  rc   rc   rd   Údisable_faulthandlerù
  s    

r±  c        	   /   C   s€  t jjd
ƒr8ytjdƒ} t| ƒd S  tk
r6   Y nX d}ttdƒrjytjdƒ}W n t	k
rh   Y nX d }t jdkrÒyd	d l
}|j W n ttfk
r¢   Y n0X i }x(|j|j|jfD ]}|j|d	ƒ||< qºW zpd	}xft|ƒD ]Z}ytj|ƒ}W n4 t	k
�r( } z|jtjk�r‚ W Y d d }~X qâX tj|ƒ |d7 }qâW W d |d k	�rzx*|j|j|jfD ]}|j||| ƒ �q`W X |S )NÚlinuxÚfreebsdz/proc/self/fdr   é   ÚsysconfÚSC_OPEN_MAXr  r   )r²  r³  )rn   ro   rp   r„   r    r»   rÁ   rÜ   rµ  r’   r�  r�  r�   rm   r’  r“  r”  rO  Údupr¤  ZEBADFr  )	ÚnamesZMAXFDr‘  r�  r™  rP  r@  Zfd2rç   rc   rc   rd   r_   	  sP    





c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSaveSignalsc             C   sj   dd l }|| _ ttd|jƒƒ| _x>dD ]6}yt||ƒ}W n tk
rN   w&Y nX | jj|ƒ q&W i | _d S )Nr   r   ÚSIGKILLÚSIGSTOP)rº  r»  )	Úsignalr{   rO  ÚNSIGÚsignalsrŒ   r�   ry  rf  )rf  r¼  ZsignameÚsignumrc   rc   rd   rg  M  s    
zSaveSignals.__init__c             C   s4   x.| j D ]$}| jj|ƒ}|d kr"q|| j|< qW d S )N)r¾  r¼  Ú	getsignalrf  )rf  r¿  Úhandlerrc   rc   rd   ÚsaveZ  s
    zSaveSignals.savec             C   s*   x$| j jƒ D ]\}}| jj||ƒ qW d S )N)rf  rŠ   r¼  )rf  r¿  rÁ  rc   rc   rd   Úrestoref  s    zSaveSignals.restoreN)r`   ra   rb   rg  rÂ  rÃ  rc   rc   rc   rd   r¹  D  s   	r¹  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFakePathc             C   s
   || _ d S )N)r…   )rf  r…   rc   rc   rd   rg  n  s    zFakePath.__init__c             C   s   d| j ›d�S )Nz
<FakePath ú>)r…   )rf  rc   rc   rd   Ú__repr__q  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 )N)r¾  r…   ÚBaseExceptionrâ   rx  )rf  rc   rc   rd   Ú
__fspath__t  s
    zFakePath.__fspath__N)r`   ra   rb   rg  rÆ  rÈ  rc   rc   rc   rd   rÄ  k  s   rÄ  c             c   s.   t jƒ }zt j| ƒ d V  W d t j|ƒ X d S )N)rn   Úget_int_max_str_digitsÚset_int_max_str_digits)Z
max_digitsZcurrentrc   rc   rd   Úadjust_int_max_str_digits|  s
    

rË  c               C   s   dd„ t ddƒD ƒdg S )Nc             S   s   g | ]}t |ƒ‘qS rc   )Úchr)rA  rÃ   rc   rc   rd   rB  ‹  s    z)control_characters_c0.<locals>.<listcomp>r   é    ú)rO  rc   rc   rc   rd   Úcontrol_characters_c0‡  s    rÏ  )T)F)F)N)Ni   i  @ i @ i @  i   i  )r  r  r  r  r  r  r  r  r  r   r!  )r%  r#  r&  r'  r(  )NF)F)r5  F)N)Fi @  i   i   )T)N)Nr   )rR  )N(  r`   rm   Úcollections.abcÚcollectionsÚ
contextlibZdatetimer¤  rZ  r?  r÷   rÒ  rý   rl   Úimportlib.utilrÍ  Zlogging.handlersre  rË  r„   ro   ru  rÀ   r  r–   rÞ  r  rn   rÚ  r*  r¡   r‡  rr   Zurllib.errorr_  rf   Z
testresultr   rJ  rL  Zmultiprocessing.processr&  ÚzlibrV  Úbz2Zlzmarè   rû   rŠ  rà   r	   r
   r   rs   r   Úcontextmanagerrj   r   r~   r€   r:   r;   r   r6   r   r   r   r  r0  r   r�   r   r   r   r›   rp   r©   r«   r­   r¹   r¿   r   r¬   r   rÉ   r   rÝ   r    r!   rú   r"   r#   r$   r%   rE   r  r  r	  rG   rH   rJ   r  rF   r  r   ZSOCK_MAX_SIZEZ
skipUnlessr  Ú__getformat__r7   r9   r0   r1   r2   r@   rÛ  r  rA   rC   ru   r   rá   r.  ZFS_NONASCIIÚ	characterÚfsdecodeÚfsencodeÚUnicodeErrorZTESTFN_UNICODEZunicodedataÚ	normalizeÚgetfilesystemencodingZTESTFN_ENCODINGZTESTFN_UNENCODABLEZgetwindowsversionÚencodeÚUnicodeEncodeErrorr“   ÚdecodeÚUnicodeDecodeErrorZTESTFN_UNDECODABLEZTESTFN_NONASCIIr2  r   r]   r}  r1  r4  r   rÜ   rK   r…   r†   rÆ   r‡   ZTEST_SUPPORT_DIRr9  r¯   r[  r   r   r[   rG  r&   rI   Úobjectrc  r�  rR   r‚  r†  rS   r   ÚabcÚMutableMappingrT   r�  r'   r’   r®  r(   r¨  r)   r*   r+   rÐ  r   r   r   r„  rÖ  rÜ  rà  rá  rä  rã  rå  rì  rë  rð  rU   r\   rþ  rÿ  r  Z_4Gr  r  rY   r	  r3   r4   r,   r  r  r>   r5   r!  r%  r?   r"  rB   r*  r+  r-  r2  r3  r<  r5  r7  rA  r-   rD  ZMISSING_C_DOCSTRINGSrø  ZHAVE_DOCSTRINGSZrequires_docstringsr.   rH  rI  Zenvironment_alteredrN   rO   rP   rT  rL   rQ   rW   rV   rb  ZskipIfZrequires_type_collectingrc  rd  rf  rg  rM   rX   rr  r   r/   rz  r|  r8   r~  r   r<   r=   rZ   r¢  r¤  r«  r^   r¯  rD   r±  r_   r¹  rÄ  rË  rÏ  rc   rc   rc   rd   Ú<module>   sÔ  











2	
!
J			>%	
          
    
%2' 5M		

$
#
0






(




"
#
	":_";'