
    <e&                        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 	 d dlZn# e$ r dZY nw xY w ej        d          ZdZd Zd	 Zd
 Zd Zd Zd Zd Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z  ej!        edu d           G d dej                              Z"e#dk    r ej$                     dS dS )    N)patch)assert_python_okassert_python_failure interpreter_requires_environment)support)	os_helper    )i   @c                     g }t          j        d          }t          |           D ]<}|j        }|j        |z   }|                    |j        |f           d}|j        }| n=t          |          S )N   r   )	sys	_getframerangef_codef_linenoappendco_filenamef_backtuple)nframelineno_deltaframesframeindexcodelinenos          ,/usr/lib/python3.11/test/test_tracemalloc.py
get_framesr      s    FM!Ev  |,.t'0111=E ==r	   c           	          t          j                    }| t          z
  }t          |d          }d|z  }|t          j        |t          t          |          |                    fS )Nr      x)tracemallocget_traceback_limitEMPTY_STRING_SIZEr   	Tracebackminlen)sizer   	bytes_lenr   datas        r   allocate_bytesr*   #   s\    ,..F))I""F)D&vs3v;;/G/GHHHHr	   c                  r    d} g d}t          j        ||           }g d}t          j        ||           }||fS )N   )r   
   )a.pyr,   b.py      r-   r-   r   r,   r0      r1   r4   r,   B   )r2   r   r   r4      	<unknown>r   r   )r-   r-   r-   )r,   r,   r6   r4   )r,     r6   r4   )r3     )c.pyB  r   )r!   Snapshot)traceback_limit
raw_tracessnapshotraw_traces2	snapshot2s        r   create_snapshotsrL   *   s\    O

 
 
