+
    Bi                     4   ^ RI t ^ RIt ^ RIHt ^ RIHtHtHtHtH	t	H
t
 ^ RIHt ^ RIHtHtHt ^ RIHtHtHt ^ RIHtHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt ^ RIt^ RIHt ^ R	IH t   ^ RI"t" ! R R]#4      t$ ! R R]#4      t%] ! R R]#4      4       t&]PN                  ! 4       PQ                  RR4      '       d   R]PN                  ! 4       R,          9   t)M]*! ]R4      '       * t) ! R R] PV                  4      t, ! R R] PV                  4      t- ! R R] PV                  4      t. ! R R] PV                  4      t/ ! R R] PV                  4      t0R t1R  t2]3R!8X  d   ] Ph                  ! 4        R# R#   ]! d    RtR
 tRt  ELi ; i  ]! d    Rt" EL#i ; i)"    N)support)verboserefcount_testcpython_onlyrequires_subprocessrequires_gil_enabledPy_GIL_DISABLED)import_module)temp_dirTESTFNunlink)assert_python_okmake_scriptrun_test_script)threading_helpergc_threshold)with_tp_del)ContainerNoGCc                 $     ! R  R\         4      pV# )c                   &   a  ] tR t^t o R tRtV tR# )with_tp_del.<locals>.Cc                .    \         P                  ! R 4      h)zrequires _testcapi.with_tp_del)unittestSkipTest)clsargskwargss   &*,#/usr/lib/python3.14/test/test_gc.py__new__with_tp_del.<locals>.C.__new__   s    ''(HII     N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell____classdict__s   @r   Cr      s     J Jr!   r+   )object)r   r+   s   & r   r   r      s    	J 	J r!   c                   &   a  ] tR t^/t o R tRtV tR# )C1055820c                    Wn         W n        R # Niloop)selfr2   s   &&r   __init__C1055820.__init__0   s    	r!   r1   Nr#   r$   r%   r&   r5   r'   r(   r)   s   @r   r.   r.   /   s      r!   r.   c                   &   a  ] tR t^4t o R tRtV tR# )GC_Detectorc                l   a  R S n         V 3R lp\        P                  ! \        R4      V4      S n        R# )Fc                    < R Sn         R# TN)gc_happened)ignoredr4   s   &r   it_happened)GC_Detector.__init__.<locals>.it_happened;   s    #Dr!     N)r=   weakrefrefr.   wr)r4   r?   s   f r   r5   GC_Detector.__init__8   s(     	$
 ++hsm[9r!   )r=   rD   Nr7   r)   s   @r   r9   r9   4   s     : :r!   r9   c                   0   a  ] tR t^Bt o RR ltR tRtV tR# )UncollectableNc                @    Vf   \        V R7      V n        R # Wn        R # )Npartner)rG   rJ   )r4   rJ   s   &&r   r5   Uncollectable.__init__J   s    ?(6DL"Lr!   c                    R # r0   r"   r4   s   &r   
__tp_del__Uncollectable.__tp_del__O   s    r!   rI   r0   )r#   r$   r%   r&   r5   rN   r'   r(   r)   s   @r   rG   rG   B   s     #
 r!   rG   	PY_CFLAGS z-DNDEBUGgettotalrefcountc                   @  a  ] tR t^]t o R tR tR tR tR tR t	R t
R t]R	 4       t]R
 4       tR tR t]R 4       tR tR tR t]]! R4      R 4       4       t]R 4       tR t]P6                  ! 4       R 4       tR tR tR tR t R t!R t"R t#]]$! 4       ]%PL                  ! ]'RJ R4      R 4       4       4       t(R  t)R! t*R" t+R# t,R$ t-R% t.]! R&4      R' 4       t/R( t0R) t1R* t2R+ t3]%PL                  ! ]4RJ R,4      R- 4       t5]R. 4       t6]R/ 4       t7R0 t8R1 t9R2t:V t;R# )3GCTestsc                    . pVP                  V4       \        P                  ! 4        ?V P                  \        P                  ! 4       ^4       R#    NappendgccollectassertEqualr4   ls   & r   	test_listGCTests.test_list^   s4    	


q)r!   c                    / pW^&   \         P                  ! 4        ?V P                  \         P                  ! 4       ^4       R# rV   rZ   r[   r\   r4   ds   & r   	test_dictGCTests.test_dicte   s0    !


q)r!   c                    . pV3pVP                  V4       \        P                  ! 4        ??V P                  \        P                  ! 4       ^4       R# )   NrX   )r4   r^   ts   &  r   
test_tupleGCTests.test_tuplel   s>    D	


q)r!   c                     ! R  R4      pWn         \        P                  ! 4        ?V P                  \        P                  ! 4       ^ 4       R# )c                       ] tR t^wtRtR# )GCTests.test_class.<locals>.Ar"   Nr#   r$   r%   r&   r'   r"   r!   r   Arn   w       r!   rp   NarZ   r[   assertNotEqualr4   rp   s   & r   
test_classGCTests.test_classv   s3    	 	


BJJL!,r!   c                     ! R  R\         4      p\        P                  ! 4        ?V P                  \        P                  ! 4       ^ 4       R# )c                       ] tR t^tRtR# )%GCTests.test_newstyleclass.<locals>.Ar"   Nro   r"   r!   r   rp   rz      rq   r!   rp   N)r,   rZ   r[   rt   ru   s   & r   test_newstyleclassGCTests.test_newstyleclass~   s0    	 	


BJJL!,r!   c                     ! R  R4      pV! 4       pW"n         \        P                  ! 4        ?V P                  \        P                  ! 4       ^ 4       R# )c                       ] tR t^tRtR# ) GCTests.test_instance.<locals>.Ar"   Nro   r"   r!   r   rp   r      rq   r!   rp   Nrr   r4   rp   rs   s   &  r   test_instanceGCTests.test_instance   s:    	 	C


BJJL!,r!   c                t    ! R  R\         4      pV! 4       pW"n        \        P                  ! 4        ?V P	                  \        P                  ! 4       ^ 4        ! R R\
        4      p ! R RW14      pV! 4       pW"n        \        P                  ! 4        ?V P	                  \        P                  ! 4       ^ 4       ??V P	                  \        P                  ! 4       ^ 4       V! 4       Vn        ?V P	                  \        P                  ! 4       ^ 4       V P                  \        P                  ! 4       ^ 4       R# )c                       ] tR t^tRtR# )#GCTests.test_newinstance.<locals>.Ar"   Nro   r"   r!   r   rp   r      rq   r!   rp   c                       ] tR t^tRtR# )#GCTests.test_newinstance.<locals>.Br"   Nro   r"   r!   r   Br      rq   r!   r   c                       ] tR t^tRtR# )#GCTests.test_newinstance.<locals>.Cr"   Nro   r"   r!   r   r+   r      rq   r!   r+   N)r,   rs   rZ   r[   rt   listr\   )r4   rp   rs   r   r+   s   &    r   test_newinstanceGCTests.test_newinstance   s    	 	C


