+
    ÃìÜjk  ã                   óˆ   € ^ RI t ^ RIt^ RIt^ RIt^RIHt ^RIHt ^RIHt ]P                  '       g   Q h ! R R]4      t
R# )é    N)ÚTestCase)ÚRUNNING_ON_FREETHREAD_BUILD)Ú fails_leakcheck_on_py314_or_lessc                   óZ   a € ] tR t^t o R tR tR t]R 4       tR t	R t
R tR tR	tV tR
# )ÚTestGCc                ó   € \         P                  ! \        P                  ! \        P                  4      P	                  4       4      p\
        P                  ! 4        V! 4       e&   \        R\        P                  ! V! 4       4      4       V P                  V! 4       4       V P                  \
        P                  \
        P                  4       R # )NzO IS NOT NONE.)ÚweakrefÚrefÚgreenletÚ
getcurrentÚswitchÚgcÚcollectÚprintÚsysÚgetrefcountÚassertIsNoneÚassertFalseÚgarbage)ÚselfÚos   & ÚT/opt/render/project/src/.venv/lib/python3.14/site-packages/greenlet/tests/test_gc.pyÚtest_dead_circular_refÚTestGC.test_dead_circular_ref   sx   € Ü�KŠKœ×)Ò)¬(×*=Ñ*=Ó>×EÑEÓGÓHˆÜ
�
Š
ŒÙ‹3Š?ÜÐ"¤C§O¢O±A³CÓ$8Ô9Ø×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÖ0ó    c                ó0  €  ! R  R\         P                   4      pV! 4       pW"n        \        P                  ! V4      p\        P
                  ! 4        V P                  V! 4       4       V P                  \        P                  \        P                  4       R# )c                   ó   € ] tR t^tRtRtR# )Ú8TestGC.test_circular_greenlet.<locals>.circular_greenletN© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__r   r   r   Úcircular_greenletr      s   † ØŒDr   r%   N)	r   r   r	   r
   r   r   r   r   r   )r   r%   r   s   &  r   Útest_circular_greenletÚTestGC.test_circular_greenlet   s_   € ô	¤× 1Ñ 1ô 	áÓˆØŒÜ�KŠK˜‹NˆÜ
�
Š
ŒØ×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÖ0r   c                ó$  €  ! R  R\         P                   4      pV! 4       p\        P                  ! V4      p\        P                  ! 4        V P                  V! 4       4       V P                  \        P                  \        P                  4       R# )c                   ó,   a € ] tR t^#t o R tR tRtV tR# )Ú3TestGC.test_inactive_ref.<locals>.inactive_greenletc                óZ   € \         P                   P                  W P                  R 7       R# ))ÚrunN)r   Ú__init__r,   ©r   s   &r   r-   Ú<TestGC.test_inactive_ref.<locals>.inactive_greenlet.__init__$   s   € Ü×!Ñ!×*Ñ*¨4·X±XÐ*Ö>r   c                ó   € R # ©Nr   r.   s   &r   r,   Ú7TestGC.test_inactive_ref.<locals>.inactive_greenlet.run'   ó   € Ùr   r   N)r    r!   r"   r#   r-   r,   r$   Ú__classdictcell__©Ú__classdict__s   @r   Úinactive_greenletr*   #   s   ø‡ € ò?÷ð r   r7   N)r   r	   r
   r   r   r   r   r   )r   r7   r   s   &  r   Útest_inactive_refÚTestGC.test_inactive_ref"   s\   € ô	¤× 1Ñ 1ô 	ñ ÓˆÜ�KŠK˜‹NˆÜ
