a
    Of,E                    @  sF  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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 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/m0Z0 d dl1m2Z2 d dlm3Z3m4Z4 d dl	m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dl
mGZG d dlHZHddlImJZJmKZKmLZLmMZM ddlNmOZOmPZP ddlQmRZRmSZSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z] ddl[m^Z_ ddl[m`Z` ddlambZc dd lMmdZdmeZemfZfmgZgmhZh dd!limjZj dd"lkmlZlmmZm ejnd#krd d$l8moZo nd d$lpmoZo ejnd%krd d&lmqZq d d'l8mrZrmsZs nd dlZd dltZtd dl1Z1d d(lmuZumvZvmwZwmxZx d d)lymzZz d d'lpmrZrmsZs G d*d+ d+etj{Z|G d,d- d-Zqd.d/d0d1d2Z}d.d/d0d3d4Z~eEd5ZeEd6d7d8Zerd9Zeod:Zejd;Zd<ed;< d=d>d?d@ZdAdBdCdDdEZeG ZdFedG< d=dHdIdJdKZG dLdM dMecZbG dNdO dOZeG ZdPedQ< G dRdS dSeMjZdTdUdVdWdXZG dYdZ dZeMjZeDeBe eBe f ZG d[d\ d\e5Zejd]Zd^ed]< ejd_Zd`ed_< G dadb dbeMjZe"dcddG dedf dfeMjZe"dcddG dgdh dheMjZe"dcddG didj djeMjZdkdld/dmdndoZdpd/dqdrdsZG dtdu duejZG dvdw dwejZG dxdy dyeMjZG dzd{ d{ZG d|d} d}eeMjZG d~d deMjfZG dd deMjfZG dd deMjZG dd deMjZG dd deeMjZG dd deeMjZejdZded< ejdZded< G dd de_Z^G dd de]Z\ejdZded< G dd dZG dd deLZG dd deMjZG dd dedZeZdS )    )annotationsN)AbstractEventLoopCancelledError	all_taskscreate_taskcurrent_taskget_running_loopsleep)_run_until_complete_cb)OrderedDictdeque)AsyncIterator	Generator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MappingOptionalSequenceTupleTypeVarcast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream
WouldBlock)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEvent)ResourceGuardCancelScope)AsyncBackendIPSockAddrTypeSocketListenerUDPPacketTypeUNIXDatagramPacketType)RunVar)MemoryObjectReceiveStreamMemoryObjectSendStream)   
   )	ParamSpecrO      )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 re   re   Q/var/www/ai-form-bot/venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.pyr\   g   s   r\   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 )"rT   Ndebugloop_factorybool | None&Callable[[], AbstractEventLoop] | Nonec                C  s0   t j| _|| _|| _d | _d | _d| _d| _d S )Nr   F)	r\   rb   _state_debug_loop_factory_loop_context_interrupt_count_set_event_loop)selfrh   ri   re   re   rf   __init__n   s    zRunner.__init__returnc                 C  s   |    | S N)
_lazy_initrs   re   re   rf   	__enter__|   s    zRunner.__enter__type[BaseException]BaseExceptionr"   Noneexc_typeexc_valexc_tbrv   c                 C  s   |    d S rw   )closers   r   r   r   re   re   rf   __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)rl   r\   rc   ro   _cancel_all_tasksrun_until_completeZshutdown_asyncgenshasattrr   _shutdown_default_executorrr   rX   set_event_loopr   rd   rs   loopre   re   rf   r      s&    



zRunner.closer   c                 C  s   |    | jS )zReturn embedded event loop.)rx   ro   ry   re   re   rf   get_loop   s    zRunner.get_loop)contextzCoroutine[T_Retval]T_Retval)cororv   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)rW   r   
ValueErrorrX   Z_get_running_loopRuntimeErrorrx   rp   runro   r   	threadingcurrent_threadmain_threadsignal	getsignalSIGINTdefault_int_handlerr   
_on_sigintrq   r   rY   r   getattrKeyboardInterrupt)rs   r   r   taskZsigint_handlerr   re   re   rf   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)rl   r\   rd   r   rc   rn   rX   new_event_loopro   rr   r   rm   Z	set_debugcontextvarsr   rp   ry   re   re   rf   rx      s    




zRunner._lazy_initasyncio.Task)r   rv   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 rw   re   re   re   re   rf   <lambda>       z#Runner._on_sigint.<locals>.<lambda>)rq   donecancelro   call_soon_threadsafer   )rs   signumframer   re   re   rf   r      s    zRunner._on_sigint)r_   r`   ra   rt   rz   r   r   r   r   rx   r   re   re   re   rf   rT   l   s   0rT   r   r}   r   rv   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 )NZreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptionr   )rZ   r   r   r   Zgather	cancelledr   Zcall_exception_handler)r   Z	to_cancelr   re   re   rf   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}   )futurerv   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   re   rf   _do_shutdown  s
    z0_shutdown_default_executor.<locals>._do_shutdownTN)targetargs)Z_executor_shutdown_calledr   create_futurer   r!   startjoin)r   r   r   threadre   r   rf   r     s    
r   r   T_contraT)contravariantPosArgsTP
_root_taskzRunVar[asyncio.Task | None]r   ru   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 re   re   ).0cbr   re   re   rf   
<listcomp>(  r   z"find_root_task.<locals>.<listcomp>r`   zuvloop.loop)r   getr   r   Z
_callbacksr
   r   setr0   asyncioTaskr   _task_statescancel_scope_parent_scope
_host_task)	root_taskr   	callbacksr   stater   re   re   rf   find_root_task   s,    



