o
    iv                    @   s	  U 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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@Z@ddlAmBZBmCZCmDZDmEZE ddlFmGZGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZOmPZP ddlLmQZR ddlLmSZS ddlTmUZUmVZV ddlWmXZY ddlWmZZ[ ddlWm\Z\ ddl]m^Z_ ddlEm`Z`maZa ddlbmcZc ejddkr*d ejed!e<e2e,e* f fd"d#Zfnd ejed!e<e2e,e* f fd$d#Zfejdd%kr_d d&lmgZgmhZhmiZimjZj d d'lmkZl d ejed!e3e- fd(d)Zmn[e;d*Znd ejed!e3e- fd+d)Zmd,d-d.d/Zldd0d1e<e2e*denf e,en f d2eod!ejefd3d4Zhd!ejpfd5d6Zj	dd7e6ejp d!e8eje fd8d9Zg	dd7e6ejp d!e6eje fd:d;Zie;d<Zqerejed=Zsecd>Ztece6eje  eud>< d!ejefd?d@ZvdAe-d!ewfdBdCZxe? ZyejZzd ejed!e{fdDdEZ|dFe6ej} dGe{d!dfdHdIZ~d,d,ddJdAe-dKe,eq f dLeodMe{dGe{dFe6ej} d!eqfdNdOZkejZejZG dPdQ dQe_Z^ddRdSZddTdUZddVdWZd!efdXdYZd!efdZd[ZG d\d] d]Ze? ZG d^d_ d_eRZQG d`da daeEjZG dbdc dceEjZe9e6eq e6e f ZG ddde dee%ZecdfZece0e  eudf< ecdgZece8e  eudg< d,ddhdAe-dKeqf dLeodie{dje6dk d!eqf
