python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
test_gc.cpython-311.pyc

eddlZddlZddlmZmZmZmZddlmZddl	m
Z
mZmZddl
mZmZddlmZddlZddlZddlZddlZddlZddlZddlZ	ddlmZn#e$rdZYnwxYw	dd	lmZn
#e$rdZYnwxYwGd
deZGdd
eZeGddeZej !ddrdej dvZ"n
e#edZ"Gddej$Z%Gddej$Z&Gddej$Z'Gddej$Z(dZ)dZ*e+dkrej,dSdS)N)verbose
refcount_testcpython_onlyrequires_subprocess)
import_module)temp_dirTESTFNunlink)assert_python_okmake_script)threading_helper)with_tp_delc,Gddt}|S)NceZdZdZdS)with_tp_del.<locals>.Cc td)Nzrequires _testcapi.with_tp_del)	TypeError)clsargskwargss   @/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/test_gc.py__new__zwith_tp_del.<locals>.C.__new__s @AAAN)__name__
__module____qualname__rrrCrs(
B
B
B
B
Brr)object)rrs  rrrs;	B	B	B	B	B	B	B	Br)
ContainerNoGCceZdZdZdS)C1055820c"||_||_dSN)iloop)selfr%s  r__init__zC1055820.__init__)s			rNrrrr(rrrr"r"(s#rr"ceZdZdZdS)GC_Detectorcnd_fd}tjtd|_dS)NFcd_dS)NT)gc_happened)ignoredr's rit_happenedz)GC_Detector.__init__.<locals>.it_happened4s#Dr)r.weakrefrefr"wr)r'r0s` rr(zGC_Detector.__init__1sC 	$	$	$	$	$
+hsmm[99rNr)rrrr+r+-s#:::::rr+c eZdZdZddZdZdS)
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.NcF|t||_dS||_dS)N)partner)r6r8)r'r8s  rr(zUncollectable.__init__Cs(?(666DLLL"DLLLrcdSr$rr's r
__tp_del__zUncollectable.__tp_del__Hsrr$)rrr__doc__r(r;rrrr6r6;sA))####





rr6	PY_CFLAGSz-DNDEBUGgettotalrefcountceZdZdZdZdZdZdZdZdZ	dZ
ed	Zed
Z
dZdZed
ZdZdZdZedZedZdZejdZdZdZdZdZdZdZ dZ!dZ"dZ#ee$dZ%dZ&d Z'd!Z(d"Z)d#Z*d$Z+d%Z,d&Z-d'Z.d(Z/e0j1e2d)ud*d+Z3d)S),GCTestscg}||tj~|tjddSNappendgccollectassertEqualr'ls  r	test_listzGCTests.test_listWsF	


q)))))rci}||d<tj~|tjddSrCrGrHrIr'ds  r	test_dictzGCTests.test_dict^s@!


q)))))rcg}|f}||tj~~|tjddS)NrE)r'rKts   r
test_tuplezGCTests.test_tupleesP
D	



q)))))rcGdd}||_tj~|tjddS)NceZdZdS)GCTests.test_class.<locals>.ANrrrrrrArXpDrrZrarGrHassertNotEqualr'rZs  r
test_classzGCTests.test_classosa								


BJLL!,,,,,rcGddt}tj~|tjddS)NceZdZdS)%GCTests.test_newstyleclass.<locals>.ANrYrrrrZrcxr[rrZr)rrGrHr^r_s  rtest_newstyleclasszGCTests.test_newstyleclassws\								


BJLL!,,,,,rcGdd}|}||_tj~|tjddS)NceZdZdS) GCTests.test_instance.<locals>.ANrYrrrrZrgr[rrZrr\r'rZr]s   r
test_instancezGCTests.test_instance~sl								
ACC


BJLL!,,,,,rcGddt}|}||_tj~|tjdGddt
}Gdd||}|}||_tj~|tjd~~|tjd||_~|tjd|tjddS)NceZdZdS)#GCTests.test_newinstance.<locals>.ANrYrrrrZrlr[rrZrceZdZdS)#GCTests.test_newinstance.<locals>.BNrYrrrBrnr[rroceZdZdS)#GCTests.test_newinstance.<locals>.CNrYrrrrrqr[rr)rr]rGrHr^listrI)r'rZr]rors     rtest_newinstancezGCTests.test_newinstancesi								
ACC


BJLL!,,,													1			
ACC


BJLL!,,,
qBJLL!,,,acc
BJLL!,,,q)))))rcGdd}|}tj~|tjddS)NceZdZdZdS)GCTests.test_method.<locals>.Ac|j|_dSr$)r(initr:s rr(z'GCTests.test_method.<locals>.A.__init__s M			rNr)rrrrZrvs#
*
*
*
*
*rrZr)rGrHr^rhs   rtest_methodzGCTests.test_methodsg	*	*	*	*	*	*	*	*
ACC


BJLL!,,,,,rctGdd}Gdd}|}||_t|}|}||_t	j~~|t	jdtjD]}t||kr|`n|dtj	|dS)NceZdZdZdS)(GCTests.test_legacy_finalizer.<locals>.AcdSr$rr:s rr;z3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__rNrrrr;rrrrZr|&&&&&rrZceZdZdS)(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
	'	'	'	'	'	'	'
	'								
ACC!uu
ACC



BJLL!,,,:	@	@C#ww$E
II>???

#rctGddt}Gddt}|}||_t|}|}||_tj~~|tjdt
jD]}t||kr|`n|	dt
j
|dS)NceZdZdZdS)1GCTests.test_legacy_finalizer_newclass.<locals>.AcdSr$rr:s rr;z<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__r~rNrrrrrZrrrrZceZdZdS)1GCTests.test_legacy_finalizer_newclass.<locals>.BNrYrrrrorr[rrorr)rrr]rrrGrHr^rrrrs       rtest_legacy_finalizer_newclassz&GCTests.test_legacy_finalizer_newclasss 
	'	'	'	'	'	'	'
	'								
ACC!uu
ACC



BJLL!,,,:	@	@C#ww$E
II>???

#rci}td|tj~|tjddS)Nzdef f(): pass
rS)execrGrHrIrOs  r
test_functionzGCTests.test_functionsJ

"""


q)))))rcd}td|\}}}||d||d||dS)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_statesi:x.dD99FFQ!JKKK     rcd}tj||tjddS)Nc,tj}dSr$)sys	_getframe)frames rfzGCTests.test_frame.<locals>.f+sMOOEEErrDrN)r'rs  r
test_framezGCTests.test_frame)sI	$	$	$

	q)))))rcLtj|tjgg}||t|}tj}tj|tjz~tjtj||ttjdtj
}|t||dSrC)rGrHrIrrFr	get_debug	set_debug
DEBUG_SAVEALLlenpop)r'Lid_Ldebugrs     rtest_saveallzGCTests.test_saveall1s	
R(((	!uu
UR--...



URZ!,,,jnnC$'''''rctj}tjtjdGdd}|}~tjtj|dS)NrDceZdZdZdS)GCTests.test_del.<locals>.Ac$t|dSr$dirr:s r__del__z#GCTests.test_del.<locals>.A.__del__PD					rNrrrrrrrrZrO#




rrZ)rG
get_thresholdenable
set_thresholddisabler'
thresholdsrZr]s    rtest_delzGCTests.test_delIs%''

	
								
ACC



*%%%%rctj}tjtjdGddt}|}~tjtj|dS)NrDceZdZdZdS)$GCTests.test_del_newclass.<locals>.Ac$t|dSr$rr:s rrz,GCTests.test_del_newclass.<locals>.A.__del___rrNrrrrrZr^rrrZ)rGrrrrrrs    rtest_del_newclasszGCTests.test_del_newclassXs%''

	
								
ACC



*%%%%rcDtjtj\}}}g}tj\}}}|||fd|||fd||d|||dS)Nrr)rGrH	get_countrI
assertLess
assertGreater)r'r]rcxrPers        rtest_get_countzGCTests.test_get_countms

,..1a,..1a!Q(((!Q(((1	
1a     rctjg}tjdtj\}}}tjdtj\}}}tjdtj\}}	}
|||fd|||fd||	|
fddS)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(((((rc\Gfddtjd}tdD]c}g}t|D]}|g}g}t|D]}|g}i}t|D]}|d}dtjdS)NceZdZdZfdZdS)#GCTests.test_trashcan.<locals>.Ouchrcljdz_jdzdkrtjdSdS)NrDr)nrGrH)r'Ouchs rrz+GCTests.test_trashcan.<locals>.Ouch.__del__s8!6B;!##JLLLLL$#rN)rrrrr)rsrrrs3A
!
!
!
!
!
!
!rrrS)rDrS)rGrranger)r'NcountrTr%uvrs       @r
test_trashcanzGCTests.test_trashcans	!	!	!	!	!	!	!	!	!	!(		1XX		&		&EA1XX
 
 KA1XX
 
 KA1XX
&
&ddff%%
&

rc	
dd}dGfddtfd
	
fd}tj}tjd	g	g}t	|D],}tj|	}||-tj	|	fd
5tjddddn#1swxYwYtj|n#tj|wxYwtj
|tjtjdS)N<rSc3nK	dVtjddS#tjdwxYw)z<A generator that releases the GIL when closed or dealloc'ed.Ngư>)timesleeprrrsleeper_genz2GCTests.test_trashcan_threads.<locals>.sleeper_gens@
%
8$$$$$
8$$$$s4c.eZdZgZgZfdZfdZdS)(GCTests.test_trashcan_threads.<locals>.CcJ||dd<jddSr$)initsrF)r'alistrs  rr(z1GCTests.test_trashcan_threads.<locals>.C.__init__s*QQQt$$$$$rcnjd}t|dSr$)delsrFnext)r'rrrs  rrz0GCTests.test_trashcan_threads.<locals>.C.__del__s3

d### KMMQrN)rrrrrr(r)rrsrrrsVED
%
%
%
%
%







rrc^g}tD]}|gg}~dS)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_nestedsA"A7^^

QsVVHrc(sdSdS)z!Exercise make_nested() in a loop.Nr)exitrsr
run_threadz1GCTests.test_trashcan_threads.<locals>.run_threads4








rgh㈵>)targetc.dSrCrF)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		%	%	%											$												
!244d###		6DG9%%
"
"$J777q!!!!!/9O9O9O9OPP
 
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
!"45555C!"45555

QWs16{{33333s1AC0/CC0CC0CC00DchGdd}|}|}||_||_tjttj}~~|tjd|ttj|dS)NceZdZdZdS)GCTests.test_boom.<locals>.Boomc|`tr$attrAttributeErrorr'
someattributes  r__getattr__z+GCTests.test_boom.<locals>.Boom.__getattr__
I$$rNrrrrrrrBoomr#
%
%
%
%
%rrrSr
rGrHrrrI)r'rr]r
garbagelens     r	test_boomzGCTests.test_booms	%	%	%	%	%	%	%	%