r   r'   str)funcrv   c                 C  s0   t | dd }t | dd }ddd ||fD S )Nr`   ra   .c                 S  s   g | ]}|r|qS re   re   )r   xre   re   rf   r   B  r   z%get_callable_name.<locals>.<listcomp>)r   r   )r   modulequalnamere   re   rf   get_callable_name?  s    r   z1WeakKeyDictionary[asyncio.AbstractEventLoop, Any]	_run_varsbool)r   rv   c                 C  s@   zt |  ttfv W S  ty:   td|  ddY n0 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   re   re   rf   _task_startedL  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 )0rF   Fdeadlineshieldfloatr   r   r   rv   c                C  s
   t | S rw   object__new__clsr   r   re   re   rf   r   [  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)rs   r   r   re   re   rf   rt   `  s    zCancelScope.__init__ru   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| _ tjdkr| j | _| jr| |  | S )Nz;Each CancelScope may only be used for a single 'with' blockTrR   )r   r   r0   r   r   r   r   r   addr   KeyError	TaskStater   r   r   remove_timeoutsysversion_info
cancellingr   r   _deliver_cancellation)rs   Z	host_task
task_statere   re   rf   rz   o  s.    



zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonerj   r~   c                 C  s   | j stdt | jur"td| jd us0J t| j}|d u sN|j| urVtdd| _ | jrr| j  d | _| j	
| j | jd ur| jj
|  | jj	| j | j|_|   | jr|d u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   r   r   r   r   r   r   r   r   r   r   _restart_cancellation_in_parentr   iterate_exceptions
isinstancer   	_uncancelr   )rs   r   r   r   Zhost_task_stateexcre   re   rf   r     s<    


zCancelScope.__exit__r   )cancelled_excrv   c                 C  sn   t jdk s| jd u rd| _dS | jd urR| jrR|  jd8  _| j | jkr(dS q(d| _dt| d|jv S )NrO   	   r   Tr   Cancelled by cancel scope r   )r   r   r   r   r   r   idr   )rs   r  re   re   rf   r    s    
zCancelScope._uncancelr}   c                 C  s@   | j tjkr<t }| | j kr*|   n|| j | j| _d S rw   )	r   mathinfr   timer   Zcall_atr   r   r   re   re   rf   r     s
    
zCancelScope._timeout)originrv   c                 C  s   d}t  }| jD ]|}|jrqd}||ur|| ju 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|| 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	  r  r   N)r   r   Z_must_cancelr   r   _fut_waiterr  r   r   r   r   r   r   r   r  r   r   cancel_calledr   r   Z	call_soonr   )rs   r  Zshould_retrycurrentr   waiterscopere   re   rf   r     s.    



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   )rs   r  re   re   rf   r    s    

z+CancelScope._restart_cancellation_in_parentc                 C  s*   | j }|d ur&|js&|jrdS |j }qdS )NTF)r   r   r   )rs   r   re   re   rf   _parent_cancelled  s    zCancelScope._parent_cancelledc                 C  s:   | j s6| jr| j  d | _d| _ | jd ur6| |  d S NT)r   r   r   r   r   ry   re   re   rf   r   !  s    

zCancelScope.cancelc                 C  s   | j S rw   )r   ry   re   re   rf   r   +  s    zCancelScope.deadlinevaluerv   c                 C  s<   t || _| jd ur$| j  d | _| jr8| js8|   d S rw   )r   r   r   r   r   r   r   rs   r  re   re   rf   r   /  s    


c                 C  s   | j S rw   )r   ry   re   re   rf   r  9  s    zCancelScope.cancel_calledc                 C  s   | j S rw   )r   ry   re   re   rf   cancelled_caught=  s    zCancelScope.cancelled_caughtc                 C  s   | j S rw   )r   ry   re   re   rf   r   A  s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|   d S rw   )r   r  r  re   re   rf   r   E  s    
N)r_   r`   ra   r  r  r   rt   rz   r   r  r   r   r  r  r   propertyr   setterr  r  r   re   re   re   rf   rF   Z  s.   1-
	rF   c                   @  s$   e Zd ZdZdZdddddZdS )	r   z
    Encapsulates auxiliary task information that cannot be added to the Task instance
    itself because there are no guarantees about its implementation.
    )	parent_idr   __weakref__
int | NoneCancelScope | Noner  r   c                 C  s   || _ || _d S rw   r"  )rs   r  r   re   re   rf   rt   Z  s    zTaskState.__init__N)r_   r`   ra   __doc__	__slots__rt   re   re   re   rf   r   R  s   r   z*WeakKeyDictionary[asyncio.Task, TaskState]r   c                   @  s.   e Zd ZdddddZdddd	d
dZdS )_AsyncioTaskStatusasyncio.Futureint)r   r  c                 C  s   || _ || _d S rw   )_future
_parent_id)rs   r   r  re   re   rf   rt   h  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)r(  r   r   ZInvalidStateErrorr   r   r0   r   r   r)  r   r  )rs   r  r   re   re   rf   startedl  s    
z_AsyncioTaskStatus.started)N)r_   r`   ra   rt   r*  re   re   re   rf   r%  g  s   r%  r|   z$Generator[BaseException, None, None])r   rv   c                 c  s0   t | tr&| jD ]}t|E d H  qn| V  d S rw   )r  r[   rY   r  )r   r  re   re   rf   r  y  s    

r  c                   @  s   e Zd ZddddZd dddZddd	d
dddZd ddddddddZdddddddddZdddddddddZdS )!	TaskGroupr}   ru   c                 C  s    t  | _d| _g | _t | _d S )NF)rF   r   r   _exceptionsr   r   ry   re   re   rf   rt     s    zTaskGroup.__init__c                   s   | j   d| _| S r  )r   rz   r   ry   re   re   rf   
__aenter__  s    
zTaskGroup.__aenter__r   r  r  rj   r~   c              
     s   | j |||}|d ur8| j   t|ts8| j| d }| jrzt	| jI d H  W q< ty } z"| j   |d u r~|}W Y d }~q<d }~0 0 q<d| _
| jrtd| j|r|d u s|r||S )NFzunhandled errors in a TaskGroup)r   r   r   r  r   r,  appendr   r   r   r   r[   )rs   r   r   r   Zignore_exceptionZ!cancelled_exc_while_waiting_tasksr  re   re   rf   	__aexit__  s,    


zTaskGroup.__aexit__Nz,Callable[[Unpack[PosArgsT]], Awaitable[Any]]tuple[Unpack[PosArgsT]]r   asyncio.Future | Noner   )r   r   nametask_status_futurerv   c           
        s  ddd fdd} j s&tdi }rPtt }tt jj|d< nt jj}||i |}t|st|dr|j	 d	nd
}	t
d|	 |j d|d|d u rt|nt|}t||d| t| jdt<  jj  j S )Nr   r}   )_taskrv   c              
     s  t |  }|jd usJ | |jjv s&J |jj|   j t | = z|  }W n< ty } z$t|jtrv|j}qb|}W Y d }~n
d }~0 0 |d urd ur rd S d u s	 rt|ts҈ 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  __context__r   r   r,  r.  r  r   r   r   )r4  r   r  ers   r   r3  re   rf   	task_done  s2    

z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.Ztask_statusr`   r    z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine objectr2  r"  )r   r   r  r   r%  r   r   r   r   r`   	TypeErrorra   r   r   r   add_done_callbackr   r   r   r   )
rs   r   r   r2  r3  r8  kwargsr  r   prefixre   r7  rf   _spawn  s:    $



