a
    _mgco                    @  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mZ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-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dlm6Z6 d dl7m8Z8 d dl9m:Z: d dlm;Z;m<Z< d dl
m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZDmEZEmFZF d dlmGZG d dlHZHddlImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZX ddlYmZZZ ddl[m\Z\ ddl]m^Z_ ddl]m`Za ddl]mbZc ddl]mdZdmeZe dd l]mfZg dd!lhmiZj dd"lNmkZkmlZlmmZmmnZnmoZo dd#lpmqZq dd$lrmsZs dd%ltmuZumvZv eBrd d&lwmxZx neyZxe	jzd'krd d(l@m{Z{ nd d(l|m{Z{ e	jzd)krd d*lm}Z} d d+l@m~Z~mZ nd dl'Z'd dlZd dl9Z9d d,lmZmZmZmZ d d-lmZ d d+l|m~Z~mZ G d.d/ d/ejZG d0d1 d1Z}d2d3d4d5d6Zd2d3d4d7d8ZeEd9ZeEd:d;d<Ze~d=Ze{d>Zesd?Zd@ed?< dAdBdCdDZdEdFdGdHdIZeG ZdJedK< dAdLdMdNdOZdPdLdQdRdSZG dTdU dUejZiG dVdW dWZG dXdY dYe!dZef Ze ZG d[d\ d\eNjZd]d3d^d_d`ZG dadb dbeNjZeeDe eDe f ZG dcdd dde=ZesdeZdfede< esdgZdhedg< G didj djeNjZe+dkdlG dmdn dneNjZe+dkdlG dodp dpeNjZe+dkdlG dqdr dreNjZdsdtd3dudvdwZdxd3dydzd{ZG d|d} d}ejZG d~d dejZG dd deNjZG dd dZG dd deeNjZG dd deNjmZG dd deNjmZG dd deNjZG dd deNjZG dd deeNjZG dd deeNjZesdZded< esdZded< G dd deaZ`G dd decZbG dd degZfG dd de_Z^esdZded< G dd dZG dd deMZG dd deNjZG dd dekZeZdS )    )annotationsN)AbstractEventLoopCancelledError	all_taskscreate_taskcurrent_taskget_running_loopsleep)_run_until_complete_cb)OrderedDictdeque)
AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableIteratorMutableMappingSequence)Future)AbstractContextManagersuppress)Contextcopy_context)	dataclass)partialwraps)CORO_RUNNINGCORO_SUSPENDEDgetcoroutinestateiscoroutine)IOBase)PathLike)Queue)Signals)AddressFamily
SocketKind)Thread)TracebackType)IOTYPE_CHECKINGAnyOptional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)FileDescriptorLike)   
   )	ParamSpecrX      )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 rn   rn   O/var/www/html/idle/venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.pyre      s   re   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 )"r]   Ndebugloop_factorybool | None&Callable[[], AbstractEventLoop] | Nonec                C  s0   t j| _|| _|| _d | _d | _d| _d| _d S )Nr   F)	re   rk   _state_debug_loop_factory_loop_context_interrupt_count_set_event_loop)selfrq   rr   rn   rn   ro   __init__   s    zRunner.__init__returnc                 C  s   |    | S N)
_lazy_initr|   rn   rn   ro   	__enter__   s    zRunner.__enter__type[BaseException]BaseExceptionr*   Noneexc_typeexc_valexc_tbr   c                 C  s   |    d S r   )closer|   r   r   r   rn   rn   ro   __exit__   s    zRunner.__exit__c              	   C  s   | j tjurdS zn| j}t| ||  t|drH||  n|t	| W | j
rhtd |  d| _tj| _ n(| j
rtd |  d| _tj| _ 0 dS )zShutdown and close event loop.Nshutdown_default_executor)ru   re   rl   rx   _cancel_all_tasksrun_until_completeshutdown_asyncgenshasattrr   _shutdown_default_executorr{   ra   set_event_loopr   rm   r|   looprn   rn   ro   r      s&    



zRunner.closer   c                 C  s   |    | jS )zReturn embedded event loop.)r   rx   r   rn   rn   ro   get_loop   s    zRunner.get_loop)contextzCoroutine[T_Retval]T_Retval)coror   c             
   C  s  t |std|t dur,td|   |du rB| j}|| j	j
|}t t u rttjtju rt| j|d}zttj| W q ty   d}Y q0 nd}d| _zz8| j	|W W |durttj|u rttjtj S  tjy>   | jdkr8t|dd}|dur8| dkr8t  Y n0 W |durttj|u rttjtj n.|durttj|u rttjtj 0 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"   
ValueErrorra   _get_running_loopRuntimeErrorr   ry   runrx   r   	threadingcurrent_threadmain_threadsignal	getsignalSIGINTdefault_int_handlerr   
_on_sigintrz   r   rb   r   getattrKeyboardInterrupt)r|   r   r   taskZsigint_handlerr   rn   rn   ro   r      sZ    
	
z
Runner.runc                 C  s   | j tju rtd| j tju r$d S | jd u rRt | _| j	s\t
| j d| _	n
|  | _| jd urt| j| j t | _tj| _ d S )NzRunner is closedT)ru   re   rm   r   rl   rw   ra   new_event_looprx   r{   r   rv   	set_debugcontextvarsr   ry   r   rn   rn   ro   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   rn   rn   rn   rn   ro   <lambda>       z#Runner._on_sigint.<locals>.<lambda>)rz   donecancelrx   call_soon_threadsafer   )r|   signumframer   rn   rn   ro   r      s    zRunner._on_sigint)rh   ri   rj   r}   r   r   r   r   r   r   r   rn   rn   rn   ro   r]      s   0r]   r   r   r   r   c                 C  st   t | }|sd S |D ]}|  q| t j|ddi |D ]0}| rLq>| d ur>| d| |d q>d S )Nreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptionr   )rc   r   r   r   gather	cancelledr   call_exception_handler)r   	to_cancelr   rn   rn   ro   r     s     

r   c                   sn   ddd fdd}d _  jdu r(dS   }tj||fd}|  z|I dH  W |  n
|  0 dS )	z.Schedule the shutdown of the default executor.zasyncio.futures.Futurer   )futurer   c              
     sX   z  j jdd  | jd  W n2 tyR } z | j| W Y d }~n
d }~0 0 d S )NT)wait)_default_executorshutdownr   
set_result	Exceptionset_exception)r   exr   rn   ro   _do_shutdown  s
    z0_shutdown_default_executor.<locals>._do_shutdownTN)targetargs)_executor_shutdown_calledr   create_futurer   r)   startjoin)r   r   r   threadrn   r   ro   r     s    
r   r   T_contraT)contravariantPosArgsTP
_root_taskzRunVar[asyncio.Task | None]r   r~   c                  C  s   t d } | d ur|  s| S t D ]Z}|jr$| s$dd |jD }|D ]2}|tu sft|dd dkrJt | |    S qJq$tt	j
t }t|}|r|j}|r|jd ur|j}q|d urtt	j
|jS |S )Nc                 S  s   g | ]\}}|qS rn   rn   ).0cbr   rn   rn   ro   
<listcomp>@  r   z"find_root_task.<locals>.<listcomp>ri   zuvloop.loop)r   getr   r   
_callbacksr
   r   setr0   asyncioTaskr   _task_statescancel_scope_parent_scope
_host_task)	root_taskr   	callbacksr   stater   rn   rn   ro   find_root_task8  s,    



r   r   str)funcr   c                 C  s0   t | dd }t | dd }ddd ||fD S )Nri   rj   .c                 S  s   g | ]}|r|qS rn   rn   )r   xrn   rn   ro   r   Z  r   z%get_callable_name.<locals>.<listcomp>)r   r   )r   modulequalnamern   rn   ro   get_callable_nameW  s    r   z1WeakKeyDictionary[asyncio.AbstractEventLoop, Any]	_run_varsboolr   r   c                 C  sP   |   }|dusJ zt|ttfv W S  tyJ   td|  ddY n0 dS )zBReturn ``True`` if the task has been started and has not finished.NzCannot determine if task z has started or not)get_coror!   r   r    AttributeErrorr   )r   r   rn   rn   ro   _task_startedd  s    r   r   excr   c                 C  sB   | j r*t| j d tr*| j d dr*dS t| jtr>| j} q dS )Nr   Cancelled by cancel scope TF)r   
isinstancer   
startswith__context__r   r   rn   rn   ro   is_anyio_cancellationv  s    r   c                   @  s4  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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!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 ).rM   Fdeadlineshieldfloatr   r   r   r   c                C  s
   t | S r   object__new__clsr   r   rn   rn   ro   r    s    zCancelScope.__new__c                 C  sb   || _ || _d | _t | _d| _d| _d| _d | _d | _	t | _
d | _tjdkrXd| _nd | _d S )NFr[   r   )	_deadline_shieldr   r   _child_scopes_cancel_called_cancelled_caught_active_timeout_handle_cancel_handle_tasksr   sysversion_info_pending_uncancellations)r|   r   r   rn   rn   ro   r}     s    
zCancelScope.__init__r~   c                 C  s   | j rtdttjt  | _}| j| zt	| }W n$ t
y^   td | }|t	|< Y n60 |j| _| |_| jd ur| jj|  | jj| |   d| _ | jr| |  | S )Nz;Each CancelScope may only be used for a single 'with' blockT)r
  r   r0   r   r   r   r   r  addr   KeyError	TaskStater   r   r  discard_timeoutr  _deliver_cancellation)r|   Z	host_task
task_statern   rn   ro   r     s*    


zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noners   r   c                 C  s  ~| j stdt | jur$td| jd us2J t| j}|d u sP|j| urXtdzFd| _ | jrx| j  d | _| j	
| j | jd ur| jj
|  | jj	| j | j|_|   | jrF| jsF| jr| j  |  jd8  _qd}|d ur.t|D ](}t|tr&t|r&d| _nd}q| jo:| W d | _~S | jr| jd us^J | jjd uspJ | j j| j7  _d| _W d | _~dS W d | _~n
d | _~0 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 scopeFr   Tr   )r
  r   r   r   r   r   r   r  r   r  remover   r  r  _restart_cancellation_in_parentr  %_parent_cancellation_is_visible_to_usr  r   r?   r   r   r   r	  )r|   r   r   r   Zhost_task_stateZcannot_swallow_exc_valr   rn   rn   ro   r     sn    



zCancelScope.__exit__c                 C  s,   | }|d ur(|j rdS |jr dS |j}qdS )NTF)r  r   r   )r|   r   rn   rn   ro   _effectively_cancelled  s    z"CancelScope._effectively_cancelledc                 C  s   | j d uo| j o| j jS r   )r   r   r  r   rn   rn   ro   r    s
    
z1CancelScope._parent_cancellation_is_visible_to_usr   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   rn   rn   ro   r  !  s
    
zCancelScope._timeout)originr   c                 C  s   d}t  }| jD ]|}d}|jr q||ur|| ju s:t|r|j}t|tjrT|	 s|
dt|d ||ju r|jdur| jd7  _q| jD ]}|js|js||p|}q|| u 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   Nr   )r   r  _must_cancelr   r   _fut_waiterr   r   r   r   r   idr  r  r  cancel_calledr  r   	call_soonr  )r|   r#  Zshould_retrycurrentr   waiterscopern   rn   ro   r  )  s2    

z!CancelScope._deliver_cancellationc                 C  s>   | j }|dur:|jr*|jdu 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  r|   r+  rn   rn   ro   r  W  s    

z+CancelScope._restart_cancellation_in_parentc                 C  s:   | j s6| jr| j  d | _d| _ | jd ur6| |  d S NT)r  r  r   r   r  r   rn   rn   ro   r   j  s    

zCancelScope.cancelc                 C  s   | j S r   )r  r   rn   rn   ro   r   t  s    zCancelScope.deadlinevaluer   c                 C  s<   t || _| jd ur$| j  d | _| jr8| js8|   d S r   )r   r  r  r   r
  r  r  r|   r/  rn   rn   ro   r   x  s    


c                 C  s   | j S r   )r  r   rn   rn   ro   r'    s    zCancelScope.cancel_calledc                 C  s   | j S r   )r	  r   rn   rn   ro   cancelled_caught  s    zCancelScope.cancelled_caughtc                 C  s   | j S r   )r  r   rn   rn   ro   r     s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|   d S r   )r  r  r0  rn   rn   ro   r     s    
N)rh   ri   rj   r  r   r  r}   r   r   propertyr  r  r  r  r  r   r   setterr'  r1  r   rn   rn   rn   ro   rM     s2   L.
	rM   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r4  r   c                 C  s   || _ || _d S r   r8  )r|   r4  r   rn   rn   ro   r}     s    zTaskState.__init__N)rh   ri   rj   __doc__	__slots__r}   rn   rn   rn   ro   r    s   r  c                   @  sh   e Zd Z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 )TaskStateStorer   r~   c                 C  s   t tjtf  | _i | _d S r   )r1   r   r   r  r   _preliminary_task_statesr   rn   rn   ro   r}     s    zTaskStateStore.__init__Awaitable[Any] | asyncio.Taskr  )keyr   c                C  s`   t |tjsJ z| j| W S  tyR   |  }rN| j| }rN| Y S Y n0 t|d S r   )r   r   r   r   r  r   r<  r   )r|   r>  r   r   rn   rn   ro   __getitem__  s    zTaskStateStore.__getitem__zasyncio.Task | Awaitable[Any])r>  r/  r   c                C  s&   t |tjr|| j|< n
