U
     Wh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createdinitializedclosedN)__name__
__module____qualname__CREATEDINITIALIZEDCLOSED rl   rl   Z/var/www/html/arya_register/venvv2/lib/python3.8/site-packages/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   ri   _state_debug_loop_factory_loop_context_interrupt_count_set_event_loop)selfro   rp   rl   rl   rm   __init__}   s    zRunner.__init__returnc                 C  s   |    | S N)
_lazy_initrz   rl   rl   rm   	__enter__   s    zRunner.__enter__type[BaseException]BaseExceptionr!   Noneexc_typeexc_valexc_tbr}   c                 C  s   |    d S r~   )closerz   r   r   r   rl   rl   rm   __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)rs   rb   rj   ry   r^   set_event_loopr   rv   rk   _cancel_all_tasksrun_until_completeshutdown_asyncgenshasattrr   _shutdown_default_executorrz   looprl   rl   rm   r      s    

zRunner.closer   c                 C  s   |    | jS )zReturn embedded event loop.)r   rv   r   rl   rl   rm   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^   _get_running_loopRuntimeErrorr   rw   runrv   r   	threadingcurrent_threadmain_threadsignal	getsignalSIGINTdefault_int_handlerr   
_on_sigintrx   r   r_   r   getattrKeyboardInterrupt)rz   r   r   taskZsigint_handlerr   rl   rl   rm   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)rs   rb   rk   r   rj   ru   r^   new_event_looprv   ry   r   rt   	set_debugcontextvarsr   rw   r   rl   rl   rm   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~   rl   rl   rl   rl   rm   <lambda>       z#Runner._on_sigint.<locals>.<lambda>)rx   donecancelrv   call_soon_threadsafer   )rz   signumframer   rl   rl   rm   r      s    zRunner._on_sigint)rf   rg   rh   r{   r   r   r   r   r   r   r   rl   rl   rl   rm   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 )Nreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptionr   )r`   r   r   r   gather	cancelledr   call_exception_handler)r   	to_cancelr   rl   rl   rm   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   rl   rm   _do_shutdown  s
    z0_shutdown_default_executor.<locals>._do_shutdownTN)targetargs)Z_executor_shutdown_calledr   create_futurer   r    startjoin)r   r   r   threadrl   r   rm   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 rl   rl   ).0cbr   rl   rl   rm   
<listcomp>7  s     z"find_root_task.<locals>.<listcomp>rg   zuvloop.loop)r   getr   r   
_callbacksr
   r   setr.   asyncioTaskr   _task_statescancel_scope_parent_scope
_host_task)	root_taskr   	callbacksr   stater   rl   rl   rm   find_root_task/  s,    



r   r&   str)funcr}   c                 C  s0   t | dd }t | dd }ddd ||fD S )Nrg   rh   .c                 S  s   g | ]}|r|qS rl   rl   )r   xrl   rl   rm   r   Q  s      z%get_callable_name.<locals>.<listcomp>)r   r   )r   modulequalnamerl   rl   rm   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   rl   rl   rm   _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   rl   rl   rm   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)rz   r   r   rl   rl   rm   r{   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)rz   Z	host_task
task_staterl   rl   rm   r   ~  s.    



zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonerq   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   )rz   r   r   r   Zhost_task_stateexcrl   rl   rm   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   )rz   r  rl   rl   rm   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   call_atr	  r   r   rl   rl   rm   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  _must_cancelr   r   _fut_waiterr  r   r   r   r  r
  r  r   r  r   r   cancel_calledr  r   	call_soonr  )rz   r   Zshould_retrycurrentr   waiterscoperl   rl   rm   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   )rz   r'  rl   rl   rm   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   )rz   r   rl   rl   rm   _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   rl   rl   rm   r   0  s    

zCancelScope.cancelc                 C  s   | j S r~   )r   r   rl   rl   rm   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	  rz   r+  rl   rl   rm   r   >  s    