BJJL!,	 		 	C


BJJL!,qBJJL!,cBJJL!,q)r!   c                     ! R  R4      pV! 4       p\         P                  ! 4        ?V P                  \         P                  ! 4       ^ 4       R# )c                   &   a  ] tR t^t o R tRtV tR# )GCTests.test_method.<locals>.Ac                (    V P                   V n        R # r0   )r5   initrM   s   &r   r5   'GCTests.test_method.<locals>.A.__init__   s     MM	r!   )r   Nr7   r)   s   @r   rp   r      s     * *r!   rp   N)rZ   r[   rt   r   s   &  r   test_methodGCTests.test_method   s7    	* 	* C


BJJL!,r!   c                   \          ! R  R4      4       p ! R R4      pV! 4       pW3n        \        V4      pV! 4       pWUn        \        P
                  ! 4        ??V P                  \        P
                  ! 4       ^ 4       \        P                   F  p\        V4      V8X  g   K  V= M	  V P                  R4       \        P                  P                  X4       R# )c                   &   a  ] tR t^t o R tRtV tR# )(GCTests.test_legacy_finalizer.<locals>.Ac                    R # r0   r"   rM   s   &r   rN   3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__       $r!   r"   Nr#   r$   r%   r&   rN   r'   r(   r)   s   @r   rp   r           &&r!   rp   c                       ] tR t^tRtR# )(GCTests.test_legacy_finalizer.<locals>.Br"   Nro   r"   r!   r   r   r      rq   r!   r   &didn't find obj in garbage (finalizer)N)
r   rs   idbrZ   r[   rt   garbagefailremover4   rp   r   rs   id_ar   objs   &      r   test_legacy_finalizerGCTests.test_legacy_finalizer   s     
	' 	' 
	'	 	C!uC


BJJL!,::C#w$E 
 II>?


#r!   c                   \          ! R  R\        4      4       p ! R R\        4      pV! 4       pW3n        \        V4      pV! 4       pWUn        \
        P                  ! 4        ??V P                  \
        P                  ! 4       ^ 4       \
        P                   F  p\        V4      V8X  g   K  V= M	  V P                  R4       \
        P                  P                  X4       R# )c                   &   a  ] tR t^t o R tRtV tR# )1GCTests.test_legacy_finalizer_newclass.<locals>.Ac                    R # r0   r"   rM   s   &r   rN   <GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__   r   r!   r"   Nr   r)   s   @r   rp   r      r   r!   rp   c                       ] tR t^tRtR# )1GCTests.test_legacy_finalizer_newclass.<locals>.Br"   Nro   r"   r!   r   r   r      rq   r!   r   r   N)r   r,   rs   r   r   rZ   r[   rt   r   r   r   r   s   &      r   test_legacy_finalizer_newclass&GCTests.test_legacy_finalizer_newclass   s     
	' 	' 
	'	 	C!uC


BJJL!,::C#w$E 
 II>?


#r!   c                    / p\        R V4       \        P                  ! 4        ?V P                  \        P                  ! 4       R4       R# )zdef f(): pass
N)rh      )execrZ   r[   assertInrc   s   & r   test_functionGCTests.test_function   s6     "


 	bjjlF+r!   c                    R p\        RV4      w  r#pV P                  V^ 4       V P                  VR4       V P                  V4       R# )a  if 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=}")
        -cs!   \A\s*func=<function  at \S+>\s*\zN)r   r\   assertRegexassertFalse)r4   codercstdoutstderrs   &    r   .test_function_tp_clear_leaves_consistent_state6GCTests.test_function_tp_clear_leaves_consistent_state   sL    :x .dD9FQ!JK r!   c                    R  p\         P                  ! 4        V! 4        V P                  \         P                  ! 4       ^4       R# )c                  0    \         P                  ! 4       p R # r0   )sys	_getframe)frames    r   fGCTests.test_frame.<locals>.f4  s    MMOEr!   Nrb   )r4   r   s   & r   
test_frameGCTests.test_frame2  s+    	$


	q)r!   c                H   \         P                  ! 4        V P                  \         P                  . 4       . pVP	                  V4       \        V4      p\         P                  ! 4       p\         P                  ! V\         P                  ,          4       ?\         P                  ! 4        \         P                  ! V4       V P                  \        \         P                  4      ^4       \         P                  P                  4       pV P                  \        V4      V4       R# rV   )rZ   r[   r\   r   rY   r   	get_debug	set_debugDEBUG_SAVEALLlenpop)r4   Lid_Ldebugr   s   &    r   test_saveallGCTests.test_saveall:  s     	

R(	!u
UR---.



URZZ!,jjnnC$'r!   c                    \         P                  ! 4       p\         P                  ! 4        \         P                  ! ^4        ! R R4      pV! 4       p?\         P                  ! 4        \         P                  ! V!   R# )rW   c                   &   a  ] tR tRt o R tRtV tR# )GCTests.test_del.<locals>.AiX  c                    \        V 4       R # r0   dirrM   s   &r   __del__#GCTests.test_del.<locals>.A.__del__Y  	    D	r!   r"   Nr#   r$   r%   r&   r   r'   r(   r)   s   @r   rp   r   X        r!   rp   N)rZ   get_thresholdenableset_thresholddisabler4   
thresholdsrp   rs   s   &   r   test_delGCTests.test_delR  sT    %%'

		
	 	 C



*%r!   c                   \         P                  ! 4       p\         P                  ! 4        \         P                  ! ^4        ! R R\        4      pV! 4       p?\         P
                  ! 4        \         P                  ! V!   R# )rW   c                   &   a  ] tR tRt o R tRtV tR# )$GCTests.test_del_newclass.<locals>.Aig  c                    \        V 4       R # r0   r   rM   s   &r   r   ,GCTests.test_del_newclass.<locals>.A.__del__h  r   r!   r"   Nr   r)   s   @r   rp   r   g  r   r!   rp   N)rZ   r   r   r   r,   r   r   s   &   r   test_del_newclassGCTests.test_del_newclassa  sV    %%'

		
	 	 C



*%r!   zneeds precise allocation countsc                &   \         P                  ! 4        \         P                  ! 4       w  rp. p\         P                  ! 4       w  rVpV P                  W#3R4       V P                  Wg3R4       V P	                  V^4       V P                  WQ4       R# )r   N)r   r   )rZ   r[   	get_countr\   
assertLessassertGreater)r4   rs   r   cxrd   er   s   &       r   test_get_countGCTests.test_get_countv  sr     	