|| j|< d S r   r   r   r   r   r<  )r|   r>  r/  rn   rn   ro   __setitem__  s    zTaskStateStore.__setitem__c                C  s"   t |tjr| j|= n| j|= d S r   r@  )r|   r>  rn   rn   ro   __delitem__  s    
zTaskStateStore.__delitem__intc                 C  s   t | jt | j S r   )lenr   r<  r   rn   rn   ro   __len__  s    zTaskStateStore.__len__z'Iterator[Awaitable[Any] | asyncio.Task]c                 c  s   | j E d H  | jE d H  d S r   )r   r<  r   rn   rn   ro   __iter__  s    zTaskStateStore.__iter__N)	rh   ri   rj   r}   r?  rA  rB  rE  rF  rn   rn   rn   ro   r;    s   r;  r=  c                   @  s.   e Zd ZdddddZdddd	d
dZdS )_AsyncioTaskStatusasyncio.FuturerC  )r   r4  c                 C  s   || _ || _d S r   )_future
_parent_id)r|   r   r4  rn   rn   ro   r}     s    z_AsyncioTaskStatus.__init__NzT_contra | Noner   r.  c                 C  sX   z| j | W n( tjy8   | j  s4tdd Y n0 ttjt }| j	t
| _d S )Nz.called 'started' twice on the same task status)rI  r   r   InvalidStateErrorr   r   r0   r   r   rJ  r   r4  )r|   r/  r   rn   rn   ro   started  s    
z_AsyncioTaskStatus.started)N)rh   ri   rj   r}   rL  rn   rn   rn   ro   rG    s   rG  zIterable[asyncio.Task[object]])rc   r   c              	     s|   t   t  ddd fdd} D ]}|| ~q,z"I d H  W  rx  | qLn rv  | qb0 d S )Nzasyncio.Task[object]r   r   c                   s$     |   s  s d  d S r   )r  r   r   r   rc   r*  rn   ro   on_completion  s    
z_wait.<locals>.on_completion)r   r   r   add_done_callbackpopremove_done_callback)rc   rO  r   rn   rN  ro   _wait  s    

