o
    GXîh1¾  ã                   @   s  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mZ d dlmZ zd dlmZ eƒ  dZW n eyb   dZY nw d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ dd„ Z dd„ Z!dd„ Z"G dd„ dƒZ#G dd„ de#ej$eddZ%G dd„ de#ej$eddZ&G dd„ dej$ƒZ'G dd„ dƒZ(G dd„ de(ej$eddZ)G dd „ d e(ej$eddZ*G d!d"„ d"ƒZ+G d#d$„ d$e+ej$eddZ,G d%d&„ d&e+ej$eddZ-e.d'kre /¡  dS dS )(é    N)ÚmockÚ
skipUnless)ÚProcessPoolExecutor)Ú_check_system_limitsTF)Úsupport)Ú	os_helper)Úscript_helper)Úwithout_source_date_epoch)ÚSourceDateEpochTestMetac                 C   s   |sd}t jj| |dS )NÚ ©Úoptimization)Ú	importlibÚutilÚcache_from_source)ÚscriptÚopt© r   ú>/opt/python-3.10.19/usr/lib/python3.10/test/test_compileall.pyÚget_pyc#   s   r   c                    s   ‡ fdd„dD ƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS r   )r   )Ú.0r   ©r   r   r   Ú
<listcomp>+   s    zget_pycs.<locals>.<listcomp>©r   é   é   r   r   r   r   r   Úget_pycs*   s   r   c                 C   s"   	 t  | ¡j}t  |¡j}||kS ©N)ÚosÚstatÚst_ino)Z	filename1Ú	filename2Zinode1Zinode2r   r   r   Úis_hardlink.   s   r"   c                   @   s¦  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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eed+ƒe d,¡d-d.„ ƒƒZd/d0„ Zeed+ƒe d,¡d1d2„ ƒƒZeed+ƒe d,¡e d3¡d4d5„ ƒƒƒZejd,d6d7e d3¡d8d9„ ƒƒZ d:d;„ Z!d<d=œd>d?„Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+e,j-dRdS„ ƒZ.d6S )TÚCompileallTestsBasec                 C   sÜ   t  ¡ | _tj | jd¡| _tj 	| j¡| _
t| jddd}| d¡ W d   ƒ n1 s.w   Y  tj | jd¡| _tj 	| j¡| _t | j| j¡ tj | jd¡| _t | j¡ tj | jd¡| _t | j| j¡ d S )	Nú_test.pyÚwúutf-8©Úencodingzx = 123
z	_test2.pyZ_subdirz	_test3.py)ÚtempfileÚmkdtempÚ	directoryr   ÚpathÚjoinÚsource_pathr   r   r   Úbc_pathÚopenÚwriteÚsource_path2Úbc_path2ÚshutilÚcopyfileZsubdirectoryÚmkdirÚsource_path3©ÚselfÚfiler   r   r   ÚsetUp7   s   
ÿzCompileallTestsBase.setUpc                 C   ó   t  | j¡ d S r   ©r4   Úrmtreer+   ©r9   r   r   r   ÚtearDownE   ó   zCompileallTestsBase.tearDownc                 C   sR   t j | jd¡| _t| jddd}| d¡ W d   ƒ d S 1 s"w   Y  d S )Nz_test_bad.pyr%   r&   r'   zx (
)r   r,   r-   r+   Úbad_source_pathr0   r1   r8   r   r   r   Úadd_bad_source_fileH   s   "ÿz'CompileallTestsBase.add_bad_source_filec                 C   sh   t | jdƒ}| d¡}W d   ƒ n1 sw   Y  tt | j¡jƒ}t 	dt
jjd|d@ ¡}||fS )NÚrbé   ú<4sLLr   ì   ÿÿ )r0   r/   ÚreadÚintr   r   r.   Úst_mtimeÚstructÚpackr   r   ÚMAGIC_NUMBER)r9   r:   ÚdataÚmtimeZcomparer   r   r   Útimestamp_metadataM   s   ÿÿz&CompileallTestsBase.timestamp_metadatac              	   C   óz   z	t  | jd¡ W n ttfy   |  d¡ Y nw t t 	¡ ¡ |  
t | j¡¡ W d   ƒ d S 1 s6w   Y  d S )N)rG   rG   z0filesystem doesn't support timestamps near 2**32©r   Úutimer.   ÚOverflowErrorÚOSErrorZskipTestÚ
contextlibÚredirect_stdoutÚioÚStringIOÚ
assertTrueÚ
compileallÚcompile_filer?   r   r   r   Ú test_year_2038_mtime_compilationU   ó   ÿ"ÿz4CompileallTestsBase.test_year_2038_mtime_compilationc              	   C   rQ   )N)ì         r_   z+filesystem doesn't support large timestampsrR   r?   r   r   r   Útest_larger_than_32_bit_times_   r^   z1CompileallTestsBase.test_larger_than_32_bit_timesc                 C   sä   	 t j d¡rt d¡‚t | j¡ | j|  	¡ Ž  t
| jdƒ}| ¡ t|ƒd … }W d   ƒ n1 s4w   Y  t
| jdƒ}| |¡ | |¡ W d   ƒ n1 sTw   Y  | j|  	¡ Ž  tj| jddd | j|  	¡ Ž  d S )NÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setrD   ÚwbFT©ÚforceÚquiet)r   ÚenvironÚgetÚunittestZSkipTestÚ
py_compileÚcompiler.   ÚassertEqualrP   r0   r/   rH   Úlenr1   ÚassertNotEqualr[   Úcompile_dirr+   rZ   )r9   Zmetadatar:   Úbcr   r   r   Úrecreation_checki   s   
ÿ
þz$CompileallTestsBase.recreation_checkc                 C   s   |   t dtjjdd¡¡ d S )NrF   r   r   )rp   rK   rL   r   r   rM   r?   r   r   r   Ú
test_mtimey   s   
ÿzCompileallTestsBase.test_mtimec                 C   s   |   d¡ d S )Ns       )rp   r?   r   r   r   Útest_magic_number~   s   z%CompileallTestsBase.test_magic_numberc                 C   s   | j | jfD ]}zt |¡ W q   Y q|  tj| jddd¡ |  tj 	| j ¡o1tj 	| j¡ ¡ t | j ¡ |  tj
| jddd¡ |  tj 	| j ¡oTtj 	| j¡¡ t | j ¡ t | j¡ |  ¡  |  tj| jddd¡ |  tj
| jddd¡ d S )NFTrc   r   )r/   r3   r   ÚunlinkrZ   r[   r\   r.   r,   Úisfilern   r+   rC   ÚassertFalserB   )r9   Úfnr   r   r   Útest_compile_files‚   s6   ÿÿÿÿÿÿz&CompileallTestsBase.test_compile_filesc                 C   s|   |   tj | j¡¡ t ¡ }|  t 	t
 | j¡¡¡ W d   ƒ n1 s%w   Y  |  | ¡ d¡ |  tj | j¡¡ d S )Nz&Compiling ([^WindowsPath|PosixPath].*))ru   r   r,   rt   r/   r   Úcaptured_stdoutrZ   r[   r\   ÚpathlibÚPathr.   ÚassertRegexÚgetvalue)r9   Ústdoutr   r   r   Útest_compile_file_pathlike›   s   
