o
    HXîh­œ  ã                   @   s^  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 d dlmZm	Z	m
Z
 d dlmZ d dlmZ zd dlZW n eyA   dZY nw e d¡ZdZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZ e !edu d ¡G d!d"„ d"ejƒƒZ"e#d#kr­e $¡  dS dS )$é    N)Úpatch)Úassert_python_okÚassert_python_failureÚ interpreter_requires_environment)Úsupport)Ú	os_helperó    )éÿÿÿÿi   @c                 C   s`   g }t  d¡}t| ƒD ] }|j}|j| }| |j|f¡ d}|j}|d u r+ t|ƒS qt|ƒS )Né   r   )	ÚsysÚ	_getframeÚrangeÚf_codeÚf_linenoÚappendÚco_filenameÚf_backÚtuple)ÚnframeZlineno_deltaÚframesÚframeÚindexÚcodeÚlineno© r   ú?/opt/python-3.10.19/usr/lib/python3.10/test/test_tracemalloc.pyÚ
get_frames   s   

þr   c                 C   s<   t  ¡ }| t }t|dƒ}d| }|t  |tt|ƒ|ƒ¡fS )Nr
   ó   x)ÚtracemallocÚget_traceback_limitÚEMPTY_STRING_SIZEr   Ú	TracebackÚminÚlen)Úsizer   Z	bytes_lenr   Údatar   r   r   Úallocate_bytes#   s
   
r&   c                  C   s4   d} g d¢}t  || ¡}g d¢}t  || ¡}||fS )Né   )©r   é
   )©úa.pyr'   ©úb.pyé   é   r(   r(   ©r
   r'   ©©r+   é   r,   r/   ©r'   éB   )©r-   r
   r
   ©r/   é   ©©ú	<unknown>r   r
   )r(   r(   r(   )r'   r'   r1   r/   )r'   éˆ  r1   r/   )r.   é  )©úc.pyéB  r
   )r   ÚSnapshot)Útraceback_limitÚ
raw_tracesÚsnapshotZraw_traces2Ú	snapshot2r   r   r   Úcreate_snapshots*   s   
rF   c                 C   s   t  | |f¡S ©N)r   Z_Frame©Úfilenamer   r   r   r   r   K   ó   r   c                  G   s
   t  | ¡S rG   )r   r!   )r   r   r   r   Ú	tracebackN   ó   
rK   c                 C   s   t | |fƒS rG   )rK   rH   r   r   r   Útraceback_linenoQ   ó   rM   c                 C   s
   t | dƒS ©Nr   )rM   )rI   r   r   r   Útraceback_filenameT   rL   rP   c                   @   s   e Zd Zdd„ ZdS )ÚTestTracebackc                 C   sn   dt fdd„}|  |dƒd¡ |  |ddƒd¡ d}d	}|  ||ƒd
|› d¡ |  ||dƒd
|› d¡ d S )NÚreturnc                  W   s   t tj| Ž ƒS rG   )Úreprr   r!   )Úargsr   r   r   Úget_reprZ   rJ   z)TestTraceback.test_repr.<locals>.get_reprr   z<Traceback ()>r   z<Traceback () total_nframe=0>))Úf1r
   )Úf2r'   z@(<Frame filename='f2' lineno=2>, <Frame filename='f1' lineno=1>)z<Traceback ú>r'   z total_nframe=2>)ÚstrÚassertEqual)ÚselfrU   r   Zexp_repr_framesr   r   r   Ú	test_reprY   s   ÿ

ÿ
ÿzTestTraceback.test_reprN)Ú__name__Ú
__module__Ú__qualname__r\   r   r   r   r   rQ   X   s    rQ   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e eed!ƒd"¡d#d$„ ƒZd%S )&ÚTestTracemallocEnabledc                 C   s    t  ¡ r	|  d¡ t  d¡ d S )Nú+tracemalloc must be stopped before the testr
   )r   Ú