rS  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)rM   r   r
  _exceptionsr   r  r   rn   rn   ro   r}     s    zTaskGroup.__init__c                   s   | j   d| _| S r-  )r   r   r
  r   rn   rn   ro   
__aenter__  s    
zTaskGroup.__aenter__r  r  r  rs   r   c                   s  zn|d ur,| j   t|ts,| j| z| jrt }| jrzt| jI d H  W q< ty } z:d|_	| j   |d u st|trt
|s|}W Y d }~q<d }~0 0 q<W d    q1 s0    Y  nt I d H  d| _| jrtd| jn|r|W nX tyV } z>| j t|||jr@W Y d }~W ~~| `dS  W Y d }~n
d }~0 0 | j |||W ~~| `S ~~| `0 d S )NTFzunhandled errors in a TaskGroup)r   r   r   r   rU  appendr  rM   rS  r   r   AsyncIOBackendcancel_shielded_checkpointr
  rd   r   r   type__traceback__)r|   r   r   r   Z
wait_scoper   rn   rn   ro   	__aexit__  sL    


<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 }rRtt }tt jj|d< nt jj}||i |}t|st|dr|j	 d	nd
}	t
d|	 |j d|dt| jd t|< |d u rt|nt|}zt||dW t|= nt|= 0 t<  jj  j  r.| n
| S )Nr   r   )_taskr   c              
     s  j d usJ | j jv sJ j j|   j t| = z|  }W n< ty } z$t|jtrn|j}qZ|}W Y d }~n
d }~0 0 |d urd ur rd S d u s	 rt|tsʈ j
|  j js j   n
| n"d ur	 std d S )Nz2Child exited without calling task_status.started())r   r  r  r   r   r   r   r   r   r   rU  rW  r  r   r   r   )ra  r   er|   r   r  r`  rn   ro   	task_doneE  s0    
z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.Ztask_statusri   r    z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine objectr8  r_  )r
  r   r&  r   rG  r   r   r"   r   ri   	TypeErrorrj   r  r   r   r   r   r  r  r   rP  )
