o
    #6d                    @  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	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 d dlmZmZ d d	lmZmZmZmZmZmZ d d
lmZ d dl m!Z! d dl"m#Z# d dlm$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d dl=Z=ddl>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZGmHZH ddlImJZJmKZKmLZLmMZMmNZN ddlImOZP ddlQmRZRmSZS ddlTmUZV ddlTmWZX ddlTmYZY ddlZm[Z\ ddlBm]Z]m^Z^ ddl_m`Z` ejadkrdd$d%Zbndd&d%Zbd d'lmcZcmdZdmeZemfZf d d(lmgZh dd*d+Zie8d,Zje8d-d.d/Zkelejmd0Zne`d1Zod2epd1< dd3d4Zqdd8d9Zre< ZsefZtdd;d<ZuddAdBZvdCdCddDddIdJZgejwZwejxZxG dKdL dLe\Z[ddMdNZyddOdPZzddQdRZ{ddTdUZ|ddVdWZ}G dXdY dYZ~e< ZG dZd[ d[ePZOG d\d] d]eBjZG d^d_ d_eBjZe7e5ej e5e f ZG d`da dae'Ze`dbZdcepdb< e`ddZdeepdd< dCddfddkdlZddmddpdqZddrdsZG dtdu dueBjZedCdvG dwdx dxeBjZedCdvG dydz dzeBjZedCdvG d{d| d|eBjZdddCd}dddZdddZdddZdddZG dd dejZG dd dejZG dd deBjZG dd deBjZG dd deBjZG dd deBjZG dd deBjZG dd deBjZ	ddddZdddZdddZd d d d ddddZd dddǄZe`dȃZdepd< e`d˃Zdepd< dddЄZddd҄ZG ddԄ deXZWG ddք deVZUe`d׃Zdepd< dddڄZG dd܄ deDd Zddd߄ZdddZdddZdddZdddZG dd deBjZdS (      )annotationsN)_run_until_complete_cb)OrderedDictdeque)Future)Contextcopy_context)	dataclass)partialwraps)CORO_RUNNINGCORO_SUSPENDEDGEN_RUNNINGGEN_SUSPENDEDgetcoroutinestategetgeneratorstate)IOBase)PathLike)Queue)AddressFamily
SocketKind)Thread)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
Collection	Coroutine	GeneratorIterableMappingOptionalSequenceTupleTypeVarUnioncast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)DeprecatedAsyncContextManagerDeprecatedAwaitable)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream
WouldBlock)ExceptionGroup)GetAddrInfoReturnTypeconvert_ipv6_sockaddr)CapacityLimiter)Event)ResourceGuard)CancelScope)IPSockAddrTypeUDPPacketType)RunVar      taskasyncio.TaskreturnGenerator | Awaitable[Any]c                 C  s   |   S N)get_cororE    rL   oC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\anyio/_backends/_asyncio.pyrJ   H      rJ   c                 C     | j S rI   )_cororK   rL   rL   rM   rJ   M   s   )	all_taskscreate_taskcurrent_taskget_running_loop)runIterable[Callable]c                 C  s   dd | j D S )Nc                 S  s   g | ]\}}|qS rL   rL   ).0cbcontextrL   rL   rM   
<listcomp>V       z'_get_task_callbacks.<locals>.<listcomp>)
_callbacksrK   rL   rL   rM   _get_task_callbacksU      r]   T_RetvalT_contraT)contravariantget_name
_root_taskzRunVar[asyncio.Task | None]c                  C  s   t d } | d ur|  s| S t D ]'}|jr9| s9t|D ]}|tu s-t|dd dkr8t | |    S qqt	t
jt }t|}|rg|j}|r\|jd ur\|j}|r\|jd usR|d urgt	t
j|jS |S )N
__module__zuvloop.loop)rc   getdonerQ   r\   r]   r   getattrsetr(   asyncioTaskrS   _task_statescancel_scope_parent_scope
_host_task)	root_taskrE   rX   staterl   rL   rL   rM   find_root_taskc   s,   



rq   funcr   strc                 C  s0   t | dd }t | dd }ddd ||fD S )Nrd   __qualname__.c                 S  s   g | ]}|r|qS rL   rL   )rW   xrL   rL   rM   rZ      r[   z%get_callable_name.<locals>.<listcomp>)rg   join)rr   modulequalnamerL   rL   rM   get_callable_name   s   rz   boolc                 C  sv   t ttttf t| }z	t|ttfv W S  ty:   ztt t	|t
tfv W  Y S  ty9   td|  dw w )zBReturn ``True`` if the task has been started and has not finished.zCannot determine if task z has started or not)r(   r   r   rJ   r   r   r   AttributeErrorr   r    r   r   	Exception)rE   cororL   rL   rM   _task_started   s   r   policy&asyncio.AbstractEventLoopPolicy | None
use_uvloopNonec                 C  st   | d u r-|r-t jjdkr-zdd l}W n	 ty   Y nw ttjdr)t|jj	dr-|
 } | d ur8t|  d S d S )Ncpythonr   shutdown_default_executor)sysimplementationnameuvloopImportErrorhasattrri   AbstractEventLooploopZLoopZEventLoopPolicyset_event_loop_policy)r   r   r   rL   rL   rM   _maybe_set_event_loop_policy   s   r   F)debugr   r   "Callable[..., Awaitable[T_Retval]]argsobjectr   c                  s0   t d fdd}t|| t| |dS )NrG   r_   c                    sX   t tjt } td td }|t| < tr| |j	 z  I d H W t| = S t| = w rI   )
r(   ri   rj   rS   	TaskStaterz   rk   _native_task_namesset_namer   )rE   
task_stater   rr   rL   rM   wrapper   s   zrun.<locals>.wrapper)r   )rG   r_   )r   r   
native_run)rr   r   r   r   r   r   rL   r   rM   rU      s   
rU   c                   @  s   e Zd Zejddd/dd	Zejdfd0d
dZd1ddZd2ddZd3ddZ	d4ddZ
d4ddZd4ddZd3d d!Zd5d#d$Zed6d%d&Zejd7d(d&Zed3d)d*Zed3d+d,Zejd8d-d,Zd.S )9r>   F)deadlineshieldr   floatr   r{   rG   c                C  
   t | S rI   r   __new__)clsr   r   rL   rL   rM   r      s   