is_tracingÚskipTestÚstart©r[   r   r   r   ÚsetUpl   s   
zTestTracemallocEnabled.setUpc                 C   ó   t  ¡  d S rG   ©r   Ústopre   r   r   r   ÚtearDownr   rN   zTestTracemallocEnabled.tearDownc                 C   sR   dd„ t dƒD ƒ}t ¡ }|  |d¡ t ¡  t ¡ }|  |d¡ |  ||¡ d S )Nc                 S   s   g | ]}t d ƒ‘qS )é{   ©r&   )Ú.0Úcountr   r   r   Ú
<listcomp>v   s    zFTestTracemallocEnabled.test_get_tracemalloc_memory.<locals>.<listcomp>iè  r   )r   r   Zget_tracemalloc_memoryÚassertGreaterEqualÚclear_tracesÚassertLessEqual)r[   r%   r$   Úsize2r   r   r   Útest_get_tracemalloc_memoryu   s   z2TestTracemallocEnabled.test_get_tracemalloc_memoryc                 C   s2   t  ¡  d}t|ƒ\}}t  |¡}|  ||¡ d S ©Né90  )r   rq   r&   Úget_object_tracebackrZ   ©r[   Úobj_sizeÚobjÚobj_tracebackrK   r   r   r   Útest_get_object_traceback   s
   
z0TestTracemallocEnabled.test_get_object_tracebackc                 C   sh   t  ¡  t ¡  g }d }g }t  ¡ }t|dƒ}t  |tt|ƒ|ƒ¡}t  	|¡}|  
|¡ |  ||¡ d S )Néýÿÿÿ)r   rq   r   Ú
gc_collectr   r   r!   r"   r#   rw   ÚassertIsNotNonerZ   )r[   rz   r   r   r{   rK   r   r   r   Útest_new_reference†   s   


z)TestTracemallocEnabled.test_new_referencec                 C   s¨   d}t  ¡  |  tt jd¡ t  ¡  t  d¡ t|ƒ\}}t  |¡}|  t|ƒd¡ |  ||¡ t  ¡  t  d¡ t|ƒ\}}t  |¡}|  t|ƒd¡ |  ||¡ d S )Nr)   r	   r
   )	r   ri   ÚassertRaisesÚ
ValueErrorrd   r&   rw   rZ   r#   )r[   ry   Úobj2Úobj2_tracebackrK   rz   r{   r   r   r   Útest_set_traceback_limitš   s   



z/TestTracemallocEnabled.test_set_traceback_limitc                 C   s.   |D ]}|d |j kr|  S q|  d¡ d S )Nr'   ztrace not found)Ú_framesÚfail)r[   ÚtracesrK   Útracer   r   r   Ú
find_trace®   s
   ÿz!TestTracemallocEnabled.find_tracec           
      C   sz   t  ¡  d}t|ƒ\}}t  ¡ }|  ||¡}|  |t¡ |\}}}}	|  ||¡ |  ||j¡ t  	¡  |  t  ¡ g ¡ d S ru   )
