U
    gZ                    @  s  U d dl m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	d dl
Z
d dlZd dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZm Z  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dlm-Z- d dl.m/Z/ d dl0m1Z1 d dlm2Z2m3Z3 d dl
m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlmEZE d dlFZFddlGmHZHmIZImJZJmKZKmLZL ddlMmNZNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z] ddl[m^Z_ ddl[m`Za ddl[mbZbmcZc dd l[mdZe dd!lfmgZh dd"lLmiZimjZjmkZkmlZlmmZm dd#lnmoZo dd$lpmqZq dd%lrmsZsmtZt e	jud&krd d'l7mvZv nd d'lwmvZv e	jud(krd d)lmxZx d d*l7myZymzZz nd dlZd dl{Z{d dl0Z0d d+lm|Z|m}Z}m~Z~mZ d d,lmZ d d*lwmyZymzZz G d-d. d.e{jZG d/d0 d0Zxd1d2d3d4d5Zd1d2d3d6d7ZeCd8ZeCd9d:d;Zeyd<Zevd=Zeqd>Zd?ed>< d@dAdBdCZdDdEdFdGdHZeE ZdIedJ< d@dKdLdMdNZG dOdP dPehZgG dQdR dRZeE ZdSedT< G dUdV dVeLjZG dWdX dXeLjZeBe@e e@e f ZG dYdZ dZe4Zeqd[Zd\ed[< eqd]Zd^ed]< G d_d` d`eLjZe"dadbG dcdd ddeLjZe"dadbG dedf dfeLjZe"dadbG dgdh dheLjZdidjd2dkdldmZdnd2dodpdqZG drds dsejZG dtdu duejZG dvdw dweLjZG dxdy dyZG dzd{ d{eeLjZG d|d} d}eLjkZG d~d deLjkZG dd deLjZG dd deLjZG dd deeLjZG dd deeLjZeqdZded< eqdZded< G dd de_Z^G dd deaZ`G dd deeZdG dd de]Z\eqdZded< G dd dZG dd deKZG dd deLjZG dd deiZeZdS )    )annotationsN)AbstractEventLoopCancelledError	all_taskscreate_taskcurrent_taskget_running_loopsleep)_run_until_complete_cb)OrderedDictdeque)AsyncIteratorIterable)Future)suppress)Contextcopy_context)	dataclass)partialwraps)CORO_RUNNINGCORO_SUSPENDEDgetcoroutinestateiscoroutine)IOBase)PathLike)Queue)Signals)AddressFamily
SocketKind)Thread)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
CollectionContextManager	CoroutineOptionalSequenceTupleTypeVarcast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsLockStatisticsTaskInfoabc)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream
WouldBlockiterate_exceptions)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEventLock)ResourceGuardSemaphoreStatistics	SemaphoreCancelScope)AsyncBackendIPSockAddrTypeSocketListenerUDPPacketTypeUNIXDatagramPacketType)StrOrBytesPath)RunVar)MemoryObjectReceiveStreamMemoryObjectSendStream)   
   )	ParamSpecrU      )Runner)TypeVarTupleUnpack)
coroutinesevents
exceptionstasks)BaseExceptionGroupc                   @  s   e Zd ZdZdZdZdS )_StatecreatedZinitializedclosedN)__name__
__module____qualname__CREATEDINITIALIZEDCLOSED rk   rk   </tmp/pip-unpacked-wheel-3u0cc9gf/anyio/_backends/_asyncio.pyrb   v   s   rb   c                   @  s   e Zd ZddddddddZd ddd	Zd
ddddddZddddZddddZdddddddZddddZ	dddd d!Z
dS )"rZ   Ndebugloop_factorybool | None&Callable[[], AbstractEventLoop] | Nonec                C  s0   t j| _|| _|| _d | _d | _d| _d| _d S )Nr   F)	rb   rh   _state_debug_loop_factory_loop_context_interrupt_count_set_event_loop)selfrn   ro   rk   rk   rl   __init__}   s    zRunner.__init__returnc                 C  s   |    | S N)
_lazy_initry   rk   rk   rl   	__enter__   s    zRunner.__enter__type[BaseException]BaseExceptionr!   Noneexc_typeexc_valexc_tbr|   c                 C  s   |    d S r}   )closery   r   r   r   rk   rk   rl   __exit__   s    zRunner.__exit__c              	   C  s   | j tjk	rdS zH| j}t	| |
|  t|drH|
|  n|
t| W 5 | jrjtd |  d| _tj| _ X dS )zShutdown and close event loop.Nshutdown_default_executor)rr   rb   ri   rx   r^   set_event_loopr   ru   rj   _cancel_all_tasksrun_until_completeZshutdown_asyncgenshasattrr   _shutdown_default_executorry   looprk   rk   rl   r      s    

zRunner.closer   c                 C  s   |    | jS )zReturn embedded event loop.)r~   ru   r   rk   rk   rl   get_loop   s    zRunner.get_loop)contextzCoroutine[T_Retval]T_Retval)coror|   c             
   C  sT  t |std|t dk	r,td|   |dkrB| j}|| j	j
|}t t krttjtjkrt| j|d}zttj| W q tk
r   d}Y qX nd}d| _zfz| j	|W W TS  tjk
r   | jdkrt|dd}|dk	r| dkrt  Y nX W 5 |dk	rNttj|krNttjtj X dS )z/Run a coroutine inside the embedded event loop.za coroutine was expected, got Nz7Runner.run() cannot be called from a running event loop)	main_taskr   uncancel)r]   r   
ValueErrorr^   Z_get_running_loopRuntimeErrorr~   rv   runru   r   	threadingcurrent_threadmain_threadsignal	getsignalSIGINTdefault_int_handlerr   
_on_sigintrw   r   r_   r   getattrKeyboardInterrupt)ry   r   r   taskZsigint_handlerr   rk   rk   rl   r      sD    
z
Runner.runc                 C  s   | j tjkrtd| j tjkr$d S | jd krRt | _| j	s\t
| j d| _	n
|  | _| jd k	rt| j| j t | _tj| _ d S )NzRunner is closedT)rr   rb   rj   r   ri   rt   r^   new_event_loopru   rx   r   rs   Z	set_debugcontextvarsr   rv   r   rk   rk   rl   r~      s    




zRunner._lazy_initasyncio.Task)r   r|   c                 C  sF   |  j d7  _ | j dkr<| s<|  | jdd  d S t d S )N   c                   S  s   d S r}   rk   rk   rk   rk   rl   <lambda>       z#Runner._on_sigint.<locals>.<lambda>)rw   donecancelru   call_soon_threadsafer   )ry   signumframer   rk   rk   rl   r      s    zRunner._on_sigint)re   rf   rg   rz   r   r   r   r   r   r~   r   rk   rk   rk   rl   rZ   {   s   0rZ   r   r   r   r|   c                 C  st   t | }|sd S |D ]}|  q| t j|ddi |D ]0}| rLq>| d k	r>| d| |d q>d S )NZreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptionr   )r`   r   r   r   Zgather	cancelledr   Zcall_exception_handler)r   Z	to_cancelr   rk   rk   rl   r      s     

r   c                   sf   ddd fdd}d _  jdkr(dS   }tj||fd}|  z|I dH  W 5 |  X dS )	z.Schedule the shutdown of the default executor.zasyncio.futures.Futurer   )futurer|   c              
     sV   z  j jdd  | jd  W n0 tk
rP } z | j| W 5 d }~X Y nX d S )NT)wait)_default_executorshutdownr   
set_result	Exceptionset_exception)r   exr   rk   rl   _do_shutdown  s
    z0_shutdown_default_executor.<locals>._do_shutdownTN)targetargs)Z_executor_shutdown_calledr   create_futurer   r    startjoin)r   r   r   threadrk   r   rl   r     s    
r   r   T_contraT)contravariantPosArgsTP
_root_taskzRunVar[asyncio.Task | None]r   r{   c                  C  s   t d } | d k	r|  s| S t D ]Z}|jr$| s$dd |jD }|D ]2}|tksft|dd dkrJt | |    S qJq$tt	j
t }t|}|r|j}|r|jd k	r|j}q|d k	rtt	j
|jS |S )Nc                 S  s   g | ]\}}|qS rk   rk   ).0cbr   rk   rk   rl   
<listcomp>7  s     z"find_root_task.<locals>.<listcomp>rf   zuvloop.loop)r   getr   r   Z
_callbacksr
   r   setr.   asyncioTaskr   _task_statescancel_scope_parent_scope
_host_task)	root_taskr   	callbacksr   stater   rk   rk   rl   find_root_task/  s,    



