python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_gc.cpython-312.opt-2.pyc

ΑeddlZddlZddlmZmZmZmZddlmZddl	m
Z
mZmZddl
mZmZddlmZddlZddlZddlZddlZddlZddlZddlZ	ddlmZ	dd	lmZGd
deZGdd
eZeGddeZej@jCddrdej@dvZ"n
e#edZ"GddejHZ%GddejHZ&GddejHZ'GddejHZ(dZ)dZ*e+dk(rejXyy#e$rdZYwxYw#e$rdZYwxYw)N)verbose
refcount_testcpython_onlyrequires_subprocess)
import_module)temp_dirTESTFNunlink)assert_python_okmake_script)threading_helper)with_tp_delc$Gddt}|S)NceZdZdZy)with_tp_del.<locals>.Cctd)Nzrequires _testcapi.with_tp_del)	TypeError)clsargskwargss   @/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_gc.py__new__zwith_tp_del.<locals>.C.__new__s @AAN)__name__
__module____qualname__rrrCrs
Brr)object)rrs  rrrs	B	Br)
ContainerNoGCceZdZdZy)C1055820c ||_||_yN)iloop)selfr%s  r__init__zC1055820.__init__)s	rNrrrr(rrrr"r"(srr"ceZdZdZy)GC_Detectorcfd_fd}tjtd|_y)NFcd_y)NT)gc_happened)ignoredr's rit_happenedz)GC_Detector.__init__.<locals>.it_happened4s#Dr)r.weakrefrefr"wr)r'r0s` rr(zGC_Detector.__init__1s( 	$
++hsm[9rNr)rrrr+r+-s:rr+ceZdZ	ddZdZy)
UncollectableNc:|t||_y||_y)N)partner)r6r8)r'r8s  rr(zUncollectable.__init__Cs?(6DL"DLrcyr$rr's r
__tp_del__zUncollectable.__tp_del__Hsrr$)rrrr(r;rrrr6r6;s)#

rr6	PY_CFLAGSz-DNDEBUGgettotalrefcountceZdZdZdZdZdZdZdZdZ	dZ
ed	Zed
Z
dZdZed
ZdZdZdZedZedZdZej2dZdZdZdZdZdZdZ dZ!ee"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*d$Z+d%Z,d&Z-e.j^e0d'ud(d)Z1y')*GCTestscg}|j|tj~|jtjdyNappendgccollectassertEqualr'ls  r	test_listzGCTests.test_listWs4	



q)rci}||d<tj~|jtjdyrBrFrGrHr'ds  r	test_dictzGCTests.test_dict^s2!



q)rcg}|f}|j|tj~~|jtjdy)NrD)r'rJts   r
test_tuplezGCTests.test_tuplees>
D	




q)rcGdd}||_tj~|jtjdy)NceZdZy)GCTests.test_class.<locals>.ANrrrrrrArWprrYrarFrGassertNotEqualr'rYs  r
test_classzGCTests.test_classos5		



BJJL!,rcGddt}tj~|jtjdy)NceZdZy)%GCTests.test_newstyleclass.<locals>.ANrXrrrrYrbxrZrrYr)rrFrGr]r^s  rtest_newstyleclasszGCTests.test_newstyleclassws0		



BJJL!,rcGdd}|}||_tj~|jtjdy)NceZdZy) GCTests.test_instance.<locals>.ANrXrrrrYrfrZrrYrr[r'rYr\s   r
test_instancezGCTests.test_instance~s<		
C



BJJL!,rcjGddt}|}||_tj~|j	tjdGddt
}Gdd||}|}||_tj~|j	tjd~~|j	tjd||_~|j	tjd|j
tjdy)NceZdZy)#GCTests.test_newinstance.<locals>.ANrXrrrrYrkrZrrYrceZdZy)#GCTests.test_newinstance.<locals>.BNrXrrrBrmrZrrnceZdZy)#GCTests.test_newinstance.<locals>.CNrXrrrrrprZrr)rr\rFrGr]listrH)r'rYr\rnrs     rtest_newinstancezGCTests.test_newinstances		
C