r   rq   r&   Ú_get_tracesrŠ   ZassertIsInstancer   rZ   r†   ri   )
r[   ry   rz   r{   rˆ   r‰   Údomainr$   rK   Úlengthr   r   r   Útest_get_tracesµ   s   z&TestTracemallocEnabled.test_get_tracesc                    s¶   dd„ ‰ ‡ fdd„‰‡fdd„}t  ¡  t  d¡ d}||ƒ\}}||ƒ\}}t  ¡ }tt|jƒƒ|_tt|jƒƒ|_|  ||¡}|  ||¡}	|\}
}}}|	\}}}}|  ||¡ d S )	Nc                 S   s   t | ƒS rG   rl   ©r$   r   r   r   Úallocate_bytes2Ç   ó   zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes2c                    ó   ˆ | ƒS rG   r   r   )r   r   r   Úallocate_bytes3É   r‘   zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes3c                    r’   rG   r   r   )r“   r   r   Úallocate_bytes4Ë   r‘   zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes4r.   rk   )	r   ri   rd   r‹   r   Úreversedr†   rŠ   ZassertIs)r[   r”   ry   Zobj1Zobj1_tracebackrƒ   r„   rˆ   Ztrace1Ztrace2Zdomain1Úsize1Z
traceback1Zlength1Zdomain2rs   Ú
traceback2Zlength2r   )r   r“   r   Ú test_get_traces_intern_tracebackÅ   s    
z7TestTracemallocEnabled.test_get_traces_intern_tracebackc           	      C   sô   d}d}t  ¡  t|ƒ\}}t  ¡ \}}|  ||¡ |  ||¡ |  || |¡ |  || |¡ d }t  ¡ \}}|  ||¡ |  || || ¡ |  ||¡ t  ¡  |  t  ¡ d¡ t|ƒ\}}t  ¡ \}}|  ||¡ t  ¡  |  t  ¡ d¡ d S )Né   é   )r   r   )	r   rq   r&   Úget_traced_memoryrp   rr   Ú
assertLessrZ   ri   )	r[   Z	max_errorry   rz   r{   r$   Z	peak_sizers   Z
peak_size2r   r   r   Útest_get_traced_memoryà   s*   z-TestTracemallocEnabled.test_get_traced_memoryc                 C   s@   t dƒ\}}t |¡}|  |¡ t ¡  t |¡}|  |¡ d S )Nrk   )r&   r   rw   r   rq   ÚassertIsNone)r[   rz   r{   rK   r—   r   r   r   Útest_clear_traces  s   


z(TestTracemallocEnabled.test_clear_tracesc                 C   s˜   t  ¡  tttdƒƒƒ}t  ¡ \}}t  ¡  t  ¡ \}}|  ||¡ |  ||¡ d}t	|ƒ\}}t  ¡ \}	}
|  |
|	¡ |  
|
|¡ |  |
| |¡ d S )Ni † rš   )r   rq   ÚsumÚlistr   r›   Z
reset_peakrp   rœ   r&   ÚassertGreater)r[   Z	large_sumr–   Zpeak1rs   Zpeak2ry   rz   r{   Zsize3Zpeak3r   r   r   Útest_reset_peak  s   z&TestTracemallocEnabled.test_reset_peakc                 C   s0   t  ¡  |  t  ¡ ¡ t  ¡  |  t  ¡ ¡ d S rG   )r   ri   ÚassertFalserb   rd   Ú
assertTruere   r   r   r   Útest_is_tracing%  s   z&TestTracemallocEnabled.test_is_tracingc                 C   s´   t dƒ\}}t ¡ }|  |jd jjd¡ | tj	¡ |  
tjtj	¡ tj tj	¡}|  |j|j¡ t ¡  |  t¡}t ¡  W d   ƒ n1 sJw   Y  |  t|jƒd¡ d S )Nrk   r
   r)   zLthe tracemalloc module must be tracing memory allocations to take a snapshot)r&   r   Útake_snapshotr¢   rˆ   rK   Útotal_nframeÚdumpr   ÚTESTFNÚ
addCleanupÚunlinkrA   ÚloadrZ   ri   r   ÚRuntimeErrorrY   Ú	exception)r[   rz   ÚsourcerD   rE   Úcmr   r   r   Útest_snapshot,  s   
ÿÿz$TestTracemallocEnabled.test_snapshotc                 C   sJ   t  ¡ }d|_| tj¡ |  tjtj¡ t j 	tj¡}|  
|jd¡ d S )NÚnew)r   r§   Z	test_attrr©   r   rª   r«   r¬   rA   r­   rZ   )r[   rD   rE   r   r   r   Útest_snapshot_save_attrE  s   z.TestTracemallocEnabled.test_snapshot_save_attrc                 C   s6   t  ¡ sdS d}t|ƒ\}}t  |¡}|d u rdS dS )Nr'   rv   r/   r   )r   rb   r&   rw   rx   r   r   r   Ú
fork_childP  s   
z!TestTracemallocEnabled.fork_childÚforkzneed os.fork()c              	   C   sH   t  ¡ }|sd}z|  ¡ }W t  |¡ d S t  |¡ w tj|dd d S )Nr
   r   )Úexitcode)Úosr¶   rµ   Ú_exitr   Zwait_process)r[   Úpidr·   r   r   r   Ú	test_fork]  s   
z TestTracemallocEnabled.test_forkN)r]   r^   r_   rf   rj   rt   r|   r€   r…   rŠ   rŽ   r˜   r   rŸ   r£   r¦   r²   r´   rµ   ÚunittestZ
skipUnlessÚhasattrr¸   r»   r   r   r   r   r`   k   s&    
$	r`   c                   @   sx   e Zd 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S )ÚTestSnapshoti   c                 C   s   dg}t  ¡ o}| tjtddd¡ | tjtddd¡ | tjtd|d¡ t ¡ }|  |jd¡ |  t	|j
ƒd¡ |j
d	 }|  |jd¡ |  |jjd
¡ |  t	|jƒd¡ |  |jd	 jd¡ |  |jd	 jd¡ W d   ƒ d S 1 syw   Y  d S )N)r   r3   )r*   r)   rb   T)Zreturn_valuer   r3   r‹   r
   r   r)   r+   r'   )Ú