dldmZddndAe-dKeqf dLeod7e6ejp d!eqfdodpZdAe-dKe/e*e*eqf f dLeod!eqfdqdrZG dsdt dteEjZed,duG dvdw dweEjZed,duG dxdy dyeEjZed,duG dzd{ d{eEjZddd,d|d}e<ewee7e<ewef  f d~e{de<ee)e* df de<ee)e* df de<ee)e* df de<eweedf de6e5ewewf  de{d!efddZde8e deod!dfddZde8e d!dfddZde8e d!dfddZG dd dejZG dd dejZG dd deEjZG dd deEjZG dd deEjZG dd deEjZG dd deEjZG dd deEjZ	ddewdede6e9ewef  d!efddZdewd!efddZdej"de6e` de6e` de{d!e<eef f
ddZd d d d dde<eewf de<ewedf de<ee"f de<ee#f deded!eUfddZdde`ded!e9ewewf fddZecdZece1e*ejZf  eud< ecdZece1e*ejZf  eud< dejd!dfddZdejd!dfddZG dd de[ZZG ddk dkeYZXecdZeceX eud< d!eXfddĄZG ddƄ deGd Zded!efddɄZd ejed!eDfdd˄Zd!eDfdd̈́Zd!e4eD fddτZdddфZG ddӄ deEjZdS )    N)_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DequeDict	GeneratorIterableListMappingOptionalSequenceSetTupleTypeTypeVarUnioncast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)DeprecatedAsyncContextManagerDeprecatedAwaitable)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)ExceptionGroup)
WouldBlock)GetAddrInfoReturnTypeconvert_ipv6_sockaddr)CapacityLimiter)Event)ResourceGuard)CancelScope)IPSockAddrTypeUDPPacketType)RunVar      taskreturnc                 C   s   |   S N)get_cororI    rN   S/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.pyrL   K      rL   c                 C      | j S rK   )_cororM   rN   rN   rO   rL   P      rG      )	all_taskscreate_taskcurrent_taskget_running_loop)runc                 C   s   dd | j D S )Nc                 S   s   g | ]\}}|qS rN   rN   ).0cbcontextrN   rN   rO   
<listcomp>Y       z'_get_task_callbacks.<locals>.<listcomp>
_callbacksrM   rN   rN   rO   _get_task_callbacksX      rb   _Tc                 C   rQ   rK   r`   rM   rN   rN   rO   rb   ^   rS   Fdebugc                   s   ddl m}m}m   fdd}| d urtd|| s&td| | }z0|	| |
| || W z|| ||  W |	d  |  S |	d  |  w z|| ||  W |	d  |  w |	d  |  w )Nr   )
coroutineseventstasksc                    st   t | }|sd S |D ]}|  q
|  j|| dd |D ]}| r&q| d ur7| d| |d qd S )NT)loopreturn_exceptionsz1unhandled exception during asyncio.run() shutdown)message	exceptionrI   )rV   cancelrun_until_completegather	cancelledrm   call_exception_handler)rj   	to_cancelrI   ri   rN   rO   _cancel_all_taskse   s(   
z%native_run.<locals>._cancel_all_tasksz8asyncio.run() cannot be called from a running event loopza coroutine was expected, got )asynciorg   rh   ri   _get_running_loopRuntimeErroriscoroutine
ValueErrornew_event_loopset_event_loop	set_debugro   shutdown_asyncgensclose)mainrf   rg   rh   ru   rj   rN   rt   rO   
native_runa   s6   











r   namecoror   c                C   s   t  | S rK   )rY   rW   )r   r   rN   rN   rO   rW      s   rW   c                  C   s   t  } | d ur
| S td)Nzno running event loop)rv   rw   rx   rj   rN   rN   rO   rY      s   rY   rj   c                 C   s.   ddl m} | du rt } dd || D S )z'Return a set of all tasks for the loop.r   )TaskNc                 S   s   h | ]}|  s|qS rN   )done)r[   trN   rN   rO   	<setcomp>   s    zall_tasks.<locals>.<setcomp>)rv   r   rY   rV   )rj   r   rN   rN   rO   rV      s   rV   c                 C   s   | d u rt  } tj| S rK   )rY   rv   r   rX   r   rN   rN   rO   rX      s   rX   T_Retvalget_name
_root_taskc                  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)r   getr   rV   ra   rb   r   getattrsetr,   rv   r   rX   _task_statescancel_scope_parent_scope
_host_task)	root_taskrI   r\   stater   rN   rN   rO   find_root_task   s,   



r   funcc                 C   s0   t | dd }t | dd }ddd ||fD S )Nr   __qualname__.c                 S   s   g | ]}|r|qS rN   rN   )r[   xrN   rN   rO   r^      r_   z%get_callable_name.<locals>.<listcomp>)r   join)r   modulequalnamerN   rN   rO   get_callable_name   s   r   c                 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   rL   r   r   r   AttributeErrorr   r!   r   r   	Exception)rI   r   rN   rN   rO   _task_started   s   r   policy
use_uvloopc                 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implementationr   uvloopImportErrorhasattrrv   AbstractEventLooprj   LoopEventLoopPolicyset_event_loop_policy)r   r   r   rN   rN   rO   _maybe_set_event_loop_policy   s   r   )rf   r   r   .argsrf   c                   s4   t dtf fdd}t|| t| |dS )NrJ   c                     sX   t tjt } td td }|t| < tr| |j	 z  I d H W t| = S t| = w rK   )
r,   rv   r   rX   	TaskStater   r   _native_task_namesset_namer   )rI   
task_stater   r   rN   rO   wrapper  s   zrun.<locals>.wrapperre   )r
   r   r   r   )r   rf   r   r   r   r   rN   r   rO   rZ     s   
rZ   c                	   @   s  e Zd Zejdddededd fddZejdfdedefdd	Zd%d
dZ	de
ee  de
e de
e de
e fddZd&ddZd&ddZd&ddZdefddZdefddZedefddZejdeddfddZedefd d!Zedefd"d#Zejdeddfd$d#ZdS )'rB   F)deadlineshieldr   r   rJ   c                C   
   t | S rK   object__new__)clsr   r   rN   rN   rO   r   6  s   
zCancelScope.__new__c                 C   sB   || _ || _d | _d| _d| _d | _d | _t | _d | _	d| _
d S NF)	_deadline_shieldr   _cancel_called_active_timeout_handle_cancel_handler   _tasksr   _timeout_expired)selfr   r   rN   rN   rO   __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| _ | S )Nz;Each CancelScope may only be used for a single 'with' blockT)r   rx   r,   rv   r   rX   r   r   addr   KeyErrorr   r   r   r   r   _timeout)r   	host_taskr   	task_namerN   rN   rO   	__enter__G  s$   zCancelScope.__enter__exc_typeexc_valexc_tbc                 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rst|trW|jn|g}tdd |D rs| jrhdS | jsmd S |  ssd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 rK   )
isinstanceCancelledError)r[   excrN   rN   rO   	<genexpr>  s    z'CancelScope.__exit__.<locals>.<genexpr>T)r   rx   rX   r   r   r   r   r   rn   r   remover   r   _deliver_cancellation_to_parentr   r;   
exceptionsallr   r   _parent_cancelled)r   r   r   r   host_task_stater   rN   rN   rO   __exit__]  s>   
zCancelScope.__exit__Nc                 C   sL   | j tjkr$t }| | j krd| _|   d S || j | j| _	d S d S NT)
r   mathinfrY   timer   rn   call_atr   r   )r   rj   rN   rN   rO   r     s   zCancelScope._timeoutc                 C   s   d}t  }| jD ]1}|jrqt| j}|| ur&|du s|jrn|j}|| usd}||ur9|| ju s5t|r9|	  q|rFt
 | 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)rX   r   _must_cancelr   r   r   r   r   r   rn   rY   	call_soon_deliver_cancellationr   )r   should_retrycurrentrI   r   rN   rN   rO   r     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)r   r   r   r   r   )r   scopescope_to_cancelrN   rN   rO   r     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)r   r   r   )r   r   rN   rN   rO   r     s   zCancelScope._parent_cancelledc                 C   s4   | j s| jr| j  d | _d| _ |   t| jS r   )r   r   rn   r   r4   r   rN   rN   rO   rn     s   

zCancelScope.cancelc                 C   rQ   rK   )r   r   rN   rN   rO   r        zCancelScope.deadlinevaluec                 C   sD   t || _| jd ur| j  d | _| jr| js |   d S d S d S rK   )floatr   r   rn   r   r   r   r   r   rN   rN   rO   r     s   


c                 C   rQ   rK   )r   r   rN   rN   rO   cancel_called  r   zCancelScope.cancel_calledc                 C   rQ   rK   )r   r   rN   rN   rO   r     r   zCancelScope.shieldc                 C   s(   | j |kr|| _ |s|   d S d S d S rK   )r   r   r   rN   rN   rO   r     s   
)rJ   rB   rJ   N)__name__r   r   r   r   r   boolr   r   r   r%   r)   BaseExceptionr   r   r   r   r   r   r4   rn   propertyr   setterr   r   rN   rN   rN   rO   rB   5  sF    




4
	
#	rB   c                      s   t dI d H  d S Nr   )sleeprN   rN   rN   rO   
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   )rX   r   r   r   r   r   r   r   )rI   r   rN   rN   rO   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   )rB   r   rN   rN   rN   rO   cancel_shielded_checkpoint  s   "r   c                  C   sZ   zt t  j} W n ty   tj Y S w tj}| r+t|| j}| jr&	 |S | j	} | s|S rK   )
r   rX   r   r   r   r   minr   r   r   )r   r   rN   rN   rO   current_effective_deadline  s   
r   c                   C   s
   t   S rK   )rY   r   rN   rN   rN   rO   current_time/     
r   c                   @   s6   e Zd ZdZdZdee dee dee f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   r   r  r   r   c                 C   s   || _ || _|| _d S rK   r  )r   r  r   r   rN   rN   rO   r   @  s   
zTaskState.__init__N)
r   r   r   __doc__	__slots__r%   intstrrB   r   rN   rN   rN   rO   r   8  s    r   c                       s&   e Zd Zdee f fddZ  ZS )r;   r   c                    s   t    || _d S rK   )superr   r   r   r   	__class__rN   rO   r   T     

zExceptionGroup.__init__)r   r   r   r#   r   r   __classcell__rN   rN   r	  rO   r;   S  s    r;   c                   @   s4   e Zd ZdejdefddZd
deddfdd	ZdS )_AsyncioTaskStatusfuturer  c                 C   s   || _ || _d S rK   )_future
_parent_id)r   r  r  rN   rN   rO   r   Z  s   
z_AsyncioTaskStatus.__init__Nr   rJ   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_resultrv   InvalidStateErrorrx   r,   r   rX   r  r   r  )r   r   rI   rN   rN   rO   started^  s   z_AsyncioTaskStatus.startedrK   )	r   r   r   rv   r   r  r   r   r  rN   rN   rN   rO   r  Y  s    r  c                   @   s
  e Zd ZdddZdddZdeee  dee d	ee dee	 fd
dZ
edee dee fddZdedeej ddfddZ	d dedef dededeej dejf
ddZdddedef dededdfddZdddedef dededdfddZdS )!	TaskGrouprJ   Nc                 C   s   t  | _d| _g | _d S r   )rB   r   r   _exceptionsr   rN   rN   rO   r   k  s   
zTaskGroup.__init__c                    s   | j   d| _| S r   )r   r   r   r   rN   rN   rO   
__aenter__p  s   
zTaskGroup.__aenter__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 )NF   c                 s   s"    | ]}t |to|j V  qd S rK   )r   r   r   )r[   erN   rN   rO   r     s    
z&TaskGroup.__aexit__.<locals>.<genexpr>r   )r   r   rn   r  appendr   rv   waitr   r   r   _filter_cancellation_errorslenr   r;   r   __context__)r   r   r   r   ignore_exceptionr   r   rN   rN   rO   	__aexit__u  sD   

zTaskGroup.__aexit__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   r;   r  r  r   r  r  	__cause__r  __traceback__r   r   )r   filtered_exceptionsr   new_exceptionsnew_excrN   rN   rO   r    s&   


z%TaskGroup._filter_cancellation_errorsr   task_status_futurec              
      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,   rv   r   rX   r   r   r  r  r   rn   set_exceptionrx   r   r   r   )r   r   r&  __traceback_hide____tracebackhide__rI   r   rN   rN   rO   _run_wrapped_task  s.   

zTaskGroup._run_wrapped_taskr   .r   r   c                    s.  dt jdd f fdd} jstdi }|d u rt|nt|}tr(||d< i }r=tt }t	t j
j|d< nt j
j}||i |}	t |	sWtd| d	t|	d
 obt|	d }
|
sjtjdk rp |	}	t|	fi |}|
stjdkr|| t|| j
dt|<  j
j| |S )N_taskrJ   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'  )r   r   r   r   rm   r   r   r  r   r  r  rn   r(  rx   )r,  r   r  r   r&  rN   rO   	task_done  s,   z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.r   task_statusz Expected an async function, but z appears to be synchronouscr_framegi_framerF   r  )rv   r   r   rx   r   r  r   idrX   r  r   r   ry   	TypeErrorr   r   version_infor+  rW   add_done_callbackr   r   r   r   )r   r   r   r   r&  r.  optionskwargsr  r   foreign_cororI   rN   r-  rO   _spawn  s@   





zTaskGroup._spawnr   c                G   s   |  ||| d S rK   )r9  )r   r   r   r   rN   rN   rO   
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   )rv   r   r9  rB   r   rn   )r   r   r   r   r  rI   rN   rN   rO   start  s   
zTaskGroup.startr   )rJ   r  rK   )r   r   r   r   r  r%   r)   r   r   r   r  staticmethodr&   r#   r  r   rv   r   r+  r   tupler   r   r9  r:  r;  rN   rN   rN   rO   r  j  sr    



*


I


r  c                       s|   e Zd ZdZdejded  ded  f fddZdej	de
d	ee d
dfddZdddZddeej d
dfddZ  ZS )WorkerThread
   r   workersidle_workersc                    sD   t  jdd || _|| _|| _|j| _td| _t	 | _
d| _d S )NzAnyIO worker threadr   r.   F)r  r   r   r@  rA  _looprj   r   queuer   
idle_sincestopping)r   r   r@  rA  r	  rN   rO   r   7  s   
zWorkerThread.__init__r  resultr   rJ   Nc                 C   sJ   t  | _| js| j|  | s#|d ur|| d S || d S d S rK   )r   rD  rE  rA  r  rq   r(  r  )r   r  rF  r   rN   rN   rO   _report_resultH  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 )Nrv   )r5   rj   r6   rC  r   rq   rZ   r   	is_closedcall_soon_threadsaferG  r.  )	r   itemr]   r   r   r  rF  rm   r   rN   rN   rO   rZ   U  s0   




zWorkerThread.runfc                 C   sF   d| _ | jd  | j|  z	| j|  W d S  ty"   Y d S w r   )rE  rC  
put_nowaitr@  discardrA  r   rz   )r   rK  rN   rN   rO   stopn  s   zWorkerThread.stopr   rK   )r   r   r   MAX_IDLE_TIMErv   r   r'   r   r   r   r   r%   r   rG  rZ   rN  r  rN   rN   r	  rO   r>  4  s(    

"r>  _threadpool_idle_workers_threadpool_workers)cancellablelimiterrR  rS  r?   c             	      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   rP  r   rQ  LookupErrorr   r   current_default_thread_limiterrB   rv   r   r   r>  r;  r   r5  rN  popr   rD  rO  popleftr   remove_done_callbackr   rZ   sniffiocurrent_async_library_cvarrC  rL  )r   rR  rS  r   rA  r@  r  r   workernowexpired_workerr]   rN   rN   rO   run_sync_in_worker_thread~  sJ   

.r^  r   c                   s^   t d fdd}t |ptj}tjdk r&|t j| 	 S || 	 S )NrJ   c               
      sR   z
    W d S  ty( }  z|  t| ts W Y d } ~ d S d } ~ ww rK   )r  r   r(  r   r   )r   r   rK  r   rN   rO   r     s   

z%run_sync_from_thread.<locals>.wrapperrT   r   )
r
   r   r6   rj   r   r4  rI  r   rZ   rF  )r   rj   r   r   rN   r_  rO   run_sync_from_thread  s   


r`  c                 G   s   t | | tj}| S rK   )rv   run_coroutine_threadsafer6   rj   rF  )r   r   rK  rN   rN   rO   run_async_from_thread  s   
rb  c                       sR   e Zd ZdddZd fddZdeded	eee	f d
e
deddfddZ  ZS )BlockingPortalrJ   c                 C   r   rK   r   r   rN   rN   rO   r     r   zBlockingPortal.__new__Nc                    s   t    t | _d S rK   )r  r   rY   rB  r   r	  rN   rO   r     s   
zBlockingPortal.__init__r   r   r7  r   r  c              	   C   s*   t t| jj|d| j||||| jd d S )Nr   r   )r`  r	   _task_groupr:  
_call_funcrB  )r   r   r   r7  r   r  rN   rN   rO   _spawn_task_from_thread  s   
z&BlockingPortal._spawn_task_from_thread)rJ   rc  r   )r   r   r   r   r   r   r=  r    r  r   r   r   rg  r  rN   rN   r	  rO   rc    s     

rc  )eqc                   @   s6   e Zd ZU ejed< d
dedefddZddd	Z	dS )StreamReaderWrapper_stream   	max_bytesrJ   c                    s    | j |I d H }|r|S trK   )rj  readr:   )r   rl  datarN   rN   rO   receive  s
   zStreamReaderWrapper.receiveNc                       | j   d S rK   )rj  feed_eofr   rN   rN   rO   aclose     zStreamReaderWrapper.acloserk  r   )
r   r   r   rv   StreamReader__annotations__r  bytesro  rr  rN   rN   rN   rO   ri    s   
 
ri  c                   @   s4   e Zd ZU ejed< deddfddZd	ddZdS )
StreamWriterWrapperrj  rJ  rJ   Nc                    s"   | j | | j  I d H  d S rK   )rj  writedrainr   rJ  rN   rN   rO   send   s   zStreamWriterWrapper.sendc                    rp  rK   )rj  r   r   rN   rN   rO   rr    rs  zStreamWriterWrapper.acloser   )	r   r   r   rv   StreamWriterrv  rw  r|  rr  rN   rN   rN   rO   rx    s   
 
rx  c                   @   s   e Zd ZU ejjed< ee ed< ee	 ed< ee	 ed< dddZ
defd	d
ZdddZdddZdeddfddZedefddZedee fddZedeej fddZedeej fddZedeej fddZdS )Process_process_stdin_stdout_stderrrJ   Nc                    sV   | j r| j  I d H  | jr| j I d H  | jr"| j I d H  |  I d H  d S rK   )r  rr  r  r  r  r   rN   rN   rO   rr    s   zProcess.aclosec                    s   | j  I d H S rK   )r  r  r   rN   rN   rO   r    s   zProcess.waitc                 C      | j   d S rK   )r  	terminater   rN   rN   rO   r       zProcess.terminatec                 C   r  rK   )r  killr   rN   rN   rO   r    r  zProcess.killsignalc                 C   s   | j | d S rK   )r  send_signal)r   r  rN   rN   rO   r  "  rc   zProcess.send_signalc                 C      | j jS rK   )r  pidr   rN   rN   rO   r  %     zProcess.pidc                 C   r  rK   )r  
returncoder   rN   rN   rO   r  )  r  zProcess.returncodec                 C   rQ   rK   )r  r   rN   rN   rO   stdin-  r   zProcess.stdinc                 C   rQ   rK   )r  r   rN   rN   rO   stdout1  r   zProcess.stdoutc                 C   rQ   rK   )r  r   rN   rN   rO   stderr5  r   zProcess.stderrr   )r   r   r   rv   
subprocessr~  rv  r%   rx  ri  rr  r  r  r  r  r  r   r  r  r2   ByteSendStreamr  ByteReceiveStreamr  r  rN   rN   rN   rO   r~    s(   
 



r~  )cwdenvstart_new_sessioncommandshellr  r  r  r  r  r  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   rv   create_subprocess_shellr,   r+   r  rw  create_subprocess_execr  rx  r  ri  r  r~  )r  r  r  r  r  r  r  r  processstdin_streamstdout_streamstderr_streamrN   rN   rO   open_process:  s2   

r  r@  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)rv   get_event_loop_policyget_child_watcherNotImplementedErrorr  r  rj  
_transportr   r  r  r  remove_child_handlerr  )r@  r,  child_watcherr  rN   rN   rO   '_forcibly_shutdown_process_pool_on_exita  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   rv   r   r  r  rr  )r@  r  rN   rN   rO   _shutdown_process_pool_on_exity  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   rW   r  r   r5  r	   r  )r@  r7  rN   rN   rO   #setup_process_pool_exit_at_shutdown  s
   r  c                   @   s   e Zd ZU ee ed< ejed< ejed< dZe	e
 ed< dejddfdd	Zd
e	e
 ddfddZdeddfddZde	e fddZdddZdddZdS )StreamProtocol
read_queue
read_eventwrite_eventNrm   	transportrJ   c                 C   s<   t  | _t | _t | _| j  ttj|	d d S r   )
r   r  rv   r@   r  r  r   r,   	Transportset_write_buffer_limitsr   r  rN   rN   rO   connection_made  s
   


zStreamProtocol.connection_mader   c                 C   s,   |r
t  | _|| j_| j  | j  d S rK   )r7   rm   r!  r  r   r  r   r   rN   rN   rO   connection_lost  s
   
zStreamProtocol.connection_lostrn  c                 C   s   | j | | j  d S rK   )r  r  r  r   )r   rn  rN   rN   rO   data_received  s   zStreamProtocol.data_receivedc                 C   s   | j   dS r   )r  r   r   rN   rN   rO   eof_received  s   
zStreamProtocol.eof_receivedc                 C      t  | _d S rK   )rv   r@   r  r   rN   rN   rO   pause_writing  r  zStreamProtocol.pause_writingc                 C   r  rK   r  r   r   rN   rN   rO   resume_writing  r  zStreamProtocol.resume_writingr   )r   r   r   r   rw  rv  rv   r@   rm   r%   r   BaseTransportr  r  r  r   r  r  r  rN   rN   rN   rO   r    s   
 


r  c                   @   s   e Zd ZU eeeef  ed< ej	ed< ej	ed< dZ
ee ed< dejddfdd	Zd
ee ddfddZdededdfddZd
eddfddZdddZdddZdS )DatagramProtocolr  r  r  Nrm   r  rJ   c                 C   s.   t dd| _t | _t | _| j  d S )Nd   )maxlen)r   r  rv   r@   r  r  r   r  rN   rN   rO   r    s   

z DatagramProtocol.connection_mader   c                 C   s   | j   | j  d S rK   )r  r   r  r  rN   rN   rO   r    s   
z DatagramProtocol.connection_lostrn  addrc                 C   s&   t |}| j||f | j  d S rK   )r>   r  r  r  r   )r   rn  r  rN   rN   rO   datagram_received  s   z"DatagramProtocol.datagram_receivedc                 C   s
   || _ d S rK   )rm   r  rN   rN   rO   error_received  r   zDatagramProtocol.error_receivedc                 C   r  rK   )r  clearr   rN   rN   rO   r    r  zDatagramProtocol.pause_writingc                 C   r  rK   r  r   rN   rN   rO   r    r  zDatagramProtocol.resume_writingr   )r   r   r   r   r(   rw  rC   rv  rv   r@   rm   r%   r   r  r  r  r  r  r  r  rN   rN   rN   rO   r    s   
 


r  c                   @   sn   e Zd ZdejdefddZedejfddZ	dd	e
defd
dZdeddfddZdddZdddZdS )SocketStreamr  protocolc                 C   *   || _ || _td| _td| _d| _d S Nreading from
writing toFr  	_protocolrA   _receive_guard_send_guard_closedr   r  r  rN   rN   rO   r     s
   


zSocketStream.__init__rJ   c                 C      | j dS Nsocketr  get_extra_infor   rN   rN   rO   _raw_socket     zSocketStream._raw_socketrk  rl  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 rK   )r  r   r  r  is_setr  
is_closingresume_readingr  pause_readingr  rW  
IndexErrorr  r9   rm   r:   r  
appendleftr  )r   rl  chunkleftoverrN   rN   rO   ro    s>   




zSocketStream.receiverJ  Nc                    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 rK   )r  r   r  r9   r  rm   r  ry  rx   r  r7   r  r  )r   rJ  r   rN   rN   rO   r|  
  s"   
"zSocketStream.sendc                    s(   z| j   W d S  ty   Y d S w rK   )r  	write_eofOSErrorr   rN   rN   rO   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  r   r   abortr   rN   rN   rO   rr  #  s   

zSocketStream.aclosert  r   )r   r   r   rv   r  r  r   r   r  r  r  rw  ro  r|  r  rr  rN   rN   rN   rO   r    s    "
r  c                	   @   s  e Zd ZU dZeej ed< dZeej ed< dZ	de
j
fddZede
j
fd	d
ZdejdejfddZdejdejfddZd#ddZd$dedefddZdeddfddZdededeeee f fddZdedeeeef  ddfdd Zd#d!d"ZdS )%UNIXSocketStreamN_receive_future_send_futureF
raw_socketc                 C   s&   || _ t | _td| _td| _d S )Nr  r  )_UNIXSocketStream__raw_socketrY   rB  rA   r  r  r   r  rN   rN   rO   r   5  s   
zUNIXSocketStream.__init__rJ   c                 C   rQ   rK   )r  r   rN   rN   rO   r  ;  r   zUNIXSocketStream._raw_socketrj   c                    H   dt dd f fdd}t  }_jj|jd  || |S )NrK  rJ   c                       `  j d S rK   )r  remove_readerr  rK  rj   r   rN   rO   callback@     z7UNIXSocketStream._wait_until_readable.<locals>.callback)	r   rv   r   r  rB  
add_readerr  r  r5  r   rj   r  rK  rN   r  rO   _wait_until_readable?  
   