r   r&   str)funcr|   c                 C  s0   t | dd }t | dd }ddd ||fD S )Nrf   rg   .c                 S  s   g | ]}|r|qS rk   rk   )r   xrk   rk   rl   r   Q  s      z%get_callable_name.<locals>.<listcomp>)r   r   )r   modulequalnamerk   rk   rl   get_callable_nameN  s    r   z1WeakKeyDictionary[asyncio.AbstractEventLoop, Any]	_run_varsbool)r   r|   c                 C  sB   zt |  ttfkW S  tk
r<   td|  ddY nX dS )zBReturn ``True`` if the task has been started and has not finished.zCannot determine if task z has started or notN)r   get_coror   r   AttributeErrorr   r   rk   rk   rl   _task_started[  s    r   c                   @  s.  e Zd Zejddddd dddZejdfddddd	Zd d
ddZdddddddZdddddZ	dd
ddZ
d ddddZdd
ddZdd
d d!Zdd
d"d#Zedd
d$d%Zejddd&d'd%Zedd
d(d)Zedd
d*d+Zedd
d,d-Zejddd&d.d-Zd/S )0rK   Fdeadlineshieldfloatr   r   r   r|   c                C  s
   t | S r}   object__new__clsr   r   rk   rk   rl   r   j  s    zCancelScope.__new__c                 C  sV   || _ || _d | _t | _d| _d| _d| _d | _d | _	t | _
d | _d| _d | _d S )NFr   )	_deadline_shieldr   r   _child_scopes_cancel_called_cancelled_caught_active_timeout_handle_cancel_handle_tasksr   _cancel_calls_cancelling)ry   r   r   rk   rk   rl   rz   o  s    zCancelScope.__init__r{   c                 C  s   | j rtdttjt  | _}| j| zt	| }W n& t
k
r`   td | }|t	|< Y n6X |j| _| |_| jd k	r| jj|  | jj| |   d| _ tjdkr| j | _| jr| |  | S )Nz;Each CancelScope may only be used for a single 'with' blockTrX   )r   r   r.   r   r   r   r   r   addr   KeyError	TaskStater   r   r   remove_timeoutsysversion_info
cancellingr   r   _deliver_cancellation)ry   Z	host_task
task_staterk   rk   rl   r   ~  s.    



zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonerp   r   c                 C  s   | j stdt | jk	r"td| jd k	s0tt| j}|d ksN|j| k	rVtdd| _ | jrr| j	  d | _| j
| j | jd k	r| jj|  | jj
| j | j|_|   | jr|d k	rt|D ]$}t|tr| || _| jr qq| jS d S )NzThis cancel scope is not activezIAttempted to exit cancel scope in a different task than it was entered inzTAttempted to exit a cancel scope that isn't the current tasks's current cancel scopeF)r   r   r   r   AssertionErrorr   r   r   r   r   r   r   r   r   r   _restart_cancellation_in_parentr   r=   
isinstancer   	_uncancelr   )ry   r   r   r   Zhost_task_stateexcrk   rk   rl   r     s<    


zCancelScope.__exit__r   )cancelled_excr|   c                 C  sn   t jdk s| jd krd| _dS | jd k	rR| jrR|  jd8  _| j | jkr(dS q(d| _dt| d|jkS )NrU   	   r   Tr   Cancelled by cancel scope r   )r  r  r   r   r   r   idr   )ry   r  rk   rk   rl   r    s    
zCancelScope._uncancelr   c                 C  s@   | j tjkr<t }| | j kr*|   n|| j | j| _d S r}   )	r   mathinfr   timer   Zcall_atr   r   r   rk   rk   rl   r     s
    
zCancelScope._timeout)originr|   c                 C  s   d}t  }| jD ]|}|jrqd}||k	r|| jks:t|r|j}t|tjrT|	 s| j
d7  _
tjdkr|dt|d q|  q| jD ]}|js|js||p|}q|| kr|rt | j|| _nd| _|S )aZ  
        Deliver cancellation to directly contained tasks and nested cancel scopes.

        Schedule another run at the end if we still have tasks eligible for
        cancellation.

        :param origin: the cancel scope that originated the cancellation
        :return: ``True`` if the delivery needs to be retried on the next cycle

        FTr   r  r  r   N)r   r   Z_must_cancelr   r   _fut_waiterr  r   r   r   r   r  r  r   r  r   r   cancel_calledr  r   Z	call_soonr   )ry   r  Zshould_retrycurrentr   waiterscoperk   rk   rl   r    s0    



 z!CancelScope._deliver_cancellationc                 C  s>   | j }|dk	r:|jr*|jdkr:|| q:|jr2q:|j }qdS )zb
        Restart the cancellation effort in the closest directly cancelled parent scope.

        N)r   r   r   r  r   )ry   r  rk   rk   rl   r
    s    

z+CancelScope._restart_cancellation_in_parentc                 C  s*   | j }|d k	r&|js&|jrdS |j }qdS )NTF)r   r   r   )ry   r   rk   rk   rl   _parent_cancelled%  s    zCancelScope._parent_cancelledc                 C  s:   | j s6| jr| j  d | _d| _ | jd k	r6| |  d S NT)r   r   r   r   r  r   rk   rk   rl   r   0  s    

zCancelScope.cancelc                 C  s   | j S r}   )r   r   rk   rk   rl   r   :  s    zCancelScope.deadlinevaluer|   c                 C  s<   t || _| jd k	r$| j  d | _| jr8| js8|   d S r}   )r   r   r   r   r   r   r   ry   r  rk   rk   rl   r   >  s    


c                 C  s   | j S r}   )r   r   rk   rk   rl   r  H  s    zCancelScope.cancel_calledc                 C  s   | j S r}   )r   r   rk   rk   rl   cancelled_caughtL  s    zCancelScope.cancelled_caughtc                 C  s   | j S r}   )r   r   rk   rk   rl   r   P  s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|   d S r}   )r   r
  r   rk   rk   rl   r   T  s    
N)re   rf   rg   r  r  r   rz   r   r   r  r   r  r
  r  r   propertyr   setterr  r!  r   rk   rk   rk   rl   rK   i  s0    1-
	rK   c                   @  s$   e Zd ZdZdZdddddZdS )	r   z
    Encapsulates auxiliary task information that cannot be added to the Task instance
    itself because there are no guarantees about its implementation.
    )	parent_idr   __weakref__
int | NoneCancelScope | Noner$  r   c                 C  s   || _ || _d S r}   r(  )ry   r$  r   rk   rk   rl   rz   i  s    zTaskState.__init__N)re   rf   rg   __doc__	__slots__rz   rk   rk   rk   rl   r   a  s   r   z*WeakKeyDictionary[asyncio.Task, TaskState]r   c                   @  s.   e Zd ZdddddZdddd	d
dZdS )_AsyncioTaskStatusasyncio.Futureint)r   r$  c                 C  s   || _ || _d S r}   )_future
_parent_id)ry   r   r$  rk   rk   rl   rz   w  s    z_AsyncioTaskStatus.__init__NzT_contra | Noner   r  c                 C  sZ   z| j | W n* tjk
r:   | j  s6tdd Y nX ttjt }| j	t
| _d S )Nz.called 'started' twice on the same task status)r.  r   r   ZInvalidStateErrorr   r   r.   r   r   r/  r   r$  )ry   r  r   rk   rk   rl   started{  s    
z_AsyncioTaskStatus.started)N)re   rf   rg   rz   r0  rk   rk   rk   rl   r+  v  s   r+  c                   @  s   e Zd ZddddZd dddZddd	d
dddZd ddddddddZdddddddddZdddddddddZdS )!	TaskGroupr   r{   c                 C  s    t  | _d| _g | _t | _d S )NF)rK   r   r   _exceptionsr   r   r   rk   rk   rl   rz     s    zTaskGroup.__init__c                   s   | j   d| _| S r  )r   r   r   r   rk   rk   rl   
__aenter__  s    
zTaskGroup.__aenter__r  r  r  rp   r   c              
     s   | j |||}|d k	r8| j   t|ts8| j| d }| jrzt	| jI d H  W q< tk
r } z| j   |d kr|}W 5 d }~X Y q<X q<d| _
| jrtd| j|r|d ks|r||S )NFzunhandled errors in a TaskGroup)r   r   r   r  r   r2  appendr   r   r   r   ra   )ry   r   r   r   Zignore_exceptionZ!cancelled_exc_while_waiting_tasksr  rk   rk   rl   	__aexit__  s.    


 zTaskGroup.__aexit__Nz,Callable[[Unpack[PosArgsT]], Awaitable[Any]]tuple[Unpack[PosArgsT]]r   asyncio.Future | Noner   )r   r   nametask_status_futurer|   c           
        s  ddd fdd} j s&tdi }rPtt }tt jj|d< nt jj}|||}t|st|dr|j	 d	nd
}	t
d|	 |j d|d|d krt|nt|}t||d| t| jdt<  jj  j S )Nr   r   )_taskr|   c              
     s  t |  }|jd k	st| |jjks&t|jj|   j t | = z|  }W n: tk
r } zt|jtrx|j}qd|}W 5 d }~X Y nX |d k	rd k	r	 rd S d ks
 rt|tsЈ j|  j s j  n
| n"d k	r
 std d S )Nz2Child exited without calling task_status.started())r   r   r	  r   r   r   r   r  __context__r   r   r2  r4  r  r   r   r   )r:  r  r  ery   r   r9  rk   rl   	task_done  s2    

z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.Ztask_statusrf   r    z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine objectr8  r(  )r   r   r  r   r+  r   r   r   r   rf   	TypeErrorrg   r   r   r   add_done_callbackr   r   r   r   )
ry   r   r   r8  r9  r>  kwargsr$  r   prefixrk   r=  rl   _spawn  s:    $
 



 
zTaskGroup._spawnr@  zUnpack[PosArgsT])r   r   r8  r|   c                G  s   |  ||| d S r}   )rE  )ry   r   r8  r   rk   rk   rl   
start_soon  s    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r#   c                  s|   t  }| ||||}z|I d H W S  tk
rv   |  tdd$ tt |I d H  W 5 Q R X W 5 Q R X  Y nX d S NTr   )r   r   rE  r   r   rK   r   )ry   r   r8  r   r   r   rk   rk   rl   r     s    zTaskGroup.start)N)	re   rf   rg   rz   r3  r5  rE  rF  r   rk   rk   rk   rl   r1    s   , Q	r1  c                      s^   e Zd ZdZdddd fddZdd	d
ddddZddddZddddddZ  ZS )WorkerThreadrV   r   zset[WorkerThread]zdeque[WorkerThread])r   workersidle_workersc                   sF   t  jdd || _|| _|| _|j| _td| _t	
 | _d| _d S )NzAnyIO worker threadr@  r0   F)superrz   r   rJ  rK  ru   r   r   queueAsyncIOBackendcurrent_time
idle_sincestopping)ry   r   rJ  rK  	__class__rk   rl   rz   /  s    
zWorkerThread.__init__r,  r#   r  r   )r   resultr  r|   c                 C  sb   t  | _| js| j|  | s^|d k	rTt|trHt	d}||_
|}|| n
|| d S )Nzcoroutine raised StopIteration)rN  rO  rP  rQ  rK  r4  r   r  StopIterationr   	__cause__r   r   )ry   r   rT  r  new_excrk   rk   rl   _report_result@  s    

zWorkerThread._report_resultr{   c           
      C  s   t t| j | j }|d kr.W 5 Q R  d S |\}}}}}| sd }d }|t_z@z|j|f| }W n& t	k
r }	 z|	}W 5 d }	~	X Y nX W 5 t`X | j
 s| j| j||| | j  qW 5 Q R X d S r}   )r6   rN  r   rM  r   r   r7   current_cancel_scoper   r   Z	is_closedr   rX  r>  )
