o
    dqi!                     @   s   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o8e	ddur4de	d
 vneedd	fZG d
d deZG dd deZG dd deZG dd deZdd ZG dd deZedkrqe  dS dS )    )print_functionN   )TestCase)PY312OPTz-DNDEBUGgettotalrefcountz1Broken on assertion-enabled builds of Python 3.12c                   @   s   e Zd ZdS )	SomeErrorN)__name__
__module____qualname__ r   r   b/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/greenlet/tests/test_tracing.pyr      s    r   c                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )GreenletTracerNFc                 C   s   g | _ || _d S N)actionserror_on_trace)selfr   r   r   r   __init__   s   
zGreenletTracer.__init__c                 G   s   | j | | jrtd S r   )r   appendr   r   r   argsr   r   r   __call__!   s   zGreenletTracer.__call__c                 C      t | | _| jS r   )greenletsettraceoldtracer   r   r   r   r   	__enter__&      zGreenletTracer.__enter__c                 G      t | j d S r   )r   r   r   r   r   r   r   __exit__*      zGreenletTracer.__exit__)Fr	   r
   r   r   r   r   r   r    r   r   r   r   r      s    
r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestGreenletTracingz*
    Tests of ``greenlet.settrace()``
    c              	   C   s   t  }dd }dd }t }t  |}|  t  |}| t|j W d    n1 s/w   Y  | |d||ffd||ffd||ffd||ffg d S )Nc                   S   s   d S r   r   r   r   r   r   dummy5      z:TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyc                   S   s   t  r   )r   r   r   r   r   dummyexc7      z=TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyexcswitchthrow)r   
getcurrentr   r(   assertRaisesr   assertEqual)r   mainr$   r&   r   g1g2r   r   r   test_a_greenlet_tracing3   s   






z+TestGreenletTracing.test_a_greenlet_tracingc                    s   t    fdd}t  |}|  tdd}| t|j | t  d  W d    n1 s2w   Y  | |d |ffg d S )Nc                      s       d S r   )r(   r   r-   r   r   r$   I   s   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyT)r   r(   )r   r*   r(   r   r+   r   r,   gettrace)r   r$   gr   r   r1   r   !test_b_exception_disables_tracingG   s   


z5TestGreenletTracing.test_b_exception_disables_tracingc                 C   s:   t  }| t| W d    d S 1 sw   Y  d S r   )r   r   r   )r   tracerr   r   r   test_set_same_tracer_twiceU   s   "z.TestGreenletTracing.test_set_same_tracer_twiceN)r	   r
   r   __doc__r0   r4   r6   r   r   r   r   r#   .   s
    r#   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 ZdS )
PythonTracerNc                 C   s
   g | _ d S r   )r   r   r   r   r   r   b   s   
zPythonTracer.__init__c                 C   s   | j ||jjf d S r   )r   r   f_codeco_name)r   frameeventargr   r   r   r   e   s   zPythonTracer.__call__c                 C   r   r   )sys
setprofiler   r   r   r   r   r   r   i   r   zPythonTracer.__enter__c                 G   r   r   )r>   r?   r   r   r   r   r   r    m   r!   zPythonTracer.__exit__r"   r   r   r   r   r8   _   s    r8   c                   C   s   dS N*   r   r   r   r   r   tpt_callbackp   r%   rB   c                   @   sx   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zeje dd Zeje dd ZdS )TestPythonTracingz
    Tests of the interaction of ``sys.settrace()``
    with greenlet facilities.

    NOTE: Most of this is probably CPython specific.
    Nc                 C   s@   t  }t  W d    n1 sw   Y  | |g d d S )N)returnr   callrB   rE   rB   rG   r    c_callr    )r8   rB   r,   )r   r   r   r   r   test_trace_events_trivial}   s   