ÿz.CompileallTestsBase.test_compile_file_pathlikec                 C   óP   |   tj | j¡¡ |  tjt 	| j
¡t 	d¡dd¡ |  tj | j¡¡ d S )NZ	ddir_pathr   )Úddirre   ©ru   r   r,   rt   r/   rZ   r[   r\   ry   rz   r.   r?   r   r   r   Útest_compile_file_pathlike_ddir£   ó   þz3CompileallTestsBase.test_compile_file_pathlike_ddirc                 C   r   ©NZstripdir_pathr   )Ústripdirre   r   r?   r   r   r   Ú#test_compile_file_pathlike_stripdirª   rƒ   z7CompileallTestsBase.test_compile_file_pathlike_stripdirc                 C   r   ©NZprependdir_pathr   )Ú
prependdirre   r   r?   r   r   r   Ú%test_compile_file_pathlike_prependdir±   rƒ   z9CompileallTestsBase.test_compile_file_pathlike_prependdirc                 C   sž   t jjj| jgd |  tjdd¡ W d   ƒ n1 sw   Y  t jjj| jgd |  ¡  |  	tjdddd¡ W d   ƒ d S 1 sHw   Y  d S )N©r,   r   ©re   FT)Úskip_curdirrd   re   )
ÚtestÚtest_importlibr   Zimport_stater+   rZ   r[   Úcompile_pathrC   ru   r?   r   r   r   Útest_compile_path¸   s   ÿ

ÿ"þz%CompileallTestsBase.test_compile_pathc                 C   s|   t j | jd¡}t j |d¡}t  |¡ t|dƒ W d   ƒ n1 s$w   Y  t |¡ |  t j 	t j |d¡¡¡ d S )NrN   r:   rb   Ú__pycache__)
r   r,   r-   r+   r6   r0   r[   r\   ru   Úexists)r9   Zdata_dirZ	data_filer   r   r   Útest_no_pycache_in_non_packageÁ   s   
ÿ
 z2CompileallTestsBase.test_no_pycache_in_non_packagec                 C   sN   |   ¡  t t ¡ ¡ |  t | j¡¡ W d   ƒ d S 1 s w   Y  d S r   )	rC   rV   rW   rX   rY   ru   r[   r\   rB   r?   r   r   r   Ú#test_compile_file_encoding_fallbackÎ   s   "ÿz7CompileallTestsBase.test_compile_file_encoding_fallbackc                 C   sŠ   d\}}t j| jd|d tjj| j|d}|  tj	 
|¡¡ tjj| j|d}|  tj	 
|¡¡ tjj| j|d}|  tj	 
|¡¡ d S )NF)r   r   )r   r   T©re   Úoptimizer   )r[   rn   r+   r   r   r   r.   rZ   r   r,   rt   r2   r7   )r9   r–   r   ÚcachedZcached2Zcached3r   r   r   Útest_optimizeÕ   s   
ÿ
ÿ
ÿz!CompileallTestsBase.test_optimizec                 C   s‚   |   tj | j¡¡ t ¡ }t t	 
| j¡¡ W d   ƒ n1 s"w   Y  | ¡  ¡ d }|  |d¡ |  tj | j¡¡ d S )Nr   z$Listing ([^WindowsPath|PosixPath].*))ru   r   r,   rt   r/   r   rx   r[   rn   ry   rz   r+   r|   Ú
splitlinesr{   rZ   )r9   r}   Úliner   r   r   Útest_compile_dir_pathlikeä   s   
ÿz-CompileallTestsBase.test_compile_dir_pathlikec                 C   r   r„   ©ru   r   r,   rt   r/   rZ   r[   rn   ry   rz   r+   r?   r   r   r   Ú"test_compile_dir_pathlike_stripdirì   rƒ   z6CompileallTestsBase.test_compile_dir_pathlike_stripdirc                 C   r   r‡   rœ   r?   r   r   r   Ú$test_compile_dir_pathlike_prependdiró   rƒ   z8CompileallTestsBase.test_compile_dir_pathlike_prependdirúrequires multiprocessingz&concurrent.futures.ProcessPoolExecutorc                 C   ó"   t j| jddd |  |j¡ d S ©NTé   ©re   Úworkers©r[   rn   r+   rZ   Úcalled©r9   Ú	pool_mockr   r   r   Útest_compile_pool_calledú   ó   z,CompileallTestsBase.test_compile_pool_calledc                 C   sB   |   td¡ tj| jdd W d   ƒ d S 1 sw   Y  d S )Nz%workers must be greater or equal to 0éÿÿÿÿ)r¤   )ZassertRaisesRegexÚ
ValueErrorr[   rn   r+   r?   r   r   r   Ú!test_compile_workers_non_positive   s
   ÿ"þz5CompileallTestsBase.test_compile_workers_non_positivec                 C   s,   t j| jddd |  |jd d d ¡ d S )NTr   r£   r   Úmax_workers)r[   rn   r+   rk   Ú	call_argsr§   r   r   r   Útest_compile_workers_cpu_count  s   z2CompileallTestsBase.test_compile_workers_cpu_countzcompileall.compile_filec                 C   s,   t j| jdd |  |j¡ |  |j¡ d S )NTr‹   )r[   rn   r+   ru   r¦   rZ   )r9   Úcompile_file_mockr¨   r   r   r   Útest_compile_one_worker  s   z+CompileallTestsBase.test_compile_one_workerN©Únewc                 C   r    r¡   r¥   )r9   r±   r   r   r   Ú$test_compile_missing_multiprocessing  rª   z8CompileallTestsBase.test_compile_missing_multiprocessingc                 C   s´   d}| j }td|d ƒD ]}tj |d|› ¡}tj |d¡}t |¡ t | j|¡ qt	j
 |¡}tj| j d|d d |  tj |¡¡ tj| j d|d |  tj |¡¡ d S )Né   r   Zdir_z	script.pyT)re   Ú	maxlevels)r+   Úranger   r,   r-   r6   r4   r5   r.   r   r   r   r[   rn   ru   rt   rZ   )r9   Údepthr,   ÚiÚsourceZpyc_filenamer   r   r   Útest_compile_dir_maxlevels  s   