ry   itemr   r   r   r   r   rT  r   r  rk   rk   rl   r   R  s,    

   zWorkerThread.runNzasyncio.Task | Nonefr|   c                 C  sH   d| _ | jd  | j|  z| j|  W n tk
rB   Y nX d S r  )rQ  rM  
put_nowaitrJ  discardrK  r   r   )ry   r\  rk   rk   rl   stopm  s    zWorkerThread.stop)N)	re   rf   rg   MAX_IDLE_TIMErz   rX  r   r_  __classcell__rk   rk   rR  rl   rI  ,  s
   rI  _threadpool_idle_workerszRunVar[deque[WorkerThread]]_threadpool_workerszRunVar[set[WorkerThread]]c                      sH   e Zd Zd dddZdd fddZddd	d
dddddZ  ZS )BlockingPortalr{   c                 C  s
   t | S r}   r   r   rk   rk   rl   r   ~  s    zBlockingPortal.__new__r   c                   s   t    t | _d S r}   )rL  rz   r   ru   r   rR  rk   rl   rz     s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r6  dict[str, Any]r   zFuture[T_Retval])r   r   rC  r8  r   r|   c                 C  s,   t t| jj|d| j||||f| j d S )Nr@  )rN  run_sync_from_threadr   Z_task_grouprF  Z
_call_funcru   )ry   r   r   rC  r8  r   rk   rk   rl   _spawn_task_from_thread  s
    z&BlockingPortal._spawn_task_from_thread)re   rf   rg   r   rz   rh  ra  rk   rk   rR  rl   rd  }  s   rd  F)eqc                   @  s6   e Zd ZU ded< ddddddZd	d
ddZdS )StreamReaderWrapperzasyncio.StreamReader_stream   r-  bytes	max_bytesr|   c                   s"   | j |I d H }|r|S td S r}   )rk  readr;   )ry   ro  datark   rk   rl   receive  s    zStreamReaderWrapper.receiver   r{   c                   s    | j t  t I d H  d S r}   )rk  r   r:   rN  
checkpointr   rk   rk   rl   aclose  s    zStreamReaderWrapper.acloseN)rl  )re   rf   rg   __annotations__rr  rt  rk   rk   rk   rl   rj    s   
rj  c                   @  s4   e Zd ZU ded< dddddZddd	d
ZdS )StreamWriterWrapperzasyncio.StreamWriterrk  rm  r   rZ  r|   c                   s    | j | | j  I d H  d S r}   )rk  writeZdrainry   rZ  rk   rk   rl   send  s    zStreamWriterWrapper.sendr{   c                   s   | j   t I d H  d S r}   )rk  r   rN  rs  r   rk   rk   rl   rt    s    
zStreamWriterWrapper.acloseN)re   rf   rg   ru  rz  rt  rk   rk   rk   rl   rv    s   
rv  c                   @  s   e Zd ZU ded< ded< ded< ded< dd	d
dZdd	ddZdd	ddZdd	ddZdddddZe	dd	ddZ
e	dd	ddZe	dd	ddZe	dd	dd Ze	dd	d!d"Zd#S )$Processzasyncio.subprocess.Process_processzStreamWriterWrapper | None_stdinzStreamReaderWrapper | None_stdout_stderrr   r{   c                   s   t ddH | jr"| j I d H  | jr8| j I d H  | jrN| j I d H  W 5 Q R X z|  I d H  W nB tk
r   |   t dd |  I d H  W 5 Q R X  Y nX d S rG  )rK   r}  rt  r~  r  r   r   killr   rk   rk   rl   rt    s    zProcess.acloser-  c                   s   | j  I d H S r}   )r|  r   r   rk   rk   rl   r     s    zProcess.waitc                 C  s   | j   d S r}   )r|  	terminater   rk   rk   rl   r    s    zProcess.terminatec                 C  s   | j   d S r}   )r|  r  r   rk   rk   rl   r    s    zProcess.kill)r   r|   c                 C  s   | j | d S r}   )r|  send_signal)ry   r   rk   rk   rl   r    s    zProcess.send_signalc                 C  s   | j jS r}   )r|  pidr   rk   rk   rl   r    s    zProcess.pidr&  c                 C  s   | j jS r}   )r|  
returncoder   rk   rk   rl   r    s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S r}   )r}  r   rk   rk   rl   stdin  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S r}   )r~  r   rk   rk   rl   stdout  s    zProcess.stdoutc                 C  s   | j S r}   )r  r   rk   rk   rl   stderr  s    zProcess.stderrN)re   rf   rg   ru  rt  r   r  r  r  r"  r  r  r  r  r  rk   rk   rk   rl   r{    s&   
r{  zset[Process]r   )rJ  r:  r|   c                 C  s   d}t jdk r4zt  }W n tk
r2   Y nX | D ]R}|jdkrHq8|jjj	
  |jjj	
  |jjj	
  |  |r8||j q8dS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)rU      )r  r  r   Zget_event_loop_policyZget_child_watcherNotImplementedErrorr  r}  rk  
_transportr   r~  r  r  Zremove_child_handlerr  )rJ  r:  Zchild_watcherprocessrk   rk   rl   '_forcibly_shutdown_process_pool_on_exit  s    

r  set[abc.Process]rJ  r|   c                   sd   zt tjI dH  W nJ tjk
r^   | D ]}|jdkr*|  q*| D ]}| I dH  qFY nX dS )z
    Shuts down worker processes belonging to this event loop.

    NOTE: this only works when the event loop was started using asyncio.run() or
    anyio.run().

    N)r	   r  r  r   r   r  r  rt  )rJ  r  rk   rk   rl   _shutdown_process_pool_on_exit	  s    	

r  c                   @  s   e Zd ZU ded< ded< ded< dZded< d	Zd
ed< dddddZdddddZdddddZddddZ	ddddZ
ddddZdS ) StreamProtocolzdeque[bytes]
read_queueasyncio.Event
read_eventwrite_eventNException | Noner   Fr   	is_at_eofasyncio.BaseTransportr   	transportr|   c                 C  s<   t  | _t | _t | _| j  ttj|	d d S Nr   )
r   r  r   rC   r  r  r   r.   	TransportZset_write_buffer_limitsry   r  rk   rk   rl   connection_made)  s
    


zStreamProtocol.connection_mader  r|   c                 C  s,   |rt  | _|| j_| j  | j  d S r}   )r8   r   rV  r  r   r  ry   r  rk   rk   rl   connection_lost0  s
    