,,.a,,.a!(!(1 	1 r!   c                    \         P                  ! 4        . p\         P                  ! ^ 4       \         P                  ! 4       w  r#pV P                  W43R4       R# )r   N)rW   r   )rZ   r[   r   r\   )r4   r   rs   r   r   s   &    r   test_collect_generations GCTests.test_collect_generations  s@    


 


1,,.a 	!(r!   c                P  a  ! V3R  lR4      o\         P                  ! 4        ^p\        ^4       F\  p. p\        V4       F  pVS! 4       .pK  	  . p\        V4       F  pVS! 4       .pK  	  / p\        V4       F  p^V^S! 4       /pK  	  K^  	  \         P                  ! 4        R# )c                   2   <a  ] tR tRt o ^ tV3R ltRtV tR# )#GCTests.test_trashcan.<locals>.Ouchi  c                   < SP                   ^,           Sn         SP                   ^,          ^ 8X  d   \        P                  ! 4        R# R# rV   )nrZ   r[   )r4   Ouchs   &r   r   +GCTests.test_trashcan.<locals>.Ouch.__del__  s0    !66B;!#JJL $r!   r"   N)r#   r$   r%   r&   r  r   r'   r(   )r*   r  s   @r   r  r     s     A! !r!   r  N)rZ   r   ranger   )r4   Ncountri   r2   uvr  s   &      @r   test_trashcanGCTests.test_trashcan  s    	! 	!( 			1XEA1XK A1XK A1X1df%   	

r!   c                  aaa	a
a ^<o^pR o ! VV3R lR\         4      oVV3R lo
V	V
3R lp\        P                  ! 4       p\        P                  ! R4        . o	. p\        V4       F+  p\        P                  ! VR7      pVP                  V4       K-  	  \        P                  ! VV	3R l4      ;_uu_ 4        \        P                  ! R	4       R
R
R
4       \        P                  ! V4       \        P                  ! 4        V P                  \!        SP"                  4      \!        SP$                  4      4       R
#   + '       g   i     Lu; i  \        P                  ! T4       i ; i)<   c               3   z   "    R x  \         P                  ! R4       R #   \         P                  ! R4       i ; i5i)Ngư>)timesleepr"   r!   r   sleeper_gen2GCTests.test_trashcan_threads.<locals>.sleeper_gen  s%     %

8$

8$s   ;  ;8;c                   D   <a  ] tR tRt o . t. tV3R ltVV3R ltRtV t	R# )(GCTests.test_trashcan_threads.<locals>.Ci  c                F   < WR &   SP                   P                  R4       R# NNNN)initsrY   )r4   alistr+   s   &&r   r5   1GCTests.test_trashcan_threads.<locals>.C.__init__  s    Qt$r!   c                b   < SP                   P                  R 4       S! 4       p\        V4       R # r0   )delsrY   next)r4   gr+   r  s   & r   r   0GCTests.test_trashcan_threads.<locals>.C.__del__  s#    d#  MQr!   r"   N)
r#   r$   r%   r&   r  r  r5   r   r'   r(   )r*   r+   r  s   @r   r+   r    s     ED% r!   r+   c                  R   < S! . 4      p \        S4       F  pS! V .4      .p K  	  ? R # r0   )r  )r   r2   r+   NESTINGs     r   make_nested2GCTests.test_trashcan_threads.<locals>.make_nested  s,     "A7^sVH $r!   c                  *   < S '       g
   S! 4        K  R # r0   r"   )exitr"  s   r   
run_thread1GCTests.test_trashcan_threads.<locals>.run_thread  s     r!   gh㈵>)targetc                  &   < S P                  ^4      # rW   rY   )r%  s   r   <lambda>/GCTests.test_trashcan_threads.<locals>.<lambda>  s    Qr!         ?N)r   r   getswitchintervalr   setswitchintervalr  	threadingThreadrY   r   start_threadsr  r  rZ   r[   r\   r   r  r  )r4   	N_THREADSr&  old_switchintervalthreadsr2   ri   r+   r!  r%  r"  r  s   &      @@@@@r   test_trashcan_threadsGCTests.test_trashcan_threads  s    		%	 	 	$		
 !224!!$'		6DG9%$$J7q! & "//9OPP

3 Q !!"45


QWWs166{3 QP !!"45s%   A!E ;D?E ?E	
E E*c                J    ! R  R4      pV! 4       pV! 4       pW2n         W#n         \        P                  ! 4        \        \        P                  4      p??V P                  \        P                  ! 4       ^4       V P                  \        \        P                  4      V4       R# )c                   &   a  ] tR tRt o R tRtV tR# )GCTests.test_boom.<locals>.Boomi  c                    V = \        hr0   )attrAttributeErrorr4   someattributes   &&r   __getattr__+GCTests.test_boom.<locals>.Boom.__getattr__  s    I$$r!   r"   N)r#   r$   r%   r&   rA  r'   r(   r)   s   @r   Boomr;    s     % %r!   rC  Nr=  rZ   r[   r   r   r\   )r4   rC  rs   r   
garbagelens   &    r   	test_boomGCTests.test_boom  sq    	% 	%
 FF


_
q 	q)RZZ*5r!   c                J    ! R  R4      pV! 4       pV! 4       pW2n         W#n         \        P                  ! 4        \        \        P                  4      p??V P                  \        P                  ! 4       ^4       V P                  \        \        P                  4      V4       R# )c                   ,   a  ] tR tRt o R tR tRtV tR# )!GCTests.test_boom2.<locals>.Boom2i	  c                    ^ V n         R# r   Nr   rM   s   &r   r5   *GCTests.test_boom2.<locals>.Boom2.__init__
  s	    r!   c                f    V ;P                   ^,          un         V P                   ^8  d   V =\        hr*  )r   r=  r>  r?  s   &&r   rA  -GCTests.test_boom2.<locals>.Boom2.__getattr__  s%    !66A:	$$r!   rM  N)r#   r$   r%   r&   r5   rA  r'   r(   r)   s   @r   Boom2rJ  	  s     % %r!   rQ  NrD  )r4   rQ  rs   r   rE  s   &    r   
test_boom2GCTests.test_boom2  sq    	% 	% GG


