
    daf&                     4   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 ej"                  d      ZdZd Zd	 Zd
 Zd Zd Zd Zd Z G d dej6                        Z G d dej6                        Z G d dej6                        Z G d dej6                        Z G d dej6                        Z  ejB                  edu d       G d dej6                               Z"e#dk(  r ejH                          yy# e$ r dZY w xY w)    N)patch)assert_python_okassert_python_failure interpreter_requires_environment)support)	os_helper    )i   @c                    g }t        j                  d      }t        |       D ]V  }|j                  }|j                  |z   }|j                  |j                  |f       d}|j                  }|L t        |      S  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          0/root/Python-3.12.4/Lib/test/test_tracemalloc.py
get_framesr      s    FMM!Ev ||,.t''01== =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*   #   sT    ,,.F))I"F)D&&vs3v;/GHHHr	   c                  v    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   *   sH    O

J ##J@H	K $$[/BIi  r	   c                 0    t        j                  | |f      S N)r!   _Framefilenamer   s     r   r   r   K   s    x0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y)TestTracebackc                     dt         fd}| j                   |d      d       | j                   |dd      d       d}d}| j                   ||      d	| d
       | j                   ||d      d	| d       y )Nreturnc                  8    t        t        j                  |        S rN   )reprr!   r$   )argss    r   get_reprz)TestTraceback.test_repr.<locals>.get_reprZ   s    --t4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 	"'78"a*IJ'/ 	 	&)&&7q9	;&!,&&77GH	Jr	   N)__name__
__module____qualname__ri   ra   r	   r   rZ   rZ   X   s    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y)TestTracemallocEnabledc                 x    t        j                         r| j                  d       t        j                  d       y )N+tracemalloc must be stopped before the testr   )r!   
is_tracingskipTeststartrg   s    r   setUpzTestTracemallocEnabled.setUpl   s)    !!#MMGH!r	   c                 ,    t        j                          y rN   r!   stoprt   s    r   tearDownzTestTracemallocEnabled.tearDownr       r	   c                 4   t        d      D cg c]  }t        d       }}t        j                         }| j	                  |d       t        j
                          t        j                         }| j	                  |d       | j                  ||       y c c}w )Ni  {   r   )r   r*   r!   get_tracemalloc_memoryassertGreaterEqualclear_tracesassertLessEqual)rg   countr)   r'   size2s        r   test_get_tracemalloc_memoryz2TestTracemallocEnabled.test_get_tracemalloc_memoryu   s{    16t=s#==113a(  "224q)UD) >s   Bc                     t        j                          d}t        |      \  }}t        j                  |      }| j	                  ||       y N90  )r!   r   r*   get_object_tracebackrf   rg   obj_sizeobjobj_tracebackrS   s        r   test_get_object_tracebackz0TestTracemallocEnabled.test_get_object_traceback   sB      "+H5]44S9	M2r	   c                 b   t        j                          t        j                          g }d }g }t        j                         }t        |d      }t        j                  |t        t        |      |            }t        j                  |      }| j                  |       | j                  ||       y )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02FB'#--fc#f+v6NO44S9	Y'M2r	   c                 ^   d}t        j                          | j                  t        t         j                  d       t        j                          t        j                  d       t        |      \  }}t        j                  |      }| j                  t        |      d       | j                  ||       t        j                          t        j                  d       t        |      \  }}t        j                  |      }| j                  t        |      d       | j                  ||       y )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&7<"-h7n44T:	Y,N3!+H5]44S9	Y+M2r	   c                 `    |D ]  }|d   |j                   k(  s|c S  | j                  d       y )Nr,   ztrace not found)_framesfail)rg   tracesrS   traces       r   
