Ë
    Ô�Djø  ã                   ón   — 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 ej                  sJ ‚ G d„ de«      Z	y)é    Né   )ÚTestCase)Ú fails_leakcheck_on_py314_or_lessc                   ó:   — e Zd Zd„ Zd„ Zd„ Ze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     úZC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\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__B   r-   r   N)r   r   r    r4   r!   r   r   Úobject_with_finalizerr2   A   s   „ ór   r5   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   )r5   Úparents   €€r   Úgreenlet_bodyz2TestGC.test_finalizer_crash.<locals>.greenlet_bodyF   sh   ø€ Ù+@Ó+BŒH×ÑÓ!Ô(ð1Ø—‘”ô ×'Ñ'Ó)Ñ0øô ×(Ñ(ò ,ÜÐ*Ö+ð,ûô ×'Ñ'Ó)Ñ0ús#   ¡A ÁA'Á$A* Á&A'Á'A* Á*B )r7   r   r   ÚarrayÚappendr   r   r   )r   r;   r:   Úgr5   r9   s       @@r   Útest_finalizer_crashzTestGC.test_finalizer_crash.   sq   ù€ ô&	¤Fô 	ð ˆÜ×$Ñ$Ó&ˆõ	1ô ×Ñ˜mÓ,ˆØˆŒØ�‰�QŒØ	�‰Œ
ØØÜ×ÑÔÜ
�
‰
�r   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_doctest[   ó   � r   ©r   Úversion_infoÚskipTestÚdoctestÚrun_docstring_examplesÚdict©r   rJ   rE   s      r   Útest_crashing_deferred_objectz$TestGC.test_crashing_deferred_objectW   s9   € Ü×Ñ˜gÒ%Ø�M‰MÐ.Ô/Ûò	ð 	×&Ñ& |´T³VÕ<r   c                 óŽ   — t         j                  dk  r| j                  d«       dd l}d„ }|j	                  |t        «       «       y )Nr@   rC   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   rE   z:TestGC.test_cycle_in_suspended_frame.<locals>.with_doctestj   rF   r   rG   rM   s      r   Útest_cycle_in_suspended_framez$TestGC.test_cycle_in_suspended_framef   s9   € Ü×Ñ˜gÒ%Ø�M‰MÐ.Ô/Ûò	ð> 	×&Ñ& |´T³VÕ<r   N)
r   r   r    r   r#   r/   r   r>   rN   rQ   r!   r   r   r   r      s0   „ ò1ò1ò1ð &ñ&ó &ð&òP=ó#=r   r   )
r   r	   r   r   Ú r   Ú	leakcheckr   ÚGREENLET_USE_GCr   r!   r   r   ú<module>rU      s5   ðÛ 	ã Û 
Û õ Ý 7ð ×ÒÑ ô{=ˆXõ {=r   