zCancelScope.__new__c                 C  sH   || _ || _d | _d| _d| _d | _d | _t | _d | _	d| _
d| _d S )NFr   )	_deadline_shieldrm   _cancel_called_active_timeout_handle_cancel_handlerh   _tasksrn   _timeout_expired_cancel_calls)selfr   r   rL   rL   rM   __init__   s   
zCancelScope.__init__c                 C  s   | j rtdttjt  | _}| j| zt	| }W n t
y8   tr*| nd }td || }|t	|< Y nw |j| _| |_|   d| _ | jrN|   | S )Nz;Each CancelScope may only be used for a single 'with' blockT)r   RuntimeErrorr(   ri   rj   rS   rn   r   addrk   KeyErrorr   rb   r   rl   rm   _timeoutr   _deliver_cancellation)r   Z	host_taskr   Z	task_namerL   rL   rM   	__enter__   s(   zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonebool | Nonec                 C  s   | j stdt | jurtd| jd usJ t| j}|d u s'|j| ur+tdd| _ | jr9| j  d | _| j	
| j | j|_| jrK|   |d urwt|trW|jn|g}tdd |D rw| jrj|  S | jsod S |  sw|  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 scopeFc                 s  s    | ]}t |tV  qd S rI   )
isinstanceCancelledError)rW   excrL   rL   rM   	<genexpr>3  s    z'CancelScope.__exit__.<locals>.<genexpr>)r   r   rS   rn   rk   re   rl   r   cancelr   removerm   r   _deliver_cancellation_to_parentr   r8   
exceptionsallr   	_uncancelr   _parent_cancelled)r   r   r   r   Zhost_task_stater   rL   rL   rM   __exit__  s>   
zCancelScope.__exit__c                 C  sJ   t jdk s
| jd u rd| _dS t| jD ]}| j  qd| _| j  S )N)rC      r   T)r   version_inforn   r   rangeZuncancel
cancelling)r   irL   rL   rM   r   ?  s   zCancelScope._uncancelr   c                 C  sL   | j tjkr$t }| | j krd| _|   d S || j | j| _	d S d S NT)
r   mathinfrT   timer   r   call_atr   r   )r   r   rL   rL   rM   r   K  s   zCancelScope._timeoutc                 C  s   d}t  }| jD ]8}|jrqt| j}|| ur&|du s|jrn!|j}|| usd}||ur@|| ju s5t|r@|  j	d7  _	|
  q|rMt | j| _dS d| _dS )z
        Deliver cancellation to directly contained tasks and nested cancel scopes.

        Schedule another run at the end if we still have tasks eligible for cancellation.
        FNT   )rS   r   _must_cancelrk   rl   r   rm   rn   r   r   r   rT   	call_soonr   r   )r   Zshould_retrycurrentrE   rl   rL   rL   rM   r   T  s,   



z!CancelScope._deliver_cancellationc                 C  sT   | j }d}|dur|jr|jdu r|}|jrn|j }|dus	|dur(|  dS dS )zIStart cancellation effort in the farthest directly cancelled parent scopeN)rm   r   r   r   r   )r   scopeZscope_to_cancelrL   rL   rM   r   x  s   
z+CancelScope._deliver_cancellation_to_parentc                 C  s6   | j }|d ur|js|jrdS |j }|d ur|jr
dS )NTF)rm   r   r   )r   rl   rL   rL   rM   r     s   zCancelScope._parent_cancelledr0   c                 C  s>   | j s| jr| j  d | _d| _ | jd ur|   t| jS r   )r   r   r   rn   r   r0   r   rL   rL   rM   r     s   


zCancelScope.cancelc                 C  rO   rI   )r   r   rL   rL   rM   r        zCancelScope.deadlinevaluec                 C  sD   t || _| jd ur| j  d | _| jr| js |   d S d S d S rI   )r   r   r   r   r   r   r   r   r   rL   rL   rM   r     s   


c                 C  rO   rI   )r   r   rL   rL   rM   cancel_called  r   zCancelScope.cancel_calledc                 C  rO   rI   )r   r   rL   rL   rM   r     r   zCancelScope.shieldc                 C  s(   | j |kr|| _ |s|   d S d S d S rI   )r   r   r   rL   rL   rM   r     s   
N)r   r   r   r{   rG   r>   )r   r   r   r{   )rG   r>   r   r   r   r   r   r   rG   r   rG   r{   rG   r   rG   r0   rG   r   r   r   rG   r   )r   r{   rG   r   )__name__rd   rt   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   setterr   r   rL   rL   rL   rM   r>      s,    


4

	
$

	r>   c                     s   t dI d H  d S Nr   )sleeprL   rL   rL   rM   
checkpoint     r   c                    sn   t  } | d u r
d S zt|  j}W n
 ty   Y d S w |r5|jr)tdI d H  n|jr.d S |j}|sd S d S r   )rS   rk   rl   r   r   r   r   rm   )rE   rl   rL   rL   rM   checkpoint_if_cancelled  s    r   c                     s@   t dd tdI d H  W d    d S 1 sw   Y  d S )NTr   r   )r>   r   rL   rL   rL   rM   cancel_shielded_checkpoint  s   "r   r   c                  C  sn   zt t  j} W n ty   tj Y S w tj}| r5t|| j}| jr*tj }	 |S | j	r0	 |S | j
} | s|S rI   )rk   rS   rl   r   r   r   minr   r   r   rm   )rl   r   rL   rL   rM   current_effective_deadline  s$   

r   c                   C  s
   t   S rI   )rT   r   rL   rL   rL   rM   current_time     
r   c                   @  s   e Zd ZdZdZ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   rl   r   
int | Noner   
str | Nonerl   CancelScope | Nonec                 C  s   || _ || _|| _d S rI   r   )r   r   r   rl   rL   rL   rM   r     s   
zTaskState.__init__N)r   r   r   r   rl   r   )r   rd   rt   __doc__	__slots__r   rL   rL   rL   rM   r     s    r   c                      s   e Zd Zd fddZ  ZS )r8   r   list[BaseException]c                   s   t    || _d S rI   )superr   r   r   r   	__class__rL   rM   r        

zExceptionGroup.__init__)r   r   )r   rd   rt   r   __classcell__rL   rL   r   rM   r8     s    r8   c                   @  s"   e Zd ZdddZddddZdS )_AsyncioTaskStatusfutureasyncio.Futurer   intc                 C  s   || _ || _d S rI   )_future
_parent_id)r   r   r   rL   rL   rM   r     s   
z_AsyncioTaskStatus.__init__Nr   T_contra | NonerG   r   c                 C  sJ   z| j | W n tjy   tdd w ttjt }| jt	| _
d S )Nz.called 'started' twice on the same task status)r   
set_resultri   InvalidStateErrorr   r(   rj   rS   r  rk   r   )r   r   rE   rL   rL   rM   started  s   z_AsyncioTaskStatus.started)r   r   r   r   rI   )r   r  rG   r   )r   rd   rt   r   r  rL   rL   rL   rM   r     s    
r   c                   @  sp   e Zd Zd*ddZd+ddZd,ddZed-ddZd.ddZ	d/d0d#d$Z	dd%d1d&d'Z
dd%d1d(d)ZdS )2	TaskGrouprG   r   c                 C  s   t  | _d| _g | _d S )NF)r>   rl   r   _exceptionsr   rL   rL   rM   r   *  s   
zTaskGroup.__init__c                   s   | j   d| _| S r   )rl   r   r   r   rL   rL   rM   
__aenter__/  s   
zTaskGroup.__aenter__r   r   r   r   r   r   r   c              
     s  | j |||}|d ur| j   | j| | j jr<zt| j jI d H  W n tjy7   | j   Y nw | j jsd| _	| j 
 sK| | j}n| j}z't|dkrdtdd |D r`tt||rp|d |urs|d W |S W |S  ty } zd |_ d }~ww )NFr   c                 s  s"    | ]}t |to|j V  qd S rI   )r   r   r   )rW   erL   rL   rM   r   M  s    
z&TaskGroup.__aexit__.<locals>.<genexpr>r   )rl   r   r   r  appendr   ri   waitr   r   r   _filter_cancellation_errorslenr   r8   BaseException__context__)r   r   r   r   Zignore_exceptionr   r   rL   rL   rM   	__aexit__4  sD   