zTaskGroup._spawnr:  zUnpack[PosArgsT])r   r   r2  rv   c                G  s   |  ||| d S rw   )r?  )rs   r   r2  r   re   re   rf   
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   r?  r   r   rF   r   )rs   r   r2  r   r   r   re   re   rf   r     s    FzTaskGroup.start)N)	r_   r`   ra   rt   r-  r/  r?  r@  r   re   re   re   rf   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 )WorkerThreadrP   r   zset[WorkerThread]zdeque[WorkerThread])r   workersidle_workersc                   sF   t  jdd || _|| _|| _|j| _td| _t	
 | _d| _d S )NzAnyIO worker threadr:  r2   F)superrt   r   rD  rE  ro   r   r   queueAsyncIOBackendcurrent_time
idle_sincestopping)rs   r   rD  rE  	__class__re   rf   rt   *  s    
zWorkerThread.__init__r&  r$   r  r}   )r   resultr  rv   c                 C  sb   t  | _| js| j|  | s^|d urTt|trHt	d}||_
|}|| n
|| d S )Nzcoroutine raised StopIteration)rH  rI  rJ  rK  rE  r.  r   r  StopIterationr   	__cause__r   r   )rs   r   rN  r  new_excre   re   rf   _report_result;  s    

zWorkerThread._report_resultru   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 rw   )r7   rH  r   rG  r   r   r8   current_cancel_scoper   r|   Z	is_closedr   rR  r8  )
rs   itemr   r   r   r   r   rN  r   r  re   re   rf   r   M  s&    


zWorkerThread.runNzasyncio.Task | Nonefrv   c                 C  sF   d| _ | jd  | j|  z| j|  W n ty@   Y n0 d S r  )rK  rG  
put_nowaitrD  discardrE  r   r   )rs   rV  re   re   rf   stoph  s    zWorkerThread.stop)N)	r_   r`   ra   MAX_IDLE_TIMErt   rR  r   rY  __classcell__re   re   rL  rf   rC  '  s
   rC  _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 )BlockingPortalru   c                 C  s
   t | S rw   r   r   re   re   rf   r   y  s    zBlockingPortal.__new__r}   c                   s   t    t | _d S rw   )rF  rt   r   ro   ry   rL  re   rf   rt   |  s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r0  dict[str, Any]r   zFuture[T_Retval])r   r   r=  r2  r   rv   c                 C  s,   t t| jj|d| j||||f| j d S )Nr:  )rH  run_sync_from_threadr   Z_task_groupr@  Z
_call_funcro   )rs   r   r   r=  r2  r   re   re   rf   _spawn_task_from_thread  s
    z&BlockingPortal._spawn_task_from_thread)r_   r`   ra   r   rt   rb  r[  re   re   rL  rf   r^  x  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   r'  bytes	max_bytesrv   c                   s"   | j |I d H }|r|S td S rw   )re  readr<   )rs   ri  datare   re   rf   receive  s    zStreamReaderWrapper.receiver}   ru   c                   s   | j   t I d H  d S rw   )re  Zfeed_eofrH  
checkpointry   re   re   rf   aclose  s    
zStreamReaderWrapper.acloseN)rf  )r_   r`   ra   __annotations__rl  rn  re   re   re   rf   rd    s   
rd  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.StreamWriterre  rg  r}   rT  rv   c                   s    | j | | j  I d H  d S rw   )re  writeZdrainrs   rT  re   re   rf   send  s    zStreamWriterWrapper.sendru   c                   s   | j   t I d H  d S rw   )re  r   rH  rm  ry   re   re   rf   rn    s    
zStreamWriterWrapper.acloseN)r_   r`   ra   ro  rt  rn  re   re   re   rf   rp    s   
rp  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}   ru   c                   s   t ddR | jr"| j I d H  | jr8| j I d H  | jrN| j I d H  W d    n1 sb0    Y  z|  I d H  W nT ty   |   t dd |  I d H  W d    n1 s0    Y   Y n0 d S rA  )rF   rw  rn  rx  ry  r   r|   killry   re   re   rf   rn    s    .,zProcess.acloser'  c                   s   | j  I d H S rw   )rv  r   ry   re   re   rf   r     s    zProcess.waitc                 C  s   | j   d S rw   )rv  	terminatery   re   re   rf   r{    s    zProcess.terminatec                 C  s   | j   d S rw   )rv  rz  ry   re   re   rf   rz    s    zProcess.kill)r   rv   c                 C  s   | j | d S rw   )rv  send_signal)rs   r   re   re   rf   r|    s    zProcess.send_signalc                 C  s   | j jS rw   )rv  pidry   re   re   rf   r}    s    zProcess.pidr   c                 C  s   | j jS rw   )rv  
returncodery   re   re   rf   r~    s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S rw   )rw  ry   re   re   rf   stdin  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S rw   )rx  ry   re   re   rf   stdout  s    zProcess.stdoutc                 C  s   | j S rw   )ry  ry   re   re   rf   stderr  s    zProcess.stderrN)r_   r`   ra   ro  rn  r   r{  rz  r|  r  r}  r~  r  r  r  re   re   re   rf   ru    s&   
ru  zset[Process]r   )rD  r4  rv   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)rO      )r   r   r   Zget_event_loop_policyZget_child_watcherNotImplementedErrorr~  rw  re  
_transportr   rx  ry  rz  Zremove_child_handlerr}  )rD  r4  Zchild_watcherprocessre   re   rf   '_forcibly_shutdown_process_pool_on_exit  s    