�
Š
ŒØ×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÖ0r   c                ó6  aa€  ! R  R\         4      o. p\        P                  ! 4       oVV3R lp\        P                  ! V4      pWn        VP	                  V4       VP                  4        ??\        P                  ! 4        \        P                  ! 4        R# )c                   ó&   a € ] tR t^Bt o R tRtV tR# )Ú:TestGC.test_finalizer_crash.<locals>.object_with_finalizerc                ó   € R # r1   r   r.   s   &r   Ú__del__ÚBTestGC.test_finalizer_crash.<locals>.object_with_finalizer.__del__C   r3   r   r   N)r    r!   r"   r#   r>   r$   r4   r5   s   @r   Úobject_with_finalizerr<   B   s   ø‡ € ÷ð r   r@   c                  ó  <€ S ! 4       \         P                  ! 4       n         SP                  4        \         P                  ! 4       =R#   \         P                   d    \        R 4        L9i ; i  \         P                  ! 4       =i ; i)zGot greenlet exit!N)r   r   Úobjectr   ÚGreenletExitr   )r@   Úparents   €€r   Úgreenlet_bodyÚ2TestGC.test_finalizer_crash.<locals>.greenlet_bodyG   sh   ø€ Ù+@Ó+BŒH×ÒÓ!Ô(ð1Ø—‘”ô ×'Ò'Ó)Ò0øô ×(Ñ(ô ,ÜÐ*Ö+ð,ûô ×'Ò'Ó)Ñ0ús#   ¢A	 Á	 A,Á)A/ Á+A,Á,A/ Á/BN)rB   r   r   ÚarrayÚappendr   r   r   )r   rG   rE   Úgr@   rD   s   &   @@r   Útest_finalizer_crashÚTestGC.test_finalizer_crash/   so   ù€ ô&	¤Fô 	ð ˆÜ×$Ò$Ó&ˆö	1ô ×Ò˜mÓ,ˆØŒØ�‰�QŒØ	�‰Œ
ØØÜ×ÒÔÜ
�
Š
Žr   c                ó†   € \         '       g   V P                  R 4       V P                  R4      pV P                  RV4       R# )ú&Only free-threaded builds are affectedzfail_issue_515_freethread_gc.pyzISSUE 515 OKN©r   ÚskipTestÚ
run_scriptÚassertIn©r   Úoutputs   & r   Ú%test_issue515_freethread_c_stack_refsÚ,TestGC.test_issue515_freethread_c_stack_refsX   s4   € ÷ +Ó*Ø�M‰MÐBÔCØ—‘Ð!BÓCˆØ�‰�n fÖ-r   c                ó†   € \         '       g   V P                  R 4       V P                  R4      pV P                  RV4       R# )rM   z!fail_c_stack_refs_suspended_gc.pyzC STACK REFS GC OKNrN   rR   s   & r   Útest_c_stack_refs_suspended_gcÚ%TestGC.test_c_stack_refs_suspended_gcc   s5   € ÷
 +Ó*Ø�M‰MÐBÔCØ—‘Ð!DÓEˆØ�‰Ð*¨FÖ3r   c                ó”   € \         P                  R8  d   V P                  R4       ^ RIpR pVP	                  V\        4       4       R# )é   úTest is 3.15+ onlyNc                 ó   € R# )zª
>>> import gc
>>> from greenlet import getcurrent, greenlet, GreenletExit
>>> def outer():
...     gc.collect()
>>> outer_glet = greenlet(outer)
>>> outer_glet.switch()
Nr   r   r   r   Úwith_doctestÚ:TestGC.test_crashing_deferred_object.<locals>.with_doctestq   ó   ‚ r   ©rZ   é   ©r   Úversion_inforO   ÚdoctestÚrun_docstring_examplesÚdict©r   rd   r]   s   &  r   Útest_crashing_deferred_objectÚ$TestGC.test_crashing_deferred_objectm   s9   € Ü×Ñ˜gÔ%Ø�M‰MÐ.Ô/Ûò	ð 	×&Ñ& |´T³VÖ<r   c                ó”   € \         P                  R8  d   V P                  R4       ^ RIpR pVP	                  V\        4       4       R# )rZ   r[   Nc                 ó   € R# )a’  
>>> import gc
>>> from greenlet import getcurrent, greenlet
>>> class Cycle:
...     def __del__(self):
...         print("(Running finalizer)")
>>> def collect_it():
...     print("Collecting garbage")
...     gc.collect()
>>> def inner():
...     cycle1 = Cycle()
...     cycle2 = Cycle()
...     cycle1.cycle = cycle2
...     cycle2.cycle = cycle1
...     getcurrent().parent.switch()
>>> def outer():
...     glet = greenlet(inner)
...     glet.switch()
...     collect_it()

>>> outer_glet = greenlet(outer)
>>> outer_glet.switch()
Collecting garbage
>>> outer_glet.dead
True
>>> collect_it()
Collecting garbage
(Running finalizer)
(Running finalizer)
Nr   r   r   r   r]   Ú:TestGC.test_cycle_in_suspended_frame.<locals>.with_doctest€   r_   r   r`   rb   rg   s   &  r   Útest_cycle_in_suspended_frameÚ$TestGC.test_cycle_in_suspended_frame|   s9   € Ü×Ñ˜gÔ%Ø�M‰MÐ.Ô/Ûò	ð> 	×&Ñ& |´T³VÖ<r   r   N)r    r!   r"   r#   r   r&   r8   r   rJ   rT   rW   rh   rm   r$   r4   r5   s   @r   r   r      sB   ø‡ € ò1ò1ò1ð &ñ&ó &ð&òP	.ò4ò=÷#=ð #=r   r   )r   r	   r   r   Ú r   r   Ú	leakcheckr   ÚGREENLET_USE_GCr   r   r   r   Ú<module>rr      s>   ðÛ 	ã Û 
Û õ Ý )Ý 7ð ××ÐÐ ÐôP=ˆXö P=r   