Y*&SSKrSSKrSSKJr SSKJrJrJrJrJ r J r J r SSK J r SSKJrJrJr SSKJrJr SSKJrJr SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr SS KJ r "S S \"5r#"S S\"5r$\"SS\"55r%\RL"5ROSS5(aS\RL"5S;r(O\)"\S5(+r("SS\RT5r+"SS\RT5r,"SS\RT5r-"SS\RT5r.Sr/Sr0\1S:Xa\Rd"5 gg!\!a SrS rSr Nf=f) N)support)verbose refcount_test cpython_onlyrequires_subprocessrequires_gil_enabledsuppress_immortalizationPy_GIL_DISABLED) import_module)temp_dirTESTFNunlink)assert_python_ok make_script)threading_helper gc_threshold) with_tp_del) ContainerNoGCc$"SS[5nU$)Nc\rSrSrSrSrg)with_tp_del..Cc.[R"S5e)Nzrequires _testcapi.with_tp_del)unittestSkipTest)clsargskwargss 3/opt/alt/python313/lib64/python3.13/test/test_gc.py__new__with_tp_del..C.__new__s''(HIIN)__name__ __module__ __qualname____firstlineno__r __static_attributes__r#r"rCrs Jr"r))object)rr)s rrrs J Jr"c\rSrSrSrSrg)C1055820*cXlXlgNiloop)selfr1s r__init__C1055820.__init__+s  r"r0Nr$r%r&r'r4r(r#r"rr,r,*sr"r,c\rSrSrSrSrg) GC_Detector/cj^STlU4Sjn[R"[S5U5Tlg)NFc>STlgNT) gc_happened)ignoredr3s r it_happened)GC_Detector.__init__..it_happened6s #D r")r=weakrefrefr,wr)r3r?s` rr4GC_Detector.__init__3s(  $ ++hsm[9r")r=rDNr6r#r"rr8r8/s:r"r8c(\rSrSrSrSSjrSrSrg) Uncollectable=aCreate a reference cycle with multiple __del__ methods. An object in a reference cycle will never have zero references, and so must be garbage collected. If one or more objects in the cycle have __del__ methods, the gc refuses to guess an order, and leaves the cycle uncollected.Nc4Uc[US9UlgXlg)Npartner)rGrK)r3rKs rr4Uncollectable.__init__Es ?(6DL"Lr"cgr/r#r3s r __tp_del__Uncollectable.__tp_del__Js r"rJr/)r$r%r&r'__doc__r4rOr(r#r"rrGrG=s) #  r"rG PY_CFLAGSz-DNDEBUGgettotalrefcountc\rSrSrSrSrSr\"5S5r\"5S5r Sr \"5S5r S r \ S 5r\ S 5r\"5S 5rS r\S5rSrSrSr\\"S5S55r\S5rSr\R8"5S5rSrSrSr \"5S5r!Sr"Sr#Sr$\ \%"5\&RN"\(SLS5S 555r)S!r*S"r+S#r,S$r-S%r.S&r/\"S'5S(5r0S)r1S*r2S+r3S,r4\&RN"\5SLS-5S.5r6\ S/5r7\ S05r8S1r9S2r:S3r;g)4GCTestsXc/nURU5 [R"5 AUR[R"5S5 gNappendgccollect assertEqualr3ls r test_listGCTests.test_listYs4     q)r"c0nXS'[R"5 AUR[R"5S5 grYr]r^r_r3ds r test_dictGCTests.test_dict`s0 !  q)r"c/nU4nURU5 [R"5 AAUR[R"5S5 g)Nr[)r3rats r test_tupleGCTests.test_tuplegs>  D    q)r"c"SS5nXl[R"5 AUR[R"5S5 g)Nc\rSrSrSrg)GCTests.test_class..Asr#Nr$r%r&r'r(r#r"rArqs r"rtrar]r^assertNotEqualr3rts r test_classGCTests.test_classqs3    BJJL!,r"c"SS[5n[R"5 AUR[R"5S5 g)Nc\rSrSrSrg)%GCTests.test_newstyleclass..A|r#Nrsr#r"rrtr~|rur"rtr)r*r]r^rxrys rtest_newstyleclassGCTests.test_newstyleclasszs0    BJJL!,r"c"SS5nU"5nX"l[R"5 AUR[R"5S5 g)Nc\rSrSrSrg) GCTests.test_instance..Ar#Nrsr#r"rrtrrur"rtrrvr3rtrws r test_instanceGCTests.test_instances:   C  BJJL!,r"cr"SS[5nU"5nX"l[R"5 AUR [R"5S5 "SS[ 5n"SSX15nU"5nX"l[R"5 AUR [R"5S5 AAUR [R"5S5 U"5UlAUR [R"5S5 UR [R"5S5 g)Nc\rSrSrSrg)#GCTests.test_newinstance..Ar#Nrsr#r"rrtrrur"rtrc\rSrSrSrg)#GCTests.test_newinstance..Br#Nrsr#r"rBrrur"rc\rSrSrSrg)#GCTests.test_newinstance..Cr#Nrsr#r"rr)rrur"r))r*rwr]r^rxlistr_)r3rtrwrr)s rtest_newinstanceGCTests.test_newinstances   C  BJJL!,     C  BJJL!, q BJJL!,c  BJJL!, q)r"c"SS5nU"5n[R"5 AUR[R"5S5 g)Nc\rSrSrSrSrg)GCTests.test_method..Ac&URUlgr/)r4initrNs rr4'GCTests.test_method..A.__init__s  MM r")rNr6r#r"rrtrs *r"rtr)r]r^rxrs r test_methodGCTests.test_methods7 * * C  BJJL!,r"c["SS55n"SS5nU"5nX3l[U5nU"5nXUl[R "5 AAUR [R "5S5 [RHn[U5U:XdMU? O URS5 [RRW5 g)Nc\rSrSrSrSrg)(GCTests.test_legacy_finalizer..Acgr/r#rNs rrO3GCTests.test_legacy_finalizer..A.__tp_del__$r"r#Nr$r%r&r'rOr(r#r"rrtr &r"rtc\rSrSrSrg)(GCTests.test_legacy_finalizer..Br#Nrsr#r"rrrrur"rr&didn't find obj in garbage (finalizer)) rrwidbr]r^rxgarbagefailremover3rtrrwid_arobjs rtest_legacy_finalizerGCTests.test_legacy_finalizers  ' '  '   C!u C  BJJL!,::C#w$E II> ? #r"c["SS[55n"SS[5nU"5nX3l[U5nU"5nXUl[ R "5 AAUR[ R "5S5 [ RHn[U5U:XdMU? O URS5 [ RRW5 g)Nc\rSrSrSrSrg)1GCTests.test_legacy_finalizer_newclass..Acgr/r#rNs rrO.A.__tp_del__rr"r#Nrr#r"rrtrrr"rtc\rSrSrSrg)1GCTests.test_legacy_finalizer_newclass..Br#Nrsr#r"rrrrur"rrr) rr*rwrrr]r^rxrrrrs rtest_legacy_finalizer_newclass&GCTests.test_legacy_finalizer_newclasss  ' '  '   C!u C  BJJL!,::C#w$E II> ? #r"c0n[SU5 [R"5 AUR[R"5S5 g)Nzdef f(): pass )rk)execr]r^assertInrfs r test_functionGCTests.test_functions6  "  bjjlF+r"cSn[SU5up#nURUS5 URUS5 URU5 g)Naif 1: import gc import weakref class LateFin: __slots__ = ('ref',) def __del__(self): # 8. Now `latefin`'s finalizer is called. Here we # obtain a reference to `func`, which is currently # undergoing `tp_clear`. global func func = self.ref() class Cyclic(tuple): __slots__ = () # 4. The finalizers of all garbage objects are called. In # this case this is only us as `func` doesn't have a # finalizer. def __del__(self): # 5. Create a weakref to `func` now. If we had created # it earlier, it would have been cleared by the # garbage collector before calling the finalizers. self[1].ref = weakref.ref(self[0]) # 6. Drop the global reference to `latefin`. The only # remaining reference is the one we have. global latefin del latefin # 7. Now `func` is `tp_clear`-ed. This drops the last # reference to `Cyclic`, which gets `tp_dealloc`-ed. # This drops the last reference to `latefin`. latefin = LateFin() def func(): pass cyc = tuple.__new__(Cyclic, (func, latefin)) # 1. Create a reference cycle of `cyc` and `func`. func.__module__ = cyc # 2. Make the cycle unreachable, but keep the global reference # to `latefin` so that it isn't detected as garbage. This # way its finalizer will not be called immediately. del func, cyc # 3. Invoke garbage collection, # which will find `cyc` and `func` as garbage. gc.collect() # 9. Previously, this would crash because `func_qualname` # had been NULL-ed out by func_clear(). print(f"{func=}") -crs!\A\s*func=\s*\Z)rr_ assertRegex assertFalse)r3codercstdoutstderrs r.test_function_tp_clear_leaves_consistent_state6GCTests.test_function_tp_clear_leaves_consistent_statesL: x.dD9F Q !JK  r"cSn[R"5 U"5 UR[R"5S5 g)Nc.[R"5ngr/)sys _getframe)frames rfGCTests.test_frame..f3s MMOEr"rZre)r3rs r test_frameGCTests.test_frame1s+ $   q)r"c>[R"5 UR[R/5 /nUR U5 [ U5n[R "5n[R"U[R-5 A[R"5 [R"U5 UR[[R5S5 [RR5nUR[ U5U5 grY) r]r^r_rr\r get_debug set_debug DEBUG_SAVEALLlenpop)r3Lid_Ldebugrs r test_saveallGCTests.test_saveall9s  R(   !u  UR---.   U RZZ!,jjnn C$'r"c[R"5n[R"5 [R"S5 "SS5nU"5nA[R"5 [R"U6 g)NrZc\rSrSrSrSrg)GCTests.test_del..AiWc[U5 gr/dirrNs r__del__#GCTests.test_del..A.__del__X D r"r#Nr$r%r&r'rr(r#r"rrtrW r"rt)r] get_thresholdenable set_thresholddisabler3 thresholdsrtrws rtest_delGCTests.test_delQsT%%'      C   *%r"c[R"5n[R"5 [R"S5 "SS[5nU"5nA[R "5 [R"U6 g)NrZc\rSrSrSrSrg)$GCTests.test_del_newclass..Aifc[U5 gr/rrNs rr,GCTests.test_del_newclass..A.__del__grr"r#Nrr#r"rrtrfrr"rt)r]rrrr*rrs rtest_del_newclassGCTests.test_del_newclass`sV%%'      C   *%r"zneeds precise allocation countsc$[R"5 [R"5upn/n[R"5upVnURX#4S5 URXg4S5 UR US5 UR XQ5 g)Nrr)r]r^ get_countr_ assertLess assertGreater)r3rwrcxrgers rtest_get_countGCTests.test_get_countusr ,,.a ,,.a !( !( 1 1 r"c[R"5 /n[R"S5 [R"5up#n[R"S5 [R"5upVn[R"S5 [R"5upn URX44S5 URXg4S5 URX4S5 g)NrrZrk)rZr)rrZr)r]r^rr_) r3rrwrrrgrrghr1s rtest_collect_generations GCTests.test_collect_generationss   1 ,,.a 1 ,,.a 1 ,,.a !( !( !(r"cL^"U4SjS5m[R"5 Sn[S5H[n/n[U5H nUT"5/nM /n[U5H nUT"5/nM 0n[U5H nUT"5S.nM M] [R"5 g)Nc&>\rSrSrSrU4SjrSrg)#GCTests.test_trashcan..Ouchirc>TRS-TlTRS-S:Xa[R"5 gg)NrZr)nr]r^)r3Ouchs rr+GCTests.test_trashcan..Ouch.__del__s0!66B;!#JJL$r"r#N)r$r%r&r'rrr()rsrrrsA ! !r"rrrk)rZrk)r]rranger)r3Ncountrlr1uvrs @r test_trashcanGCTests.test_trashcans ! !( 1XEA1XKA1XKA1Xdf% r"c^^^ ^ ^ SmSnSm "UU 4SjS[5mUU4Sjm U U 4Sjn[R"5n[R"S5 /m /n[ U5H(n[ R"US 9nURU5 M* [R"UU 4S j5 [R"S 5 SSS5 [R"U5 [R"5 UR[!TR"5[!TR$55 g!,(df  Nr=f![R"U5 f=f) N<rkc3x# Sv [R"S5 g![R"S5 f=f7f)z)timesleepr#r"r sleeper_gen2GCTests.test_trashcan_threads..sleeper_gens% % 8$ 8$s::7:c8>\rSrSr/r/rU4SjrUU4SjrSrg)(GCTests.test_trashcan_threads..CicD>XSS&TRRS5 gr/)initsr\)r3alistr)s rr41GCTests.test_trashcan_threads..C.__init__sQt$r"c`>TRRS5 T"5n[U5 gr/)delsr\next)r3r r)r$s rr0GCTests.test_trashcan_threads..C.__del__s# d# MQr"r#N) r$r%r&r'r)r-r4rr()r)r$srr)r'sED %  r"r)cP>T"/5n[T5H nT"U/5/nM Ag)zmCreate a sufficiently nested container object so that the trashcan mechanism is invoked when deallocating it.N)r)rr1r)NESTINGs r make_nested2GCTests.test_trashcan_threads..make_nesteds,"A7^sVH$r"c6>T(dT"5 T(dMgg)z!Exercise make_nested() in a loop.Nr#)exitr2sr run_thread1GCTests.test_trashcan_threads..run_threads dr"gh㈵>)targetc&>TRS5$rYr\)r5sr/GCTests.test_trashcan_threads..s Qr"?)rrgetswitchintervalrsetswitchintervalr threadingThreadr\r start_threadsr"r#r]r^r_rr)r-) r3 N_THREADSr6old_switchintervalthreadsr1rlr)r1r5r2r$s @@@@@rtest_trashcan_threadsGCTests.test_trashcan_threadss  %   $   !224!!$' 6DG9%$$J7q!&"//9OP 3Q  ! !"4 5  QWWs166{3 QP  ! !"4 5s%AE0D3E3 E=EEcH"SS5nU"5nU"5nX2lX#l[R"5 [[R5nAAUR [R"5S5 UR [[R5U5 g)Nc\rSrSrSrSrg)GCTests.test_boom..BoomicU?[er/)attrAttributeErrorr3 someattributes r __getattr__+GCTests.test_boom..Boom.__getattr__s I$$r"r#N)r$r%r&r'rPr(r#r"rBoomrJs %r"rRrkrLr]r^rrr_)r3rRrwr garbagelens r test_boomGCTests.test_boomsq % % F F _ q q) RZZ*5r"cH"SS5nU"5nU"5nX2lX#l[R"5 [[R5nAAUR [R"5S5 UR [[R5U5 g)Nc \rSrSrSrSrSrg)!GCTests.test_boom2..Boom2icSUlgNrrrNs rr4*GCTests.test_boom2..Boom2.__init__s r"c\U=RS- slURS:aU?[erY)rrLrMrNs rrP-GCTests.test_boom2..Boom2.__getattr__s%! 66A: $$r"r\N)r$r%r&r'r4rPr(r#r"rBoom2rYs   %r"r`rkrS)r3r`rwrrTs r test_boom2GCTests.test_boom2sq % % G G _ q q) RZZ*5r"c x/SQn[R"U5nUR5 URX!5 [ U5n[R"U5nUR5 URX!5 SSS.n/SQn[R"U5nUR5 URX%5 [R"SS/SS0S 5nUR5 URUS S /[ [ S 55-5 UR[R"SS S 5/5 g)N)rZrrr)rZr)rZrrrdrZrk)rrrrrrwy@)r] get_referentssortr_tuplerr)r3r*gotatupleadictexpecteds rtest_get_referentsGCTests.test_get_referents*su%   $uv&   $! u%   '1v1vy9   q!ftE!H~56 ))!S"5r:r"c|UR[R"S55 UR[R"S55 UR[R"S55 UR[R"S55 UR[R"S55 UR[R"S55 UR[R"S55 UR[R"S55 UR[R"[S555 UR[R"[55 UR[R"[ 55 UR[R"[ 55 UR[R"[ 555 "SS 5n"S S [ 5n"S S 5n"SS[5n"SS[ 5n[(d)UR[R"[55 UR[R"U55 UR[R"U"555 UR[R"U"555 UR[R"/55 UR[R"[555 UR[R"U"555 UR[R"U"555 UR[R"U"555 g)NrZr=y?@TFarwc\rSrSrSrg)*GCTests.test_is_tracked..UserClassiUr#Nrsr#r"r UserClassrrUrur"rsc\rSrSrSrg)(GCTests.test_is_tracked..UserIntiXr#Nrsr#r"rUserIntruXrur"rvc\rSrSrSrSrg)/GCTests.test_is_tracked..UserClassSlotsi\r#Nr$r%r&r' __slots__r(r#r"rUserClassSlotsrx\Ir"r{c\rSrSrSrSrg)/GCTests.test_is_tracked..UserFloatSlotsi`r#Nryr#r"rUserFloatSlotsr~`r|r"rc\rSrSrSrSrg)-GCTests.test_is_tracked..UserIntSlotsidr#Nryr#r"r UserIntSlotsrdr|r"r) rr] is_tracked bytearraytypeintr*floatr assertTrueset)r3rsrvr{rrs rtest_is_trackedGCTests.test_is_trackedAs? t,- q)* s+, z23 t,- u-. t,- s+, y78 t,- s+, v./ vx01   c    U  3  OOBMM"- .  i01  ik23  gi01  b)*  ce,-  n&678  n&678  ln56r"c\^UR[R"S55 /m"U4SjS5nU"5nUR[R"U55 A[R"5 TR 5nUR [R"U55 g)Nrc">\rSrSrU4SjrSrg)*GCTests.test_is_finalized..Lazarusixc(>TRU5 gr/r:)r3storages rr2GCTests.test_is_finalized..Lazarus.__del__yst$r"r#Nr)rsrLazarusrxs  % %r"r)rr] is_finalizedr^rr)r3rlazarusrs @rtest_is_finalizedGCTests.test_is_finalizedssu +, % %) 12  ++- 01r"c^^/mUU4Sjn[S5Vs/sHn[U5PM nnUVs/sHn[R"XA5PM snmSn[R "5 UR [T5S5 Sn[R "5 UR [T5S5 THnUR US5 M gs snfs snf)NcD>TVs/sH o"5PM snTSS&gs snfr/r#)r>rDWRsouchs rcallback*GCTests.test_bug1055820b..callbacks &)*crtc*DG*srkr)rr,rBrCr]r^r_r)r3rr1Csrrrrs @@rtest_bug1055820bGCTests.test_bug1055820bs +$)8 ,8ahqk8 ,134Aw{{1'4   TA&  TA&A   Q %-4s C Cc^^[R"5 "SS5m"SS5mUU4SjnU"5 [R"5 g)Nc\rSrSrSrg) GCTests.test_bug21435..Air#Nrsr#r"rrtrrur"rtc \rSrSrSrSrSrg) GCTests.test_bug21435..BicXlgr/r\)r3rs rr4)GCTests.test_bug21435..B.__init__sr"cSUlgr/rLrNs rr(GCTests.test_bug21435..B.__del__s   r")rLrN)r$r%r&r'r4rr(r#r"rrrs   !r"rcF>T"5nT"T"55nXlXlgr/r)rwrrtrs rdo_work&GCTests.test_bug21435..do_worksA!#AFFr")r]r^)r3rrtrs @@r test_bug21435GCTests.test_bug21435s7    ! !    r"Nzrequires _testcapic6^^SSKmSnUU4SjnU"US-5nTRSU5 TRSU5 U"US-5nTRSU5 TRS U;=(d S U;U5 U"US -5nTRS U5 g) Nraif 1: import gc import _testcapi @_testcapi.with_tp_del class X: def __init__(self, name): self.name = name def __repr__(self): return "" %% self.name def __tp_del__(self): pass x = X('first') x.x = x x.y = X('second') del x gc.set_debug(%s) c^>TR[RSSU/TRTRS9nUR 5up#UR R 5 URR 5 TRURS5 TRUS5 U$)Nz-Wdrrrrr") Popenr executablePIPE communicatercloserr_ returncode)rprrr3 subprocesss r run_command5GCTests.test_garbage_at_shutdown..run_commands  #..%t!D!!!(A]]_NF HHNN  HHNN    Q\\1 -   VS )Mr"0s=ResourceWarning: gc: 2 uncollectable objects at shutdown; uses zgc.DEBUG_UNCOLLECTABLEs8ResourceWarning: gc: 2 uncollectable objects at shutdowns[, ]s[, ]zgc.DEBUG_SAVEALLs!uncollectable objects at shutdown)rr assertNotInr)r3rrrrs` @rtest_garbage_at_shutdown GCTests.test_garbage_at_shutdowns  $ TCZ( '(. 0 0T$<<= "#) +  +v 5 7 +v 5 @ T$667 =vFr"cfSn[SU5up#nURUR5S5 g)Nzif 1: class C: def __del__(self): print('__del__ called') l = [C()] l.append(l) r__del__ called)rr_strip)r3rrouterrs rtest_gc_main_module_at_shutdown'GCTests.test_gc_main_module_at_shutdowns2(d3  &78r"c[5nSnSU<S3n[USU5 [SU5upEnURUR 5S5 SSS5 g!,(df  g=f)Nzif 1: class C: def __del__(self): print('__del__ called') l = [C()] l.append(l) zDif 1: import sys sys.path.insert(0, z0) import gctest gctestrr)r rrr_r)r3 script_dirmodulerrrrs r#test_gc_ordinary_module_at_shutdown+GCTests.test_gc_ordinary_module_at_shutdowns[ Z:F" $D  Hf 5+D$7LBS   SYY[*; <ZZs AA A(cSnUR[[5 [[SSS9nUR U5 SSS5 [ [5up4nUR UR5S5 g!,(df  NA=f)Nzif 1: class ClassWithDel: def __del__(self): print('__del__ called') a = ClassWithDel() a.link = a raise SystemExit(0)wzutf-8)encodingr) addCleanuprr openwriterr_r)r3rscriptrrrs rtest_global_del_SystemExit"GCTests.test_global_del_SystemExitsf# ' &# 0F LL 1'/  &781 0s A99 BcF[R"5nUR[U5S5 UHunUR U[ 5 UR[ U51Sk5 URUSS5 URUSS5 URUSS5 Mw [R"5(a4UR[R5 [R"5 [R"5n[R"S5 [R"5nURUSSUSSS-5 URUSSUSS5 URUSSUSS5 [R"S5 [R"5nURUSSUSSS-5 URUSSUSS5 URUSSUSSS-5 g) Nr> collected collections uncollectablerrrrrZrk) r] get_statsr_rassertIsInstancedictrassertGreaterEqual isenabledrrrr^)r3statsstoldnews rtest_get_statsGCTests.test_get_statss  UQ'B  ! !"d +   SWJ L  # #B{OQ 7  # #B}$5q 9  # #B$7 ;  <<>> OOBII & JJLlln 1 lln Q .A}0E0IJ Q .A}0EF Q .A}0EF 1 lln Q .A}0E0IJ Q .A}0EF Q .A}0E0IJr"c[R"5 UR[R"5S5 [R"5 UR [R"5S5 gr[)r]freezerget_freeze_countunfreezer_rNs r test_freezeGCTests.test_freeze8sF  2..0!4  ,,.2r"c^[R"5 /mTRT5 UR[ U4Sj[R "5555 g)Nc3,># UH nTULv M g7fr/r#.0elementras r +GCTests.test_get_objects..CsA0@WAL0@)r]r^r\rany get_objectsr`s @rtest_get_objectsGCTests.test_get_objects>s=    A0@AA r"zneed generational GCc  ^[R"5 /mTRT5 UR[ U4Sj[R "SS9555 UR [ U4Sj[R "SS9555 UR [ U4Sj[R "SS9555 [R"SS9 UR [ U4Sj[R "SS9555 UR[ U4S j[R "SS9555 UR [ U4S j[R "SS9555 [R"SS9 UR [ U4S j[R "SS9555 UR [ U4S j[R "SS9555 UR[ U4S j[R "SS9555 [R"SS9 UR [ U4Sj[R "SS9555 UR [ U4Sj[R "SS9555 UR[ U4Sj[R "SS9555 @[R"5 g)Nc3,># UH nTULv M g7fr/r#rs rr7GCTests.test_get_objects_generations..LM0LWAL0Lrr generationc3,># UH nTULv M g7fr/r#rs rrrON1MWAL1MrrZc3,># UH nTULv M g7fr/r#rs rrrRrrrkc3,># UH nTULv M g7fr/r#rs rrrVrrc3,># UH nTULv M g7fr/r#rs rrrYrrc3,># UH nTULv M g7fr/r#rs rrr\rrc3,># UH nTULv M g7fr/r#rs rrr`rrc3,># UH nTULv M g7fr/r#rs rrrcrrc3,># UH nTULv M g7fr/r#rs rrrfrrc3,># UH nTULv M g7fr/r#rs rrrjrrc3,># UH nTULv M g7fr/r#rs rrrmrrc3,># UH nTULv M g7fr/r#rs rrrprr)r]r^r\rrrrr`s @rtest_get_objects_generations$GCTests.test_get_objects_generationsFs    M!0LMM  N11MNN  M!0LMM  a  M!0LMM  N11MNN  M!0LMM  a  M!0LMM  N11MNN  M!0LMM  a  M!0LMM  N11MNN  M!0LMM   r"c [R"5 UR[[R"55[[R"SS955 UR [ [RS5 UR [ [RS5 UR [[RS5 UR [[RS5 g)Nri1gX9v?)r]r^r_rr assertRaises ValueError TypeErrorrNs rtest_get_objects_arguments"GCTests.test_get_objects_argumentsus  R^^-.R^^t<= ? *bnnd; *bnne< )R^^S9 )R^^U;r"cv^"SS5n"U4SjSU5m[R"5 [R"5 T"5nURTRS5 A[R"5 URTRS5 UR[ TR 5S5 TR R5 URTRS5 [R"5 URTRS5 [R"5 g)Nc\rSrSrSrSrg)AGCTests.test_resurrection_only_happens_once_per_object..AicXlgr/merNs rr4JGCTests.test_resurrection_only_happens_once_per_object..A.__init__r"rNr6r#r"rrtr r"rtc*>\rSrSrSr/rU4SjrSrg)GGCTests.test_resurrection_only_happens_once_per_object..Lazarusircf>T=RS- slTRRU5 grY) resurrectedresurrected_instancesr\r3rs rrOGCTests.test_resurrection_only_happens_once_per_object..Lazarus.__del__s(##q(#--44T:r"r#N)r$r%r&r'rr rr(rsrrrsK$& ! ; ;r"rrrZ) r]r^rr_rrr clearr)r3rtlazrs @r.test_resurrection_only_happens_once_per_object6GCTests.test_resurrection_only_happens_once_per_objects   ;a ;  i ,,a0   ,,a0 W::;Q? %%++- ,,a0  ,,a0 r"cR^"SS5n"U4SjS5m[R"5 [R"5 T"5nU"5n[U5nX2lX#lAA[R"5 UR [TR5S5 TRR5nUR[US55 UR [UR5U5 [R"5 [R"5 g)Nc\rSrSrSrSrg)6GCTests.test_resurrection_is_transitive..CargoicXlgr/rrNs rr4?GCTests.test_resurrection_is_transitive..Cargo.__init__rr"rNr6r#r"rCargor*rr"r-c&>\rSrSr/rU4SjrSrg)8GCTests.test_resurrection_is_transitive..Lazarusic<>TRRU5 gr/)r r\r!s rr@GCTests.test_resurrection_is_transitive..Lazarus.__del__s--44T:r"r#N)r$r%r&r'r rr(r#srrr/s$& ! ; ;r"rrZcargo) r]r^rrr2r%r_rr rrhasattrr)r3r-r%r2cargo_idinstancers @rtest_resurrection_is_transitive'GCTests.test_resurrection_is_transitives   ; ;  ie9     W::;Q?00446 '23 HNN+X6  r"c<^ Sn"SS5n"U 4SjSU5n/m Sn[R"5 [R"5 U"5upV[U5H nU"5 M [R"5nU"5upUR X5 UR X- U5 UR X- S5 XpeU"5 [R"5nU"5upUR US5 UR X- S5 UR X- S5 Xpe[U5H nU"5 M U"5 [R"5nU"5upUR X5 UR X- U5 UR X- S5 XpeT R 5 [R"5nU"5upUR US5 UR X- S5 UR X- S5 [R "5 g) Ndc\rSrSrSrSrg)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..AicXlgr/rrNs rr4UGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..A.__init__rr"rNr6r#r"rrtr;rr"rtc">\rSrSrU4SjrSrg)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..Zic(>TRU5 gr/r:)r3zss rrTGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..Z.__del__s $r"r#Nr)rAsrZr?s   r"rCcF[R"5SnUSUS4$)Nrr)r]r)rgs rgetstatsSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..getstatss& r"A[>1_#55 5r"rrk)r]r^rrr_r$r) r3rrtrCrFoldcoldncr1rlrncrAs @r9test_resurrection_does_not_block_cleanup_of_other_objectsAGCTests.test_resurrection_does_not_block_cleanup_of_other_objectss      6  j qA C JJL   1% Q'e  JJL  A 1% Q'eqA C  JJL   1% Q'e  JJL  A 1% Q' r"z%requires ContainerNoGC extension typec[RR5n"SS5n"SS5nU"5nXDl[ U"55Ul[ R"UR RU5Ul UR/nURU5 [R"5 [R"5 AA[R"5 UR5 [R"5 g)Nc\rSrSr/SQrSrg)+GCTests.test_trash_weakref_clear..Ai*)rwywzr#Nryr#r"rrtrO*s(Ir"rtc\rSrSrSrg)+GCTests.test_trash_weakref_clear..Zi-r#Nrsr#r"rrCrS-rur"rC)rmockMockrwrrPrBrCvaluerQr\r]r^rassert_not_calledr)r3rrtrCrwwr_cycles rtest_trash_weakref_clear GCTests.test_trash_weakref_clears@==%%' ) )   CAC {{13399h/DD6!  x  ""$ r"cbSSKnSSKnURnURnUR [ R "U55 UR[ R "U55 UR[[ R"U55S5 [ R"U5 gr[) _datetime_socket datetime_CAPICAPIrr]rrr_rrf)r3r\r]untracked_capsuletracked_capsules rtest_get_referents_on_capsule%GCTests.test_get_referents_on_capsuleCs} %33!,, '89:  o67 R--.?@A1E )r"c^^UmSm"UU4SjS5nU"5nX"lA[R"5 URT5 g)NFc$>\rSrSrUU4SjrSrg);GCTests.test_get_objects_during_gc..GetObjectsOnDeli[c>Sm[R"5nUHnTRX L5 M TR[R"U5/5 gr<)r]rrr_ get_referrers)r3objsrrtests rrCGCTests.test_get_objects_during_gc..GetObjectsOnDel.__del__\sG ~~'COOCO4   !1!1$!7.G` 9=& 9K43  01,2,\<"H DAF__]d*<>7>7r** ##. 'r"rVc\rSrSrSrSrSrSrSrSr Sr \ S 5r \ "5\R"\S 5S 55rS rg )GCCallbackTestsict[R"5Ul[R"5 [R"5Ul[R "S5 [RRUR5 [RRUR5 /Ul gr[) r]renabledrrrr callbacksr\cb1cb2 othergarbagerNs rsetUpGCCallbackTests.setUpsd||~  \\^  Q DHH% DHH%r"c U?[RRUR5 [RRUR 5 [R "UR5 UR(a[R"5 [R"5 [RH!n[U[5(dMSUlM# [RSS2 U?[R"5 gr/)visitr]rrrrrrrrr^r isinstancerGrKr)r3rs rtearDownGCCallbackTests.tearDowns J DHH% DHH% TZZ << IIK ::C#}--"  JJqM   r"c/Ul[R"5 [RSS/sn[RSS&URR U5 /Ulgr/)rr]r^rrr\)r3rs rprecleanGCCallbackTests.precleansK  !#AA   ) r"cRURRSU[U545 grY)rr\r)r3phaseinfos rrGCCallbackTests.cb1s 1eT$Z01r"cURRSU[U545 US:Xa[US5(a[R Vs/sHn[ U[5(dMUPM nn[R Vs/sHn[ U[5(aMUPM sn[R SS&UH nSUlM gggs snfs snf)Nrkstopcleanup) rr\rr3r]rrrGrK)r3rrrucs rrGCCallbackTests.cb2s 1eT$Z01 F?wtY77ZZHZ:a+G!ZBH(* B 1$.q-$@ BBJJqM   8?HBsC.CC%Cc"UR5 [R"5 URVs/sHoSPM nnUVs/sH o3S:XdM UPM nnUVs/sH o3S:XdM UPM nnUR US/S-5 UR US/S-5 URVs/sHoSPM nnUVs/sH o3S:XdM UPM nnUVs/sH o3S:XdM UPM nnUR US/S-5 UR US/S-5 URHDnUSnUR SU;5 UR SU;5 UR SU;5 MF gs snfs snfs snfs snfs snfs snf) NrrZrkstartrrrr)rr]r^rr_r)r3rrr1n1n2rs r test_collectGCCallbackTests.test_collectsf   :: &:aqT: & %A1fa % %A1fa % aSU# aSU# :: &:aqT: & +A7la + *A6ka * gYq[) fXaZ(AQ4D OOLD0 1 OOK4/ 0 OOOt3 4  ' % % ' + *s;E3 E8E8! E=.E=0F FF F *F cUR5 [R"S5 URHnUSnUR USS5 M g)Nrkr)rr]r^rr_)r3rrs rtest_collect_generation'GCCallbackTests.test_collect_generationsB  1 AQ4D   T,/ 3r"c*UR5 [5 [5 [S5 [R"5 UR H=nUSS:waMUSnUR USS5 UR USS5 M? UR [[R5S5 [RHnURU[5 M SUl /Ul/[RSS&[R"5 UR H=nUSS:waMUSnUR USS 5 UR USS5 M? UR [[R5S 5 g) NrArZrrkrrreTr) rrGr,r]r^rr_rrrr)r3rrrs rtest_collect_garbage$GCCallbackTests.test_collect_garbages;   Atv~Q4D   T+. 2   T/2A 6  RZZ!,A  ! !!] 3   1  Atv~Q4D   T+. 2   T/2A 6  RZZ!,r"zbuilt with -NDEBUGcrUR5 [S5 SSKn[R"S5nUR [ RSU/URURS9nUR5upEURR5 URR5 URUS5 URUS5 SnURUS U-5 URUS 5 URUS U-5 URUS 5 URUS 5 g)Nctypesra from test.support import gc_collect, SuppressCrashReport a = [1, 2, 3] b = [a] # Avoid coredump when Py_FatalError() calls abort() SuppressCrashReport().__enter__() # Simulate the refcount of "a" being too low (compared to the # references held on it by live data), but keeping it above zero # (to avoid deallocating it): import ctypes ctypes.pythonapi.Py_DecRef(ctypes.py_object(a)) # The garbage collector should now have a fatal error # when it reaches the broken object gc_collect() rrs<gc.*\.c:[0-9]+: .*: Assertion "gc_get_refs\(.+\) .*" failed.srefcount is too smalls [0-9a-fA-Fx]+sobject address : sobject refcount : 1sobject type : sobject type name: listsobject repr : \[1, 2, 3\])rr rrurvrrrrrrrrr)r3rrrrr address_regexs rtest_refcount_errors$GCCallbackTests.test_refcount_errors s!  h  &   cnndD9$.OO$.OO  5    L N  % '*   "] 2 4  # %  "] 2 4  & (  - /r")rrrrrN)r$r%r&r'rrrrrrrrrrrr{BUILD_WITH_NDEBUGrr(r#r"rr~r~sh"2!564 - -F __&)+2/+2/r"r~cf\rSrSrSrSrSr\"SSS5S5r\"SSS5S5r S r g ) GCTogglingTestsiDc.[R"5 gr/)r]rrNs rrGCTogglingTests.setUpEs  r"c.[R"5 gr/)r]rrNs rrGCTogglingTests.tearDownHs  r"c^ ^ [S5n[R"5 [S5nXlU?[S5n[ R "U5m /m U U 4Sjn[ R "X5nS=n=p#/nSn[5n[(a[R"5 UR(d[US- nUS:aURS5 UR[T 5S5 UR/5 UR(dM[UR[T 5S5 T Hn URU S5 M g)NrrZrkc>T"5/TSS&gr/r#)r>c2wrrs rr2GCTogglingTests.test_bug1055820c..callback[svhDGr"''gc didn't happen after 10000 iterations)r,r]r^ keep_c0_aliver2rBrCr8r r=rr_rr\) r3c0c1c2rc0wrjunkr1detectorrrrs @@rtest_bug1055820c GCTogglingTests.test_bug1055820cKsa[ a[ G a[{{2 {{2(R@ = ? JJL&& FA5y CD   SY * KKO &&& TA&A   Q %r"r rc~^ ^ /m "U U 4SjS[5nU"S5n[R"5 [S5nX#lU?[S5n[ R "U5m S=n=p4[5n/nSn[(a[R"5 UR(d[US- nUS:aURS5 UR[T 5S5 UR/5 UR(dM[UR[T 5S5 T HnURUS5 M g)Nc$>\rSrSrUU4SjrSrg)+GCTogglingTests.test_bug1055820d..Dic>T"5/TSS&gr/r#)r3rrs rr3GCTogglingTests.test_bug1055820d..D.__del__s6(Qr"r#Nr)rrsrDrs  # #r"rrrZrkrr)r,r]r^ keep_d0_aliver2rBrCr8r r=rr_rr\) r3rd0rrrrr1rrrs @@rtest_bug1055820d GCTogglingTests.test_bug1055820ds  # # #qT a[ G a[{{2R<=  ? JJL&& FA5y CD   SY * KKO &&& TA&A   Q %r"c/nSn[5nUR(d@US- nUS:aURS5 UR/5 UR(dM@[R "5 /nSn[5nUR(d0US- nUS:aO$UR/5 UR(dM0UR US5 [R"5 g![R"5 f=f)NrrZrri')r8r=rr\r]rr_r)r3rr1rs r$test_indirect_calls_with_gc_disabled4GCTogglingTests.test_indirect_calls_with_gc_disableds =&& FA5y CD KKO &&&  JJLDA"}H**Qu9 B ***   Q & IIKBIIKs!A"C-C--Dr#N) r$r%r&r'rrrrrrr(r#r"rrrDsPH&T$1E&E&N$1r"rc\rSrSrSrSrg)PythonFinalizationTestsicH[R"S5n[SU5 g)NaM import ast import codecs from test import support # Small AST tree to keep their AST types alive tree = ast.parse("def f(x, y): return 2*x-y") # Store the tree somewhere to survive until the last GC collection support.late_deletion(tree) rrt)r3rs r test_ast_fini%PythonFinalizationTests.test_ast_finis#    t$r"r#N)r$r%r&r'rr(r#r"rrrs%r"rc<[R"5q[R"5 [R"5(ae[R"5q[R "[ [R)-5 [R"5 gr/) r]rrrrrr DEBUG_LEAKr^r#r"r setUpModuler sRllnGJJL||~~  LLNELL"--'(JJLr"c[R"[5 [(a [ S5 [R "5 [R "5(de[(d[R"5 gg)Nzrestoring automatic collection) r]rrrprintrrrrr#r"rtearDownModulersHLLw ./IIK <<>>> 7  r"__main__)3r unittest.mockrjr test.supportrrrrrr r test.support.import_helperr test.support.os_helperr r rtest.support.script_helperrrrrr]r sysconfigrur@r"rBr|rr ImportErrorr*r,r8rGget_config_varsgetrr3TestCaserVr~rrrrr$mainr#r"rrsd+++5;;D7   %'$v :& :   F      "";33#y'@'@'B;'OO %S*<== x'hx'v!n/h''n/bqh''qh%h//%*  z MMOU0I MsE E#"E#