r|   r   r   r_  r`  rd  kwargsr4  r   prefixrn   rc  ro   _spawn>  sD    $




zTaskGroup._spawnrf  zUnpack[PosArgsT])r   r   r_  r   c                G  s   |  ||| d S r   )rj  )r|   r   r_  r   rn   rn   ro   
start_soon  s    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r-   c                  s   t  }| ||||}z|I d H W S  ty   |  tddB tt |I d H  W d    n1 sn0    Y  W d    n1 s0    Y   Y n0 d S )NTr   )r   r   rj  r   r   rM   r   )r|   r   r_  r   r   r   rn   rn   ro   r     s    FzTaskGroup.start)N)	rh   ri   rj   r}   rV  r\  rj  rk  r   rn   rn   rn   ro   rT    s   ; [	rT  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 )WorkerThreadrY   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 threadrf  r2   F)superr}   r   rn  ro  rx   r   r%   queuerX  current_time
idle_sincestopping)r|   r   rn  ro  	__class__rn   ro   r}     s    
zWorkerThread.__init__rH  r-   r  r   )r   resultr   r   c                 C  sb   t  | _| js| j|  | s^|d urTt|trHt	d}||_
|}|| n
|| d S )Nzcoroutine raised StopIteration)rX  rr  rs  rt  ro  rW  r   r   StopIterationr   	__cause__r   r   )r|   r   rw  r   new_excrn   rn   ro   _report_result  s    

zWorkerThread._report_resultr~   c           
      C  s   t t| j | j }|d u r0W d    d S |\}}}}}| sd }d }|t_zHz|j|g|R  }W n( t	y }	 z|	}W Y d }	~	n
d }	~	0 0 W t`nt`0 | j
 s| j| j||| | j  qW d    n1 s0    Y  d S r   )r8   rX  r   rq  r   r   r9   current_cancel_scoper   r   	is_closedr   r{  rd  )
r|   itemr   r   r   r   r   rw  r   r   rn   rn   ro   r     s&    


zWorkerThread.runNzasyncio.Task | Nonefr   c                 C  sF   d| _ | jd  | j|  z| j|  W n ty@   Y n0 d S r-  )rt  rq  
put_nowaitrn  r  ro  r  r   )r|   r  rn   rn   ro   stop  s    zWorkerThread.stop)N)	rh   ri   rj   MAX_IDLE_TIMEr}   r{  r   r  __classcell__rn   rn   ru  ro   rm    s
   rm  _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  rn   rn   ro   r    s    zBlockingPortal.__new__r   c                   s   t    t | _d S r   )rp  r}   r   rx   r   ru  rn   ro   r}     s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r]  dict[str, Any]r  zFuture[T_Retval])r   r   rh  r_  r   r   c                 C  s,   t t| jj|d| j||||f| j d S )Nrf  )rX  run_sync_from_threadr   Z_task_grouprk  Z
_call_funcrx   )r|   r   r   rh  r_  r   rn   rn   ro   _spawn_task_from_thread  s
    z&BlockingPortal._spawn_task_from_thread)rh   ri   rj   r  r}   r  r  rn   rn   ru  ro   r  
  s   r  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   rC  bytes	max_bytesr   c                   s"   | j |I d H }|r|S td S r   )r  readr=   )r|   r  datarn   rn   ro   receive*  s    zStreamReaderWrapper.receiver   r~   c                   s    | j t  t I d H  d S r   )r  r   r<   rX  
checkpointr   rn   rn   ro   aclose1  s    zStreamReaderWrapper.acloseN)r  )rh   ri   rj   __annotations__r  r  rn   rn   rn   ro   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   r~  r   c                   s    | j | | j  I d H  d S r   )r  writedrainr|   r~  rn   rn   ro   send:  s    zStreamWriterWrapper.sendr~   c                   s   | j   t I d H  d S r   )r  r   rX  r  r   rn   rn   ro   r  >  s    
zStreamWriterWrapper.acloseN)rh   ri   rj   r  r  r  rn   rn   rn   ro   r  6  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}| jr"| j I d H  | jr8| j I d H  | jrN| j I d H  d|_z|  I d H  W n0 ty   d|_|   |  I d H   Y n0 W d    n1 s0    Y  d S )NTrl  F)	rM   r  r  r  r  r   r   r   killr,  rn   rn   ro   r  J  s    zProcess.acloserC  c                   s   | j  I d H S r   )r  r   r   rn   rn   ro   r   \  s    zProcess.waitc                 C  s   | j   d S r   )r  	terminater   rn   rn   ro   r  _  s    zProcess.terminatec                 C  s   | j   d S r   )r  r  r   rn   rn   ro   r  b  s    zProcess.kill)r   r   c                 C  s   | j | d S r   )r  send_signal)r|   r   rn   rn   ro   r  e  s    zProcess.send_signalc                 C  s   | j jS r   )r  pidr   rn   rn   ro   r  h  s    zProcess.pidr6  c                 C  s   | j jS r   )r  
returncoder   rn   rn   ro   r  l  s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S r   )r  r   rn   rn   ro   stdinp  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S r   )r  r   rn   rn   ro   stdoutt  s    zProcess.stdoutc                 C  s   | j S r   )r  r   rn   rn   ro   stderrx  s    zProcess.stderrN)rh   ri   rj   r  r  r   r  r  r  r2  r  r  r  r  r  rn   rn   rn   ro   r  C  s&   
r  zset[Process]r  )rn  ra  r   c                 C  s   d}t jdk r2zt  }W n ty0   Y n0 | D ]R}|jdu rFq6|jjj	
  |jjj	
  |jjj	
  |  |r6||j q6dS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)rX      )r  r  r   get_event_loop_policyget_child_watcherNotImplementedErrorr  r  r  
_transportr   r  r  r  remove_child_handlerr  )rn  ra  Zchild_watcherprocessrn   rn   ro   '_forcibly_shutdown_process_pool_on_exit}  s    

r  set[abc.Process]rn  r   c                   sb   zt tjI dH  W nH tjy\   | D ]}|jdu r(|  q(| D ]}| I dH  qDY n0 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  )rn  r  rn   rn   ro   _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   rE   r  r  r   r0   	Transportset_write_buffer_limitsr|   r  rn   rn   ro   connection_made  s
    


zStreamProtocol.connection_mader   c                 C  s,   |rt  | _|| j_| j  | j  d S r   )r:   r   ry  r  r   r  r|   r   rn   rn   ro   connection_lost  s
    
zStreamProtocol.connection_lostr  )r  r   c                 C  s   | j t| | j  d S r   )r  rW  r  r  r   )r|   r  rn   rn   ro   data_received  s    zStreamProtocol.data_receivedrs   r~   c                 C  s   d| _ | j  dS r-  )r  r  r   r   rn   rn   ro   eof_received  s    
zStreamProtocol.eof_receivedc                 C  s   t  | _d S r   )r   rE   r  r   rn   rn   ro   pause_writing  s    zStreamProtocol.pause_writingc                 C  s   | j   d S r   r  r   r   rn   rn   ro   resume_writing  s    zStreamProtocol.resume_writing)rh   ri   rj   r  r   r  r  r  r  r  r  r  rn   rn   rn   ro   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   rE   r  r  r   r  rn   rn   ro   r    s    

z DatagramProtocol.connection_mader   c                 C  s   | j   | j  d S r   )r  r   r  r  rn   rn   ro   r    s    
z DatagramProtocol.connection_lostr  rO   )r  addrr   c                 C  s&   t |}| j||f | j  d S r   )r@   r  rW  r  r   )r|   r  r  rn   rn   ro   datagram_received  s    z"DatagramProtocol.datagram_receivedr   c                 C  s
   || _ d S r   )r   r  rn   rn   ro   error_received  s    zDatagramProtocol.error_receivedr~   c                 C  s   | j   d S r   )r  clearr   rn   rn   ro   r    s    zDatagramProtocol.pause_writingc                 C  s   | j   d S r   r  r   rn   rn   ro   r    s    zDatagramProtocol.resume_writing)rh   ri   rj   r  r   r  r  r  r  r  r  rn   rn   rn   ro   r    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  	_protocolrH   _receive_guard_send_guard_closedr|   r  r  rn   rn   ro   r}     s
    

zSocketStream.__init__socket.socketr~   c                 C  s   | j dS Nsocketr  get_extra_infor   rn   rn   ro   _raw_socket  s    zSocketStream._raw_socketr  rC  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y   | jrtd n| jjr| jjd ntd Y n0 t||kr|d | ||d   }}| jj| | jjs| jj  W d    n1 s0    Y  |S r   )r  r  r  is_setr  
is_closingr  resume_readingr   pause_readingrX  r  r  popleft
IndexErrorr  r<   r   r=   rD  
appendleftr  )r|   r  chunkleftoverrn   rn   ro   r    s2    

,zSocketStream.receiver   r  c                   s   | j  t I d H  | jr"tn| jjd ur6| jjz| j| W n8 t	y~ } z | j
 rht|n W Y d }~n
d }~0 0 | jj I d H  W d    n1 s0    Y  d S r   )r  rX  r  r  r<   r  r   r  r  r   r  r:   r  r   )r|   r~  r   rn   rn   ro   r  $  s    
zSocketStream.sendc                   s&   z| j   W n ty    Y n0 d S r   )r  	write_eofOSErrorr   rn   rn   ro   send_eof7  s    zSocketStream.send_eofc                   sX   | j  sTd| _z| j   W n ty0   Y n0 | j   tdI d H  | j   d S NTr   )r  r  r  r  r  r   r	   abortr   rn   rn   ro   r  =  s    

zSocketStream.acloseN)r  )
rh   ri   rj   r}   r2  r  r  r  r  r  rn   rn   rn   ro   r    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 )_RawSocketMixinNr^  _receive_future_send_futureFr  
raw_socketc                 C  s   || _ td| _td| _d S )Nr  r  )_RawSocketMixin__raw_socketrH   r  r  r|   r  rn   rn   ro   r}   O  s    
z_RawSocketMixin.__init__r~   c                 C  s   | j S r   )r  r   rn   rn   ro   r  T  s    z_RawSocketMixin._raw_socketasyncio.AbstractEventLooprH  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   r|   rn   ro   callbackY  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)r   r   r  
add_readerr  r   rP  r|   r   r  r  rn   r  ro   _wait_until_readableX  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  rn   ro   r  c  s    z6_RawSocketMixin._wait_until_writable.<locals>.callback)r   r   r  
add_writerr  r   rP  r  rn   r  ro   _wait_until_writableb  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   rn   rn   ro   r  l  s    
z_RawSocketMixin.aclose)rh   ri   rj   r  r  r  r  r}   r2  r  r  r  r  rn   rn   rn   ro   r  J  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                   s8   | j  | jtj W d    n1 s*0    Y  d S r   )r  r  r   r  SHUT_WRr   rn   rn   ro   r  y  s    zUNIXSocketStream.send_eofr  rC  r  r  c                   s   t  }t I d H  | j z| j|}W nX tyN   | |I d H  Y q ty } z | j	rjt
d nt|W Y d }~qd }~0 0 |st|W  d    S qW d    n1 s0    Y  d S r   )r   rX  r  r  r  recvBlockingIOErrorr  r  r  r<   r:   r=   )r|   r  r   r  r   rn   rn   ro   r  }  s    zUNIXSocketStream.receiver  c                   s   t  }t I d H  | j t|}|rz| j|}W nX tyZ   | |I d H  Y q$ t	y } z | j
rvtd nt|W Y d }~q$d }~0 0 ||d  }q$W d    n1 s0    Y  d S r   )r   rX  r  r  
memoryviewr  r  r  r  r  r  r<   r:   )r|   r~  r   viewZ
bytes_sentr   rn   rn   ro   r    s    zUNIXSocketStream.sendztuple[bytes, list[int]])msglenmaxfdsr   c                   s|  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y   | |I d H  Y qZ ty }	 z | jrtd nt|	W Y d }	~	qZd }	~	0 0 |s|stqqZW d    n1 s0    Y  |D ]b\}
}}|
t
jks.|t
jkrHt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   rC  r   r   arrayrX  r  r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r<   r:   r=   
SOL_SOCKET
SCM_RIGHTSr   	frombytesrD  list)r|   r  r  r   fdsr   ancdataflagsr  r   
cmsg_level	cmsg_type	cmsg_datarn   rn   ro   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y   | |I d H  Y q| ty } z | jrtd nt|W Y d }~q|d }~0 0 q|W d    n1 s0    Y  d S )Nzmessage must not be emptyzfds must not be emptyr  )r   r   r   rC  rW  r#   r  r  rX  r  r  r  sendmsgr  r  r  r  r  r  r  r<   r:   )r|   r   r  r   ZfilenosfdZfdarrayr   rn   rn   ro   send_fds  s2    

zUNIXSocketStream.send_fdsN)r  )rh   ri   rj   r  r  r  r   r#  rn   rn   rn   ro   r	  x  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 )TCPSocketListenerNr7  _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr0   r   BaseEventLoopr   rx   rH   _accept_guardr  rn   rn   ro   r}     s    zTCPSocketListener.__init__r~   c                 C  s   | j S r   )r'  r   rn   rn   ro   r    s    zTCPSocketListener._raw_socketabc.SocketStreamc                   s  | j r
t| j t I d H  t | _ztz| j| j	I d H \}}W nL t
jy   z| j| j	 W n ttfy   Y n0 | j rtd  Y n0 W d | _nd | _0 W d    n1 s0    Y  W d    n1 s0    Y  |tjtjd | jt|I d H \}}t||S Nr   )r  r<   r)  rX  r  rM   r%  rx   sock_acceptr  r   r   r  r   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr  r  )r|   client_sockZ_addrr  r  rn   rn   ro   accept  s*    

LzTCPSocketListener.acceptr   c              	     sf   | j r
d S d| _ | jrXz| j| j W n ttfy>   Y n0 | j  tdI d H  | j	  d S r  )
r  r%  rx   r  r  r   r  r   r	   r   r   rn   rn   ro   r    s    
zTCPSocketListener.aclose)rh   ri   rj   r%  r  r  r}   r2  r  r2  r  rn   rn   rn   ro   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   rx   rH   r)  r  r  rn   rn   ro   r}   )  s    
zUNIXSocketListener.__init__r*  r~   c                   s   t  I d H   j z0 j \}}|d t|W W  d    S  ty   t	 } j
 j|jd  | fdd |I d H  Y q ty } z  jrtd nt|W Y d }~qd }~0 0 qW d    n1 s0    Y  d S )NFc                   s    j  jS r   )rx   r  r4  _r   rn   ro   r   ;  r   z+UNIXSocketListener.accept.<locals>.<lambda>)rX  r  r)  r4  r2  setblockingr	  r  r   r   rx   r   r   rP  r  r  r<   r:   )r|   r1  r6  r  r   rn   r   ro   r2  /  s"    

zUNIXSocketListener.acceptr   c                   s   d| _ | j  d S r-  )r  r4  r   r   rn   rn   ro   r  D  s    zUNIXSocketListener.aclosec                 C  s   | j S r   )r4  r   rn   rn   ro   r  H  s    zUNIXSocketListener._raw_socketN)rh   ri   rj   r}   r2  r  r2  r  rn   rn   rn   ro   r3  (  s
   r3  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  rn   rn   ro   r}   N  s
    

zUDPSocket.__init__r  r~   c                 C  s   | j dS r  r  r   rn   rn   ro   r  W  s    zUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r-  r  r  r  r   r   rn   rn   ro   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  d    S  ty   | jr~td ntd Y n0 W d    n1 s0    Y  d S r   r  rX  r  r  r  r  r  r  r  r   r  r  r  r<   r:   r   rn   rn   ro   r  `  s    zUDPSocket.receiverQ   r  c                   sr   | j X t I d H  | jj I d H  | jr4tn| j	 rDt
n| jj|  W d    n1 sd0    Y  d S r   r  rX  r  r  r  r   r  r<   r  r  r:   sendtor  rn   rn   ro   r  q  s    
zUDPSocket.sendN	rh   ri   rj   r}   r2  r  r  r  r  rn   rn   rn   ro   r8  M  s   	r8  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 )ConnectedUDPSocketr9  r  r  c                 C  s*   || _ || _td| _td| _d| _d S r  r  r  rn   rn   ro   r}   ~  s
    