DFFDFF

__

q	
q)))RZ*55555rchGdd}|}|}||_||_tjttj}~~|tjd|ttj|dS)NceZdZdZdZdS)!GCTests.test_boom2.<locals>.Boom2cd|_dSNrrr:s rr(z*GCTests.test_boom2.<locals>.Boom2.__init__
rcJ|xjdz
c_|jdkr|`trCrr
rrs  rrz-GCTests.test_boom2.<locals>.Boom2.__getattr__'!6A::	$$rNrrrr(rrrrBoom2r2



%
%
%
%
%rr!rSr)r'r!r]rrs     r
test_boom2zGCTests.test_boom2s	%	%	%	%	%	%	%	%
EGGEGG

__

q	
q)))RZ*55555rctGddt}|}|}||_||_tjt	tj}~~|tjd|t	tj|dS)NceZdZdZdS)'GCTests.test_boom_new.<locals>.Boom_Newc|`tr$r	rs  rrz3GCTests.test_boom_new.<locals>.Boom_New.__getattr__&rrNrrrrBoom_Newr&%rrr(rSrr
rGrHrrrI)r'r(r]rrs     r
test_boom_newzGCTests.test_boom_new!s	%	%	%	%	%v	%	%	%

HJJHJJ

__

qq)))RZ*55555rctGddt}|}|}||_||_tjt	tj}~~|tjd|t	tj|dS)NceZdZdZdZdS))GCTests.test_boom2_new.<locals>.Boom2_Newcd|_dSrrr:s rr(z2GCTests.test_boom2_new.<locals>.Boom2_New.__init__7rrcJ|xjdz
c_|jdkr|`trCrrs  rrz5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__:rrNr rrr	Boom2_Newr-6r"rr0rSr))r'r0r]rrs     rtest_boom2_newzGCTests.test_boom2_new5s	%	%	%	%	%	%	%	%
IKKIKK

__

qq)))RZ*55555rc	gd}tj|}||||t	|}tj|}||||ddd}gd}tj|}||||tjddgddid	}|||d
d
gtt
dz|tjddd
gdS)N)rDrr3)rDr)rDr3rr4rDrS)rrrrrr]y@)rG
get_referentssortrItuplerrr)r'rgotatupleadictexpecteds      rtest_get_referentszGCTests.test_get_referentsKsB		u%%


e$$$uv&&


e$$$!<<u%%


h'''1v1vy99


q!ftE!HH~~5666)!S"55r:::::rc"|tjd|tjd|tjd|tjd|tjd|tjd|tjd|tjd|tjtd|tjt|tjt
|tjt|tjt
Gdd	}Gd
dt
}Gdd
}Gddt}Gddt
}|tjt|tj||tj||tj||tjg|tjt|tj||tj||tj|dS)NrDry?@TFar]ceZdZdS)*GCTests.test_is_tracked.<locals>.UserClassNrYrrr	UserClassrAur[rrBceZdZdS)(GCTests.test_is_tracked.<locals>.UserIntNrYrrrUserIntrDxr[rrEceZdZdZdS)/GCTests.test_is_tracked.<locals>.UserClassSlotsrNrrr	__slots__rrrUserClassSlotsrG|IIIrrJceZdZdZdS)/GCTests.test_is_tracked.<locals>.UserFloatSlotsrNrHrrrUserFloatSlotsrMrKrrNceZdZdZdS)-GCTests.test_is_tracked.<locals>.UserIntSlotsrNrHrrrUserIntSlotsrPrKrrQ)
rrG
is_tracked	bytearraytypeintrfloat
assertTrueset)r'rBrErJrNrQs      rtest_is_trackedzGCTests.test_is_trackedbs
	
t,,---q))***s++,,,z22333t,,---u--...t,,---s++,,,y77888t,,---s++,,,v..///vxx00111													c																U								3				

b))***
i00111
iikk22333
ggii00111
b))***
cee,,---
nn&6&677888
nn&6&677888
llnn5566666rcx|tjdgGfdd}|}|tj|~tj}|tj|dS)Nr3ceZdZfdZdS)*GCTests.test_is_finalized.<locals>.Lazarusc2|dSr$r)r'storages rrz2GCTests.test_is_finalized.<locals>.Lazarus.__del__st$$$$$rNr)r^srLazarusr\s.
%
%
%
%
%
%
%rr_)rrGis_finalizedrHrrW)r'r_lazarusr^s   @rtest_is_finalizedzGCTests.test_is_finalizeds++,,,	%	%	%	%	%	%	%	%	%	%'))11222

++--0011111rcgfddtdD}fd|Dd}tj|t	dd}tj|t	dD]}||ddS)Nc*dDdd<dS)Nc"g|]}|
Srr).0r4s  r
<listcomp>z>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>s***rrtt***rr)r/WRsouchs rcallbackz*GCTests.test_bug1055820b.<locals>.callbacks"**c***DGGGrc,g|]}t|Sr)r"rfr%s  rrgz,GCTests.test_bug1055820b.<locals>.<listcomp>s
,
,
,ahqkk
,
,
,rrSc:g|]}tj|Sr)r2r3)rfrrjs  rrgz,GCTests.test_bug1055820b.<locals>.<listcomp>s%444Aw{1h''444rr)rrGrHrIr)r'Csrrrhrjris    @@@rtest_bug1055820bzGCTests.test_bug1055820bs	+	+	+	+	+	+-
,588
,
,
,4444444

TA&&&

TA&&&	&	&A
Q%%%%	&	&rctjGddGddfd}|tjdS)NceZdZdS) GCTests.test_bug21435.<locals>.ANrYrrrrZrrr[rrZceZdZdZdZdS) GCTests.test_bug21435.<locals>.Bc||_dSr$r)r'rs  rr(z)GCTests.test_bug21435.<locals>.B.__init__rrcd|_dSr$r
r:s rrz(GCTests.test_bug21435.<locals>.B.__del__s
 			rN)rrrr(rrrrrorts2



!
!
!
!
!rroc^}}||_||_dSr$rw)r]rrZros  rdo_workz&GCTests.test_bug21435.<locals>.do_works3A!!##AAFAFFFr)rGrH)r'ryrZros  @@r
test_bug21435zGCTests.test_bug21435s	
									!	!	!	!	!	!	!	!										

rc^ddld}fd}||dz}d|d|||dz}d|d	|vpd
|v|||dz}d|dS)
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)
        c\tjdd|gjj}|\}}|j|j|j	d|d|S)Nz-Wdrrrrr)
Popenr
executablePIPEcommunicatercloserrI
returncode)rprrr'
subprocesss    rrun_commandz5GCTests.test_garbage_at_shutdown.<locals>.run_commands  #.%t!D!!!((A]]__NFF
HNN
HNN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)rassertInassertNotInrW)r'rrrrs`   @rtest_garbage_at_shutdownz GCTests.test_garbage_at_shutdowns	$												TCZ((

'(.	0	0	0000T$<<==

"#)	+	+	+
+v
5
7
+v
5	@	@	@T$6677=vFFFFFrcd}td|\}}}||ddS)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_shutdown
sE(d33C&788888rct5}d}d|d}t|d|td|\}}}||dddddS#1swxYwYdS)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)rrrrIr)r'
script_dirmodulerrrrs       r#test_gc_ordinary_module_at_shutdownz+GCTests.test_gc_ordinary_module_at_shutdowns
ZZ	=:FF"zz	$D