_
q 	q)RZZ*5r!   c           	        . ROp\         P                  ! V4      pVP                  4        V P                  W!4       \	        V4      p\         P                  ! V4      pVP                  4        V P                  W!4       ^^^^/p. ROp\         P                  ! V4      pVP                  4        V P                  W%4       \         P                  ! ^^.^^/R4      pVP                  4        V P                  V^ ^ .\        \        ^4      4      ,           4       V P                  \         P                  ! ^RR4      . 4       R# )rW   rs   y              @N)rW   r      )rW   r   rU     )r   r   r   )rZ   get_referentssortr\   tupler   r  )r4   r  gotatupleadictexpecteds   &     r   test_get_referentsGCTests.test_get_referents#  s    u%
$uv&
$Aq!u%
'1v1vy9
q!ftE!H~56))!S"5r:r!   c                h   V P                  \        P                  ! R 4      4       V P                  \        P                  ! ^4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! \        R4      4      4       V P                  \        P                  ! \        4      4       V P                  \        P                  ! \
        4      4       V P                  \        P                  ! \        4      4       V P                  \        P                  ! \        4       4      4        ! R R4      p ! R R	\
        4      p ! R
 R4      p ! R R\        4      p ! R R\
        4      pV P                  \        P                  ! \        4      4       V P                  \        P                  ! V4      4       V P                  \        P                  ! V! 4       4      4       V P                  \        P                  ! V! 4       4      4       V P                  \        P                  ! . 4      4       V P                  \        P                  ! \        4       4      4       V P                  \        P                  ! V! 4       4      4       V P                  \        P                  ! V! 4       4      4       V P                  \        P                  ! V! 4       4      4       R # )Nr.  TF   ars   c                       ] tR tRtRtR# )*GCTests.test_is_tracked.<locals>.UserClassiM  r"   Nro   r"   r!   r   	UserClassrc  M  rq   r!   rd  c                       ] tR tRtRtR# )(GCTests.test_is_tracked.<locals>.UserIntiP  r"   Nro   r"   r!   r   UserIntrf  P  rq   r!   rg  c                       ] tR tRtRtRtR# )/GCTests.test_is_tracked.<locals>.UserClassSlotsiT  r"   Nr#   r$   r%   r&   	__slots__r'   r"   r!   r   UserClassSlotsri  T      Ir!   rl  c                       ] tR tRtRtRtR# )/GCTests.test_is_tracked.<locals>.UserFloatSlotsiX  r"   Nrj  r"   r!   r   UserFloatSlotsro  X  rm  r!   rp  c                       ] tR tRtRtRtR# )-GCTests.test_is_tracked.<locals>.UserIntSlotsi\  r"   Nrj  r"   r!   r   UserIntSlotsrr  \  rm  r!   rs  y      ?      @)
r   rZ   
is_tracked	bytearraytypeintr,   float
assertTrueset)r4   rd  rg  rl  rp  rs  s   &     r   test_is_trackedGCTests.test_is_tracked:  s:   
 	t,-q)*s+,z23t,-u-.t,-s+,y78t,-s+,v./vx01	 		c 		 		U 		3 	 	b)*i01ik23gi01b)*ce,-n&678n&678ln56r!   c                ^  a V P                  \        P                  ! ^4      4       . o ! V3R lR4      pV! 4       pV P                  \        P                  ! V4      4       ?\        P                  ! 4        SP	                  4       pV P                  \        P                  ! V4      4       R# )r   c                   .   <a  ] tR tRt o V3R ltRtV tR# )*GCTests.test_is_finalized.<locals>.Lazarusin  c                *   < SP                  V 4       R # r0   r+  )r4   storages   &r   r   2GCTests.test_is_finalized.<locals>.Lazarus.__del__o  s    t$r!   r"   Nr   )r*   r  s   @r   Lazarusr  n  s     % %r!   r  N)r   rZ   is_finalizedr[   r   ry  )r4   r  lazarusr  s   &  @r   test_is_finalizedGCTests.test_is_finalizedi  su    +,	% 	% )12


++-01r!   c                  aa . oVV3R  lp\        ^4       Uu. uF  p\        V4      NK  	  ppV Uu. uF  p\        P                  ! WA4      NK  	  upoRp\        P
                  ! 4        V P                  \        S4      ^ 4       Rp\        P
                  ! 4        V P                  \        S4      ^4       S F  pV P                  VR4       K  	  R# u upi u upi )c                 D   < S Uu. uF	  q! 4       NK  	  upSR &   R# u upi r  r"   )r>   rD   WRsouchs   & r   callback*GCTests.test_bug1055820b.<locals>.callback  s     &)*crtc*DG*s   N)r  r.   rB   rC   rZ   r[   r\   r   )r4   r  r2   Csr   r   r  r  s   &     @@r   test_bug1055820bGCTests.test_bug1055820b{  s     	+ $)8,8ahqk8,134Aw{{1'4


TA& 


TA&A Q%  -4s
   CCc                   aa \         P                  ! 4         ! R  R4      o ! R R4      oVV3R lpV! 4        \         P                  ! 4        R# )c                       ] tR tRtRtR# ) GCTests.test_bug21435.<locals>.Ai  r"   Nro   r"   r!   r   rp   r    rq   r!   rp   c                   ,   a  ] tR tRt o R tR tRtV tR# ) GCTests.test_bug21435.<locals>.Bi  c                    Wn         R # r0   rM  )r4   r   s   &&r   r5   )GCTests.test_bug21435.<locals>.B.__init__  s    r!   c                    R V n         R # r0   r=  rM   s   &r   r   (GCTests.test_bug21435.<locals>.B.__del__  s	     	r!   )r=  r   N)r#   r$   r%   r&   r5   r   r'   r(   r)   s   @r   r   r    s     ! !r!   r   c                  H   < S! 4       p S! S! 4       4      pWn         Wn         R # r0   r  )rs   r   rp   r   s     r   do_work&GCTests.test_bug21435.<locals>.do_work  s    A!#AFFr!   N)rZ   r[   )r4   r  rp   r   s   & @@r   test_bug21435GCTests.test_bug21435  s7     	

	 		! 	!	 		


r!   Nzrequires _testcapic                  a a ^ RI oRpV V3R lpV! VR,          4      pS P                  RV4       S P                  RV4       RpVR,           V,           pS P                  W54       V! VR	,          4      pS P                  R
V4       S P	                  RV9   ;'       g    RV9   V4       S P                  W54       V! VR,          4      pS P                  RV4       R# )r   Na  if 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                 d  < SP                  \        P                  R RV .SP                  SP                  R7      pVP	                  4       w  r#VP
                  P                  4        VP                  P                  4        SP                  VP                  ^ 4       SP                  VR4       V# )z-Wdr   r   r   r!   )
Popenr   
executablePIPEcommunicater   closer   r\   
returncode)r   pr   r   r4   
subprocesss   &   r   run_command5GCTests.test_garbage_at_shutdown.<locals>.run_command  s      #..%t!D!! ! (A ]]_NFHHNNHHNNQ\\1-VS)Mr!   0s=   ResourceWarning: gc: 2 uncollectable objects at shutdown; uses   <X 'first'>s$   gc: uncollectable <X 0x[0-9A-Fa-f]+>s   ?
zgc.DEBUG_UNCOLLECTABLEs8   ResourceWarning: gc: 2 uncollectable objects at shutdowns   [<X 'first'>, <X 'second'>]s   [<X 'second'>, <X 'first'>]zgc.DEBUG_SAVEALLs!   uncollectable objects at shutdown)r  r   assertNotInassertNotRegexry  r   )r4   r   r  r   one_line_reexpected_rer  s   f     @r   test_garbage_at_shutdown GCTests.test_garbage_at_shutdown  s     	$		 TCZ( '(.	00=!H,{:F0T$<<= "#)	++v5 7 7+v5	@ 	- T$667=vFr!   c                h    R p\        RV4      w  r#pV P                  VP                  4       R4       R# )zif 1:
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            r      __del__ calledN)r   r\   strip)r4   r   r   outerrs   &    r   test_gc_main_module_at_shutdown'GCTests.test_gc_main_module_at_shutdown  s2     (d3&78r!   c                    \        4       ;_uu_ 4       pR pRV: R2p\        VRV4       \        RV4      w  rEpV P                  VP	                  4       R4       RRR4       R#   + '       g   i     R# ; i)zif 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
                gctestr   r  N)r   r   r   r\   r  )r4   