z+TestPythonTracing.test_trace_events_trivialc                 C   s4   t  }|  W d    |S 1 sw   Y  |S r   )r8   r(   r   Zgletr   r   r   r   _trace_switch   s   

zTestPythonTracing._trace_switchc                 C   s   |  |}| |g d d S )N)	rD   )rK   rN   )rG   runrF   rH   rE   rO   )Zc_returnrN   rI   rJ   )rN   r,   rM   r   r   r   $_check_trace_events_func_already_set   s   
z6TestPythonTracing._check_trace_events_func_already_setc                 C   s   dd }|  t| d S )Nc                   S      t  S r   rB   r   r   r   r   rO      r'   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run)rQ   r   r   rO   r   r   r   0test_trace_events_into_greenlet_func_already_set   s   zBTestPythonTracing.test_trace_events_into_greenlet_func_already_setc                 C   s"   G dd dt j }| |  d S )Nc                   @   s   e Zd Zdd ZdS )zQTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.Xc                 S   rR   r   rS   r   r   r   r   rO      r'   zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.runNr	   r
   r   rO   r   r   r   r   X   s    rW   )r   rQ   r   rW   r   r   r   4test_trace_events_into_greenlet_subclass_already_set   s   zFTestPythonTracing.test_trace_events_into_greenlet_subclass_already_setc                 C   s,   |   t  |  | |jg d d S )N)rD   rF   rH   rP   rF   rH   rI   rJ   )r(   rB   r    r,   r   )r   r3   r5   r   r   r   /_check_trace_events_from_greenlet_sets_profiler   s   zATestPythonTracing._check_trace_events_from_greenlet_sets_profilerc                    s(   t    fdd}| t|  d S )Nc                             t S r   r   rB   r   r5   r   r   rO         zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run)r8   rZ   r   rT   r   r]   r   2test_trace_events_from_greenlet_func_sets_profiler   s
   zDTestPythonTracing.test_trace_events_from_greenlet_func_sets_profilerc                    s.   t   G  fdddtj}| |   d S )Nc                       s   e Zd Z fddZdS )zSTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.Xc                    r[   r   r\   r   r]   r   r   rO      r^   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.runNrV   r   r]   r   r   rW      s    rW   )r8   r   rZ   rX   r   r]   r   6test_trace_events_from_greenlet_subclass_sets_profiler   s   zHTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profilerc                    sn   t  d  d fdd} fdd}t| t|  }| |d t  | jg d d S )Nc                      s       t     t  dS r@   )r   rB   r(   r   r/   r5   r   r   g1_run   s
   zPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_runc                      s    t     t      d S r   )rB   r    r(   r   r.   r5   r   r   g2_run   s   zPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_runrA   )	rD   rF   rH   rK   rb   )rG   rd   rF   rH   rI   rJ   r8   r   r(   r,   rB   r   r   rb   rd   xr   r.   r/   r5   r   .test_trace_events_multiple_greenlets_switching   s   

z@TestPythonTracing.test_trace_events_multiple_greenlets_switchingc                    s~   t  d  d fdd} fdd}t| t|       }| |d t  | jg d d S )Nc                      s.   t  j    t     t  dS r@   )r   r*   parentr(   r   rB   r   ra   r   r   rb      s   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g1_runc                      s.   t  j  t    t     d S r   )r   r*   rk   r(   rB   r    r   rc   r   r   rd     s
   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_runrA   )rD   rF   rH   re   rF   rH   rI   rJ   rf   rg   r   ri   r   7test_trace_events_multiple_greenlets_switching_siblings   s   

zITestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings)r	   r
   r   r7   ZmaxDiffrL   rN   rQ   rU   rY   rZ   r_   r`   unittestZskipIfASSERTION_BUILD_PY312rj   rl   r   r   r   r   rC   s   s    		
%rC   __main__)
__future__r   r>   	sysconfigr   rm    r   r   get_config_varsplithasattrrn   	Exceptionr   objectr   r#   r8   rB   rC   r	   r-   r   r   r   r   <module>   s.    	1 8