J #J@@H	 	 	K $[/BBIi  r	   c                 .    t          j        | |f          S N)r!   _Framefilenamer   s     r   r   r   K   s    x0111r	   c                  *    t          j        |           S rN   )r!   r$   )r   s    r   	tracebackrS   N   s     (((r	   c                 $    t          | |f          S rN   )rS   rP   s     r   traceback_linenorU   Q   s    h'(((r	   c                 "    t          | d          S Nr   )rU   )rQ   s    r   traceback_filenamerX   T   s    Ha(((r	   c                       e Zd Zd ZdS )TestTracebackc                 0   dt           fd}|                      |d          d           |                      |dd          d           d}d}|                      ||          d	| d
           |                      ||d          d	| d           d S )Nreturnc                  8    t          t          j        |            S rN   )reprr!   r$   )argss    r   get_reprz)TestTraceback.test_repr.<locals>.get_reprZ   s    -t4555r	    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)selfr`   r   exp_repr_framess       r   	test_reprzTestTraceback.test_reprY   s    	6s 	6 	6 	6 	6 	"'7888"a*IJJJ'/ 	 	&))9999	; 	; 	;&!,,HHHH	J 	J 	J 	J 	Jr	   N)__name__
__module____qualname__ri   ra   r	   r   rZ   rZ   X   s(        J J J J Jr	   rZ   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z ej                    d             Zd ZdS )TestTracemallocEnabledc                 ~    t          j                    r|                     d           t          j        d           d S )N+tracemalloc must be stopped before the testr   )r!   
is_tracingskipTeststartrg   s    r   setUpzTestTracemallocEnabled.setUpl   s>    !## 	IMMGHHH!r	   c                 ,    t          j                     d S rN   r!   stoprt   s    r   tearDownzTestTracemallocEnabled.tearDownr       r	   c                 .   d t          d          D             }t          j                    }|                     |d           t          j                     t          j                    }|                     |d           |                     ||           d S )Nc                 ,    g | ]}t          d           S ){   r*   ).0counts     r   
<listcomp>zFTestTracemallocEnabled.test_get_tracemalloc_memory.<locals>.<listcomp>v   s     ===s##===r	   i  r   )r   r!   get_tracemalloc_memoryassertGreaterEqualclear_tracesassertLessEqual)rg   r)   r'   size2s       r   test_get_tracemalloc_memoryz2TestTracemallocEnabled.test_get_tracemalloc_memoryu   s    ==t===133a((( """244q)))UD)))))r	   c                     t          j                     d}t          |          \  }}t          j        |          }|                     ||           d S N90  )r!   r   r*   get_object_tracebackrf   rg   obj_sizeobjobj_tracebackrS   s        r   test_get_object_tracebackz0TestTracemallocEnabled.test_get_object_traceback   sT     """+H55]4S99	M22222r	   c                    t          j                     t          j                     g }d }g }t          j                    }t          |d          }t          j        |t          t          |          |                    }t          j	        |          }| 
                    |           |                     ||           d S )N)r!   r   r   
gc_collectr"   r   r$   r%   r&   r   assertIsNotNonerf   )rg   r   r   r   r   rS   s         r   test_new_referencez)TestTracemallocEnabled.test_new_reference   s     """  022FB''#-fc#f++v6N6NOO4S99	Y'''M22222r	   c                    d}t          j                     |                     t          t           j        d           t          j                     t          j        d           t          |          \  }}t          j        |          }|                     t          |          d           |                     ||           t          j                     t          j        d           t          |          \  }}t          j        |          }|                     t          |          d           |                     ||           d S )Nr.   r
   r   )	r!   rx   assertRaises
ValueErrorrs   r*   r   rf   r&   )rg   r   obj2obj2_tracebackrS   r   r   s          r   test_set_traceback_limitz/TestTracemallocEnabled.test_set_traceback_limit   s   *k&7<<<"-h77n4T::	Y,,,N333!+H55]4S99	Y+++M22222r	   c                 d    |D ]}|d         |j         k    r|c S |                     d           d S )Nr,   ztrace not found)_framesfail)rg   tracesrS   traces       r   
find_tracez!TestTracemallocEnabled.find_trace   sL     	 	EQx9,,, - 			#$$$$$r	   c                    t          j                     d}t          |          \  }}t          j                    }|                     ||          }|                     |t                     |\  }}}}	|                     ||           |                     ||j                   t          j	                     |                     t          j                    g            d S r   )
r!   r   r*   _get_tracesr   assertIsInstancer   rf   r   rx   )
rg   r   r   r   r   r   domainr'   rS   lengths
             r   test_get_tracesz&TestTracemallocEnabled.test_get_traces   s     """+H55](**66eU+++*/'ix(((M$9:::022B77777r	   c                    d fdfd}t          j                     t          j        d           d} ||          \  }} ||          \  }}t          j                    }t	          t          |j                            |_        t	          t          |j                            |_        |                     ||          }|                     ||          }	|\  }
}}}|	\  }}}}|                     ||           d S )Nc                      t          |           S rN   r~   r'   s    r   allocate_bytes2zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes2   s    !$'''r	   c                      |           S rN   ra   )r'   r   s    r   allocate_bytes3zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes3       "?4(((r	   c                      |           S rN   ra   )r'   r   s    r   allocate_bytes4zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes4   r   r	   r3   r}   )	r!   rx   rs   r   r   reversedr   r   assertIs)rg   r   r   obj1obj1_tracebackr   r   r   trace1trace2domain1size1
traceback1length1domain2r   
traceback2length2r   r   s                     @@r    test_get_traces_intern_tracebackz7TestTracemallocEnabled.test_get_traces_intern_traceback   s4   	( 	( 	(	) 	) 	) 	) 	)	) 	) 	) 	) 	) 	!.x88n.x88n(**!&x0F'G'G!H!H!&x0F'G'G!H!H8888.4+
G.4+
Gj*-----r	   c                 d   d}d}t          j                     t          |          \  }}t          j                    \  }}|                     ||           |                     ||           |                     ||z
  |           |                     ||z
  |           d }t          j                    \  }}|                     ||           |                     ||z
  ||z
             |                     ||           t          j                     |                     t          j                    d           t          |          \  }}t          j                    \  }}|                     ||           t          j                     |                     t          j                    d           d S )N      )r   r   )	r!   r   r*   get_traced_memoryr   r   
assertLessrf   rx   )	rg   	max_errorr   r   r   r'   	peak_sizer   
peak_size2s	            r   test_get_traced_memoryz-TestTracemallocEnabled.test_get_traced_memory   s    	  """+H55]%799ih///	4000TH_i888Y-y999 '9;;zt$$$uh.BCCC
I666 	 """688&AAA ,H55]%799ih/// 	688&AAAAAr	   c                     t          d          \  }}t          j        |          }|                     |           t          j                     t          j        |          }|                     |           d S )Nr}   )r*   r!   r   r   r   assertIsNone)rg   r   r   rS   r   s        r   test_clear_tracesz(TestTracemallocEnabled.test_clear_traces  sq    +C00]4S99	Y''' """ 5c::
*%%%%%r	   c                 2   t          j                     t          t          t	          d                              }t          j                    \  }}t          j                     t          j                    \  }}|                     ||           |                     ||           d}t          |          \  }}t          j                    \  }	}
|                     |
|	           | 
                    |
|           |                     |
|z
  |           d S )Ni r   )r!   r   sumlistr   r   
reset_peakr   r   r*   assertGreater)rg   	large_sumr   peak1r   peak2r   r   r   size3peak3s              r   test_reset_peakz&TestTracemallocEnabled.test_reset_peak  s    	 """ U6]]++,,	"466u 	   "466uu---u%%% +H55]"466uu---5%(((x88888r	   c                     t          j                     |                     t          j                               t          j                     |                     t          j                               d S rN   )r!   rx   assertFalserq   rs   
assertTruert   s    r   test_is_tracingz&TestTracemallocEnabled.test_is_tracing%  s^    /11222.0011111r	   c                    t          d          \  }}t          j                    }|                     |j        d         j        j        d           |                    t          j	                   | 
                    t          j        t          j	                   t          j                            t          j	                  }|                     |j        |j                   t          j                     |                     t"                    5 }t          j                     d d d            n# 1 swxY w Y   |                     t%          |j                  d           d S )Nr}   r   r.   zLthe tracemalloc module must be tracing memory allocations to take a snapshot)r*   r!   take_snapshotr   r   rS   total_nframedumpr   TESTFN
addCleanupunlinkrF   loadrf   rx   r   RuntimeErrorre   	exception)rg   r   sourcerI   rK   cms         r   test_snapshotz$TestTracemallocEnabled.test_snapshot,  sh   $S))V ,.. 	8?1-7DbIII 	i&'''	()*:;;;  (--i.>??	)8?;;; 	|,, 	(%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(R\**:	; 	; 	; 	; 	;s   D00D47D4c                 T   t          j                    }d|_        |                    t          j                   |                     t          j        t          j                   t           j        	                    t          j                  }| 
                    |j        d           d S )Nnew)r!   r   	test_attrr   r   r   r   r   rF   r   rf   )rg   rI   rK   s      r   test_snapshot_save_attrz.TestTracemallocEnabled.test_snapshot_save_attrE  s    ,.."i&'''	()*:;;;  (--i.>??	,e44444r	   c                     t          j                    sdS d}t          |          \  }}t          j        |          }|dS dS )Nr,   r   r4   r   )r!   rq   r*   r   r   s        r   
fork_childz!TestTracemallocEnabled.fork_childP  sQ    %'' 	1+H55]4S99	1 qr	   c                     t          j                    }|sFd}	 |                                 }t          j        |           d S # t          j        |           w xY wt	          j        |d           d S )Nr   r   )exitcode)osforkr   _exitr   wait_process)rg   pidr   s      r   	test_forkz TestTracemallocEnabled.test_fork]  sx     gii 	2H#??,,""""""""" q111111s   A Ac                 2   t          j                     t          j        d           d } |d          j        d         }t          j        |          }|                     d|d         j                   |                     d|d         j                   d S )N   c                       fd}|S )Nc                       S rN   ra   )xs   r   gzFTestTracemallocEnabled.test_no_incomplete_frames.<locals>.f.<locals>.gp  s    r	   ra   )r   r   s   ` r   fz;TestTracemallocEnabled.test_no_incomplete_frames.<locals>.fo  s!        Hr	   r   test_tracemallocr
   )r!   rx   rs   __closure__r   assertInrQ   assertNotIn)rg   r   r   rS   s       r   test_no_incomplete_framesz0TestTracemallocEnabled.test_no_incomplete_framesk  s    !	 	 	
 addq!4S99	()B-*@AAA+Yr]-CDDDDDr	   N)rj   rk   rl   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_forkr   r  ra   r	   r   rn   rn   k   sC           * * *3 3 33 3 3(3 3 3(% % %8 8 8 . . .6"B "B "BH& & &9 9 902 2 2; ; ;2	5 	5 	5   W2 2 2E E E E Er	   rn   c                   `    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TestSnapshoti  c                    dg}t          j                    5 }|                    t          j        t
          dd                     |                    t          j        t
          dd                     |                    t          j        t
          d|                     t          j                    }|                     |j        d           |                     t          |j
                  d           |j
        d	         }|                     |j        d           |                     |j        j        d
           |                     t          |j                  d           |                     |j        d	         j        d           |                     |j        d	         j        d           d d d            d S # 1 swxY w Y   d S )N)r   r8   )r/   r.   rq   T)return_valuer"   r8   r   r   r   r.   r0   r,   )