contextlibÚ	ExitStackÚenter_contextr   Úobjectr   r§   rZ   rB   r#   rˆ   r$   rK   r¨   rI   r   )r[   rC   ÚstackrD   r‰   r   r   r   Útest_create_snapshoto  s*   
ÿÿÿ
"ðz!TestSnapshot.test_create_snapshotc           
      C   sÚ   t ƒ \}}t dd¡}t ddd¡}t ddd¡}t|jjƒ}| |f¡}|  |jjg d¢¡ |  |jj|¡ | ||f¡}|  |jjg d¢¡ | d	¡}	|  |	|¡ |  |	j|j¡ |  |	j|j¡ |  	t
|j|¡ d S )
NFr-   Tr+   r'   r3   )r(   r(   r(   r0   r7   )r(   r(   r(   r0   r   )rF   r   ÚFilterr¡   rˆ   Ú_tracesÚfilter_tracesrZ   ZassertIsNotr   Ú	TypeError)
r[   rD   rE   Úfilter1Úfilter2Zfilter3Úoriginal_tracesÚ	snapshot3Z	snapshot4Z	snapshot5r   r   r   Útest_filter_traces„  s   
	
zTestSnapshot.test_filter_tracesc                 C   sz   t ƒ \}}tjdddd}tjdddd}t|jjƒ}| |f¡}|  |jjg d¢¡ | |f¡}|  |jjg d¢¡ d S )NFr+   r
   ©rŒ   T)r(   r(   r(   r4   r7   )rF   r   rÅ   r¡   rˆ   rÆ   rÇ   rZ   )r[   rD   rE   rÉ   rÊ   rË   rÌ   r   r   r   Útest_filter_traces_domainª  s   
	z&TestSnapshot.test_filter_traces_domainc                 C   sh   t ƒ \}}tjddd}tjddd}| |f¡}|  |jjg d¢¡ | |f¡}|  |jjdg¡ d S )NFr/   rÎ   T)r(   r(   r(   r0   r4   r7   )rF   r   ÚDomainFilterrÇ   rZ   rˆ   rÆ   )r[   rD   rE   rÉ   rÊ   rÌ   r   r   r   Ú test_filter_traces_domain_filterÅ  s   
	

ÿz-TestSnapshot.test_filter_traces_domain_filterc                 C   s(  t ƒ \}}tddƒ}tddƒ}tddƒ}tddƒ}tdd	ƒ}| d
¡}|  |t |dd¡t |dd¡t |dd¡t |dd¡g¡ | d
¡}	|  |	t |dd¡t |dd¡t |dd¡g¡ | |d
¡}
|  |
t |dddd¡t |dddd¡t |dddd¡t |dddd¡t |dddd¡g¡ d S )Nr;   r   r+   r'   r3   r-   r
   r?   r@   r   r5   é   r/   r8   éŠ  r=   r<   é¾ÿÿÿr	   éùÿÿÿ)rF   rM   Ú
statisticsrZ   r   Ú	StatisticÚ
compare_toÚStatisticDiff)r[   rD   rE   Útb_0Útb_a_2Útb_a_5Útb_b_1Ztb_c_578Ústats1Ústats2rÖ   r   r   r   Útest_snapshot_group_by_lineÚ  s6   






ü
ý
ûz(TestSnapshot.test_snapshot_group_by_linec           
      C   sî   t ƒ \}}tdƒ}tdƒ}tdƒ}tdƒ}| d¡}|  |t |dd¡t |dd	¡t |d
d¡g¡ | d¡}|  |t |dd¡t |dd¡g¡ | |d¡}	|  |	t |dddd¡t |dddd¡t |dddd¡t |dddd¡g¡ d S )Nr;   r+   r-   r?   rI   r5   r
   é    r.   r8   i¨  r3   r=   r<   r   rÔ   r	   rÕ   )rF   rP   rÖ   rZ   r   r×   rØ   rÙ   )