BJJL!,			1	
C



BJJL!,
qBJJL!,c
BJJL!,q)rcGdd}|}tj~|jtjdy)NceZdZdZy)GCTests.test_method.<locals>.Ac&|j|_yr$)r(initr:s rr(z'GCTests.test_method.<locals>.A.__init__s
 MM	rNr)rrrrYrus
*rrYr)rFrGr]rgs   rtest_methodzGCTests.test_methods7	*	*
C



BJJL!,rctGdd}Gdd}|}||_t|}|}||_t	j
~~|j
t	j
dtjD]}t||k(s|`n|jdtjjy)NceZdZdZy)(GCTests.test_legacy_finalizer.<locals>.Acyr$rr:s rr;z3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__rNrrrr;rrrrYr{&rrYceZdZy)(GCTests.test_legacy_finalizer.<locals>.BNrXrrrrnrrZrrnr&didn't find obj in garbage (finalizer))
rr\idbrFrGr]garbagefailremover'rYrnr\id_arobjs       rtest_legacy_finalizerzGCTests.test_legacy_finalizers
	'	'
	'		
C!u
C




BJJL!,::	@C#w$E	@

II>?


#rctGddt}Gddt}|}||_t|}|}||_tj~~|jtjdt
jD]}t||k(s|`n|jdt
jjy)NceZdZdZy)1GCTests.test_legacy_finalizer_newclass.<locals>.Acyr$rr:s rr;z<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__r}rNr~rrrrYrrrrYceZdZy)1GCTests.test_legacy_finalizer_newclass.<locals>.BNrXrrrrnrrZrrnrr)rrr\rrrFrGr]rrrrs       rtest_legacy_finalizer_newclassz&GCTests.test_legacy_finalizer_newclasss
	'	'
	'		
C!u
C




BJJL!,::	@C#w$E	@

II>?


#rci}td|tj~|jtjdy)Nzdef f(): pass
rR)execrFrGrHrNs  r
test_functionzGCTests.test_functions6

"



q)rcd}td|\}}}|j|d|j|d|j|y)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=<function  at \S+>\s*\Z)rrHassertRegexassertFalse)r'codercstdoutstderrs     r.test_function_tp_clear_leaves_consistent_statez6GCTests.test_function_tp_clear_leaves_consistent_statesN:x.dD9FFQ!JK rcd}tj||jtjdy)Nc,tj}yr$)sys	_getframe)frames rfzGCTests.test_frame.<locals>.f+s
MMOErrCrM)r'rs  r
test_framezGCTests.test_frame)s+	$


	q)rc4tj|jtjgg}|j	|t|}tj}tj|tjz~tjtj||jttjdtjj}|jt||yrB)rFrGrHrrEr	get_debug	set_debug
DEBUG_SAVEALLlenpop)r'Lid_Ldebugrs     rtest_saveallzGCTests.test_saveall1s	

R(	!u
UR---.




URZZ!,jjnnC$'rctj}tjtjdGdd}|}~tjtj|y)NrCceZdZdZy)GCTests.test_del.<locals>.Act|yr$dirr:s r__del__z#GCTests.test_del.<locals>.A.__del__P	D	rNrrrrrrrrYrO
rrY)rF
get_thresholdenable
set_thresholddisabler'
thresholdsrYr\s    rtest_delzGCTests.test_delIsT%%'

		
		
C




*%rctj}tjtjdGddt}|}~tj
tj|y)NrCceZdZdZy)$GCTests.test_del_newclass.<locals>.Act|yr$rr:s rrz,GCTests.test_del_newclass.<locals>.A.__del___rrNrrrrrYr^rrrY)rFrrrrrrs    rtest_del_newclasszGCTests.test_del_newclassXsV%%'

		
		
C




*%rc(tjtj\}}}g}tj\}}}|j||fd|j||fd|j	|d|j||y)Nrr)rFrG	get_countrH
assertLess
assertGreater)r'r\rcxrOers        rtest_get_countzGCTests.test_get_countmsz