script_dirmoduler   r   r  r  s   &      r   #test_gc_ordinary_module_at_shutdown+GCTests.test_gc_ordinary_module_at_shutdown  s_    ZZ:F "	$D
 
Hf5+D$7LBSSYY[*;< ZZZs   AA##A4	c                0   R pV P                  \        \        4       \        \        RRR7      ;_uu_ 4       pVP	                  V4       RRR4       \        \        4      w  r4pV P                  VP                  4       R4       R#   + '       g   i     LD; i)zif 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)wzutf-8)encodingNr  )
addCleanupr   r   openwriter   r\   r  )r4   r   scriptr   r  r  s   &     r   test_global_del_SystemExit"GCTests.test_global_del_SystemExit  si    # 	'&#00FLL 1'/&78 10s   BB	c                :   \         P                  ! 4       pV P                  \        V4      ^4       V F  pV P	                  V\
        4       V P                  \        V4      0 Rm4       V P                  VR,          ^ 4       V P                  VR,          ^ 4       V P                  VR,          ^ 4       K  	  \         P                  ! 4       '       d5   V P                  \         P                  4       \         P                  ! 4        \         P                  ! 4       p\         P                  ! ^ 4       \         P                  ! 4       pV P                  V^ ,          R,          V^ ,          R,          ^,           4       V P                  V^,          R,          V^,          R,          4       V P                  V^,          R,          V^,          R,          4       \         P                  ! ^4       \         P                  ! 4       pV P                  V^ ,          R,          V^ ,          R,          ^,           4       V P                  V^,          R,          V^,          R,          4       V P                  V^,          R,          V^,          R,          ^,           4       R# )r   	collectedcollectionsuncollectableN>   r  r  r  )rZ   	get_statsr\   r   assertIsInstancedictrz  assertGreaterEqual	isenabledr  r   r   r[   )r4   statsstoldnews   &    r   test_get_statsGCTests.test_get_stats  s   UQ'B!!"d+SWJL##B{OQ7##B}$5q9##B$7;  <<>>OOBII&JJLlln


1llnQ.A}0E0IJQ.A}0EFQ.A}0EF


1llnQ.A}0E0IJQ.A}0EFQ.A}0E0IJr!   c                    \         P                  ! 4        V P                  \         P                  ! 4       ^ 4       \         P                  ! 4        V P                  \         P                  ! 4       ^ 4       R# rL  )rZ   freezer   get_freeze_countunfreezer\   rM   s   &r   test_freezeGCTests.test_freeze3  sF    
		2..0!4
,,.2r!   c                N  a \         P                  ! 4        . oSP                  S4       T P                  \        ;QJ d>    V3R  l\         P
                  ! 4        4       F  '       g   K   R4       R# 	  R4       R# ! V3R  l\         P
                  ! 4        4       4      4       R# )c              3   ,   <"   T F	  pSVJ x  K  	  R # 5ir0   r"   .0elementr^   s   & r   	<genexpr>+GCTests.test_get_objects.<locals>.<genexpr>>  s     A0@WAL0@   TFN)rZ   r[   rY   ry  anyget_objectsr]   s   &@r   test_get_objectsGCTests.test_get_objects9  sb    


	A0@A	
	
A0@AA	
r!   zneed generational GCc           	     z  a \         P                  ! 4        . oSP                  S4       T P                  \        ;QJ d4    V3R  l\         P
                  ! ^ R7       4       F  '       g   K   RM)	  RM%! V3R  l\         P
                  ! ^ R7       4       4      4       \         P                  ! 4        T P                  \        ;QJ d4    V3R l\         P
                  ! ^ R7       4       F  '       g   K   RM)	  RM%! V3R l\         P
                  ! ^ R7       4       4      4       >\         P                  ! 4        R# )c              3   ,   <"   T F	  pSVJ x  K  	  R # 5ir0   r"   r  s   & r   r  7GCTests.test_get_objects_generations.<locals>.<genexpr>G       M0LWAL0Lr  
generationTFc              3   ,   <"   T F	  pSVJ x  K  	  R # 5ir0   r"   r  s   & r   r  r  K  r  r  N)rZ   r[   rY   ry  r  r  r   r]   s   &@r   test_get_objects_generations$GCTests.test_get_objects_generationsA  s    


	M!0LMM!0LMM	
 	

M!0LMM!0LMM	
 


r!   c           	        \         P                  ! 4        V P                  \        \         P                  ! 4       4      \        \         P                  ! R R7      4      4       V P                  \        \         P                  R4       V P                  \        \         P                  R4       V P                  \        \         P                  R4       V P                  \        \         P                  R4       R # )Nr    1gX9v?i)rZ   r[   r\   r   r  assertRaises
ValueError	TypeErrorrM   s   &r   test_get_objects_arguments"GCTests.test_get_objects_argumentsP  s    


R^^-.R^^t<=	? 	*bnnd;*bnne<)R^^S9)R^^U;r!   c                x  a  ! R  R4      p ! V3R lRV4      o\         P                  ! 4        \         P                  ! 4        S! 4       pV P                  SP                  ^ 4       ?\         P                  ! 4        V P                  SP                  ^4       V P                  \        SP                  4      ^4       SP                  P                  4        V P                  SP                  ^4       \         P                  ! 4        V P                  SP                  ^4       \         P                  ! 4        R# )c                   &   a  ] tR tRt o R tRtV tR# )AGCTests.test_resurrection_only_happens_once_per_object.<locals>.Ai[  c                    W n         R # r0   merM   s   &r   r5   JGCTests.test_resurrection_only_happens_once_per_object.<locals>.A.__init__\      r!   r   Nr7   r)   s   @r   rp   r  [        r!   rp   c                   6   <a  ] tR tRt o ^ t. tV3R ltRtV tR# )GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusi_  c                p   < S;P                   ^,          un         SP                  P                  V 4       R# rV   )resurrectedresurrected_instancesrY   r4   r  s   &r   r   OGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__c  s(    ##q(#--44T:r!   r"   N)	r#   r$   r%   r&   r  r	  r   r'   r(   r*   r  s   @r   r  r  _  s     K$&!; ;r!   r  N)	rZ   r[   r   r\   r  r   r	  clearr   )r4   rp   lazr  s   &  @r   .test_resurrection_only_happens_once_per_object6GCTests.test_resurrection_only_happens_once_per_objectZ  s    	 		;a 	; 	




 i,,a0 


,,a0W::;Q? 	%%++-,,a0