r[   rD   rE   rÚ   Útb_aÚtb_bZtb_crÞ   rß   Údiffr   r   r   Útest_snapshot_group_by_fileý  s.   

ý
þ
üz(TestSnapshot.test_snapshot_group_by_filec                 C   s6  t ƒ \}}tddƒ}tddƒ}tdƒ}tdƒ}| d¡}|  |t |dd¡t |d	d
¡t |dd¡t |dd¡g¡ tdƒ}| d¡}	|  |	t |dd¡t |dd¡t |d	d
¡g¡ | |d¡}
|  |
t |dddd¡t |dddd¡t |dddd¡t |dddd¡t |d	dd
d¡g¡ | jt	|jddd d S )Nr*   r,   r2   r6   r:   rK   r5   r
   rÒ   r/   r8   r'   r>   rÓ   r=   r<   r   rÔ   r	   rÕ   T)Z
cumulative)
rF   rK   rÖ   rZ   r   r×   rØ   rÙ   r   r‚   )r[   rD   rE   Ztb1Ztb2Ztb3Ztb4rÞ   Ztb5rß   rä   r   r   r   Ú test_snapshot_group_by_traceback  s<   



ü
ýû
ÿz-TestSnapshot.test_snapshot_group_by_tracebackc                 C   sÞ   t ƒ \}}tdƒ}tdƒ}tdƒ}tddƒ}tddƒ}tddƒ}tddƒ}	| dd	¡}
|  |
t |d
d¡t |dd¡t |dd¡g¡ | dd	¡}
|  |
t |dd¡t |	dd¡t |dd¡t |dd¡t |dd¡g¡ d S )Nr;   r+   r-   r'   r3   r
   r.   rI   Téb   rá   r8   r   r5   rÒ   r/   )rF   rP   rM   rÖ   rZ   r   r×   )r[   rD   rE   rÚ   râ   rã   rÛ   rÜ   rÝ   Ztb_b_4Ústatsr   r   r   Ú!test_snapshot_group_by_cumulativeB  s,   




ý
ûz.TestSnapshot.test_snapshot_group_by_cumulativec                 C   sV   t ƒ \}}|jd }|  t|ƒd¡ |j}|  t|ƒd¡ |d }|  t|ƒd¡ d S )Nr   zb.py:4: 10 Bzb.py:4)rF   rˆ   rZ   rY   rK   )r[   rD   rE   r‰   rK   r   r   r   r   Útest_trace_format^  s   

zTestSnapshot.test_trace_formatc                 C   s0   t ƒ \}}| d¡}|d }|  t|ƒd¡ d S )Nr   r   z(b.py:1: size=66 B, count=1, average=66 B)rF   rÖ   rZ   rY   ©r[   rD   rE   rè   Ústatr   r   r   Útest_statistic_formatg  s   


ÿz"TestSnapshot.test_statistic_formatc                 C   s2   t ƒ \}}| |d¡}|d }|  t|ƒd¡ d S )Nr   r   z;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rF   rØ   rZ   rY   rë   r   r   r   Útest_statistic_diff_formatn  s   

ÿz'TestSnapshot.test_statistic_diff_formatc                 C   s`   t ƒ \}}|  |jd d… |jd |jd f¡ |jd j}|  |d d… |d |d f¡ d S )Nr'   r   r
   )rF   rZ   rˆ   rK   )r[   rD   rE   rK   r   r   r   Útest_slicesu  s   
ÿÿzTestSnapshot.test_slicesc                 C   sä   t ƒ \}}dd„ }tjjd|dW |jd j}|  | ¡ g d¢¡ |  |jddd	d
g¡ |  |jddddg¡ |  |jddg d¢¡ |  |jdddd	d
g¡ |  |jdddddg¡ W d   ƒ d S 1 skw   Y  d S )Nc                 S   s   d| |f S )Nz
  <%s, %s>r   rH   r   r   r   Úgetline€  rN   z3TestSnapshot.test_format_traceback.<locals>.getlineztracemalloc.linecache.getline)Zside_effectr   )ú  File "b.py", line 4ú    <b.py, 4>ú  File "a.py", line 2ú    <a.py, 2>r
   )Úlimitró   rô   r	   rñ   rò   T)Úmost_recent_first)ró   rô   rñ   rò   )rõ   rö   )rF   r¼   Zmockr   rˆ   rK   rZ   Úformat)r[   rD   rE   rð   Útbr   r   r   Útest_format_traceback~  sB   
ÿ
ÿÿÿÿÿÿÿÿÿÿ"åz"TestSnapshot.test_format_tracebackN)r]   r^   r_   ÚmaxDiffrÄ   rÍ   rÏ   rÑ   rà   rå   ræ   ré   rê   rí   rî   rï   rù   r   r   r   r   r¾   l  s    &#&		r¾   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestFiltersr™   c                 C   sê   t  dd¡}|  |jd¡ |  |jd¡ |  |j¡ |  |jd¡ t  dddd¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ t jddddd}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t	t
|dd¡ d S )NTÚabcFztest.pyrk   )Ú	inclusiveÚfilename_patternr   Ú
all_framesrþ   )r   rÅ   rZ   rý   rþ   rž   r   rÿ   r   ÚAttributeErrorÚsetattr©r[   Úfr   r   r   Útest_filter_attributes¥  s    z"TestFilters.test_filter_attributesc                 C   sÜ  t  dd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ t  dd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ t  ddd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ t  ddd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ t  ddd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ t  ddd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ d S )NTrü   r   r3   r)   Ú12356F)r   rÅ   r¥   Ú_match_framer¤   r  r   r   r   Útest_filter_match¾  sT   zTestFilters.test_filter_matchc                 C   sx   dd„ }|   |dddƒ¡ |  |dddƒ¡ |  |dddƒ¡ |  |dddƒ¡ |   |dddƒ¡ |   |dddƒ¡ d S )Nc                 S   s   t  | |¡}| |d¡S rO   ©r   rÅ   r  )rý   rI   Úpatternr  r   r   r   Úfnmatchó  ó   z7TestFilters.test_filter_match_filename.<locals>.fnmatchTrü   r  r;   F)r¥   r¤   ©r[   r
  r   r   r   Útest_filter_match_filenameò  s   z&TestFilters.test_filter_match_filenamec                 C   s†  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ƒ¡ |  |ddƒ¡ tjdkrÒ|  |ddƒ¡ |  |ddƒ¡ |  |ddƒ¡ |  |ddƒ¡ n |   |ddƒ¡ |   |ddƒ¡ |   |ddƒ¡ |   |ddƒ¡ tjdkr|  |d d!ƒ¡ |  |d!d ƒ¡ |  |d"d#ƒ¡ |  |d$d%ƒ¡ n |   |d d!ƒ¡ |   |d!d ƒ¡ |   |d"d#ƒ¡ |   |d$d%ƒ¡ |   |d&dƒ¡ d S )'Nc                 S   s   t  d|¡}| | d¡S )NTr   r  )rI   r	  Úfilterr   r   r   r
     r  z=TestFilters.test_filter_match_filename_joker.<locals>.fnmatchrü   Ú Ú*ZabcdÚdefza*zabc*zb*zabcd*za*cZabcdcxza*cxZabbZabcdceZabcdeza*c*eZ	abcbdefegza*bd*egZabcddZ	abcbdefefza.pycr+   ÚntZaBCZABcZaBcDezAb*dEza.PYza.PYCza/bza\bza/b\cza\b/cza/b/cza\b\cza.pyo)r¤   r¥   r¸   Únamer  r   r   r   Ú test_filter_match_filename_jokerÿ  sR   
