python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_gc.cpython-312.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+ceZdZdZddZdZy)
Uncollectablea)Create 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.Nc:|t||_y||_y)N)partner)r6r8)r'r8s  rr(zUncollectable.__init__Cs?(6DL"DLrcyr$rr's r
__tp_del__zUncollectable.__tp_del__Hsrr$)rrr__doc__r(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~|jtjdyrCrGrHrIr'ds  r	test_dictzGCTests.test_dict^s2!


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




q)rcGdd}||_tj~|jtjdy)NceZdZy)GCTests.test_class.<locals>.ANrrrrrrArXprrZrarGrHassertNotEqualr'rZs  r
test_classzGCTests.test_classos5		



BJJL!,rcGddt}tj~|jtjdy)NceZdZy)%GCTests.test_newstyleclass.<locals>.ANrYrrrrZrcxr[rrZr)rrGrHr^r_s  rtest_newstyleclasszGCTests.test_newstyleclassws0		



BJJL!,rcGdd}|}||_tj~|jtjdy)NceZdZy) GCTests.test_instance.<locals>.ANrYrrrrZrgr[rrZrr\r'rZr]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>.ANrYrrrrZrlr[rrZrceZdZy)#GCTests.test_newinstance.<locals>.BNrYrrrBrnr[rroceZdZy)#GCTests.test_newinstance.<locals>.CNrYrrrrrqr[rr)rr]rGrHr^listrI)r'rZr]rors     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)rrrrZrvs
*rrZr)rGrHr^rhs   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;rrrrZr|&rrZceZdZy)(GCTests.test_legacy_finalizer.<locals>.BNrYrrrrorr[rror&didn't find obj in garbage (finalizer))
rr]idbrGrHr^garbagefailremover'rZror]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~rNrrrrrZrrrrZceZdZy)1GCTests.test_legacy_finalizer_newclass.<locals>.BNrYrrrrorr[rrorr)rrr]rrrGrHr^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
rS)execrGrHrIrOs  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)rrIassertRegexassertFalse)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
MMOErrDrN)r'rs  r
test_framezGCTests.test_frame)s+	$


	q)rc4tj|jtjgg}|j	|t|}tj}tj|tjz~tjtj||jttjdtjj}|jt||yrC)rGrHrIrrFr	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)NrDceZdZdZy)GCTests.test_del.<locals>.Act|yr$dirr:s r__del__z#GCTests.test_del.<locals>.A.__del__P	D	rNrrrrrrrrZrO
rrZ)rG
get_thresholdenable
set_thresholddisabler'
thresholdsrZr]s    rtest_delzGCTests.test_delIsT%%'

		
		
C




*%rctj}tjtjdGddt}|}~tj
tj|y)NrDceZdZdZy)$GCTests.test_del_newclass.<locals>.Act|yr$rr:s rrz,GCTests.test_del_newclass.<locals>.A.__del___rrNrrrrrZr^rrrZ)rGrrrrrrs    rtest_del_newclasszGCTests.test_del_newclassXsV%%'

		
		
C




*%rc(tjtj\}}}g}tj\}}}|j||fd|j||fd|j	|d|j||y)Nrr)rGrH	get_countrI
assertLess
assertGreater)r'r]rcxrPers        rtest_get_countzGCTests.test_get_countmsz


,,.1a,,.1a!Q(!Q(1	
1a rctjg}tjdtj\}}}tjdtj\}}}tjdtj\}}	}
|j||fd|j||fd|j|	|
fdy)NrrDrS)rDr)rrDr)rGrHrrI)r'rr]rrrPrrghr%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)NrDr)nrGrH)r'Ouchs rrz+GCTests.test_trashcan.<locals>.Ouch.__del__s0!66B;!#JJL$rN)rrrrr)rsrrrs
A
!rrrS)rDrS)rGrranger)r'NcountrTr%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<rSc3tK	dtjdy#tjdwxYww)z<A generator that releases the GIL when closed or dealloc'ed.Ngư>)timesleeprrrsleeper_genz2GCTests.test_trashcan_threads.<locals>.sleeper_gens&
%

