Ë
    ðmxi�!  ã                   óp  — d dl m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 exr=  ej                  d«      �"d ej                  d«      j                  «       vn eed«      d	fZ G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zd„ Z G d„ de«      Zedk(  r ej,                  «        yy)é    )Úprint_functionNé   )ÚTestCase)ÚPY312ÚOPTz-DNDEBUGÚgettotalrefcountz1Broken on assertion-enabled builds of Python 3.12c                   ó   — e Zd Zy)Ú	SomeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úR/home/htdocs/ttos/venv/lib/python3.12/site-packages/greenlet/tests/test_tracing.pyr
   r
      s   „ Ør   r
   c                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)ÚGreenletTracerNc                 ó    — g | _         || _        y ©N)ÚactionsÚerror_on_trace)Úselfr   s     r   Ú__init__zGreenletTracer.__init__   s   € ØˆŒØ,ˆÕr   c                 ó^   — | j                   j                  |«       | j                  rt        ‚y r   )r   Úappendr   r
   ©r   Úargss     r   Ú__call__zGreenletTracer.__call__!   s'   € Ø�‰×Ñ˜DÔ!Ø×ÒÜˆOð r   c                 óN   — t        j                  | «      | _        | j                  S r   )ÚgreenletÚsettraceÚoldtracer   ©r   s    r   Ú	__enter__zGreenletTracer.__enter__&   s   € Ü ×)Ñ)¨$Ó/ˆŒØ�|‰|Ðr   c                 óB   — t        j                  | j                  «       y r   )r   r    r!   r   s     r   Ú__exit__zGreenletTracer.__exit__*   s   € Ü×Ñ˜$Ÿ-™-Õ(r   )F©r   r   r   r!   r   r   r#   r%   r   r   r   r   r      s   „ Ø€Hó-òò
ó)r   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚTestGreenletTracingz*
    Tests of ``greenlet.settrace()``
    c           	      óv  — t        j                  «       }d„ }d„ }t        «       5 }t        j                   |«      }|j                  «        t        j                   |«      }| j	                  t
        |j                  «       d d d «       | j                  d|ffd||ffd|ffd||ffg«       y # 1 sw Y   Œ0xY w)Nc                   ó   — y r   r   r   r   r   Údummyz:TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummy5   s   € Ør   c                  ó   — t        «       ‚r   )r
   r   r   r   Údummyexcz=TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyexc7   s
   € Ü“+Ðr   ÚswitchÚthrow)r   Ú
getcurrentr   r.   ÚassertRaisesr
   ÚassertEqual)r   Úmainr+   r-   r   Úg1Úg2s          r   Útest_a_greenlet_tracingz+TestGreenletTracing.test_a_greenlet_tracing3   s½   € Ü×"Ñ"Ó$ˆò	ò	ô Óð 	4 Ü×"Ñ" 5Ó)ˆBØ�I‰IŒKÜ×"Ñ" 8Ó,ˆBØ×Ñœi¨¯©Ô3÷		4ð 	×Ñ˜Ø˜˜b�zÐ"Ø˜˜D�zÐ"Ø˜˜b�zÐ"Ø�r˜4�jÐ!ð	#
õ 	÷	4ð 	4ús   ¥AB/Â/B8c                 óz  ‡— t        j                  «       Šˆfd„}t        j                   |«      }|j                  «        t        d¬«      5 }| j	                  t
        |j                  «       | j                  t        j                  «       d «       d d d «       | j                  d‰|ffg«       y # 1 sw Y   Œ!xY w)Nc                  ó&   •— ‰ j                  «        y r   )r.   )r3   s   €r   r+   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyI   s   ø€ Ø�K‰K�Mr   T)r   r.   )r   r0   r.   r   r1   r
   r2   Úgettrace)r   r+   Úgr   r3   s       @r   Ú!test_b_exception_disables_tracingz5TestGreenletTracing.test_b_exception_disables_tracingG   sž   ø€ Ü×"Ñ"Ó$ˆô	ä×Ñ˜eÓ$ˆØ	�‰Œ
