
    8bh"                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 ddlmZ ddlmZ 	 d d	lmZ d Zd ZdedefdZd Zd Zy# e$ r
 d dlZd
 ZY #w xY w)    N)
isabstract)Any)support)	os_helper   )HuntRefleak)clear_caches)	_get_dumpc                     t        d | j                  D              }|| j                  | j                  | j                  fS )Nc              3   F   K   | ]  }t        j                  |        y wN)weakrefref).0objs     B/opt/python-3.12.12/usr/lib/python3.12/test/libregrtest/refleak.py	<genexpr>z_get_dump.<locals>.<genexpr>   s     N<MSC 0<Ms   !)set_abc_registry
_abc_cache_abc_negative_cache_abc_negative_cache_version)clsregistry_weakrefss     r   r
   r
      sA      NC<M<MNN!3>>'')H)HJ 	J    c                     t         j                  y dd l}t        | d      5 }|j	                  t         j                  |       d d d        d t         _        y # 1 sw Y   d t         _        y xY w)Nr   xb)r   junit_xml_listpickleopendump)filenamer   fps      r   save_support_xmlr$      sO    %	h	G**B/ 
!G 
!Gs   !AA+c                     	 t        | d      }dd l}|5  |j                  |      }d d d        t	        j
                  |        t        _        y # t        $ r Y y w xY w# 1 sw Y   9xY w)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           
        5 ddl }ddl}t        t        d      st	        d      t                t        j                  dd }|j                  j                         }t        j                  j                         }	 ddl}	|	j                  j                         }
i }|j                  j                  D cg c]  }t!        |j                  |       c}D ]8  }t#        |      s|j%                         |gz   D ]  }t'        |      d   ||<    : t)        dd      D ci c]  }|| c}55fd}|j*                  }|j,                  }|j.                  }||z   }t1        t)        |            }dg|z  }dg|z  }dg|z  }t        j2                  }t        j4                  }t        j6                  }t8        j:                  }dx}x}x}} |sUt=        d|d	t        j>                  
       d|dz  dz   z  d| }!|!d| dz   |!|d z   }!t=        |!t        j>                  d       d}"d}#tA        ||||
|       tC        jD                          |D ]
  }$ |       }#tG        |"       tA        ||||
|       tC        jD                           |d      }% |       |%z
  }& |       |%dz  z
  }' |       }( ||'|z
        ||$<    ||&|z
        ||$<    ||(|z
        ||$<   |sltI        ||$   ||$   ||$         })|)dk  rd}*n|)dk  rd|)   }*nd}*|$|k(  rt=        ddt        j>                  d       t=        |*dt        j>                  d       ~)~*|&}|'}|(}|%} tK        |"        |st=        t        j>                  
       d }+d },d}-|d|+f|d|+f|d|,ffD ]  \  }.}/}0|.|d }. |0|.      }1tM        |.      }2|1s|2s$| d |.d|/d!tO        |.      }3t=        |3dt        j>                  "       |1rRt=        t        j>                  d       tQ        |d#d$%      5 }4t=        |3|4
       |4jS                          ddd       d}-t=        d&t        j>                  d        |-|#fS # t        $ r d}
Y w xY wc c}w c c}w # 1 sw Y   JxY w)'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                 (    j                  | |       S r   )
setdefault)valueint_pools    r   get_pooled_intz'runtest_refleak.<locals>.get_pooled_int^   s    ""5%00r   	beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))file
1234567890
   r   :T)r7   flushzrefleak-xml.tmp)_only_immortal   .)
r>   123456789X  )endr7   r;   c                 &    t        d | D              S )Nc              3   &   K   | ]	  }|d k\    yw)r   N )r   deltas     r   r   z;runtest_refleak.<locals>.check_rc_deltas.<locals>.<genexpr>   s     26%5A:6s   )alldeltass    r   check_rc_deltasz(runtest_refleak.<locals>.check_rc_deltas   s     26222r   c                     t        |       S r   )anyrQ   s    r   check_fd_deltasz(runtest_refleak.<locals>.check_fd_deltas   s    6{r   F
referenceszmemory blockszfile descriptorsz leaked z, sum=)rK   r7   azutf-8)encodingz (this is fine))*copyregcollections.abchasattrsys	Exceptionwarm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache	zipimport_zip_directory_cacheImportErrorabc__all__getattrr   __subclasses__r
   rangewarmupsrunsr"   listgetallocatedblocksr0   getunicodeinternedsizer   fd_countprintstderrdash_R_cleanupr   
gc_collectr$   maxr,   rU   sumr    r;   )6	test_name	test_funcr-   r.   rZ   collectionsfspspicre   zdcabcsrX   rh   r   r3   r5   rm   rn   r"   repcount	rep_range	rc_deltasalloc_deltas	fd_deltasrp   r0   rq   rr   	rc_beforealloc_before	fd_beforeinterned_immortal_beforenumbersxml_filenameresultiinterned_immortal_afteralloc_afterrc_afterfd_aftertotal_leakssymbolrS   rV   failedrR   	item_namecheckerfailing
suspiciousmsgrefrepr4   s6                                                        @r   runtest_refleakr   2   s    3*+ $ % 	%
 M 
		!	B				$	$	&B

!
!
&
&
(C4
 ,,113D5@__5L5LM5L+5LM#%%'3%/C!#q)DI 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2r3T*&r2sC. #9#! )*-DD#%(?!(CC:%h&:;	!(|)CDQ%h&:;	!ilLOYq\JKar!!# G|cr

$?&bszz>"		#: L)Y \ 3::3 F	L/2	8	&8'"	7 !&/[
j69c&k;C#2CJJ/3::T2(C':f#F+LLN ; 'cjjE)'* FY   N >l ;:s*   ;Q 3Q#
Q(Q-Q Q -Q6	c                 p   dd l }dd l}| t        j                  d d  |j                  j                          |j                  j                  |       t        j                  j                          t        j                  j                  |       	 dd l	}|j                  j                          |j                  j                  |       |j                  j                  D cg c]  }t        |j                  |       }	}t        t         |	      }	|	D ]q  }
|
j#                         |
gz   D ]X  }|j%                  |d       }|2|j'                          |D ]  } |       }||j)                  |        |j+                          Z s t-                t        j.                          y # t        $ r Y w xY wc c}w )Nr   )rZ   r[   r`   ra   rb   clearupdater]   rd   re   rf   rg   rh   ri   rj   filterr   rk   get_abc_registry_clearregister_abc_caches_clearr	   _clear_type_cache)r|   r}   r~   r   r   rZ   r{   re   rX   abs_classesrh   r   refsr   subclasss                  r   ru   ru      su    HQ  "!!"%!!#""3'3 	&&,,.&&--c2 9D8O8OP8O17;??A.8OKP[1K%%'3%/C88C&D'')C"uH+X.   !!# 0  N 3   Qs   F$  F3$	F0/F0c                      t        t        d            } t        d      D ]
  }| ||dz      t        d      D cg c]  }t        |       c} t        t        dd             y c c}w )N   r   i  )bytesrl   chrro   )sr   s     r   r_   r_     sZ    eCjA3Z	!AaC  3Z ZSVZ r3 !s   A%)r)   r]   r`   inspectr   typingr   testr   test.supportr   runtestsr   utilsr	   _abcr
   rg   r   r$   r,   boolr   ru   r_   rN   r   r   <module>r      st    	 
     " ! 
J"&g"-ggT%Pk  JJJs   A AA