r  set[abc.Process]rD  rv   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~  rz  rn  )rD  r  re   re   rf   _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}   	transportrv   c                 C  s<   t  | _t | _t | _| j  ttj|	d d S Nr   )
r   r  r   rC   r  r  r   r0   	TransportZset_write_buffer_limitsrs   r  re   re   rf   connection_made$  s
    


zStreamProtocol.connection_mader  rv   c                 C  s,   |rt  | _|| j_| j  | j  d S rw   )r9   r   rP  r  r   r  rs   r  re   re   rf   connection_lost+  s
    
zStreamProtocol.connection_lostrg  )rk  rv   c                 C  s   | j | | j  d S rw   )r  r.  r  r   )rs   rk  re   re   rf   data_received3  s    zStreamProtocol.data_receivedrj   ru   c                 C  s   d| _ | j  dS r  )r  r  r   ry   re   re   rf   eof_received7  s    
zStreamProtocol.eof_receivedc                 C  s   t  | _d S rw   )r   rC   r  ry   re   re   rf   pause_writing<  s    zStreamProtocol.pause_writingc                 C  s   | j   d S rw   r  r   ry   re   re   rf   resume_writing?  s    zStreamProtocol.resume_writing)r_   r`   ra   ro  r   r  r  r  r  r  r  r  re   re   re   rf   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  re   re   rf   r  I  s    

z DatagramProtocol.connection_mader  c                 C  s   | j   | j  d S rw   )r  r   r  r  re   re   rf   r  O  s    
z DatagramProtocol.connection_lostrg  rH   )rk  addrrv   c                 C  s&   t |}| j||f | j  d S rw   )r>   r  r.  r  r   )rs   rk  r  re   re   rf   datagram_receivedS  s    z"DatagramProtocol.datagram_receivedr   c                 C  s
   || _ d S rw   )r   r  re   re   rf   error_receivedX  s    zDatagramProtocol.error_receivedru   c                 C  s   | j   d S rw   )r  clearry   re   re   rf   r  [  s    zDatagramProtocol.pause_writingc                 C  s   | j   d S rw   r  ry   re   re   rf   r  ^  s    zDatagramProtocol.resume_writing)r_   r`   ra   ro  r   r  r  r  r  r  r  re   re   re   rf   r  C  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  	_protocolrD   _receive_guard_send_guard_closedrs   r  r  re   re   rf   rt   c  s
    

zSocketStream.__init__socket.socketru   c                 C  s   | j dS Nsocketr  Zget_extra_infory   re   re   rf   _raw_socketj  s    zSocketStream._raw_socketrf  r'  rg  rh  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 rw   )r  r  r  is_setr  
is_closingr  Zresume_readingr   pause_readingrH  rm  r  popleft
IndexErrorr  r;   r   r<   len
appendleftr  )rs   ri  chunkleftoverre   re   rf   rl  n  s2    

,zSocketStream.receiver}   rq  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 rw   )r  rH  rm  r  r;   r  r   r  rr  r   r  r9   r  r   )rs   rT  r  re   re   rf   rt    s    
zSocketStream.sendc                   s&   z| j   W n ty    Y n0 d S rw   )r  	write_eofOSErrorry   re   re   rf   send_eof  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	   abortry   re   re   rf   rn    s    

zSocketStream.acloseN)rf  )
r_   r`   ra   rt   r  r  rl  rt  r  rn  re   re   re   rf   r  b  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 )_RawSocketMixinNr1  _receive_future_send_futureFr  
raw_socketc                 C  s   || _ td| _td| _d S )Nr  r  )_RawSocketMixin__raw_socketrD   r  r  rs   r  re   re   rf   rt     s    
z_RawSocketMixin.__init__ru   c                 C  s   | j S rw   )r  ry   re   re   rf   r    s    z_RawSocketMixin._raw_socketasyncio.AbstractEventLoopr&  r   c                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r}   rU  c                   s   `  j d S rw   )r  remove_readerr  rV  r   rs   re   rf   callback  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)r   r   r  
add_readerr  r   r<  rs   r   r  rV  re   r  rf   _wait_until_readable  s
    
z$_RawSocketMixin._wait_until_readablec                   sD   ddd fdd}t   }_ j|jd  || |S )Nr   r}   rU  c                   s   `  j d S rw   )r  remove_writerr  r  r  re   rf   r    s    z6_RawSocketMixin._wait_until_writable.<locals>.callback)r   r   r  
add_writerr  r   r<  r  re   r  rf   _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  ry   re   re   rf   rn    s    
z_RawSocketMixin.aclose)r_   r`   ra   r  ro  r  r  rt   r  r  r  r  rn  re   re   re   rf   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}   ru   c                   s8   | j  | jtj W d    n1 s*0    Y  d S rw   )r  r  r   r  SHUT_WRry   re   re   rf   r    s    zUNIXSocketStream.send_eofrf  r'  rg  rh  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 rw   )r   rH  rm  r  r  recvBlockingIOErrorr  r  r  r;   r9   r<   )rs   ri  r   rk  r  re   re   rf   rl    s    zUNIXSocketStream.receiverq  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 rw   )r   rH  rm  r  
memoryviewr  rt  r  r  r  r  r;   r9   )rs   rT  r   viewZ
bytes_sentr  re   re   rf   rt    s    zUNIXSocketStream.sendztuple[bytes, list[int]])msglenmaxfdsrv   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  r'  r   r   arrayrH  rm  r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r;   r9   r<   
SOL_SOCKET
SCM_RIGHTSr   	frombytesr  list)rs   r  r  r   fdsr   ancdataflagsr  r  
cmsg_level	cmsg_type	cmsg_datare   re   rf   receive_fds  s@    
"(zUNIXSocketStream.receive_fdszCollection[int | IOBase])r   r  rv   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  r'  r.  r   r  r  rH  rm  r  r  sendmsgr  r  r  r  r  r  r  r;   r9   )rs   r   r  r   ZfilenosfdZfdarrayr  re   re   rf   send_fds7  s2    