z%UNIXSocketStream._wait_until_readablec                    r  )NrK  rJ   c                    r  rK   )r  remove_writerr  r  r  rN   rO   r  J  r  z7UNIXSocketStream._wait_until_writable.<locals>.callback)	r   rv   r   r  rB  
add_writerr  r  r5  r  rN   r  rO   _wait_until_writableI  r  z%UNIXSocketStream._wait_until_writablec                    s<   | j  | jtj W d    d S 1 sw   Y  d S rK   )r  r  shutdownr  SHUT_WRr   rN   rN   rO   r  S  s   "zUNIXSocketStream.send_eofrk  rl  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 rK   )rY   r   r  r  recvBlockingIOErrorr  r  _closingr9   r7   r:   )r   rl  rj   rn  r   rN   rN   rO   ro  W  s*   zUNIXSocketStream.receiverJ  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 rK   )rY   r   r  
memoryviewr  r|  r  r  r  r  r9   r7   )r   rJ  rj   view
bytes_sentr   rN   rN   rO   r|  k  s*   "zUNIXSocketStream.sendmsglenmaxfdsc                    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 integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r  rz   rY   arrayr   r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r9   r7   r:   
SOL_SOCKET
SCM_RIGHTSrx   	frombytesr  list)r   r  r  rj   fdsrl   ancdataflagsr  r   
cmsg_level	cmsg_type	cmsg_datarN   rN   rO   receive_fds}  sN   
&zUNIXSocketStream.receive_fdsrl   r  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  )rz   rY   r   r  r  r   filenor   r   r  r  sendmsgr  r  r  r  r  r  r  r9   r7   )r   rl   r  rj   filenosfdfdarrayr   rN   rN   rO   send_fds  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  r   r  r  r  r   rN   rN   rO   rr    s   
zUNIXSocketStream.acloser   rt  )r   r   r   r  r%   rv   r   rv  r  r  r  r   r   r  r   r  r  r  r  rw  ro  r|  r(   r#   r  r   r+   r   r  rr  rN   rN   rN   rO   r  0  s*   
 


"'
#r  c                   @   s`   e Zd ZU dZee ed< dZdejfddZ	e
dejfdd	Zdejfd
dZdddZdS )TCPSocketListenerN_accept_scopeFr  c                 C   s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr,   rv   BaseEventLooprY   rB  rA   _accept_guardr  rN   rN   rO   r     s   zTCPSocketListener.__init__rJ   c                 C   rQ   rK   )r  r   rN   rN   rO   r    r   zTCPSocketListener._raw_socketc                    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tt	j||S )Nr  )r  r9   r  r   rB   r  rB  sock_acceptr  rv   r   r  rz   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr  r  r,   r  )r   client_sock_addrr  r  rN   rN   rO   accept  s8   
zTCPSocketListener.acceptc              	      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  rB  r  r  rz   r  rn   r   r   r   rN   rN   rO   rr    s   
zTCPSocketListener.acloser   )r   r   r   r  r%   rB   rv  r  r  r   r   r  r2   r  r#  rr  rN   rN   rN   rO   r    s   
 r  c                   @   sJ   e Zd ZdejfddZdejfddZddd	Ze	dejfd