Ü¨4Ô0ð 	8°GØ×Ñœi¨¯©Ô2Ø×ÑœX×.Ñ.Ó0°$Ô7÷	8ð 	×Ñ˜Ø˜˜a�yÐ!ð#
õ 	÷		8ð 	8ús   ÁAB1Â1B:c                 óp   — t        «       }|5  t        j                  |«       d d d «       y # 1 sw Y   y xY wr   )r   r   r    ©r   Útracers     r   Útest_set_same_tracer_twicez.TestGreenletTracing.test_set_same_tracer_twiceU   s2   € ô
  Ó!ˆØñ 	&Ü×Ñ˜fÔ%÷	&÷ 	&ñ 	&ús   �,¬5N)r   r   r   Ú__doc__r6   r;   r?   r   r   r   r(   r(   .   s   „ ñòò(ó&r   r(   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚPythonTracerNc                 ó   — g | _         y r   )r   r"   s    r   r   zPythonTracer.__init__b   s	   € Øˆ�r   c                 óf   — | j                   j                  ||j                  j                  f«       y r   )r   r   Úf_codeÚco_name)r   ÚframeÚeventÚargs       r   r   zPythonTracer.__call__e   s#   € à�‰×Ñ˜U E§L¡L×$8Ñ$8Ð9Õ:r   c                 óN   — t        j                  | «      | _        | j                  S r   )ÚsysÚ
setprofiler!   r   r"   s    r   r#   zPythonTracer.__enter__i   s   € ÜŸ™ tÓ,ˆŒØ�|‰|Ðr   c                 óB   — t        j                  | j                  «       y r   )rK   rL   r!   r   s     r   r%   zPythonTracer.__exit__m   s   € Ü�‰�t—}‘}Õ%r   r&   r   r   r   rB   rB   _   s   „ Ø€Hòò;òó&r   rB   c                   ó   — y©Né*   r   r   r   r   Útpt_callbackrQ   p   s   € Ør   c                   ó˜   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Z ej                  eŽ d„ «       Z ej                  eŽ d„ «       Zy)ÚTestPythonTracingzŒ
    Tests of the interaction of ``sys.settrace()``
    with greenlet facilities.

    NOTE: Most of this is probably CPython specific.
    Nc                 ó~   — t        «       5 }t        «        d d d «       | j                  g d¢«       y # 1 sw Y   ŒxY w)N)©Úreturnr#   ©ÚcallrQ   ©rV   rQ   ©rX   r%   ©Úc_callr%   )rB   rQ   r2   )r   r   s     r   Útest_trace_events_trivialz+TestPythonTracing.test_trace_events_trivial}   s:   € Ü‹^ð 	˜wÜŒN÷	ð 	×Ñ˜ò #
õ 	÷	ð 	ús   ‹3³<c                 óf   — t        «       5 }|j                  «        d d d «       |S # 1 sw Y   S xY wr   )rB   r.   ©r   Úgletr   s      r   Ú_trace_switchzTestPythonTracing._trace_switch�   s,   € Ü‹^ð 	˜wØ�K‰KŒM÷	àˆ÷	àˆús   ‹&¦0c                 óN   — | j                  |«      }| j                  |g d¢«       y )N)	rU   )r\   ra   )rX   ÚrunrW   rY   ©rV   rc   )Úc_returnra   rZ   r[   )ra   r2   r_   s      r   Ú$_check_trace_events_func_already_setz6TestPythonTracing._check_trace_events_func_already_set•   s'   € Ø×$Ñ$ TÓ*ˆØ×Ñ˜ò 
#
õ 
	r   c                 óR   — d„ }| j                  t        j                  |«      «       y )Nc                  ó   — t        «       S r   ©rQ   r   r   r   rc   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run¤   s
   € Ü“>Ð!r   )rf   r   )r   rc   s     r   Ú0test_trace_events_into_greenlet_func_already_setzBTestPythonTracing.test_trace_events_into_greenlet_func_already_set£   s"   € ò	"ð 	×1Ñ1´(×2CÑ2CÀCÓ2HÕIr   c                 ób   —  G d„ dt         j                   «      }| j                   |«       «       y )Nc                   ó   — e Zd Zd„ Zy)úQTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.Xc                 ó   — t        «       S r   ri   r"   s    r   rc   zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.run«   s
   € Ü#“~Ð%r   N©r   r   r   rc   r   r   r   ÚXrm   ª   s   „ ó&r   rp   )r   rf   )r   rp   s     r   Ú4test_trace_events_into_greenlet_subclass_already_setzFTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set©   s&   € ô	&”×!Ñ!ô 	&ð 	×1Ñ1±!³#Õ6r   c                 ó”   — |j                  «        t        «        |j                  «        | j                  |j                  g d¢«       y )N)rU   rW   rY   rd   rW   rY   rZ   r[   )r.   rQ   r%   r2   r   )r   r:   r>   s      r   Ú/_check_trace_events_from_greenlet_sets_profilerzATestPythonTracing._check_trace_events_from_greenlet_sets_profiler¯   s3   € Ø	�‰Œ