,,.1a,,.1a!Q(!Q(1	
1a rctjg}tjdtj\}}}tjdtj\}}}tjdtj\}}	}
|j||fd|j||fd|j|	|
fdy)NrrCrR)rCr)rrCr)rFrGrrH)r'rr\rrrOrrghr%s           rtest_collect_generationsz GCTests.test_collect_generations{s






1
,,.1a


1
,,.1a


1
,,.1a	
!Q(!Q(!Q(rc6Gfddtjd}tdD]T}g}t|D]}|g}
g}t|D]}|g}
i}t|D]}|d}Vtjy)NceZdZdZfdZy)#GCTests.test_trashcan.<locals>.Ouchrc|jdz_jdzdk(rtjyy)NrCr)nrFrG)r'Ouchs rrz+GCTests.test_trashcan.<locals>.Ouch.__del__s0!66B;!#JJL$rN)rrrrr)rsrrrs
A
!rrrR)rCrR)rFrranger)r'NcountrSr%uvrs       @r
test_trashcanzGCTests.test_trashcans	!	!(			1X		&EA1X
 K
 A1X
 K
 A1X
&df%
&		&	

rc	
dd}dGfddtfd
	
fd}tj}tjd	g	g}t	|D])}tj|	}|j|+tj|	fd
5tjddddtj|tj|jtj tj"y#1swYkxYw#tj|wxYw)N<rRc3vK		dtjdy#tjdwxYww)Ngư>)timesleeprrrsleeper_genz2GCTests.test_trashcan_threads.<locals>.sleeper_gens)N
%

8$

8$s9969c,eZdZgZgZfdZfdZy)(GCTests.test_trashcan_threads.<locals>.CcF||ddjjdyr$)initsrE)r'alistrs  rr(z1GCTests.test_trashcan_threads.<locals>.C.__init__sQt$rc`jjd}t|yr$)delsrEnext)r'rrrs  rrz0GCTests.test_trashcan_threads.<locals>.C.__del__s#

d# MQrN)rrrrrr(r)rrsrrrsED
%
rrcN	g}tD]}|gg}~yr$)r)rr%rNESTINGs  rmake_nestedz2GCTests.test_trashcan_threads.<locals>.make_nesteds5
C"A7^
sVH
rc"	ss
yyr$r)exitrsr
run_threadz1GCTests.test_trashcan_threads.<locals>.run_threads3
rgh㈵>)targetc&jdSrBrE)rsr<lambda>z/GCTests.test_trashcan_threads.<locals>.<lambda>sQr?)rqrgetswitchintervalsetswitchintervalr	threadingThreadrEr

start_threadsrrrFrGrHrrr)r'	N_THREADSrold_switchintervalthreadsr%rSrrrrrs       @@@@@rtest_trashcan_threadszGCTests.test_trashcan_threadss		%		$		
!224d#		6DG9%
"$$J7q!
""//9OP
 

3
 
!!"45


QWWs166{3
 
 
!!"45s%AD5)D)?D5)D2.D55EcHGdd}|}|}||_||_tjttj}~~|jtjd|jttj|y)NceZdZdZy)GCTests.test_boom.<locals>.Boomc|`tr$)attrAttributeErrorr'
someattributes  r__getattr__z+GCTests.test_boom.<locals>.Boom.__getattr__s
I$$rN)rrrrrrrBoomrs
%rr
rRrrFrGrrrH)r'r
r\r
garbagelens     r	test_boomzGCTests.test_boomsu	%	%

FF


_