dZ
dS )UNIXSocketListenerr  c                 C   s"   || _ t | _td| _d| _d S )Nr  F)_UNIXSocketListener__raw_socketrY   rB  rA   r  r  r  rN   rN   rO   r     s   

zUNIXSocketListener.__init__rJ   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 rK   )rB  r  r%  _r   rN   rO   <lambda>"  s    z+UNIXSocketListener.accept.<locals>.<lambda>)r   r  r%  r#  setblockingr  r  rv   r   rB  r  r  r5  r  r  r9   r7   )r   r!  r'  rK  r   rN   r   rO   r#    s0   

zUNIXSocketListener.acceptNc                    s   d| _ | j  d S r   )r  r%  r   r   rN   rN   rO   rr  +  s   zUNIXSocketListener.aclosec                 C   rQ   rK   )r%  r   rN   rN   rO   r  /  r   zUNIXSocketListener._raw_socketr   )r   r   r   r  r   r2   r  r#  rr  r   r  rN   rN   rN   rO   r$    s    
r$  c                   @   sf   e Zd ZdejdefddZedejfddZ	dd	d
Z
deeef fddZdeddfddZdS )	UDPSocketr  r  c                 C   r  r  r  r  rN   rN   rO   r   5  
   


zUDPSocket.__init__rJ   c                 C   r  r  r  r   rN   rN   rO   r  >  r  zUDPSocket._raw_socketNc                    $   | j  sd| _| j   d S d S r   r  r  r  r   r   rN   rN   rO   rr  B  
   