find_tracez!TestTracemallocEnabled.find_trace   s7     	EQx9,,,	 			#$r	   c                    t        j                          d}t        |      \  }}t        j                         }| j	                  ||      }| j                  |t               |\  }}}}	| j                  ||       | j                  ||j                         t        j                          | j                  t        j                         g        y 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]((*6eU+*/'ix(M$9$9:002B7r	   c                    d fdfd}t        j                          t        j                  d       d} ||      \  }} ||      \  }}t        j                         }t	        t        |j                              |_        t	        t        |j                              |_        | j                  ||      }| j                  ||      }	|\  }
}}}|	\  }}}}| j                  ||       y )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   s    	(	)	) 	!.x8n.x8n((*!&x0F0F'G!H!&x0F0F'G!H88.4+
G.4+
Gj*-r	   c                    d}d}t        j                          t        |      \  }}t        j                         \  }}| j	                  ||       | j	                  ||       | j                  ||z
  |       | j                  ||z
  |       d }t        j                         \  }}| j                  ||       | j	                  ||z
  ||z
         | j	                  ||       t        j                          | j                  t        j                         d       t        |      \  }}t        j                         \  }}| j	                  ||       t        j                          | j                  t        j                         d       y )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   sX    	   "+H5]%779ih/	40TH_i8Y-y9 '99;zt$uh.BC
I6 	  "668&A ,H5]%779ih/ 	668&Ar	   c                     t        d      \  }}t        j                  |      }| j                  |       t        j                          t        j                  |      }| j                  |       y )Nr|   )r*   r!   r   r   r   assertIsNone)rg   r   r   rS   r   s        r   test_clear_tracesz(TestTracemallocEnabled.test_clear_traces  sY    +C0]44S9	Y'  " 55c:
*%r	   c                    t        j                          t        t        t	        d                  }t        j
                         \  }}t        j                          t        j
                         \  }}| j                  ||       | j                  ||       d}t        |      \  }}t        j
                         \  }	}
| j                  |
|	       | j                  |
|       | j                  |
|z
  |       y )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46u 	 "446uu-u% +H5]"446uu-5%(x8r	   c                     t        j                          | j                  t        j                                t        j                          | j                  t        j                                y rN   )r!   rx   assertFalserq   rs   
assertTruert   s    r   test_is_tracingz&TestTracemallocEnabled.test_is_tracing%  sF    //12..01r	   c                    t        d      \  }}t        j                         }| j                  |j                  d   j
                  j                  d       |j                  t        j                         | j                  t        j                  t        j                         t        j                  j                  t        j                        }| j                  |j                  |j                         t        j                          | j!                  t"              5 }t        j                          d d d        | j                  t%        j&                        d       y # 1 sw Y   /xY w)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,  s
   $S)V ,,. 	8??1-77DDbI 	i&&'	(()*:*:;  ((--i.>.>?	))8??; 	|, 	(%%'	(R\\*:	;	( 	(s   E""E+c                 f   t        j                         }d|_        |j                  t        j
                         | j                  t        j                  t        j
                         t         j                  j                  t        j
                        }| j                  |j                  d       y )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  sx    ,,."i&&'	(()*:*:;  ((--i.>.>?	,,e4r	   c                 ~    t        j                         syd}t        |      \  }}t        j                  |      }|yy)Nr,   r   r4   r   )r!   rq   r*   r   r   s        r   
fork_childz!TestTracemallocEnabled.fork_childP  sC    %%'+H5]44S9	 r	   c                     t        j                         }|s)d}	 | j                         }t        j                  |       y t	        j
                  |d       y # t        j                  |       w xY w)Nr   r   )exitcode)osforkr   _exitr   wait_process)rg   pidr   s      r   	test_forkz TestTracemallocEnabled.test_fork]  sT     ggiH#??,"  q1 "s   A A/c                 ,   t        j                          t        j                  d       d } |d      j                  d   }t        j                  |      }| j                  d|d   j                         | j                  d|d   j                         y )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{    !	
 dq!44S9	()B-*@*@A+Yr]-C-C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   sy    *33(3(%8 .6"BH&902;2	5 W2 2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y)TestSnapshoti  c                    dg}t        j                         5 }|j                  t        j                  t
        dd             |j                  t        j                  t
        dd             |j                  t        j                  t
        d|             t        j                         }| j                  |j                  d       | j                  t        |j                        d       |j                  d	   }| j                  |j                  d       | j                  |j                  j                  d
       | j                  t        |j                        d       | j                  |j                  d	   j                  d       | j                  |j                  d	   j                  d       d d d        y # 1 sw Y   y xY w)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}  sd   01