8$

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

d# MQrN)rrrrrr(r)rrsrrrsED
%
rrcLg}tD]}|gg}~y)zyCreate a sufficiently nested container object so that the
            trashcan mechanism is invoked when deallocating it.N)r)rr%rNESTINGs  rmake_nestedz2GCTests.test_trashcan_threads.<locals>.make_nesteds1"A7^
sVH
rc ss
yy)z!Exercise make_nested() in a loop.Nr)exitrsr
run_threadz1GCTests.test_trashcan_threads.<locals>.run_threads
rgh㈵>)targetc&jdSrCrF)rsr<lambda>z/GCTests.test_trashcan_threads.<locals>.<lambda>sQr?)rrrgetswitchintervalsetswitchintervalr	threadingThreadrFr

start_threadsrrrGrHrIrrr)r'	N_THREADSrold_switchintervalthreadsr%rTrrrrrs       @@@@@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
%rrrSr	rGrHrrrI)r'rr]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|`trC)rr	r
rs  rr
z-GCTests.test_boom2.<locals>.Boom2.__getattr__s%!66A:	$$rN)rrrr(r
rrrBoom2rs

%rrrSr)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)rDrr)rDr)rDrrrrDrS)rrrrrr]y@)rG
get_referentssortrItuplerrr)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)NrDry?@TFar]ceZdZy)*GCTests.test_is_tracked.<locals>.UserClassNrYrrr	UserClassr+Kr[rr,ceZdZy)(GCTests.test_is_tracked.<locals>.UserIntNrYrrrUserIntr.Nr[rr/ceZdZdZy)/GCTests.test_is_tracked.<locals>.UserClassSlotsrNrrr	__slots__rrrUserClassSlotsr1RIrr4ceZdZdZy)/GCTests.test_is_tracked.<locals>.UserFloatSlotsrNr2rrrUserFloatSlotsr7Vr5rr8ceZdZdZy)-GCTests.test_is_tracked.<locals>.UserIntSlotsrNr2rrrUserIntSlotsr:Zr5rr;)
rrG
is_tracked	bytearraytypeintrfloat
assertTrueset)r'r,r/r4r8r;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)rHsrLazarusrFls
%rrI)rrGis_finalizedrHrrA)r'rIlazarusrHs   @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*srSr)rr"r2r3rGrHrIr)r'rQr%CsrrrOrPs      @@rtest_bug1055820bzGCTests.test_bug1055820bys	+$)8
,ahqk
,
,134Aw{{1h'4


TA&


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

!rrocJ}}||_||_yr$r[)r]rrZros  rdo_workz&GCTests.test_bug21435.<locals>.do_works#A!#AAFAFr)rGrH)r'r]rZros  @@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
executablePIPEcommunicatercloserrI
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)riassertInassertNotInrA)r'rrjrris`   @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)rrIstrip)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
                gctestrrp)rrrrIrq)r'