zUDPSocket.aclosec              	      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 rK   r  r   r  r  r  r  r  r  r  rW  r  r  r9   r7   r   rN   rN   rO   ro  G  s   
zUDPSocket.receiverJ  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 rK   r  r   r  r  r  r  r9   r  r  r7   sendtor{  rN   rN   rO   r|  X     
"zUDPSocket.sendr   )r   r   r   rv   DatagramTransportr  r   r   r  r  rr  r(   rw  rC   ro  rD   r|  rN   rN   rN   rO   r*  4  s    
	
r*  c                   @   s^   e Zd ZdejdefddZedejfddZ	dd	d
Z
defddZdeddfddZdS )ConnectedUDPSocketr  r  c                 C   r  r  r  r  rN   rN   rO   r   e  r+  zConnectedUDPSocket.__init__rJ   c                 C   r  r  r  r   rN   rN   rO   r  n  r  zConnectedUDPSocket._raw_socketNc                    r,  r   r-  r   rN   rN   rO   rr  r  r.  zConnectedUDPSocket.aclosec              	      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   packetrN   rN   rO   ro  w  s   $zConnectedUDPSocket.receiverJ  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 rK   r0  r{  rN   rN   rO   r|    r2  zConnectedUDPSocket.sendr   )r   r   r   rv   r3  r  r   r   r  r  rr  rw  ro  r|  rN   rN   rN   rO   r4  d  s    
	