zUNIXSocketStream.send_fdsN)rf  )r_   r`   ra   r  rl  rt  r  r  re   re   re   rf   r    s
   'r  c                   @  sZ   e Zd ZU dZded< dZddddZedd	d
dZdd	ddZ	dd	ddZ
dS )TCPSocketListenerNr!  _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr0   r   ZBaseEventLoopr   ro   rD   _accept_guardr  re   re   rf   rt   ]  s    zTCPSocketListener.__init__ru   c                 C  s   | j S rw   )r  ry   re   re   rf   r  b  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  rH  rm  rF   r  ro   Zsock_acceptr  r   r   r  r   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYZconnect_accepted_socketr  r  )rs   client_sockZ_addrr  r  re   re   rf   acceptf  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  ro   r  r  r   r  r   r	   r   ry   re   re   rf   rn    s    
zTCPSocketListener.aclose)r_   r`   ra   r  ro  r  rt   r  r  r  rn  re   re   re   rf   r  Y  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   ro   rD   r  r  r  re   re   rf   rt     s    
zUNIXSocketListener.__init__r  ru   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 rw   )ro   r  r  _ry   re   rf   r     r   z+UNIXSocketListener.accept.<locals>.<lambda>)rH  rm  r  r  r  setblockingr  r  r   r   ro   r  r   r<  r  r  r;   r9   )rs   r   r  rV  r  re   ry   rf   r    s"    

zUNIXSocketListener.acceptr}   c                   s   d| _ | j  d S r  )r  r  r   ry   re   re   rf   rn    s    zUNIXSocketListener.aclosec                 C  s   | j S rw   )r  ry   re   re   rf   r    s    zUNIXSocketListener._raw_socketN)r_   r`   ra   rt   r  rn  r  r  re   re   re   rf   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  re   re   rf   rt     s
    

zUDPSocket.__init__r  ru   c                 C  s   | j dS r  r  ry   re   re   rf   r    s    zUDPSocket._raw_socketr}   c                   s   | j  sd| _| j   d S r  r  r  r  r   ry   re   re   rf   rn    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 rw   r  rH  rm  r  r  r  r  r  r  r   r  r  r  r;   r9   ry   re   re   rf   rl    s    zUDPSocket.receiverJ   rq  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 rw   r  rH  rm  r  r  r   r  r;   r  r  r9   sendtors  re   re   rf   rt    s    
zUDPSocket.sendN	r_   r`   ra   rt   r  r  rn  rl  rt  re   re   re   rf   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  re   re   rf   rt     s
    

zConnectedUDPSocket.__init__r  ru   c                 C  s   | j dS r  r  ry   re   re   rf   r    s    zConnectedUDPSocket._raw_socketr}   c                   s   | j  sd| _| j   d S r  r	  ry   re   re   rf   rn    s    
zConnectedUDPSocket.acloserg  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
  )rs   packetre   re   rf   rl    s    zConnectedUDPSocket.receiverq  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 rw   r  rs  re   re   rf   rt    s    
zConnectedUDPSocket.sendNr  re   re   re   rf   r    s   	r  c                   @  s*   e Zd ZddddZdddddZd	S )
UNIXDatagramSocketrK   ru   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 Nrf  )r   rH  rm  r  r  recvfromr  r  r  r  r;   r9   rs   r   rk  r  re   re   rf   rl    s    zUNIXDatagramSocket.receiver}   rq  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 rw   )r   rH  rm  r  r  r  r  r  r  r  r;   r9   rs   rT  r   r  re   re   rf   rt  .  s    zUNIXDatagramSocket.sendNr_   r`   ra   rl  rt  re   re   re   rf   r    s   r  c                   @  s*   e Zd ZddddZdddddZd	S )
ConnectedUNIXDatagramSocketrg  ru   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 r  )r   rH  rm  r  r  r  r  r  r  r  r;   r9   r  re   re   rf   rl  A  s    z#ConnectedUNIXDatagramSocket.receiver}   rq  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 rw   )r   rH  rm  r  r  rt  r  r  r  r  r;   r9   r  re   re   rf   rt  R  s    z ConnectedUNIXDatagramSocket.sendNr  re   re   re   rf   r  @  s   r  read_eventsz RunVar[dict[Any, asyncio.Event]]_read_eventswrite_events_write_eventsc                   @  s`   e Zd Zd dddZddddZddddZd	dd
dZddddZddddZdS )rC   ru   c                 C  s
   t | S rw   r   r_  re   re   rf   r   n  s    zEvent.__new__r}   c                 C  s   t  | _d S rw   )r   rC   _eventry   re   re   rf   rt   q  s    zEvent.__init__c                 C  s   | j   d S rw   )r  r   ry   re   re   rf   r   t  s    z	Event.setr   c                 C  s
   | j  S rw   )r  r  ry   re   re   rf   r  w  s    zEvent.is_setc                   s,   |   rt I d H  n| j I d H  d S rw   )r  rH  rm  r  r   ry   re   re   rf   r   z  s    z