!!# 	;u[,:>!@ A[:O:;!= >[-:D!F G #002HX55q9S115OOA&EUZZ+U__992>S115U__Q/88&AU__Q/66:!	; 	; 	;s   FG  G	c                 :   t               \  }}t        j                  dd      }t        j                  ddd      }t        j                  ddd      }t        |j                  j
                        }|j                  |f      }| j                  |j                  j
                  g d       | j                  |j                  j
                  |       |j                  ||f      }| j                  |j                  j
                  g d       |j                  d	      }	| j                  |	|       | j                  |	j                  |j                         | j                  |	j                  |j                         | j                  t        |j                  |       y )
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  sT   .0)$$UF3$$T615$$T615x667 **G:6	))11 4
 	 	00/B ++Wg,>?	))11 4
 	 **2.	H-))8??;))8??;)X%;%;WEr	   c                    t               \  }}t        j                  ddd      }t        j                  ddd      }t        |j                  j
                        }|j                  |f      }| j                  |j                  j
                  g d       |j                  |f      }| j                  |j                  j
                  g d       y )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)$$UF1=$$T6!<x667 **G:6	))11 4
 	 **G:6	))11 4
 	r	   c                 `   t               \  }}t        j                  dd      }t        j                  dd      }|j                  |f      }| j	                  |j
                  j                  g d       |j                  |f      }| j	                  |j
                  j                  dg       y )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)**5;**4: **G:6	))11 4
 	 **G:6	))11*4
 	r	   c                    t               \  }}t        dd      }t        dd      }t        dd      }t        dd      }t        dd	      }|j                  d
      }| j                  |t	        j
                  |dd      t	        j
                  |dd      t	        j
                  |dd      t	        j
                  |dd      g       |j                  d
      }	| j                  |	t	        j
                  |dd      t	        j
                  |dd      t	        j
                  |dd      g       |j                  |d
      }
| j                  |
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       y )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)Q/!&!,!&!,!&!,#FC0 $$X.!!&"a0!!&"a0!!$1-!!&!Q/	"
 	 %%h/!!&$2!!(C3!!&"a0"
 	 ))(H=
%%fdD!Q?%%hS!Q?%%faa<%%dAr1b9%%fb!Q:&
 	r	   c                    t               \  }}t        d      }t        d      }t        d      }t        d      }|j                  d      }| j                  |t	        j
                  |dd      t	        j
                  |dd	      t	        j
                  |d
d      g       |j                  d      }| j                  |t	        j
                  |dd      t	        j
                  |dd      g       |j                  |d      }	| j                  |	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       y )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+  r,  diffs
             r   test_snapshot_group_by_filez(TestSnapshot.test_snapshot_group_by_file  s`   .0)!+.!&)!&)!&) $$Z0!!$A.!!$A.!!$1-"
 	 %%j1!!$a0!!$Q/"
 	 ##Hj9%%dD$1=%%dCa;%%dAsAr:%%dAr1b9	 
 	r	   c                    t               \  }}t        dd      }t        dd      }t        d      }t        d      }|j                  d      }| j                  |t	        j
                  |dd      t	        j
                  |d	d
      t	        j
                  |dd      t	        j
                  |dd      g       t        d      }|j                  d      }	| j                  |	t	        j
                  |dd      t	        j
                  |dd      t	        j
                  |d	d
      g       |j                  |d      }