r4  hostport
local_addrc                    sB   t ttjtf t jt| ||dI d H \}}|  t||S )N)r8  )	r,   r(   rv   r  r  rY   create_connectionr  r  )r6  r7  r8  r  r  rN   rN   rO   connect_tcp  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 rK   )r  r&  rj   r  rN   rO   r(    s   
 zconnect_unix.<locals>.<lambda>)r   rY   r  AF_UNIXr)  connectr  rv   r   r  r  r5  r   r   r  )r;  rK  rN   r<  rO   connect_unix  s&   

r?  familylocal_addressremote_address
reuse_portc                    sb   t  jt||| |dI d H }ttj|d }|d }|jr%|  |j|s,t||S t	||S )N)r8  remote_addrr@  rC  r   r  )
rY   create_datagram_endpointr  r,   rv   r3  rm   r   r*  r4  )r@  rA  rB  rC  rF  r  r  rN   rN   rO   create_udp_socket  s    

rF  r@  typeprotor
  rH  rI  r
  c                   s*   t  j| |||||dI d H }tt|S )NrG  )rY   getaddrinfor,   r=   )r6  r7  r@  rH  rI  r
  rF  rN   rN   rO   rJ    s
   

rJ  sockaddrc                    s   t  | |I d H S rK   )rY   getnameinfo)rK  r
  rN   rN   rO   rL    s   rL  read_events_read_eventswrite_events_write_eventssockc              
      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   rN  r   rT  r   r8   rY   rv   r@   r  r  rV  r  r9   )rQ  rM  rj   eventreadablerN   rN   rO   wait_socket_readable  s4   