zConnectedUDPSocket.__init__r  r~   c                 C  s   | j dS r  r  r   rn   rn   ro   r    s    zConnectedUDPSocket._raw_socketr   c                   s   | j  sd| _| j   d S r-  r:  r   rn   rn   ro   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y|   | jrrtd ntd Y n0 |d W  d    S 1 s0    Y  d S r  r;  )r|   packetrn   rn   ro   r    s    zConnectedUDPSocket.receiver  c                   sr   | j X t I d H  | jj I d H  | jr4tn| j	 rDt
n| j| W d    n1 sd0    Y  d S r   r<  r  rn   rn   ro   r    s    
zConnectedUDPSocket.sendNr>  rn   rn   rn   ro   r?  }  s   	r?  c                   @  s*   e Zd ZddddZdddddZd	S )
UNIXDatagramSocketrR   r~   c                   s   t  }t I d H  | j z| jd}W nX tyN   | |I d H  Y q ty } z | j	rjt
d nt|W Y d }~qd }~0 0 |W  d    S qW d    n1 s0    Y  d S Nr  )r   rX  r  r  r  recvfromr  r  r  r  r<   r:   r|   r   r  r   rn   rn   ro   r    s    zUNIXDatagramSocket.receiver   r  c                   s   t  }t I d H  | j z| jj|  W nX tyN   | |I d H  Y q ty } z | j	rjt
d nt|W Y d }~qd }~0 0 W d    d S qW d    n1 s0    Y  d S r   )r   rX  r  r  r  r=  r  r  r  r  r<   r:   r|   r~  r   r   rn   rn   ro   r    s    zUNIXDatagramSocket.sendNrh   ri   rj   r  r  rn   rn   rn   ro   rA    s   rA  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yN   | |I d H  Y q ty } z | j	rjt
d nt|W Y d }~qd }~0 0 |W  d    S qW d    n1 s0    Y  d S rB  )r   rX  r  r  r  r  r  r  r  r  r<   r:   rD  rn   rn   ro   r    s    z#ConnectedUNIXDatagramSocket.receiver   r  c                   s   t  }t I d H  | j z| j| W nX tyN   | |I d H  Y q ty } z | j	rjt
d nt|W Y d }~qd }~0 0 W d    d S qW d    n1 s0    Y  d S r   )r   rX  r  r  r  r  r  r  r  r  r<   r:   rE  rn   rn   ro   r    s    z ConnectedUNIXDatagramSocket.sendNrF  rn   rn   rn   ro   rG    s   rG  read_eventsz RunVar[dict[int, 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 )rE   r~   c                 C  s
   t | S r   r   r  rn   rn   ro   r    s    zEvent.__new__r   c                 C  s   t  | _d S r   )r   rE   _eventr   rn   rn   ro   r}     s    zEvent.__init__c                 C  s   | j   d S r   )rL  r   r   rn   rn   ro   r     s    z	Event.setr   c                 C  s
   | j  S r   )rL  r  r   rn   rn   ro   r  
  s    zEvent.is_setc                   s,   |   rt I d H  n| j I d H  d S r   )r  rX  r  rL  r   r   rn   rn   ro   r     s    z