| j                  |
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       | j                  t        |j                  dd       y )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+  tb5r,  r3  s              r    test_snapshot_group_by_tracebackz-TestSnapshot.test_snapshot_group_by_traceback*  s   .0) [1[1$()$$[1!!#r1-!!#r1-!!#q!,!!#q!,	"
 	 &%%k2!!#tQ/!!#sA.!!#r1-"
 	 ##Hk:%%c4q!<%%c3Q:%%c1c1b9%%c1b!R8%%c2q!Q7 
 	 	*"--{t 	 	Mr	   c                    t               \  }}t        d      }t        d      }t        d      }t        dd      }t        dd      }t        dd      }t        dd      }	|j                  dd	      }
| j	                  |
t        j                  |d
d      t        j                  |dd      t        j                  |dd      g       |j                  dd	      }
| j	                  |
t        j                  |dd      t        j                  |	dd      t        j                  |dd      t        j                  |dd      t        j                  |dd      g       y )Nr@   r0   r2   r,   r8   r   r3   rQ   Tb   r/  r=   r   r:   r  r4   )rL   rX   rU   r"  rf   r!   r#  )rg   rI   rK   r&  r0  r1  r'  r(  r)  tb_b_4statss              r   !test_snapshot_group_by_cumulativez.TestSnapshot.test_snapshot_group_by_cumulativeP  s?   .0)!+.!&)!&)!&!,!&!,!&!,!&!, ##J5!!$A.!!$A.!!$1-!
 	 ##Hd3!!&"a0!!&"a0!!&"a0!!$1-!!&!Q/!
 	r	   c                     t               \  }}|j                  d   }| j                  t        |      d       |j                  }| j                  t        |      d       |d   }| j                  t        |      d       y )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  sk    .0)"U^4OO	Y2!UX.r	   c                     t               \  }}|j                  d      }|d   }| j                  t        |      d       y )Nr   r   z(b.py:1: size=66 B, count=1, average=66 B)rL   r"  rf   re   rg   rI   rK   r@  stats        r   test_statistic_formatz"TestSnapshot.test_statistic_formatu  s@    .0)##H-QxTC	Er	   c                     t               \  }}|j                  |d      }|d   }| j                  t        |      d       y )Nr   r   z;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rL   r$  rf   re   rE  s        r   test_statistic_diff_formatz'TestSnapshot.test_statistic_diff_format|  sB    .0)$$Xx8QxTV	Xr	   c                     t               \  }}| j                  |j                  d d |j                  d   |j                  d   f       |j                  d   j                  }| j                  |d d |d   |d   f       y )Nr,   r   r   )rL   rf   r   rS   )rg   rI   rK   rS   s       r   test_sliceszTestSnapshot.test_slices  s    .0)!,"//!,hooa.@A	C OOA&00	2A#A,	!5	7r	   c                 r   t               \  }}d }t        j                  j                  d|      5  |j                  d   j
                  }| j                  |j                         g d       | j                  |j                  d      dd	g       | j                  |j                  d
      ddg       | j                  |j                  d      g d       | j                  |j                  dd      dd	g       | j                  |j                  d
d      ddg       d d d        y # 1 sw Y   y xY w)Nc                     d| d|dS )Nz  <z, rd   ra   rP   s     r   getlinez3TestSnapshot.test_format_traceback.<locals>.getline  s    #+V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   )limitrR  rS  r
   rP  rQ  T)most_recent_first)rR  rS  rP  rQ  )rT  rU  )rL   unittestmockr   r   rS   rf   format)rg   rI   rK   rN  tbs        r   test_format_tracebackz"TestSnapshot.test_format_traceback  s;   .0)	5]]  !@-4 ! 6 	0#--BRYY[/0 RYYQY/5-/0 RYYRY05-/0 RYYY>/0 RYYQ$YG5-/0 RYYR4YH5-/07	0 	0 	0s   C2D--D6N)rj   rk   rl   maxDiffr  r  r  r  r-  r4  r<  rA  rC  rG  rI  rK  rZ  ra   r	   r   r   r   z  sO    G;*$FL6*!F>$ML8/EX7!0r	   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestFiltersr   c                 j   t        j                  dd      }| j                  |j                  d       | j                  |j                  d       | j                  |j                         | j                  |j                  d       t        j                  dddd      }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       t        j                  dddd      }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  t        t        |dd       y )NTabcFztest.pyr|   )	inclusivefilename_patternr   