Hf555+D$77LBSSYY[[*;<<<	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=sAA22A69A6cRd}|ttttdd5}||dddn#1swxYwYtt\}}}||ddS)Nzif 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)wzutf-8)encodingr)
addCleanupr
r	openwriterrIr)r'rscriptrrrs      rtest_global_del_SystemExitz"GCTests.test_global_del_SystemExit-s#	
'''
&#
0
0
0	FLL															'//C&788888sAA #A c*tj}|t|d|D]}||t
|t
|hd||dd||dd||ddtjr2|	tj
tjtj}tjdtj}||dd|dddz||dd|dd||dd|ddtjdtj}||dd|dddz||dd|dd||dd|dddzdS)	Nr3>	collectedcollections
uncollectablerrrrrDrS)
rG	get_statsrIrassertIsInstancedictrXassertGreaterEqual	isenabledrrrrH)r'statsstoldnews     rtest_get_statszGCTests.test_get_stats;s:UQ'''	<	<B!!"d+++SWWJJJ
L
L
L##B{OQ777##B}$5q999##B$7;;;;
<>>	OOBI&&&JLLLlnn

1


lnnQ
.A}0E0IJJJQ
.A}0EFFFQ
.A}0EFFF

1


lnnQ
.A}0E0IJJJQ
.A}0EFFFQ
.A}0E0IJJJJJrctj|tjdtj|tjddSr)rGfreezerget_freeze_countunfreezerIr:s rtest_freezezGCTests.test_freezeUs\
	2.00!444