Event.waitr4   c                 C  s   t t| jjS r   )r4   rD  rL  _waitersr   rn   rn   ro   
statistics  s    zEvent.statisticsN)	rh   ri   rj   r  r}   r   r  r   rN  rn   rn   rn   ro   rE      s   rE   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 )rG   Ffast_acquirer   rP  r   c                C  s
   t | S r   r   r  rP  rn   rn   ro   r    s    zLock.__new__r   c                C  s   || _ d | _t | _d S r   )_fast_acquire_owner_taskr   rM  )r|   rP  rn   rn   ro   r}     s    zLock.__init__r~   c                   s   t tjt }| jd u rl| jslt I d H  || _| jshzt	 I d H  W n t
yf   |    Y n0 d S | j|kr~tdt }||f}| j| z|I d H  W n2 t
y   | j| | j|u r|    Y n0 | j| d S Nz)Attempted to acquire an already held Lock)r0   r   r   r   rT  rM  rX  checkpoint_if_cancelledrS  rY  r   releaser   r   rW  r  )r|   r   futr~  rn   rn   ro   acquire   s0    

zLock.acquirec                 C  sB   t tjt }| jd u r(| js(|| _d S | j|u r:tdtd S rU  )r0   r   r   r   rT  rM  r   r>   )r|   r   rn   rn   ro   acquire_nowaitB  s    
zLock.acquire_nowaitc                 C  s
   | j d uS r   )rT  r   rn   rn   ro   lockedM  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)rT  r   r   rM  r   r   )r|   r   rX  rn   rn   ro   rW  P  s    
zLock.releaser5   c                 C  s*   | j rt| j nd }t|  |t| jS r   )rT  AsyncIOTaskInfor5   r[  rD  rM  )r|   Z	task_inforn   rn   ro   rN  \  s    zLock.statisticsN)
rh   ri   rj   r  r}   rY  rZ  r[  rW  rN  rn   rn   rn   ro   rG     s   "rG   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 )rK   NF	max_valuerP  rC  r6  r   initial_valuer^  rP  r   c                C  s
   t | S r   r   r  r`  r^  rP  rn   rn   ro   r  b  s    zSemaphore.__new__)r`  r^  rP  c                  s.   t  j||d || _|| _|| _t | _d S )N)r^  )rp  r}   _value
_max_valuerS  r   rM  )r|   r`  r^  rP  ru  rn   ro   r}   k  s
    zSemaphore.__init__r   r~   c                   s   | j dkrf| jsft I d H  |  j d8  _ | jsbzt I d H  W n ty`   |    Y n0 d S t	 }| j
| z|I d H  W n@ ty   z| j| W n ty   |   Y n0  Y n0 d S Nr   r   )rb  rM  rX  rV  rS  rY  r   rW  r   r   rW  r  r   r|   rX  rn   rn   ro   rY  x  s(    zSemaphore.acquirec                 C  s    | j dkrt|  j d8  _ d S rd  )rb  r>   r   rn   rn   ro   rZ    s    
zSemaphore.acquire_nowaitc                 C  s`   | j d u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   )rc  rb  r   rM  r   r   r  re  rn   rn   ro   rW    s    

zSemaphore.releasec                 C  s   | j S r   )rb  r   rn   rn   ro   r/    s    zSemaphore.valuec                 C  s   | j S r   )rc  r   rn   rn   ro   r^    s    zSemaphore.max_valuerI   c                 C  s   t t| jS r   )rI   rD  rM  r   rn   rn   ro   rN    s    zSemaphore.statistics)rh   ri   rj   r  r}   rY  rZ  rW  r2  r/  r^  rN  r  rn   rn   ru  ro   rK   a  s   rK   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 )/rC   r   r   _total_tokenstotal_tokensr   c                 C  s
   t | S r   r   r  rh  rn   rn   ro   r    s    zCapacityLimiter.__new__)rh  c                 C  s   t  | _t | _|| _d S r   )r   
_borrowersr   _wait_queuerh  )r|   rh  rn   rn   ro   r}     s    zCapacityLimiter.__init__r   r~   c                   s   |   I d H  d S r   )rY  r   rn   rn   ro   rV    s    zCapacityLimiter.__aenter__r  r  r  r   c                   s   |    d S r   )rW  r   rn   rn   ro   r\    s    zCapacityLimiter.__aexit__c                 C  s   | j S r   )rf  r   rn   rn   ro   rh    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   rC  r  isinfrg  r   maxrf  rk  popitemr   )r|   r/  Zwaiters_to_notifyeventrn   rn   ro   rh    s    
rC  c                 C  s
   t | jS r   )rD  rj  r   rn   rn   ro   borrowed_tokens  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S r   )rf  rD  rj  r   rn   rn   ro   available_tokens  s    z CapacityLimiter.available_tokensc                 C  s   |  t  d S r   )acquire_on_behalf_of_nowaitr   r   rn   rn   ro   rZ    s    zCapacityLimiter.acquire_nowaitr  )borrowerr   c                 C  s<   || j v 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)rj  r   rk  rD  rf  r>   r  )r|   ru  rn   rn   ro   rt    s    
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S r   )acquire_on_behalf_ofr   r   rn   rn   ro   rY    s    zCapacityLimiter.acquirec                   s   t  I d H  z| | W nf ty   t }|| j|< z| I d H  W n" typ   | j	|d   Y n0 | j
| Y n20 zt  I d H  W n ty   |    Y n0 d S r   )rX  rV  rt  r>   r   rE   rk  r   r   rQ  rj  r  rY  rW  r|   ru  rq  rn   rn   ro   rv    s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S r   )release_on_behalf_ofr   r   rn   rn   ro   rW    s    zCapacityLimiter.releasec                 C  sb   z| j | W n ty,   tdd Y n0 | 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 tokensFrl  r   )	rj  r  r  r   rk  rD  rf  rp  r   rw  rn   rn   ro   rx    s    z$CapacityLimiter.release_on_behalf_ofr3   c                 C  s   t | j| jt| jt| jS r   )r3   rr  rh  tuplerj  rD  rk  r   rn   rn   ro   rN    s    zCapacityLimiter.statisticsN)rh   ri   rj   rf  r  r  r}   rV  r\  r2  rh  r3  rr  rs  rZ  rt  rY  rv  rW  rx  rN  rn   rn   rn   ro   rC     s(   
rC   _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   rx   r   _signal_queuer   r   rI  r   _handled_signals)r|   r|  rn   rn   ro   r}   -  s
    
z_SignalReceiver.__init__r&   r   )r   r   c                 C  s&   | j | | j s"| jd  d S r   )r~  rW  rI  r   r   )r|   r   rn   rn   ro   _deliver4  s    
z_SignalReceiver._deliverr~   c                 C  s2   t | jD ]"}| j|| j| | j| q
| S r   )r   r}  rx   add_signal_handlerr  r  r  )r|   sigrn   rn   ro   r   9  s    z_SignalReceiver.__enter__r  r  r  rs   r   c                 C  s   | j D ]}| j| qd S r   )r  rx   remove_signal_handler)r|   r   r   r   r  rn   rn   ro   r   @  s    
z_SignalReceiver.__exit__c                 C  s   | S r   rn   r   rn   rn   ro   	__aiter__J  s    z_SignalReceiver.__aiter__c                   s4   t  I d H  | js*t | _| jI d H  | j S r   )rX  r  r~  r   r   rI  r  r   rn   rn   ro   	__anext__M  s
    
z_SignalReceiver.__anext__N)	rh   ri   rj   r}   r  r   r   r  r  rn   rn   rn   ro   r{  ,  s   
r{  c                      s0   e Zd Zdd fddZddddZ  ZS )	r\  r   rM  c                   s`   t |}|d u rd }n|j}| }|d us6J dt t||| | t	|| _
d S )Nz&created TaskInfo from a completed Task)r   r   r4  r   rp  r}   r&  get_nameweakrefrefra  )r|   r   r  r4  r   ru  rn   ro   r}   \  s    
zAsyncIOTaskInfo.__init__r   r~   c                 C  sX   |    }sdS |jrdS t|jtjr6|j r6dS t| }rT|j	 }rT|j
S dS )NFT)ra  r$  r   r%  r   r   r   r   r   r   r  )r|   r   r  r   rn   rn   ro   has_pending_cancellationh  s    
z(AsyncIOTaskInfo.has_pending_cancellation)rh   ri   rj   r}   r  r  rn   rn   ru  ro   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)rq   
use_uvlooprr   rs   r   rt   r   )rq   r  rr   r   c                C  s8   |r|d u rdd l }|j}t||d| _g | _d | _d S )Nr   rp   )uvloopr   r]   _runnerrU  _runner_task)r|   rq   r  rr   r  rn   rn   ro   r}     s    zTestRunner.__init__r~   c                 C  s   | j   |  | j | S r   )r  r   r   set_exception_handler_exception_handlerr   rn   rn   ro   r     s    
zTestRunner.__enter__r  r  r  r   c                 C  s   | j ||| d S r   )r  r   r   rn   rn   ro   r     s    zTestRunner.__exit__r   c                 C  s
   | j  S r   )r  r   r   rn   rn   ro   r     s    zTestRunner.get_loopr  r  )r   r   r   c                 C  s0   t |dtr"| j|d  n