c                 C  s   | j S r~   )r   r   rl   rl   rm   r#  H  s    zCancelScope.cancel_calledc                 C  s   | j S r~   )r   r   rl   rl   rm   cancelled_caughtL  s    zCancelScope.cancelled_caughtc                 C  s   | j S r~   )r   r   rl   rl   rm   r   P  s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|   d S r~   )r   r  r,  rl   rl   rm   r   T  s    
N)rf   rg   rh   r  r  r   r{   r   r   r  r	  r  r  r(  r   propertyr   setterr#  r-  r   rl   rl   rl   rm   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r0  r   c                 C  s   || _ || _d S r~   r4  )rz   r0  r   rl   rl   rm   r{   i  s    zTaskState.__init__N)rf   rg   rh   __doc__	__slots__r{   rl   rl   rl   rm   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   r0  c                 C  s   || _ || _d S r~   )_future
_parent_id)rz   r   r0  rl   rl   rm   r{   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   InvalidStateErrorr   r   r.   r   r   r;  r   r0  )rz   r+  r   rl   rl   rm   started{  s    
z_AsyncioTaskStatus.started)N)rf   rg   rh   r{   r=  rl   rl   rl   rm   r7  v  s   r7  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   rl   rl   rm   r{     s    zTaskGroup.__init__c                   s   | j   d| _| S r)  )r   r   r   r   rl   rl   rm   
__aenter__  s    
zTaskGroup.__aenter__r  r  r  rq   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   r?  appendr  r   r   r   ra   )rz   r   r   r   Zignore_exceptionZ!cancelled_exc_while_waiting_tasksr  rl   rl   rm   	__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   r?  rA  r(  r   r   r   )rG  r  r  erz   r   rF  rl   rm   	task_done  s2    

z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.task_statusrg   r    z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine objectrE  r4  )r   r   r  r   r7  r   r   r   r   rg   	TypeErrorrh   r   r   r   add_done_callbackr  r   r  r  )
rz   r   r   rE  rF  rK  kwargsr0  r   prefixrl   rJ  rm   _spawn  s:    $
 



 
zTaskGroup._spawnrN  zUnpack[PosArgsT])r   r   rE  r}   c                G  s   |  ||| d S r~   )rS  )rz   r   rE  r   rl   rl   rm   
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   rS  r   r   rK   r   )rz   r   rE  r   r   r   rl   rl   rm   r     s    zTaskGroup.start)N)	rf   rg   rh   r{   r@  rB  rS  rT  r   rl   rl   rl   rm   r>    s   , Q	r>  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 threadrN  r0   F)superr{   r   rX  rY  rv   r   r   queueAsyncIOBackendcurrent_time
idle_sincestopping)rz   r   rX  rY  	__class__rl   rm   r{   /  s    
zWorkerThread.__init__r8  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)r\  r]  r^  r_  rY  rA  r   r  StopIterationr   	__cause__r   r   )rz   r   rb  r  new_excrl   rl   rm   _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   r\  r   r[  r   r   r7   current_cancel_scoper   r   	is_closedr   rf  rK  )
rz   itemr   r   r   r   r   rb  r   r  rl   rl   rm   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)  )r_  r[  
put_nowaitrX  discardrY  r  r   )rz   rk  rl   rl   rm   stopm  s    zWorkerThread.stop)N)	rf   rg   rh   MAX_IDLE_TIMEr{   rf  r   rn  __classcell__rl   rl   r`  rm   rW  ,  s
   rW  _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   rl   rl   rm   r   ~  s    zBlockingPortal.__new__r   c                   s   t    t | _d S r~   )rZ  r{   r   rv   r   r`  rl   rm   r{     s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]rC  dict[str, Any]r   zFuture[T_Retval])r   r   rQ  rE  r   r}   c                 C  s,   t t| jj|d| j||||f| j d S )NrN  )r\  run_sync_from_threadr   _task_grouprT  