all_framesra  )r!   r
  rf   r`  ra  r   r   rb  r   AttributeErrorsetattrrg   r   s     r   test_filter_attributesz"TestFilters.test_filter_attributes  sS   tU+d+++U3!((#u- uid;e,++Y73't, SVcghe,++Y73't, 	.'16H%Pr	   c                 \
   t        j                  dd      }| j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             t        j                  dd      }| j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             t        j                  ddd      }| j	                  |j                  dd             | j                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             t        j                  ddd      }| j                  |j                  dd             | j	                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             t        j                  ddd      }| j                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             | j	                  |j                  dd             t        j                  ddd      }| j	                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             | j                  |j                  dd             y )NTr_  r   r8   r.   12356F)r!   r
  r   _match_framer   re  s     r   test_filter_matchzTestFilters.test_filter_match  s   tU+ua01ua01ub12343445ue,q12q12r23w23w23w34 tUA.q12ua01r23343445ueQ/ua01q12ub12w23w23w34 tUA.ua01q12r23343445ueQ/q12ua01ub12w23w23w34r	   c                 6   d }| j                   |ddd             | j                   |ddd             | j                   |ddd             | j                   |ddd             | j                   |ddd             | j                   |ddd             y )Nc                 R    t        j                  | |      }|j                  |d      S rW   r!   r
  ri  )r`  rQ   patternr   s       r   fnmatchz7TestFilters.test_filter_match_filename.<locals>.fnmatch  s%    ""9g6A>>(A..r	   Tr_  rh  r@   F)r   r   rg   ro  s     r   test_filter_match_filenamez&TestFilters.test_filter_match_filename   s    	/ 	eU34w67{E:;u56w67{E:;r	   c                 z   d }| j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd	             | j                   |dd
             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             t        j                  dk(  ra| j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             n`| j                   |dd             | j                   |dd             | j                   |dd             | j                   |dd             t        j                  dk(  ra| j                   |dd              | j                   |d d             | j                   |d!d"             | j                   |d#d$             n`| j                   |dd              | j                   |d d             | j                   |d!d"             | j                   |d#d$             | j                   |d%d             y )&Nc                 R    t        j                  d|      }|j                  | d      S )NTr   rm  )rQ   rn  filters      r   ro  z=TestFilters.test_filter_match_filename_joker.<locals>.fnmatch  s'     ''g6F&&x33r	   r_   *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   namerp  s     r    test_filter_match_filename_jokerz,TestFilters.test_filter_match_filename_joker  s&   	4
 	+,U+,B(C() 	u-./0./ 	t,-v./-.01 	u-.&12./623 	12Y78'23i89 	010177d?OOGE512OOGGW56OOGGV45OOGFG45 WUE23WWg67WWf56WVW5677d?OOGFF34OOGFF34OOGHh78OOGHh78 WVV45WVV45WXx89WXx89 	&12r	   c                 d   d}d}d}d}t        j                  ddd      }| j                  |j                  |             | j                  |j                  |             | j	                  |j                  |             | j	                  |j                  |             t        j                  ddd      }| j	                  |j                  |             | j                  |j                  |             | j	                  |j                  |             | j	                  |j                  |             t        j                  ddd      }| j	                  |j                  |             | j	                  |j                  |             | j                  |j                  |             | j                  |j                  |             t        j                  ddd      }| j                  |j                  |             | j	                  |j                  |             | j                  |j                  |             | j                  |j                  |             t        j                  dd	d      }| j                  |j                  |             | j                  |j                  |             | j                  |j                  |             | j	                  |j                  |             t        j                  dd	d      }| j	                  |j                  |             | j	                  |j                  |             | j                  |j                  |             | j                  |j                  |             t        j                  dd	d      }| j                  |j                  |             | j                  |j                  |             | j	                  |j                  |             | j	                  |j                  |             y )
N)r/   )r2   r4   )r1   )r2   r8   ))rD   r8   r?   r>   Tr2   )rb  Fr@   )r!   r
  r   _match_tracebackr   )rg   t1t2t3unknownr   s         r   test_filter_match_tracez#TestFilters.test_filter_match_traceR  s@   '',%tV=**2./**2./++B/0++G45tV>++B/0**2./++B/0++G45uf>++B/0++B/0**2./**734uf?**2./++B/0**2./**734ukeD**2./**2./**2./++G45t[TB++B/0++B/0**2./**734ukdC**2./**2./++B/0++G45r	   N)	rj   rk   rl   r[  rf  rj  rq  r  r  ra   r	   r   r]  r]    s$    GQ225h<C3J.6r	   r]  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y)TestCommandLinec                 l    d}t        d|      \  }}}|j                         }| j                  |d       y )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  s5    D-dD9FF*r	   z6Cannot run -E tests when PYTHON env vars are required.c                 r    d}t        dd|d      \  }}}|j                         }| j                  |d       y)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  s=     E-dD$RUVFF*r	   c                 p    d}t        d|d      \  }}}|j                         }| j                  |d       y )Nr  r  0r  r  r  r  s        r   test_env_var_disabledz%TestCommandLine.test_env_var_disabled  s7    D-dDCPFF*r	   c                 p    d}t        d|d      \  }}}|j                         }| j                  |d       y )Nr  r  r  r  s   Truer  r  s        r   test_env_var_enabled_at_startupz/TestCommandLine.test_env_var_enabled_at_startup  s7    D-dDCPFF)r	   c                 p    d}t        d|d      \  }}}|j                         }| j                  |d       y )N<import tracemalloc; print(tracemalloc.get_traceback_limit())r  10r  s   10r  r  s        r   test_env_limitzTestCommandLine.test_env_limit  s7    M-dDDQFF'r	   c                     t        j                         5  t        ddt        |            \  }}}d d d        dv ry d|v ry | j	                  d|       y # 1 sw Y   (xY w)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  sm    ((* 	/!6f"%f+"/B	/
 @6I9VC		'z23	/ 	/s   AA!c                     t         D ].  }| j                  |      5  | j                  |       d d d        0 y # 1 sw Y   ;xY wNr   )INVALID_NFRAMEsubTestr  rg   r   s     r   test_env_var_invalidz$TestCommandLine.test_env_var_invalid  sG    $ 	3FV, 3**623 3	33 3	   9A	c                    dD ]o  \  }}| j                  ||      5  d}t        d|d|      \  }}}|j                         }| j                  |t	        |      j                  d             d d d        q y # 1 sw Y   |xY w)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Hf
 x? FU%5dHdD%Q"FF  V););G)DE	F F		F