zTaskGroup.__aexit__r   Sequence[BaseException]r   c                 C  s   g }| D ]L}t |trCt|j}t|dkr|| qt|dkr+||d  q|rBt|}|j|_|j|_|j	|_	|| qt |t
rK|jrP|| q|S Nr   r   )r   r8   r  r  r   r  r
  	__cause__r  __traceback__r   r   )r   Zfiltered_exceptionsr   Znew_exceptionsnew_excrL   rL   rM   r  ^  s&   


z%TaskGroup._filter_cancellation_errorsr~   r   task_status_futureasyncio.Future | Nonec              
     s   d }}t tjt }zWz|I d H  W n+ ty? } z|d u s$| r0| j| | j	  n|
| W Y d }~nd }~ww |d urO| sO|
td W || jjv rb| jj| t|= d S d S || jjv rt| jj| t|= w )NT2Child exited without calling task_status.started())r(   ri   rj   rS   r  rf   r  r
  rl   r   set_exceptionr   r   r   rk   )r   r~   r  Z__traceback_hide__Z__tracebackhide__rE   r   rL   rL   rM   _run_wrapped_tasku  s.   

zTaskGroup._run_wrapped_taskNrr   Callable[..., Awaitable[Any]]r   tupler   r   rF   c                   s$  d fdd} j stdi }|d u rt|nt|}tr#||d< i }r8tt }tt jj	|d	< nt jj	}||i |}	t
|	sRtd
| dt|	d o]t|	d }
|
setjdk rk |	}	t|	fi |}|
stjdkr|| t|| jdt|<  jj| |S )N_taskrF   rG   r   c              
     s   |  j jv sJ  j j|  t| = z|  }W n# ty; } zt|jtr/|j}t|jts&|}W Y d }~nd }~ww |d ur\d u sH rU j	
|  j   d S | d S d urm sotd d S d S d S )Nr  )rl   r   r   rk   	exceptionr   r   r  rf   r  r
  r   r  r   )r  r   r	  r   r  rL   rM   	task_done  s,   z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.r   Ztask_statusz Expected an async function, but z appears to be synchronouscr_framegi_framerB   r   )r  rF   rG   r   )r   r   rz   rs   r   idrS   r   rl   rn   ri   iscoroutine	TypeErrorr   r   r   r  rR   add_done_callbackr   rk   r   r   )r   rr   r   r   r  r   optionskwargsr   r~   Zforeign_cororE   rL   r  rM   _spawn  s@   





zTaskGroup._spawnr   c                G  s   |  ||| d S rI   )r)  )r   rr   r   r   rL   rL   rM   
start_soon  s   zTaskGroup.start_soonc             	     sn   t  }| ||||}tdd z|I d H W W  d    S  ty,   |   w 1 s0w   Y  d S )NTr   )ri   r   r)  r>   r   r   )r   rr   r   r   r   rE   rL   rL   rM   start  s   
zTaskGroup.startr   )rG   r  r   )r   r  rG   r   )r~   r   r  r  rG   r   rI   )
rr   r  r   r  r   r   r  r  rG   rF   )rr   r  r   r   r   r   rG   r   )r   rd   rt   r   r  r  staticmethodr  r  r)  r+  r,  rL   rL   rL   rM   r  )  s    


*
Ir  c                      sB   e Zd ZdZd fdd	ZdddZdddZddddZ  ZS ) WorkerThread
   ro   rF   workersset[WorkerThread]idle_workersdeque[WorkerThread]c                   sD   t  jdd || _|| _|| _|j| _td| _t	 | _
d| _d S )NzAnyIO worker threadr*  r*   F)r   r   ro   r0  r2  _loopr   r   queuer   
idle_sincestopping)r   ro   r0  r2  r   rL   rM   r     s   
zWorkerThread.__init__r   r   resultr   r   r   rG   r   c                 C  sf   t  | _| js| j|  | s1|d ur*t|tr#td}||_	|}|
| d S || d S d S )Nzcoroutine raised StopIteration)r   r6  r7  r2  r
  	cancelledr   StopIterationr   r  r  r  )r   r   r8  r   r  rL   rL   rM   _report_result  s   
zWorkerThread._report_resultc           	      C  s   t d[ | jt_	 | j }|d u r	 W d    d S |\}}}}| sYd }d }z|j|g|R  }W n tyI } z|}W Y d }~nd }~ww | j sY| j	| j
||| | j  q
1 sbw   Y  d S )Nri   )r1   r   r2   r5  re   r9  rU   r  	is_closedcall_soon_threadsafer;  r   )	r   itemrY   rr   r   r   r8  r  r   rL   rL   rM   rU     s0   




zWorkerThread.runNfasyncio.Task | Nonec                 C  sF   d| _ | jd  | j|  z	| j|  W d S  ty"   Y d S w r   )r7  r5  
put_nowaitr0  discardr2  r   
ValueError)r   r?  rL   rL   rM   stop2  s   zWorkerThread.stop)ro   rF   r0  r1  r2  r3  )r   r   r8  r   r   r   rG   r   r   rI   )r?  r@  rG   r   )	r   rd   rt   MAX_IDLE_TIMEr   r;  rU   rD  r   rL   rL   r   rM   r.    s    

r.  _threadpool_idle_workerszRunVar[deque[WorkerThread]]_threadpool_workerszRunVar[set[WorkerThread]])cancellablelimiterCallable[..., T_Retval]rH  rI  CapacityLimiter | Nonec             	     s  t  I d H  z
t }t }W n ty*   t }t }t| t| Y nw |p/t 4 I d H  t| dp t	
 }t }|s[t|||}|  || ||j n%| }t }	|r|	|d j tjk ron| }
|
j|
j |
  |sdt }|tjjd  |j|| ||f |I d H W  d    W  d   I d H  S 1 sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nr   r   )r   rF  re   rG  LookupErrorr   rh   current_default_thread_limiterr>   ri   r   rq   r.  r,  r   r&  rD  popr   r6  rE  popleftro   remove_done_callbackr   rU   sniffioZcurrent_async_library_cvarr5  rA  )rr   rH  rI  r   r2  r0  r   ro   ZworkernowZexpired_workerrY   rL   rL   rM   run_sync_in_worker_threadB  sJ   

.rS  r   r    asyncio.AbstractEventLoop | Nonec                  s<   t d fdd}t |ptj}||  S )NrG   r   c               
     sR   z
    W d S  ty( }  z|  t| ts W Y d } ~ d S d } ~ ww rI   )r  r  r  r   r}   )r   r   r?  rr   rL   rM   r   u  s   

z%run_sync_from_thread.<locals>.wrapperr   )r   r   r2   r   r=  r8  )rr   r   r   r   rL   rV  rM   run_sync_from_threadp  s   

rW  c                 G  s   t | | tj}| S rI   )ri   run_coroutine_threadsafer2   r   r8  )rr   r   r?  rL   rL   rM   run_async_from_thread  s   
rY  c                      s2   e Zd ZdddZd fddZdddZ  ZS )BlockingPortalrG   c                 C  r   rI   r   r   rL   rL   rM   r     r   zBlockingPortal.__new__r   c                   s   t    t | _d S rI   )r   r   rT   r4  r   r   rL   rM   r     s   
zBlockingPortal.__init__rr   r   r   r  r(  dict[str, Any]r   r   r   r   c              	   C  s*   t t| jj|d| j||||| jd d S )Nr*  rT  )rW  r
   Z_task_groupr+  Z