rT  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   rP  r   rT  r   r8   rY   rv   r@   r  r  r  rV  r  r9   )rQ  rO  rj   rR  writablerN   rN   rO   wait_socket_writable  s4   



rV  c                   @   sT   e Zd ZdddZdddZdefddZdefd	d
ZdddZ	de
fddZdS )r@   rJ   c                 C   r   rK   r   rd  rN   rN   rO   r   $  r   zEvent.__new__Nc                 C   r  rK   )rv   r@   _eventr   rN   rN   rO   r   '  r  zEvent.__init__c                 C   s   | j   t| jS rK   )rW  r   r4   r   rN   rN   rO   r   *  r  z	Event.setc                 C   s
   | j  S rK   )rW  r  r   rN   rN   rO   r  .  r   zEvent.is_setc                    s&   | j  I d H rt I d H  d S d S rK   )rW  r  r   r   rN   rN   rO   r  1  s   z
Event.waitc                 C   s   t t| jjS rK   )r0   r  rW  _waitersr   rN   rN   rO   
statistics5  rc   zEvent.statistics)rJ   r@   r   )r   r   r   r   r   r4   r   r   r  r  r0   rY  rN   rN   rN   rO   r@   #  s    


r@   c                   @   s"  e Zd ZU dZeed< dedd fddZdefddZd(d
dZde	e
e  de	e de	e dd	fddZedefddZejdedd	fddZedefddZedefddZdefddZdedefddZd(ddZdedd	fd d!Zd(d"d#Zdedd	fd$d%Zdefd&d'Zd	S ))r?   r   _total_tokenstotal_tokensrJ   c                 C   r   rK   r   )r   r[  rN   rN   rO   r   <  r   zCapacityLimiter.__new__c                 C   s   t  | _t | _|| _d S rK   )r   
_borrowersr   _wait_queuer[  )r   r[  rN   rN   rO   r   ?  s   
zCapacityLimiter.__init__Nc                    s   |   I d H  d S rK   )acquirer   rN   rN   rO   r  D  r   zCapacityLimiter.__aenter__r   r   r   c                    s   |    d S rK   )release)r   r   r   r   rN   rN   rO   r  G  s   zCapacityLimiter.__aexit__c                 C   rQ   rK   )rZ  r   rN   rN   rO   r[  O  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   isinfr3  rz   rZ  r]  valuesr  r  r   )r   r   	old_valuerh   rR  rN   rN   rO   r[  S  s"   

c                 C   s
   t | jS rK   )r  r\  r   rN   rN   rO   borrowed_tokensh  s   
zCapacityLimiter.borrowed_tokensc                 C   s   | j t| j S rK   )rZ  r  r\  r   rN   rN   rO   available_tokensl  s   z CapacityLimiter.available_tokensc                 C   s   |  t  t| jS rK   )acquire_on_behalf_of_nowaitrX   r4   acquire_nowaitr   rN   rN   rO   rf  p  s   
zCapacityLimiter.acquire_nowaitborrowerc                 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)	r\  rx   r]  r  rZ  r<   r   r4   re  )r   rg  rN   rN   rO   re  t  s   

z+CapacityLimiter.acquire_on_behalf_of_nowaitc                    s   |  t I d H S rK   )acquire_on_behalf_ofrX   r   rN   rN   rO   r^    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 rK   )r   re  r<   rv   r@   r]  r  r   rV  r\  r   r   r_  r   rg  rR  rN   rN   rO   rh    s*   
z$CapacityLimiter.acquire_on_behalf_ofc                 C   s   |  t  d S rK   )release_on_behalf_ofrX   r   rN   rN   rO   r_    rc   zCapacityLimiter.releasec                 C   sb   z| j | W n ty   tdd w | jr-t| j | jk r/| j d }|  d S d S d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensr  )	r\  r   r   rx   r]  r  rZ  popitemr   ri  rN   rN   rO   rj    s   z$CapacityLimiter.release_on_behalf_ofc                 C   s   t | j| jt| jt| jS rK   )r/   rc  r[  r=  r\  r  r]  r   rN   rN   rO   rY    s   zCapacityLimiter.statisticsr   )r   r   r   rZ  r   rv  r   r   r  r%   r)   r   r   r  r   r[  r   r  rc  rd  r4   rf  r   re  r^  rh  r_  rj  r/   rY  rN   rN   rN   rO   r?   9  s:   
 




_default_thread_limiterc                  C   s4   zt  W S  ty   td} t |  |  Y S w )N(   )rl  r   rT  r?   r   )rS  rN   rN   rO   rU    s   

rU  c                	   @   s   e Zd Zdeedf fddZdeddfdd	Zdd
dZdee	e
  dee
 dee dee fddZdddZdefddZdS )_SignalReceiversignals.c                 C   s,   || _ t | _t | _t | _t | _	d S rK   )
_signalsrY   rB  r   _signal_queuerv   r   r  r   _handled_signals)r   ro  rN   rN   rO   r     s
   
