
    z%i{                         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 Zd	 Zd
 Zy# e$ r
 d dlZd ZY w xY w)    N)
isabstract)support)	os_helper)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     L/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/libregrtest/refleak.py	<genexpr>z_get_dump.<locals>.<genexpr>   s     NSC 0Ns   !)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           
        . 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}..fd}| j*                  \  }}}t,        j.                  j1                  t2        j4                  |      }||z   }t7        t)        |            }dg|z  }dg|z  }dg|z  }t        j8                  }t        j:                  }t        j<                  }t2        j>                  }dx}x}x}}| j@                  sEtC        d|d	t        jD                  
       tC        d|dz  dz   z  d| t        jD                  d       d} tG        ||||	|
       tI        jJ                          |D ]  }! |       } tG        ||||	|
       tI        jJ                           |       }" |       |"z
  }# |       |"dz  z
  }$ |       }%| j@                  stC        ddt        jD                  d        ||$|z
        ||!<    ||#|z
        ||!<    ||%|z
        ||!<   |#}|$}|%}|"} | j@                  stC        t        jD                  
       d }&d }'d}(|d|&f|d|&f|d|'ffD ]|  \  })}*}+|)|d }) |+|)      s|d|)d|*dtM        |)      },tC        |,t        jD                  d       tO        |dd      5 }-tC        |,|-
       |-jQ                          ddd       d}(~ |(| fS # t        $ r d}	Y :w xY wc c}w c c}w # 1 sw Y   -x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dash_R.<locals>.get_pooled_int>   s    ""5%00r   	beginningrepetitions)file
1234567890
      T)r"   flush   . )endr"   r&   c                 &    t        d | D              S )Nc              3   &   K   | ]	  }|d k\    yw)r%   N )r   deltas     r   r   z2dash_R.<locals>.check_rc_deltas.<locals>.<genexpr>   s     2%5A:2s   )alldeltass    r   check_rc_deltaszdash_R.<locals>.check_rc_deltasy   s     26222r   c                     t        |       S r
   )anyr0   s    r   check_fd_deltaszdash_R.<locals>.check_fd_deltas   s    6{r   F
referenceszmemory blockszfile descriptorsz leaked  z, sum=azutf-8)encoding))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
huntrleaksospathjoinr   SAVEDCWDlistgetallocatedblocksr   getunicodeinternedsizefd_countquietprintstderrdash_R_cleanupr   
gc_collectsumopenr&   )/ns	test_name	test_funcr:   collectionsfspspicrE   zdcabcsr8   rH   r   r   r   nwarmupntrackedfnamerepcount	rep_range	rc_deltasalloc_deltas	fd_deltasrS   r   rT   rU   	rc_beforealloc_before	fd_beforeinterned_beforeresultsiinterned_afteralloc_afterrc_afterfd_afterr2   r5   failedr1   	item_namecheckermsgrefrepr   s/                                                 @r   dash_Rr}      s    3*+ $ % 	%
 M 
		!	B				$	$	&B

!
!
&
&
(C4 ,,113D5@__5L5LM+M *#%%'3%/ 	*C!#q)DI	** +0t*<=u=H1  "}}GXuGGLL++U3E!H U8_%IhI3>LhI//++ 77!!H=>>I>>y?88k8]D|Xr\A-.	:	 G2r3T* )+r2sC. 01(*^;#%(:::xx#2CJJd;%h&:;	!(|)CDQ%h&:;	!"		(3)6 883::3 F	L/2	8	&8' "	7 !6?69c&k;C#CJJd3eS73 vc' F G[  
 N >t s*   ;O 3O
OO!OO!O*	c                 ^   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 ]h  }
|
j#                         |
gz   D ]O  }|j%                  |t'                     D ]   } |       |j)                   |              " |j+                          Q j t-                t        j.                          y # t        $ r Y w xY wc c}w )Nr   )r:   r;   r@   rA   rB   clearupdater=   rD   rE   rF   rG   rH   rI   rJ   filterr   rK   getr   register_abc_caches_clearr   _clear_type_cache)ra   rb   rc   rd   re   r:   r`   rE   r8   abs_classesrH   r   r   s                r   rY   rY      si    HQ  "!!"%!!#""3'3 	&&,,.&&--c2 9D8O8OP17;??A.PKP[1K $%%'3%/ 	$CxxSU+ (5$LL'( !!#		$$ N +   Qs   F  F*	F'&F'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   chrrR   )srs   s     r   r?   r?      s[    eCjA3Z 	!AaC 3Z SV r3 !s   A%)rN   r=   r@   inspectr   testr   test.supportr   test.libregrtest.utilsr   _abcr   rG   r   r}   rY   r?   r-   r   r   <module>r      sR    	 
    " /
JEP!Ho  JJJs   6 AA