q	
q)RZZ*5rcHGdd}|}|}||_||_tjttj}~~|jtjd|jttj|y)NceZdZdZdZy)!GCTests.test_boom2.<locals>.Boom2cd|_yNrrr:s rr(z*GCTests.test_boom2.<locals>.Boom2.__init__	rcZ|xjdz
c_|jdkDr|`trB)rrr	r
s  rrz-GCTests.test_boom2.<locals>.Boom2.__getattr__s%!66A:	$$rN)rrrr(rrrrBoom2rs

%rrrRr)r'rr\rrs     r
test_boom2zGCTests.test_boom2su	%	%
GG


_

q	
q)RZZ*5rc	tgd}tj|}|j|j||t	|}tj|}|j|j||ddd}gd}tj|}|j|j||tjddgddid	}|j|j|d
d
gtt
dz|jtjddd
gy)N)rCrr)rCr)rCrrrrCrR)rrrrrr\y@)rF
get_referentssortrHtuplerqr)r'rgotatupleadictexpecteds      rtest_get_referentszGCTests.test_get_referents!su%
e$uv&
e$!u%
h'1v1vy9
q!ftE!H~56))!S"5r:rc:|jtjd|jtjd|jtjd|jtjd|jtjd|jtjd|jtjd|jtjd|jtjtd|jtjt|jtjt
|jtjt|jtjt
Gdd	}Gd
dt
}Gdd
}Gddt}Gddt
}|jtjt|jtj||jtj||jtj||jtjg|jtjt|jtj||jtj||jtj|y)NrCry?@TFar\ceZdZy)*GCTests.test_is_tracked.<locals>.UserClassNrXrrr	UserClassr*KrZrr+ceZdZy)(GCTests.test_is_tracked.<locals>.UserIntNrXrrrUserIntr-NrZrr.ceZdZdZy)/GCTests.test_is_tracked.<locals>.UserClassSlotsrNrrr	__slots__rrrUserClassSlotsr0RIrr3ceZdZdZy)/GCTests.test_is_tracked.<locals>.UserFloatSlotsrNr1rrrUserFloatSlotsr6Vr4rr7ceZdZdZy)-GCTests.test_is_tracked.<locals>.UserIntSlotsrNr1rrrUserIntSlotsr9Zr4rr:)
rrF
is_tracked	bytearraytypeintrfloat
assertTrueset)r'r+r.r3r7r:s      rtest_is_trackedzGCTests.test_is_tracked8s:
	
t,-q)*s+,z23t,-u-.t,-s+,y78t,-s+,v./vx01			c				U		3		


b)*

i01

ik23

gi01

b)*

ce,-

n&678

n&678

ln56rcR|jtjdgGfdd}|}|jtj|~tjj	}|jtj|y)NrceZdZfdZy)*GCTests.test_is_finalized.<locals>.Lazarusc(j|yr$r)r'storages rrz2GCTests.test_is_finalized.<locals>.Lazarus.__del__mst$rNr)rGsrLazarusrEls
%rrH)rrFis_finalizedrGrr@)r'rHlazarusrGs   @rtest_is_finalizedzGCTests.test_is_finalizedgsu+,	%	%)12


++-01rcgfd}tdDcgc]
}t|}}|Dcgc]}tj||c}d}t	j
|j
tdd}t	j
|j
tdD]}|j
|dycc}wcc}w)Nc@Dcgc]	}|c}ddycc}wr$r)r/r4WRsouchs  rcallbackz*GCTests.test_bug1055820b.<locals>.callback}s&)*rt*DG*srRr)rr"r2r3rFrGrHr)r'rPr%CsrrrNrOs      @@rtest_bug1055820bzGCTests.test_bug1055820bys	+$)8
,ahqk
,
,134Aw{{1h'4


TA&


TA&	&A
Q%	&-4s
CCctjGddGddfd}|tjy)NceZdZy) GCTests.test_bug21435.<locals>.ANrXrrrrYrUrZrrYceZdZdZdZy) GCTests.test_bug21435.<locals>.Bc||_yr$r)r'rs  rr(z)GCTests.test_bug21435.<locals>.B.__init__rrcd|_yr$rr:s rrz(GCTests.test_bug21435.<locals>.B.__del__s	 	rN)rrrr(rrrrrnrWs

!rrncJ}}||_||_yr$rZ)r\rrYrns  rdo_workz&GCTests.test_bug21435.<locals>.do_works#A!#AAFAFr)rFrG)r'r\rYrns  @@r
test_bug21435zGCTests.test_bug21435s7	

			!	!			


rc&ddld}fd}||dz}jd|jd|||dz}jd|jd	|vxsd
|v|||dz}jd|y)
Nraif 1:
            import gc
            import _testcapi
            @_testcapi.with_tp_del
            class X:
                def __init__(self, name):
                    self.name = name
                def __repr__(self):
                    return "<X %%r>" %% self.name
                def __tp_del__(self):
                    pass

            x = X('first')
            x.x = x
            x.y = X('second')
            del x
            gc.set_debug(%s)
        cfjtjdd|gjj}|j	\}}|j
j
|jj
j|jdj|d|S)Nz-Wdrrrrr)
Popenr
executablePIPEcommunicatercloserrH
returncode)rprrr'
subprocesss    rrun_commandz5GCTests.test_garbage_at_shutdown.<locals>.run_commands  #..%t!D!!!(A]]_NFF
HHNN
HHNNQ\\1-VS)Mr0s=ResourceWarning: gc: 2 uncollectable objects at shutdown; uses<X 'first'>zgc.DEBUG_UNCOLLECTABLEs8ResourceWarning: gc: 2 uncollectable objects at shutdowns[<X 'first'>, <X 'second'>]s[<X 'second'>, <X 'first'>]zgc.DEBUG_SAVEALLs!uncollectable objects at shutdown)rhassertInassertNotInr@)r'rrirrhs`   @rtest_garbage_at_shutdownz GCTests.test_garbage_at_shutdowns	$		TCZ(

'(.	00T$<<=

"#)	+
+v
5
7
+v
5	@T$667=vFrchd}td|\}}}|j|jdy)Nzif 1:
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            r__del__ called)rrHstrip)r'rrouterrs     rtest_gc_main_module_at_shutdownz'GCTests.test_gc_main_module_at_shutdowns4(d3C&78rct5}d}d|d}t|d|td|\}}}|j|j	ddddy#1swYyxYw)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
                gctestrro)rrrrHrp)r'