F Fs   AA66A?	c                     dd|z  ddf}t        j                         5  t        | \  }}}d d d        dv ry d|v ry | j                  d|       y # 1 sw Y   (xY w)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  su    &/v>((* 	>!6!=B	> @6I=G		'z23	> 	>s   AAc                     t         D ].  }| j                  |      5  | j                  |       d d d        0 y # 1 sw Y   ;xY wr  )r  r  r  r  s     r   test_sys_xoptions_invalidz)TestCommandLine.test_sys_xoptions_invalid  sG    $ 	8FV, 8//78 8	88 8r  Nneed _testcapic                 $    d}t        ddd|       y )Nz2import _testcapi; _testcapi.test_pymem_alloc0(); 1r  r!   r  )r   )rg   r   s     r   test_pymem_alloc0z!TestCommandLine.test_pymem_alloc0  s     D}dD9r	   )rj   rk   rl   r  rV  skipIfr   r  r  r  r  r  r  r  r  r  	_testcapir  ra   r	   r   r  r    s    + X__57MO+O++*(
43

F	48
 X__Y$&(89: ::r	   r  r  c                   `    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y)TestCAPIi@  c                     t        j                         r| j                  d       d| _        d| _        t        | j                        d   | _        t        | j                        | _        y )Nrp   r8   r|   r   )	r!   rq   rr   r   r'   r*   r   idptrrt   s    r   ru   zTestCAPI.setUp  sO    !!#MMGH	!$)),Q/ dhh<r	   c                 ,    t        j                          y rN   rw   rt   s    r   ry   zTestCAPI.tearDown  rz   r	   c                     t        j                  | j                  | j                        }|t	        j
                  |      S y rN   )r  tracemalloc_get_tracebackr   r  r!   r$   )rg   r   s     r   get_tracebackzTestCAPI.get_traceback  s6    44T[[$((K((00r	   c                     t        |d      }t        j                  | j                  | j                  | j
                  |       |S )Nr   )r   r  tracemalloc_trackr   r  r'   )rg   release_gilr   r   s       r   trackzTestCAPI.track  s6    FA&##DKK499$/	1r	   c                 X    t        j                  | j                  | j                         y rN   )r  tracemalloc_untrackr   r  rt   s    r   untrackzTestCAPI.untrack  s    %%dkk488<r	   c                     t        j                         }t        j                  d| j                        }|j	                  |g      }t        d |j                  D              S )NTc              3   4   K   | ]  }|j                     y wrN   r   ).0r   s     r   	<genexpr>z-TestCAPI.get_traced_memory.<locals>.<genexpr>  s     ;%5::;s   )r!   r   r  r   r  r   r   )rg   rI   domain_filters      r   r   zTestCAPI.get_traced_memory  sM    ,,.#00t{{C))=/:;8??;;;r	   c                 >   d}t        j                  |       t        j                         d   }| j                  ||      }| j	                  | j                         t        j                  |             | j	                  | j                         | j                         y )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++-$..v6	8 	//1499=r	   c                 &    | j                  d       y )NFr  rt   s    r   
test_trackzTestCAPI.test_track  s    r	   c                 &    | j                  d       y )NTr  rt   s    r   test_track_without_gilzTestCAPI.test_track_without_gil  s     	r	   c                     d}t        j                  |       | j                          | j                  |      }| j                  | j	                         t        j
                  |             y )Nr8   r  )r!   rs   r  rf   r  r$   )rg   r   r   s      r   test_track_already_trackedz#TestCAPI.test_track_already_tracked  sY    &! 	

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

T//12//1499= 	$,,.///115 	r	   c                    t        j                          t        j                          | j                  t              5  | j                          d d d        | j                  | j                                y # 1 sw Y   )xY wrN   )r!   rs   rx   r   r   r  r   r  rt   s    r   test_stop_trackzTestCAPI.test_stop_track:  s]    |, 	JJL	$,,./	 	s   A77B c                     t        j                          | j                          t        j                          | j	                  t
              5  | j                          d d d        y # 1 sw Y   y xY wrN   )r!   rs   r  rx   r   r   r  rt   s    r   test_stop_untrackzTestCAPI.test_stop_untrackB  sO    

|, 	LLN	 	 	s   A((A1N)Fr   )rj   rk   rl   r[  ru   ry   r  r  r  r   r  r  r  r  r  r  r  ra   r	   r   r  r    sH    G
 =<
> 
8 0r	   r  __main__)%r  r   r   r!   rV  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   r]  r  r  r  rj   mainra   r	   r   <module>r     sA    	 
   J J  "
 "CMM#& I!B2)))JH%% J&LEX.. LE^s08$$ s0l	P6(## P6fY:h'' Y:x d"$45hx   h 6hV zHMMO {!  Is   D DD