_call_funcr4  )r   rr   r   r(  r   r   rL   rL   rM   _spawn_task_from_thread  s   
z&BlockingPortal._spawn_task_from_thread)rG   rZ  r   )rr   r   r   r  r(  r\  r   r   r   r   rG   r   )r   rd   rt   r   r   r]  r   rL   rL   r   rM   rZ    s    
rZ  )eqc                   @  s,   e Zd ZU ded< dddd	ZdddZdS )StreamReaderWrapperzasyncio.StreamReader_stream   	max_bytesr   rG   bytesc                   s    | j |I d H }|r|S trI   )r`  readr6   )r   rb  datarL   rL   rM   receive  s
   zStreamReaderWrapper.receiver   c                      | j   d S rI   )r`  feed_eofr   rL   rL   rM   aclose     zStreamReaderWrapper.acloseNra  rb  r   rG   rc  r   )r   rd   rt   __annotations__rf  ri  rL   rL   rL   rM   r_    s   
 r_  c                   @  s*   e Zd ZU ded< dddZdd	d
ZdS )StreamWriterWrapperzasyncio.StreamWriterr`  r>  rc  rG   r   c                   s"   | j | | j  I d H  d S rI   )r`  writedrainr   r>  rL   rL   rM   send  s   zStreamWriterWrapper.sendc                   rg  rI   )r`  closer   rL   rL   rM   ri    rj  zStreamWriterWrapper.acloseNr>  rc  rG   r   r   )r   rd   rt   rm  rr  ri  rL   rL   rL   rM   rn    s   
 
rn  c                   @  s   e Zd ZU ded< ded< ded< ded< d$d
dZd%ddZd$ddZd$ddZd&ddZe	d%ddZ
e	d'ddZe	d(ddZe	d)dd Ze	d)d!d"Zd#S )*Processzasyncio.subprocess.Process_processzStreamWriterWrapper | None_stdinzStreamReaderWrapper | None_stdout_stderrrG   r   c                   sV   | j r| j  I d H  | jr| j I d H  | jr"| j I d H  |  I d H  d S rI   )rw  ri  rx  ry  r  r   rL   rL   rM   ri    s   zProcess.acloser   c                   s   | j  I d H S rI   )rv  r  r   rL   rL   rM   r    s   zProcess.waitc                 C     | j   d S rI   )rv  	terminater   rL   rL   rM   r{       zProcess.terminatec                 C  rz  rI   )rv  killr   rL   rL   rM   r}    r|  zProcess.killsignalc                 C  s   | j | d S rI   )rv  send_signal)r   r~  rL   rL   rM   r    r^   zProcess.send_signalc                 C     | j jS rI   )rv  pidr   rL   rL   rM   r       zProcess.pidr   c                 C  r  rI   )rv  
returncoder   rL   rL   rM   r    r  zProcess.returncodeabc.ByteSendStream | Nonec                 C  rO   rI   )rw  r   rL   rL   rM   stdin  r   zProcess.stdinabc.ByteReceiveStream | Nonec                 C  rO   rI   )rx  r   rL   rL   rM   stdout  r   zProcess.stdoutc                 C  rO   rI   )ry  r   rL   rL   rM   stderr  r   zProcess.stderrNr   rG   r   )r~  r   rG   r   )rG   r   )rG   r  )rG   r  )r   rd   rt   rm  ri  r  r{  r}  r  r   r  r  r  r  r  rL   rL   rL   rM   ru    s(   
 





ru  )cwdenvstart_new_sessioncommand#str | bytes | Sequence[str | bytes]shellr  int | IO[Any] | Noner  r  r  str | bytes | PathLike | Noner  Mapping[str, str] | Noner  c             	     s   t  I d H  |r tjttttf | ||||||dI d H }ntj| ||||||dI d H }|jr8t	|jnd }	|j
rBt|j
nd }
|jrLt|jnd }t||	|
|S )N)r  r  r  r  r  r  )r   ri   create_subprocess_shellr(   r'   rs   rc  create_subprocess_execr  rn  r  r_  r  ru  )r  r  r  r  r  r  r  r  processZstdin_streamZstdout_streamZstderr_streamrL   rL   rM   open_process  s2   

r  r0  set[Process]r  c                 C  s   zt   }W n ty   d}Y nw | D ])}|jdu rq|jjj  |j	jj  |j
jj  |  |r?||j qdS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)ri   get_event_loop_policyget_child_watcherNotImplementedErrorr  rw  r`  
_transportrs  rx  ry  r}  Zremove_child_handlerr  )r0  r  Zchild_watcherr  rL   rL   rM   '_forcibly_shutdown_process_pool_on_exit!  s    
r  c                   sd   zt tjI dH  W dS  tjy1   | D ]}|jdu r!|  q| D ]	}| I dH  q$Y dS w )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   ri   r   r  r}  ri  )r0  r  rL   rL   rM   _shutdown_process_pool_on_exit9  s   
r  c                 C  s:   t rddini }tt| fi | t tt|  d S )Nr   z AnyIO process pool shutdown task)r   rR   r  rq   r&  r
   r  )r0  r(  rL   rL   rM   #setup_process_pool_exit_at_shutdownL  s   r  c                   @  sn   e Zd ZU ded< ded< ded< dZded< dddZdddZdddZd ddZd!ddZ	d!ddZ
dS )"StreamProtocolzdeque[bytes]
read_queueasyncio.Event
read_eventwrite_eventNException | Noner  	transportasyncio.BaseTransportrG   r   c                 C  s<   t  | _t | _t | _| j  ttj|	d d S r   )
r   r  ri   r<   r  r  rh   r(   	Transportset_write_buffer_limitsr   r  rL   rL   rM   connection_madea  s
   


zStreamProtocol.connection_mader   c                 C  s,   |r
t  | _|| j_| j  | j  d S rI   )r3   r  r  r  rh   r  r   r   rL   rL   rM   connection_losth  s
   
zStreamProtocol.connection_lostre  rc  c                 C  s   | j | | j  d S rI   )r  r
  r  rh   )r   re  rL   rL   rM   data_receivedp  s   zStreamProtocol.data_receivedr   c                 C  s   | j   dS r   )r  rh   r   rL   rL   rM   eof_receivedt  s   
zStreamProtocol.eof_receivedc                 C     t  | _d S rI   )ri   r<   r  r   rL   rL   rM   pause_writingx  r|  zStreamProtocol.pause_writingc                 C  rz  rI   r  rh   r   rL   rL   rM   resume_writing{  r|  zStreamProtocol.resume_writingr  r  rG   r   r   r  rG   r   )re  rc  rG   r   )rG   r   r   )r   rd   rt   rm  r  r  r  r  r  r  r  rL   rL   rL   rM   r  [  s   
 




r  c                   @  sn   e Zd ZU ded< ded< ded< dZded< dddZd ddZd!ddZd"ddZd#ddZ	d#ddZ
dS )$DatagramProtocolz#deque[tuple[bytes, IPSockAddrType]]r  r  r  r  Nr  r  r  r  rG   r   c                 C  s.   t dd| _t | _t | _| j  d S )Nd   )maxlen)r   r  ri   r<   r  r  rh   r  rL   rL   rM   r    s   