,..22222rctjg|t	fdtjdD|t	fdtjdD|t	fdtjdDtjd|t	fdtjdD|t	fd	tjdD|t	fd
tjdDtjd|t	fdtjdD|t	fdtjdD|t	fd
tjdDtjd|t	fdtjdD|t	fdtjdD|t	fdtjdDtjdS)Nc3 K|]}|uV	dSr$rrfelementrKs  r	<genexpr>z+GCTests.test_get_objects.<locals>.<genexpr>`'MMWALMMMMMMrr
generationc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>c'NNWALNNNNNNrrDc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>frrrSc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>jrrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>mrrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>prrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>trrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>wrrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>zrrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>~rrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>rrc3 K|]}|uV	dSr$rrs  rrz+GCTests.test_get_objects.<locals>.<genexpr>rr)rGrHrFrWanyget_objectsrrJs @rtest_get_objectszGCTests.test_get_objects[s

	MMMM!0L0L0LMMMMM	
	
	
	
NNNN11M1M1MNNNNN	
	
	
	
MMMM!0L0L0LMMMMM	
	
	
	
a    MMMM!0L0L0LMMMMM	
	
	
	
NNNN11M1M1MNNNNN	
	
	
	
MMMM!0L0L0LMMMMM	
	
	
	
a    MMMM!0L0L0LMMMMM	
	
	
	
NNNN11M1M1MNNNNN	
	
	
	
MMMM!0L0L0LMMMMM	
	
	
	
a    MMMM!0L0L0LMMMMM	
	
	
	
NNNN11M1M1MNNNNN	
	
	
	
MMMM!0L0L0LMMMMM	
	
	



rctj|ttjttjd|ttjd|ttjd|ttjd|ttjddS)Nrii1gX9v?)rGrHrIrrassertRaises
ValueErrorrr:s rtest_get_objects_argumentsz"GCTests.test_get_objects_argumentss

R^--..R^t<<<==	?	?	?	
*bnd;;;*bne<<<)R^S999)R^U;;;;;rcpGdd}Gfdd|tjtj}|jd~tj|jd|tjdj|jdtj|jdtjdS)NceZdZdZdS)AGCTests.test_resurrection_only_happens_once_per_object.<locals>.Ac||_dSr$mer:s rr(zJGCTests.test_resurrection_only_happens_once_per_object.<locals>.A.__init__
rNr)rrrrZr#




rrZc"eZdZdZgZfdZdS)GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusrc\xjdz
c_j|dSrC)resurrectedresurrected_instancesrFr'r_s rrzOGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__s4##q(##-44T:::::rN)rrrrrrr_srr_rs9K$&!
;
;
;
;
;
;
;rr_rrD)	rGrHrrIrrrclearr)r'rZlazr_s   @r.test_resurrection_only_happens_once_per_objectz6GCTests.test_resurrection_only_happens_once_per_objectsJ									;	;	;	;	;	;	;a	;	;	;	


gii,a000


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

,a000
	rc|Gdd}Gfddtjtj}|}t|}||_||_~~tj|tjdj	}|
t|d|t|j|tjtjdS)NceZdZdZdS)6GCTests.test_resurrection_is_transitive.<locals>.Cargoc||_dSr$rr:s rr(z?GCTests.test_resurrection_is_transitive.<locals>.Cargo.__init__rrNr)rrrCargorrrrceZdZgZfdZdS)8GCTests.test_resurrection_is_transitive.<locals>.Lazarusc<j|dSr$)rrFrs rrz@GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__s -44T:::::rN)rrrrrrsrr_rs4$&!
;
;
;
;
;
;
;rr_rDcargo)
rGrHrrrrrIrrrrWhasattrr)r'rrrcargo_idinstancer_s      @rtest_resurrection_is_transitivez'GCTests.test_resurrection_is_transitivesC									;	;	;	;	;	;	;	;	;	;	


giie99		


W:;;Q???04466'22333HN++X666


	rcd}Gdd}Gfdd|}gd}tjtj|\}}t|D]}|
tj}|\}	}
|||||	|z
|||
|z
d|	|
}}|tj}|\}	}
||d||	|z
d||
|z
d|	|
}}t|D]}|
|tj}|\}	}
|||||	|z
|||
|z
d|	|
}}tj}|\}	}
||d||	|z
d||
|z
dtjdS)	NdceZdZdZdS)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Ac||_dSr$rr:s rr(zUGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.A.__init__rrNr)rrrrZrrrrZceZdZfdZdS)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Zc2|dSr$r)r'zss rrzTGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Z.__del__s		$rNr)rsrZrs.
 
 
 
 
 
 
 rrcTtjd}|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	6	6	


hjjeq		A
ACCCCJLL

2AT1%%%eQ'''e	JLL

2AT1%%%eQ'''eq		A
ACCCC	JLL

2AT1%%%eQ'''e



JLL

2AT1%%%eQ'''
	rNz%requires ContainerNoGC extension typectj}Gdd}Gdd}|}||_t	||_t
j|jj||_	|j	g}|
|tjtj
~~tj|tjdS)NceZdZgdZdS)+GCTests.test_trash_weakref_clear.<locals>.A)r]ywzNrHrrrrZr>s(((IIIrrZceZdZdS)+GCTests.test_trash_weakref_clear.<locals>.ZNrYrrrrrAr[rr)unittestmockMockr]r rr2r3valuerrFrGrHrassert_not_calledr)r'rjrZrr]wr_cycles      rtest_trash_weakref_clearz GCTests.test_trash_weakref_clears@=%%''	)	)	)	)	)	)	)	)								
ACCAACC  {139h//D6!!!




x

	""$$$
	r)4rrrrLrQrUr`rdrirsryrrrrrrrrrrrrrr