zStreamProtocol.connection_lostrm  )rq  r|   c                 C  s   | j t| | j  d S r}   )r  r4  rm  r  r   )ry   rq  rk   rk   rl   data_received8  s    zStreamProtocol.data_receivedrp   r{   c                 C  s   d| _ | j  dS r  )r  r  r   r   rk   rk   rl   eof_received=  s    
zStreamProtocol.eof_receivedc                 C  s   t  | _d S r}   )r   rC   r  r   rk   rk   rl   pause_writingB  s    zStreamProtocol.pause_writingc                 C  s   | j   d S r}   r  r   r   rk   rk   rl   resume_writingE  s    zStreamProtocol.resume_writing)re   rf   rg   ru  r   r  r  r  r  r  r  r  rk   rk   rk   rl   r  "  s   
r  c                   @  s   e Zd ZU ded< ded< ded< dZded< d	d
dddZdd
dddZddd
dddZdd
dddZd
dddZ	d
dddZ
dS )DatagramProtocolz#deque[tuple[bytes, IPSockAddrType]]r  r  r  r  Nr  r   r  r   r  c                 C  s.   t dd| _t | _t | _| j  d S )Nd   )maxlen)r   r  r   rC   r  r  r   r  rk   rk   rl   r  O  s    

z DatagramProtocol.connection_mader  c                 C  s   | j   | j  d S r}   )r  r   r  r  rk   rk   rl   r  U  s    
z DatagramProtocol.connection_lostrm  rM   )rq  addrr|   c                 C  s&   t |}| j||f | j  d S r}   )r>   r  r4  r  r   )ry   rq  r  rk   rk   rl   datagram_receivedY  s    z"DatagramProtocol.datagram_receivedr   c                 C  s
   || _ d S r}   )r   r  rk   rk   rl   error_received^  s    zDatagramProtocol.error_receivedr{   c                 C  s   | j   d S r}   )r  clearr   rk   rk   rl   r  a  s    zDatagramProtocol.pause_writingc                 C  s   | j   d S r}   r  r   rk   rk   rl   r  d  s    zDatagramProtocol.resume_writing)re   rf   rg   ru  r   r  r  r  r  r  r  rk   rk   rk   rl   r  I  s   
r  c                   @  sl   e Zd ZdddddZedddd	ZddddddZdddddZddddZddddZ	dS )SocketStreamzasyncio.Transportr  r  protocolc                 C  s*   || _ || _td| _td| _d| _d S Nreading from
writing toFr  	_protocolrF   _receive_guard_send_guard_closedry   r  r  rk   rk   rl   rz   i  s
    

zSocketStream.__init__socket.socketr{   c                 C  s   | j dS Nsocketr  Zget_extra_infor   rk   rk   rl   _raw_socketp  s    zSocketStream._raw_socketrl  r-  rm  rn  c              	     s   | j  | jj sN| j sN| jjsN| j  | jj I d H  | j	  nt
 I d H  z| jj }W n< tk
r   | jrtd n| jjr| jjd ntd Y nX t||kr|d | ||d   }}| jj| | jjs| jj  W 5 Q R X |S r}   )r  r  r  is_setr  
is_closingr  Zresume_readingr   pause_readingrN  rs  r  popleft
IndexErrorr  r:   r   r;   len
appendleftr  )ry   ro  chunkleftoverrk   rk   rl   rr  t  s2    

zSocketStream.receiver   rw  c                   s   | j  t I d H  | jr"tn| jjd k	r6| jjz| j| W n6 t	k
r| } z| j
 rjt|n W 5 d }~X Y nX | jj I d H  W 5 Q R X d S r}   )r  rN  rs  r  r:   r  r   r  rx  r   r  r8   r  r   )ry   rZ  r  rk   rk   rl   rz    s    
zSocketStream.sendc                   s(   z| j   W n tk
r"   Y nX d S r}   )r  	write_eofOSErrorr   rk   rk   rl   send_eof  s    zSocketStream.send_eofc                   sZ   | j  sVd| _z| j   W n tk
r2   Y nX | j   tdI d H  | j   d S NTr   )r  r  r  r  r  r   r	   abortr   rk   rk   rl   rt    s    

zSocketStream.acloseN)rl  )
re   rf   rg   rz   r"  r  rr  rz  r  rt  rk   rk   rk   rl   r  h  s   #r  c                   @  sx   e Zd ZU dZded< dZded< dZdddd	Zedd
ddZ	dddddZ
dddddZdd
ddZdS )_RawSocketMixinNr7  _receive_future_send_futureFr  
raw_socketc                 C  s   || _ td| _td| _d S )Nr  r  )_RawSocketMixin__raw_socketrF   r  r  ry   r  rk   rk   rl   rz     s    
z_RawSocketMixin.__init__r{   c                 C  s   | j S r}   )r  r   rk   rk   rl   r    s    z_RawSocketMixin._raw_socketasyncio.AbstractEventLoopr,  r   c                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r   r[  c                   s   `  j d S r}   )r  remove_readerr  r\  r   ry   rk   rl   callback  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)r   r   r  
add_readerr  r   rB  ry   r   r  r\  rk   r  rl   _wait_until_readable  s
    
z$_RawSocketMixin._wait_until_readablec                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r   r[  c                   s   `  j d S r}   )r  remove_writerr  r  r  rk   rl   r    s    z6_RawSocketMixin._wait_until_writable.<locals>.callback)r   r   r  
add_writerr  r   rB  r  rk   r  rl   _wait_until_writable  s
    
z$_RawSocketMixin._wait_until_writabler   c                   sL   | j sHd| _ | j dkr$| j  | jr6| jd  | jrH| jd  d S )NT)_closingr  filenor   r  r   r  r   rk   rk   rl   rt    s    
z_RawSocketMixin.aclose)re   rf   rg   r  ru  r  r  rz   r"  r  r  r  rt  rk   rk   rk   rl   r    s   


r  c                   @  s`   e Zd ZddddZddddd	d
ZdddddZddddddZddddddZdS )UNIXSocketStreamr   r{   c              	     s$   | j  | jtj W 5 Q R X d S r}   )r  r  r   r  SHUT_WRr   rk   rk   rl   r    s    zUNIXSocketStream.send_eofrl  r-  rm  rn  c                   s   t  }t I d H  | j z| j|}W nX tk
rP   | |I d H  Y q tk
r } z| j	rnt
d nt|W 5 d }~X Y qX |st|W  5 Q R  S qW 5 Q R X d S r}   )r   rN  rs  r  r  recvBlockingIOErrorr  r  r  r:   r8   r;   )ry   ro  r   rq  r  rk   rk   rl   rr    s    zUNIXSocketStream.receiverw  c                   s   t  }t I d H  | j t|}|rz| j|}W nX tk
r\   | |I d H  Y q$ t	k
r } z| j
rztd nt|W 5 d }~X Y q$X ||d  }q$W 5 Q R X d S r}   )r   rN  rs  r  
memoryviewr  rz  r  r  r  r  r:   r8   )ry   rZ  r   viewZ
bytes_sentr  rk   rk   rl   rz    s    zUNIXSocketStream.sendztuple[bytes, list[int]])msglenmaxfdsr|   c                   sf  t |tr|dk rtdt |tr,|dk r4tdt }td}t I d H  | j z&| j	|t
||j \}}}}W nX tk
r   | |I d H  Y qZ tk
r }	 z| jrtd nt|	W 5 d }	~	X Y qZX |s|stqqZW 5 Q R X |D ]`\}
}}|
t
jks|t
jkr4td|d|
 d| ||d t|t||j    q|t|fS )	Nr   z%msglen must be a non-negative integerr   z!maxfds must be a positive integeriz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r  r-  r   r   arrayrN  rs  r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r:   r8   r;   
SOL_SOCKET
SCM_RIGHTSr   Z	frombytesr  list)ry   r  r  r   fdsr   Zancdataflagsr  r  Z
cmsg_levelZ	cmsg_typeZ	cmsg_datark   rk   rl   receive_fds  s:    
 &zUNIXSocketStream.receive_fdszCollection[int | IOBase])r   r  r|   c                   s
  |st d|st dt }g }|D ]2}t|tr@|| q&t|tr&||  q&td|}t	 I d H  | j
 z$| j|gtjtj|fg W qW q| tk
r   | |I d H  Y q| tk
r } z| jrtd nt|W 5 d }~X Y q|X q|W 5 Q R X d S )Nzmessage must not be emptyzfds must not be emptyr  )r   r   r  r-  r4  r   r  r  rN  rs  r  r  sendmsgr  r  r  r  r  r  r  r:   r8   )ry   r   r  r   ZfilenosfdZfdarrayr  rk   rk   rl   send_fds=  s4    

 zUNIXSocketStream.send_fdsN)rl  )re   rf   rg   r  rr  rz  r  r  rk   rk   rk   rl   r    s
   'r  c                   @  sZ   e Zd ZU dZded< dZddddZedd	d