ÜŒØ�‰ÔØ×Ñ˜Ÿ™ò 	*
õ 		r   c                 ón   ‡— t        «       Šˆfd„}| j                  t        j                  |«      ‰«       y )Nc                  ó8   •— ‰ j                  «        t        «       S r   ©r#   rQ   ©r>   s   €r   rc   zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.runÁ   s   ø€ Ø×ÑÔÜ“>Ð!r   )rB   rs   r   )r   rc   r>   s     @r   Ú2test_trace_events_from_greenlet_func_sets_profilerzDTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler¿   s0   ø€ Ü“ˆô	"ð 	×<Ñ<¼X×=NÑ=NÈsÓ=SØ=Cõ	Er   c                 ó~   ‡— t        «       Š G ˆfd„dt        j                  «      }| j                   |«       ‰«       y )Nc                   ó   •— e Zd Zˆ fd„Zy)úSTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.Xc                 ó8   •— ‰j                  «        t        «       S r   rv   r=   s    €r   rc   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.runË   s   ø€ Ø× Ñ Ô"Ü#“~Ð%r   Nro   rw   s   €r   rp   r{   Ê   s   ø„ õ&r   rp   )rB   r   rs   )r   rp   r>   s     @r   Ú6test_trace_events_from_greenlet_subclass_sets_profilerzHTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profilerÈ   s0   ø€ Ü“ˆö	&”×!Ñ!ô 	&ð
 	×<Ñ<¹Q»SÀ&ÕIr   c                 ó&  ‡‡‡— t        «       Šd Šd Šˆˆfd„}ˆˆfd„}t        j                  |«      Št        j                  |«      Š‰j                  «       }| j                  |d«       t	        «        | j                  ‰j
                  g d¢«       y )Nc                  ón   •— ‰j                  «        t        «        ‰ j                  «        t        «        yrO   )r#   rQ   r.   ©r5   r>   s   €€r   Úg1_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_runØ   s%   ø€ Ø×ÑÔÜŒNØ�I‰IŒKÜŒNØr   c                  ón   •— t        «        ‰j                  «        t        «        ‰ j                  «        y r   )rQ   r%   r.   ©r4   r>   s   €€r   Úg2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_runß   s    ø€ ÜŒNØ�O‰OÔÜŒNØ�I‰I�Kr   rP   )	rU   rW   rY   ©r\   r�   )rX   r„   rW   rY   rZ   r[   ©rB   r   r.   r2   rQ   r   ©r   r�   r„   Úxr4   r5   r>   s       @@@r   Ú.test_trace_events_multiple_greenlets_switchingz@TestPythonTracing.test_trace_events_multiple_greenlets_switchingÑ   sy   ú€ ä“ˆàˆØˆõ	õ	ô ×Ñ˜vÓ&ˆÜ×Ñ˜vÓ&ˆà�I‰I‹KˆØ×Ñ˜˜BÔÜŒØ×Ñ˜Ÿ™ò 
*
õ 
	r   c                 óf  ‡‡‡— t        «       Šd Šd Šˆˆfd„}ˆˆfd„}t        j                  |«      Št        j                  |«      Š‰j                  «        ‰j                  «        ‰j                  «       }| j                  |d«       t	        «        | j                  ‰j
                  g d¢«       y )Nc                  óÆ   •— t        j                  «       j                  j                  «        ‰j	                  «        t        «        ‰ j                  «        t        «        yrO   )r   r0   Úparentr.   r#   rQ   r€   s   €€r   r�   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g1_run   s@   ø€ Ü×ÑÓ!×(Ñ(×/Ñ/Ô1Ø×ÑÔÜŒNØ�I‰IŒKÜŒNØr   c                  óÆ   •— t        j                  «       j                  j                  «        t	        «        ‰j                  «        t	        «        ‰ j                  «        y r   )r   r0   rŒ   r.   rQ   r%   rƒ   s   €€r   r„   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run  s;   ø€ Ü×ÑÓ!×(Ñ(×/Ñ/Ô1äŒNØ�O‰OÔÜŒNØ�I‰I�Kr   rP   )rU   rW   rY   r…   rW   rY   rZ   r[   r†   r‡   s       @@@r   Ú7test_trace_events_multiple_greenlets_switching_siblingszITestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings÷   s“   ú€ ô “ˆàˆØˆõ	õ	ô ×Ñ˜vÓ&ˆÜ×Ñ˜vÓ&ˆð 	�	‰	Œð 	�	‰	Œð �I‰I‹KˆØ×Ñ˜˜BÔäŒØ×Ñ˜Ÿ™ò 	*
õ 		r   )r   r   r   r@   ÚmaxDiffr]   ra   rf   rj   rq   rs   rx   r}   ÚunittestÚskipIfÚASSERTION_BUILD_PY312r‰   rŽ   r   r   r   rS   rS   s   sz   „ ñð €Gòò&ò
òJò7òò EòJð €X‡_�_Ð+Ð,ñ#ó -ð#ðJ €X‡_�_Ð+Ð,ñ/ó -ñ/r   rS   Ú__main__)Ú
__future__r   rK   Ú	sysconfigr   r�   Ú r   r   Úget_config_varÚsplitÚhasattrr’   Ú	Exceptionr
   Úobjectr   r(   rB   rQ   rS   r   r3   r   r   r   ú<module>rœ      sÍ   ðÝ %Û 
Û Û Û å Ý ð 
ò à#ˆ9×#Ñ# EÓ*Ð6ð 	Ð2˜)×2Ñ2°5Ó9×?Ñ?ÓAÑAá�SÐ,Ó-à7ðÐ ô	�	ô 	ô)�Vô )ô(.&˜(ô .&ôb&�6ô &ò"ôt˜ô tðn ˆzÒØ€H‡M�M…Oð r   