
    h                         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 n# e$ r
 d dlZd ZY nw xY wd Zd	 Zd
 ZdS )    N)
isabstract)support)	os_helper)clear_caches)	_get_dumpc                 h    t          d | j        D                       }|| j        | j        | j        fS )Nc              3   >   K   | ]}t          j        |          V  d S N)weakrefref).0objs     //usr/lib/python3.11/test/libregrtest/refleak.py	<genexpr>z_get_dump.<locals>.<genexpr>   s,      NNSC 0 0NNNNNN    )set_abc_registry
_abc_cache_abc_negative_cache_abc_negative_cache_version)clsregistry_weakrefss     r   r   r      sB      NNC<MNNNNN!3>')HJ 	Jr   c           
        () ddl }ddl(t          t          d          st	          d          t                       t          j        dd         }|j        	                                }t          j
        	                                }	 ddl}|j        	                                }n# t          $ r d}Y nw xY wi }	(fd(j        j        D             D ]E}
t!          |
          s|
                                |
gz   D ]}t%          |          d         |	|<   Fd t'          dd          D             ))fd	}| j        \  }}}t*          j                            t0          j        |          }||z   }t5          t'          |                    }dg|z  }dg|z  }dg|z  }t          j        }t          j        }t          j        }t0          j        }dx}x}}| j        sJtA          d
|dt          j!                   tA          d|dz  dz   z  d|         t          j!        d           tE          |||||	           tG          j$                     |D ]} |             tE          |||||	           tG          j$                      |             |            z
  } |            } |            }| j        stA          ddt          j!        d            |||z
            ||<    |||z
            ||<    |||z
            ||<   |}|}|}| j        stA          t          j!                   d } d }!d}"|d| f|d| f|d|!ffD ]\  }#}$}%|#|d         }# |%|#          r|d|#d|$dtK          |#          }&tA          |&t          j!        d           tM          |dd           5 }'tA          |&|'           |''                                 ddd           n# 1 swxY w Y   d}"|"S )!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 Pythonc                 :    g | ]}t          j        |          S  getattrabcr   acollectionss     r   
<listcomp>zdash_R.<locals>.<listcomp>3   s%    MMM++MMMr   c                     i | ]}||S r   r   )r   values     r   
<dictcomp>zdash_R.<locals>.<dictcomp>=   s    ===u===r   ii  c                 0                         | |           S r
   )
setdefault)r%   int_pools    r   get_pooled_intzdash_R.<locals>.get_pooled_int>   s    ""5%000r   	beginningrepetitions)file
1234567890
      T)r-   flush. )endr-   r1   c                 4    t          d | D                       S )Nc              3   "   K   | ]
}|d k    V  dS )r0   Nr   )r   deltas     r   r   z2dash_R.<locals>.check_rc_deltas.<locals>.<genexpr>   s&      22%5A:222222r   )alldeltass    r   check_rc_deltaszdash_R.<locals>.check_rc_deltass   s!     226222222r   c                      t          |           S r
   )anyr9   s    r   check_fd_deltaszdash_R.<locals>.check_fd_deltas   s    6{{r   F
referenceszmemory blockszfile descriptorsz leaked  z, sum=r!   zutf-8)encoding)(copyregcollections.abchasattrsys	Exceptionwarm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache	zipimport_zip_directory_cacheImportErrorr   __all__r   __subclasses__r   range
huntrleaksospathjoinr   SAVEDCWDlistgetallocatedblocksr   _getquickenedcountfd_countquietprintstderrdash_R_cleanupr   
gc_collectsumopenr1   )*ns	test_name	test_funcrB   fspspicrM   zdcabcsr   r   r*   nwarmupntrackedfnamerepcount	rep_range	rc_deltasalloc_deltas	fd_deltasrY   r   rZ   r[   	rc_beforealloc_before	fd_beforeialloc_afterrc_afterfd_afterr;   r>   failedr:   	item_namecheckermsgrefrepr"   r)   s*                                           @@r   dash_Rr      s    NNN3*++ % $ % % 	%
 MMM 
	!!!	B			$	$	&	&B

!
&
&
(
(C4 ,1133     DMMMM[_5LMMM * *# 	%%''3%/ 	* 	*C!#q)DII	* >=%t*<*<===H1 1 1 1 1  "}GXuGLL+U33E!H U8__%%IhI3>LhI/+/!H+,,I,y8 k8]DDDD|Xr\A-.		:	 	 	 	 2r3T***  	r2sC... )(**-?-?-A-AA##%%8::x 	<#2CJd;;;;%~h&:;;	!(.|)CDDQ%~h&:;;	!"			8 3:3 3 3   F	L/2	8	&8'  "	7 !76?? 			666999c&kkk;C#CJd3333eS7333 vc''''               FMs$   	B' 'B65B6"&OO	O	c                 H   dd l }dd l| t          j        d d <   |j                                         |j                            |           t          j                                         t          j                            |           	 dd l	}|j
                                         |j
                            |           n# t          $ r Y nw xY wfdj        j        D             }t          t          |          }|D ]}}|                                |gz   D ]b}	|                    |	t%                                D ])}
 |
            |	                     |
                       *|	                                 c~t+                       t          j                     d S )Nr   c                 :    g | ]}t          j        |          S r   r   r    s     r   r#   z"dash_R_cleanup.<locals>.<listcomp>   s%    PPP17;?A..PPPr   )rB   rC   rH   rI   rJ   clearupdaterE   rL   rM   rN   rO   r   rP   filterr   rQ   getr   register_abc_caches_clearr   _clear_type_cache)rf   rg   rh   ri   rj   rB   rM   abs_classesr   r   r   r"   s              @r   r_   r_      s   NNN HQQQ  """!!"%%%!!###""3'''3 	&,,...&--c2222	     QPPP8OPPPK[11K $ $%%''3%/ 	$ 	$CxxSUU++ ( (355$LL'''!!####		$ NNN s   C 
CCc                      t          t          d                    } t          d          D ]}| ||dz             d t          d          D              t          t          dd                     d S )N   r0   c                 ,    g | ]}t          |          S r   )chr)r   rv   s     r   r#   zwarm_caches.<locals>.<listcomp>   s       SVV   r   i  )bytesrR   rX   )srv   s     r   rG   rG      ss    eCjjA3ZZ  	!AaC%  U3ZZ    r3r   )rT   rE   rH   inspectr   testr   test.supportr   test.libregrtest.utilsr   _abcr   rO   r   r   r_   rG   r   r   r   <module>r      s   				 



              " " " " " " / / / / / /
J J J JNNNJ J J J JJ  D     F    s   - <<