_call_funcrv   )rz   r   r   rQ  rE  r   rl   rl   rm   _spawn_task_from_thread  s
    z&BlockingPortal._spawn_task_from_thread)rf   rg   rh   r   r{   ry  rp  rl   rl   r`  rm   rs  }  s   rs  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   r9  bytes	max_bytesr}   c                   s"   | j |I d H }|r|S td S r~   )r|  readr;   )rz   r  datarl   rl   rm   receive  s    zStreamReaderWrapper.receiver   r|   c                   s    | j t  t I d H  d S r~   )r|  r   r:   r\  
checkpointr   rl   rl   rm   aclose  s    zStreamReaderWrapper.acloseN)r}  )rf   rg   rh   __annotations__r  r  rl   rl   rl   rm   r{    s   
r{  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.StreamWriterr|  r~  r   ri  r}   c                   s    | j | | j  I d H  d S r~   )r|  writedrainrz   ri  rl   rl   rm   send  s    zStreamWriterWrapper.sendr|   c                   s   | j   t I d H  d S r~   )r|  r   r\  r  r   rl   rl   rm   r    s    
zStreamWriterWrapper.acloseN)rf   rg   rh   r  r  r  rl   rl   rl   rm   r    s   
r  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 rU  )rK   r  r  r  r  r   r   killr   rl   rl   rm   r    s    zProcess.acloser9  c                   s   | j  I d H S r~   )r  r   r   rl   rl   rm   r     s    zProcess.waitc                 C  s   | j   d S r~   )r  	terminater   rl   rl   rm   r    s    zProcess.terminatec                 C  s   | j   d S r~   )r  r  r   rl   rl   rm   r    s    zProcess.kill)r   r}   c                 C  s   | j | d S r~   )r  send_signal)rz   r   rl   rl   rm   r    s    zProcess.send_signalc                 C  s   | j jS r~   )r  pidr   rl   rl   rm   r    s    zProcess.pidr2  c                 C  s   | j jS r~   )r  
returncoder   rl   rl   rm   r    s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S r~   )r  r   rl   rl   rm   stdin  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S r~   )r  r   rl   rl   rm   stdout  s    zProcess.stdoutc                 C  s   | j S r~   )r  r   rl   rl   rm   stderr  s    zProcess.stderrN)rf   rg   rh   r  r  r   r  r  r  r.  r  r  r  r  r  rl   rl   rl   rm   r    s&   
r  zset[Process]r   )rX  rG  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   get_event_loop_policyget_child_watcherNotImplementedErrorr  r  r|  
_transportr   r  r  r  remove_child_handlerr  )rX  rG  Zchild_watcherprocessrl   rl   rm   '_forcibly_shutdown_process_pool_on_exit  s    

r  set[abc.Process]rX  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  r  )rX  r  rl   rl   rm   _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.   	Transportset_write_buffer_limitsrz   r  rl   rl   rm   connection_made)  s
    


zStreamProtocol.connection_mader  r}   c                 C  s,   |rt  | _|| j_| j  | j  d S r~   )r8   r   rd  r  r   r  rz   r  rl   rl   rm   connection_lost0  s
    
zStreamProtocol.connection_lostr~  )r  r}   c                 C  s   | j t| | j  d S r~   )r  rA  r~  r  r   )rz   r  rl   rl   rm   data_received8  s    zStreamProtocol.data_receivedrq   r|   c                 C  s   d| _ | j  dS r)  )r  r  r   r   rl   rl   rm   eof_received=  s    
zStreamProtocol.eof_receivedc                 C  s   t  | _d S r~   )r   rC   r  r   rl   rl   rm   pause_writingB  s    zStreamProtocol.pause_writingc                 C  s   | j   d S r~   r  r   r   rl   rl   rm   resume_writingE  s    zStreamProtocol.resume_writing)rf   rg   rh   r  r   r  r  r  r  r  r  r  rl   rl   rl   rm   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  rl   rl   rm   r  O  s    

z DatagramProtocol.connection_mader  c                 C  s   | j   | j  d S r~   )r  r   r  r  rl   rl   rm   r  U  s    
z DatagramProtocol.connection_lostr~  rM   )r  addrr}   c                 C  s&   t |}| j||f | j  d S r~   )r>   r  rA  r  r   )rz   r  r  rl   rl   rm   datagram_receivedY  s    z"DatagramProtocol.datagram_receivedr   c                 C  s
   || _ d S r~   )r   r  rl   rl   rm   error_received^  s    zDatagramProtocol.error_receivedr|   c                 C  s   | j   d S r~   )r  clearr   rl   rl   rm   r  a  s    zDatagramProtocol.pause_writingc                 C  s   | j   d S r~   r  r   rl   rl   rm   r  d  s    zDatagramProtocol.resume_writing)rf   rg   rh   r  r   r  r  r  r  r  r  rl   rl   rl   rm   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rz   r  r  rl   rl   rm   r{   i  s
    

zSocketStream.__init__socket.socketr|   c                 C  s   | j dS Nsocketr  get_extra_infor   rl   rl   rm   _raw_socketp  s    zSocketStream._raw_socketr}  r9  r~  r  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  resume_readingr   pause_readingr\  r  r  popleft
IndexErrorr  r:   r   r;   len
appendleftr  )rz   r  chunkleftoverrl   rl   rm   r  t  s2    

zSocketStream.receiver   r  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  r\  r  r  r:   r  r   r  r  r   r  r8   r  r   )rz   ri  r  rl   rl   rm   r    s    
zSocketStream.sendc                   s(   z| j   W n tk
r"   Y nX d S r~   )r  	write_eofOSErrorr   rl   rl   rm   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   rl   rl   rm   r    s    

zSocketStream.acloseN)r}  )
rf   rg   rh   r{   r.  r  r  r  r  r  rl   rl   rl   rm   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 )_RawSocketMixinNrD  _receive_future_send_futureFr  
raw_socketc                 C  s   || _ td| _td| _d S )Nr  r  )_RawSocketMixin__raw_socketrF   r  r  rz   r  rl   rl   rm   r{     s    
z_RawSocketMixin.__init__r|   c                 C  s   | j S r~   )r  r   rl   rl   rm   r    s    z_RawSocketMixin._raw_socketasyncio.AbstractEventLoopr8  r   c                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r   rj  c                   s   `  j d S r~   )r  remove_readerr  rk  r   rz   rl   rm   callback  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)r   r   r  
add_readerr  r   rP  rz   r   r  rk  rl   r  rm   _wait_until_readable  s
    