z DatagramProtocol.connection_mader   c                 C  s   | j   | j  d S rI   )r  rh   r  r  rL   rL   rM   r    s   
z DatagramProtocol.connection_lostre  rc  addrr?   c                 C  s&   t |}| j||f | j  d S rI   )r:   r  r
  r  rh   )r   re  r  rL   rL   rM   datagram_received  s   z"DatagramProtocol.datagram_receivedr}   c                 C  s
   || _ d S rI   )r  r  rL   rL   rM   error_received  r   zDatagramProtocol.error_receivedc                 C  rz  rI   )r  clearr   rL   rL   rM   r    r|  zDatagramProtocol.pause_writingc                 C  rz  rI   r  r   rL   rL   rM   r    r|  zDatagramProtocol.resume_writingr  r  )re  rc  r  r?   rG   r   )r   r}   rG   r   r   )r   rd   rt   rm  r  r  r  r  r  r  r  rL   rL   rL   rM   r    s   
 




r  c                   @  sN   e Zd ZdddZedd	d
ZddddZdddZdddZdddZ	dS ) SocketStreamr  asyncio.Transportprotocolr  c                 C  *   || _ || _td| _td| _d| _d S Nreading from
writing toFr  	_protocolr=   _receive_guard_send_guard_closedr   r  r  rL   rL   rM   r     s
   


zSocketStream.__init__rG   socket.socketc                 C     | j dS Nsocketr  get_extra_infor   rL   rL   rM   _raw_socket     zSocketStream._raw_socketra  rb  r   rc  c              	     s  | j z t I d H  | jj s)| j s)| j  | jj I d H  | j	  z| jj
 }W n tyI   | jr>td | jjrF| jjtd w t||krd|d | ||d  }}| jj
| | jj
sv| jj  W d    |S W d    |S 1 sw   Y  |S rI   )r  r   r  r  is_setr  
is_closingresume_readingr  pause_readingr  rO  
IndexErrorr  r5   r  r6   r  
appendleftr  )r   rb  chunkleftoverrL   rL   rM   rf    s>   




zSocketStream.receiver>  r   c                   s   | j E t I d H  | jrt| jjd ur| jjz| j| W n ty7 } z	| j	 r2t
| d }~ww | jj I d H  W d    d S 1 sLw   Y  d S rI   )r  r   r  r5   r  r  r  ro  r   r  r3   r  r  )r   r>  r   rL   rL   rM   rr    s"   
"zSocketStream.sendc                   s(   z| j   W d S  ty   Y d S w rI   )r  	write_eofOSErrorr   rL   rL   rM   send_eof  s   zSocketStream.send_eofc                   s^   | j  s-d| _z| j   W n	 ty   Y nw | j   tdI d H  | j   d S d S NTr   )r  r  r  r  r  rs  r   abortr   rL   rL   rM   ri    s   

zSocketStream.acloseN)r  r  r  r  rG   r  rk  rl  rt  r   )
r   rd   rt   r   r   r  rf  rr  r  ri  rL   rL   rL   rM   r    s    

"
r  c                   @  s   e Zd ZU dZded< dZded< dZd,dd	Zed-ddZ	d.ddZ
d.ddZd/ddZd0d1ddZd2ddZd3d#d$Zd4d(d)Zd/d*d+ZdS )5UNIXSocketStreamNr  _receive_future_send_futureF
raw_socketr  c                 C  s&   || _ t | _td| _td| _d S )Nr  r  )_UNIXSocketStream__raw_socketrT   r4  r=   r  r  r   r  rL   rL   rM   r     s   
zUNIXSocketStream.__init__rG   c                 C  rO   rI   )r  r   rL   rL   rM   r    r   zUNIXSocketStream._raw_socketr   asyncio.AbstractEventLoopr   c                   @   d fdd}t   }_jj|jd  || |S )Nr?  r   rG   r   c                      `  j d S rI   )r  remove_readerr  r?  r   r   rL   rM   callback     z7UNIXSocketStream._wait_until_readable.<locals>.callbackr?  r   rG   r   )ri   r   r  r4  
add_readerr  r  r&  r   r   r  r?  rL   r  rM   _wait_until_readable  
   
z%UNIXSocketStream._wait_until_readablec                   r  )Nr?  r   rG   r   c                   r  rI   )r  remove_writerr  r  r  rL   rM   r    r  z7UNIXSocketStream._wait_until_writable.<locals>.callbackr  )ri   r   r  r4  
add_writerr  r  r&  r  rL   r  rM   _wait_until_writable  r  z%UNIXSocketStream._wait_until_writabler   c                   s<   | j  | jtj W d    d S 1 sw   Y  d S rI   )r  r  shutdownr  SHUT_WRr   rL   rL   rM   r    s   "zUNIXSocketStream.send_eofra  rb  r   rc  c                   s   t  }t I d H  | j> 	 z| j|}W n% ty(   | |I d H  Y n" ty< } z	| jr5t	d t
|d }~ww |sAt|W  d    S q1 sNw   Y  d S rI   )rT   r   r  r  recvBlockingIOErrorr  r  _closingr5   r3   r6   )r   rb  r   re  r   rL   rL   rM   rf    s*   zUNIXSocketStream.receiver>  c                   s   t  }t I d H  | jM t|}|rRz| j|}W n% ty-   | |I d H  Y n tyA } z	| j	r:t
d t|d }~ww ||d  }|sW d    d S W d    d S 1 s]w   Y  d S rI   )rT   r   r  
memoryviewr  rr  r  r  r  r  r5   r3   )r   r>  r   viewZ
bytes_sentr   rL   rL   rM   rr  -  s*   "zUNIXSocketStream.sendmsglenmaxfdstuple[bytes, list[int]]c                   sj  t |tr
|dk rtdt |tr|dk rtdt }td}t I d H  | jJ 	 z| j|t	
||j \}}}}W n% tyR   | |I d H  Y n tyf }	 z	| jr_td t|	d }	~	ww |sm|smtnq.W d    n1 syw   Y  |D ].\}
}}|
t	jks|t	jkrt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 integerr   Tz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   rC  rT   arrayr   r  r  recvmsgr  ZCMSG_LENitemsizer  r  r  r  r5   r3   r6   
SOL_SOCKET
SCM_RIGHTSr   	frombytesr  list)r   r  r  r   fdsmessageZancdataflagsr  r   Z
cmsg_levelZ	cmsg_typeZ	cmsg_datarL   rL   rM   receive_fds?  sN   
&zUNIXSocketStream.receive_fdsr  r  Collection[int | IOBase]c                   s  |st d|st dt }g }|D ]}t|tr!|| qt|tr-||  qtd|}t I d H  | j	A 	 z| j
|gtjtj|fg W n& ty`   | |I d H  Y n tyt } z	| jrmtd t|d }~ww q?W d    d S 1 sw   Y  d S )Nzmessage must not be emptyzfds must not be emptyr   )rC  rT   r   r   r
  r   filenor  r   r  r  sendmsgr  r  r  r  r  r  r  r5   r3   )r   r  r  r   ZfilenosfdZfdarrayr   rL   rL   rM   send_fdsf  sB   