dZdd	ddZ	dd	ddZ
dS )TCPSocketListenerNr'  _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr.   r   ZBaseEventLoopr   ru   rF   _accept_guardr  rk   rk   rl   rz   c  s    zTCPSocketListener.__init__r{   c                 C  s   | j S r}   )r  r   rk   rk   rl   r  h  s    zTCPSocketListener._raw_socketabc.SocketStreamc                   s   | j r
t| j t I d H  t | _zrz| j| j	I d H \}}W nP t
jk
r   z| j| j	 W n ttfk
r   Y nX | j rtd  Y nX W 5 d | _X W 5 Q R X W 5 Q R X |tjtjd | jt|I d H \}}t||S Nr   )r  r:   r  rN  rs  rK   r  ru   Zsock_acceptr  r   r   r  r   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYZconnect_accepted_socketr  r  )ry   client_sockZ_addrr  r  rk   rk   rl   acceptl  s,    
 zTCPSocketListener.acceptr   c              	     sh   | j r
d S d| _ | jrZz| j| j W n ttfk
r@   Y nX | j  tdI d H  | j	  d S r  )
r  r  ru   r  r  r   r  r   r	   r   r   rk   rk   rl   rt    s    
zTCPSocketListener.aclose)re   rf   rg   r  ru  r  rz   r"  r  r  rt  rk   rk   rk   rl   r  _  s   
r  c                   @  sH   e Zd ZddddZddddZd	dd
dZeddddZdS )UNIXSocketListenerr  r  c                 C  s"   || _ t | _td| _d| _d S )Nr  F)_UNIXSocketListener__raw_socketr   ru   rF   r  r  r  rk   rk   rl   rz     s    
zUNIXSocketListener.__init__r  r{   c                   s   t  I d H   j z. j \}}|d t|W W  5 Q R  S  tk
r   t	 } j
 j|jd  | fdd |I d H  Y q tk
r } z jrtd nt|W 5 d }~X Y qX qW 5 Q R X d S )NFc                   s    j  jS r}   )ru   r  r  _r   rk   rl   r     r   z+UNIXSocketListener.accept.<locals>.<lambda>)rN  rs  r  r  r  setblockingr  r  r   r   ru   r  r   rB  r  r  r:   r8   )ry   r  r  r\  r  rk   r   rl   r    s"    

zUNIXSocketListener.acceptr   c                   s   d| _ | j  d S r  )r  r  r   r   rk   rk   rl   rt    s    zUNIXSocketListener.aclosec                 C  s   | j S r}   )r  r   rk   rk   rl   r    s    zUNIXSocketListener._raw_socketN)re   rf   rg   rz   r  rt  r"  r  rk   rk   rk   rl   r    s
   r  c                   @  sZ   e Zd ZdddddZedddd	Zd
dddZddddZdd
dddZdS )	UDPSocketasyncio.DatagramTransportr  r  c                 C  s*   || _ || _td| _td| _d| _d S r  r  r  rk   rk   rl   rz     s
    

zUDPSocket.__init__r  r{   c                 C  s   | j dS r  r  r   rk   rk   rl   r    s    zUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r  r  r  r  r   r   rk   rk   rl   rt    s    
zUDPSocket.acloseztuple[bytes, IPSockAddrType]c              
     s   | j  t I d H  | jjsF| j sF| jj  | jj	 I d H  z| jj
 W W  5 Q R  S  tk
r   | jr~td ntd Y nX W 5 Q R X d S r}   r  rN  rs  r  r  r  r  r  r  r   r  r  r  r:   r8   r   rk   rk   rl   rr    s    zUDPSocket.receiverO   rw  c              	     s^   | j N t I d H  | jj I d H  | jr4tn| j	 rDt
n| jj|  W 5 Q R X d S r}   r  rN  rs  r  r  r   r  r:   r  r  r8   sendtory  rk   rk   rl   rz    s    
zUDPSocket.sendN	re   rf   rg   rz   r"  r  rt  rr  rz  rk   rk   rk   rl   r    s   	r  c                   @  sZ   e Zd ZdddddZedddd	Zd
dddZddddZdd
dddZdS )ConnectedUDPSocketr	  r  r  c                 C  s*   || _ || _td| _td| _d| _d S r  r  r  rk   rk   rl   rz     s
    

zConnectedUDPSocket.__init__r  r{   c                 C  s   | j dS r  r  r   rk   rk   rl   r    s    zConnectedUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r  r
  r   rk   rk   rl   rt    s    
zConnectedUDPSocket.acloserm  c              
     s   | j  t I d H  | jjsF| j sF| jj  | jj	 I d H  z| jj
 }W n( tk
r~   | jrttd ntd Y nX |d W  5 Q R  S Q R X d S r  r  )ry   packetrk   rk   rl   rr    s    zConnectedUDPSocket.receiverw  c              	     s^   | j N t I d H  | jj I d H  | jr4tn| j	 rDt
n| j| W 5 Q R X d S r}   r  ry  rk   rk   rl   rz    s    
zConnectedUDPSocket.sendNr  rk   rk   rk   rl   r    s   	r  c                   @  s*   e Zd ZddddZdddddZd	S )
UNIXDatagramSocketrP   r{   c                   s   t  }t I d H  | j z| jd}W nX tk
rP   | |I d H  Y q tk
r } z| j	rnt
d nt|W 5 d }~X Y qX |W  5 Q R  S qW 5 Q R X d S Nrl  )r   rN  rs  r  r  recvfromr  r  r  r  r:   r8   ry   r   rq  r  rk   rk   rl   rr  #  s    zUNIXDatagramSocket.receiver   rw  c                   s   t  }t I d H  | j z| jj|  W nX tk
rP   | |I d H  Y q tk
r } z| j	rnt
d nt|W 5 d }~X Y qX W 5 Q R  d S qW 5 Q R X d S r}   )r   rN  rs  r  r  r  r  r  r  r  r:   r8   ry   rZ  r   r  rk   rk   rl   rz  4  s    zUNIXDatagramSocket.sendNre   rf   rg   rr  rz  rk   rk   rk   rl   r  "  s   r  c                   @  s*   e Zd ZddddZdddddZd	S )
ConnectedUNIXDatagramSocketrm  r{   c                   s   t  }t I d H  | j z| jd}W nX tk
rP   | |I d H  Y q tk
r } z| j	rnt
d nt|W 5 d }~X Y qX |W  5 Q R  S qW 5 Q R X d S r  )r   rN  rs  r  r  r  r  r  r  r  r:   r8   r  rk   rk   rl   rr  G  s    z#ConnectedUNIXDatagramSocket.receiver   rw  c                   s   t  }t I d H  | j z| j| W nX tk
rP   | |I d H  Y q tk
r } z| j	rnt
d nt|W 5 d }~X Y qX W 5 Q R  d S qW 5 Q R X d S r}   )r   rN  rs  r  r  rz  r  r  r  r  r:   r8   r  rk   rk   rl   rz  X  s    z ConnectedUNIXDatagramSocket.sendNr  rk   rk   rk   rl   r  F  s   r  read_eventsz RunVar[dict[Any, asyncio.Event]]_read_eventswrite_events_write_eventsc                   @  s`   e Zd Zd dddZddddZddddZd	dd
dZddddZddddZdS )rC   r{   c                 C  s
   t | S r}   r   re  rk   rk   rl   r   t  s    zEvent.__new__r   c                 C  s   t  | _d S r}   )r   rC   _eventr   rk   rk   rl   rz   w  s    zEvent.__init__c                 C  s   | j   d S r}   )r  r   r   rk   rk   rl   r   z  s    z	Event.setr   c                 C  s
   | j  S r}   )r  r  r   rk   rk   rl   r  }  s    zEvent.is_setc                   s,   |   rt I d H  n| j I d H  d S r}   )r  rN  rs  r  r   r   rk   rk   rl   r     s    z
Event.waitr2   c                 C  s   t t| jjS r}   )r2   r  r  _waitersr   rk   rk   rl   
statistics  s    zEvent.statisticsN)	re   rf   rg   r   rz   r   r  r   r  rk   rk   rk   rl   rC   s  s   rC   c                   @  s~   e Zd Zdddd dddZddddddd	Zdd
ddZdd
ddZdd
ddZdd
ddZdd
ddZ	dS )rE   Ffast_acquirer   r   r|   c                C  s
   t | S r}   r   r   r   rk   rk   rl   r     s    zLock.__new__r   c                C  s   || _ d | _t | _d S r}   )_fast_acquire_owner_taskr   r  )ry   r   rk   rk   rl   rz     s    zLock.__init__r{   c                   s   t tjt }| jd krn| jsnt I d H  || _| jsjzt	 I d H  W n t
k
rh   |    Y nX d S | j|krtdt }||f}| j| z|I d H  W n4 t
k
r   | j| | j|kr|    Y nX | j| d S Nz)Attempted to acquire an already held Lock)r.   r   r   r   r$  r  rN  checkpoint_if_cancelledr#  cancel_shielded_checkpointr   releaser   r   r4  r   )ry   r   futrZ  rk   rk   rl   acquire  s0    

zLock.acquirec                 C  sB   t tjt }| jd kr(| js(|| _d S | j|kr:tdtd S r%  )r.   r   r   r   r$  r  r   r<   )ry   r   rk   rk   rl   acquire_nowait  s    
zLock.acquire_nowaitc                 C  s
   | j d k	S r}   )r$  r   rk   rk   rl   locked  s    zLock.lockedc                 C  sL   | j t krtd| jD ]&\}}| s|| _ |d   d S qd | _ d S )Nz)The current task is not holding this lock)r$  r   r   r  r   r   )ry   r   r)  rk   rk   rl   r(    s    
zLock.releaser3   c                 C  s*   | j rt| j nd }t|  |t| jS r}   )r$  AsyncIOTaskInfor3   r,  r  r  )ry   Z	task_infork   rk   rl   r    s    zLock.statisticsN)
re   rf   rg   r   rz   r*  r+  r,  r(  r  rk   rk   rk   rl   rE     s   "rE   c                      s   e Zd Zddddddd ddd	Zddddddd
 fddZddddZddddZddddZeddddZ	eddddZ
ddddZ  ZS )rI   NF	max_valuer   r-  r&  r   initial_valuer/  r   r|   c                C  s
   t | S r}   r   r   r1  r/  r   rk   rk   rl   r     s    zSemaphore.__new__)r1  r/  r   c                  s.   t  j||d || _|| _|| _t | _d S )N)r/  )rL  rz   _value
_max_valuer#  r   r  )ry   r1  r/  r   rR  rk   rl   rz     s
    zSemaphore.__init__r   r{   c                   s   | j dkrh| jsht I d H  |  j d8  _ | jsdzt I d H  W n tk
rb   |    Y nX d S t	 }| j
| z|I d H  W nD tk
r   z| j| W n tk
r   |   Y nX  Y nX d S Nr   r   )r3  r  rN  r&  r#  r'  r   r(  r   r   r4  r   r   ry   r)  rk   rk   rl   r*    s(    zSemaphore.acquirec                 C  s    | j dkrt|  j d8  _ d S r5  )r3  r<   r   rk   rk   rl   r+    s    
zSemaphore.acquire_nowaitc                 C  s`   | j d k	r| j| j krtd| jD ](}| s$|d  | j|  d S q$|  jd7  _d S )Nz!semaphore released too many timesr   )r4  r3  r   r  r   r   r   r6  rk   rk   rl   r(    s    

zSemaphore.releasec                 C  s   | j S r}   )r3  r   rk   rk   rl   r    s    zSemaphore.valuec                 C  s   | j S r}   )r4  r   rk   rk   rl   r/    s    zSemaphore.max_valuerG   c                 C  s   t t| jS r}   )rG   r  r  r   rk   rk   rl   r  !  s    zSemaphore.statistics)re   rf   rg   r   rz   r*  r+  r(  r"  r  r/  r  ra  rk   rk   rR  rl   rI     s   rI   c                   @  s  e Zd ZU dZded< dd dddZdddd	Zd
dddZdddd
dddZe	ddddZ
e
jdd
dddZ
e	ddddZe	ddddZd
dddZdd
d d!d"Zd
dd#d$Zdd
d d%d&Zd
dd'd(Zdd
d d)d*Zd+dd,d-Zd.S )/rA   r   r   _total_tokenstotal_tokensr|   c                 C  s
   t | S r}   r   r   r9  rk   rk   rl   r   (  s    zCapacityLimiter.__new__)r9  c                 C  s   t  | _t | _|| _d S r}   )r   