|| d S )Nr   )r   r   r   rU  rW  default_exception_handler)r|   r   r   rn   rn   ro   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)rU  rD  rd   )r|   rb   rn   rn   ro   _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 n~ tyv } z"| s`|j|j   W Y d }~qd }~0  ty } z.| s|| t	|t
|fs W Y d }~qd }~0 0 | s|| q6 W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   )OutcomeException)Z_pytest.outcomesr  r  r   r   r   r   r   r   r   r   r   )r|   r  r  r   r   retvalr   rn   rn   ro   _run_tests_and_fixtures  s     
z"TestRunner._run_tests_and_fixturesz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsr   )r   r   rh  r   c                   sp   | j s<tttt tjf  d\| _}|  	| 
|| _ ||i |}|   }| j||f |I d H S r+  )r  rA   ry  r   r-   r   r   r  r   r   r  r   Zsend_nowait)r|   r   r   rh  r  r   r   rn   rn   ro   _call_in_runner_task  s    
zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])fixture_funcrh  r   c                 c  s   |f i |}|   | |jd }|   |V  z|   | |jd  W n tyj   |   Y n0 |   |  tdd S )Nz$Async generator fixture did not stop)r   r   r  asendr  StopAsyncIterationr  r   )r|   r  rh  asyncgenZfixturevaluern   rn   ro   run_asyncgen_fixture  s    zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s(   |   | j|fi |}|   |S r   )r   r   r  r  )r|   r  rh  r  rn   rn   ro   run_fixture  s
    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrh  r   c              
   C  s^   z |   | j|fi | W n0 tyP } z| j| W Y d }~n
d }~0 0 |   d S r   )r   r   r  r   rU  rW  r  )r|   r  rh  r   rn   rn   ro   run_test	  s    "zTestRunner.run_test)rh   ri   rj   r  r}   r   r   r   r  r  r  r  r  r  r  rn   rn   rn   ro   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dddddZ$eddd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 )rX  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r]  r  r   )r   r   rh  optionsr   c           
        s   t dd fdd}|dd }|dd }|d u rV|ddrVd	d l}|j}t||d
}	|	| W  d    S 1 s0    Y  d S )Nr   r~   c                    sN   t tjt } | t td d t| < z  I d H W t| = S t| = 0 d S r   )r0   r   r   r   set_namer   r  r   rM  r   r   rn   ro   wrapper	  s    z#AsyncIOBackend.run.<locals>.wrapperrq   rr   r  Fr   rp   )r   r   r  r   r]   r   )
r  r   r   rh  r  r  rq   rr   r  runnerrn   r  ro   r   	  s    
zAsyncIOBackend.runr  r~   c                 C  s   t  S r   )r   r  rn   rn   ro   current_token-	  s    zAsyncIOBackend.current_tokenr   c                 C  s
   t   S r   )r   r!  r  rn   rn   ro   rr  1	  s    zAsyncIOBackend.current_timer   c                 C  s   t S r   )r   r  rn   rn   ro   cancelled_exception_class5	  s    z(AsyncIOBackend.cancelled_exception_classr   c                   s   t dI d H  d S r  r	   r  rn   rn   ro   r  9	  s    zAsyncIOBackend.checkpointc                   sf   t  }|d u rd S zt| j}W n ty4   Y d S 0 |rb|jrPtdI d H  q6|jrZqbq6|j}q6d S r  )r   r   r   r  r'  r	   r   r   )r  r   r   rn   rn   ro   rV  =	  s    z&AsyncIOBackend.checkpoint_if_cancelledc                   s<   t dd tdI d H  W d    n1 s.0    Y  d S )NTrl  r   )rM   r	   r  rn   rn   ro   rY  P	  s    z)AsyncIOBackend.cancel_shielded_checkpoint)delayr   c                   s   t |I d H  d S r   r  )r  r  rn   rn   ro   r	   U	  s    zAsyncIOBackend.sleepFr   r   rM   r   c                C  s   t ||dS )Nr   rL   r  rn   rn   ro   create_cancel_scopeY	  s    z"AsyncIOBackend.create_cancel_scopec                 C  sz   t   }d u rtjS zt| j}W n ty:   tj Y S 0 tj}|rvt||j}|jrdtj }qvqB|j	rnqvqB|j
}qB|S r   )r   r  r   r   r   r  minr   r  r   r   )r  r   r   r   rn   rn   ro   current_effective_deadline_	  s     z)AsyncIOBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S r   )rT  r  rn   rn   ro   create_task_groupv	  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t  S r   rD   r  rn   rn   ro   create_eventz	  s    zAsyncIOBackend.create_eventzabc.LockrQ  c                C  s
   t |dS )NrO  rF   rR  rn   rn   ro   create_lock~	  s    zAsyncIOBackend.create_lockNr]  rC  r6  zabc.Semaphorer_  c                C  s   t |||dS )Nr]  rJ   ra  rn   rn   ro   create_semaphore	  s    zAsyncIOBackend.create_semaphorezabc.CapacityLimiterrg  c                 C  s   t |S r   rB   ri  rn   rn   ro   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 n2 tyT   t }t }t| t| Y n0 |p`|  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  |s2|jd u r8|}n|j}|
j|||||f |I d H W  d    W  d   I d H  S 1 s0    Y  W d   I d H  q1 I d H s0    Y  d S )Nrl  r   )r  r  r   r  LookupErrorr   r   current_default_thread_limiterrM   r   r   r   rm  r   r  rP  r  rQ  rr  rs  r  r  r   rR  r   r   sniffiocurrent_async_library_cvarr   rq  r  )r  r   r   r  r  ro  rn  r+  r   r   ZworkernowZexpired_workerr   Zworker_scopern   rn   ro   run_sync_in_worker_thread	  sL    


z(AsyncIOBackend.run_sync_in_worker_threadc                 C  s>   t j}|d ur:|jr(tdt|d|jr2d S |j}qd S )Nr   r   )r9   r|  r'  r   r&  r   r   )r  r+  rn   rn   ro   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 )NrM   r   )r+  r   c              
     s   d}t tjt }td | t|< | j| zfz  I d H W W | j| S  t	y } zt
j	t|d W Y d }~n
d }~0 0 W | j| n| j| 0 d S r-  )r0   r   r   r   r  r   r  r  r  r   
concurrentfuturesr   )r+  Z__tracebackhide__r   r   r  rn   ro   task_wrapper	  s    *z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperr   )r0   r   r   r   r  r  r   r9   r|  r   run_coroutine_threadsaferw  )	r  r   r   r  r  r   r   r  r  rn   r  ro   run_async_from_thread	  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 n: tyX }  z"|  t| tsD W Y d } ~ n
d } ~ 0 0 d S )Nr   )r  r  r   r   r   r   r   r   r   r   r  r   rn   ro   r  	  s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r0   r   r   rw  )r  r   r   r  r  r   rn   r  ro   r  	  s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S r   )r  r  rn   rn   ro   create_blocking_portal	
  s    z%AsyncIOBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner-   r  )commandr  r  r  rh  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  rh  r  Zstdin_streamZstdout_streamZstderr_streamrn   rn   ro   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 taskrf  )r   r  r   rP  r   r  )r  rn  rn   rn   ro   #setup_process_pool_exit_at_shutdown1
  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)	r0   ry  r   r  r  r   create_connectionr  r  )r  r  r  r  r  r  rn   rn   ro   connect_tcp;
  s    
zAsyncIOBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)pathr   c                   s   |   I d H  t  ttjd z| W nb ty   t } 	|j
d  | fdd |I d H  Y q* ty      Y q*0 tS q*d S )NFc                   s
     S r   r  r5  r   r  rn   ro   r   T
  r   z-AsyncIOBackend.connect_unix.<locals>.<lambda>)r  r   r  AF_UNIXr7  connectr  r   r   r  r   rP  r   r   r	  )r  r  r  rn   r  ro   connect_unixH
  s    
zAsyncIOBackend.connect_unixr  rP   )sockr   c                 C  s   t |S r   )r$  r  r  rn   rn   ro   create_tcp_listener\
  s    z"AsyncIOBackend.create_tcp_listenerc                 C  s   t |S r   )r3  r  rn   rn   ro   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   r8  r?  )r  r  r  r  r  r  r  rn   rn   ro   create_udp_socketd
  s    
z AsyncIOBackend.create_udp_socketzstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocket)r  remote_pathr   c                   s   |   I d H  t  |rz| W nb tyn   t } |jd  | fdd |I d H  Y q t	y   
   Y q0 tS qntS d S )Nc                   s
     S r   r  r5  r  rn   ro   r   
  r   z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)r  r   r  r  r   r   r  r   rP  r   r   rG  rA  )r  r  r  r  rn   r  ro   create_unix_datagram_socket|
  s    z*AsyncIOBackend.create_unix_datagram_socketr   r  rZ  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  rZ  r  r  r   c                  s   t  j||||||dI d H S )Nr  )r   getaddrinfo)r  r  r  r  rZ  r  r  rn   rn   ro   r  
  s    zAsyncIOBackend.getaddrinforO   ztuple[str, str])sockaddrr  r   c                   s   t  ||I d H S r   )r   getnameinfo)r  r  r  rn   rn   ro   r  
  s    zAsyncIOBackend.getnameinforW   )objr   c                   s   |   I d H  zt }W n  ty:   i }t| Y n0 t|tsN| }||r`tdt	 }t
 }z|||j W n8 ty   ddlm} | }|||j |j}Y n0 |j}|||< z | I d H  W || ||= n|| ||= 0 d S )Nr  r   get_selector)r  rI  r   r  r   r   rC  r  r;   r   r   rE   r   r  $anyio._core._asyncio_selector_threadr  r  r   )r  r  rH  r   rq  r  selectorr  rn   rn   ro   wait_readable
  s6    