z.CompileallTestsBase.test_compile_dir_maxlevelsT)Úparallelc                C   s  	 ddg}| j }g }|D ]}tj ||¡}t |¡ t |dd¡ | t |dd¡¡ qtj	| j d||r6dnd	d
 |  
|¡ |D ]H}|  
| | j ¡|¡ tj |¡}|t| j tj ƒd … }	t |¡\}
}
}tj ||	¡}tjj |¡}|  |j|¡ |  d|› dt |¡¡ qAd S )Nr   ÚfooÚ__init__r   Úmodzdef fn(): 1/0
fn()
Tr   r   )re   r€   r¤   ú")r+   r   r,   r-   r6   r   Úmake_scriptÚappendr[   rn   rZ   Ú
startswithr   r   r   rl   ÚsepÚassert_python_failurer   rŽ   Zget_code_from_pycrk   Úco_filenameÚassertInÚfsdecode)r9   r€   r½   Úfullpathr,   ZmodsZsubdirrÀ   ZmodcodeÚmodpathÚ_ÚerrÚexpected_inZmod_code_objr   r   r   Ú_test_ddir_only*  s4   
ÿ
þ
øz#CompileallTestsBase._test_ddir_onlyc                 C   ó   	 | j dddS )Nú
<a prefix>F©r€   r½   ©rÏ   r?   r   r   r   Útest_ddir_only_one_workerC  ó   z-CompileallTestsBase.test_ddir_only_one_workerc                 C   rÐ   )NrÑ   TrÒ   rÓ   r?   r   r   r   Útest_ddir_multiple_workersG  rÕ   z.CompileallTestsBase.test_ddir_multiple_workersc                 C   rÐ   )Nr   FrÒ   rÓ   r?   r   r   r   Útest_ddir_empty_only_one_workerK  rÕ   z3CompileallTestsBase.test_ddir_empty_only_one_workerc                 C   rÐ   )Nr   TrÒ   rÓ   r?   r   r   r   Ú test_ddir_empty_multiple_workersO  rÕ   z4CompileallTestsBase.test_ddir_empty_multiple_workersc           
      C   sÈ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }t
j|d|d t |¡\}}}t jj|dd … Ž }	|  |	t|t ¡ d¡ |  |t|t ¡ d¡ d S )N©r   ÚbuildÚrealr,   r   ú1 / 0r   T)re   r…   r'   ©r   r,   r-   r+   Úmakedirsr   rÂ   r   r   r   r[   rn   rÆ   rÈ   ÚstrÚsysÚgetdefaultencodingÚassertNotIn)
r9   rÊ   r,   r   ro   r…   ÚrcÚoutrÍ   rÎ   r   r   r   Útest_strip_onlyS  s"   
þþz#CompileallTestsBase.test_strip_onlyc           
      C   sš   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}d}t
j|d|d t |¡\}}}t jj|| jg|¢R Ž }	|  |	t|t ¡ d¡ d S )NrÙ   r   rÜ   ú/fooT)re   rˆ   r'   )r   r,   r-   r+   rÞ   r   rÂ   r   r   r   r[   rn   rÆ   rÈ   rß   rà   rá   )
r9   rÊ   r,   r   ro   rˆ   rã   rä   rÍ   rÎ   r   r   r   Útest_prepend_onlyf  s   
þz%CompileallTestsBase.test_prepend_onlyc                 C   sÖ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }d}t
j|d||d t |¡\}}}	t jj|g|dd … ¢R Ž }
|  |
t|	t ¡ d¡ |  |t|	t ¡ d¡ d S )	NrÙ   r   rÜ   r   ræ   T)re   r…   rˆ   r'   rÝ   ©r9   rÊ   r,   r   ro   r…   rˆ   rã   rä   rÍ   rÎ   r   r   r   Útest_strip_and_prependu  s(   
ÿþþz*CompileallTestsBase.test_strip_and_prependc                 C   sz   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡ |  t¡ t	j
|ddddd W d   ƒ d S 1 s6w   Y  d S )N)r   rÚ   rÛ   r,   r€   r   rÜ   Tz/barræ   )re   r€   r…   rˆ   )r   r,   r-   r+   rÞ   r   rÂ   ÚassertRaisesr¬   r[   rn   )r9   rÊ   r,   r   r   r   Útest_strip_prepend_and_ddirŠ  s   

ÿ"ÿz/CompileallTestsBase.test_strip_prepend_and_ddirc              
   C   s²   t  | jdd¡}g }dD ]}| tjj||d¡ qddgddgddgg d¢g}|D ],}tj|d	|d
 |D ]}|  	t
j || ¡¡ z	t
 || ¡ W q6 tyU   Y q6w q*d S )NÚtest_optimizationúa = 0©r   r   r   r¶   r   r   r   r   r   Tr•   )r   rÂ   r+   rÃ   r   r   r   r[   r\   rZ   r   r,   rt   rs   Ú	Exception)r9   r   ro   Ú	opt_levelÚtest_combinationsÚopt_combinationr   r   r   Ú!test_multiple_optimization_levels“  s.   þ