requires_working_threadingrrr#r*r1r=rYrbrorzrrrrrrrrrrrrrskipIfr r
rrrrArAVs-*********---------***0---\2\2***A!A!A!F**]*(((0
&
&
&
&
&
&*!!]!))])(!!!F102284843284t66606666666(666,;;;.-7-7-7^222$&&&0@.G.G\.G`999===&999KKK4333,,,\<<<"""H   DAAAFX_]d*<>>77>>777rrAceZdZdZdZdZdZdZdZdZ	e
dZej
ed	d
ZdS)GCCallbackTestscRtj|_tjtj|_tjdtj|j	tj|j
g|_dSr)rGrenabledrrrr	callbacksrFcb1cb2othergarbager:s rsetUpzGCCallbackTests.setUpYsr|~~

\^^

Q
DH%%%
DH%%%rc|`tj|jtj|jtj|j|jrtj	tj
tjD]}t|trd|_tjdd=|`tj
dSr$)visitrGrrrrrrrrrHr
isinstancer6r8r)r'rs  rtearDownzGCCallbackTests.tearDowncsJ
DH%%%
DH%%%
TZ   <	IKKK

:	#	#C#}--
#"JqqqM

rcg|_tjtjddgc}tjdd<|j|g|_dSr$)rrGrHrrrF)r'rs  rprecleanzGCCallbackTests.precleantsX


!#AAAAAA  )))


rcZ|jd|t|fdSrC)rrFr)r'phaseinfos   rrzGCCallbackTests.cb1~s+
1eT$ZZ011111rc|jd|t|f|dkrWt|drIdtjD}dtjDtjdd<|D]
}d|_
dSdSdS)NrSstopcleanupc<g|]}t|t|Srrr6rfrs  rrgz'GCCallbackTests.cb2.<locals>.<listcomp>s'HHH:a+G+GH!HHHrc<g|]}t|t|Srr#r$s  rrgz'GCCallbackTests.cb2.<locals>.<listcomp>s=BBB1$.q-$@$@BQBBBr)rrFrrrGrr8)r'rrucrs     rrzGCCallbackTests.cb2s
1eT$ZZ0111F??wtY77?HHRZHHHBBB
BBBBJqqqM
!
! 		
???

!
!rcv|tjd|jD}d|D}d|D}||dgdz||dgdzd|jD}d|D}d|D}||d	gdz||d
gdz|jD]O}|d}|d|v|d|v|d
|vPdS)Ncg|]
}|dS)rrrfrs  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>&&&aQqT&&&rcg|]
}|dk|SrDrrls  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>
%
%
%Aa1ffafffrcg|]
}|dk|S)rSrrls  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>r-rrDrScg|]
}|dSr,rr)s  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>r*rcg|]
}|dk|S)startrrls  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>s
+
+
+Aa7llalllrcg|]
}|dk|S)r rrls  rrgz0GCCallbackTests.test_collect.<locals>.<listcomp>s
*
*
*Aa6kkakkkrr1r rrr)rrGrHrrIrW)r'rn1n2rrs      rtest_collectzGCCallbackTests.test_collectsr





'&4:&&&
%
%
%
%
%
%
%
%
%
%aSU###aSU###
'&4:&&&
+
+
+
+
+
*
*
*
*
*gYq[)))fXaZ(((	5	5AQ4DOOLD0111OOK4/000OOOt34444		5	5rc|tjd|jD]&}|d}||dd'dS)NrSr)rrGrHrrI)r'rrs   rtest_collect_generationz'GCCallbackTests.test_collect_generations^



1


	4	4AQ4DT,/3333	4	4rcr|tttdtj|jD]O}|ddkr|d}||dd||ddP|ttjdtjD]}|	|td|_
g|_gtjdd<tj|jD]O}|ddkr|d}||dd	||ddP|ttjd	dS)
Nr1rDr rSrrr5Tr)rr6r"rGrHrrIrrrr!)r'rrrs    rtest_collect_garbagez$GCCallbackTests.test_collect_garbages






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

111


	7	7Atv~~Q4DT+.222T/2A6666	
RZ!,,,,,rzbuilt with -NDEBUGc|tdddl}tjd}|tjd|g|j|j}|	\}}|j
|j|
|d|
|dd}|
|d	|z|
|d
|
|d|z|
|d|
|d
dS)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\])rrrtextwrapdedentr~rrrrrrrr)r'rrrrr
address_regexs       rtest_refcount_errorsz$GCCallbackTests.test_refcount_errorss	


	h 

&
cndD9$.O$.O

5
5		W	Y	Y	Y%	'	'	'*
"]2	4	4	4#	%	%	%"]2	4	4	4&	(	(	(-	/	/	/	/	/rN)rrrrrrrrr5r7rr9rrBUILD_WITH_NDEBUGr?rrrrrXs"222!!!5556444 - -\ -FX_&)++2/2/++2/2/2/rrc&eZdZdZdZdZdZdS)GCTogglingTestsc,tjdSr$)rGrr:s rrzGCTogglingTests.setUp	s
	rc,tjdSr$)rGrr:s rrzGCTogglingTests.tearDowns

rcv
td}tjtd}||_|`td}tj|
g
fd}tj||}dx}x}}g}d}t}|js_|dz
}|dkr|	d|
td|g|j_|
tdD]}	|
|	ddS)NrrDrSc(gdd<dSr$r)r/c2wrris rrjz2GCTogglingTests.test_bug1055820c.<locals>.callbackstvvhDGGGr''gc didn't happen after 10000 iterations)
r"rGrH
keep_c0_aliver&r2r3r+r.rrIrrF)r'c0c1c2rjc0wrjunkr%detectorrrGris          @@rtest_bug1055820cz GCTogglingTests.test_bug1055820csaa[[