"zUNIXSocketStream.send_fdsc                   sV   | j s'd| _ | j dkr| j  | jr| jd  | jr)| jd  d S d S d S )NT)r  r  r  rs  r  r  r  r   rL   rL   rM   ri    s   
zUNIXSocketStream.acloser  r  r  )r   r  rG   r   r   rk  rl  rt  )r  r   r  r   rG   r  )r  rc  r  r
  rG   r   )r   rd   rt   r  rm  r  r  r   r   r  r  r  r  rf  rr  r	  r  ri  rL   rL   rL   rM   r    s   
 








'!r  c                   @  sJ   e Zd ZU dZded< dZdddZedd
dZdddZ	dddZ
dS )TCPSocketListenerNr   _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr(   ri   BaseEventLooprT   r4  r=   _accept_guardr  rL   rL   rM   r     s   zTCPSocketListener.__init__rG   c                 C  rO   rI   )r  r   rL   rL   rM   r    r   zTCPSocketListener._raw_socketabc.SocketStreamc                   s  | j rt| j_ t I d H  t F| _z8z| j| jI d H \}}W n$ t	j
yH   z	| j| j W n ttfy@   Y nw | j rGtd  w W d | _nd | _w W d    n1 s\w   Y  W d    n1 skw   Y  |tjtjd | jt|I d H \}}t||S )Nr   )r  r5   r  r   r>   r  r4  sock_acceptr  ri   r   r  rC  r  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr  r  )r   client_sockZ_addrr  r  rL   rL   rM   accept  s8   

zTCPSocketListener.acceptr   c              	     sh   | j rd S d| _ | jr-z	| j| j W n ttfy    Y nw | j  tdI d H  | j	  d S r  )
r  r  r4  r  r  rC  r  r   r   rs  r   rL   rL   rM   ri    s   
zTCPSocketListener.acloser  r  rG   r  r   )r   rd   rt   r  rm  r  r   r   r  r  ri  rL   rL   rL   rM   r    s   
 

r  c                   @  s8   e Zd ZdddZdddZdd
dZedddZdS )UNIXSocketListenerr  r  c                 C  s"   || _ t | _td| _d| _d S )Nr  F)_UNIXSocketListener__raw_socketrT   r4  r=   r  r  r  rL   rL   rM   r     s   

zUNIXSocketListener.__init__rG   r  c                   s   t  I d H   jU 	 z j \}}|d t|W W  d    S  tyI   t } j	
 j|jd  | fdd |I d H  Y n ty] } z	 jrVtd t|d }~ww q1 sbw   Y  d S )NTFc                   s    j  jS rI   )r4  r  r!  _r   rL   rM   <lambda>  s    z+UNIXSocketListener.accept.<locals>.<lambda>)r   r  r!  r  setblockingr  r  ri   r   r4  r  r  r&  r  r  r5   r3   )r   r  r#  r?  r   rL   r   rM   r    s0   

zUNIXSocketListener.acceptr   c                   s   d| _ | j  d S r   )r  r!  rs  r   rL   rL   rM   ri    s   zUNIXSocketListener.aclosec                 C  rO   rI   )r!  r   rL   rL   rM   r    r   zUNIXSocketListener._raw_socketNr  r  r   r  )r   rd   rt   r   r  ri  r   r  rL   rL   rL   rM   r     s    


r   c                   @  sB   e Zd ZdddZedd	d
ZdddZdddZdddZdS )	UDPSocketr  asyncio.DatagramTransportr  r  c                 C  r  r  r  r  rL   rL   rM   r     
   


zUDPSocket.__init__rG   r  c                 C  r  r  r  r   rL   rL   rM   r    r  zUDPSocket._raw_socketr   c                   $   | j  sd| _| j   d S d S r   r  r  r  rs  r   rL   rL   rM   ri    
   
zUDPSocket.aclosetuple[bytes, IPSockAddrType]c              	     s   | j > t I d H  | jjs#| j s#| jj  | jj I d H  z| jj	 W W  d    S  t
yA   | jr>td td w 1 sEw   Y  d S rI   r  r   r  r  r  r  r  r  r  rO  r  r  r5   r3   r   rL   rL   rM   rf    s   
zUDPSocket.receiver>  r@   c                   sp   | j * t I d H  | jj I d H  | jrt| j r t	| jj
|  W d    d S 1 s1w   Y  d S rI   r  r   r  r  r  r  r5   r  r  r3   sendtorq  rL   rL   rM   rr       
"zUDPSocket.sendNr  r'  r  r  r  r   )rG   r,  )r>  r@   rG   r   	r   rd   rt   r   r   r  ri  rf  rr  rL   rL   rL   rM   r&    s    
	

r&  c                   @  sB   e Zd ZdddZedd	d
ZdddZdddZdddZdS )ConnectedUDPSocketr  r'  r  r  c                 C  r  r  r  r  rL   rL   rM   r   %  r(  zConnectedUDPSocket.__init__rG   r  c                 C  r  r  r  r   rL   rL   rM   r  .  r  zConnectedUDPSocket._raw_socketr   c                   r)  r   r*  r   rL   rL   rM   ri  2  r+  zConnectedUDPSocket.acloserc  c              	     s   | j C t I d H  | jjs#| j s#| jj  | jj I d H  z| jj	 }W n t
y;   | jr8td td w |d W  d    S 1 sJw   Y  d S r   r-  )r   packetrL   rL   rM   rf  7  s   $zConnectedUDPSocket.receiver>  c                   sp   | j * t I d H  | jj I d H  | jrt| j r t	| j
| W d    d S 1 s1w   Y  d S rI   r.  rq  rL   rL   rM   rr  J  r0  zConnectedUDPSocket.sendNr1  r  r   )rG   rc  rt  r2  rL   rL   rL   rM   r3  $  s    
	

r3  hostportr   
local_addrtuple[str, int] | Nonec                   sB   t ttjtf t jt| ||dI d H \}}|  t||S )N)r7  )	r(   r%   ri   r  r  rT   create_connectionr  r  )r5  r6  r7  r  r  rL   rL   rM   connect_tcpV  s   

r:  pathc                   s   t  I d H  t  ttjd 	 z
|  W tS  tyD   t } 	|j
d  | fdd |I d H  Y n tyO      w q)NFTc                   s
     S rI   )r  r"  r   r  rL   rM   r$  n  s   
 zconnect_unix.<locals>.<lambda>)r   rT   r  AF_UNIXr%  connectr  ri   r   r  r  r&  r  rs  r  )r;  r?  rL   r<  rM   connect_unixc  s&   

r?  familysocket.AddressFamilylocal_addressIPSockAddrType | Noneremote_address
reuse_portUDPSocket | ConnectedUDPSocketc                   sZ   t  jt||| |dI d H }|d }|d }|jr!|  |j|s(t||S t||S )N)r7  remote_addrr@  rE  r   r   )rT   create_datagram_endpointr  r  rs  r&  r3  )r@  rB  rD  rE  r8  r  r  rL   rL   rM   create_udp_socketw  s    

rI  r@  typeprotor  bytes | strstr | int | Noneint | AddressFamilyrK  int | SocketKindrL  r  r9   c                  s*   t  j| |||||dI d H }tt|S )NrJ  )rT   getaddrinfor(   r9   )r5  r6  r@  rK  rL  r  r8  rL   rL   rM   rQ    s
   

