f=ddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z  dd lmZd e d efd ZdZdZy#e$r ddlZd ZYwxYw)N) isabstract)Any)support) os_helper) HuntRefleak) clear_caches) _get_dumpctd|jD}||j|j|jfS)Nc3FK|]}tj|ywN)weakrefref).0objs //usr/lib/python3.12/test/libregrtest/refleak.py z_get_dump..sNS C 0Ns!)set _abc_registry _abc_cache_abc_negative_cache_abc_negative_cache_version)clsregistry_weakrefss rr r sA NC>'')H)HJ J hunt_refleakquietc 4ddl}ddl}ttds t dt t jdd}|jj}tjj} ddl } | jj} i} |jjD cgc]} t!|j| c} D]8} t#| s| j%| gzD]}t'|d| |<:t)ddDcic]}||c}44fd}|j*}|j,}|j.}||z}t1t)|}dg|z}dg|z}dg|z}tj2}tj4}tj6}t8j:}dx}x}x}} |sUt=d|d tj> d |d zd zzd|}!|!d|dz|!|dz}!t=|!tj>dd}"tA|||| | tCjD|D]}#|}"tA|||| | tCjD|}$||$z }%||$dzz }&|}'||&|z ||#<||%|z ||#<||'|z ||#<|sltG||#||#||#}(|(dkrd})n |(d krd|(})nd})|#|k(rt=ddtj>dt=|)dtj>d~(~)|%}|&}|'}|$} |st=tj> d}*d}+d},|d|*f|d|*f|d|+ffD]\}-}.}/|-|d}-|/|-}0tI|-}1|0s|1s$|d|-d|.dtK|-}2t=|2dtj> |0rRt=tj>dtM|d!d"#5}3t=|2|3 |3jOdddd},t=d$tj>d|,|"fS#t$rd} YwxYwcc} wcc}w#1swYJxYw)%zRun a test multiple times, looking for reference leaks. Returns: False if the test didn't leak references; True if we detected refleaks. rNgettotalrefcountz9Tracking reference leaks requires a debug build of Pythoniic(j||Sr ) setdefault)valueint_pools rget_pooled_intz'runtest_refleak..get_pooled_intEs""5%00r beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))file 1234567890 r:T)r&flush.) r,123456789X )endr&r*c&td|DS)Nc3&K|] }|dk\ yw)rN)rdeltas rrz;runtest_refleak..check_rc_deltas..s2%5A:2s)alldeltass rcheck_rc_deltasz(runtest_refleak..check_rc_deltass26222rct|Sr )anyr?s rcheck_fd_deltasz(runtest_refleak..check_fd_deltass 6{rF referencesz memory blockszfile descriptorsz leaked z, sum=)r9r&azutf-8)encodingz (this is fine))(copyregcollections.abchasattrsys Exception warm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache zipimport_zip_directory_cache ImportErrorabc__all__getattrr__subclasses__r rangewarmupsrunsfilenamelistgetallocatedblocksrgetunicodeinternedsizerfd_countprintstderrdash_R_cleanupr gc_collectmaxrCsumopenr*)5 test_name test_funcrrrH collectionsfspspicrSzdcabcsrFrVrr"r$r[r\r]repcount rep_range rc_deltas alloc_deltas fd_deltasr_rr`ra rc_before alloc_before fd_beforeinterned_beforenumbersresultsiinterned_after alloc_afterrc_afterfd_after total_leakssymbolrArDfailedr@ item_namecheckerfailing suspiciousmsgrefrepr#s5 @rruntest_refleakrs 3* +$% % M   ! B    $ $ &B ! ! & & (C4 ,,113 D5@__5L5LM +M*# %%'3%/ *C!#q)DI **+0t*<=u =H1""G   D$$H~HU8_%IhI3>LhI//++ 77!!H=>>I> >y?  k8&6::  2!12IX>(7#c)GGH,== gCJJd3G2r3T*  ')+r2sC. 01(*^; #%(:::%h&:; ! (|)CD Q%h&:; ! ilLOYq\JKar!!#G|cr $? &bszz >"   (O')R  3:: 3F L/2 8 &8'F" 7 !&/[ j69c&k;C #2CJJ /3::T2(C':#f#F+LLN#'cjjE)F* G M  N>`##s*;P53Q Q *Q5 QQQ c^ddl}ddl}|tjdd|jj |jj |tjj tjj | ddl }|jj |jj ||jjDcgc]}t|j|} }tt | } | D]h} | j#| gzD]O} |j%| t'D] } |  | j)| "| j+Qjt-tj.y#t$rYwxYwcc}w)Nr)rHrIrNrOrPclearupdaterKrRrSrTrUrVrWrXfilterrrYgetrregister_abc_caches_clearr _clear_type_cache) rlrmrnrorprHrkrSrF abs_classesrVrrs rrdrdsiHQ   " !!"%!!#""3'3 &&,,.&&--c29D8O8OP17;??A.PKP[1K$%%'3%/ $CxxSU+ (5$LL' (  ! ! #  $$N+    QsF F* F'&F'cttd}tdD] }|||dz tdDcgc] }t|c}ttddycc}w)Nri)bytesrZchrr^)sr|s rrMrMs[ eCjA 3Z !AaC3Z SV r3!sA%)rKrNinspectrtypingrtestr test.supportrruntestsrutilsr _abcr rUrboolrrdrMr<rrrsg "! Ja"-aaH!HgJJJsA AA