contextlib	ExitStackenter_contextr   objectr!   r   rf   rG   r&   r   r'   rS   r   rQ   r   )rg   rH   stackrI   r   s        r   test_create_snapshotz!TestSnapshot.test_create_snapshot}  s   01
!## 	;u[,:>!@ !@ !@ A A A[:O:;!= != != > > >[-:D!F !F !F G G G #022HX5q999S111555OA&EUZ+++U_92>>>S111555U_Q/8&AAAU_Q/6:::!	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   F GGGc                    t                      \  }}t          j        dd          }t          j        ddd          }t          j        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 )
NFr2   Tr0   r,   r8   )r-   r-   r-   r5   r<   )r-   r-   r-   r5   ra   )rL   r!   Filterr   r   _tracesfilter_tracesrf   assertIsNotr   	TypeError)
rg   rI   rK   filter1filter2filter3original_traces	snapshot3	snapshot4	snapshot5s
             r   test_filter_traceszTestSnapshot.test_filter_traces  s   .00)$UF33$T6155$T6155x677 **G:66	)1 4
 4
 4
 	 	 	 	0/BBB ++Wg,>??	)1 4
 4
 4
 	 	 	 **2..	H---)8?;;;)8?;;;)X%;WEEEEEr	   c                    t                      \  }}t          j        ddd          }t          j        ddd          }t          |j        j                  }|                    |f          }|                     |j        j        g d           |                    |f          }|                     |j        j        g d           d S )NFr0   r   r   T)r-   r-   r-   r9   r<   )rL   r!   r  r   r   r  r  rf   )rg   rI   rK   r  r  r  r  s          r   test_filter_traces_domainz&TestSnapshot.test_filter_traces_domain  s    .00)$UF1===$T6!<<<x677 **G:66	)1 4
 4
 4
 	 	 	 **G:66	)1 4
 4
 4
 	 	 	 	 	r	   c                 ^   t                      \  }}t          j        dd          }t          j        dd          }|                    |f          }|                     |j        j        g d           |                    |f          }|                     |j        j        dg           d S )NFr4   r  T)r-   r-   r-   r5   r9   r<   )rL   r!   DomainFilterr  rf   r   r  )rg   rI   rK   r  r  r  s         r    test_filter_traces_domain_filterz-TestSnapshot.test_filter_traces_domain_filter  s    .00)*5;;;*4::: **G:66	)1 4
 4
 4
 	 	 	 **G:66	)1*4
 	 	 	 	 	r	   c                    t                      \  }}t          dd          }t          dd          }t          dd          }t          dd          }t          dd	          }|                    d
          }|                     |t	          j        |dd          t	          j        |dd          t	          j        |dd          t	          j        |dd          g           |                    d
          }	|                     |	t	          j        |dd          t	          j        |dd          t	          j        |dd          g           |                    |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          g           d S )Nr@   r   r0   r,   r8   r2   r   rD   rE   r   r:      r4   r=     rB   rA   r
   )rL   rU   
