Ë
    ¬Œjk  ã                   óz   — d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddlmZ ej                  sJ ‚ G d„ de«      Z
y)é    Né   )ÚTestCase)ÚRUNNING_ON_FREETHREAD_BUILD)Ú fails_leakcheck_on_py314_or_lessc                   óF   — e Zd Zd„ Zd„ Zd„ Zed„ «       Zd„ Zd„ Z	d„ Z
d„ Zy	)
ÚTestGCc                 ó’  — t        j                  t        j                  t        j                  «      j	                  «       «      }t        j                  «         |«       �$t        dt        j                   |«       «      «       | j                   |«       «       | j                  t
        j                  t
        j                  «       y )NzO IS NOT NONE.)ÚweakrefÚrefÚgreenletÚ
getcurrentÚswitchÚgcÚcollectÚprintÚsysÚgetrefcountÚassertIsNoneÚassertFalseÚgarbage)ÚselfÚos     ú`/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/greenlet/tests/test_gc.pyÚtest_dead_circular_refz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                 ó,  —  G d„ dt         j                   «      } |«       }||_        t        j                  |«      }t	        j
                  «        | j                   |«       «       | j                  t        j                  t        j                  «       y )Nc                   ó   — e Zd ZdZy)ú8TestGC.test_circular_greenlet.<locals>.circular_greenletN)Ú__name__Ú
__module__Ú__qualname__r   © r   r   Úcircular_greenletr      s   „ Ø‰Dr   r#   )	r   r   r
   r   r   r   r   r   r   )r   r#   r   s      r   Útest_circular_greenletzTestGC.test_circular_greenlet   sa   € ô	¤× 1Ñ 1ô 	áÓˆØˆŒÜ�K‰K˜‹NˆÜ
�
‰
ŒØ×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÕ0r   c                 ó  —  G d„ dt         j                   «      } |«       }t        j                  |«      }t        j                  «        | j                   |«       «       | j                  t        j                  t        j                  «       y )Nc                   ó   — e Zd Zd„ Zd„ Zy)ú3TestGC.test_inactive_ref.<locals>.inactive_greenletc                 óZ   — t         j                   j                  | | j                  ¬«       y )N)Úrun)r   Ú__init__r)   ©r   s    r   r*   z<TestGC.test_inactive_ref.<locals>.inactive_greenlet.__init__$   s   € Ü×!Ñ!×*Ñ*¨4°T·X±XÐ*Õ>r   c                  ó   — y ©Nr"   r+   s    r   r)   z7TestGC.test_inactive_ref.<locals>.inactive_greenlet.run'   ó   € Ør   N)r   r    r!   r*   r)   r"   r   r   Úinactive_greenletr'   #   s   „ ò?ór   r/   )r   r
   r   r   r   r   r   r   )r   r/   r   s      r   Útest_inactive_refzTestGC.test_inactive_ref"   s\   € ô	¤× 1Ñ 1ô 	ñ ÓˆÜ�K‰K˜‹NˆÜ
�
‰
ŒØ×Ñ™!›#ÔØ×ÑœŸ™¤R§Z¡ZÕ0r   c                 ó,  ‡‡—  G d„ dt         «      Šg }t        j                  «       Šˆˆfd„}t        j                  |«      }||_        |j	                  |«       |j                  «        ~~t        j                  «        t        j                  «        y )Nc                   ó   — e Zd Zd„ Zy)ú:TestGC.test_finalizer_crash.<locals>.object_with_finalizerc                  ó   — y r-   r"   r+   s    r   Ú__del__zBTestGC.test_finalizer_crash.<locals>.object_with_finalizer.__del__C   r.   r   N)r   r    r!   r5   r"   r   r   Úobject_with_finalizerr3   B   s   „ ór   r6   c                  ó  •—  ‰ «       t        j                  «       _        	 ‰j                  «        t        j                  «       `y # t         j                  $ r t        d«       Y Œ5w xY w# t        j                  «       `w xY w)NzGot greenlet exit!)r   r   Úobjectr   ÚGreenletExitr   )r6   Úparents   €€r   Úgreenlet_bodyz2TestGC.test_finalizer_crash.<locals>.greenlet_bodyG   sh   ø€ Ù+@Ó+BŒH×ÑÓ!Ô(ð1Ø—‘”ô ×'Ñ'Ó)Ñ0øô ×(Ñ(ò ,ÜÐ*Ö+ð,ûô ×'Ñ'Ó)Ñ0ús#   ¡A ÁA'Á$A* Á&A'Á'A* Á*B )r8   r   r   ÚarrayÚappendr   r   r   )r   r<   r;   Úgr6   r:   s       @@r   Útest_finalizer_crashzTestGC.test_finalizer_crash/   sq   ù€ ô&	¤Fô 	ð ˆÜ×$Ñ$Ó&ˆõ	1ô ×Ñ˜mÓ,ˆØˆŒØ�‰�QŒØ	�‰Œ
ØØÜ×ÑÔÜ
�
‰
�r   c                 óx   — t         s| j                  d«       | j                  d«      }| j                  d|«       y )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_refsz,TestGC.test_issue515_freethread_c_stack_refsX   s1   € õ +Ø�M‰MÐBÔCØ—‘Ð!BÓCˆØ�‰�n fÕ-r   c                 óx   — t         s| j                  d«       | j                  d«      }| j                  d|«       y )NrA   z!fail_c_stack_refs_suspended_gc.pyzC STACK REFS GC OKrB   rF   s     r   Útest_c_stack_refs_suspended_gcz%TestGC.test_c_stack_refs_suspended_gcc   s2   € õ
 +Ø�M‰MÐBÔCØ—‘Ð!DÓEˆØ�‰Ð*¨FÕ3r   c                 óŽ   — t         j                  dk  r| j                  d«       dd l}d„ }|j	                  |t        «       «       y )N©é   é   úTest is 3.15+ onlyr   c                   ó   — y)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_doctestz:TestGC.test_crashing_deferred_object.<locals>.with_doctestq   ó   � r   ©r   Úversion_inforC   ÚdoctestÚrun_docstring_examplesÚdict©r   rU   rQ   s      r   Útest_crashing_deferred_objectz$TestGC.test_crashing_deferred_objectm   s9   € Ü×Ñ˜gÒ%Ø�M‰MÐ.Ô/Ûò	ð 	×&Ñ& |´T³VÕ<r   c                 óŽ   — t         j                  dk  r| j                  d«       dd l}d„ }|j	                  |t        «       «       y )NrL   rO   r   c                   ó   — y)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   rQ   z:TestGC.test_cycle_in_suspended_frame.<locals>.with_doctest€   rR   r   rS   rX   s      r   Útest_cycle_in_suspended_framez$TestGC.test_cycle_in_suspended_frame|   s9   € Ü×Ñ˜gÒ%Ø�M‰MÐ.Ô/Ûò	ð> 	×&Ñ& |´T³VÕ<r   N)r   r    r!   r   r$   r0   r   r?   rH   rJ   rY   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>r`      s;   ðÛ 	ã Û 
Û õ Ý )Ý 7ð ×ÒÐ ÐôP=ˆXõ P=r   