Event.waitr4   c                 C  s   t t| jjS rw   )r4   r  r  _waitersry   re   re   rf   
statistics  s    zEvent.statisticsN)	r_   r`   ra   r   rt   r   r  r   r  re   re   re   rf   rC   m  s   rC   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_tokensrv   c                 C  s
   t | S rw   r   r   r   re   re   rf   r     s    zCapacityLimiter.__new__)r   c                 C  s   t  | _t | _|| _d S rw   )r   
_borrowersr   _wait_queuer   )rs   r   re   re   rf   rt     s    zCapacityLimiter.__init__r}   ru   c                   s   |   I d H  d S rw   )acquirery   re   re   rf   r-    s    zCapacityLimiter.__aenter__r   r  r  r~   c                   s   |    d S rw   )releaser   re   re   rf   r/    s    zCapacityLimiter.__aexit__c                 C  s   | j S rw   )r  ry   re   re   rf   r     s    zCapacityLimiter.total_tokensr  c                 C  st   t |tst|std|dk r,tdt|| j d}|| _| jrp|rp| jj	ddd }|
  |d8 }qBd S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1r   Flast)r  r'  r  isinfr;  r   maxr  r#  popitemr   )rs   r  Zwaiters_to_notifyeventre   re   rf   r     s    
r'  c                 C  s
   t | jS rw   )r  r"  ry   re   re   rf   borrowed_tokens  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S rw   )r  r  r"  ry   re   re   rf   available_tokens  s    z CapacityLimiter.available_tokensc                 C  s   |  t  d S rw   )acquire_on_behalf_of_nowaitr   ry   re   re   rf   acquire_nowait  s    zCapacityLimiter.acquire_nowaitr   )borrowerrv   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)r"  r   r#  r  r  r=   r   )rs   r0  re   re   rf   r.    s    
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S rw   )acquire_on_behalf_ofr   ry   re   re   rf   r$    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 rw   )rH  checkpoint_if_cancelledr.  r=   r   rC   r#  r   r|   popr"  r   cancel_shielded_checkpointr%  rs   r0  r+  re   re   rf   r1    s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S rw   )release_on_behalf_ofr   ry   re   re   rf   r%    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 tokensFr&  r   )	r"  r   r   r   r#  r  r  r*  r   r5  re   re   rf   r6    s    z$CapacityLimiter.release_on_behalf_ofr3   c                 C  s   t | j| jt| jt| jS rw   )r3   r,  r   tupler"  r  r#  ry   re   re   rf   r    s    zCapacityLimiter.statisticsN)r_   r`   ra   r  ro  r   rt   r-  r/  r  r   r  r,  r-  r/  r.  r$  r1  r%  r6  r  re   re   re   rf   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 rw   )
_signalsr   ro   r   _signal_queuer   r   r(  r   _handled_signals)rs   r:  re   re   rf   rt     s
    
z_SignalReceiver.__init__r   r}   )r   rv   c                 C  s&   | j | | j s"| jd  d S rw   )r<  r.  r(  r   r   )rs   r   re   re   rf   _deliver  s    
z_SignalReceiver._deliverru   c                 C  s2   t | jD ]"}| j|| j| | j| q
| S rw   )r   r;  ro   Zadd_signal_handlerr>  r=  r   )rs   sigre   re   rf   rz     s    z_SignalReceiver.__enter__r   r  r  rj   r~   c                 C  s   | j D ]}| j| qd S rw   )r=  ro   Zremove_signal_handler)rs   r   r   r   r?  re   re   rf   r     s    
z_SignalReceiver.__exit__c                 C  s   | S rw   re   ry   re   re   rf   	__aiter__  s    z_SignalReceiver.__aiter__c                   s4   t  I d H  | js*t | _| jI d H  | j S rw   )rH  rm  r<  r   r   r(  r  ry   re   re   rf   	__anext__  s
    
z_SignalReceiver.__anext__N)	r_   r`   ra   rt   r>  rz   r   r@  rA  re   re   re   rf   r9    s   
r9  c                      s0   e Zd Zdd fddZddddZ  ZS )	AsyncIOTaskInfor   r   c                   sL   t |}|d u rd }n|j}t t||| |  t	|| _
d S rw   )r   r   r  rF  rt   r  get_namer   weakrefrefr4  )rs   r   r   r  rL  re   rf   rt   .  s    
zAsyncIOTaskInfo.__init__r   ru   c                 C  sn   |    }sdS tjdkr(| rDdS nt|jtjrD|j rDdS t	
| }rj|j }rj|jph| S dS )NFrR   T)r4  r   r   r   r  r  r   r   r   r   r   r   r  r  )rs   r   r   r   re   re   rf   has_pending_cancellation8  s    

z(AsyncIOTaskInfo.has_pending_cancellation)r_   r`   ra   rt   rF  r[  re   re   rL  rf   rB  -  s   
rB  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)rh   
use_uvloopri   rj   r   rk   r}   )rh   rI  ri   rv   c                C  s8   |r|d u rdd l }|j}t||d| _g | _d | _d S )Nr   rg   )uvloopr   rT   _runnerr,  _runner_task)rs   rh   rI  ri   rJ  re   re   rf   rt   P  s    zTestRunner.__init__ru   c                 C  s   | j   |  | j | S rw   )rK  rz   r   Zset_exception_handler_exception_handlerry   re   re   rf   rz   `  s    
zTestRunner.__enter__r   r  r  r~   c                 C  s   | j ||| d S rw   )rK  r   r   re   re   rf   r   e  s    zTestRunner.__exit__r   c                 C  s
   | j  S rw   )rK  r   ry   re   re   rf   r   m  s    zTestRunner.get_loopr  r`  )r   r   rv   c                 C  s0   t |dtr"| j|d  n
|| d S )Nr   )r  r   r   r,  r.  Zdefault_exception_handler)rs   r   r   re   re   rf   rM  p  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  r[   )rs   rY   re   re   rf   _raise_async_exceptionsx  s    
z"TestRunner._raise_async_exceptionszOMemoryObjectReceiveStream[tuple[Awaitable[T_Retval], asyncio.Future[T_Retval]]])receive_streamrv   c                   s   | | j  |2 zh3 d H W \}}z|I d H }W n6 tyf } z| sR|| W Y d }~qd }~0 0 | s|| q6 W d    n1 s0    Y  W d    n1 s0    Y  d S rw   )rH  r|   r   r   r   )rs   rO  r   r   retvalr  re   re   rf   _run_tests_and_fixtures  s     z"TestRunner._run_tests_and_fixturesz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsr   )r   r   r=  rv   c                   sp   | j s<tttt tjf  d\| _}|  	| 
|| _ ||i |}|   }| j||f |I d H S r  )rL  r?   r.   r&   r$   r   r   rH  r   r   rQ  r   Zsend_nowait)rs   r   r   r=  rO  r   r   re   re   rf   _call_in_runner_task  s    
zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])fixture_funcr=  rv   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   rR  asendrN  StopAsyncIterationrn  r   )rs   rS  r=  ZasyncgenZfixturevaluere   re   rf   run_asyncgen_fixture  s    zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s(   |   | j|fi |}|   |S rw   )r   r   rR  rN  )rs   rS  r=  rP  re   re   rf   run_fixture  s
    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcr=  rv   c              
   C  s^   z |   | j|fi | W n0 tyP } z| j| W Y d }~n