statisticsrf   r!   	Statistic
compare_toStatisticDiff)rg   rI   rK   tb_0tb_a_2tb_a_5tb_b_1tb_c_578stats1stats2r&  s              r   test_snapshot_group_by_linez(TestSnapshot.test_snapshot_group_by_line  s   .00)Q//!&!,,!&!,,!&!,,#FC00 $$X..!&"a00!&"a00!$1--!&!Q//	"
 	 	 	 %%h//!&$22!(C33!&"a00"
 	 	 	 ))(H==
%fdD!Q??%hS!Q??%faa<<%dAr1b99%fb!Q::&
 	 	 	 	 	r	   c                 .   t                      \  }}t          d          }t          d          }t          d          }t          d          }|                    d          }|                     |t	          j        |dd          t	          j        |dd	          t	          j        |d
d          g           |                    d          }|                     |t	          j        |dd          t	          j        |dd          g           |                    |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          g           d S )Nr@   r0   r2   rD   rQ   r:   r       r3   r=   i  r8   rB   rA   r   r$  r
   r%  )rL   rX   r&  rf   r!   r'  r(  r)  )
rg   rI   rK   r*  tb_atb_btb_cr/  r0  diffs
             r   test_snapshot_group_by_filez(TestSnapshot.test_snapshot_group_by_file  s   .00)!+..!&))!&))!&)) $$Z00!$A..!$A..!$1--"
 	 	 	 %%j11!$a00!$Q//"
 	 	 	 ##Hj99%dD$1==%dCa;;%dAsAr::%dAr1b99	 
 	 	 	 	 	r	   c                    t                      \  }}t          dd          }t          dd          }t          d          }t          d          }|                    d          }|                     |t	          j        |dd          t	          j        |d	d
          t	          j        |dd          t	          j        |dd          g           t          d          }|                    d          }	|                     |	t	          j        |dd          t	          j        |dd          t	          j        |d	d
          g           |                    |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          g           |                     t          |j        dd           d S )Nr/   r1   r7   r;   r?   rS   r:   r   r"  r4   r=   r,   rC   r#  rB   rA   r   r$  r
   r%  T)