ÿÿÿüýz5CompileallTestsBase.test_multiple_optimization_levelsc           
      C   sú   t j | jddd¡}t j | jddd¡}t j | jddd¡}t  |¡ t  |¡ t  |¡ t |dd¡}t |dd¡}t j |d	¡}t j |d
¡}t  ||¡ t  ||¡ tj	 
|¡}tj	 
|¡}	tj|d|d |  t j |¡¡ |  t j |	¡¡ d S )Nr   ÚdirÚallowedÚsymlinksÚ
prohibitedÚtest_allowedrí   Útest_prohibitedútest_allowed.pyútest_prohibited.pyT)re   Úlimit_sl_dest)r   r,   r-   r+   rÞ   r   rÂ   Úsymlinkr   r   r   r[   rn   rZ   rt   ru   ©
r9   Zallowed_pathZsymlinks_pathZprohibited_pathZallowed_scriptZprohibited_scriptZallowed_symlinkZprohibited_symlinkZ
allowed_bcZprohibited_bcr   r   r   Útest_ignore_symlink_destination¦  s"   


z3CompileallTestsBase.test_ignore_symlink_destination)/Ú__name__Ú
__module__Ú__qualname__r;   r@   rC   rP   r]   r`   rp   rq   rr   rw   r~   r‚   r†   r‰   r   r“   r”   r˜   r›   r   rž   r   Ú_have_multiprocessingr   Úpatchr©   r­   r°   r²   rµ   r¼   rÏ   rÔ   rÖ   r×   rØ   rå   rç   ré   rë   ró   r   Úskip_unless_symlinkrÿ   r   r   r   r   r#   5   sb    

		r#   c                   @   ó   e Zd ZdS )ÚCompileallTestsWithSourceEpochN©r   r  r  r   r   r   r   r  À  ó    r  )Ú	metaclassZsource_date_epochc                   @   r  )Ú!CompileallTestsWithoutSourceEpochNr  r   r   r   r   r  Ç  r	  r  c                   @   s&   e Zd Z	 dd„ Zdd„ Zdd„ ZdS )ÚEncodingTestc                 C   sf   t  ¡ | _tj | jd¡| _t| jddd}| d¡ | d¡ W d   ƒ d S 1 s,w   Y  d S )Nr$   r%   r&   r'   z# -*- coding: utf-8 -*-
u   print u"â‚¬"
)	r)   r*   r+   r   r,   r-   r.   r0   r1   r8   r   r   r   r;   Ò  s   

"þzEncodingTest.setUpc                 C   r<   r   r=   r?   r   r   r   r@   Ù  rA   zEncodingTest.tearDownc                 C   s<   zt j}tjt ¡ ddt _t | j¡ W |t _d S |t _w )NÚasciir'   )rà   r}   rX   ÚTextIOWrapperÚBytesIOr[   rn   r+   )r9   Zorig_stdoutr   r   r   Ú
test_errorÜ  s
   zEncodingTest.test_errorN)r   r  r  r;   r@   r  r   r   r   r   r  Î  s
    r  c                   @   s¤  e Zd Z	 dd„ Zejdd„ ƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zedd„ ƒZdd„ Zddg fdddgfdddgffD ]\ZZZeefdd„Zeeƒ de < qBd d!„ Zd"d#„ Zed$d%„ ƒZd&d'„ Zd(d)„ Zejd*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)e*e+dFƒdGdH„ ƒZ,e- .dI¡dJdK„ ƒZ/dLdM„ Z0dNdO„ Z1ejdPdQ„ ƒZ2dRdS„ Z3dTdU„ Z4dVS )WÚCommandLineTestsBasec                 C   sr   t  ¡ | _|  tj| j¡ tj | jd¡| _	t 
| j	¡ tj | j	d¡| _t | j	dd¡| _t | j	dd¡| _d S )Nr¾   r‘   r¿   r   Zbar)r)   r*   r+   Z
addCleanupr   r>   r   r,   r-   Úpkgdirr6   Úpkgdir_cachedirr   rÂ   ÚinitfnÚbarfnr?   r   r   r   r;   è  s   
zCommandLineTestsBase.setUpc                 c   sD    	 t j}tj | jd¡}z|t _| j|dœV  W |t _d S |t _w )NZ__testcache__)Ú
PYTHONPATHZPYTHONPYCACHEPREFIX)rà   Úpycache_prefixr   r,   r-   r+   )r9   Z
old_prefixÚ
new_prefixr   r   r   Útemporary_pycache_prefixò  s   €
þz-CommandLineTestsBase.temporary_pycache_prefixc                 C   s   g t  ¡ ¢d‘d‘d‘|¢S )Nz-Sú-mr[   )r   Z!optim_args_from_interpreter_flags)r9   Úargsr   r   r   Ú_get_run_args   s   
ÿÿÿþz"CommandLineTestsBase._get_run_argsc                 O   s4   t j|  |¡i |¤ddi¤Ž\}}}|  d|¡ |S )NÚPYTHONIOENCODINGr&   ó    )r   Úassert_python_okr  rk   ©r9   r  Zenv_varsrã   rä   rÍ   r   r   r   ÚassertRunOK  s   ÿÿþz CommandLineTestsBase.assertRunOKc                 O   s.   t j|  |¡i |¤ddi¤Ž\}}}|||fS )Nr  r&   )r   rÆ   r  r   r   r   r   ÚassertRunNotOK  s   ÿÿþ
z#CommandLineTestsBase.assertRunNotOKc                 C   ó"   t j |¡}|  tj |¡¡ d S r   )r   r   r   rZ   r   r,   r’   ©r9   rv   r,   r   r   r   ÚassertCompiled  ó   z#CommandLineTestsBase.assertCompiledc                 C   r#  r   )r   r   r   ru   r   r,   r’   r$  r   r   r   ÚassertNotCompiled  r&  z&CommandLineTestsBase.assertNotCompiledc                 C   sp   t  | jdd¡}|  ¡ "}| jdi |¤Ž |  |¡ |  | j¡ |  | j¡ W d   ƒ d S 1 s1w   Y  d S )NÚbazr   r   )	r   rÂ   r+   r  r!  r%  r'  r  r  )r9   ÚbazfnÚenvr   r   r   Útest_no_args_compiles_path  s   

"üz/CommandLineTestsBase.test_no_args_compiles_pathc                 C   sÎ   t  | jdd¡}|  ¡ }| jdi |¤Ž tj |¡}W d   ƒ n1 s%w   Y  t 	|t
 
¡ d fd ¡ t |¡j}| jdi |¤Ž t |¡j}|  ||¡ | jdi |¤Ž t |¡j}|  ||¡ d S )Nr(  r   é<   r   ú-fr   )r-  )r   rÂ   r+   r  r!  r   r   r   r   rS   Útimer   rJ   rk   rm   )r9   r)  r*  ÚpycpathrO   Úmtime2r   r   r   Ú test_no_args_respects_force_flag#  s   
þz5CommandLineTestsBase.test_no_args_respects_force_flagc                 C   st   t  | jdd¡ |  ¡ }| jdi |¤Ž}W d   ƒ n1 sw   Y  |  d|¡ | jdi |¤Ž}|  d|¡ d S )Nr(  r   s   Listing ú-qr   )r2  )r   rÂ   r+   r  r!  rÈ   râ   )r9   r*  Únoisyre   r   r   r   Ú test_no_args_respects_quiet_flag5  s   
ÿz5CommandLineTestsBase.test_no_args_respects_quiet_flagZnormalÚpycr–   z	opt-1.pycú-OZdoubleoptimizez	opt-2.pycz-OOc                    s~   t j|ddd| jg Ž  |  tj | j¡¡ t‡ fdd„dD ƒƒ}|  	tt 
| j¡ƒ|¡ |  ‡ fdd„t 
| j¡D ƒ¡ d S )	Nr  r[   r2  c                 3   s     | ]}|  tjjˆ ¡V  qd S r   )Úformatrà   ÚimplementationÚ	cache_tag)r   Úbase©Úextr   r   Ú	<genexpr>I  s   € ÿz)CommandLineTestsBase.f.<locals>.<genexpr>)z__init__.{}.{}z	bar.{}.{}c                    s   g | ]	}|  ˆ ¡r|‘qS r   )Úendswith)r   rv   r;  r   r   r   M  s    
ÿz*CommandLineTestsBase.f.<locals>.<listcomp>)r   r  r  rZ   r   r,   r’   r  Úsortedrk   Úlistdirru   )r9   r<  ÚswitchÚexpectedr   r;  r   ÚfD  s   ÿÿ$zCommandLineTestsBase.fZtest_pep3147_paths_c                 C   sL   |   dd| j¡ |  tj | j¡¡ tg d¢ƒ}|  tt 	| j¡ƒ|¡ d S )Nz-br2  )ú__init__.pyz__init__.pyczbar.pyzbar.pyc)
r!  r  ru   r   r,   r’   r  r?  rk   r@  )r9   rB  r   r   r   Útest_legacy_pathsQ  s   z&CommandLineTestsBase.test_legacy_pathsc                 C   s|   |   d| j¡ |  tj | j¡¡ tj | jd¡}|  tj |¡¡ |   d| j¡ |  tj | j¡¡ |  tj |¡¡ d S )Nr2  r‘   )	r!  r  rZ   r   r,   r’   r  r-   ru   )r9   Zcachecachedirr   r   r   Útest_multiple_runs[  s   z'CommandLineTestsBase.test_multiple_runsc                 C   s”   |   d| j¡ tj | j¡}t |t ¡ d fd ¡ t 	|¡j
}|   d| j¡ t 	|¡j
}|  ||¡ |   dd| j¡ t 	|¡j
}|  ||¡ d S )Nr2  r,  r   r-  )r!  r  r   r   r   r  r   rS   r.  r   rJ   rk   rm   )r9   r/  rO   r0  r   r   r   Ú
test_forceh  s   zCommandLineTestsBase.test_forcec                 C   s’   t j | jd¡}t  |¡ t |dd¡}t |dd¡}|  dd| j¡ |  |¡ |  	t j 
t j |d¡¡¡ |  d| j¡ |  |¡ |  |¡ d S )NÚspamr¿   r   Úhamr2  z-lr‘   )r   r,   r-   r  r6   r   rÂ   r!  r'  ru   r’   r%  )r9   Ú
subpackageÚ	subinitfnÚhamfnr   r   r   Útest_recursion_controlx  s   


z+CommandLineTestsBase.test_recursion_controlc           	      C   sV  t j | jd¡}t j |d¡}t j |d¡}|||fD ]}t |¡ qt j |d¡}t |dd¡}t |dd¡}t |dd¡}|  dd| j¡ |  |¡ |  	t j 
t j |d	¡¡¡ |  dd
| j¡ |  |¡ |  |¡ |  |¡ |  dd| j¡ |  |¡ |  |¡ |  |¡ |  |¡ |  dd| j¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )NrH  rI  ZeggsrD  r   Zeggr2  z-r 0r‘   z-r 1z-r 2z-r 5)r   r,   r-   r  r   Úmake_pkgrÂ   r!  r'  ru   r’   r%  )	r9   rJ  Zsubpackage2Zsubpackage3ÚpkgrK  rL  ZspamfnZeggfnr   r   r   Útest_recursion_limit„  s8   
ÿ









z)CommandLineTestsBase.test_recursion_limitc              	   C   st   t j | jd¡}t |¡ t  dt j |d¡¡ t  dt j |d¡¡ |  d| j¡ |  t j | jdddd¡¡ d S )NrH  Ú.ZevilZevil2r2  rD  )	r   r,   r-   r  r   rN  rý   r!  r%  )r9   rO  r   r   r   Útest_symlink_loop¦  s   


ÿz&CommandLineTestsBase.test_symlink_loopc                 C   s6   |   | j¡}|   d| j¡}|  d|¡ |  d|¡ d S )Nr2  r  )r!  r  rm   rk   )r9   r3  re   r   r   r   Ú
test_quiet´  s   zCommandLineTestsBase.test_quietc                 C   sT   t  | jdd¡ |  d| j¡\}}}|  d| j¡\}}}|  d|¡ |  d|¡ d S )NÚcrunchyfrogú
bad(syntaxr2  z-qqr  )r   rÂ   r  r"  rm   rk   )r9   rÌ   re   Zsilentr   r   r   Útest_silentº  s
   z CommandLineTestsBase.test_silentc                 C   s.   |   ddd| j¡ |  | j¡ |  | j¡ d S )Nr2  z-xz
ba[^\\/]*$)r!  r  r'  r  r%  r  r?   r   r   r   Útest_regexpÁ  s   z CommandLineTestsBase.test_regexpc                 C   sv   t j | jd¡}t  |¡ t |dd¡}t |dd¡}|  d| j|¡ |  	| j
¡ |  	| j¡ |  	|¡ |  	|¡ d S )NZfoo2r¿   r   Úbar2r2  )r   r,   r-   r+   r6   r   rÂ   r!  r  r%  r  r  )r9   Zpkgdir2Zinit2fnÚbar2fnr   r   r   Útest_multiple_dirsÆ  s   

z'CommandLineTestsBase.test_multiple_dirsc                 C   s8   t  | jdd¡ |  ddd| j¡\}}}|  |d¡ d S )NrT  rU  r2  ú-dÚdinsdaleó   File "dinsdale)r   rÂ   r  r"  r{   ©r9   rã   rä   rÍ   r   r   r   Útest_d_compile_errorÑ  s   z)CommandLineTestsBase.test_d_compile_errorc                 C   s„   t  | jdd¡}|  ddd| j¡ t  | jdd¡}tj |¡}t |tj	 
| jd¡¡ t |¡ t j|d	d
\}}}|  |d¡ d S )Nr(  zraise Exceptionr2  r[  r\  Úbingz
import bazzbaz.pycF)Ú
__isolatedr]  )r   rÂ   r  r!  r   r   r   r   Úrenamer,   r-   ÚremoverÆ   r{   )r9   r)  rv   r5  rã   rä   rÍ   r   r   r   Útest_d_runtime_errorÖ  s   
z)CommandLineTestsBase.test_d_runtime_errorc                 C   sZ   |   dtj | jd¡| j¡\}}}|  |d¡ |  |d¡ |  tj 	t
j | j¡¡¡ d S )Nú-iÚ
nosuchfiles   rror.*nosuchfiles	   Traceback)r"  r   r,   r-   r+   r  r{   ZassertNotRegexru   r’   r   r   r   r  r^  r   r   r   Útest_include_bad_fileà  s   
ÿÿz*CommandLineTestsBase.test_include_bad_filec                 C   sø   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}ttj | jd¡ddd	$}| tj | jd
¡tj	 ¡ | tj | jd¡tj	 ¡ W d   ƒ n1 sTw   Y  |  
dtj | jd¡|¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )NÚf1r   Úf2Úf3Úf4Úl1r%   r&   r'   úf1.pyúf2.pyre  )r   rÂ   r  r0   r   r,   r-   r+   r1   Úlinesepr!  r%  r'  ©r9   rh  ri  rj  rk  rl  r   r   r   Útest_include_file_with_argè  s   þ


z/CommandLineTestsBase.test_include_file_with_argc                 C   sÚ   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}ttj | jd¡ddd	}| tj | jd
¡tj	 ¡ W d   ƒ n1 sFw   Y  |  
dtj | jd¡¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )Nrh  r   ri  rj  rk  rl  r%   r&   r'   rn  re  )r   rÂ   r  r0   r   r,   r-   r+   r1   ro  r!  r'  r%  rp  r   r   r   Útest_include_file_no_argö  s   ÿ


z-CommandLineTestsBase.test_include_file_no_argc                 C   s¦   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}t j|  d¡ddg Ž }|j |tj  	d	¡¡ t  
|¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )
Nrh  r   ri  rj  rk  r   re  ú-r  )r   rÂ   r  Zspawn_pythonr  Ústdinr1   r   ro  ÚencodeZkill_pythonr'  r%  )r9   rh  ri  rj  rk  Úpr   r   r   Útest_include_on_stdin  s   



z*CommandLineTestsBase.test_include_on_stdinc                 C   s\   t  | jdd¡}|  d| j|| j¡\}}}|  |d¡ |  |¡ |  | j¡ |  | j¡ d S )Nr`  zsyntax(errorrf  s   rror)	r   rÂ   r  r"  r  r  r{   r'  r%  )r9   Zbingfnrã   rä   rÍ   r   r   r   Ú!test_compiles_as_much_as_possible  s   