zAsyncIOBackend.wait_readablec                   s   |   I d H  zt }W n  ty:   i }t| Y n0 t|tsN| }||r`tdt	 }t
 }z|||j W n8 ty   ddlm} | }|||j |j}Y n0 |j}|||< z | I d H  W ||= || n||= || 0 d S )Nr  r   r  )r  rK  r   r  r   r   rC  r  r;   r   r   rE   r  r  r  r  r  r   )r  r  rJ  r   rq  r  r  r  rn   rn   ro   wait_writable
  s6    


zAsyncIOBackend.wait_writablerC   c                 C  s8   z
t  W S  ty2   td}t | | Y S 0 d S )N(   )rz  r   r  rC   r   )r  r  rn   rn   ro   r  
  s    

z-AsyncIOBackend.current_default_thread_limiterr&   z.AbstractContextManager[AsyncIterator[Signals]])r|  r   c                 G  s   t |S r   )r{  )r  r|  rn   rn   ro   open_signal_receiver   s    z#AsyncIOBackend.open_signal_receiverr6   c                 C  s
   t t S r   )r\  r   r  rn   rn   ro   get_current_task  s    zAsyncIOBackend.get_current_taskzSequence[TaskInfo]c                 C  s   dd t  D S )Nc                 S  s   g | ]}|  st|qS rn   )r   r\  )r   r   rn   rn   ro   r     r   z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   r  rn   rn   ro   get_running_tasks
  s    z AsyncIOBackend.get_running_tasksc                   s\   |   I d H  t }t D ]6}||u r(q|j}|d u 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*  rn   rn   ro   wait_all_tasks_blocked  s    
z%AsyncIOBackend.wait_all_tasks_blockedr  )r  r   c                 C  s   t f i |S r   )r  )r  r  rn   rn   ro   create_test_runner  s    z!AsyncIOBackend.create_test_runner)FN)N)r   ),rh   ri   rj   classmethodr   r  rr  r  r  rV  rY  r	   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rn   rn   rn   ro   rX  	  s   	  :#	   ""rX  )
__future__r   r  r   concurrent.futuresr  r  r  r  r  r   r  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   collectionsr   r   collections.abcr   r   r   r   r   r   r   r   r   r   r   
contextlibr   r   r   r   r   Zdataclassesr   	functoolsr   r   inspectr   r    r!   r"   ior#   r$   rq  r%   r   r&   r'   r(   r)   typesr*   typingr+   r,   r-   r.   r/   r0   r1   r  re  r3   r4   r5   r6   r7   Z_core._eventloopr8   r9   Z_core._exceptionsr:   r;   r<   r=   r>   r?   Z_core._socketsr@   Z_core._streamsrA   Z_core._synchronizationrC   ZBaseCapacityLimiterrE   Z	BaseEventrG   ZBaseLockrH   rI   rK   ZBaseSemaphoreZ_core._tasksrM   ZBaseCancelScoperN   rO   rP   rQ   rR   Zabc._eventlooprS   ZlowlevelrT   Zstreams.memoryrU   rV   Z	_typeshedrW   r  r  rZ   Ztyping_extensionsr]   r^   r_   enumr`   ra   rb   rc   Zexceptiongrouprd   Enumre   r   r   r   r   r   r   r   r  r   r   r   r   r   r  r;  r   Z
TaskStatusrG  rS  rT  ry  r   Z_Retval_Queue_Typerm  r  r  r  ZByteReceiveStreamr  ZByteSendStreamr  r  r  r  Protocolr  r  r  r  r	  r$  r3  r8  r?  rA  rG  rI  rK  rz  r{  r\  r  rX  Zbackend_classrn   rn   rn   ro   <module>   s   $	0   
  & ;K9'U.t<%02$$JQr/!     