o
    i	                     @   sN   d Z ddlZddlZddlZddlZddlZddlZddlZG dd dZdS )A trio loop runner.    Nc                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )
TrioRunnerr   c                 C   s   d| _ d| _dS )Initialize the runner.N)_cell_cancel_scope_trio_tokenself r	   P/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/ipykernel/trio_runner.py__init__   s   
zTrioRunner.__init__c                 C   sT   |j |  |j dd dd |j jjd d< d| _tj|jddd	}|  d
S )r   	autoawaittrioc                 S   s   t jdddS )Nz5Autoawait isn't allowed in Trio background loop mode.   )
stacklevel)warningswarn)_r	   r	   r
   <lambda>   s    z'TrioRunner.initialize.<locals>.<lambda>lineFTTornadoBackground)targetdaemonnameN)	shellset_trio_runnerrun_line_magicmagics_managermagics_interrupted	threadingThreadstart)r   kernelio_loop	bg_threadr	   r	   r
   
initialize   s   zTrioRunner.initializec                 C   s    | j r
| j   dS d}t|)zInterrupt the runner.z)Kernel interrupted but no cell is runningN)r   cancel	Exception)r   signumframemsgr	   r	   r
   	interrupt    s   zTrioRunner.interruptc                    sB   t  t jj}dd   fdd}t| t  t j| dS )zRun the loop.c                 S   s*   d tt| | | j} td|  d S )N
z2An exception occurred in a global nursery task.
%s)join	tracebackformat_exceptiontype__traceback__loggingerror)excr	   r	   r
   log_nursery_exc,   s   z'TrioRunner.run.<locals>.log_nursery_excc               	      sj   t j _t  4 I dH }  | _| t_t  I dH  W d  I dH  dS 1 I dH s.w   Y  dS )zRun the main loop.N)	r   lowlevelcurrent_trio_tokenr   open_nursery_add_excbuiltinsGLOBAL_NURSERYsleep_forever)nurseryr5   r   r	   r
   	trio_main0   s   .z!TrioRunner.run.<locals>.trio_mainN)signalSIGINTr+   r   run)r   old_sigr?   r	   r>   r
   rB   (   s
   

zTrioRunner.runc                    s     fdd}t jj|| jdS )zHandle a function call.c                    sF   t   _ j | I dH W  d   S 1 sw   Y  d _dS )zA thread runner context.N)r   CancelScoper   )coror   r	   r
   loc@   s   
 z TrioRunner.__call__.<locals>.loc)
trio_token)r   from_threadrB   r   )r   async_fnrF   r	   r   r
   __call__=   s   zTrioRunner.__call__N)	__name__
__module____qualname____doc__r   r%   r+   rB   rJ   r	   r	   r	   r
   r      s    r   )	rN   r:   r2   r@   r   r.   r   r   r   r	   r	   r	   r
   <module>   s    