cumulative)
rL   rS   r&  rf   r!   r'  r(  r)  r   r   )rg   rI   rK   tb1tb2tb3tb4r/  tb5r0  r7  s              r    test_snapshot_group_by_tracebackz-TestSnapshot.test_snapshot_group_by_traceback*  s   .00) [11[11$$())$$[11!#r1--!#r1--!#q!,,!#q!,,	"
 	 	 	 &&%%k22!#tQ//!#sA..!#r1--"
 	 	 	 ##Hk::%c4q!<<%c3Q::%c1c1b99%c1b!R88%c2q!Q77 
 	 	 	 	*"-{t 	 	M 	M 	M 	M 	Mr	   c                    t                      \  }}t          d          }t          d          }t          d          }t          dd          }t          dd          }t          dd          }t          dd          }	|                    dd	          }
|                     |
t          j        |d
d          t          j        |dd          t          j        |dd          g           |                    dd	          }
|                     |
t          j        |dd          t          j        |	dd          t          j        |dd          t          j        |dd          t          j        |dd          g           d S )Nr@   r0   r2   r,   r8   r   r3   rQ   Tb   r3  r=   r   r:   r"  r4   )rL   rX   rU   r&  rf   r!   r'  )rg   rI   rK   r*  r4  r5  r+  r,  r-  tb_b_4statss              r   !test_snapshot_group_by_cumulativez.TestSnapshot.test_snapshot_group_by_cumulativeP  s{   .00)!+..!&))!&))!&!,,!&!,,!&!,,!&!,, ##J55!$A..!$A..!$1--!
 	 	 	 ##Hd33!&"a00!&"a00!&"a00!$1--!&!Q//!
 	 	 	 	 	r	   c                 2   t                      \  }}|j        d         }|                     t          |          d           |j        }|                     t          |          d           |d         }|                     t          |          d           d S )Nr   zb.py:4: 10 Bzb.py:4)rL   r   rf   re   rS   )rg   rI   rK   r   rS   r   s         r   test_trace_formatzTestSnapshot.test_trace_formatl  s    .00)"U^444O	Y222!UX.....r	   c                     t                      \  }}|                    d          }|d         }|                     t          |          d           d S )Nr   r   z(b.py:1: size=66 B, count=1, average=66 B)rL   r&  rf   re   rg   rI   rK   rD  stats        r   test_statistic_formatz"TestSnapshot.test_statistic_formatu  s`    .00)##H--QxTC	E 	E 	E 	E 	Er	   c                     t                      \  }}|                    |d          }|d         }|                     t          |          d           d S )Nr   r   z;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rL   r(  rf   re   rI  s        r   test_statistic_diff_formatz'TestSnapshot.test_statistic_diff_format|  sb    .00)$$Xx88QxTV	X 	X 	X 	X 	Xr	   c                    t                      \  }}|                     |j        d d         |j        d         |j        d         f           |j        d         j        }|                     |d d         |d         |d         f           d S )Nr,   r   r   )rL   rf   r   rS   )rg   rI   rK   rS   s       r   test_sliceszTestSnapshot.test_slices  s    .00)!,"/!,hoa.@A	C 	C 	C OA&0	2A2#A,	!5	7 	7 	7 	7 	7r	   c                    t                      \  }}d }t          j                            d|          5  |j        d         j        }|                     |                                g d           |                     |                    d          dd	g           |                     |                    d
          ddg           |                     |                    d          g d           |                     |                    dd          dd	g           |                     |                    d
d          ddg           d d d            d S # 1 swxY w Y   d S )Nc                     d| d|dS )Nz  <z, rd   ra   rP   s     r   getlinez3TestSnapshot.test_format_traceback.<locals>.getline  s     #+88VVV44r	   ztracemalloc.linecache.getline)side_effectr   )  File "b.py", line 4    <b.py, 4>  File "a.py", line 2    <a.py, 2>r   )limitrV  rW  r
   rT  rU  T)most_recent_first)rV  rW  rT  rU  )rX  rY  )rL   unittestmockr   r   rS   rf   format)rg   rI   rK   rR  tbs        r   test_format_tracebackz"TestSnapshot.test_format_traceback  s   .00)	5 	5 	5]  !@-4 ! 6 6 	0 	0#-BRYY[[/ / /0 0 0 RYYQY//5-/0 0 0 RYYRY005-/0 0 0 RYYY>>/ / /0 0 0 RYYQ$YGG5-/0 0 0 RYYR4YHH5-/0 0 07	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   DEE"%E"N)rj   rk   rl   maxDiffr  r  r  r   r1  r8  r@  rE  rG  rK  rM  rO  r^  ra   r	   r   r  r  z  s        G; ; ;*$F $F $FL  6  *! ! !F  >$M $M $ML  8/ / /E E EX X X7 7 7!0 !0 !0 !0 !0r	   r  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestFiltersr   c                 Z   t          j        dd          }|                     |j        d           |                     |j        d           |                     |j                   |                     |j        d           t          j        dddd          }|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           t          j        dddd          }|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     t          t          |dd           d S )NTabcFztest.pyr}   )	inclusivefilename_patternr   
all_framesre  )r!   r  rf   rd  re  r   r   rf  r   AttributeErrorsetattrrg   r   s     r   test_filter_attributesz"TestFilters.test_filter_attributes  s   tU++d++++U333!(###u--- uid;;e,,,+Y7773'''t,,, SVcghhhe,,,+Y7773'''t,,, 	.'16H%PPPPPr	   c                    t          j        dd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     t          j        dd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     t          j        ddd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     t          j        ddd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     t          j        ddd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     t          j        ddd          }|                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     |                     |                    dd                     d S )NTrc  r   r8   r.   12356F)r!   r  r   _match_framer   ri  s     r   test_filter_matchzTestFilters.test_filter_match  s$   tU++ua00111ua00111ub11222334443344444555ue,,q11222q11222r22333w22333w22333w33444 tUA..q11222ua00111r22333334443344444555ueQ//ua00111q11222ub11222w22333w22333w33444 tUA..ua00111q11222r22333334443344444555ueQ//q11222ua00111ub11222w22333w22333w3344444r	   c                    d }|                       |ddd                     |                      |ddd                     |                      |ddd                     |                      |ddd                     |                       |ddd                     |                       |ddd                     d S )Nc                 X    t          j        | |          }|                    |d          S rW   r!   r  rm  )rd  rQ   patternr   s       r   fnmatchz7TestFilters.test_filter_match_filename.<locals>.fnmatch  s(    "9g66A>>(A...r	   Trc  rl  r@   F)r   r   rg   rs  s     r   test_filter_match_filenamez&TestFilters.test_filter_match_filename   s    	/ 	/ 	/ 	eU33444w66777{E::;;;u55666w66777{E::;;;;;r	   c                 	   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                 X    t          j        d|          }|                    | d          S )NTr   rq  )rQ   rr  filters      r   rs  z=TestFilters.test_filter_match_filename_joker.<locals>.fnmatch  s*     'g66F&&x333r	   rc   *abcddefza*zabc*zb*zabcd*za*cabcdcxza*cxabbabcdceabcdeza*c*e	abcbdefegza*bd*egabcdd	abcbdefefza.pycr0   ntaBCABc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   namert  s     r    test_filter_match_filename_jokerz,TestFilters.test_filter_match_filename_joker  s   	4 	4 	4
 	++,,,U++,,,B(((C(())) 	u--...//000../// 	t,,---v..///--...00111 	u--...&11222..///622333 	11222Y77888'22333i88999 	00111001117d??OOGGE511222OOGGGW55666OOGGGV44555OOGGFG445555 WWUE22333WWWg66777WWWf55666WWVW556667d??OOGGFF33444OOGGFF33444OOGGHh77888OOGGHh778888 WWVV44555WWVV44555WWXx88999WWXx88999 	&1122222r	   c                 
   d}d}d}d}t          j        ddd          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        ddd          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        ddd          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        ddd          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        dd	d          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        dd	d          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     t          j        dd	d          }|                     |                    |                     |                     |                    |                     |                     |                    |                     |                     |                    |                     d S )
N)r/   )r2   r4   )r1   )r2   r8   ))rD   r8   r?   r>   Tr2   )rf  Fr@   )r!   r  r   _match_tracebackr   )rg   t1t2t3unknownr   s         r   test_filter_match_tracez#TestFilters.test_filter_match_traceR  sW   '',%tV===**2..///**2..///++B//000++G44555tV>>>++B//000**2..///++B//000++G44555uf>>>++B//000++B//000**2..///**733444uf???**2..///++B//000**2..///**733444ukeDDD**2..///**2..///**2..///++G44555t[TBBB++B//000++B//000**2..///**733444ukdCCC**2..///**2..///++B//000++G4455555r	   N)	rj   rk   rl   r_  rj  rn  ru  r  r  ra   r	   r   ra  ra    sl        GQ Q Q225 25 25h< < <C3 C3 C3J.6 .6 .6 .6 .6r	   ra  c                       e Zd Zd Z ej         e            d          d             Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Z ej        edu d          d             ZdS )TestCommandLinec                     d}t          d|          \  }}}|                                }|                     |d           d S )N3import tracemalloc; print(tracemalloc.is_tracing())-c   Falser   rstriprf   rg   r   okstdoutstderrs        r    test_env_var_disabled_by_defaultz0TestCommandLine.test_env_var_disabled_by_default  sF    D-dD99FF*****r	   z6Cannot run -E tests when PYTHON env vars are required.c                     d}t          dd|d          \  }}}|                                }|                     |d           dS )zAPYTHON* environment variables must be ignored when -E is present.r  z-Er  1PYTHONTRACEMALLOCr  Nr  r  s        r   test_env_var_ignored_with_Ez+TestCommandLine.test_env_var_ignored_with_E  sQ     E-dD$RUVVVFF*****r	   c                     d}t          d|d          \  }}}|                                }|                     |d           d S )Nr  r  0r  r  r  r  s        r   test_env_var_disabledz%TestCommandLine.test_env_var_disabled  sK    D-dDCPPPFF*****r	   c                     d}t          d|d          \  }}}|                                }|                     |d           d S )Nr  r  r  r  s   Truer  r  s        r   test_env_var_enabled_at_startupz/TestCommandLine.test_env_var_enabled_at_startup  sK    D-dDCPPPFF)))))r	   c                     d}t          d|d          \  }}}|                                }|                     |d           d S )N<import tracemalloc; print(tracemalloc.get_traceback_limit())r  10r  s   10r  r  s        r   test_env_limitzTestCommandLine.test_env_limit  sK    M-dDDQQQFF'''''r	   c                     t          j                    5  t          ddt          |                    \  }}}d d d            n# 1 swxY 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   re   r   )rg   r   r  r  r  s        r   check_env_var_invalidz%TestCommandLine.check_env_var_invalid  s    (** 	/ 	/!6f"%f++"/ "/ "/B	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 @6IIF9VCCF		22233333s   $AAAc                     t           D ]E}|                     |          5  |                     |           d d d            n# 1 swxY w Y   Fd S Nr   )INVALID_NFRAMEsubTestr  rg   r   s     r   test_env_var_invalidz$TestCommandLine.test_env_var_invalid  s    $ 	3 	3FV,, 3 3**62223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3   AA		A	c                 8   dD ]\  }}|                      ||          5  d}t          d|d|          \  }}}|                                }|                     |t	          |                              d                     d d d            n# 1 swxY w Y   d S )N))r!   r   )ztracemalloc=1r   )ztracemalloc=15   )xoptionsr   r  -Xr  ascii)r  r   r  rf   re   encode)rg   r  r   r   r  r  r  s          r   test_sys_xoptionsz!TestCommandLine.test_sys_xoptions  s    !
 		F 		FHf
 x?? F FU%5dHdD%Q%Q"FF  V););G)D)DEEE	F F F F F F F F F F F F F F F		F 		Fs   A#BB	B	c                     dd|z  ddf}t          j                    5  t          | \  }}}d d d            n# 1 swxY 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 framesr  )r   r  r   r   )rg   r   r_   r  r  r  s         r   check_sys_xoptions_invalidz*TestCommandLine.check_sys_xoptions_invalid  s    &/v>(** 	> 	>!6!=B	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> @6IIF=GGF		22233333s   7;;c                     t           D ]E}|                     |          5  |                     |           d d d            n# 1 swxY w Y   Fd S r  )r  r  r  r  s     r   test_sys_xoptions_invalidz)TestCommandLine.test_sys_xoptions_invalid  s    $ 	8 	8FV,, 8 8//7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8r  Nneed _testcapic                 .    d}t          ddd|           d S )Nz2import _testcapi; _testcapi.test_pymem_alloc0(); 1r  r!   r  )r   )rg   r   s     r   test_pymem_alloc0z!TestCommandLine.test_pymem_alloc0  s$     D}dD99999r	   )rj   rk   rl   r  rZ  skipIfr   r  r  r  r  r  r  r  r  r  	_testcapir  ra   r	   r   r  r    s       + + + X_5577MO O+ +O O++ + +* * *( ( (
4 
4 
43 3 3

F 
F 
F	4 	4 	48 8 8
 X_Y$&(899: : :9: : :r	   r  r  c                   b    e Zd ZdZd Zd Zd ZddZd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd ZdS )TestCAPIi@  c                     t          j                    r|                     d           d| _        d| _        t          | j                  d         | _        t          | j                  | _        d S )Nrp   r8   r}   r   )	r!   rq   rr   r   r'   r*   r   idptrrt   s    r   ru   zTestCAPI.setUp  s`    !## 	IMMGHHH	!$),,Q/ dh<<r	   c                 ,    t          j                     d S rN   rw   rt   s    r   ry   zTestCAPI.tearDown  rz   r	   c                 p    t          j        | j        | j                  }|t	          j        |          S d S rN   )r  tracemalloc_get_tracebackr   r  r!   r$   )rg   r   s     r   get_tracebackzTestCAPI.get_traceback  s4    4T[$(KK(0004r	   Fr   c                 r    t          |d          }t          j        | j        | j        | j        |           |S )Nr   )r   r  tracemalloc_trackr   r  r'   )rg   release_gilr   r   s       r   trackzTestCAPI.track  s:    FA&&#DK49$/	1 	1 	1r	   c                 D    t          j        | j        | j                   d S rN   )r  tracemalloc_untrackr   r  rt   s    r   untrackzTestCAPI.untrack  s    %dk48<<<<<r	   c                     t          j                    }t          j        d| j                  }|                    |g          }t          d |j        D                       S )NTc              3   $   K   | ]}|j         V  d S rN   r   )r   r   s     r   	<genexpr>z-TestCAPI.get_traced_memory.<locals>.<genexpr>  s$      ;;%5:;;;;;;r	   )r!   r   r  r   r  r   r   )rg   rI   domain_filters      r   r   zTestCAPI.get_traced_memory  sX    ,..#0t{CC))=/::;;8?;;;;;;r	   c                 ^   d}t          j        |           t          j                    d         }|                     ||          }|                     |                                 t          j        |                     |                     |                                 | j                   d S )Nr8   r   )r!   rs   r   r  rf   r  r$   r'   )rg   r  r   r'   r   s        r   check_trackzTestCAPI.check_track	  s    &!!!,..q1K00++--$.v66	8 	8 	8 	//1149=====r	   c                 0    |                      d           d S )NFr  rt   s    r   
