§
    dŠtjÄ  ã                   óx   — 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
dS )é    Né   )ÚTestCase)ÚRUNNING_ON_FREETHREAD_BUILD)Ú fails_leakcheck_on_py314_or_lessc                   óN   — e Zd Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ Zd	S )
ÚTestGCc                 ó¦  — t          j        t          j        t          j        ¦  «                             ¦   «         ¦  «        }t          j        ¦   «           |¦   «         �*t          dt          j	         |¦   «         ¦  «        ¦  «         |  
                     |¦   «         ¦  «         |                      t
          j        t
          j        ¦  «         d S )NzO IS NOT NONE.)ÚweakrefÚrefÚgreenletÚ
getcurrentÚswitchÚgcÚcollectÚprintÚsysÚgetrefcountÚassertIsNoneÚassertFalseÚgarbage)ÚselfÚos     úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/greenlet/tests/test_gc.pyÚtest_dead_circular_refzTestGC.test_dead_circular_ref   sœ   € ÝŒK�Ô)­(Ô*=Ñ>Ô>×EÒEÑGÔGÑHÔHˆÝ
Œ
‰ŒˆØˆ1‰3Œ3ˆ?ÝÐ"¥C¤O°A°A±C´CÑ$8Ô$8Ñ9Ô9Ð9Ø×Ò˜!˜!™#œ#ÑÔÐØ×Ò�œ¥R¤ZÑ0Ô0Ð0Ð0Ð0ó    c                 ó4  —  G d„ dt           j         ¦  «        } |¦   «         }||_        t          j        |¦  «        }t	          j        ¦   «          |                       |¦   «         ¦  «         |                      t          j        t          j        ¦  «         d S )Nc                   ó   — e Zd ZdZdS )ú8TestGC.test_circular_greenlet.<locals>.circular_greenletN)Ú__name__Ú
__module__Ú__qualname__r   © r   r   Úcircular_greenletr      s   € € € € € ØˆDˆDˆDr   r#   )	r   r   r
   r   r   r   r   r   r   )r   r#   r   s      r   Útest_circular_greenletzTestGC.test_circular_greenlet   s–   € ð	ð 	ð 	ð 	ð 	¥Ô 1ñ 	ô 	ð 	àÐÑÔˆØˆŒÝŒK˜‰NŒNˆÝ
Œ
‰ŒˆØ×Ò˜!˜!™#œ#ÑÔÐØ×Ò�œ¥R¤ZÑ0Ô0Ð0Ð0Ð0r   c                 ó&  —  G d„ dt           j         ¦  «        } |¦   «         }t          j        |¦  «        }t          j        ¦   «          |                       |¦   «         ¦  «         |                      t          j        t          j        ¦  «         d S )Nc                   ó   — e Zd Zd„ Zd„ ZdS )ú3TestGC.test_inactive_ref.<locals>.inactive_greenletc                 óR   — t           j                              | | j        ¬¦  «         d S )N)Úrun)r   Ú__init__r)   ©r   s    r   r*   z<TestGC.test_inactive_ref.<locals>.inactive_greenlet.__init__$   s&   € ÝÔ!×*Ò*¨4°T´XÐ*Ñ>Ô>Ð>Ð>Ð>r   c                 ó   — d S ©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'   #   s2   € € € € € ð?ð ?ð ?ðð ð ð ð r   r/   )r   r
   r   r   r   r   r   r   )r   r/   r   s      r   Útest_inactive_refzTestGC.test_inactive_ref"   s‘   € ð	ð 	ð 	ð 	ð 	¥Ô 1ñ 	ô 	ð 	ð ÐÑÔˆÝŒK˜‰NŒNˆÝ