script_dirmodulerrrqrrs       r#test_gc_ordinary_module_at_shutdownz+GCTests.test_gc_ordinary_module_at_shutdownsh
Z	=:F"	$D


Hf5+D$7LBSSYY[*;<	=	=	=sAAA#cd}|jttttdd5}|j	|dddtt\}}}|j
|jdy#1swY=xYw)Nzif 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)wzutf-8)encodingro)
addCleanupr
r	openwriterrHrp)r'rscriptrrqrrs      rtest_global_del_SystemExitz"GCTests.test_global_del_SystemExitso#	
'
&#
0	FLL	'/C&78		sA==Bc(tj}|jt|d|D]t}|j	|t
|jt
|hd|j|dd|j|dd|j|ddvtjr3|jtjtjtj}tjdtj}|j|dd|dddz|j|dd|dd|j|dd|ddtjdtj}|j|dd|dddz|j|dd|dd|j|dd|dddzy)	Nr>	collectedcollections
uncollectablerrrrrCrR)
rF	get_statsrHrassertIsInstancedictrAassertGreaterEqual	isenabledr|rrrG)r'statsstoldnews     rtest_get_statszGCTests.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}0E0IJrctj|jtjdtj|jtjdyr)rFfreezerget_freeze_countunfreezerHr:s rtest_freezezGCTests.test_freeze+sF
		2..0!4

,,.2rc*tjgj|jt	fdtj
dD|j
t	fdtj
dD|j
t	fdtj
dDtjd|j
t	fdtj
dD|jt	fd	tj
dD|j
t	fd
tj
dDtjd|j
t	fdtj
dD|j
t	fdtj
dD|jt	fd
tj
dDtjd|j
t	fdtj
dD|j
t	fdtj
dD|jt	fdtj
dDtjy)Nc3&K|]}|u
ywr$r.0elementrJs  r	<genexpr>z+GCTests.test_get_objects.<locals>.<genexpr>6MWALMr
generationc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>9NWALNrrCc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr><rrrRc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>@rrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Crrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Frrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Jrrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Mrrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Prrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Trrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Wrrc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>Zrr)rFrGrEr@anyget_objectsrrIs @rtest_get_objectszGCTests.test_get_objects1s


	M!0LMM	
	
N11MNN	
	