,,a0
		r!   c                B  a  ! R  R4      p ! V3R lR4      o\         P                  ! 4        \         P                  ! 4        S! 4       pV! 4       p\        V4      pW2n        W#n        ??\         P                  ! 4        V P                  \        SP                  4      ^4       SP                  P                  4       pV P                  VR4       V P                  \        VP                  4      V4       \         P                  ! 4        \         P                  ! 4        R# )c                   &   a  ] tR tRt o R tRtV tR# )6GCTests.test_resurrection_is_transitive.<locals>.Cargoi  c                    W n         R # r0   r   rM   s   &r   r5   ?GCTests.test_resurrection_is_transitive.<locals>.Cargo.__init__  r  r!   r   Nr7   r)   s   @r   Cargor    r  r!   r  c                   2   <a  ] tR tRt o . tV3R ltRtV tR# )8GCTests.test_resurrection_is_transitive.<locals>.Lazarusi  c                >   < SP                   P                  V 4       R # r0   )r	  rY   r
  s   &r   r   @GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__  s    --44T:r!   r"   N)r#   r$   r%   r&   r	  r   r'   r(   r  s   @r   r  r    s     $&!; ;r!   r  cargoN)rZ   r[   r   r   r  r  r\   r   r	  r   assertHasAttrr   )r4   r  r  r  cargo_idinstancer  s   &     @r   test_resurrection_is_transitive'GCTests.test_resurrection_is_transitive~  s    	 		; 	; 	




ie9 		 


W::;Q?004468W-HNN+X6



		r!   c                ~  a ^dp ! R R4      p ! V3R lRV4      p. oR p\         P                  ! 4        \         P                  ! 4        V! 4       w  rV\        V4       F
  pV! 4        K  	  \         P                  ! 4       pV! 4       w  rV P	                  W4       V P	                  W,
          V4       V P	                  W,
          ^ 4       YreV! 4        \         P                  ! 4       pV! 4       w  rV P	                  V^ 4       V P	                  W,
          ^ 4       V P	                  W,
          ^ 4       Yre\        V4       F
  pV! 4        K  	  V! 4        \         P                  ! 4       pV! 4       w  rV P	                  W4       V P	                  W,
          V4       V P	                  W,
          ^ 4       YreSP                  4        \         P                  ! 4       pV! 4       w  rV P	                  V^4       V P	                  W,
          ^4       V P	                  W,
          ^ 4       \         P                  ! 4        R# )d   c                   &   a  ] tR tRt o R tRtV tR# )LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Ai  c                    W n         R # r0   r   rM   s   &r   r5   UGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.A.__init__  r  r!   r   Nr7   r)   s   @r   rp   r$    r  r!   rp   c                   .   <a  ] tR tRt o V3R ltRtV tR# )LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Zi  c                *   < SP                  V 4       R # r0   r+  )r4   zss   &r   r   TGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Z.__del__  s    		$r!   r"   Nr   )r*   r*  s   @r   Zr(    s        r!   r,  c                  ^    \         P                  ! 4       R,          p V R,          V R,          3# )rW   r  r  )rZ   r  )rd   s    r   getstatsSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.getstats  s&    r"A[>1_#555r!   N)rZ   r[   r   r  r\   r  r   )r4   r  rp   r,  r/  oldcoldncr2   ri   r   ncr*  s   &          @r   9test_resurrection_does_not_block_cleanup_of_other_objectsAGCTests.test_resurrection_does_not_block_cleanup_of_other_objects  s   
 	 		  	  	6 	




 jqAC JJL
1%Q' e	JJL
A1%Q' eqAC 	JJL
1%Q' e

JJL
A1%Q'
		r!   z%requires ContainerNoGC extension typec                   \         P                  P                  4       p ! R  R4      p ! R R4      pV! 4       pWDn        \	        V! 4       4      Vn        \        P                  ! VP
                  P                  V4      Vn	        VP                  .pVP                  V4       \        P                  ! 4        \        P                  ! 4        ??\        P                  ! 4        VP                  4        \        P                  ! 4        R# )c                       ] tR tRt. ROtRtR# )+GCTests.test_trash_weakref_clear.<locals>.Ai  r"   N)rs   ywzrj  r"   r!   r   rp   r8    s    (Ir!   rp   c                       ] tR tRtRtR# )+GCTests.test_trash_weakref_clear.<locals>.Zi  r"   Nro   r"   r!   r   r,  r<    rq   r!   r,  N)r   mockMockrs   r   r9  rB   rC   valuer:  rY   rZ   r[   r   assert_not_calledr   )r4   r  rp   r,  rs   wr_cycles   &     r   test_trash_weakref_clear GCTests.test_trash_weakref_clear  s    @ ==%%'	) 	)	 	 CAC {{13399h/DD6!





x


 	""$
		r!   c                d   ^ RI p^ RIpVP                  pVP                  pV P	                  \
        P                  ! V4      4       V P                  \
        P                  ! V4      4       V P                  \        \
        P                  ! V4      4      ^ 4       \
        P                  ! V4       R# rL  )	_datetime_socketdatetime_CAPICAPIr   rZ   rt  ry  r\   r   rW  )r4   rE  rF  untracked_capsuletracked_capsules   &    r   test_get_referents_on_capsule%GCTests.test_get_referents_on_capsule  s}     	%33!,,
 	'89:o67R--.?@A1E
)r!   c                   aa V oR o ! VV3R lR4      pV! 4       pW"n         ?\        P                  ! 4        V P                  S4       R# )Fc                   0   <a  ] tR tRt o VV3R ltRtV tR# );GCTests.test_get_objects_during_gc.<locals>.GetObjectsOnDeli6  c                   < R o\         P                  ! 4       pV F  pSP                  W J4       K  	  SP                  \         P                  ! V 4      . 4       R# r<   )rZ   r  ry  r\   get_referrers)r4   objsr   r  tests   &  r   r   CGCTests.test_get_objects_during_gc.<locals>.GetObjectsOnDel.__del__7  sG     	~~'COOCO4    !1!1$!7<r!   r"   Nr   )r*   r  rS  s   @r   GetObjectsOnDelrO  6  s     = =r!   rU  N)cyclerZ   r[   ry  )r4   rU  r   r  rS  s   &  @@r   test_get_objects_during_gc"GCTests.test_get_objects_during_gc/  s@     		= 	= 	


	"r!   c                    . ROp\         P                  ! 4        V.pVP                  V4       ?\         P                  ! 4        \         P                  ! 4        R# )rW   N)rW   rh   r   )rZ   r  rY   r[   r  )r4   r   r9  s   &  r   test_traverse_frozen_objects$GCTests.test_traverse_frozen_objectsG  s9     
		C	



r!   c                J    \         P                  ! R 4      p\        RV4       R# )a  
        import gc
        import unittest


        class Test(unittest.TestCase):
            def test_something(self):
                gc.freeze()
                gc.collect()
                gc.unfreeze()


        if __name__ == "__main__":
            unittest.main()
        r   Ntextwrapdedentr   )r4   sources   & r   test_deferred_refcount_frozen%GCTests.test_deferred_refcount_frozenS  s#      "  	v&r!   r"   )<r#   r$   r%   r&   r_   re   rj   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r   requires_working_threadingr7  rF  rR  r^  r{  r  r  r  r   r   skipIf	_testcapir  r  r  r  r  r  r  r  r  r  r  r4  r   rB  rK  rW  rZ  ra  r'   r(   r)   s   @r   rT   rT   ]   s    ***---*0-  2  2	,A!F * *(0&&* ;<! = ! 
) 
)!F 00284 384t6066;.-7^2$&0@ __Y$&(<=3G >  3Gj9=&9K43
 01 2<"H DAF __]d*<>7>7r * *  # #.
' 'r!   rT   c                   l   a  ] tR tRt o ]P
                  ! ]RJ R4      ]! R4      R 4       4       tRt	V t