Œ
‰ŒˆØ×Ò˜!˜!™#œ#ÑÔÐØ×Ò�œ¥R¤ZÑ0Ô0Ð0Ð0Ð0r   c                 ó>  ‡‡—  G d„ dt           ¦  «        Šg }t          j        ¦   «         Šˆˆfd„}t          j        |¦  «        }||_        |                     |¦  «         |                     ¦   «          ~~t          j        ¦   «          t          j        ¦   «          d S )Nc                   ó   — e Zd Zd„ ZdS )ú:TestGC.test_finalizer_crash.<locals>.object_with_finalizerc                 ó   — d S 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        ¦   «         _        	 ‰                     ¦   «          n$# t           j        $ r t          d¦  «         Y nw xY wt          j        ¦   «         `d S # 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   s–   ø€ Ø+@Ð+@Ñ+BÔ+B�HÔÑ!Ô!Ô(ð1Ø—’‘”��øÝÔ(ð ,ð ,ð ,ÝÐ*Ñ+Ô+Ð+Ð+Ð+ð,øøøõ Ô'Ñ)Ô)Ð0Ð0Ð0ø•HÔ'Ñ)Ô)Ð0Ð0Ð0Ð0Ð0s&   £8 ·A1 ¸AÁA1 ÁAÁA1 Á1B)r8   r   r   ÚarrayÚappendr   r   r   )r   r<   r;   Úgr6   r:   s       @@r   Útest_finalizer_crashzTestGC.test_finalizer_crash/   sº   øø€ ð&	ð 	ð 	ð 	ð 	¥Fñ 	ô 	ð 	ð ˆÝÔ$Ñ&Ô&ˆð	1ð 	1ð 	1ð 	1ð 	1ð 	1õ Ô˜mÑ,Ô,ˆØˆŒØ�Š�Q‰ŒˆØ	�Š‰
Œ
ˆ
ØØÝÔÑÔÐÝ
Œ
‰Œˆˆˆr   c                 ó”   — t           s|                      d¦  «         |                      d¦  «        }|                      d|¦  «         d S )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   sL   € õ +ð 	DØ�MŠMÐBÑCÔCÐCØ—’Ð!BÑCÔCˆØ�Š�n fÑ-Ô-Ð-Ð-Ð-r   c                 ó”   — t           s|                      d¦  «         |                      d¦  «        }|                      d|¦  «         d S )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   sM   € õ +ð 	DØ�MŠMÐBÑCÔCÐCØ—’Ð!DÑEÔEˆØ�ŠÐ*¨FÑ3Ô3Ð3Ð3Ð3r   c                 ó¢   — t           j        dk     r|                      d¦  «         dd l}d„ }|                     |t          ¦   «         ¦  «         d S )N©é   é   úTest is 3.15+ onlyr   c                  ó   — dS )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_doctestv   ó   € € € r   ©r   Úversion_inforC   ÚdoctestÚrun_docstring_examplesÚdict©r   rU   rQ   s      r   Útest_crashing_deferred_objectz$TestGC.test_crashing_deferred_objectr   s]   € ÝÔ˜gÒ%Ð%Ø�MŠMÐ.Ñ/Ô/Ð/Øˆˆˆð	ð 	ð 	ð 	×&Ò& |µT±V´VÑ<Ô<Ð<Ð<Ð<r   c                 ó¢   — t           j        dk     r|                      d¦  «         dd l}d„ }|                     |t          ¦   «         ¦  «         d S )NrL   rO   r   c                  ó   — dS )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�   s]   € ÝÔ˜gÒ%Ð%Ø�MŠMÐ.Ñ/Ô/Ð/Øˆˆˆð	ð 	ð 	ð> 	×&Ò& |µT±V´VÑ<Ô<Ð<Ð<Ð<r   N)r   r    r!   r   r$   r0   r   r?   rH   rJ   rY   r\   r"   r   r   r   r      sš   € € € € € ð1ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð &ð&ð &ñ &Ô%ð&ðP	.ð 	.ð 	.ð4ð 4ð 4ð=ð =ð =ð#=ð #=ð #=ð #=ð #=r   r   )r   r
   r   r   Ú r   r   Ú	leakcheckr   ÚGREENLET_USE_GCr   r"   r   r   ú<module>r`      s°   ðØ 	€	€	€	à €€€Ø 
€
€
€
Ø €€€ð Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ÔÐ Ð ÐðU=ð U=ð U=ð U=ð U=ˆXñ U=ô U=ð U=ð U=ð U=r   