o
    Zh	                     @   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	   L/var/www/html/lang_env/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   Z	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>lineFTZTornadoBackground)targetdaemonnameN)	shellZset_trio_runnerZrun_line_magicZmagics_managerZmagicsZ_interrupted	threadingThreadstart)r   ZkernelZio_loopZ	bg_threadr	   r	   r
   
initialize   s   zTrioRunner.initializec                 C   s    | j r
| j   dS d}t|)zInteruppt 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   ZlowlevelZcurrent_trio_tokenr   Zopen_nurseryZ_add_excbuiltinsZGLOBAL_NURSERYZsleep_forever)Znurseryr+   r   r	   r
   	trio_main/   s   .z!TrioRunner.run.<locals>.trio_mainN)signalSIGINTr!   r   run)r   Zold_sigr.   r	   r-   r
   r1   '   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   ZCancelScoper   )coror   r	   r
   loc?   s   
 z TrioRunner.__call__.<locals>.loc)Z
trio_token)r   Zfrom_threadr1   r   )r   Zasync_fnr3   r	   r   r
   __call__<   s   zTrioRunner.__call__N)	__name__
__module____qualname____doc__r   r   r!   r1   r4   r	   r	   r	   r
   r      s    r   )	r8   r,   r(   r/   r   r$   r   r   r   r	   r	   r	   r
   <module>   s    