z_SignalReceiver.__init__signumrJ   Nc                 C   s*   | j | | j s| jd  d S d S rK   )rq  r  r  r   r  )r   rs  rN   rN   rO   _deliver  s   
z_SignalReceiver._deliverc                 C   s2   t | jD ]}| j|| j| | j| q| S rK   )r   rp  rB  add_signal_handlerrt  rr  r   )r   sigrN   rN   rO   r     s   z_SignalReceiver.__enter__r   r   r   c                 C   s   | j D ]}| j| qd S rK   )rr  rB  remove_signal_handler)r   r   r   r   rv  rN   rN   rO   r     s   
z_SignalReceiver.__exit__c                 C   s   | S rK   rN   r   rN   rN   rO   	__aiter__  s   z_SignalReceiver.__aiter__c                    s4   t  I d H  | jst | _| jI d H  | j S rK   )r   rq  rv   r   r  rW  r   rN   rN   rO   	__anext__  s   

z_SignalReceiver.__anext__)rJ   rn  )r   r   r   r(   r  r   rt  r   r%   r)   r   r   r   r   rx  ry  rN   rN   rN   rO   rn    s    




rn  ro  c                  G   s   t | S rK   )rn  )ro  rN   rN   rO   open_signal_receiver  rP   rz  c                 C   sJ   t | }|d u rtr|  nd }d }n|j}|j}tt| ||t| S rK   )	r   r   r   r   r   r  r1   r2  rL   )rI   r   r   r  rN   rN   rO   _create_task_info  s   
r{  c                   C   s
   t t S rK   )r{  rX   rN   rN   rN   rO   get_current_task  r   r|  c                   C   s   dd t  D S )Nc                 S   s   g | ]
}|  st|qS rN   )r   r{  )r[   rI   rN   rN   rO   r^     s    z%get_running_tasks.<locals>.<listcomp>)rV   rN   rN   rN   rO   get_running_tasks  rc   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   rX   rV   _fut_waiterr   r   )	this_taskrI   rN   rN   rO   wait_all_tasks_blocked
  s   
r  c                   @   s   e Zd Z			ddededeej fddZdd	d
Zdej	de
eef ddfddZdddZdddZdedeeef f de
eef dee fddZdedeeeef f de
eef defddZdedeeeef f de
eef ddfddZdS )
TestRunnerFNrf   r   r   c                 C   sD   g | _ t|| t | _| j| | j| j t| j d S rK   )	r  r   rv   r{   rB  r}   set_exception_handler_exception_handlerr|   )r   rf   r   r   rN   rN   rO   r     s   

zTestRunner.__init__rJ   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 )Nrk   T)
rV   rB  rn   ro   rv   rp   rq   rm   r,   r   )r   rs   rI   rN   rN   rO   ru   '  s   

zTestRunner._cancel_all_tasksrj   r]   c                 C   s2   t |dtr| j|d  d S || d S )Nrm   )r   r   r   r  r  default_exception_handler)r   rj   r]   rN   rN   rO   r  9  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  r;   r  rN   rN   rO   _raise_async_exceptionsA  s   z"TestRunner._raise_async_exceptionsc              	   C   sL   z|    | j| j  W td  | j  d S td  | j  w rK   )ru   rB  ro   r~   rv   r|   r   r   rN   rN   rO   r   J  s   

zTestRunner.closefixture_func.r7  c                 #   sn    d fdd}j  t  j | }j   V     j |   d S )NrJ   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 stoprN   )	asendr  r   r(  r  r  StopAsyncIterationrr  rx   )agenretvalr   rR  rK  r  r7  r   rN   rO   fixture_runnerW  s&   

z7TestRunner.run_asyncgen_fixture.<locals>.fixture_runnerr   )	rB  create_futurerv   r@   rW   ro   rF  r   r  )r   r  r7  r  fixture_taskrN   r  rO   run_asyncgen_fixtureR  s   

zTestRunner.run_asyncgen_fixturec                 C   s"   | j |di |}|   |S NrN   )rB  ro   r  )r   r  r7  r  rN   rN   rO   run_fixturet  s   zTestRunner.run_fixture	test_funcc              
   C   sX   z| j |di | W n ty% } z| j| W Y d }~nd }~ww |   d S r  )rB  ro   r   r  r  r  )r   r  r7  r   rN   rN   rO   run_test}  s   zTestRunner.run_test)FFNr   )r   r   r   r   r%   rv   AbstractEventLoopPolicyr   ru   r   r    r  r   r  r  r   r   r   r   r"   r  r   r  r  rN   rN   rN   rO   r    sT    





	

"

	
r  rK   r   )r   )r   rv   concurrent.futures
concurrentr   r  r   asyncio.base_eventsr   collectionsr   r   r   contextvarsr   r   dataclassesr   	functoolsr	   r
   inspectr   r   r   r   r   r   ior   osr   rC  r   r   r   	threadingr   typesr   typingr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   weakrefr-   rY   r/   r0   r1   r2   _core._compatr3   r4   _core._eventloopr5   r6   _core._exceptionsr7   r8   r9   r:   r;   BaseExceptionGroupr<   _core._socketsr=   r>   _core._synchronizationr?   BaseCapacityLimiterr@   	BaseEventrA   _core._tasksrB   BaseCancelScoperC   rD   lowlevelrE   r4  r   rL   rV   rW   rX   rY   rZ   r   rb   rd   r   r   r   r   r   r   rv  r   r  r   	_run_varscurrent_tokenr   r   r  r   r   r   r   r   r   r   r   r   r   r   
TaskStatusr  r  r   _Retval_Queue_Typer>  rP  rQ  r^  r`  rb  rc  r  ri  r  rx  r~  rw  r  r  r  r  r  Protocolr  r  r  r  SocketListenerr  r$  r*  r4  r:  r?  rF  rJ  rL  rN  rP  rT  rV  rl  rU  rn  rz  r{  r|  r}  r  r  rN   rN   rN   rO   <module>   s  
  \" 2


	

 
N

	 HD

1


	 8	

'
$T $<%03






  y*	
