
    z
@h                         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 n# e$ r
 d dlZd
 ZY nw xY wdedefdZd Zd ZdS )    N)
isabstract)Any)support)	os_helper   )HuntRefleak)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   hunt_refleakquietc           
        ./ 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        }|j        }|j        }||z   }t/          t'          |                    }dg|z  }dg|z  }dg|z  }t          j        }t          j        }t4          j        }dx}x}}|sdt9          d
|dt          j                   d|dz  dz   z  d|         }|d|         dz   ||d         z   }t9          |t          j        d           d}t=          ||||	|
           t?          j                      |D ]} |            }t=          ||||	|
           t?          j                       |            } |            }  |            }! || |z
            ||<    |||z
            ||<    ||!|z
            ||<   |stC          ||         ||         ||                   }"|"dk    rd}#n|"dk     r	d|"         }#nd}#||k    rt9          ddt          j        d           t9          |#dt          j        d           ~"~#|}| }|!}|st9          t          j                   d }$d }%d}&|d|$f|d|$f|d|%ffD ]\  }'}(})|'|d         }' |)|'          }*tE          |'          }+|*s|+r| d|'d|(d tG          |'          },t9          |,dt          j        !           |*rmt9          t          j        d           tI          |d"d#$          5 }-t9          |,|-           |-%                                 ddd           n# 1 swxY w Y   d}&t9          d%t          j        d           |&|f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#runtest_refleak.<locals>.<listcomp>:   s%    MMM++MMMr   c                     i | ]}||S r!   r!   )r   values     r   
<dictcomp>z#runtest_refleak.<locals>.<dictcomp>D   s    ===u===r   ii  c                 0                         | |           S r   )
setdefault)r*   int_pools    r   get_pooled_intz'runtest_refleak.<locals>.get_pooled_intE   s    ""5%000r   	beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))file
1234567890
   r   :T)r1   flush.)
r6   123456789X  )endr1   r5   c                 4    t          d | D                       S )Nc              3   "   K   | ]
}|d k    V  dS )r   Nr!   )r   deltas     r   r   z;runtest_refleak.<locals>.check_rc_deltas.<locals>.<genexpr>   s&      22%5A:222222r   )alldeltass    r   check_rc_deltasz(runtest_refleak.<locals>.check_rc_deltas   s!     226222222r   c                      t          |           S r   )anyrH   s    r   check_fd_deltasz(runtest_refleak.<locals>.check_fd_deltas   s    6{{r   F
referenceszmemory blockszfile descriptorsz leaked z, sum=)rC   r1   r&   z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ImportErrorr$   __all__r   __subclasses__r
   rangewarmupsrunsfilenamelistgetallocatedblocksr   r   fd_countprintstderrdash_R_cleanupr   
gc_collectmaxrL   sumopenr5   )0	test_name	test_funcr   r   rP   fspspicr[   zdcabcsr$   r   r/   ra   rb   rc   repcount	rep_range	rc_deltasalloc_deltas	fd_deltasre   r   rf   	rc_beforealloc_before	fd_beforenumbersresultsialloc_afterrc_afterfd_aftertotal_leakssymbolrJ   rM   failedrI   	item_namecheckerfailing
suspiciousmsgrefrepr'   r.   s0                                                 @@r   runtest_refleakr      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 "GD$H~H U8__%%IhI3>LhI/+!H+,,I,y 4k8 &6:	 	 	 	  2!12IXI>(7(#c)GGHH,==gCJd3333G2r3T*** " ")++r2sC... )(**##%%8::%~h&:;;	!(.|)CDDQ%~h&:;;	! 	ilLOYq\JJKar!!!# G||cr
$????&bsz>>>>"			 3:3 3 3   F	L/2	8	&8' F F"	7 !'&//[[
 	Fj 	F		666999c&kkk;C#2CJ//// F3:T2222(C'::: #f#F++++LLNNN# # # # # # # # # # # # # # # 'cjEEEEGs$   	B' 'B65B6&P>>Q	Q	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   )rP   rQ   rV   rW   rX   clearupdaterS   rZ   r[   r\   r]   r$   r^   filterr   r_   getr   register_abc_caches_clearr	   _clear_type_cache)rp   rq   rr   rs   rt   rP   r[   abs_classesr$   r   r   r'   s              @r   ri   ri      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   r   c                 ,    g | ]}t          |          S r!   )chr)r   r   s     r   r(   zwarm_caches.<locals>.<listcomp>   s       SVV   r   i  )bytesr`   rd   )sr   s     r   rU   rU      ss    eCjjA3ZZ  	!AaC%  U3ZZ    r3r   )rS   rV   inspectr   typingr   testr   test.supportr   runtestsr   utilsr	   _abcr
   r]   r   boolr   ri   rU   r!   r   r   <module>r      s8   



                    " " " " " " ! ! ! ! ! !      
J J J JNNNJ J J J JJ["-[[ [ [ [|! ! !H    s   5 AA