script_dirmodulerrrrrss       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)encodingrp)
addCleanupr
r	openwriterrIrq)r'rscriptrrrrss      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
uncollectablerrrrrDrS)
rG	get_statsrIrassertIsInstancedictrBassertGreaterEqual	isenabledr}rrrH)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)rGfreezerget_freeze_countunfreezerIr: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.0elementrKs  r	<genexpr>z+GCTests.test_get_objects.<locals>.<genexpr>6MWALMr
generationc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>9NWALNrrDc3&K|]}|u
ywr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr><rrrSc3&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)rGrHrFrAanyget_objectsrrJs @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?)rGrHrIrr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)rrrrZrj
rrZc eZdZdZgZfdZy)GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusrcfxjdz
c_jj|yrC)resurrectedresurrected_instancesrFr'rIs rrzOGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__rs(##q(#--44T:rN)rrrrrrrIsrrIrnsK$&!
;rrIrrD)	rGrHrrIrrrclearr)r'rZlazrIs   @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$)rrFrs rrz@GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__s--44T:rN)rrrrrrsrrIrs$&!
;rrIrDcargo)
rGrHrrrrrIrrrrAhasattrr)r'rrrcargo_idinstancerIs      @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)rrrrZrrrrZceZdZfdZy)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)rGr)rPs rgetstatszSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.getstatss&r"A[>1_#555rrrS)rGrHrrrIrr)r'rrZrroldcoldncr%rTrncrs           @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]ywzNr2rrrrZrs(IrrZceZdZy)+GCTests.test_trash_weakref_clear.<locals>.ZNrYrrrrrr[rr)unittestmockMockr]r rr2r3valuerrFrGrHrassert_not_calledr)r'rQrZrr]wr_cycles      rtest_trash_weakref_clearz GCTests.test_trash_weakref_clears@==%%'	)	)		
CAC {{13399h/DD6!






x


	""$
		r)2rrrrLrQrUr`rdrirsryrrrrrrrrrrrrrr
requires_working_threadingrrrr'rCrLrSr^rrnrtryrrrrrrrrrskipIfr rrrrrArAVsx***---*0-22*A!F**(0
&
&*!!))(!F100284384t6066;.-7^2$&0@.G.G`9=&9K43,\<"H DAFX__]d*<>7>7rrAcxeZdZdZdZdZdZdZdZdZ	e
dZejed	d
Zy)GCCallbackTestscltj|_tjtj|_tjdtjj|jtjj|jg|_yr)rGrenabledrrrr	callbacksrFcb1cb2othergarbager:s rsetUpzGCCallbackTests.setUp/sd||~


\\^

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


::	#C#}-"	#
JJqM


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



!#AA  )
rcR|jjd|t|fyrC)rrFr)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)NrSstopcleanup)	rrFrrrGrrr6r8)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)	NrrDrSstartrrrr)rrGrHrrIrA)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)NrSr)rrGrHrrI)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)
Nr1rDrrSrrrTr)rr6r"rGrHrrIrrrr)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()
        rrasGgcmodule\.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\])rrritextwrapdedentrbrrcrdrerrfrr)r'rirrhrr
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$)rGrr:s rrzGCTogglingTests.setUps
		rc,tjyr$)rGrr: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)NrrDrScgddyr$r)r/c2wrrPs rrQz2GCTogglingTests.test_bug1055820c.<locals>.callbacksvhDGr''gc didn't happen after 10000 iterations)
r"rGrH
keep_c0_aliver&r2r3r+r.rrIrrF)r'c0c1c2rQc0wrjunkr%detectorrrrPs          @@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'rrPs rrz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__2s6(QrNr)rrPsrDr,1s
#rr.rrDrSr r!)
r"rGrH
keep_d0_aliver&r2r3r+r.rrIrrF)r'r.d0r$r%r(r'r%rrrPs         @@rtest_bug1055820dz GCTogglingTests.test_bug1055820d+s
	#	#qT



a[G
a[{{2R"<=
&&
FA5y		CDSY*KKO&&	
TA&	&A
Q%	&rN)rrrrrr)r1rrrrrsD&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)rrrr5rrrr3r3os%rr3c&tjatjtjrJtjatjt
tjztjyr$)	rGrrrrrr
DEBUG_LEAKrHrrrsetUpModuler8sMllnGJJL||~LLNELL"--'(JJLrctjttrt	dtj
tjsJtstjyy)Nzrestoring automatic collection)	rGrrrprintrrrrrrrtearDownModuler;s@LL
./IIK
<<>


r__main__)-r
unittest.mocktest.supportrrrrtest.support.import_helperrtest.support.os_helperrr	r
test.support.script_helperrrr
rGr	sysconfigrrrr2	_testcapirImportErrorr rr"r+r6get_config_varsgetrrTestCaserArrr3r8r;rmainrrr<module>rIsi==4;;D)	
%'v
:&:


F




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