ÿ
z6CommandLineTestsBase.test_compiles_as_much_as_possiblec                 C   s   |   d¡}|  |d¡ d S )NZbadfilenames   Can't list 'badfilename')r!  r{   )r9   rä   r   r   r   Ú!test_invalid_arg_produces_message  s   
z6CommandLineTestsBase.test_invalid_arg_produces_messagec                 C   sä   t  | jdd¡ tj tj | jd¡¡}|  	d| j¡ t
|dƒ}| ¡ }W d   ƒ n1 s/w   Y  |  t |dd… d¡d	¡ |  	d
| j¡ t
|dƒ}| ¡ }W d   ƒ n1 s]w   Y  |  t |dd… d¡d¡ d S )Nrh  r   rm  z --invalidation-mode=checked-hashrD   é   é   Úlittler¶   z"--invalidation-mode=unchecked-hashr   )r   rÂ   r  r   r   r   r   r,   r-   r!  r0   rH   rk   rI   Ú
from_bytes)r9   r5  ÚfprN   r   r   r   Útest_pyc_invalidation_mode  s   ÿ
ÿ
ÿ z/CommandLineTestsBase.test_pyc_invalidation_moderŸ   c                 C   s–   t  | jdd¡}g }tdƒD ]#}tj | jd |¡¡}t |¡ t  |dd¡}| 	t  |dd¡¡ q|  
| jdd¡ |  |¡ |D ]}|  |¡ qAd S )NrX  r   r¢   zfoo{}r¿   z-jÚ0)r   rÂ   r+   r¸   r   r,   r-   r7  r6   rÃ   r!  r%  )r9   rY  ÚfilesÚsuffixr  rv   r:   r   r   r   Útest_workers*  s   