M!0LMM	
	

a M!0LMM	
	
N11MNN	
	
M!0LMM	
	

a M!0LMM	
	
N11MNN	
	
M!0LMM	
	

a M!0LMM	
	
N11MNN	
	
M!0LMM	




rctj|jttjttjd|jttjd|jttjd|jttjd|jttjdy)Nrii1gX9v?)rFrGrHrrassertRaises
ValueErrorrr:s rtest_get_objects_argumentsz"GCTests.test_get_objects_arguments_s


R^^-.R^^t<=	?	
*bnnd;*bnne<)R^^S9)R^^U;rcjGdd}Gfdd|tjtj}|jjd~tj|jjd|jtjdjj|jjdtj|jjdtjy)NceZdZdZy)AGCTests.test_resurrection_only_happens_once_per_object.<locals>.Ac||_yr$mer:s rr(zJGCTests.test_resurrection_only_happens_once_per_object.<locals>.A.__init__k	rNr)rrrrYrj
rrYc eZdZdZgZfdZy)GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusrcfxjdz
c_jj|yrB)resurrectedresurrected_instancesrEr'rHs rrzOGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__rs(##q(#--44T:rN)rrrrrrrHsrrHrnsK$&!
;rrHrrC)	rFrGrrHrrrclearr)r'rYlazrHs   @r.test_resurrection_only_happens_once_per_objectz6GCTests.test_resurrection_only_happens_once_per_objectis			;a	;	




i,,a0



,,a0W::;Q?	%%++-,,a0


,,a0
		rcJGdd}Gfddtjtj}|}t|}||_||_~~tj|j
tjdjj}|jt|d|j
t|j|tjtjy)NceZdZdZy)6GCTests.test_resurrection_is_transitive.<locals>.Cargoc||_yr$rr:s rr(z?GCTests.test_resurrection_is_transitive.<locals>.Cargo.__init__rrNr)rrrCargorrrrceZdZgZfdZy)8GCTests.test_resurrection_is_transitive.<locals>.Lazarusc<jj|yr$)rrErs rrz@GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__s--44T:rN)rrrrrrsrrHrs$&!
;rrHrCcargo)
rFrGrrrrrHrrrr@hasattrr)r'rrrcargo_idinstancerHs      @rtest_resurrection_is_transitivez'GCTests.test_resurrection_is_transitives			;	;	




ie9		



W::;Q?00446'23HNN+X6



		rcNd}Gdd}Gfdd|}gd}tjtj|\}}t|D]	}|tj}|\}	}
|j	|||j	|	|z
||j	|
|z
d|	|
}}|tj}|\}	}
|j	|d|j	|	|z
d|j	|
|z
d|	|
}}t|D]	}||tj}|\}	}
|j	|||j	|	|z
||j	|
|z
d|	|
}}jtj}|\}	}
|j	|d|j	|	|z
d|j	|
|z
dtjy)	NdceZdZdZy)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Ac||_yr$rr:s rr(zUGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.A.__init__rrNr)rrrrYrrrrYceZdZfdZy)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Zc(j|yr$r)r'zss rrzTGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Z.__del__s		$rNr)rsrZrs
 rrcDtjd}|d|dfS)Nrr)rFr)rOs rgetstatszSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.getstatss&r"A[>1_#555rrrR)rFrGrrrHrr)r'rrYrroldcoldncr%rSrncrs           @r9test_resurrection_does_not_block_cleanup_of_other_objectszAGCTests.test_resurrection_does_not_block_cleanup_of_other_objectss

			 	 	6	




jeq	A
C	JJL
2AT1%eQ'e	JJL
2AT1%eQ'eq	A
C		JJL
2AT1%eQ'e

JJL
2AT1%eQ'
		rNz%requires ContainerNoGC extension typectjj}Gdd}Gdd}|}||_t	||_t