R# )IncrementalGCTestsin  Nzrequires _testinternalcapiz.Free threading does not support incremental GCc                H    \         P                  ! R 4      p\        V4       R# )z_test_gc_fast_cycles.pyN)r   findfiler   )r4   r  s   & r   /test_incremental_gc_handles_fast_cycle_creationBIncrementalGCTests.test_incremental_gc_handles_fast_cycle_creationo  s     !!";<r!   r"   )r#   r$   r%   r&   r   rd  _testinternalcapir   rj  r'   r(   r)   s   @r   rg  rg  n  s9     __&$.0LMJK  L N r!   rg  c                      a  ] tR tRt o R tR tR tR tR tR t	R t
]R	 4       t]! 4       ]P                  ! ]R
4      R 4       4       tRtV tR# )GCCallbackTestsiy  c                v   \         P                  ! 4       V n        \         P                  ! 4        \         P                  ! 4       V n        \         P                  ! ^ 4       \         P                  P                  V P                  4       \         P                  P                  V P                  4       . V n        R# rL  )rZ   r  enabledr   r   r   r   	callbacksrY   cb1cb2othergarbagerM   s   &r   setUpGCCallbackTests.setUpz  sd    ||~


\\^

Q
DHH%
DHH%r!   c                "   V = \        P                  P                  V P                  4       \        P                  P                  V P
                  4       \        P                  ! V P                  4       V P                  '       d   \        P                  ! 4        \        P                  ! 4        \        P                   F"  p\        V\        4      '       g   K  R Vn        K$  	  \        P                  R V =\        P                  ! 4        R # )Nr  )visitrZ   rq  r   rr  rs  r   r   rp  r   r[   r   
isinstancerG   rJ   rt  )r4   r   s   & r   tearDownGCCallbackTests.tearDown  s    J
DHH%
DHH%
TZZ <<<IIK


::C#}--"  JJqM


r!   c                    . V n         \        P                  ! 4        \        P                  R ,          . up\        P                  R &   V P                  P                  V4       . V n         R# r  )rx  rZ   r[   r   rt  rY   )r4   r   s   & r   precleanGCCallbackTests.preclean  sK     



!#AA  )
r!   c                T    V P                   P                  ^V\        V4      34       R# rV   )rx  rY   r  )r4   phaseinfos   &&&r   rr  GCCallbackTests.cb1  s    

1eT$Z01r!   c                   V P                   P                  ^V\        V4      34       VR8X  d   \        V R4      '       d   \        P
                   Uu. uF  p\        V\        4      '       g   K  VNK  	  pp\        P
                   Uu. uF  p\        V\        4      '       d   K  VNK  	  up\        P
                  R&   V F
  pRVn        K  	  R# R# R# u upi u upi )rh   stopcleanupr  N)	rx  rY   r  hasattrrZ   r   ry  rG   rJ   )r4   r  r  r   ucs   &&&  r   rs  GCCallbackTests.cb2  s    

1eT$Z01F?wtY77ZZHZ:a+G!!ZBH(*

 B
1$.q-$@ Q
 BBJJqM 	   8?HBs   C0C
C'Cc                X   V P                  4        \        P                  ! 4        V P                   Uu. uF  q^ ,          NK  	  ppV Uu. uF  q3^8X  g   K  VNK  	  ppV Uu. uF  q3^8X  g   K  VNK  	  ppV P	                  V^.^,          4       V P	                  V^.^,          4       V P                   Uu. uF  q^,          NK  	  ppV Uu. uF  q3R8X  g   K  VNK  	  ppV Uu. uF  q3R8X  g   K  VNK  	  ppV P	                  VR.^,          4       V P	                  VR.^,          4       V P                   FH  pV^,          pV P                  RV9   4       V P                  RV9   4       V P                  RV9   4       KJ  	  R# u upi u upi u upi u upi u upi u upi )r   startr  r  r  r  N)r}  rZ   r[   rx  r\   ry  )r4   r	  r  r2   n1n2r  s   &      r   test_collectGCCallbackTests.test_collect  sr   



  ::&:aqTT:&%A1faa%%A1faa%aSU#aSU#  ::&:aqTT:&+A7laa+*A6kaa*gYq[)fXaZ( AQ4DOOLD01OOK4/0OOOt34	  '%%
 '+*s;   FFF$F1F;FF"F"+F'8F'c                    V P                  4        \        P                  ! ^4       V P                   F%  pV^,          pV P	                  VR,          ^4       K'  	  R# )rh   r  N)r}  rZ   r[   rx  r\   )r4   r	  r  s   &  r   test_collect_generation'GCCallbackTests.test_collect_generation  sB    


1AQ4DT,/3 r!   c                p   V P                  4        \        4        \        4        \        R 4       \        P                  ! 4        V P
                   FN  pV^,          R8w  d   K  V^,          pV P                  VR,          ^4       V P                  VR,          ^4       KP  	  V P                  \        \        P                  4      ^4       \        P                   F  pV P                  V\        4       K  	  RV n
        . V n        . \        P                  R&   \        P                  ! 4        V P
                   FN  pV^,          R8w  d   K  V^,          pV P                  VR,          ^ 4       V P                  VR,          ^4       KP  	  V P                  \        \        P                  4      ^ 4       R# )rA   r  r  r  Tr  N)r}  rG   r.   rZ   r[   rx  r\   r   r   r  r  )r4   r	  r  r   s   &   r   test_collect_garbage$GCCallbackTests.test_collect_garbage  s;   


Atv~Q4DT+.2T/2A6  	RZZ!,A!!!]3  


1