ÿz!CommandLineTestsBase.test_workerszcompileall.compile_dirc                 C   sh   t jdtj| jdgd t ¡  |  |j¡ |  	|j
d d d¡ W d   ƒ d S 1 s-w   Y  d S )Nzsys.argvz-j0r³   r«   r¤   r   )r   r  rà   Ú
executabler+   r[   ÚmainrZ   r¦   rk   r¯   )r9   rn   r   r   r   Útest_workers_available_cores9  s   ÿ"üz1CommandLineTestsBase.test_workers_available_coresc                 C   sÖ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }d}|  
d|d||¡ t |¡\}}}	t jj|g|dd … ¢R Ž }
|  |
t|	t ¡ d¡ |  |t|	t ¡ d¡ d S )	NrÙ   r   rÜ   r   ræ   z-sz-pr'   )r   r,   r-   r+   rÞ   r   rÂ   r   r   r   r!  rÆ   rÈ   rß   rà   rá   râ   rè   r   r   r   ré   A  s$   
þþz+CommandLineTestsBase.test_strip_and_prependc              
   C   sÚ   t j | jd¡}t  |¡ t |dd¡}g }dD ]}| tj	j
||d¡ qddgddgddgg d	¢g}|D ]4}| j|gd
d„ |D ƒ¢R Ž  |D ]!}|  t j |t|ƒ ¡¡ z	t  || ¡ W qH tyi   Y qHw q6d S )NZoptimizationsrì   rí   rî   r   r€  Ú1Ú2)r€  r‡  rˆ  c                 s   s    | ]	}d t |ƒ V  qdS )z-oN)rß   )r   Únr   r   r   r=  d  s   € zICommandLineTestsBase.test_multiple_optimization_levels.<locals>.<genexpr>)r   r,   r-   r+   rÞ   r   rÂ   rÃ   r   r   r   r!  rZ   rt   rI   rs   rï   )r9   r,   r   ro   rð   rñ   rò   r   r   r   ró   U  s6   
þ
ÿýÿüþz6CommandLineTestsBase.test_multiple_optimization_levelsc           
      C   sø   t j | jddd¡}t j | jddd¡}t j | jddd¡}t  |¡ t  |¡ t  |¡ t |dd¡}t |dd¡}t j |d	¡}t j |d