z,TestFilters.test_filter_match_filename_jokerc                 C   sD  d}d}d}d}t jdddd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdddd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdddd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdddd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdd	dd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdd	dd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ t jdd	dd}|  | |¡¡ |  | |¡¡ |  | |¡¡ |  | |¡¡ d S )
N)r*   )r-   r/   )r,   )r-   r3   ))r?   r3   r:   r9   Tr-   )rÿ   Fr;   )r   rÅ   r¥   Z_match_tracebackr¤   )r[   Út1Út2Zt3Úunknownr  r   r   r   Útest_filter_match_traceD  sN   z#TestFilters.test_filter_match_traceN)	r]   r^   r_   rú   r  r  r  r  r  r   r   r   r   rû   ¢  s    4Erû   c                   @   s‚   e Zd Zdd„ Ze eƒ d¡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u d¡dd„ ƒZdS )ÚTestCommandLinec                 C   s,   d}t d|ƒ\}}}| ¡ }|  |d¡ d S )Nú3import tracemalloc; print(tracemalloc.is_tracing())ú-có   False©r   ÚrstriprZ   ©r[   r   ÚokÚstdoutÚstderrr   r   r   Ú test_env_var_disabled_by_defaultv  s   z0TestCommandLine.test_env_var_disabled_by_defaultz6Cannot run -E tests when PYTHON env vars are required.c                 C   s2   d}t dd|dd\}}}| ¡ }|  |d¡ dS )zAPYTHON* environment variables must be ignored when -E is present.r  z-Er  Ú1©ZPYTHONTRACEMALLOCr  Nr  r  r   r   r   Útest_env_var_ignored_with_E}  s   z+TestCommandLine.test_env_var_ignored_with_Ec                 C   ó0   d}t d|dd\}}}| ¡ }|  |d¡ d S )Nr  r  Ú0r%  r  r  r  r   r   r   Útest_env_var_disabled†  ó   z%TestCommandLine.test_env_var_disabledc                 C   r'  )Nr  r  r$  r%  s   Truer  r  r   r   r   Útest_env_var_enabled_at_startup  r*  z/TestCommandLine.test_env_var_enabled_at_startupc                 C   r'  )Nú<import tracemalloc; print(tracemalloc.get_traceback_limit())r  Z10r%  s   10r  r  r   r   r   Útest_env_limit”  r*  zTestCommandLine.test_env_limitc                 C   sl   t  ¡  tddt|ƒd\}}}W d   ƒ n1 sw   Y  d|v r&d S d|v r,d S |  d|›¡ d S )Nr  Úpassr%  ó1   ValueError: the number of frames must be in ranges+   PYTHONTRACEMALLOC: invalid number of framesúunexpected output: )r   ÚSuppressCrashReportr   rY   r‡   )r[   r   r   r!  r"  r   r   r   Úcheck_env_var_invalid›  s   
þÿz%TestCommandLine.check_env_var_invalidc              	   C   óD   t D ]}| j|d |  |¡ W d   ƒ n1 sw   Y  qd S ©N©r   )ÚINVALID_NFRAMEÚsubTestr2  ©r[   r   r   r   r   Útest_env_var_invalid¨  ó   ÿ€ÿz$TestCommandLine.test_env_var_invalidc              	   C   sv   dD ]6\}}| j ||d# d}td|d|ƒ\}}}| ¡ }|  |t|ƒ d¡¡ W d   ƒ n1 s3w   Y  qd S )N))r   r
   )ztracemalloc=1r
   )ztracemalloc=15é   )Úxoptionsr   r,  ú-Xr  Úascii)r7  r   r  rZ   rY   Úencode)r[   r<  r   r   r   r!  r"  r   r   r   Útest_sys_xoptions­  s   ü€ûz!TestCommandLine.test_sys_xoptionsc                 C   sr   dd| ddf}t  ¡  t|Ž \}}}W d   ƒ n1 sw   Y  d|v r)d S d|v r/d S |  d|›¡ d S )Nr=  ztracemalloc=%sr  r.  r/  s/   -X tracemalloc=NFRAME: invalid number of framesr0  )r   r1  r   r‡   )r[   r   rT   r   r!  r"  r   r   r   Úcheck_sys_xoptions_invalid¹  s   
ÿz*TestCommandLine.check_sys_xoptions_invalidc              	   C   r3  r4  )r6  r7  rA  r8  r   r   r   Útest_sys_xoptions_invalidÄ  r:  z)TestCommandLine.test_sys_xoptions_invalidNúneed _testcapic                 C   s   d}t ddd|ƒ d S )Nz2import _testcapi; _testcapi.test_pymem_alloc0(); 1r=  r   r  )r   )r[   r   r   r   r   Útest_pymem_alloc0É  s   z!TestCommandLine.test_pymem_alloc0)r]   r^   r_   r#  r¼   ÚskipIfr   r&  r)  r+  r-  r2  r9  r@  rA  rB  Ú	_testcapirD  r   r   r   r   r  u  s     ÿ
r  rC  c                   @   sz   e Zd ZdZ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d„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestCAPIi@  c                 C   s>   t  ¡ r	|  d¡ d| _d| _t| jƒd | _t| jƒ| _d S )Nra   r3   rk   r   )	r   rb   rc   rŒ   r$   r&   rz   ÚidÚptrre   r   r   r   rf   Õ  s   
zTestCAPI.setUpc                 C   rg   rG   rh   re   r   r   r   rj   á  rN   zTestCAPI.tearDownc                 C   s&   t  | j| j¡}|d urt |¡S d S rG   )rF  Ztracemalloc_get_tracebackrŒ   rI  r   r!   )r[   r   r   r   r   Úget_tracebackä  s   
zTestCAPI.get_tracebackFr
   c                 C   s$   t |dƒ}t | j| j| j|¡ |S )Nr
   )r   rF  Ztracemalloc_trackrŒ   rI  r$   )r[   Úrelease_gilr   r   r   r   r   Útrackë  s
   
ÿzTestCAPI.trackc                 C   s   t  | j| j¡ d S rG   )rF  Ztracemalloc_untrackrŒ   rI  re   r   r   r   Úuntrackñ  s   zTestCAPI.untrackc                 C   s6   t  ¡ }t  d| j¡}| |g¡}tdd„ |jD ƒƒS )NTc                 s   s    | ]}|j V  qd S rG   r   )rm   r‰   r   r   r   Ú	<genexpr>ù  s   € z-TestCAPI.get_traced_memory.<locals>.<genexpr>)r   r§   rÐ   rŒ   rÇ   r    rˆ   )r[   rD   Zdomain_filterr   r   r   r›   ô  s   zTestCAPI.get_traced_memoryc                 C   sR   d}t  |¡ t  ¡ d }|  ||¡}|  |  ¡ t  |¡¡ |  |  ¡ | j¡ d S )Nr3   r   )r   rd   r›   rL  rZ   rJ  r!   r$   )r[   rK  r   r$   r   r   r   r   Úcheck_trackû  s   

ÿzTestCAPI.check_trackc                 C   ó   |   d¡ d S )NF©rO  re   r   r   r   Ú
test_track  rJ   zTestCAPI.test_trackc                 C   rP  )NTrQ  re   r   r   r   Útest_track_without_gil
  s   zTestCAPI.test_track_without_gilc                 C   s<   d}t  |¡ |  ¡  | j|d}|  |  ¡ t  |¡¡ d S )Nr3   r5  )r   rd   rL  rZ   rJ  r!   )r[   r   r   r   r   r   Útest_track_already_tracked  s   

ÿz#TestCAPI.test_track_already_trackedc                 C   sj   t  ¡  |  ¡  |  |  ¡ ¡ |  |  ¡ | j¡ |  ¡  |  	|  ¡ ¡ |  |  ¡ d¡ |  ¡  |  ¡  d S rO   )
r   rd   rL  r   rJ  rZ   r›   r$   rM  rž   re   r   r   r   Útest_untrack  s   zTestCAPI.test_untrackc                 C   sT   t  ¡  t  ¡  |  t¡ |  ¡  W d   ƒ n1 sw   Y  |  |  ¡ ¡ d S rG   )r   rd   ri   r   r®   rL  rž   rJ  re   r   r   r   Útest_stop_track,  s   
ÿzTestCAPI.test_stop_trackc                 C   sP   t  ¡  |  ¡  t  ¡  |  t¡ |  ¡  W d   ƒ d S 1 s!w   Y  d S rG   )r   rd   rL  ri   r   r®   rM  re   r   r   r   Útest_stop_untrack4  s   
"ÿzTestCAPI.test_stop_untrackN)Fr
   )r]   r^   r_   rú   rf   rj   rJ  rL  rM  r›   rO  rR  rS  rT  rU  rV  rW  r   r   r   r   rG  Ñ  s    
rG  Ú__main__)%r¿   r¸   r   r   r¼   Zunittest.mockr   Ztest.support.script_helperr   r   r   Útestr   Ztest.supportr   rF  ÚImportErrorÚ	getsizeofr    r6  r   r&   rF   r   rK   rM   rP   ZTestCaserQ   r`   r¾   rû   r  rE  rG  r]   Úmainr   r   r   r   Ú<module>   sL    ÿ
!    8 T\kÿ