a[[G
a[[{2						{2x((R"@
==&	
FA5yy		CDDDSYY***KKOOO&		
TA&&&	&	&A
Q%%%%	&	&rcd	
g
G	
fddt}|d}tjtd}||_|`td}tj|	dx}x}}t}g}d}|js_|dz
}|dkr|	d|
t
d|g|j_|
t
d
D]}|
|ddS)NceZdZfdZdS)+GCTogglingTests.test_bug1055820d.<locals>.Dc(gdd<dSr$r)r'rGris rrz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__\s466(QQQrNr)rGrisrDrT[s3
#
#
#
#
#
#
#
#rrVrrDrSrHrI)
r"rGrH
keep_d0_aliver&r2r3r+r.rrIrrF)r'rVd0rLrMrPrOr%rrGris         @@rtest_bug1055820dz GCTogglingTests.test_bug1055820dUsl
	#	#	#	#	#	#	#	#	#	#	#QqTT


a[[G
a[[{2R"<==
&	
FA5yy		CDDDSYY***KKOOO&		
TA&&&	&	&A
Q%%%%	&	&rN)rrrrrrQrYrrrrBrBsYD&D&D&LA&A&A&A&A&rrBceZdZdZdS)PythonFinalizationTestscNtjd}td|dS)Na 
            import ast
            import codecs

            # Small AST tree to keep their AST types alive
            tree = ast.parse("def f(x, y): return 2*x-y")
            x = [tree]
            x.append(x)

            # Put the cycle somewhere to survive until the last GC collection.
            # Codec search functions are only cleared at the end of
            # interpreter_clear().
            def search_func(encoding):
                return None
            search_func.a = x
            codecs.register(search_func)
        r)r<r=r)r'rs  r
test_ast_finiz%PythonFinalizationTests.test_ast_finis2 

"	t$$$$$rN)rrrr]rrrr[r[s#%%%%%rr[ctjatjtjrJtjatjt
tjztjdSr$)	rGrrrrrr
DEBUG_LEAKrHrrrsetUpModuler`s]lnnGJLLL|~~LNNEL"-'(((JLLLLLrctjttrt	dtjtjsJtstjdSdS)Nzrestoring automatic collection)	rGrrrprintrrrrrrrtearDownModulercsgL0
.///IKKK
<>>

r__main__)-r
unittest.mocktest.supportrrrrtest.support.import_helperrtest.support.os_helperrr	r
test.support.script_helperrrr
rGr	sysconfigr<rrr2	_testcapirImportErrorr rr"r+r6get_config_varsgetr@rTestCaserArrBr[r`rcrmainrrr<module>rqsz============444444;;;;;;;;;;DDDDDDDD))))))				



%%%%%%%'''''''MMMv
:::::&:::










F






9"";33?#'@y'@'B'B;'OO
%WS*<===
hD m/m/m/m/m/h'm/m/m/`N&N&N&N&N&h'N&N&N&b%%%%%h/%%%6			zHMOOOOOs$AA"!A"&A--A76A7