_borrowersr   _wait_queuer9  )ry   r9  rk   rk   rl   rz   +  s    zCapacityLimiter.__init__r   r{   c                   s   |   I d H  d S r}   )r*  r   rk   rk   rl   r3  0  s    zCapacityLimiter.__aenter__r  r  r  r   c                   s   |    d S r}   )r(  r   rk   rk   rl   r5  3  s    zCapacityLimiter.__aexit__c                 C  s   | j S r}   )r7  r   rk   rk   rl   r9  ;  s    zCapacityLimiter.total_tokensr  c                 C  st   t |tst|std|dk r,tdt|| j d}|| _| jrp|rp| jj	ddd }|
  |d8 }qBd S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1r   Flast)r  r-  r  isinfrA  r   maxr7  r<  popitemr   )ry   r  waiters_to_notifyeventrk   rk   rl   r9  ?  s    
r-  c                 C  s
   t | jS r}   )r  r;  r   rk   rk   rl   borrowed_tokensO  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S r}   )r7  r  r;  r   rk   rk   rl   available_tokensS  s    z CapacityLimiter.available_tokensc                 C  s   |  t  d S r}   )acquire_on_behalf_of_nowaitr   r   rk   rk   rl   r+  W  s    zCapacityLimiter.acquire_nowaitr   )borrowerr|   c                 C  s<   || j krtd| js(t| j | jkr,t| j | d S )NzEthis borrower is already holding one of this CapacityLimiter's tokens)r;  r   r<  r  r7  r<   r   )ry   rG  rk   rk   rl   rF  Z  s    
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S r}   )acquire_on_behalf_ofr   r   rk   rk   rl   r*  f  s    zCapacityLimiter.acquirec                   s   t  I d H  z| | W nj tk
r   t }|| j|< z| I d H  W n$ tk
rt   | j	|d   Y nX | j
| Y n4X zt  I d H  W n tk
r   |    Y nX d S r}   )rN  r&  rF  r<   r   rC   r<  r   r   popr;  r   r'  r(  ry   rG  rC  rk   rk   rl   rH  i  s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S r}   )release_on_behalf_ofr   r   rk   rk   rl   r(  ~  s    zCapacityLimiter.releasec                 C  sd   z| j | W n tk
r.   tdd Y nX | jr`t| j | jk r`| jjddd }|  d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensFr=  r   )	r;  r   r   r   r<  r  r7  rA  r   rJ  rk   rk   rl   rK    s    z$CapacityLimiter.release_on_behalf_ofr1   c                 C  s   t | j| jt| jt| jS r}   )r1   rD  r9  tupler;  r  r<  r   rk   rk   rl   r    s    zCapacityLimiter.statisticsN)re   rf   rg   r7  ru  r   rz   r3  r5  r"  r9  r#  rD  rE  r+  rF  r*  rH  r(  rK  r  rk   rk   rk   rl   rA   %  s(   
rA   _default_thread_limiterzRunVar[CapacityLimiter]c                   @  sh   e Zd ZddddZddddd	Zd d
ddZdddddddZd d
ddZdd
ddZdS )_SignalReceiverztuple[Signals, ...])signalsc                 C  s,   || _ t | _t | _t | _t | _	d S r}   )
_signalsr   ru   r   _signal_queuer   r   r.  r   _handled_signals)ry   rO  rk   rk   rl   rz     s
    
z_SignalReceiver.__init__r   r   )r   r|   c                 C  s&   | j | | j s"| jd  d S r}   )rQ  r4  r.  r   r   )ry   r   rk   rk   rl   _deliver  s    
z_SignalReceiver._deliverr{   c                 C  s2   t | jD ]"}| j|| j| | j| q
| S r}   )r   rP  ru   Zadd_signal_handlerrS  rR  r   )ry   sigrk   rk   rl   r     s    z_SignalReceiver.__enter__r  r  r  rp   r   c                 C  s   | j D ]}| j| qd S r}   )rR  ru   Zremove_signal_handler)ry   r   r   r   rT  rk   rk   rl   r     s    
z_SignalReceiver.__exit__c                 C  s   | S r}   rk   r   rk   rk   rl   	__aiter__  s    z_SignalReceiver.__aiter__c                   s4   t  I d H  | js*t | _| jI d H  | j S r}   )rN  rs  rQ  r   r   r.  r  r   rk   rk   rl   	__anext__  s
    
z_SignalReceiver.__anext__N)	re   rf   rg   rz   rS  r   r   rU  rV  rk   rk   rk   rl   rN    s   
rN  c                      s0   e Zd Zdd fddZddddZ  ZS )	r-  r   r   c                   sL   t |}|d krd }n|j}t t||| |  t	|| _
d S r}   )r   r   r$  rL  rz   r  get_namer   weakrefrefr:  )ry   r   r  r$  rR  rk   rl   rz     s    
zAsyncIOTaskInfo.__init__r   r{   c                 C  sv   |    }sdS tjdkr(| rDdS nt|jtjrD|j rDdS t	
| }rr|j }rr|jpp|j op| S dS )NFrX   T)r:  r  r  r  r  r  r   r   r   r   r   r   r  r   r  )ry   r   r  r   rk   rk   rl   has_pending_cancellation  s     