d }~0 0 |   d S rw   )r   r   rR  r   r,  r.  rN  )rs   rX  r=  r  re   re   rf   run_test  s    "zTestRunner.run_test)r_   r`   ra   ro  rt   rz   r   r   rM  rN  rQ  rR  rV  rW  rY  re   re   re   rf   rG  M  s   
rG  c                   @  s   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dd0ddd1dd2d3d4Zedd	d5d6Zeddddd7d8d9Zed0dddd7d:d;Zed<d	d=d>Zed/d/dd?d@ddAdAdAdBdCddDdE	dFdGZedHddIdJdKZeddLdMdNdOdPdQdRZedSdTdUdVdWZedXdYdZd[d\ZedXdYdZd]d^Zed_dNdNdd`dadbdcZedXdddedfdgdhZedididididjdkdldmdndMdMdodpdqdrZ eddsdMdtdudvdwZ!edXddZdxdyZ"edXddZdzd{Z#ed|d	d}d~Z$edddddZ%edd	ddZ&edd	ddZ'edd	ddZ(edddddZ)d/S )rH  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r0  r`  r   )r   r   r=  optionsrv   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   ru   c                    sN   t tjt } | t td d t| < z  I d H W t| = S t| = 0 d S rw   )r0   r   r   r   set_namer   r   r   r   r   r   re   rf   wrapper  s    z#AsyncIOBackend.run.<locals>.wrapperrh   ri   rI  Fr   rg   )r   r   rJ  r   rT   r   )
r   r   r   r=  rZ  r]  rh   ri   rJ  runnerre   r\  rf   r     s    
zAsyncIOBackend.runr   ru   c                 C  s   t  S rw   )r   r_  re   re   rf   current_token  s    zAsyncIOBackend.current_tokenr   c                 C  s
   t   S rw   )r   r  r_  re   re   rf   rI    s    zAsyncIOBackend.current_timer{   c                 C  s   t S rw   )r   r_  re   re   rf   cancelled_exception_class  s    z(AsyncIOBackend.cancelled_exception_classr}   c                   s   t dI d H  d S r  r	   r_  re   re   rf   rm     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   re   re   rf   r2    s    z&AsyncIOBackend.checkpoint_if_cancelledc                   s<   t dd tdI d H  W d    n1 s.0    Y  d S )NTrB  r   )rF   r	   r_  re   re   rf   r4    s    z)AsyncIOBackend.cancel_shielded_checkpoint)delayrv   c                   s   t |I d H  d S rw   ra  )r   rb  re   re   rf   r	     s    zAsyncIOBackend.sleepFr   r   rF   r   c                C  s   t ||dS )Nr   rE   r   re   re   rf   create_cancel_scope   s    z"AsyncIOBackend.create_cancel_scopec                 C  sh   zt t  j}W n ty(   tj Y S 0 tj}|rdt||j}|jrRtj }qdq0|j	r\qdq0|j
}q0|S rw   )r   r   r   r   r  r  minr   r   r   r   )r   r   r   re   re   rf   current_effective_deadline&  s     
z)AsyncIOBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S rw   )r+  r_  re   re   rf   create_task_group<  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t  S rw   rB   r_  re   re   rf   create_event@  s    zAsyncIOBackend.create_eventzabc.CapacityLimiterr  c                 C  s   t |S rw   r@   r!  re   re   rf   create_capacity_limiterD  s    z&AsyncIOBackend.create_capacity_limiterNz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)r   r   abandon_on_cancellimiterrv   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 )NrB  r   )rm  r\  r   r]  LookupErrorr   r   current_default_thread_limiterrF   r   r   r   rC  r   r   r<  rY  r3  rI  rJ  rZ  r  r   Zremove_done_callbackr   r   sniffiocurrent_async_library_cvarr   rG  rW  )r   r   r   ri  rj  rE  rD  r  r   r   ZworkernowZexpired_workerr   Zworker_scopere   re   rf   run_sync_in_worker_threadH  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   )r8   rS  r  r   r  r   r   )r   r  re   re   rf   check_cancelled  s    zAsyncIOBackend.check_cancelled)r   r   tokenrv   c           	        sX   ddd fdd}t t|}t }|tjjd |tj}|t	j
||}| S )NrF   r   )r  rv   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   rX  r   
concurrentZfuturesr   )r  Z__tracebackhide__r   r  r\  re   rf   task_wrapper  s    *z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperr   )r0   r   r   r   rm  rn  r   r8   rS  r   Zrun_coroutine_threadsaferN  )	r   r   r   rr  rt  r   r   r]  rV  re   r\  rf   run_async_from_thread  s    

z$AsyncIOBackend.run_async_from_threadc                   s@   t dd fdd}t tt|}||  S )Nr}   ru   c               
     s^   zt jd    W n: tyX }  z"|  t| tsD W Y d } ~ n
