
    F\h6&                         S SK r S SKrS SKrS SKJr  S SKJr  S SKrS SKJ	r	  S SK
Jr  S SK
Jr  SSKJr  SS	KJr   S S
KJr  S rS rS\S\4S jrS rSS jrg! \ a
    S SKrS r N'f = f)    N)
isabstract)Any)support)	os_helper)refleak_helper   )HuntRefleak)clear_caches)	_get_dumpc                     [        S U R                   5       5      nXR                  U R                  U R                  4$ )Nc              3   N   #    U  H  n[         R                  " U5      v   M     g 7fN)weakrefref).0objs     //usr/lib/python3.13/test/libregrtest/refleak.py	<genexpr>_get_dump.<locals>.<genexpr>   s     N<MSC 0 0<Ms   #%)set_abc_registry
_abc_cache_abc_negative_cache_abc_negative_cache_version)clsregistry_weakrefss     r   r   r      s?      NC<M<MNN!>>'')H)HJ 	J    c                     [         R                  c  g SS Kn[        U S5       nUR	                  [         R                  U5        S S S 5        S [         l        g ! , (       d  f       N= f)Nr   xb)r   junit_xml_listpickleopendump)filenamer!   fps      r   save_support_xmlr&      sJ    %	h	G**B/ 
!G 
	s   !A
A&c                      [        U S5      nSS KnU   UR                  U5      nS S S 5        [        R
                  " U 5        W[        l        g ! [         a     g f = f! , (       d  f       N@= f)Nrbr   )r"   FileNotFoundErrorr!   loadosunlinkr   r    )r$   r%   r!   xml_lists       r   restore_support_xmlr.   &   s]    (D! 	;;r? 
IIh%G   
s   A A 
AA 
A.hunt_refleakquietc           
      
  ^7 SSK nSSKn[        [        S5      (       d  [	        S5      e[        5         [        R                  SS nUR                  R                  5       n[        R                  R                  5       n[        R                  R                  5       [        R                  R                  5       4n	 SSKn
U
R                  R                  5       n0 nUR"                  R$                   Vs/ s H  n['        UR"                  U5      PM     sn H@  n[)        U5      (       d  M  UR+                  5       U/-    H  n[-        U5      S   X'   M     MB     [/        SS5       Vs0 s H  nUU_M     snm7U74S jnUR0                  nUR2                  nUR4                  nUU-   n[7        [/        U5      5      nS/U-  nS/U-  nS/U-  n[        R8                  n[        R:                  n[        R<                  n[>        R@                  nS=n=n=n n!U(       dO  [C        SUS	[        RD                  S
9  SUS-  S-   -  SU n"U"SU S-   U"US -   n"[C        U"[        RD                  SS9  Sn#Sn$[G        XgXX5        [H        RJ                  " 5         U GH*  n%[L        RN                  n&S[L        l'         U" 5       n$U&[L        l'        [Q        U#5        [G        XgXX5        [H        RJ                  " 5         U" SS9n'U" 5       U'-
  n(U" 5       n)U" 5       n*U" U)U-
  5      UU%'   U" U(U-
  5      UU%'   U" U*U -
  5      UU%'   U(       di  [S        UU%   UU%   UU%   5      n+U+S::  a  Sn,OU+S:  a  SU+   n,OSn,U%U:X  a  [C        SS[        RD                  SS9  [C        U,S[        RD                  SS9  A+A,U(nU)nU*n U'n![U        U#5        GM-     U(       d  [C        [        RD                  S
9  S n-S n.Sn/USU-4USU-4USU.44 H  u  n0n1n2U0US n0U2" U05      n3[W        U05      n4U3(       d	  U4(       d  M/  U < SU0< SU1< S [Y        U05      < 3n5[C        U5S[        RD                  S!9  U3(       aJ  [C        [        RD                  SS9  [[        US"S#S$9 n6[C        U5U6S
9  U6R]                  5         SSS5        Sn/M  [C        S%[        RD                  SS9  M     U/U$4$ ! [          a    Sn GN f = fs  snf s  snf ! U&[L        l'        f = f! , (       d  f       N`= f)&zRun a test multiple times, looking for reference leaks.

Returns:
    False if the test didn't leak references; True if we detected refleaks.
r   Ngettotalrefcountz9Tracking reference leaks requires a debug build of Pythonii  c                 &   > TR                  X 5      $ r   )
setdefault)valueint_pools    r   get_pooled_int'runtest_refleak.<locals>.get_pooled_inte   s    ""500r   	beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))file
1234567890
   r   :T)r:   flushzrefleak-xml.tmp)_only_immortal.)
r@   123456789X  )endr:   r>   c                 &    [        S U  5       5      $ )Nc              3   *   #    U  H	  oS :  v   M     g7f)r   N )r   deltas     r   r   ;runtest_refleak.<locals>.check_rc_deltas.<locals>.<genexpr>   s     26%A:6s   )alldeltass    r   check_rc_deltas(runtest_refleak.<locals>.check_rc_deltas   s     26222r   c                     [        U 5      $ r   )anyrT   s    r   check_fd_deltas(runtest_refleak.<locals>.check_fd_deltas   s    6{r   F
referenceszmemory blockszfile descriptorsz leaked z, sum=)rM   r:   azutf-8)encodingz (this is fine))/copyregcollections.abchasattrsys	Exceptionwarm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache	linecachecache_interactive_cache	zipimport_zip_directory_cacheImportErrorabc__all__getattrr   __subclasses__r   rangewarmupsrunsr$   listgetallocatedblocksr2   getunicodeinternedsizer   fd_countprintstderrdash_R_cleanupr   
gc_collectr   _hunting_for_refleaksr&   maxr.   rY   sumr"   r>   )8	test_name	test_funcr/   r0   r_   collectionsfspspiclinecache_datarm   zdcabcsr]   rp   r   r5   r7   ru   rv   r$   repcount	rep_range	rc_deltasalloc_deltas	fd_deltasrx   r2   ry   rz   	rc_beforealloc_before	fd_beforeinterned_immortal_beforenumbersxml_filenameresulticurrentinterned_immortal_afteralloc_afterrc_afterfd_aftertotal_leakssymbolrV   rZ   failedrU   	item_namecheckerfailing
suspiciousmsgrefrepr6   s8                                                          @r   runtest_refleakr   4   s    3*++ $ % 	%
 M 
		!	B				$	$	&B

!
!
&
&
(C __))+Y-I-I-N-N-PPN4
 ,,113D5@__5L5LM5L+5LM#%%'3%/C!#q)DI 0 N +0t*<=*<u*<=H1 ""GD$$H~H U8_%IhI3>LhI//++ 77!!HFGGIGGy+Ck8 &6::	  2!12IX>(7#c)GGH,==gCJJd3$LF23T: 66/3,	;[F3:N0&rs> #9#! )*-DD#%:%h&:;	!(|)CDQ%h&:;	!ilLOYq\JKar!!# G|cr

$?&bszz>"		#: L)c f 3::3 F	L/2	8	&8'"	7 !&/[
jj69c&k;C#2CJJ/3::T2(C':f#F+LLN ; 'cjjE)'* Fc   N >P 4;N0f ;:s6   <S 4 S)S#4S(S8SS(S58
T	c                    SS K nSS KnU [        R                  S S & UR                  R                  5         UR                  R                  U5        [        R                  R                  5         [        R                  R                  U5        Uu  p[        R                  R                  5         [        R                  R                  U	5        [        R                  R                  5         [        R                  R                  U5         SS Kn
U
R                  R                  5         U
R                  R                  U5        UR                  R                    Vs/ s H  n[#        UR                  U5      PM     nn[%        [&        U5      nU Hy  nUR)                  5       U/-    H^  nUR+                  US 5      nUb6  UR-                  5         U H   nU" 5       nUc  M  UR/                  U5        M"     UR1                  5         M`     M{     [3        5         [        R4                  " 5         g ! [         a     Nf = fs  snf )Nr   )r_   r`   re   rf   rg   clearupdaterb   ri   rj   rl   rk   rm   rn   ro   rp   rq   rr   filterr   rs   get_abc_registry_clearregister_abc_caches_clearr
   _clear_internal_caches)r   r   r   r   r   r   r_   r   lcachelinteractiverm   r]   abs_classesrp   r   refsr   subclasss                     r   r}   r}      s    HQ  "!!"%!!#""3')F  &&(  ''5OOOO6"3 	&&,,.&&--c2 9D8O8OP8O17;??A.8OKP[1K%%'3%/C88C&D'')C"uH+X.   !!# 0  N  3   Qs   H/  H?/
H<;H<c                      [        [        S5      5      n [        S5       H
  nXUS-      M     [        S5       Vs/ s H  n[        U5      PM       n[        [        SS5      5        g s  snf )N   r   i  )bytesrt   chrrw   )sr   s     r   rd   rd     sX    eCjA3Z	AaC  3Z ZSVZ r3 !s   A()returnN)r+   rb   re   inspectr   typingr   rj   testr   test.supportr   r   runtestsr	   utilsr
   _abcr   ro   r   r&   r.   boolr   r}   rd   rP   r   r   <module>r      sz    	 
      " ' ! 
J"&q"-qqh*!ZI  JJJs   A A*)A*