z(AsyncIOTaskInfo.has_pending_cancellation)re   rf   rg   rz   rZ  ra  rk   rk   rR  rl   r-    s   
r-  c                   @  s   e Zd ZU ded< dddddddd	d
ddZd dddZdddd	dddZddddZddd	dddZd	dddZ	d d	d!d"d#Z
d$d%d&d'd(d)d*Zd+dd,d-d.d/Zd0dd'd-d1d2Zd3dd	d4d5d6ZdS )7
TestRunnerzBMemoryObjectSendStream[tuple[Awaitable[Any], asyncio.Future[Any]]]_send_streamNF)rn   
use_uvloopro   rp   r   rq   r   )rn   r]  ro   r|   c                C  s8   |r|d krdd l }|j}t||d| _g | _d | _d S )Nr   rm   )uvloopr   rZ   _runnerr2  _runner_task)ry   rn   r]  ro   r^  rk   rk   rl   rz     s    zTestRunner.__init__r{   c                 C  s   | j   |  | j | S r}   )r_  r   r   Zset_exception_handler_exception_handlerr   rk   rk   rl   r     s    
zTestRunner.__enter__r  r  r  r   c                 C  s   | j ||| d S r}   )r_  r   r   rk   rk   rl   r     s    zTestRunner.__exit__r   c                 C  s
   | j  S r}   )r_  r   r   rk   rk   rl   r     s    zTestRunner.get_loopr  rf  )r   r   r|   c                 C  s0   t |dtr"| j|d  n
|| d S )Nr   )r  r   r   r2  r4  Zdefault_exception_handler)ry   r   r   rk   rk   rl   ra    s    zTestRunner._exception_handlerc                 C  s<   | j r8| j g  }| _ t|dkr*|d n|r8td|d S )Nr   r   z6Multiple exceptions occurred in asynchronous callbacks)r2  r  ra   )ry   r_   rk   rk   rl   _raise_async_exceptions  s    
 z"TestRunner._raise_async_exceptionszOMemoryObjectReceiveStream[tuple[Awaitable[T_Retval], asyncio.Future[T_Retval]]])receive_streamr|   c                   s   ddl m} | | j |2 z3 d H W \}}z|I d H }W nz tk
rt } z| sb|j|j   W 5 d }~X Y q tk
r } z&| s|| t	|t
|fs W 5 d }~X Y qX | s|| q6 W 5 Q R X W 5 Q R X d S )Nr   )OutcomeException)Z_pytest.outcomesrd  r\  r   r   r   r   r   r   r  r   r   )ry   rc  rd  r   r   retvalr  rk   rk   rl   _run_tests_and_fixtures&  s     
z"TestRunner._run_tests_and_fixturesz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsr   )r   r   rC  r|   c                   sl   | j s<tttt tjf  d\| _}|  	| 
|| _ |||}|   }| j||f |I d H S r  )r`  r?   r,   r%   r#   r   r   r\  r   r   rf  r   Zsend_nowait)ry   r   r   rC  rc  r   r   rk   rk   rl   _call_in_runner_taskA  s    

zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])fixture_funcrC  r|   c                 c  s   |f |}|   | |jd }|   |V  z|   | |jd  W n tk
rh   |   Y nX |   |  tdd S )Nz$Async generator fixture did not stop)r   r   rg  asendrb  StopAsyncIterationrt  r   )ry   rh  rC  ZasyncgenZfixturevaluerk   rk   rl   run_asyncgen_fixtureT  s    
zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s$   |   | j|f|}|   |S r}   )r   r   rg  rb  )ry   rh  rC  re  rk   rk   rl   run_fixturek  s
    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrC  r|   c              
   C  sX   z|   | j|f| W n. tk
rJ } z| j| W 5 d }~X Y nX |   d S r}   )r   r   rg  r   r2  r4  rb  )ry   rm  rC  r  rk   rk   rl   run_testv  s    zTestRunner.run_test)re   rf   rg   ru  rz   r   r   r   ra  rb  rf  rg  rk  rl  rn  rk   rk   rk   rl   r[    s   
r[  c                
   @  sD  e Zd ZeddddddddZedd	d
dZedd	ddZedd	ddZedd	ddZedd	ddZ	edd	ddZ
edddddZeejdddddd d!d"Zedd	d#d$Zed%d	d&d'Zed(d	d)d*Zedd+d,d-d.Zed/dd0d1d2dd3d4d5d6Zedd7d8d9d:Zedd;ddd<dd=d>d?Zedd	d@dAZedddddBdCdDZed;ddddBdEdFZedGd	dHdIZedJdKdKdKdLdMdNdOdPZedQddRdSdTZeddUd1dVdWdXdYdZZed[d\d]d^d_Zed`dadbdcddZed`dadbdedfZedgdVdVddhdidjdkZ ed`dldmdndodpZ!edqdqdqdqdrdsdtdudvd1d1dwdxdydzZ"edd{d1d|d}d~dZ#ed`ddbddZ$ed`ddbddZ%edd	ddZ&edddddZ'edd	ddZ(edd	ddZ)edd	ddZ*edddddZ+d/S )rN  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r6  rf  r   )r   r   rC  optionsr|   c           
   
     s   t dd fdd}|dd }|dd }|d krV|ddrVd	d l}|j}t||d
}	|	| W  5 Q R  S Q R X d S )Nr   r{   c                    sJ   t tjt } | t td d t| < z  I d H W S t| = X d S r}   )r.   r   r   r   set_namer   r   r   r   r   r   rk   rl   wrapper  s    z#AsyncIOBackend.run.<locals>.wrapperrn   ro   r]  Fr   rm   )r   r   r^  r   rZ   r   )
r   r   r   rC  ro  rr  rn   ro   r^  runnerrk   rq  rl   r     s    
zAsyncIOBackend.runr   r{   c                 C  s   t  S r}   )r   re  rk   rk   rl   current_token  s    zAsyncIOBackend.current_tokenr   c                 C  s
   t   S r}   )r   r  re  rk   rk   rl   rO    s    zAsyncIOBackend.current_timer   c                 C  s   t S r}   )r   re  rk   rk   rl   cancelled_exception_class  s    z(AsyncIOBackend.cancelled_exception_classr   c                   s   t dI d H  d S r  r	   re  rk   rk   rl   rs    s    zAsyncIOBackend.checkpointc                   sh   t  }|d krd S zt| j}W n tk
r6   Y d S X |rd|jrRtdI d H  q8|jr\qdq8|j}q8d S r  )r   r   r   r   r  r	   r   r   )r   r   r   rk   rk   rl   r&    s    z&AsyncIOBackend.checkpoint_if_cancelledc              	     s(   t dd tdI d H  W 5 Q R X d S )NTrH  r   )rK   r	   re  rk   rk   rl   r'    s    z)AsyncIOBackend.cancel_shielded_checkpoint)delayr|   c                   s   t |I d H  d S r}   rv  )r   rw  rk   rk   rl   r	     s    zAsyncIOBackend.sleepFr   r   rK   r   c                C  s   t ||dS )Nr   rJ   r   rk   rk   rl   create_cancel_scope  s    z"AsyncIOBackend.create_cancel_scopec                 C  sj   zt t  j}W n tk
r*   tj Y S X tj}|rft||j}|jrTtj }qfq2|j	r^qfq2|j
}q2|S r}   )r   r   r   r   r  r  minr   r   r   r   )r   r   r   rk   rk   rl   current_effective_deadline  s     
z)AsyncIOBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S r}   )r1  re  rk   rk   rl   create_task_group  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t  S r}   rB   re  rk   rk   rl   create_event  s    zAsyncIOBackend.create_eventzabc.Lockr!  c                C  s
   t |dS )Nr  rD   r"  rk   rk   rl   create_lock  s    zAsyncIOBackend.create_lockNr.  r-  r&  zabc.Semaphorer0  c                C  s   t |||dS )Nr.  rH   r2  rk   rk   rl   create_semaphore  s    zAsyncIOBackend.create_semaphorezabc.CapacityLimiterr8  c                 C  s   t |S r}   r@   r:  rk   rk   rl   create_capacity_limiter  s    z&AsyncIOBackend.create_capacity_limiterz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)r   r   abandon_on_cancellimiterr|   c                   s  |   I d H  zt }t }W n4 tk
rV   t }t }t| t| Y nX |pb|  4 I d H  t| d }t	
 }t }	|st|	||}
|
  ||
 |	|