j|j
j||_	|jg}|j|tjtj~~tj|jtjy)NceZdZgdZy)+GCTests.test_trash_weakref_clear.<locals>.A)r\ywzNr1rrrrYrs(IrrYceZdZy)+GCTests.test_trash_weakref_clear.<locals>.ZNrXrrrrrrZrr)unittestmockMockr\r rr2r3valuerrErFrGrassert_not_calledr)r'rPrYrr\wr_cycles      rtest_trash_weakref_clearz GCTests.test_trash_weakref_clears@==%%'	)	)		
CAC {{13399h/DD6!






x


	""$
		r)2rrrrKrPrTr_rcrhrrrxrrrrrrrrrrrrrr
requires_working_threadingrrrr&rBrKrRr]rrmrsrxrrrrrrrrrskipIfr rrrrr@r@Vsx***---*0-22*A!F**(0
&
&*!!))(!F100284384t6066;.-7^2$&0@.G.G`9=&9K43,\<"H DAFX__]d*<>7>7rr@cxeZdZdZdZdZdZdZdZdZ	e
dZejed	d
Zy)GCCallbackTestscltj|_tjtj|_tjdtjj|jtjj|jg|_yr)rFrenabledrrrr	callbacksrEcb1cb2othergarbager:s rsetUpzGCCallbackTests.setUp/sd||~


\\^

Q
DHH%
DHH%rc|`tjj|jtjj|j
tj|j|jrtjtjtjD]}t|tsd|_tjdd=|`tjyr$)visitrFrrrrrrrrrGr
isinstancer6r8r)r'rs  rtearDownzGCCallbackTests.tearDown9sJ
DHH%
DHH%
TZZ <<IIK


::	#C#}-"	#
JJqM


rcg|_tjtjddgc}tjdd|jj|g|_yr$)rrFrGrrrE)r'rs  rprecleanzGCCallbackTests.precleanJsK



!#AA  )
rcR|jjd|t|fyrB)rrEr)r'phaseinfos   rrzGCCallbackTests.cb1Ts

1eT$Z01rc|jjd|t|f|dk(rt|dr|tj
Dcgc]}t
|ts|}}tj
Dcgc]}t
|ts|c}tj
dd|D]	}d|_yyycc}wcc}w)NrRstopcleanup)	rrErrrFrrr6r8)r'rrrucs     rrzGCCallbackTests.cb2Ws

1eT$Z01F?wtY7ZZH:a+G!HBH(*

B1$.q-$@BBJJqM
! 	
! 8?HBsB7!B79B<c|jtj|jDcgc]}|d	}}|Dcgc]
}|dk(s	|}}|Dcgc]
}|dk(s	|}}|j	|dgdz|j	|dgdz|jDcgc]}|d	}}|Dcgc]
}|dk(s	|}}|Dcgc]
}|dk(s	|}}|j	|dgdz|j	|dgdz|jD]@}|d}|jd|v|jd|v|jd|vBycc}wcc}wcc}wcc}wcc}wcc}w)	NrrCrRstartrrrr)rrFrGrrHr@)r'rrr%n1n2rs       rtest_collectzGCCallbackTests.test_collectasq





 ::&aQqT&&
%Aa1fa
%
%
%Aa1fa
%
%aSU#aSU# ::&aQqT&&
+Aa7la
+
+
*Aa6ka
*
*gYq[)fXaZ(	5AQ4DOOLD01OOK4/0OOOt34		5
'
%
%

'
+
*s;E
EE
E#%E#%E(7
E-E-
E2E2c|jtjd|jD]}|d}|j	|ddy)NrRr)rrFrGrrH)r'rrs   rtest_collect_generationz'GCCallbackTests.test_collect_generation|sG




1
	4AQ4DT,/3	4rc|jtttdtj|j
D]:}|ddk7r|d}|j
|dd|j
|dd<|j
ttjdtjD]}|j|td|_
g|_gtjddtj|j
D]:}|ddk7r|d}|j
|dd	|j
|dd<|j
ttjd	y)
Nr1rCrrRrrrTr)rr6r"rFrGrrHrrrr)r'rrrs    rtest_collect_garbagez$GCCallbackTests.test_collect_garbagesJ





	7Atv~Q4DT+.2T/2A6	7	
RZZ!,	4A!!!]3	4


1



	7Atv~Q4DT+.2T/2A6	7	
RZZ!,rzbuilt with -NDEBUGcx|jtdddl}tjd}|jtjd|g|j|j}|j\}}|jj|jj|j|d|j|dd}|j|d	|z|j|d
|j|d|z|j|d|j|d
y)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()
        rr`sGgcmodule\.c:[0-9]+: gc_decref: Assertion "gc_get_refs\(g\) > 0" failed.srefcount is too smalls