Atv~Q4DT+.2T/2A6  	RZZ!,r!   zbuilt with -NDEBUGc                   V P                  4        \        R 4       ^ RIp\        P                  ! R4      pVP                  \        P                  RV.VP                  VP                  R7      pVP                  4       w  rEVP                  P                  4        VP                  P                  4        V P                  VR4       V P                  VR4       RpV P                  VRV,           4       V P                  VR	4       V P                  VR
V,           4       V P                  VR4       V P                  VR4       R# )ctypesNa  
            from test.support import gc_collect, SuppressCrashReport

            a = [1, 2, 3]
            b = [a, a]
            a.append(b)

            # 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))
            del a
            del b

            # The garbage collector should now have a fatal error
            # when it reaches the broken object
            gc_collect()
        r   r  s<   gc.*\.c:[0-9]+: .*: Assertion "gc_get_refs\(.+\) .*" failed.s   refcount is too smalls   [0-9a-fA-Fx]+s   object address  : s   object refcount : 1s   object type     : s   object type name: lists3   object repr     : \[1, 2, 3, \[\[...\], \[...\]\]\])r}  r
   r  r^  r_  r  r   r  r  r  r   r  r   r   )r4   r  r   r  r   r   address_regexs   &      r   test_refcount_errors$GCCallbackTests.test_refcount_errors  s"    	 	h   , cnndD9$.OO$.OO  5 		L	N%	' *"]2	4#	%"]2	4&	(C	Er!   )r  r   rp  rt  rx  N)r#   r$   r%   r&   ru  rz  r}  rr  rs  r  r  r   r  r   r   rd  BUILD_WITH_NDEBUGr  r'   r(   r)   s   @r   rn  rn  y  sm     "2!564  -  -F __&)+5E+ 5Er!   rn  c                   r   a  ] tR tRt o R tR tR t]! R^ ^ 4      R 4       t]! R^ ^ 4      R 4       t	Rt
V tR	# )
GCTogglingTestsi-  c                0    \         P                  ! 4        R # r0   )rZ   r   rM   s   &r   ru  GCTogglingTests.setUp.  s    
		r!   c                0    \         P                  ! 4        R # r0   )rZ   r   rM   s   &r   rz  GCTogglingTests.tearDown1  s    


r!   c                  a
a \        ^ 4      p\        P                  ! 4        \        ^4      pWn        V=\        ^4      p\
        P                  ! V4      o
. oV
V3R lp\
        P                  ! W4      pR;p;r#. p^ p\        4       p\        '       d   \        P                  ! 4        VP                  '       gP   V^,          pVR8  d   V P                  R4       V P                  \        S4      ^ 4       VP                  . 4       Ka  V P                  \        S4      ^4       S F  p	V P                  V	R4       K  	  R# )r   c                    < S! 4       .SR &   R# r  r"   )r>   c2wrr  s   &r   r  2GCTogglingTests.test_bug1055820c.<locals>.callbackD  s    vhDGr!   N'  'gc didn't happen after 10000 iterations)r.   rZ   r[   keep_c0_aliver3   rB   rC   r9   r	   r=   r   r\   r   rY   )r4   c0c1c2r  c0wrjunkr2   detectorr   r  r  s   &         @@r   test_bug1055820c GCTogglingTests.test_bug1055820c4  s    a[


a[Ga[{{2	 {{2(R@ =? JJL&&&FA5y		CDSY*KKOTA&A Q% r!   r  c                l  a	a
 . o
 ! V	V
3R  lR\         4      pV! ^ 4      p\        P                  ! 4        \        ^4      pW#n        V=\        ^4      p\
        P                  ! V4      o	R;p;r4\        4       p. p^ p\        '       d   \        P                  ! 4        VP                  '       gP   V^,          pVR8  d   V P                  R4       V P                  \        S
4      ^ 4       VP                  . 4       Ka  V P                  \        S
4      ^4       S
 F  pV P                  VR4       K  	  R# )c                   0   <a  ] tR tRt o VV3R ltRtV tR# )+GCTogglingTests.test_bug1055820d.<locals>.Di  c                   < S! 4       .SR &   R# r  r"   )r4   r  r  s   &r   r   3GCTogglingTests.test_bug1055820d.<locals>.D.__del__  s    6(Qr!   r"   Nr   )r*   r  r  s   @r   Dr    s     # #r!   r  Nr  r  )r.   rZ   r[   keep_d0_aliver3   rB   rC   r9   r	   r=   r   r\   r   rY   )r4   r  d0r  r  r  r  r2   r   r  r  s   &        @@r   test_bug1055820d GCTogglingTests.test_bug1055820d~  s    	# 	# 	# qT


a[Ga[{{2R< =? JJL&&&FA5y		CDSY*KKOTA&A Q% r!   c                   . p^ p\        4       pVP                  '       g5   V^,          pVR8  d   V P                  R4       VP                  . 4       KF   \        P
                  ! 4        . p^ p\        4       pVP                  '       g%   V^,          pVR8  d   MVP                  . 4       K6  V P                  VR4       \        P                  ! 4        R#   \        P                  ! 4        i ; i)r   r  r  i'  N)r9   r=   r   rY   rZ   r   r\   r   )r4   r  r2   r  s   &   r   $test_indirect_calls_with_gc_disabled4GCTogglingTests.test_indirect_calls_with_gc_disabled  s    =&&&FA5y		CDKKO	JJLDA"}H***Qu9BQ&IIKBIIKs   4C 6C C/r"   N)r#   r$   r%   r&   ru  rz  r  r   r  r  r'   r(   r)   s   @r   r  r  -  sS     H&T $1E& E&N $1 r!   r  c                   ,   a  ] tR tRt o R tR tRtV tR# )PythonFinalizationTestsi  c                J    \         P                  ! R 4      p\        RV4       R# )aM  
            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   Nr]  r4   r   s   & r   test_ast_fini%PythonFinalizationTests.test_ast_fini  s#      
  
 	t$r!   c                J    \         P                  ! R 4      p\        RV4       R# )z
            import asyncio
            from contextvars import ContextVar

            context_loop = ContextVar("context_loop", default=None)
            loop = asyncio.new_event_loop()
            context_loop.set(loop)
        r   Nr]  r  s   & r   test_warnings_fini*PythonFinalizationTests.test_warnings_fini  s!        	t$r!   r"   N)r#   r$   r%   r&   r  r  r'   r(   r)   s   @r   r  r    s     %&% %r!   r  c                     \         P                  ! 4       s\         P                  ! 4        \         P                  ! 4       s\         P                  ! \
        \         P                  ( ,          4       \         P                  ! 4        R # r0   )	rZ   r  rp  r   r   r   r   
DEBUG_LEAKr[   r"   r!   r   setUpModuler    sA    llnGJJLLLNELL"--'(JJLr!   c                      \         P                  ! \        4       \        '       d   \	        R 4       \         P
                  ! 4        \        '       g   \         P                  ! 4        R# R# )zrestoring automatic collectionN)rZ   r   r   r   printr   rp  r   r"   r!   r   tearDownModuler    s8    LLw./IIK7


 r!   __main__)5r   unittest.mockrS  r   test.supportr   r   r   r   r   r	   test.support.import_helperr
   test.support.os_helperr   r   r   test.support.script_helperr   r   r   r   r   rZ   r   	sysconfigr^  r1  r  rB   re  r   r   ImportErrorrl  r,   r.   r9   rG   get_config_varsgetr  r  TestCaserT   rg  rn  r  r  r  r  r#   mainr"   r!   r   <module>r     s     + + 5 ; ; U U 7 	 
     %'v 
:& : F   "";33#y'@'@'B;'OO
 %S*<==
N'h N'b  **  qEh'' qEhqh'' qh%h// %D	 zMMO A0  I
 M  s$   E5 /F
 5FF
	FF