j nN| }
|  }|r||d j tjk rq| }|j|j |  qt }|tjjd  |s4|jd kr:|}n|j}|
j|||||f |I d H W  5 Q R  W  5 Q I d H R  S Q R X W 5 Q I d H R X d S )NrH  r   )rs  rb  r   rc  LookupErrorr   r   current_default_thread_limiterrK   r   r   r   rI  r   r   rB  r_  rI  rO  rP  r`  r  r   Zremove_done_callbackr   r   sniffiocurrent_async_library_cvarr   rM  r]  )r   r   r   r  r  rK  rJ  r  r   r   ZworkernowZexpired_workerr   Zworker_scoperk   rk   rl   run_sync_in_worker_thread	  sL    


z(AsyncIOBackend.run_sync_in_worker_threadc                 C  s>   t j}|d k	r:|jr(tdt|d|jr2d S |j}qd S )Nr  r   )r7   rY  r  r   r  r   r   )r   r  rk   rk   rl   check_cancelled>	  s    zAsyncIOBackend.check_cancelled)r   r   tokenr|   c           	        sX   ddd fdd}t t|}t }|tjjd |tj}|t	j
||}| S )NrK   r   )r  r|   c              
     s   d}t tjt }td | t|< | j| zNz  I d H W W :S  t	k
rv } zt
j	t|d W 5 d }~X Y nX W 5 | j| X d S r  )r.   r   r   r   r   r   r   r   r^  r   
concurrentZfuturesr   )r  Z__tracebackhide__r   r  rq  rk   rl   task_wrapperQ	  s    (z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperr   )r.   r   r   r   r  r  r   r7   rY  r   Zrun_coroutine_threadsaferT  )	r   r   r   r  r  r   r   rr  r\  rk   rq  rl   run_async_from_threadJ	  s    

  z$AsyncIOBackend.run_async_from_threadc                   s@   t dd fdd}t tt|}||  S )Nr   r{   c               
     s\   zt jd    W n8 tk
rV }  z|  t| tsF W 5 d } ~ X Y nX d S )Nr   )r  r  r   r   r   r   r  r   )r  r   r\  r   rk   rl   rr  m	  s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r.   r   r   rT  )r   r   r   r  rr  r   rk   r  rl   rg  f	  s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S r}   )rd  re  rk   rk   rl   create_blocking_portal|	  s    z%AsyncIOBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner#   r{  )commandr  r  r  rC  r|   c          
        s   |   I d H  t|tr"t|}t|ttfrRtj|f|||d|I d H }ntj	||||d|I d H }|j
rt|j
nd }|jrt|jnd }|jrt|jnd }	t||||	S )N)r  r  r  )rs  r  r   osfspathr   rm  r   Zcreate_subprocess_shellZcreate_subprocess_execr  rv  r  rj  r  r{  )
r   r  r  r  r  rC  r  Zstdin_streamZstdout_streamZstderr_streamrk   rk   rl   open_process	  s2    


zAsyncIOBackend.open_processr  r  c                 C  s&   t t|dd t tt| d S )Nz AnyIO process pool shutdown taskr@  )r   r  r   rB  r   r  )r   rJ  rk   rk   rl   #setup_process_pool_exit_at_shutdown	  s    z2AsyncIOBackend.setup_process_pool_exit_at_shutdownr   zIPSockAddrType | Noner  )hostportlocal_addressr|   c                   s@   t ttjtf t jt|||dI d H \}}|  t||S )N)
local_addr)	r.   r,   r   r  r  r   create_connectionr  r  )r   r  r  r  r  r  rk   rk   rl   connect_tcp	  s       
zAsyncIOBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)pathr|   c                   s   |   I d H  t  ttjd z| W nf tk
r   t } 	|j
d  | fdd |I d H  Y q* tk
r      Y q*X tS q*d S )NFc                   s
     S r}   r  r  r   r  rk   rl   r   	  r   z-AsyncIOBackend.connect_unix.<locals>.<lambda>)rs  r   r  AF_UNIXr  connectr  r   r   r  r   rB  r   r   r  )r   r  r\  rk   r  rl   connect_unix	  s    
zAsyncIOBackend.connect_unixr  rN   )sockr|   c                 C  s   t |S r}   )r  r   r  rk   rk   rl   create_tcp_listener	  s    z"AsyncIOBackend.create_tcp_listenerc                 C  s   t |S r}   )r  r  rk   rk   rl   create_unix_listener	  s    z#AsyncIOBackend.create_unix_listenerr   zUDPSocket | ConnectedUDPSocket)familyr  remote_address
reuse_portr|   c                   sP   t  jt||||dI d H \}}|jr4|  |j|sBt||S t||S d S )N)r  Zremote_addrr  r  )r   Zcreate_datagram_endpointr  r   r   r  r  )r   r  r  r  r  r  r  rk   rk   rl   create_udp_socket	  s    
z AsyncIOBackend.create_udp_socketzstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocket)r  remote_pathr|   c                   s   |   I d H  t  |rz| W nf tk
rp   t } |jd  | fdd |I d H  Y q t	k
r   
   Y qX tS qntS d S )Nc                   s
     S r}   r  r  r  rk   rl   r   	  r   z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)rs  r   r  r  r   r   r  r   rB  r   r   r  r  )r   r  r  r\  rk   r  rl   create_unix_datagram_socket	  s    z*AsyncIOBackend.create_unix_datagram_socketr   r  typeprotor  zbytes | str | Nonezstr | int | Nonezint | AddressFamilyzint | SocketKindz]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])r  r  r  r  r  r  r|   c                  s   t  j||||||dI d H S )Nr  )r   getaddrinfo)r   r  r  r  r  r  r  rk   rk   rl   r  
  s         zAsyncIOBackend.getaddrinforM   ztuple[str, str])sockaddrr  r|   c                   s   t  ||I d H S r}   )r   getnameinfo)r   r  r  rk   rk   rl   r  
  s    zAsyncIOBackend.getnameinfoc              
     s   |   I d H  zt }W n" tk
r<   i }t| Y nX ||rRtdd t }t  }||< |	||j z| I d H  W 5 |
|d d k	r|| d}nd}X |std S )Nr  TF)rs  r  r   r  r   r9   r   r   rC   r  rI  r  r   r:   )r   r  r  r   rC  readablerk   rk   rl   wait_socket_readable$
  s&    


z#AsyncIOBackend.wait_socket_readablec              
     s   |   I d H  zt }W n" tk
r<   i }t| Y nX ||rRtdd t }t  }||< |	|
 |j z| I d H  W 5 ||d d k	r|| d}nd}X |std S )Nr  TF)rs  r  r   r  r   r9   r   r   rC   r  r  rI  r  r   r:   )r   r  r  r   rC  writablerk   rk   rl   wait_socket_writable?
  s&    


z#AsyncIOBackend.wait_socket_writablerA   c                 C  s:   z
t  W S  tk
r4   td}t | | Y S X d S )N(   )rM  r   r  rA   r   )r   r  rk   rk   rl   r  Z
  s    

z-AsyncIOBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])rO  r|   c                 G  s   t |S r}   )rN  )r   rO  rk   rk   rl   open_signal_receiverc
  s    z#AsyncIOBackend.open_signal_receiverr4   c                 C  s
   t t S r}   )r-  r   re  rk   rk   rl   get_current_taski
  s    zAsyncIOBackend.get_current_taskzSequence[TaskInfo]c                 C  s   dd t  D S )Nc                 S  s   g | ]}|  st|qS rk   )r   r-  )r   r   rk   rk   rl   r   o
  s      z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   re  rk   rk   rl   get_running_tasksm
  s    z AsyncIOBackend.get_running_tasksc                   s\   |   I d H  t }t D ]6}||kr(q|j}|d ks>| rtdI d H   qqd S qd S )Ng?)rs  r   r   r  r   r	   )r   Z	this_taskr   r  rk   rk   rl   wait_all_tasks_blockedq
  s    
z%AsyncIOBackend.wait_all_tasks_blockedr[  )ro  r|   c                 C  s
   t f |S r}   )r[  )r   ro  rk   rk   rl   create_test_runner
  s    z!AsyncIOBackend.create_test_runner)FN)N)r   ),re   rf   rg   classmethodr   rt  rO  ru  rs  r&  r'  r	   r  r  rx  rz  r{  r|  r}  r~  r  r  r  r  rg  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rk   rk   rk   rl   rN    s    	  :#	   rN  )
__future__r   r  r   concurrent.futuresr  r  r  r  r  r   rX  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   collectionsr   r   collections.abcr   r   r   
contextlibr   r   r   r   Zdataclassesr   	functoolsr   r   inspectr   r   r   r   ior   r   rM  r   r   r   r   r   r    typesr!   typingr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r  r?  r1   r2   r3   r4   r5   Z_core._eventloopr6   r7   Z_core._exceptionsr8   r9   r:   r;   r<   r=   Z_core._socketsr>   Z_core._streamsr?   Z_core._synchronizationrA   ZBaseCapacityLimiterrC   Z	BaseEventrE   ZBaseLockrF   rG   rI   ZBaseSemaphoreZ_core._tasksrK   ZBaseCancelScoperL   rM   rN   rO   rP   Zabc._eventlooprQ   ZlowlevelrR   Zstreams.memoryrS   rT   r  rW   Ztyping_extensionsrZ   r[   r\   enumr]   r^   r_   r`   Zexceptiongroupra   Enumrb   r   r   r   r   r   r   r   ru  r   r   r   r   r   r   Z
TaskStatusr+  r1  r   Z_Retval_Queue_TyperI  rb  rc  rd  ZByteReceiveStreamrj  ZByteSendStreamrv  r{  r  r  Protocolr  r  r  r  r  r  r  r  r  r  r  r  r  rM  rN  r-  r[  rN  Zbackend_classrk   rk   rk   rl   <module>   s    $	<  
 y "K9'U.t<%02$$JQr/"     