z$_RawSocketMixin._wait_until_readablec                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r   rj  c                   s   `  j d S r~   )r  remove_writerr  r  r  rl   rm   r    s    z6_RawSocketMixin._wait_until_writable.<locals>.callback)r   r   r  
add_writerr  r   rP  r  rl   r  rm   _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   rl   rl   rm   r    s    
z_RawSocketMixin.aclose)rf   rg   rh   r  r  r  r  r{   r.  r  r  r  r  rl   rl   rl   rm   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   rl   rl   rm   r    s    zUNIXSocketStream.send_eofr}  r9  r~  r  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   r\  r  r  r  recvBlockingIOErrorr  r  r  r:   r8   r;   )rz   r  r   r  r  rl   rl   rm   r    s    zUNIXSocketStream.receiver  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   r\  r  r  
memoryviewr  r  r  r  r  r  r:   r8   )rz   ri  r   viewZ
bytes_sentr  rl   rl   rm   r    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  r9  r   r   arrayr\  r  r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r:   r8   r;   
SOL_SOCKET
SCM_RIGHTSr   Z	frombytesr  list)rz   r  r   r   fdsr   Zancdataflagsr  r  Z
cmsg_levelZ	cmsg_typeZ	cmsg_datarl   rl   rm   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  r9  rA  r   r  r  r\  r  r  r  sendmsgr  r  r  r  r  r  r  r:   r8   )rz   r   r	  r   ZfilenosfdZfdarrayr  rl   rl   rm   send_fds=  s4    

 zUNIXSocketStream.send_fdsN)r}  )rf   rg   rh   r  r  r  r  r  rl   rl   rl   rm   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 )TCPSocketListenerNr3  _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr.   r   BaseEventLoopr   rv   rF   _accept_guardr  rl   rl   rm   r{   c  s    zTCPSocketListener.__init__r|   c                 C  s   | j S r~   )r  r   rl   rl   rm   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  r\  r  rK   r  rv   sock_acceptr  r   r   r  r   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr  r  )rz   client_sockZ_addrr  r  rl   rl   rm   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  rv   r  r  r   r  r   r	   r   r   rl   rl   rm   r    s    
zTCPSocketListener.aclose)rf   rg   rh   r  r  r  r{   r.  r  r  r  rl   rl   rl   rm   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   rv   rF   r  r  r  rl   rl   rm   r{     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~   )rv   r  r  _r   rl   rm   r     r   z+UNIXSocketListener.accept.<locals>.<lambda>)r\  r  r  r  r  setblockingr  r  r   r   rv   r  r   rP  r  r  r:   r8   )rz   r  r!  rk  r  rl   r   rm   r    s"    

zUNIXSocketListener.acceptr   c                   s   d| _ | j  d S r)  )r  r  r   r   rl   rl   rm   r    s    zUNIXSocketListener.aclosec                 C  s   | j S r~   )r  r   rl   rl   rm   r    s    zUNIXSocketListener._raw_socketN)rf   rg   rh   r{   r  r  r.  r  rl   rl   rl   rm   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  rl   rl   rm   r{     s
    

zUDPSocket.__init__r  r|   c                 C  s   | j dS r  r  r   rl   rl   rm   r    s    zUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r)  r  r  r  r   r   rl   rl   rm   r    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  r\  r  r  r  r  r  r  r  r   r  r  r  r:   r8   r   rl   rl   rm   r    s    zUDPSocket.receiverO   r  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  r\  r  r  r  r   r  r:   r  r  r8   sendtor  rl   rl   rm   r    s    
zUDPSocket.sendN	rf   rg   rh   r{   r.  r  r  r  r  rl   rl   rl   rm   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  rl   rl   rm   r{     s
    

zConnectedUDPSocket.__init__r  r|   c                 C  s   | j dS r  r  r   rl   rl   rm   r    s    zConnectedUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r)  r%  r   rl   rl   rm   r    s    
zConnectedUDPSocket.acloser~  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&  )rz   packetrl   rl   rm   r    s    zConnectedUDPSocket.receiver  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'  r  rl   rl   rm   r    s    
zConnectedUDPSocket.sendNr)  rl   rl   rl   rm   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 Nr}  )r   r\  r  r  r  recvfromr  r  r  r  r:   r8   rz   r   r  r  rl   rl   rm   r  #  s    zUNIXDatagramSocket.receiver   r  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   r\  r  r  r  r(  r  r  r  r  r:   r8   rz   ri  r   r  rl   rl   rm   r  4  s    zUNIXDatagramSocket.sendNrf   rg   rh   r  r  rl   rl   rl   rm   r,  "  s   r,  c                   @  s*   e Zd ZddddZdddddZd	S )
ConnectedUNIXDatagramSocketr~  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   r\  r  r  r  r  r  r  r  r  r:   r8   r/  rl   rl   rm   r  G  s    z#ConnectedUNIXDatagramSocket.receiver   r  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   r\  r  r  r  r  r  r  r  r  r:   r8   r0  rl   rl   rm   r  X  s    z ConnectedUNIXDatagramSocket.sendNr1  rl   rl   rl   rm   r2  F  s   r2  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   rt  rl   rl   rm   r   t  s    zEvent.__new__r   c                 C  s   t  | _d S r~   )r   rC   _eventr   rl   rl   rm   r{   w  s    zEvent.__init__c                 C  s   | j   d S r~   )r7  r   r   rl   rl   rm   r   z  s    z	Event.setr   c                 C  s
   | j  S r~   )r7  r  r   rl   rl   rm   r  }  s    zEvent.is_setc                   s,   |   rt I d H  n| j I d H  d S r~   )r  r\  r  r7  r   r   rl   rl   rm   r     s    z
Event.waitr2   c                 C  s   t t| jjS r~   )r2   r  r7  _waitersr   rl   rl   rm   
statistics  s    zEvent.statisticsN)	rf   rg   rh   r   r{   r   r  r   r9  rl   rl   rl   rm   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;  rl   rl   rm   r     s    zLock.__new__r   c                C  s   || _ d | _t | _d S r~   )_fast_acquire_owner_taskr   r8  )rz   r;  rl   rl   rm   r{     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?  r8  r\  checkpoint_if_cancelledr>  cancel_shielded_checkpointr   releaser   r   rA  r  )rz   r   futri  rl   rl   rm   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?  r8  r   r<   )rz   r   rl   rl   rm   acquire_nowait  s    
zLock.acquire_nowaitc                 C  s
   | j d k	S r~   )r?  r   rl   rl   rm   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   r8  r   r   )rz   r   rD  rl   rl   rm   rC    s    
zLock.releaser3   c                 C  s*   | j rt| j nd }t|  |t| jS r~   )r?  AsyncIOTaskInfor3   rG  r  r8  )rz   	task_inforl   rl   rm   r9    s    zLock.statisticsN)
rf   rg   rh   r   r{   rE  rF  rG  rC  r9  rl   rl   rl   rm   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;  r9  r2  r   initial_valuerK  r;  r}   c                C  s
   t | S r~   r   r   rM  rK  r;  rl   rl   rm   r     s    zSemaphore.__new__)rM  rK  r;  c                  s.   t  j||d || _|| _|| _t | _d S )N)rK  )rZ  r{   _value
_max_valuer>  r   r8  )rz   rM  rK  r;  r`  rl   rm   r{     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   )rO  r8  r\  rA  r>  rB  r   rC  r   r   rA  r  r   rz   rD  rl   rl   rm   rE    s(    zSemaphore.acquirec                 C  s    | j dkrt|  j d8  _ d S rQ  )rO  r<   r   rl   rl   rm   rF    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   )rP  rO  r   r8  r   r   r  rR  rl   rl   rm   rC    s    