¡}t  ||¡ t  ||¡ tj	 
|¡}tj	 
|¡}	|  |d|¡ |  t j |¡¡ |  t j |	¡¡ d S )Nr   rô   rõ   rö   r÷   rø   rí   rù   rú   rû   z-e)r   r,   r-   r+   rÞ   r   rÂ   rý   r   r   r   r!  rZ   rt   ru   rþ   r   r   r   rÿ   l  s"   


z4CommandLineTestsBase.test_ignore_symlink_destinationc                 C   s   |   | jdd¡ d S )Nú-o 1ú--hardlink-dupes)r"  r+   r?   r   r   r   Útest_hardlink_bad_args…  s   z+CommandLineTestsBase.test_hardlink_bad_argsc              
   C   sî   dD ]r}t  ¡ d}| j|dN t |dd¡}t|ƒ}g d¢}|r&| d¡ | j|g|¢R Ž  |  t	|d |d ƒ|¡ |  t	|d |d	 ƒ|¡ |  t	|d |d	 ƒ|¡ W d   ƒ n1 s`w   Y  W d   ƒ n1 sow   Y  qd S )
N)TF©Údedupr   rí   )r2  z-o 0rŠ  z-o 2r‹  r   r   r   )
r)   ÚTemporaryDirectoryÚsubTestr   rÂ   r   rÃ   r!  rk   r"   )r9   rŽ  r,   r   Úpycsr  r   r   r   Útest_hardlinkŠ  s"   

õ€ÿ€ÿz"CommandLineTestsBase.test_hardlinkN)5r   r  r  r;   rV   Úcontextmanagerr  r  r!  r"  r%  r'  r+  r	   r1  r4  Únamer<  rA  rC  ÚlocalsrE  rF  rG  rM  rP  r   r  rR  rS  rV  rW  rZ  r_  rd  rg  rq  rr  rw  rx  ry  r  r   r  rƒ  r   r  r†  ré   ró   rÿ   rŒ  r’  r   r   r   r   r  å  sf    

	


ý

"

	


r  c                   @   r  )ÚCommandLineTestsWithSourceEpochNr  r   r   r   r   r–     r	  r–  c                   @   r  )ÚCommandLineTestsNoSourceEpochNr  r   r   r   r   r—  §  r	  r—  c                   @   s’   e Zd Zdd„ Zejdd„ ƒZd#dd„Zdd	d
dœdd„Zdd„ Z	d$dd„Z
dd„ Zdd„ Zd$dd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )%ÚHardlinkDedupTestsBasec                 C   s
   d | _ d S r   rŠ   r?   r   r   r   r;   ²  s   
zHardlinkDedupTestsBase.setUpc                 c   sB    t  ¡ }|| _|V  d | _W d   ƒ d S 1 sw   Y  d S r   )r)   r  r,   )r9   r,   r   r   r   Útemporary_directoryµ  s   €
"ýz*HardlinkDedupTestsBase.temporary_directoryr   c                 C   s   t  | j||¡S r   )r   rÂ   r,   )r9   Úcoder”  r   r   r   rÂ   ¼  rA   z"HardlinkDedupTestsBase.make_scriptTr   F)rŽ  r–   rd   c                C   s   t j| jd|||d d S )NT)re   r–   Úhardlink_dupesrd   )r[   rn   r,   )r9   rŽ  r–   rd   r   r   r   rn   ¿  s   
ÿz"HardlinkDedupTestsBase.compile_dirc              	   C   sÈ   |   ¡ V |  d¡ |  t¡ tj| jdddd W d   ƒ n1 s$w   Y  |  t¡ tj| jdddgdd W d   ƒ n1 sEw   Y  W d   ƒ d S W d   ƒ d S 1 s]w   Y  d S )NÚpassTr   )re   r–   r›  )r™  rÂ   rê   r¬   r[   rn   r,   r?   r   r   r   Útest_bad_argsÃ  s   

ÿÿÿýû"ûz$HardlinkDedupTestsBase.test_bad_argsc                 C   s4   g }|r	|  d¡ |  d¡ |r|  d¡ d |¡S )Nz'module docstring'zx = 1zassert x == 1Ú
)rÃ   r-   )r9   Ú	docstringÚ	assertionÚlinesr   r   r   Úcreate_codeÑ  s   



z"HardlinkDedupTestsBase.create_codec                 c   s4    dD ]}dD ]}| j ||d}|||fV  qqd S )N)FT©rŸ  r   )r¢  )r9   rŸ  r   rš  r   r   r   Ú
iter_codesÚ  s   €þÿz!HardlinkDedupTestsBase.iter_codesc              
   C   sÔ   |   ¡ D ]c\}}}| j||dO |  ¡ ; |  |¡}t|ƒ}| jdd |  t|d |d ƒ¡ |  t|d |d ƒ¡ |  t|d |d ƒ¡ W d   ƒ n1 sSw   Y  W d   ƒ n1 sbw   Y  qd S )Nr£  Fr  r   r   r   )r¤  r  r™  rÂ   r   rn   ru   r"   )r9   rš  rŸ  r   r   r‘  r   r   r   Útest_disabledà  s   

ú€ÿ€ÿz$HardlinkDedupTestsBase.test_disabledc                 C   sf   t |ƒ}|  t|d |d ƒ| ¡ |  t|d |d ƒ| o!| ¡ |  t|d |d ƒ| ¡ d S )Nr   r   r   )r   rk   r"   )r9   r   rŸ  r   r‘  r   r   r   Úcheck_hardlinksì  s   ÿ
ÿÿz&HardlinkDedupTestsBase.check_hardlinksc              
   C   sŽ   |   ¡ D ]@\}}}| j||d, |  ¡  |  |¡}|  ¡  |  |||¡ W d   ƒ n1 s0w   Y  W d   ƒ n1 s?w   Y  qd S )Nr£  )r¤  r  r™  rÂ   rn   r¦  )r9   rš  rŸ  r   r   r   r   r   r’  õ  s   

ý€ÿ€ÿz$HardlinkDedupTestsBase.test_hardlinkc              
   C   s¨   dD ]O}| j |d? |  ¡ + |  |  ¡ ¡}| j|d t||d ƒ}t||d ƒ}|  t||ƒ¡ W d   ƒ n1 s=w   Y  W d   ƒ n1 sLw   Y  qd S )N))r   r   )r   r   )r   r   )Úopts©r–   r   r   )r  r™  rÂ   r¢  rn   r   rZ   r"   )r9   r§  r   Úpyc1Úpyc2r   r   r   Útest_only_two_levelsþ  s   
ù€ÿ€ÿz+HardlinkDedupTestsBase.test_only_two_levelsc                 C   sp   |   ¡ * |  |  ¡ ¡}| jg d¢d t|dƒ}t|dƒ}|  t||ƒ¡ W d   ƒ d S 1 s1w   Y  d S )N)r   r   r   r   r¨  r   r   )r™  rÂ   r¢  rn   r   rZ   r"   )r9   r   r©  rª  r   r   r   Útest_duplicated_levels  s   


"ùz-HardlinkDedupTestsBase.test_duplicated_levelsc                 C   sä   |   ¡ d |  d¡}|  ¡  |  |¡ t|ƒ}t |d ¡j}|  d¡}| jddgdd |  |t |d ¡j¡ |  	t
|d |d ƒ¡ |  |t |d ¡j¡ |  tj|d |d dd¡ W d   ƒ d S 1 skw   Y  d S )	Nrí   r   úprint(0)r   T)r–   rd   r   ©Úshallow)r™  rÂ   rn   r¦  r   r   r   r    rk   rZ   r"   rm   ru   ÚfilecmpÚcmp©r9   r   r‘  Úinoder   r   r   Útest_recompilation  s   



 "ìz)HardlinkDedupTestsBase.test_recompilationc                 C   sô   |   ¡ l | j|  ¡ dd}|  ¡  |  |¡ t|ƒ}t |d ¡j}| jddd}t	j
dddd| jd	 |  |t |d ¡j¡ |  |t |d
 ¡j¡ |  t|d |d
 ƒ¡ |  tj|d |d
 dd¡ W d   ƒ d S 1 ssw   Y  d S )NÚmodule)r”  r   r­  r6  z-czimport moduleF)ra  r  r   r   Tr®  )r™  rÂ   r¢  rn   r¦  r   r   r   r    r   r  r,   rk   ru   r"   r°  r±  r²  r   r   r   Útest_import0  s   

ÿ "êz"HardlinkDedupTestsBase.test_importNr   )FF)r   r  r  r;   rV   r“  r™  rÂ   rn   r  r¢  r¤  r¥  r¦  r’  r«  r¬  r´  r¶  r   r   r   r   r˜  ¯  s     


	
		r˜  c                   @   r  )Ú!HardlinkDedupTestsWithSourceEpochNr  r   r   r   r   r·  L  r	  r·  c                   @   r  )ÚHardlinkDedupTestsNoSourceEpochNr  r   r   r   r   r¸  S  r	  r¸  Ú__main__)0r[   rV   r°  Úimportlib.utilr   rX   r   ry   ri   r4   rK   rà   r)   Ztest.test_importlib.utilr   r.  rh   r   r   Úconcurrent.futuresr   Úconcurrent.futures.processr   r  ÚNotImplementedErrorr   Ztest.supportr   r   Ztest.test_py_compiler	   r
   r   r   r"   r#   ZTestCaser  r  r  r  r–  r—  r˜  r·  r¸  r   r…  r   r   r   r   Ú<module>   s˜    ÿ   ýý   >ýý ýý
ÿ