ó
    ÷Þ jk  ã                   ó„   • S SK r S SKrS SKrS SKrSSKJr  SSKJr  SSKJr  \R                  (       d   e " S S\5      r
g)é    Né   )ÚTestCase)ÚRUNNING_ON_FREETHREAD_BUILD)Ú fails_leakcheck_on_py314_or_lessc                   óN   • \ rS rSrS rS rS r\S 5       rS r	S r
S rS	 rS
rg)ÚTestGCé   c                 óœ  • [         R                  " [        R                  " [        R                  5      R	                  5       5      n[
        R                  " 5         U" 5       b%  [        S[        R                  " U" 5       5      5        U R                  U" 5       5        U R                  [
        R                  [
        R                  5        g )NzO IS NOT NONE.)ÚweakrefÚrefÚgreenletÚ
getcurrentÚswitchÚgcÚcollectÚprintÚsysÚgetrefcountÚassertIsNoneÚassertFalseÚgarbage)ÚselfÚos     ÚP/var/www/html/gaurav/venv/lib/python3.13/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                 ó.  •  " S S[         R                   5      nU" 5       nX"l        [        R                  " U5      n[        R
                  " 5         U R                  U" 5       5        U R                  [        R                  [        R                  5        g )Nc                   ó   • \ rS rSrSrSrg)Ú8TestGC.test_circular_greenlet.<locals>.circular_greenleté   N© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__r"   r   r   Úcircular_greenletr       s   † Ø‹Dr   r(   )	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                 ó"  •  " S S[         R                   5      nU" 5       n[        R                  " U5      n[        R                  " 5         U R                  U" 5       5        U R                  [        R                  [        R                  5        g )Nc                   ó    • \ rS rSrS rS rSrg)Ú3TestGC.test_inactive_ref.<locals>.inactive_greenleté#   c                 óR   • [         R                   R                  X R                  S9  g )N)Úrun)r   Ú__init__r0   ©r   s    r   r1   Ú<TestGC.test_inactive_ref.<locals>.inactive_greenlet.__init__$   s   € Ü×!Ñ!×*Ñ*¨4·X±XÐ*Ò>r   c                 ó   • g ©Nr"   r2   s    r   r0   Ú7TestGC.test_inactive_ref.<locals>.inactive_greenlet.run'   ó   € Ør   r"   N)r#   r$   r%   r&   r1   r0   r'   r"   r   r   Úinactive_greenletr-   #   s   † ò?õr   r8   )r   r   r   r   r   r   r   r   )r   r8   r   s      r   Útest_inactive_refÚTestGC.test_inactive_ref"   s\   € ô	¤× 1Ñ 1ô 	ñ ÓˆÜ�KŠK˜‹NˆÜ
�
Š
ŒØ×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÕ0r   c                 ó4  ^^•  " S S[         5      m/ n[        R                  " 5       mUU4S jn[        R                  " U5      nXl        UR	                  U5        UR                  5         AA[        R                  " 5         [        R                  " 5         g )Nc                   ó   • \ rS rSrS rSrg)Ú:TestGC.test_finalizer_crash.<locals>.object_with_finalizeréB   c                 ó   • g r5   r"   r2   s    r   Ú__del__ÚBTestGC.test_finalizer_crash.<locals>.object_with_finalizer.__del__C   r7   r   r"   N)r#   r$   r%   r&   r@   r'   r"   r   r   Úobject_with_finalizerr=   B   s   † õr   rB   c                  ó  >• T " 5       [         R                  " 5       l         TR                  5         [         R                  " 5       ?g ! [         R                   a    [        S5         N7f = f! [         R                  " 5       ?f = f)NzGot greenlet exit!)r   r   Úobjectr   ÚGreenletExitr   )rB   Úparents   €€r   Úgreenlet_bodyÚ2TestGC.test_finalizer_crash.<locals>.greenlet_bodyG   sh   ø€ Ù+@Ó+BŒH×ÒÓ!Ô(ð1Ø—‘”ô ×'Ò'Ó)Ñ0øô ×(Ñ(ó ,ÜÐ*Ö+ð,ûô ×'Ò'Ó)Ñ0ús#   ¢A ÁA*Á'A- Á)A*Á*A- Á-B)rD   r   r   ÚarrayÚappendr   r   r   )r   rI   rG   ÚgrB   rF   s       @@r   Útest_finalizer_crashÚTestGC.test_finalizer_crash/   so   ù€ ô&	¤Fô 	ð ˆÜ×$Ò$Ó&ˆö	1ô ×Ò˜mÓ,ˆØŒØ�‰�QŒØ	�‰Œ
ØØÜ×ÒÔÜ
�
Š
�r   c                 ó‚   • [         (       d  U R                  S5        U R                  S5      nU R                  SU5        g )Nú&Only free-threaded builds are affectedzfail_issue_515_freethread_gc.pyzISSUE 515 OK©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                 ó‚   • [         (       d  U R                  S5        U R                  S5      nU R                  SU5        g )NrO   z!fail_c_stack_refs_suspended_gc.pyzC STACK REFS GC OKrP   rT   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                 ó�   • [         R                  S:  a  U R                  S5        SS KnS nUR	                  U[        5       5        g )N©é   r	   úTest is 3.15+ onlyr   c                  ó   • g)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   ©r   Úversion_inforQ   ÚdoctestÚrun_docstring_examplesÚdict©r   re   r`   s      r   Útest_crashing_deferred_objectÚ$TestGC.test_crashing_deferred_objectm   s9   € Ü×Ñ˜gÓ%Ø�M‰MÐ.Ô/Ûò	ð 	×&Ñ& |´T³VÕ<r   c                 ó�   • [         R                  S:  a  U R                  S5        SS KnS nUR	                  U[        5       5        g )Nr\   r^   r   c                  ó   • g)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€   rb   r   rc   rh   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)   r9   r   rL   rV   rY   ri   rn   r'   r"   r   r   r   r      s:   † ò1ò1ò1ð &ñ&ó &ð&òP	.ò4ò=õ#=r   r   )r   r   r   r   Ú r   r   Ú	leakcheckr   ÚGREENLET_USE_GCr   r"   r   r   Ú<module>rs      s;   ðÛ 	ã Û 
Û õ Ý )Ý 7ð ××Ð ÐôP=ˆXõ P=r   