d } ~ 0 0 d S )Nr   )rm  rn  r   r   r|   r   r  r   )r  r   rV  r   re   rf   r]    s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r0   r   r   rN  )r   r   r   rr  r]  r   re   rv  rf   ra    s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S rw   )r^  r_  re   re   rf   create_blocking_portal  s    z%AsyncIOBackend.create_blocking_portal)cwdenvstart_new_sessionz#str | bytes | Sequence[str | bytes]zint | IO[Any] | Nonezstr | bytes | PathLike | NonezMapping[str, str] | Noneru  )	commandshellr  r  r  rx  ry  rz  rv   c             	     s   |   I d H  |r8tjtd|||||||dI d H }	n tj|||||||dI d H }	|	jrht|	jnd }
|	jr|t|	jnd }|	j	rt|	j	nd }t
|	|
||S )Nstr | bytes)r  r  r  rx  ry  rz  )rm  r   Zcreate_subprocess_shellr0   Zcreate_subprocess_execr  rp  r  rd  r  ru  )r   r{  r|  r  r  r  rx  ry  rz  r  Zstdin_streamZstdout_streamZstderr_streamre   re   rf   open_process  s0    

zAsyncIOBackend.open_processr  r  c                 C  s&   t t|dd t tt| d S )Nz AnyIO process pool shutdown taskr:  )r   r  r   r<  r   r  )r   rD  re   re   rf   #setup_process_pool_exit_at_shutdown  s    z2AsyncIOBackend.setup_process_pool_exit_at_shutdownr   r'  zIPSockAddrType | Noner  )hostportlocal_addressrv   c                   s@   t ttjtf t jt|||dI d H \}}|  t||S )N)
local_addr)	r0   r.   r   r  r  r   create_connectionr  r  )r   r  r  r  r  r  re   re   rf   connect_tcp  s    
zAsyncIOBackend.connect_tcpr}  zabc.UNIXSocketStream)pathrv   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 rw   r  r  r   r  re   rf   r   	  r   z-AsyncIOBackend.connect_unix.<locals>.<lambda>)rm  r   r  AF_UNIXr  connectr  r   r   r  r   r<  r|   r   r  )r   r  rV  re   r  rf   connect_unix	  s    
zAsyncIOBackend.connect_unixr  rI   )sockrv   c                 C  s   t |S rw   )r  r   r  re   re   rf   create_tcp_listener	  s    z"AsyncIOBackend.create_tcp_listenerc                 C  s   t |S rw   )r  r  re   re   rf   create_unix_listener	  s    z#AsyncIOBackend.create_unix_listenerr   zUDPSocket | ConnectedUDPSocket)familyr  remote_address
reuse_portrv   c                   sP   t  jt||||dI d H \}}|jr4|  |j|sBt||S t||S d S )N)r  Zremote_addrr  r  )r   Zcreate_datagram_endpointr  r   r   r  r  )r   r  r  r  r  r  r  re   re   rf   create_udp_socket 	  s    
z AsyncIOBackend.create_udp_socketzstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocket)r  remote_pathrv   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 rw   r  r  r  re   rf   r   F	  r   z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)rm  r   r  r  r   r   r  r   r<  r|   r   r  r  )r   r  r  rV  re   r  rf   create_unix_datagram_socket8	  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  rv   c                  s   t  j||||||dI d H S )Nr  )r   getaddrinfo)r   r  r  r  r  r  r  re   re   rf   r  P	  s    zAsyncIOBackend.getaddrinforH   ztuple[str, str])sockaddrr  rv   c                   s   t  ||I d H S rw   )r   getnameinfo)r   r  r  re   re   rf   r  g	  s    zAsyncIOBackend.getnameinfoc              
     s   |   I d H  zt }W n  ty:   i }t| Y n0 ||rPtdd t }t  }||< |	||j z6|
 I d H  W ||d d ur|| d}qd}n&||d d ur|| d}nd}0 |std S )Nr  TF)rm  r  r   rk  r   r:   r   r   rC   r  r   r3  r  r;   )r   r  r  r   r+  readablere   re   rf   wait_socket_readablem	  s.    



z#AsyncIOBackend.wait_socket_readablec              
     s   |   I d H  zt }W n  ty:   i }t| Y n0 ||rPtdd t }t  }||< |	|
 |j z6| I d H  W ||d d ur|| d}qd}n&||d d ur|| d}nd}0 |std S )Nr  TF)rm  r  r   rk  r   r:   r   r   rC   r  r  r   r3  r  r;   )r   r  r  r   r+  writablere   re   rf   wait_socket_writable	  s.    



z#AsyncIOBackend.wait_socket_writablerA   c                 C  s8   z
t  W S  ty2   td}t | | Y S 0 d S )N(   )r8  r   rk  rA   r   )r   rj  re   re   rf   rl  	  s    

z-AsyncIOBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])r:  rv   c                 G  s   t |S rw   )r9  )r   r:  re   re   rf   open_signal_receiver	  s    z#AsyncIOBackend.open_signal_receiverr5   c                 C  s
   t t S rw   )rB  r   r_  re   re   rf   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 re   )r   rB  )r   r   re   re   rf   r   	  r   z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   r_  re   re   rf   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?)rm  r   r   r  r   r	   )r   Z	this_taskr   r  re   re   rf   wait_all_tasks_blocked	  s    
z%AsyncIOBackend.wait_all_tasks_blockedrG  )rZ  rv   c                 C  s   t f i |S rw   )rG  )r   rZ  re   re   rf   create_test_runner	  s    z!AsyncIOBackend.create_test_runner)FN)N)r   )*r_   r`   ra   classmethodr   r_  rI  r`  rm  r2  r4  r	   r  r  rc  re  rf  rg  rh  rp  rq  ru  ra  rw  r~  r  r  r  r  r  r  r  r  r  r  r  rl  r  r  r  r  r  re   re   re   rf   rH    s     :	$'	   rH  )
__future__r   r  r   concurrent.futuresrs  r  r  r   r   rD  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   collectionsr   r   collections.abcr   r   r   r   
contextlibr   r   r   r   dataclassesr   	functoolsr   r   inspectr   r   r   r   ior   osr   rG  r   r   r   r   r    r!   typesr"   typingr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   rm  r9  r3   r4   r5   r6   Z_core._eventloopr7   r8   Z_core._exceptionsr9   r:   r;   r<   r=   Z_core._socketsr>   Z_core._streamsr?   Z_core._synchronizationrA   ZBaseCapacityLimiterrC   Z	BaseEventrD   Z_core._tasksrF   ZBaseCancelScoperG   rH   rI   rJ   rK   ZlowlevelrL   Zstreams.memoryrM   rN   r   rQ   typing_extensionsrT   rU   rV   enumrW   rX   rY   rZ   Zexceptiongroupr[   Enumr\   r   r   r   r   r   r   r   ro  r   r   r   r   r   r   Z
TaskStatusr%  r  r+  r|   Z_Retval_Queue_TyperC  r\  r]  r^  ZByteReceiveStreamrd  ZByteSendStreamrp  ru  r  r  Protocolr  r  r  r  r  r  r  r  r  r  r  r  r  r8  r9  rB  rG  rH  Zbackend_classre   re   re   rf   <module>   s   $	@ 
 y
 "K9&U.t<%02$$r/  
   |