test_trackzTestCAPI.test_track  s    r	   c                 0    |                      d           d S )NTr  rt   s    r   test_track_without_gilzTestCAPI.test_track_without_gil  s     	r	   c                     d}t          j        |           |                                  |                     |          }|                     |                                 t          j        |                     d S )Nr8   r  )r!   rs   r  rf   r  r$   )rg   r   r   s      r   test_track_already_trackedz#TestCAPI.test_track_already_tracked  sz    &!!! 	

 6**++--$.v66	8 	8 	8 	8 	8r	   c                    t          j                     |                                  |                     |                                            |                     |                                 | j                   |                                  | 	                    |                                            |                     |                                 d           |                                  |                                  d S rW   )
r!   rs   r  r   r  rf   r   r'   r  r   rt   s    r   test_untrackzTestCAPI.test_untrack*  s    

T//11222//1149=== 	$,,../////111555 	r	   c                 ,   t          j                     t          j                     |                     t                    5  |                                  d d d            n# 1 swxY w Y   |                     |                                            d S rN   )r!   rs   rx   r   r   r  r   r  rt   s    r   test_stop_trackzTestCAPI.test_stop_track:  s    |,, 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$,,../////s   A""A&)A&c                    t          j                     |                                  t          j                     |                     t
                    5  |                                  d d d            d S # 1 swxY w Y   d S rN   )r!   rs   r  rx   r   r   r  rt   s    r   test_stop_untrackzTestCAPI.test_stop_untrackB  s    

|,, 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A77A;>A;N)Fr   )rj   rk   rl   r_  ru   ry   r  r  r  r   r  r  r  r  r  r  r  ra   r	   r   r  r    s        G
  
  
        = = =< < <
> 
> 
>       
8 8 8   0 0 0    r	   r  __main__)%r  r   r   r!   rZ  unittest.mockr   test.support.script_helperr   r   r   testr   test.supportr   r  ImportError	getsizeofr#   r  r   r*   rL   r   rS   rU   rX   TestCaserZ   rn   r  ra  r  r  r  rj   mainra   r	   r   <module>r     s       				 



           J J J J J J J J J J       " " " " " "   III "CM#&&   I I I! ! !B2 2 2) ) )) ) )) ) )J J J J JH% J J J&LE LE LE LE LEX. LE LE LE^s0 s0 s0 s0 s08$ s0 s0 s0l	P6 P6 P6 P6 P6(# P6 P6 P6fY: Y: Y: Y: Y:h' Y: Y: Y:x d"$455h h h h hx  h h 65hV zHMOOOOO s   7 A A