[0-9a-fA-Fx]+sobject address  : sobject refcount : 1sobject type     : sobject type name: listsobject repr     : \[1, 2, 3\])rrrhtextwrapdedentrarrbrcrdrrerr)r'rhrrgrr
address_regexs       rtest_refcount_errorsz$GCCallbackTests.test_refcount_errorss#	


	h 
&
cnndD9$.OO$.OO

5		W	Y%	'*
"]2	4#	%"]2	4&	(-	/rN)rrrrrrrrrrrrrrBUILD_WITH_NDEBUGrrrrrr.s_"2!564 - -FX__&)+2/+2/rrc$eZdZdZdZdZdZy)GCTogglingTestsc,tjyr$)rFrr:s rrzGCTogglingTests.setUps
		rc,tjyr$)rFrr:s rrzGCTogglingTests.tearDowns


rc:
td}tjtd}||_|`td}tj|
g
fd}tj||}dx}x}}g}d}t}|jsT|dz
}|dkDr|jd|jtd|jg|jsT|jtdD]}	|j|	dy)NrrCrRcgddyr$r)r/c2wrrOs rrPz2GCTogglingTests.test_bug1055820c.<locals>.callbacksvhDGr''gc didn't happen after 10000 iterations)
r"rFrG
keep_c0_aliver&r2r3r+r.rrHrrE)r'c0c1c2rPc0wrjunkr%detectorrrrOs          @@rtest_bug1055820cz GCTogglingTests.test_bug1055820cs	a[



a[G
a[{{2	{{2x(R"@
=&&
FA5y		CDSY*KKO&&	
TA&	&A
Q%	&rc 	
g
G	
fddt}|d}tjtd}||_|`td}tj|	dx}x}}t}g}d}|jsT|dz
}|dkDr|jd|jt
d|jg|jsT|jt
d
D]}|j|dy)NceZdZfdZy)+GCTogglingTests.test_bug1055820d.<locals>.Dcgddyr$r)r'rrOs rrz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__2s6(QrNr)rrOsrDr+1s
#rr-rrCrRrr )
r"rFrG
keep_d0_aliver&r2r3r+r.rrHrrE)r'r-d0r#r$r'r&r%rrrOs         @@rtest_bug1055820dz GCTogglingTests.test_bug1055820d+s
	#	#qT



a[G
a[{{2R"<=
&&
FA5y		CDSY*KKO&&	
TA&	&A
Q%	&rN)rrrrrr(r0rrrrrsD&LA&rrceZdZdZy)PythonFinalizationTestscFtjd}td|y)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)
        r)rrr)r'rs  r
test_ast_finiz%PythonFinalizationTests.test_ast_finips#
 

	t$rN)rrrr4rrrr2r2os%rr2ctjatjtjatjt
tjztjyr$)	rFrrrrrr
DEBUG_LEAKrGrrrsetUpModuler7sAllnGJJLLLNELL"--'(JJLrctjttrt	dtj
tstjyy)Nzrestoring automatic collection)rFrrrprintrrrrrrtearDownModuler:s4LL
./IIK


r__main__)-r
unittest.mocktest.supportrrrrtest.support.import_helperrtest.support.os_helperrr	r
test.support.script_helperrrr
rFr	sysconfigrrrr2	_testcapirImportErrorr rr"r+r6get_config_varsgetrrTestCaser@rrr2r7r:rmainrrr<module>rHsi==4;;D)	
%'v
:&:


F




9"";3#'@y'@'@'B;'OO
%S*<==
UhUpm/h''m/`N&h''N&b%h//%*	zHMMOM,Ms$D7E7EEEE