rQ  sockaddrr?   tuple[str, str]c                   s   t  | |I d H S rI   )rT   getnameinfo)rR  r  rL   rL   rM   rT    s   rT  read_eventsz RunVar[dict[Any, asyncio.Event]]_read_eventswrite_events_write_eventssockr  c              
     s   t  I d H  zt }W n ty   i }t| Y nw || r(tdd t }t  }|| < |	| |j z|
 I d H  W || d d urS||  d}nd}n|| d d urf||  d}w d}w |smtd S )Nr  TF)r   rV  re   rL  rh   r4   rT   ri   r<   r  r  rN  r  r5   )rY  rU  r   eventreadablerL   rL   rM   wait_socket_readable  s4   



r\  c              
     s   t  I d H  zt }W n ty   i }t| Y nw || r(tdd t }t  }|| < |	| 
 |j z| I d H  W || d d urU||  d}nd}n|| d d urh||  d}w d}w |sotd S )Nr  TF)r   rX  re   rL  rh   r4   rT   ri   r<   r  r  r  rN  r  r5   )rY  rW  r   rZ  writablerL   rL   rM   wait_socket_writable  s4   



r^  c                   @  sH   e Zd ZdddZdddZddd	ZdddZdddZdddZdS )r<   rG   c                 C  r   rI   r   r[  rL   rL   rM   r     r   zEvent.__new__r   c                 C  r  rI   )ri   r<   _eventr   rL   rL   rM   r     r|  zEvent.__init__r0   c                 C  s   | j   t| jS rI   )r_  rh   r0   r   rL   rL   rM   rh     r   z	Event.setr{   c                 C  s
   | j  S rI   )r_  r  r   rL   rL   rM   r    r   zEvent.is_setc                   s&   | j  I d H rt I d H  d S d S rI   )r_  r  r   r   rL   rL   rM   r    s   z
Event.waitr,   c                 C  s   t t| jjS rI   )r,   r  r_  _waitersr   rL   rL   rM   
statistics  r^   zEvent.statisticsN)rG   r<   r   r   r   )rG   r,   )	r   rd   rt   r   r   rh   r  r  ra  rL   rL   rL   rM   r<     s    




r<   c                   @  s   e Zd ZU dZded< d1ddZd2dd	Zd3ddZd4ddZe	d5ddZ
e
jd6ddZ
e	d7ddZe	d5ddZd8dd Zd9d#d$Zd3d%d&Zd:d'd(Zd3d)d*Zd:d+d,Zd;d.d/Zd0S )<r;   r   r   _total_tokenstotal_tokensrG   c                 C  r   rI   r   )r   rc  rL   rL   rM   r     r   zCapacityLimiter.__new__c                 C  s   t  | _t | _|| _d S rI   )rh   
_borrowersr   _wait_queuerc  )r   rc  rL   rL   rM   r     s   
zCapacityLimiter.__init__r   c                   s   |   I d H  d S rI   )acquirer   rL   rL   rM   r    r   zCapacityLimiter.__aenter__r   r   r   r   r   r   c                   s   |    d S rI   )release)r   r   r   r   rL   rL   rM   r    s   zCapacityLimiter.__aexit__c                 C  rO   rI   )rb  r   rL   rL   rM   rc    r   zCapacityLimiter.total_tokensr   c                 C  s   t |tst|std|dk rtd| j}|| _g }| j D ]}||kr+ n|	 s8|
| |d7 }q#|D ]}|  q;d S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1)r   r   r   isinfr%  rC  rb  re  valuesr  r
  rh   )r   r   	old_valueeventsrZ  rL   rL   rM   rc    s"   

r   c                 C  s
   t | jS rI   )r  rd  r   rL   rL   rM   borrowed_tokens(  s   
zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S rI   )rb  r  rd  r   rL   rL   rM   available_tokens,  s   z CapacityLimiter.available_tokensr0   c                 C  s   |  t  t| jS rI   )acquire_on_behalf_of_nowaitrS   r0   acquire_nowaitr   rL   rL   rM   ro  0  s   
zCapacityLimiter.acquire_nowaitborrowerr   c                 C  sB   || j v r	td| jst| j | jkrt| j | t| jS )NzEthis borrower is already holding one of this CapacityLimiter's tokens)	rd  r   re  r  rb  r7   r   r0   rn  )r   rp  rL   rL   rM   rn  4  s   

z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S rI   )acquire_on_behalf_ofrS   r   rL   rL   rM   rf  A  r   zCapacityLimiter.acquirec                   s   t  I d H  z| | W n2 ty@   t }|| j|< z	| I d H  W n ty6   | j|d   w | j	
| Y d S w z	t I d H  W d S  tyV   |    w rI   )r   rn  r7   ri   r<   re  r  r  rN  rd  r   r   rg  r   rp  rZ  rL   rL   rM   rq  D  s*   
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S rI   )release_on_behalf_ofrS   r   rL   rL   rM   rg  Y  r^   zCapacityLimiter.releasec                 C  sf   z| j | W n ty   tdd w | jr/t| j | jk r1| jjddd }|  d S d S d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensF)lastr   )	rd  r   r   r   re  r  rb  popitemrh   rr  rL   rL   rM   rs  \  s   z$CapacityLimiter.release_on_behalf_ofr+   c                 C  s   t | j| jt| jt| jS rI   )r+   rl  rc  r  rd  r  re  r   rL   rL   rM   ra  i  s   zCapacityLimiter.statisticsN)rc  r   rG   r;   )rc  r   r   )r   r   r   r   r   r   rG   r   r   r   r  r   )rp  r   rG   r0   )rp  r   rG   r   )rG   r+   )r   rd   rt   rb  rm  r   r   r  r  r   rc  r   rl  rm  ro  rn  rf  rq  rg  rs  ra  rL   rL   rL   rM   r;     s*   
 









r;   _default_thread_limiterzRunVar[CapacityLimiter]c                  C  s4   zt  W S  ty   td} t |  |  Y S w )N(   )rv  re   rL  r;   rh   )rI  rL   rL   rM   rM  u  s   

rM  c                   @  sH   e Zd ZdddZdd	d
ZdddZdddZdddZdddZdS ) _SignalReceiversignalstuple[int, ...]c                 C  s,   || _ t | _t | _t | _t | _	d S rI   )
_signalsrT   r4  r   _signal_queueri   r   r   rh   _handled_signals)r   ry  rL   rL   rM   r     s
   
z_SignalReceiver.__init__signumr   rG   r   c                 C  s*   | j | | j s| jd  d S d S rI   )r|  r
  r   rf   r  )r   r~  rL   rL   rM   _deliver  s   
z_SignalReceiver._deliverc                 C  s2   t | jD ]}| j|| j| | j| q| S rI   )rh   r{  r4  add_signal_handlerr  r}  r   )r   sigrL   rL   rM   r     s   z_SignalReceiver.__enter__r   r   r   r   r   r   r   c                 C  s   | j D ]}| j| qd S rI   )r}  r4  remove_signal_handler)r   r   r   r   r  rL   rL   rM   r     s   
z_SignalReceiver.__exit__c                 C  s   | S rI   rL   r   rL   rL   rM   	__aiter__  s   z_SignalReceiver.__aiter__c                   s4   t  I d H  | jst | _| jI d H  | j S rI   )r   r|  ri   r   r   rO  r   rL   rL   rM   	__anext__  s   