zSemaphore.releasec                 C  s   | j S r~   )rO  r   rl   rl   rm   r+    s    zSemaphore.valuec                 C  s   | j S r~   )rP  r   rl   rl   rm   rK    s    zSemaphore.max_valuerG   c                 C  s   t t| jS r~   )rG   r  r8  r   rl   rl   rm   r9  !  s    zSemaphore.statistics)rf   rg   rh   r   r{   rE  rF  rC  r.  r+  rK  r9  rp  rl   rl   r`  rm   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   rU  rl   rl   rm   r   (  s    zCapacityLimiter.__new__)rU  c                 C  s   t  | _t | _|| _d S r~   )r   
_borrowersr   _wait_queuerU  )rz   rU  rl   rl   rm   r{   +  s    zCapacityLimiter.__init__r   r|   c                   s   |   I d H  d S r~   )rE  r   rl   rl   rm   r@  0  s    zCapacityLimiter.__aenter__r  r  r  r   c                   s   |    d S r~   )rC  r   rl   rl   rm   rB  3  s    zCapacityLimiter.__aexit__c                 C  s   | j S r~   )rS  r   rl   rl   rm   rU  ;  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  r9  r  isinfrO  r   maxrS  rX  popitemr   )rz   r+  waiters_to_notifyeventrl   rl   rm   rU  ?  s    
r9  c                 C  s
   t | jS r~   )r  rW  r   rl   rl   rm   borrowed_tokensO  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S r~   )rS  r  rW  r   rl   rl   rm   available_tokensS  s    z CapacityLimiter.available_tokensc                 C  s   |  t  d S r~   )acquire_on_behalf_of_nowaitr   r   rl   rl   rm   rF  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)rW  r   rX  r  rS  r<   r  )rz   rc  rl   rl   rm   rb  Z  s    
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S r~   )acquire_on_behalf_ofr   r   rl   rl   rm   rE  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~   )r\  rA  rb  r<   r   rC   rX  r   r   poprW  r  rB  rC  rz   rc  r_  rl   rl   rm   rd  i  s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S r~   )release_on_behalf_ofr   r   rl   rl   rm   rC  ~  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 tokensFrY  r   )	rW  r  r  r   rX  r  rS  r]  r   rf  rl   rl   rm   rg    s    z$CapacityLimiter.release_on_behalf_ofr1   c                 C  s   t | j| jt| jt| jS r~   )r1   r`  rU  tuplerW  r  rX  r   rl   rl   rm   r9    s    zCapacityLimiter.statisticsN)rf   rg   rh   rS  r  r   r{   r@  rB  r.  rU  r/  r`  ra  rF  rb  rE  rd  rC  rg  r9  rl   rl   rl   rm   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   rv   r   _signal_queuer   r   r:  r   _handled_signals)rz   rk  rl   rl   rm   r{     s
    
z_SignalReceiver.__init__r   r   )r   r}   c                 C  s&   | j | | j s"| jd  d S r~   )rm  rA  r:  r   r   )rz   r   rl   rl   rm   _deliver  s    
z_SignalReceiver._deliverr|   c                 C  s2   t | jD ]"}| j|| j| | j| q
| S r~   )r   rl  rv   add_signal_handlerro  rn  r  )rz   sigrl   rl   rm   r     s    z_SignalReceiver.__enter__r  r  r  rq   r   c                 C  s   | j D ]}| j| qd S r~   )rn  rv   remove_signal_handler)rz   r   r   r   rq  rl   rl   rm   r     s    
z_SignalReceiver.__exit__c                 C  s   | S r~   rl   r   rl   rl   rm   	__aiter__  s    z_SignalReceiver.__aiter__c                   s4   t  I d H  | js*t | _| jI d H  | j S r~   )r\  r  rm  r   r   r:  r  r   rl   rl   rm   	__anext__  s
    
z_SignalReceiver.__anext__N)	rf   rg   rh   r{   ro  r   r   rs  rt  rl   rl   rl   rm   rj    s   
rj  c                      s0   e Zd Zdd fddZddddZ  ZS )	rH  r   r   c                   sL   t |}|d krd }n|j}t t||| |  t	|| _
d S r~   )r   r   r0  rZ  r{   r  get_namer   weakrefrefrG  )rz   r   r  r0  r`  rl   rm   r{     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)rG  r
  r  r  r  r"  r   r   r   r   r   r   r#  r   r(  )rz   r   r  r   rl   rl   rm   has_pending_cancellation  s     

z(AsyncIOTaskInfo.has_pending_cancellation)rf   rg   rh   r{   rx  rp  rl   rl   r`  rm   rH    s   
rH  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)ro   
use_uvlooprp   rq   r   rr   r   )ro   r{  rp   r}   c                C  s8   |r|d krdd l }|j}t||d| _g | _d | _d S )Nr   rn   )uvloopr   rZ   _runnerr?  _runner_task)rz   ro   r{  rp   r|  rl   rl   rm   r{     s    zTestRunner.__init__r|   c                 C  s   | j   |  | j | S r~   )r}  r   r   set_exception_handler_exception_handlerr   rl   rl   rm   r     s    
zTestRunner.__enter__r  r  r  r   c                 C  s   | j ||| d S r~   )r}  r   r   rl   rl   rm   r     s    zTestRunner.__exit__r   c                 C  s
   | j  S r~   )r}  r   r   rl   rl   rm   r     s    zTestRunner.get_loopr  ru  )r   r   r}   c                 C  s0   t |dtr"| j|d  n
|| d S )Nr   )r  r   r   r?  rA  default_exception_handler)rz   r   r   rl   rl   rm   r    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)r?  r  ra   )rz   r_   rl   rl   rm   _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.outcomesr  rz  r   r   r   r   r   r   r  r   r   )rz   r  r  r   r   retvalr  rl   rl   rm   _run_tests_and_fixtures&  s     
z"TestRunner._run_tests_and_fixturesz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsr   )r   r   rQ  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   rz  r   r   r  r   send_nowait)rz   r   r   rQ  r  r   r   rl   rl   rm   _call_in_runner_taskA  s    

zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])fixture_funcrQ  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   r  asendr  StopAsyncIterationr  r   )rz   r  rQ  asyncgenZfixturevaluerl   rl   rm   run_asyncgen_fixtureT  s    
zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s$   |   | j|f|}|   |S r~   )r   r   r  r  )rz   r  rQ  r  rl   rl   rm   run_fixturek  s
    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrQ  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   r  r   r?  rA  r  )rz   r  rQ  r  rl   rl   rm   run_testv  s    zTestRunner.run_test)rf   rg   rh   r  r{   r   r   r   r  r  r  r  r  r  r  rl   rl   rl   rm   ry    s   
ry  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 )r\  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]rC  ru  r   )r   r   rQ  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   rl   rm   wrapper  s    z#AsyncIOBackend.run.<locals>.wrapperro   rp   r{  Fr   rn   )r   r   r|  r   rZ   r   )
r   r   r   rQ  r  r  ro   rp   r|  Zrunnerrl   r  rm   r     s    
zAsyncIOBackend.runr   r|   c                 C  s   t  S r~   )r   rt  rl   rl   rm   current_token  s    zAsyncIOBackend.current_tokenr   c                 C  s
   t   S r~   )r   r  rt  rl   rl   rm   r]    s    zAsyncIOBackend.current_timer   c                 C  s   t S r~   )r   rt  rl   rl   rm   cancelled_exception_class  s    z(AsyncIOBackend.cancelled_exception_classr   c                   s   t dI d H  d S r  r	   rt  rl   rl   rm   r    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   rl   rl   rm   rA    s    z&AsyncIOBackend.checkpoint_if_cancelledc              	     s(   t dd tdI d H  W 5 Q R X d S )NTrV  r   )rK   r	   rt  rl   rl   rm   rB    s    z)AsyncIOBackend.cancel_shielded_checkpoint)delayr}   c                   s   t |I d H  d S r~   r  )r   r  rl   rl   rm   r	     s    zAsyncIOBackend.sleepFr   r   rK   r   c                C  s   t ||dS )Nr   rJ   r   rl   rl   rm   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   rl   rl   rm   current_effective_deadline  s     
z)AsyncIOBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S r~   )r>  rt  rl   rl   rm   create_task_group  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t  S r~   rB   rt  rl   rl   rm   create_event  s    zAsyncIOBackend.create_eventzabc.Lockr<  c                C  s
   t |dS )Nr:  rD   r=  rl   rl   rm   create_lock  s    zAsyncIOBackend.create_lockNrJ  r9  r2  zabc.SemaphorerL  c                C  s   t |||dS )NrJ  rH   rN  rl   rl   rm   create_semaphore  s    zAsyncIOBackend.create_semaphorezabc.CapacityLimiterrT  c                 C  s   t |S r~   r@   rV  rl   rl   rm   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 )NrV  r   )r  rq  r   rr  LookupErrorr   r   current_default_thread_limiterrK   r   r   r   rW  r   r  rP  rn  re  r]  r^  ro  r  r   remove_done_callbackr   r   sniffiocurrent_async_library_cvarr   r[  rl  )r   r   r   r  r  rY  rX  r'  r   r   workernowZexpired_workerr   Zworker_scoperl   rl   rm   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   rg  r#  r   r  r   r   )r   r'  rl   rl   rm   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  rm  r   
concurrentfuturesr   )r'  Z__tracebackhide__r   r  r  rl   rm   task_wrapperQ	  s    (z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperr   )r.   r   r   r   r  r  r   r7   rg  r   run_coroutine_threadsaferb  )	r   r   r   r  r  r   r   r  rk  rl   r  rm   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   rk  r   rl   rm   r  m	  s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r.   r   r   rb  )r   r   r   r  r  r   rl   r  rm   rv  f	  s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S r~   )rs  rt  rl   rl   rm   create_blocking_portal|	  s    z%AsyncIOBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner#   r  )commandr  r  r  rQ  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  )r  r  r   osfspathr   r~  r   create_subprocess_shellcreate_subprocess_execr  r  r  r{  r  r  )
r   r  r  r  r  rQ  r  Zstdin_streamZstdout_streamZstderr_streamrl   rl   rm   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 taskrN  )r   r  r   rP  r   r  )r   rX  rl   rl   rm   #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  rl   rl   rm   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  rl   rm   r   	  r   z-AsyncIOBackend.connect_unix.<locals>.<lambda>)r  r   r  AF_UNIXr"  connectr  r   r   r  r   rP  r   r   r  )r   r  rk  rl   r  rm   connect_unix	  s    
zAsyncIOBackend.connect_unixr  rN   )sockr}   c                 C  s   t |S r~   )r  r   r  rl   rl   rm   create_tcp_listener	  s    z"AsyncIOBackend.create_tcp_listenerc                 C  s   t |S r~   )r  r  rl   rl   rm   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  remote_addrr  r  )r   create_datagram_endpointr  r   r   r#  r*  )r   r  r  r  r  r  r  rl   rl   rm   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  rl   rm   r   	  r   z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)r  r   r  r  r   r   r  r   rP  r   r   r2  r,  )r   r  r  rk  rl   r  rm   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
  rl   rl   rm   r  
  s         zAsyncIOBackend.getaddrinforM   ztuple[str, str])sockaddrr
  r}   c                   s   t  ||I d H S r~   )r   getnameinfo)r   r  r
  rl   rl   rm   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)r  r4  r   r  r   r9   r   r   rC   r  re  r  r   r:   )r   r  r3  r   r_  readablerl   rl   rm   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)r  r6  r   r  r   r9   r   r   rC   r  r  re  r  r   r:   )r   r  r5  r   r_  writablerl   rl   rm   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(   )ri  r   r  rA   r   )r   r  rl   rl   rm   r  Z
  s    

z-AsyncIOBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])rk  r}   c                 G  s   t |S r~   )rj  )r   rk  rl   rl   rm   open_signal_receiverc
  s    z#AsyncIOBackend.open_signal_receiverr4   c                 C  s
   t t S r~   )rH  r   rt  rl   rl   rm   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 rl   )r   rH  )r   r   rl   rl   rm   r   o
  s      z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   rt  rl   rl   rm   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?)r  r   r   r"  r   r	   )r   Z	this_taskr   r&  rl   rl   rm   wait_all_tasks_blockedq
  s    
z%AsyncIOBackend.wait_all_tasks_blockedry  )r  r}   c                 C  s
   t f |S r~   )ry  )r   r  rl   rl   rm   create_test_runner
  s    z!AsyncIOBackend.create_test_runner)FN)N)r   ),rf   rg   rh   classmethodr   r  r]  r  r  rA  rB  r	   r  r  r  r  r  r  r  r  r  r  r  r  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rl   rl   rl   rm   r\    s    	  :#	   r\  )
__future__r   r  r   concurrent.futuresr  r  r  r  r
  r   rv  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   collectionsr   r   collections.abcr   r   r   
contextlibr   r   r   r   dataclassesr   	functoolsr   r   inspectr   r   r   r   ior   r   r[  r   r   r   r   r   r    typesr!   typingr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r  rM  r1   r2   r3   r4   r5   Z_core._eventloopr6   r7   Z_core._exceptionsr8   r9   r:   r;   r<   r=   _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   lowlevelrR   Zstreams.memoryrS   rT   r  rW   typing_extensionsrZ   r[   r\   enumr]   r^   r_   r`   exceptiongroupra   Enumrb   r   r   r   r   r   r   r   r  r   r   r   r   r  r   
TaskStatusr7  r>  r   Z_Retval_Queue_TyperW  rq  rr  rs  ByteReceiveStreamr{  ByteSendStreamr  r  r  r  Protocolr  r  r  r  r  r  r  r#  r*  r,  r2  r4  r6  ri  rj  rH  ry  r\  backend_classrl   rl   rl   rm   <module>   s    $	<  
 y "K9'U.t<%02$$JQr/"     