z_SignalReceiver.__anext__N)ry  rz  )r~  r   rG   r   )rG   rx  r   r  )	r   rd   rt   r   r  r   r   r  r  rL   rL   rL   rM   rx    s    





rx  ry  c                  G  s   t | S rI   )rx  )ry  rL   rL   rM   open_signal_receiver  rN   r  r-   c                 C  sJ   t | }|d u rtr|  nd }d }n|j}|j}tt| ||t| S rI   )	rk   re   r   rb   r   r   r-   r#  rJ   )rE   r   r   r   rL   rL   rM   _create_task_info  s   
r  c                   C  s
   t t S rI   )r  rS   rL   rL   rL   rM   get_current_task  r   r  list[TaskInfo]c                   C  s   dd t  D S )Nc                 S  s   g | ]
}|  st|qS rL   )rf   r  )rW   rE   rL   rL   rM   rZ     s    z%get_running_tasks.<locals>.<listcomp>)rQ   rL   rL   rL   rM   get_running_tasks  r^   r  c                    sX   t  I d H  t } 	 t D ]}|| u rq|jd u s|j r(tdI d H   nqd S q)NTg?)r   rS   rQ   _fut_waiterrf   r   )Z	this_taskrE   rL   rL   rM   wait_all_tasks_blocked  s   
r  c                   @  sd   e Zd Z			d&d'dd	Zd(ddZd)ddZd(ddZd(ddZd*ddZd+d d!Z	d,d$d%Z
dS )-
TestRunnerFNr   r{   r   r   r   c                 C  sD   g | _ t|| t | _| j| | j| j t| j d S rI   )	r  r   ri   new_event_loopr4  	set_debugset_exception_handler_exception_handlerset_event_loop)r   r   r   r   rL   rL   rM   r     s   

zTestRunner.__init__rG   r   c                 C  sn   t | j}|s	d S |D ]}|  q| jtj|ddi |D ]}| r'q | d ur4tt	| q d S )Nreturn_exceptionsT)
rQ   r4  r   run_until_completeri   gatherr9  r  r(   r  )r   	to_cancelrE   rL   rL   rM   _cancel_all_tasks  s   

zTestRunner._cancel_all_tasksr   r  rY   r\  c                 C  s2   t |dtr| j|d  d S || d S )Nr  )r   re   r}   r  r
  default_exception_handler)r   r   rY   rL   rL   rM   r    s   zTestRunner._exception_handlerc                 C  s<   | j r| j g }| _ t|dkr|d |rt|d S d S r  )r  r  r8   r   rL   rL   rM   _raise_async_exceptions  s   z"TestRunner._raise_async_exceptionsc              	   C  sL   z|    | j| j  W td  | j  d S td  | j  w rI   )r  r4  r  shutdown_asyncgensri   r  rs  r   rL   rL   rM   rs  
  s   

zTestRunner.closefixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]r(  Iterable[T_Retval]c                 #  sn    d fdd}j  t  j | }j   V     j |   d S )NrG   r   c               
     s   di } z|  d I d H }  W n ty. } z| W Y d }~d S d }~ww |   I d H  z
|  d I d H  W n
 tyO   Y d S w |  I d H  td)Nz$Async generator fixture did not stoprL   )	asendr  r  r  r  r  StopAsyncIterationri  r   )agenretvalr   rZ  r?  r  r(  r   rL   rM   fixture_runner  s&   

z7TestRunner.run_asyncgen_fixture.<locals>.fixture_runnerr   )	r4  create_futureri   r<   rR   r  r8  rh   r  )r   r  r(  r  Zfixture_taskrL   r  rM   run_asyncgen_fixture  s   

zTestRunner.run_asyncgen_fixture,Callable[..., Coroutine[Any, Any, T_Retval]]r_   c                 C  s"   | j |di |}|   |S NrL   )r4  r  r  )r   r  r(  r  rL   rL   rM   run_fixture4  s   zTestRunner.run_fixture	test_func'Callable[..., Coroutine[Any, Any, Any]]c              
   C  sX   z| j |di | W n ty% } z| j| W Y d }~nd }~ww |   d S r  )r4  r  r}   r  r
  r  )r   r  r(  r   rL   rL   rM   run_test=  s   zTestRunner.run_test)FFN)r   r{   r   r{   r   r   r   )r   r  rY   r\  rG   r   )r  r  r(  r\  rG   r  )r  r  r(  r\  rG   r_   )r  r  r(  r\  rG   r   )r   rd   rt   r   r  r  r  rs  r  r  r  rL   rL   rL   rM   r    s    



	

"	r  )rE   rF   rG   rH   )rE   rF   rG   rV   )rG   rF   )rr   r   rG   rs   )rE   rF   rG   r{   )r   r   r   r{   rG   r   )rr   r   r   r   r   r{   r   r{   r   r   rG   r_   r   r   )
rr   rJ  r   r   rH  r{   rI  rK  rG   r_   )rr   rJ  r   r   r   rU  rG   r_   )rr   r   r   r   rG   r_   )r  r  r  r{   r  r  r  r  r  r  r  r  r  r  r  r{   rG   ru  )r0  r  r  r   rG   r   )r0  r  rG   r   rI   )r5  rs   r6  r   r7  r8  rG   r  )r;  rs   rG   r  )
r@  rA  rB  rC  rD  rC  rE  r{   rG   rF  )r5  rM  r6  rN  r@  rO  rK  rP  rL  r   r  r   rG   r9   )r   )rR  r?   r  r   rG   rS  )rY  r  rG   r   )rG   r;   )ry  r   rG   rx  )rE   rF   rG   r-   )rG   r-   )rG   r  )
__future__r   r  ri   concurrent.futures
concurrentr   r  r   Zasyncio.base_eventsr   collectionsr   r   r   contextvarsr   r   dataclassesr	   	functoolsr
   r   inspectr   r   r   r   r   r   ior   osr   r5  r   r   r   	threadingr   typesr   typingr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   weakrefr)   rQ   r+   r,   r-   r.   Z_core._compatr/   r0   Z_core._eventloopr1   r2   Z_core._exceptionsr3   r4   r5   r6   r7   r8   ZBaseExceptionGroupZ_core._socketsr9   r:   Z_core._synchronizationr;   ZBaseCapacityLimiterr<   Z	BaseEventr=   Z_core._tasksr>   ZBaseCancelScoper?   r@   ZlowlevelrA   r   rJ   rQ   rR   rS   rT   rU   r   r]   r_   r`   r   rj   r   rc   rm  rq   rz   Z	_run_varscurrent_tokenr   r   r   r   r   r   r   r   r   r   rk   Z
TaskStatusr   r  r  Z_Retval_Queue_Typer.  rF  rG  rS  rW  rY  rZ  ZByteReceiveStreamr_  ZByteSendStreamrn  ru  r  r  r  r  Protocolr  r  r  r  ZSocketListenerr  r   r&  r3  r:  r?  rI  rQ  rT  rV  rX  r\  r^  rv  rM  rx  r  r  r  r  r  r  rL   rL   rL   rM   <module>   s    H





 
b



	 HI1
	 8
'

$T "<%03

 y*	
