U
    ¶ÜŸjZ ã                   @  s†  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZm Z  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dlm-Z- d dl.m/Z/ d dl0m1Z1 d dlm2Z2m3Z3 d dl
m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlmEZE d dlFZFddlGmHZHmIZImJZJmKZKmLZL ddlMmNZNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z] ddl[m^Z_ ddl[m`Za ddl[mbZbmcZc dd l[mdZe dd!lfmgZh dd"lLmiZimjZjmkZkmlZlmmZm dd#lnmoZo dd$lpmqZq dd%lrmsZsmtZt e	jud&k�r¸d d'l7mvZv nd d'lwmvZv e	jud(k�rîd d)lmxZx d d*l7myZymzZz nŒd dlZd dl{Z{d dl0Z0d d+lm|Z|m}Z}m~Z~mZ d d,l€m�Z� d d*lwmyZymzZz G d-d.„ d.e{j‚ƒZƒG d/d0„ d0ƒZxd1d2d3œd4d5„Z„d1d2d3œd6d7„Z…eCd8ƒZ†eCd9d:d;�Z‡eyd<ƒZˆevd=ƒZ‰eqd>ƒZŠd?e‹d>< d@dAœdBdC„ZŒdDdEdFœdGdH„Z�eEƒ ZŽdIe‹dJ< d@dKdLœdMdN„Z�G dOdP„ dPehƒZgG dQdR„ dRƒZ�eEƒ Z‘dSe‹dT< G dUdV„ dVeLj’ƒZ“G dWdX„ dXeLj”ƒZ”eBe@e† e@e• f Z–G dYdZ„ dZe4ƒZ—eqd[ƒZ˜d\e‹d[< eqd]ƒZ™d^e‹d]< G d_d`„ d`eLjšƒZše"dadb�G dcdd„ ddeLj›ƒƒZœe"dadb�G dedf„ dfeLj�ƒƒZže"dadb�G dgdh„ dheLjŸƒƒZŸdidjd2dkœdldm„Z dnd2doœdpdq„Z¡G drds„ dsej¢ƒZ£G dtdu„ duej¤ƒZ¤G dvdw„ dweLj¥ƒZ¥G dxdy„ dyƒZ¦G dzd{„ d{e¦eLj§ƒZ§G d|d}„ d}eLjkƒZ¨G d~d„ deLjkƒZ©G d€d�„ d�eLjªƒZªG d‚dƒ„ dƒeLj«ƒZ«G d„d…„ d…e¦eLj¬ƒZ¬G d†d‡„ d‡e¦eLj­ƒZ­eqdˆƒZ®d‰e‹dŠ< eqd‹ƒZ¯d‰e‹dŒ< G d�dŽ„ dŽe_ƒZ^G d�d�„ d�eaƒZ`G d‘d’„ d’eeƒZdG d“d”„ d”e]ƒZ\eqd•ƒZ°d–e‹d•< G d—d˜„ d˜ƒZ±G d™dš„ dšeKƒZ²G d›dœ„ dœeLj³ƒZ³G d�dž„ džeiƒZ´e´ZµdS )Ÿé    )ÚannotationsN)ÚAbstractEventLoopÚCancelledErrorÚ	all_tasksÚcreate_taskÚcurrent_taskÚget_running_loopÚsleep)Ú_run_until_complete_cb)ÚOrderedDictÚdeque)ÚAsyncIteratorÚIterable)ÚFuture)Úsuppress)ÚContextÚcopy_context)Ú	dataclass)ÚpartialÚwraps)ÚCORO_RUNNINGÚCORO_SUSPENDEDÚgetcoroutinestateÚiscoroutine)ÚIOBase)ÚPathLike)ÚQueue)ÚSignals)ÚAddressFamilyÚ
SocketKind)ÚThread)ÚTracebackType)ÚIOÚAnyÚAsyncGeneratorÚ	AwaitableÚCallableÚ
CollectionÚContextManagerÚ	CoroutineÚOptionalÚSequenceÚTupleÚTypeVarÚcast)ÚWeakKeyDictionaryé   )ÚCapacityLimiterStatisticsÚEventStatisticsÚLockStatisticsÚTaskInfoÚabc)Úclaim_worker_threadÚthreadlocals)ÚBrokenResourceErrorÚBusyResourceErrorÚClosedResourceErrorÚEndOfStreamÚ
WouldBlockÚiterate_exceptions)Úconvert_ipv6_sockaddr)Úcreate_memory_object_stream©ÚCapacityLimiter©ÚEvent©ÚLock)ÚResourceGuardÚSemaphoreStatistics©Ú	Semaphore©ÚCancelScope)ÚAsyncBackendÚIPSockAddrTypeÚSocketListenerÚUDPPacketTypeÚUNIXDatagramPacketType)ÚStrOrBytesPath)ÚRunVar)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)é   é
   )Ú	ParamSpec©rU   é   )ÚRunner)ÚTypeVarTupleÚUnpack)Ú
coroutinesÚeventsÚ
exceptionsÚtasks)ÚBaseExceptionGroupc                   @  s   e Zd ZdZdZdZdS )Ú_StateÚcreatedZinitializedÚclosedN)Ú__name__Ú
__module__Ú__qualname__ÚCREATEDÚINITIALIZEDÚCLOSED© rk   rk   ú</tmp/pip-unpacked-wheel-chk82kbd/anyio/_backends/_asyncio.pyrb   v   s   rb   c                   @  s–   e Zd Zdddœdddœdd„Zd dœdd	„Zd
ddddœdd„Zddœdd„Zddœdd„Zddœdddœdd„Zddœdd„Z	dddœd d!„Z
dS )"rZ   N©ÚdebugÚloop_factoryúbool | Noneú&Callable[[], AbstractEventLoop] | Nonec                C  s0   t j| _|| _|| _d | _d | _d| _d| _d S )Nr   F)	rb   rh   Ú_stateÚ_debugÚ_loop_factoryÚ_loopÚ_contextÚ_interrupt_countÚ_set_event_loop)Úselfrn   ro   rk   rk   rl   Ú__init__}   s    zRunner.__init__©Úreturnc                 C  s   |   ¡  | S ©N)Ú
_lazy_init©ry   rk   rk   rl   Ú	__enter__‹   s    zRunner.__enter__útype[BaseException]ÚBaseExceptionr!   ÚNone©Úexc_typeÚexc_valÚexc_tbr|   c                 C  s   |   ¡  d S r}   )Úclose©ry   r…   r†   r‡   rk   rk   rl   Ú__exit__�   s    zRunner.__exit__c              	   C  s†   | j tjk	rdS zH| j}t	|ƒ | 
| ¡ ¡ t|dƒrH| 
| ¡ ¡ n| 
t|ƒ¡ W 5 | jrjt d¡ | ¡  d| _tj| _ X dS )zShutdown and close event loop.NÚshutdown_default_executor)rr   rb   ri   rx   r^   Úset_event_looprˆ   ru   rj   Ú_cancel_all_tasksÚrun_until_completeÚshutdown_asyncgensÚhasattrr‹   Ú_shutdown_default_executor©ry   Úlooprk   rk   rl   rˆ   —   s    

zRunner.closer   c                 C  s   |   ¡  | jS )zReturn embedded event loop.)r~   ru   r   rk   rk   rl   Úget_loopª   s    zRunner.get_loop)ÚcontextzCoroutine[T_Retval]ÚT_Retval)Úcoror|   c             
   C  sT  t  |¡std|›�ƒ‚t ¡ dk	r,tdƒ‚|  ¡  |dkrB| j}| | j	j
|¡}t ¡ t ¡ kr°t tj¡tjkr°t| j|d�}zt tj|¡ W q´ tk
r¬   d}Y q´X nd}d| _zfz| j	 |¡W W ¢TS  tjk
�r   | jdk�rt|ddƒ}|dk	�r|ƒ dk�rtƒ ‚‚ Y nX W 5 |dk	�rNt tj¡|k�rNt tjtj¡ X dS )z/Run a coroutine inside the embedded event loop.za coroutine was expected, got Nz7Runner.run() cannot be called from a running event loop)Ú	main_taskr   Úuncancel)r]   r   Ú
ValueErrorr^   Ú_get_running_loopÚRuntimeErrorr~   rv   Úrunru   r   Ú	threadingÚcurrent_threadÚmain_threadÚsignalÚ	getsignalÚSIGINTÚdefault_int_handlerr   Ú
_on_sigintrw   rŽ   r_   r   ÚgetattrÚKeyboardInterrupt)ry   r—   r•   ÚtaskZsigint_handlerr™   rk   rk   rl   r�   ¯   sD    
ÿÿþÿþz
Runner.runc                 C  sŠ   | j tjkrtdƒ‚| j tjkr$d S | jd krRt ¡ | _| j	s\t 
| j¡ d| _	n
|  ¡ | _| jd k	rt| j | j¡ t ¡ | _tj| _ d S )NzRunner is closedT)rr   rb   rj   rœ   ri   rt   r^   Únew_event_loopru   rx   rŒ   rs   Ú	set_debugÚcontextvarsr   rv   r   rk   rk   rl   r~   ß   s    




zRunner._lazy_initúasyncio.Task)r˜   r|   c                 C  sF   |  j d7  _ | j dkr<| ¡ s<| ¡  | j dd„ ¡ d S tƒ ‚d S )Né   c                   S  s   d S r}   rk   rk   rk   rk   rl   Ú<lambda>÷   ó    z#Runner._on_sigint.<locals>.<lambda>)rw   ÚdoneÚcancelru   Úcall_soon_threadsafer§   )ry   ÚsignumÚframer˜   rk   rk   rl   r¥   ò   s    zRunner._on_sigint)re   rf   rg   rz   r€   rŠ   rˆ   r”   r�   r~   r¥   rk   rk   rk   rl   rZ   {   s   ü0rZ   r   rƒ   ©r“   r|   c                 C  st   t  | ¡}|sd S |D ]}| ¡  q|  t j|ddiŽ¡ |D ]0}| ¡ rLq>| ¡ d k	r>|  d| ¡ |dœ¡ q>d S )NÚreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)ÚmessageÚ	exceptionr¨   )r`   r   r±   rŽ   ÚgatherÚ	cancelledr¸   Úcall_exception_handler)r“   Ú	to_cancelr¨   rk   rk   rl   r�   û   s     

ýÿr�   c                 ƒ  sf   dddœ‡ fdd„}dˆ _ ˆ jdkr(dS ˆ  ¡ }tj||fd�}| ¡  z|I dH  W 5 | ¡  X dS )	z.Schedule the shutdown of the default executor.zasyncio.futures.Futurerƒ   )Úfuturer|   c              
     sV   z ˆ j jdd� ˆ  | jd ¡ W n0 tk
rP } zˆ  | j|¡ W 5 d }~X Y nX d S )NT)Úwait)Ú_default_executorÚshutdownr²   Ú
set_resultÚ	ExceptionÚset_exception)r½   Úex©r“   rk   rl   Ú_do_shutdown  s
    z0_shutdown_default_executor.<locals>._do_shutdownTN)ÚtargetÚargs)Z_executor_shutdown_calledr¿   Úcreate_futurerž   r    ÚstartÚjoin)r“   rÆ   r½   Úthreadrk   rÅ   rl   r‘     s    
r‘   r–   ÚT_contraT)ÚcontravariantÚPosArgsTÚPÚ
_root_taskzRunVar[asyncio.Task | None]r¬   r{   c                  C  sÒ   t  d ¡} | d k	r|  ¡ s| S tƒ D ]Z}|jr$| ¡ s$dd„ |jD ƒ}|D ]2}|tksft|dd ƒdkrJt  |¡ |    S qJq$tt	j
tƒ ƒ}t |¡}|rÎ|j}|r¸|jd k	r¸|j}q¢|d k	rÎtt	j
|jƒS |S )Nc                 S  s   g | ]\}}|‘qS rk   rk   )Ú.0Úcbr•   rk   rk   rl   Ú
<listcomp>7  s     z"find_root_task.<locals>.<listcomp>rf   zuvloop.loop)rÑ   Úgetr°   r   Ú
_callbacksr
   r¦   Úsetr.   ÚasyncioÚTaskr   Ú_task_statesÚcancel_scopeÚ_parent_scopeÚ
_host_task)Ú	root_taskr¨   Ú	callbacksrÓ   ÚstaterÛ   rk   rk   rl   Úfind_root_task/  s,    

ÿþ

rá   r&   Ústr)Úfuncr|   c                 C  s0   t | dd ƒ}t | dd ƒ}d dd„ ||fD ƒ¡S )Nrf   rg   Ú.c                 S  s   g | ]}|r|‘qS rk   rk   )rÒ   Úxrk   rk   rl   rÔ   Q  s      z%get_callable_name.<locals>.<listcomp>)r¦   rË   )rã   ÚmoduleÚqualnamerk   rk   rl   Úget_callable_nameN  s    rè   z1WeakKeyDictionary[asyncio.AbstractEventLoop, Any]Ú	_run_varsÚbool)r¨   r|   c                 C  sB   zt |  ¡ ƒttfkW S  tk
r<   td| › d�ƒd‚Y nX dS )zBReturn ``True`` if the task has been started and has not finished.zCannot determine if task z has started or notN)r   Úget_coror   r   ÚAttributeErrorrÂ   ©r¨   rk   rk   rl   Ú_task_started[  s    rî   c                   @  s.  e Zd Zejddœddd dœdd„Zejdfdddœdd	„Zd d
œdd„Zdddddœdd„Zdddœdd„Z	dd
œdd„Z
d ddœdd„Zdd
œdd„Zdd
œd d!„Zdd
œd"d#„Zedd
œd$d%„ƒZejddd&œd'd%„ƒZedd
œd(d)„ƒZedd
œd*d+„ƒZedd
œd,d-„ƒZejddd&œd.d-„ƒZd/S )0rK   F©ÚdeadlineÚshieldÚfloatrê   ©rð   rñ   r|   c                C  s
   t  | ¡S r}   ©ÚobjectÚ__new__©Úclsrð   rñ   rk   rk   rl   rö   j  s    zCancelScope.__new__c                 C  sV   || _ || _d | _tƒ | _d| _d| _d| _d | _d | _	tƒ | _
d | _d| _d | _d S )NFr   )Ú	_deadlineÚ_shieldrÜ   r×   Ú_child_scopesÚ_cancel_calledÚ_cancelled_caughtÚ_activeÚ_timeout_handleÚ_cancel_handleÚ_tasksrÝ   Ú_cancel_callsÚ_cancelling)ry   rð   rñ   rk   rk   rl   rz   o  s    zCancelScope.__init__r{   c                 C  sÎ   | j rtdƒ‚ttjtƒ ƒ | _}| j |¡ zt	| }W n& t
k
r`   td | ƒ}|t	|< Y n6X |j| _| |_| jd k	r–| jj | ¡ | jj |¡ |  ¡  d| _ tjdkrº| j ¡ | _| jrÊ|  | ¡ | S )Nz;Each CancelScope may only be used for a single 'with' blockTrX   )rþ   rœ   r.   rØ   rÙ   r   rÝ   r  ÚaddrÚ   ÚKeyErrorÚ	TaskStaterÛ   rÜ   rû   ÚremoveÚ_timeoutÚsysÚversion_infoÚ
cancellingr  rü   Ú_deliver_cancellation)ry   Z	host_taskÚ
task_staterk   rk   rl   r€   ~  s.    ÿ



zCancelScope.__enter__útype[BaseException] | NoneúBaseException | NoneúTracebackType | Nonerp   r„   c                 C  sþ   | j stdƒ‚tƒ | jk	r"tdƒ‚| jd k	s0t‚t | j¡}|d ksN|j| k	rVtdƒ‚d| _ | jrr| j 	¡  d | _| j
 | j¡ | jd k	r¨| jj | ¡ | jj
 | j¡ | j|_|  ¡  | jrú|d k	rút|ƒD ]$}t|tƒrÎ|  |¡| _| jrÎ qôqÎ| jS d S )NzThis cancel scope is not activezIAttempted to exit cancel scope in a different task than it was entered inzTAttempted to exit a cancel scope that isn't the current tasks's current cancel scopeF)rþ   rœ   r   rÝ   ÚAssertionErrorrÚ   rÕ   rÛ   rÿ   r±   r  r  rÜ   rû   r  Ú_restart_cancellation_in_parentrü   r=   Ú
isinstancer   Ú	_uncancelrý   )ry   r…   r†   r‡   Zhost_task_stateÚexcrk   rk   rl   rŠ   �  s<    ÿÿ


zCancelScope.__exit__r   )Úcancelled_excr|   c                 C  sn   t jdk s| jd krd| _dS | jd k	rR| jrR|  jd8  _| j ¡ | jkr(dS q(d| _dt| ƒd›�|jkS )N©rU   é	   r   Tr­   úCancelled by cancel scope rå   )r	  r
  rÝ   r  r  r™   ÚidrÈ   )ry   r  rk   rk   rl   r  Î  s    
zCancelScope._uncancelrƒ   c                 C  s@   | j tjkr<tƒ }| ¡ | j kr*|  ¡  n| | j | j¡| _d S r}   )	rù   ÚmathÚinfr   Útimer±   Úcall_atr  rÿ   r’   rk   rk   rl   r  Ý  s
    
zCancelScope._timeout)Úoriginr|   c                 C  sÞ   d}t ƒ }| jD ]|}|jrqd}||k	r|| jks:t|ƒr|j}t|tjƒrT| 	¡ s| j
d7  _
tjdkr„| dt|ƒd›�¡ q| ¡  q| jD ]}|js”|js”| |¡p°|}q”|| krÚ|rÔtƒ  | j|¡| _nd| _|S )aZ  
        Deliver cancellation to directly contained tasks and nested cancel scopes.

        Schedule another run at the end if we still have tasks eligible for
        cancellation.

        :param origin: the cancel scope that originated the cancellation
        :return: ``True`` if the delivery needs to be retried on the next cycle

        FTr­   r  r  rå   N)r   r  Ú_must_cancelrÝ   rî   Ú_fut_waiterr  rØ   r   r°   r  r	  r
  r±   r  rû   rú   Úcancel_calledr  r   Ú	call_soonr   )ry   r  Zshould_retryÚcurrentr¨   ÚwaiterÚscoperk   rk   rl   r  å  s0    



 ÿz!CancelScope._deliver_cancellationc                 C  s>   | j }|dk	r:|jr*|jdkr:| |¡ q:|jr2q:|j }qdS )zb
        Restart the cancellation effort in the closest directly cancelled parent scope.

        N)rÜ   rü   r   r  rú   )ry   r&  rk   rk   rl   r    s    

z+CancelScope._restart_cancellation_in_parentc                 C  s*   | j }|d k	r&|js&|jrdS |j }qdS )NTF)rÜ   rú   rü   )ry   rÛ   rk   rk   rl   Ú_parent_cancelled%  s    zCancelScope._parent_cancelledc                 C  s:   | j s6| jr| j ¡  d | _d| _ | jd k	r6|  | ¡ d S ©NT)rü   rÿ   r±   rÝ   r  r   rk   rk   rl   r±   0  s    

zCancelScope.cancelc                 C  s   | j S r}   )rù   r   rk   rk   rl   rð   :  s    zCancelScope.deadline©Úvaluer|   c                 C  s<   t |ƒ| _| jd k	r$| j ¡  d | _| jr8| js8|  ¡  d S r}   )rò   rù   rÿ   r±   rþ   rü   r  ©ry   r*  rk   rk   rl   rð   >  s    


c                 C  s   | j S r}   )rü   r   rk   rk   rl   r"  H  s    zCancelScope.cancel_calledc                 C  s   | j S r}   )rý   r   rk   rk   rl   Úcancelled_caughtL  s    zCancelScope.cancelled_caughtc                 C  s   | j S r}   )rú   r   rk   rk   rl   rñ   P  s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|  ¡  d S r}   )rú   r  r+  rk   rk   rl   rñ   T  s    
N)re   rf   rg   r  r  rö   rz   r€   rŠ   r  r  r  r  r'  r±   Úpropertyrð   Úsetterr"  r,  rñ   rk   rk   rk   rl   rK   i  s0    ÿ1-
	rK   c                   @  s$   e Zd ZdZdZdddœdd„ZdS )	r  z 
    Encapsulates auxiliary task information that cannot be added to the Task instance
    itself because there are no guarantees about its implementation.
    )Ú	parent_idrÛ   Ú__weakref__ú
int | NoneúCancelScope | None©r/  rÛ   c                 C  s   || _ || _d S r}   r3  )ry   r/  rÛ   rk   rk   rl   rz   i  s    zTaskState.__init__N)re   rf   rg   Ú__doc__Ú	__slots__rz   rk   rk   rk   rl   r  a  s   r  z*WeakKeyDictionary[asyncio.Task, TaskState]rÚ   c                   @  s.   e Zd Zdddœdd„Zdddd	œd
d„ZdS )Ú_AsyncioTaskStatusúasyncio.FutureÚint)r½   r/  c                 C  s   || _ || _d S r}   )Ú_futureÚ
_parent_id)ry   r½   r/  rk   rk   rl   rz   w  s    z_AsyncioTaskStatus.__init__NzT_contra | Nonerƒ   r)  c                 C  sZ   z| j  |¡ W n* tjk
r:   | j  ¡ s6tdƒd ‚Y nX ttjtƒ ƒ}| j	t
| _d S )Nz.called 'started' twice on the same task status)r9  rÁ   rØ   ÚInvalidStateErrorrº   rœ   r.   rÙ   r   r:  rÚ   r/  )ry   r*  r¨   rk   rk   rl   Ústarted{  s    
ÿþz_AsyncioTaskStatus.started)N)re   rf   rg   rz   r<  rk   rk   rk   rl   r6  v  s   r6  c                   @  sˆ   e Zd Zddœdd„Zd dœdd„Zddd	d
dœdd„Zd ddddddœdd„Zddœdddddœdd„Zddœdddddœdd„ZdS )!Ú	TaskGrouprƒ   r{   c                 C  s    t ƒ | _d| _g | _tƒ | _d S )NF)rK   rÛ   rþ   Ú_exceptionsr×   r  r   rk   rk   rl   rz   ‰  s    zTaskGroup.__init__c                 Ã  s   | j  ¡  d| _| S r(  )rÛ   r€   rþ   r   rk   rk   rl   Ú
__aenter__�  s    
zTaskGroup.__aenter__r  r  r  rp   r„   c              
   Ã  sÄ   | j  |||¡}|d k	r8| j  ¡  t|tƒs8| j |¡ d }| jr”zt 	| j¡I d H  W q< tk
r� } z| j  ¡  |d kr€|}W 5 d }~X Y q<X q<d| _
| jr¬td| jƒ‚|rÀ|d ks¼|rÀ|‚|S )NFzunhandled errors in a TaskGroup)rÛ   rŠ   r±   r  r   r>  Úappendr  rØ   r¾   rþ   ra   )ry   r…   r†   r‡   Zignore_exceptionZ!cancelled_exc_while_waiting_tasksr  rk   rk   rl   Ú	__aexit__”  s.    


 ÿzTaskGroup.__aexit__Nz,Callable[[Unpack[PosArgsT]], Awaitable[Any]]útuple[Unpack[PosArgsT]]rõ   úasyncio.Future | Noner¬   )rã   rÈ   ÚnameÚtask_status_futurer|   c           
        s  dddœ‡ ‡‡fdd„}ˆ j s&tdƒ‚i }ˆrPttƒ ƒ}tˆtˆ jjƒƒ|d< ntˆ jjƒ}|||Ž}t|ƒs¤t|dƒr„|j	› d	�nd
}	t
d|	› |j› d|›d�ƒ‚|d kr´t|ƒnt|ƒ}t||d�‰ˆ |¡ t|ˆ jd�tˆ< ˆ jj ˆ¡ ˆ j ˆ¡ ˆS )Nr¬   rƒ   )Ú_taskr|   c              
     s  t |  }|jd k	st‚| |jjks&t‚|jj | ¡ ˆ j ˆ¡ t | = z|  ¡ }W n: tk
rŒ } zt|jtƒrx|j}qd|}W 5 d }~X Y nX |d k	ròˆd k	rªˆ 	¡ rªd S ˆd ksºˆ 
¡ ræt|tƒsÐˆ j |¡ ˆ j ¡ sðˆ j ¡  n
ˆ |¡ n"ˆd k	�rˆ 
¡ �sˆ tdƒ¡ d S )Nz2Child exited without calling task_status.started())rÚ   rÛ   r  r  r  r¸   r   r  Ú__context__rº   r°   r>  r@  r'  r±   rÃ   rœ   )rF  r  r  Úe©ry   r¨   rE  rk   rl   Ú	task_doneÂ  s2    

ÿz#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.Ztask_statusrf   rä   Ú z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine object©rD  r3  )rþ   rœ   r  r   r6  rÛ   rÝ   r   r�   rf   Ú	TypeErrorrg   rè   râ   r   Úadd_done_callbackr  rÚ   r  r  )
ry   rã   rÈ   rD  rE  rJ  Úkwargsr/  r—   Úprefixrk   rI  rl   Ú_spawn»  s:    $ÿ
 
ÿ

ÿ
 ÿ
zTaskGroup._spawnrL  zUnpack[PosArgsT])rã   rÈ   rD  r|   c                G  s   |   |||¡ d S r}   )rQ  )ry   rã   rD  rÈ   rk   rk   rl   Ú
start_soon  s    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r#   c                Ç  s|   t  ¡ }|  ||||¡}z|I d H W S  tk
rv   | ¡  tdd��$ ttƒ� |I d H  W 5 Q R X W 5 Q R X ‚ Y nX d S ©NT©rñ   )rØ   r   rQ  r   r±   rK   r   )ry   rã   rD  rÈ   r½   r¨   rk   rk   rl   rÊ     s    zTaskGroup.start)N)	re   rf   rg   rz   r?  rA  rQ  rR  rÊ   rk   rk   rk   rl   r=  ˆ  s   , ûQü	ÿr=  c                      s^   e Zd ZdZddddœ‡ fdd„Zdd	d
ddœdd„Zddœdd„Zddddœdd„Z‡  ZS )ÚWorkerThreadrV   r¬   zset[WorkerThread]zdeque[WorkerThread])rÞ   ÚworkersÚidle_workersc                   sF   t ƒ jdd� || _|| _|| _|j| _tdƒ| _t	 
¡ | _d| _d S )NzAnyIO worker threadrL  r0   F)Úsuperrz   rÞ   rV  rW  ru   r“   r   ÚqueueÚAsyncIOBackendÚcurrent_timeÚ
idle_sinceÚstopping)ry   rÞ   rV  rW  ©Ú	__class__rk   rl   rz   /  s    þ
zWorkerThread.__init__r7  r#   r  rƒ   )r½   Úresultr  r|   c                 C  sb   t  ¡ | _| js| j | ¡ | ¡ s^|d k	rTt|tƒrHt	dƒ}||_
|}| |¡ n
| |¡ d S )Nzcoroutine raised StopIteration)rZ  r[  r\  r]  rW  r@  rº   r  ÚStopIterationrœ   Ú	__cause__rÃ   rÁ   )ry   r½   r`  r  Únew_excrk   rk   rl   Ú_report_result@  s    

zWorkerThread._report_resultr{   c           
      C  sÒ   t t| jƒ�¼ | j ¡ }|d kr.W 5 Q R £ d S |\}}}}}| ¡ s¸d }d }|t_z@z|j|f|žŽ }W n& t	k
rŽ }	 z|	}W 5 d }	~	X Y nX W 5 t`X | j 
¡ s¸| j | j|||¡ | j ¡  qW 5 Q R X d S r}   )r6   rZ  r“   rY  rÕ   rº   r7   Úcurrent_cancel_scoper�   r‚   Ú	is_closedr²   rd  rJ  )
ry   Úitemr•   rã   rÈ   r½   rÛ   r`  r¸   r  rk   rk   rl   r�   R  s,    

   ÿzWorkerThread.runNzasyncio.Task | None©Úfr|   c                 C  sH   d| _ | j d ¡ | j | ¡ z| j | ¡ W n tk
rB   Y nX d S r(  )r]  rY  Ú
put_nowaitrV  ÚdiscardrW  r  rš   )ry   ri  rk   rk   rl   Ústopm  s    zWorkerThread.stop)N)	re   rf   rg   ÚMAX_IDLE_TIMErz   rd  r�   rl  Ú__classcell__rk   rk   r^  rl   rU  ,  s
   rU  Ú_threadpool_idle_workerszRunVar[deque[WorkerThread]]Ú_threadpool_workerszRunVar[set[WorkerThread]]c                      sH   e Zd Zd dœdd„Zddœ‡ fdd„Zddd	d
dddœdd„Z‡  ZS )ÚBlockingPortalr{   c                 C  s
   t  | ¡S r}   rô   ©rø   rk   rk   rl   rö   ~  s    zBlockingPortal.__new__rƒ   c                   s   t ƒ  ¡  tƒ | _d S r}   )rX  rz   r   ru   r   r^  rk   rl   rz   �  s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]rB  údict[str, Any]rõ   zFuture[T_Retval])rã   rÈ   rO  rD  r½   r|   c                 C  s,   t  t| jj|d�| j||||f| j¡ d S )NrL  )rZ  Úrun_sync_from_threadr   Z_task_grouprR  Z
_call_funcru   )ry   rã   rÈ   rO  rD  r½   rk   rk   rl   Ú_spawn_task_from_thread…  s
    ýz&BlockingPortal._spawn_task_from_thread)re   rf   rg   rö   rz   ru  rn  rk   rk   r^  rl   rq  }  s   rq  F)Úeqc                   @  s6   e Zd ZU ded< ddddœdd„Zd	d
œdd„ZdS )ÚStreamReaderWrapperzasyncio.StreamReaderÚ_streamé   r8  Úbytes©Ú	max_bytesr|   c                 Ã  s"   | j  |¡I d H }|r|S t‚d S r}   )rx  Úreadr;   )ry   r|  Údatark   rk   rl   Úreceive�  s    zStreamReaderWrapper.receiverƒ   r{   c                 Ã  s    | j  tƒ ¡ t ¡ I d H  d S r}   )rx  rÃ   r:   rZ  Ú
checkpointr   rk   rk   rl   Úaclose¤  s    zStreamReaderWrapper.acloseN)ry  )re   rf   rg   Ú__annotations__r  r�  rk   rk   rk   rl   rw  ™  s   
rw  c                   @  s4   e Zd ZU ded< dddœdd„Zddœd	d
„ZdS )ÚStreamWriterWrapperzasyncio.StreamWriterrx  rz  rƒ   ©rg  r|   c                 Ã  s    | j  |¡ | j  ¡ I d H  d S r}   )rx  ÚwriteÚdrain©ry   rg  rk   rk   rl   Úsend­  s    zStreamWriterWrapper.sendr{   c                 Ã  s   | j  ¡  t ¡ I d H  d S r}   )rx  rˆ   rZ  r€  r   rk   rk   rl   r�  ±  s    
zStreamWriterWrapper.acloseN)re   rf   rg   r‚  rˆ  r�  rk   rk   rk   rl   rƒ  ©  s   
rƒ  c                   @  sÐ   e Zd ZU ded< ded< ded< ded< dd	œd
d„Zdd	œdd„Zdd	œdd„Zdd	œdd„Zdddœdd„Ze	dd	œdd„ƒZ
e	dd	œdd„ƒZe	dd	œdd„ƒZe	dd	œdd „ƒZe	dd	œd!d"„ƒZd#S )$ÚProcesszasyncio.subprocess.ProcessÚ_processzStreamWriterWrapper | NoneÚ_stdinzStreamReaderWrapper | NoneÚ_stdoutÚ_stderrrƒ   r{   c                 Ã  s²   t dd��H | jr"| j ¡ I d H  | jr8| j ¡ I d H  | jrN| j ¡ I d H  W 5 Q R X z|  ¡ I d H  W nB tk
r¬   |  ¡  t dd�� |  ¡ I d H  W 5 Q R X ‚ Y nX d S rS  )rK   r‹  r�  rŒ  r�  r¾   r‚   Úkillr   rk   rk   rl   r�  ½  s    zProcess.acloser8  c                 Ã  s   | j  ¡ I d H S r}   )rŠ  r¾   r   rk   rk   rl   r¾   Ï  s    zProcess.waitc                 C  s   | j  ¡  d S r}   )rŠ  Ú	terminater   rk   rk   rl   r�  Ò  s    zProcess.terminatec                 C  s   | j  ¡  d S r}   )rŠ  rŽ  r   rk   rk   rl   rŽ  Õ  s    zProcess.kill)r¡   r|   c                 C  s   | j  |¡ d S r}   )rŠ  Úsend_signal)ry   r¡   rk   rk   rl   r�  Ø  s    zProcess.send_signalc                 C  s   | j jS r}   )rŠ  Úpidr   rk   rk   rl   r‘  Û  s    zProcess.pidr1  c                 C  s   | j jS r}   )rŠ  Ú
returncoder   rk   rk   rl   r’  ß  s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S r}   )r‹  r   rk   rk   rl   Ústdinã  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S r}   )rŒ  r   rk   rk   rl   Ústdoutç  s    zProcess.stdoutc                 C  s   | j S r}   )r�  r   rk   rk   rl   Ústderrë  s    zProcess.stderrN)re   rf   rg   r‚  r�  r¾   r�  rŽ  r�  r-  r‘  r’  r“  r”  r•  rk   rk   rk   rl   r‰  ¶  s&   
r‰  zset[Process]rõ   )rV  rF  r|   c                 C  s�   d}t jdk r4zt ¡  ¡ }W n tk
r2   Y nX | D ]R}|jdkrHq8|jjj	 
¡  |jjj	 
¡  |jjj	 
¡  | ¡  |r8| |j¡ q8dS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)rU   é   )r	  r
  rØ   Úget_event_loop_policyÚget_child_watcherÚNotImplementedErrorr’  r‹  rx  Ú
_transportrˆ   rŒ  r�  rŽ  Úremove_child_handlerr‘  )rV  rF  Zchild_watcherÚprocessrk   rk   rl   Ú'_forcibly_shutdown_process_pool_on_exitð  s    

r�  úset[abc.Process]©rV  r|   c                 Ã  sd   zt tjƒI dH  W nJ tjk
r^   | D ]}|jdkr*| ¡  q*| D ]}| ¡ I dH  qFY nX dS )z§
    Shuts down worker processes belonging to this event loop.

    NOTE: this only works when the event loop was started using asyncio.run() or
    anyio.run().

    N)r	   r  r  rØ   r   r’  rŽ  r�  )rV  rœ  rk   rk   rl   Ú_shutdown_process_pool_on_exit	  s    	

r   c                   @  s˜   e Zd ZU ded< ded< ded< dZded< d	Zd
ed< dddœdd„Zdddœdd„Zdddœdd„Zddœdd„Z	ddœdd„Z
ddœdd„ZdS ) ÚStreamProtocolzdeque[bytes]Ú
read_queueúasyncio.EventÚ
read_eventÚwrite_eventNúException | Noner¸   Frê   Ú	is_at_eofúasyncio.BaseTransportrƒ   ©Ú	transportr|   c                 C  s<   t ƒ | _t ¡ | _t ¡ | _| j ¡  ttj|ƒ 	d¡ d S ©Nr   )
r   r¢  rØ   rC   r¤  r¥  r×   r.   Ú	TransportÚset_write_buffer_limits©ry   rª  rk   rk   rl   Úconnection_made)  s
    


zStreamProtocol.connection_made©r  r|   c                 C  s,   |rt ƒ | _|| j_| j ¡  | j ¡  d S r}   )r8   r¸   rb  r¤  r×   r¥  ©ry   r  rk   rk   rl   Úconnection_lost0  s
    
zStreamProtocol.connection_lostrz  )r~  r|   c                 C  s   | j  t|ƒ¡ | j ¡  d S r}   )r¢  r@  rz  r¤  r×   )ry   r~  rk   rk   rl   Údata_received8  s    zStreamProtocol.data_receivedrp   r{   c                 C  s   d| _ | j ¡  dS r(  )r§  r¤  r×   r   rk   rk   rl   Úeof_received=  s    
zStreamProtocol.eof_receivedc                 C  s   t  ¡ | _d S r}   )rØ   rC   r¥  r   rk   rk   rl   Úpause_writingB  s    zStreamProtocol.pause_writingc                 C  s   | j  ¡  d S r}   ©r¥  r×   r   rk   rk   rl   Úresume_writingE  s    zStreamProtocol.resume_writing)re   rf   rg   r‚  r¸   r§  r¯  r²  r³  r´  rµ  r·  rk   rk   rk   rl   r¡  "  s   
r¡  c                   @  s�   e Zd ZU ded< ded< ded< dZded< d	d
dœdd„Zdd
dœdd„Zddd
dœdd„Zdd
dœdd„Zd
dœdd„Z	d
dœdd„Z
dS )ÚDatagramProtocolz#deque[tuple[bytes, IPSockAddrType]]r¢  r£  r¤  r¥  Nr¦  r¸   r¨  rƒ   r©  c                 C  s.   t dd�| _t ¡ | _t ¡ | _| j ¡  d S )Néd   )Úmaxlen)r   r¢  rØ   rC   r¤  r¥  r×   r®  rk   rk   rl   r¯  O  s    

z DatagramProtocol.connection_mader°  c                 C  s   | j  ¡  | j ¡  d S r}   )r¤  r×   r¥  r±  rk   rk   rl   r²  U  s    
z DatagramProtocol.connection_lostrz  rM   )r~  Úaddrr|   c                 C  s&   t |ƒ}| j ||f¡ | j ¡  d S r}   )r>   r¢  r@  r¤  r×   )ry   r~  r»  rk   rk   rl   Údatagram_receivedY  s    z"DatagramProtocol.datagram_receivedrÂ   c                 C  s
   || _ d S r}   )r¸   r±  rk   rk   rl   Úerror_received^  s    zDatagramProtocol.error_receivedr{   c                 C  s   | j  ¡  d S r}   )r¥  Úclearr   rk   rk   rl   rµ  a  s    zDatagramProtocol.pause_writingc                 C  s   | j  ¡  d S r}   r¶  r   rk   rk   rl   r·  d  s    zDatagramProtocol.resume_writing)re   rf   rg   r‚  r¸   r¯  r²  r¼  r½  rµ  r·  rk   rk   rk   rl   r¸  I  s   
r¸  c                   @  sl   e Zd Zdddœdd„Zeddœdd	„ƒZddddœdd„Zdddœdd„Zddœdd„Zddœdd„Z	dS )ÚSocketStreamzasyncio.Transportr¡  ©rª  Úprotocolc                 C  s*   || _ || _tdƒ| _tdƒ| _d| _d S ©Núreading fromú
writing toF©rš  Ú	_protocolrF   Ú_receive_guardÚ_send_guardÚ_closed©ry   rª  rÁ  rk   rk   rl   rz   i  s
    

zSocketStream.__init__úsocket.socketr{   c                 C  s   | j  d¡S ©NÚsocket©rš  Úget_extra_infor   rk   rk   rl   Ú_raw_socketp  s    zSocketStream._raw_socketry  r8  rz  r{  c              	   Ã  s   | j �ð | jj ¡ sN| j ¡ sN| jjsN| j ¡  | jj ¡ I d H  | j 	¡  nt
 ¡ I d H  z| jj ¡ }W n< tk
r¨   | jrŠtd ‚n| jjrž| jjd ‚ntd ‚Y nX t|ƒ|krÞ|d |… ||d …  }}| jj |¡ | jjsò| jj ¡  W 5 Q R X |S r}   )rÇ  rÆ  r¤  Úis_setrš  Ú
is_closingr§  Úresume_readingr¾   Úpause_readingrZ  r€  r¢  ÚpopleftÚ
IndexErrorrÉ  r:   r¸   r;   ÚlenÚ
appendleftr¾  )ry   r|  ÚchunkÚleftoverrk   rk   rl   r  t  s2    
ÿþý
zSocketStream.receiverƒ   r„  c                 Ã  sž   | j �Ž t ¡ I d H  | jr"t‚n| jjd k	r6| jj‚z| j |¡ W n6 t	k
r| } z| j 
¡ rjt|‚n‚ W 5 d }~X Y nX | jj ¡ I d H  W 5 Q R X d S r}   )rÈ  rZ  r€  rÉ  r:   rÆ  r¸   rš  r…  rœ   rÒ  r8   r¥  r¾   )ry   rg  r  rk   rk   rl   rˆ  —  s    
zSocketStream.sendc                 Ã  s(   z| j  ¡  W n tk
r"   Y nX d S r}   )rš  Ú	write_eofÚOSErrorr   rk   rk   rl   Úsend_eofª  s    zSocketStream.send_eofc                 Ã  sZ   | j  ¡ sVd| _z| j  ¡  W n tk
r2   Y nX | j  ¡  tdƒI d H  | j  ¡  d S ©NTr   )rš  rÒ  rÉ  rÛ  rÜ  rˆ   r	   Úabortr   rk   rk   rl   r�  °  s    

zSocketStream.acloseN)ry  )
re   rf   rg   rz   r-  rÐ  r  rˆ  rÝ  r�  rk   rk   rk   rl   r¿  h  s   #r¿  c                   @  sx   e Zd ZU dZded< dZded< dZddœdd	„Zedd
œdd„ƒZ	dddœdd„Z
dddœdd„Zdd
œdd„ZdS )Ú_RawSocketMixinNrC  Ú_receive_futureÚ_send_futureFrË  ©Ú
raw_socketc                 C  s   || _ tdƒ| _tdƒ| _d S )NrÃ  rÄ  )Ú_RawSocketMixin__raw_socketrF   rÇ  rÈ  ©ry   rä  rk   rk   rl   rz   Â  s    
z_RawSocketMixin.__init__r{   c                 C  s   | j S r}   )rå  r   rk   rk   rl   rÐ  Ç  s    z_RawSocketMixin._raw_socketúasyncio.AbstractEventLoopr7  rµ   c                   sD   dddœ‡ ‡fdd„}t  ¡  }ˆ_ˆ  ˆj|jd ¡ | |¡ |S )Nrõ   rƒ   rh  c                   s   ˆ` ˆ  ˆj¡ d S r}   )rá  Úremove_readerrå  ©ri  ©r“   ry   rk   rl   ÚcallbackÌ  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)rØ   r   rá  Ú
add_readerrå  rÁ   rN  ©ry   r“   rë  ri  rk   rê  rl   Ú_wait_until_readableË  s
    
z$_RawSocketMixin._wait_until_readablec                   sD   dddœ‡ ‡fdd„}t  ¡  }ˆ_ˆ  ˆj|jd ¡ | |¡ |S )Nrõ   rƒ   rh  c                   s   ˆ` ˆ  ˆj¡ d S r}   )râ  Úremove_writerrå  ré  rê  rk   rl   rë  Ö  s    z6_RawSocketMixin._wait_until_writable.<locals>.callback)rØ   r   râ  Ú
add_writerrå  rÁ   rN  rí  rk   rê  rl   Ú_wait_until_writableÕ  s
    
z$_RawSocketMixin._wait_until_writablerƒ   c                 Ã  sL   | j sHd| _ | j ¡ dkr$| j ¡  | jr6| j d ¡ | jrH| j d ¡ d S )NTéÿÿÿÿ)Ú_closingrå  Úfilenorˆ   rá  rÁ   râ  r   rk   rk   rl   r�  ß  s    
z_RawSocketMixin.aclose)re   rf   rg   rá  r‚  râ  ró  rz   r-  rÐ  rî  rñ  r�  rk   rk   rk   rl   rà  ½  s   


rà  c                   @  s`   e Zd Zddœdd„Zddddœd	d
„Zdddœdd„Zddddœdd„Zddddœdd„ZdS )ÚUNIXSocketStreamrƒ   r{   c              	   Ã  s$   | j � | j tj¡ W 5 Q R X d S r}   )rÈ  rÐ  rÀ   rÍ  ÚSHUT_WRr   rk   rk   rl   rÝ  ì  s    zUNIXSocketStream.send_eofry  r8  rz  r{  c                 Ã  s®   t ƒ }t ¡ I d H  | j�Š z| j |¡}W nX tk
rP   |  |¡I d H  Y q tk
r„ } z| j	rnt
d ‚nt|‚W 5 d }~X Y qX |sŽt‚|W  5 Q R £ S qW 5 Q R X d S r}   )r   rZ  r€  rÇ  rÐ  ÚrecvÚBlockingIOErrorrî  rÜ  ró  r:   r8   r;   )ry   r|  r“   r~  r  rk   rk   rl   r  ð  s    zUNIXSocketStream.receiver„  c                 Ã  s®   t ƒ }t ¡ I d H  | j�Š t|ƒ}|r z| j |¡}W nX tk
r\   |  |¡I d H  Y q$ t	k
r� } z| j
rztd ‚nt|‚W 5 d }~X Y q$X ||d … }q$W 5 Q R X d S r}   )r   rZ  r€  rÈ  Ú
memoryviewrÐ  rˆ  rø  rñ  rÜ  ró  r:   r8   )ry   rg  r“   ÚviewZ
bytes_sentr  rk   rk   rl   rˆ    s    zUNIXSocketStream.sendztuple[bytes, list[int]])ÚmsglenÚmaxfdsr|   c                 Ã  sf  t |tƒr|dk rtdƒ‚t |tƒr,|dk r4tdƒ‚tƒ }t d¡}t ¡ I d H  | j�– z&| j 	|t
 ||j ¡¡\}}}}W nX tk
r¤   |  |¡I d H  Y qZ tk
rØ }	 z| jrÂtd ‚nt|	‚W 5 d }	~	X Y qZX |sê|sêt‚qêqZW 5 Q R X |D ]`\}
}}|
t
jk�s|t
jk�r4td|›d|
› d|› �ƒ‚| |d t|ƒt|ƒ|j  … ¡ qø|t|ƒfS )	Nr   z%msglen must be a non-negative integerr­   z!maxfds must be a positive integerÚiz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r  r8  rš   r   ÚarrayrZ  r€  rÇ  rÐ  ÚrecvmsgrÍ  ÚCMSG_LENÚitemsizerø  rî  rÜ  ró  r:   r8   r;   Ú
SOL_SOCKETÚ
SCM_RIGHTSrœ   Z	frombytesr×  Úlist)ry   rû  rü  r“   Úfdsr·   ZancdataÚflagsr»  r  Z
cmsg_levelZ	cmsg_typeZ	cmsg_datark   rk   rl   Úreceive_fds  s:    
 ÿÿ&zUNIXSocketStream.receive_fdszCollection[int | IOBase])r·   r  r|   c                 Ã  s
  |st dƒ‚|st dƒ‚tƒ }g }|D ]2}t|tƒr@| |¡ q&t|tƒr&| | ¡ ¡ q&t d|¡}t 	¡ I d H  | j
�† z$| j |gtjtj|fg¡ W qüW q| tk
rÄ   |  |¡I d H  Y q| tk
rø } z| jrâtd ‚nt|‚W 5 d }~X Y q|X q|W 5 Q R X d S )Nzmessage must not be emptyzfds must not be emptyrý  )rš   r   r  r8  r@  r   rô  rþ  rZ  r€  rÈ  rÐ  ÚsendmsgrÍ  r  r  rø  rñ  rÜ  ró  r:   r8   )ry   r·   r  r“   ZfilenosÚfdZfdarrayr  rk   rk   rl   Úsend_fds=  s4    

 ÿzUNIXSocketStream.send_fdsN)ry  )re   rf   rg   rÝ  r  rˆ  r  r
  rk   rk   rk   rl   rõ  ë  s
   'rõ  c                   @  sZ   e Zd ZU dZded< dZddœdd„Zedd	œd
d„ƒZdd	œdd„Z	dd	œdd„Z
dS )ÚTCPSocketListenerNr2  Ú_accept_scopeFrË  rã  c                 C  s$   || _ ttjtƒ ƒ| _tdƒ| _d S )Núaccepting connections from)Ú_TCPSocketListener__raw_socketr.   rØ   ÚBaseEventLoopr   ru   rF   Ú_accept_guardræ  rk   rk   rl   rz   c  s    zTCPSocketListener.__init__r{   c                 C  s   | j S r}   )r  r   rk   rk   rl   rÐ  h  s    zTCPSocketListener._raw_socketúabc.SocketStreamc                 Ã  sî   | j r
t‚| j�¤ t ¡ I d H  tƒ �„| _zrz| j | j	¡I d H \}}W nP t
jk
r˜   z| j | j	¡ W n ttfk
r„   Y nX | j r’td ‚‚ Y nX W 5 d | _X W 5 Q R X W 5 Q R X | tjtjd¡ | j t|¡I d H \}}t||ƒS ©Nr­   )rÉ  r:   r  rZ  r€  rK   r  ru   Úsock_acceptrÐ  rØ   r   rè  rš   r™  Ú
setsockoptrÍ  ÚIPPROTO_TCPÚTCP_NODELAYÚconnect_accepted_socketr¡  r¿  )ry   Úclient_sockZ_addrrª  rÁ  rk   rk   rl   Úacceptl  s,    
 ÿzTCPSocketListener.acceptrƒ   c              	   Ã  sh   | j r
d S d| _ | jrZz| j | j¡ W n ttfk
r@   Y nX | j ¡  tdƒI d H  | j 	¡  d S rÞ  )
rÉ  r  ru   rè  rÐ  rš   r™  r±   r	   rˆ   r   rk   rk   rl   r�  ‰  s    
zTCPSocketListener.aclose)re   rf   rg   r  r‚  rÉ  rz   r-  rÐ  r  r�  rk   rk   rk   rl   r  _  s   
r  c                   @  sH   e Zd Zddœdd„Zddœdd„Zd	dœd
d„Zeddœdd„ƒZdS )ÚUNIXSocketListenerrË  rã  c                 C  s"   || _ tƒ | _tdƒ| _d| _d S )Nr  F)Ú_UNIXSocketListener__raw_socketr   ru   rF   r  rÉ  ræ  rk   rk   rl   rz   œ  s    
zUNIXSocketListener.__init__r  r{   c                 ƒ  sÖ   t  ¡ I d H  ˆ j�¸ z.ˆ j ¡ \}}| d¡ t|ƒW W  5 Q R £ S  tk
r�   t 	¡ }ˆ j
 ˆ j|jd ¡ | ‡ fdd„¡ |I d H  Y q tk
rÄ } zˆ jr®td ‚nt|‚W 5 d }~X Y qX qW 5 Q R X d S )NFc                   s   ˆ j  ˆ j¡S r}   )ru   rè  r  ©Ú_r   rk   rl   r®   ®  r¯   z+UNIXSocketListener.accept.<locals>.<lambda>)rZ  r€  r  r  r  Úsetblockingrõ  rø  rØ   r   ru   rì  rÁ   rN  rÜ  rÉ  r:   r8   )ry   r  r  ri  r  rk   r   rl   r  ¢  s"    

ÿzUNIXSocketListener.acceptrƒ   c                 Ã  s   d| _ | j ¡  d S r(  )rÉ  r  rˆ   r   rk   rk   rl   r�  ·  s    zUNIXSocketListener.aclosec                 C  s   | j S r}   )r  r   rk   rk   rl   rÐ  »  s    zUNIXSocketListener._raw_socketN)re   rf   rg   rz   r  r�  r-  rÐ  rk   rk   rk   rl   r  ›  s
   r  c                   @  sZ   e Zd Zdddœdd„Zeddœdd	„ƒZd
dœdd„Zddœdd„Zdd
dœdd„ZdS )Ú	UDPSocketúasyncio.DatagramTransportr¸  rÀ  c                 C  s*   || _ || _tdƒ| _tdƒ| _d| _d S rÂ  rÅ  rÊ  rk   rk   rl   rz   Á  s
    

zUDPSocket.__init__rË  r{   c                 C  s   | j  d¡S rÌ  rÎ  r   rk   rk   rl   rÐ  Ê  s    zUDPSocket._raw_socketrƒ   c                 Ã  s   | j  ¡ sd| _| j  ¡  d S r(  ©rš  rÒ  rÉ  rˆ   r   rk   rk   rl   r�  Î  s    
zUDPSocket.acloseztuple[bytes, IPSockAddrType]c              
   Ã  s˜   | j �ˆ t ¡ I d H  | jjsF| j ¡ sF| jj ¡  | jj 	¡ I d H  z| jj 
¡ W W  5 Q R £ S  tk
rˆ   | jr~td ‚ntd ‚Y nX W 5 Q R X d S r}   ©rÇ  rZ  r€  rÆ  r¢  rš  rÒ  r¤  r¾  r¾   rÕ  rÖ  rÉ  r:   r8   r   rk   rk   rl   r  Ó  s    zUDPSocket.receiverO   r„  c              	   Ã  s^   | j �N t ¡ I d H  | jj ¡ I d H  | jr4t‚n| j 	¡ rDt
‚n| jj|Ž  W 5 Q R X d S r}   ©rÈ  rZ  r€  rÆ  r¥  r¾   rÉ  r:   rš  rÒ  r8   Úsendtor‡  rk   rk   rl   rˆ  ä  s    
zUDPSocket.sendN©	re   rf   rg   rz   r-  rÐ  r�  r  rˆ  rk   rk   rk   rl   r  À  s   	r  c                   @  sZ   e Zd Zdddœdd„Zeddœdd	„ƒZd
dœdd„Zddœdd„Zdd
dœdd„ZdS )ÚConnectedUDPSocketr   r¸  rÀ  c                 C  s*   || _ || _tdƒ| _tdƒ| _d| _d S rÂ  rÅ  rÊ  rk   rk   rl   rz   ñ  s
    

zConnectedUDPSocket.__init__rË  r{   c                 C  s   | j  d¡S rÌ  rÎ  r   rk   rk   rl   rÐ  ú  s    zConnectedUDPSocket._raw_socketrƒ   c                 Ã  s   | j  ¡ sd| _| j  ¡  d S r(  r!  r   rk   rk   rl   r�  þ  s    
zConnectedUDPSocket.acloserz  c              
   Ã  sž   | j �Ž t ¡ I d H  | jjsF| j ¡ sF| jj ¡  | jj 	¡ I d H  z| jj 
¡ }W n( tk
r~   | jrttd ‚ntd ‚Y nX |d W  5 Q R £ S Q R X d S r«  r"  )ry   Úpacketrk   rk   rl   r    s    zConnectedUDPSocket.receiver„  c              	   Ã  s^   | j �N t ¡ I d H  | jj ¡ I d H  | jr4t‚n| j 	¡ rDt
‚n| j |¡ W 5 Q R X d S r}   r#  r‡  rk   rk   rl   rˆ    s    
zConnectedUDPSocket.sendNr%  rk   rk   rk   rl   r&  ð  s   	r&  c                   @  s*   e Zd Zddœdd„Zdddœdd„Zd	S )
ÚUNIXDatagramSocketrP   r{   c                 Ã  s¦   t ƒ }t ¡ I d H  | j�‚ z| j d¡}W nX tk
rP   |  |¡I d H  Y q tk
r„ } z| j	rnt
d ‚nt|‚W 5 d }~X Y qX |W  5 Q R £ S qW 5 Q R X d S ©Nry  )r   rZ  r€  rÇ  rÐ  Úrecvfromrø  rî  rÜ  ró  r:   r8   ©ry   r“   r~  r  rk   rk   rl   r  #  s    zUNIXDatagramSocket.receiverƒ   r„  c                 Ã  s¤   t ƒ }t ¡ I d H  | j�€ z| jj|Ž  W nX tk
rP   |  |¡I d H  Y q tk
r„ } z| j	rnt
d ‚nt|‚W 5 d }~X Y qX W 5 Q R £ d S qW 5 Q R X d S r}   )r   rZ  r€  rÈ  rÐ  r$  rø  rñ  rÜ  ró  r:   r8   ©ry   rg  r“   r  rk   rk   rl   rˆ  4  s    zUNIXDatagramSocket.sendN©re   rf   rg   r  rˆ  rk   rk   rk   rl   r(  "  s   r(  c                   @  s*   e Zd Zddœdd„Zdddœdd„Zd	S )
ÚConnectedUNIXDatagramSocketrz  r{   c                 Ã  s¦   t ƒ }t ¡ I d H  | j�‚ z| j d¡}W nX tk
rP   |  |¡I d H  Y q tk
r„ } z| j	rnt
d ‚nt|‚W 5 d }~X Y qX |W  5 Q R £ S qW 5 Q R X d S r)  )r   rZ  r€  rÇ  rÐ  r÷  rø  rî  rÜ  ró  r:   r8   r+  rk   rk   rl   r  G  s    z#ConnectedUNIXDatagramSocket.receiverƒ   r„  c                 Ã  s¤   t ƒ }t ¡ I d H  | j�€ z| j |¡ W nX tk
rP   |  |¡I d H  Y q tk
r„ } z| j	rnt
d ‚nt|‚W 5 d }~X Y qX W 5 Q R £ d S qW 5 Q R X d S r}   )r   rZ  r€  rÈ  rÐ  rˆ  rø  rñ  rÜ  ró  r:   r8   r,  rk   rk   rl   rˆ  X  s    z ConnectedUNIXDatagramSocket.sendNr-  rk   rk   rk   rl   r.  F  s   r.  Úread_eventsz RunVar[dict[Any, asyncio.Event]]Ú_read_eventsÚwrite_eventsÚ_write_eventsc                   @  s`   e Zd Zd dœdd„Zddœdd„Zddœdd„Zd	dœd
d„Zddœdd„Zddœdd„ZdS )rC   r{   c                 C  s
   t  | ¡S r}   rô   rr  rk   rk   rl   rö   t  s    zEvent.__new__rƒ   c                 C  s   t  ¡ | _d S r}   )rØ   rC   Ú_eventr   rk   rk   rl   rz   w  s    zEvent.__init__c                 C  s   | j  ¡  d S r}   )r3  r×   r   rk   rk   rl   r×   z  s    z	Event.setrê   c                 C  s
   | j  ¡ S r}   )r3  rÑ  r   rk   rk   rl   rÑ  }  s    zEvent.is_setc                 Ã  s,   |   ¡ rt ¡ I d H  n| j ¡ I d H  d S r}   )rÑ  rZ  r€  r3  r¾   r   rk   rk   rl   r¾   €  s    z
Event.waitr2   c                 C  s   t t| jjƒƒS r}   )r2   r×  r3  Ú_waitersr   rk   rk   rl   Ú
statistics†  s    zEvent.statisticsN)	re   rf   rg   rö   rz   r×   rÑ  r¾   r5  rk   rk   rk   rl   rC   s  s   rC   c                   @  s~   e Zd Zddœdd dœdd„Zddœdddœdd	„Zdd
œdd„Zdd
œdd„Zdd
œdd„Zdd
œdd„Zdd
œdd„Z	dS )rE   F©Úfast_acquirerê   ©r7  r|   c                C  s
   t  | ¡S r}   rô   ©rø   r7  rk   rk   rl   rö   ‹  s    zLock.__new__rƒ   c                C  s   || _ d | _tƒ | _d S r}   )Ú_fast_acquireÚ_owner_taskr   r4  )ry   r7  rk   rk   rl   rz   Ž  s    zLock.__init__r{   c                 Ã  sð   t tjtƒ ƒ}| jd krn| jsnt ¡ I d H  || _| jsjzt 	¡ I d H  W n t
k
rh   |  ¡  ‚ Y nX d S | j|kr€tdƒ‚t ¡ }||f}| j |¡ z|I d H  W n4 t
k
rÞ   | j |¡ | j|krØ|  ¡  ‚ Y nX | j |¡ d S ©Nz)Attempted to acquire an already held Lock)r.   rØ   rÙ   r   r;  r4  rZ  Úcheckpoint_if_cancelledr:  Úcancel_shielded_checkpointr   Úreleaserœ   r   r@  r  )ry   r¨   Úfutrg  rk   rk   rl   Úacquire“  s0    

zLock.acquirec                 C  sB   t tjtƒ ƒ}| jd kr(| js(|| _d S | j|kr:tdƒ‚t‚d S r<  )r.   rØ   rÙ   r   r;  r4  rœ   r<   )ry   r¨   rk   rk   rl   Úacquire_nowaitµ  s    
zLock.acquire_nowaitc                 C  s
   | j d k	S r}   )r;  r   rk   rk   rl   ÚlockedÀ  s    zLock.lockedc                 C  sL   | j tƒ krtdƒ‚| jD ]&\}}| ¡ s|| _ | d ¡  d S qd | _ d S )Nz)The current task is not holding this lock)r;  r   rœ   r4  rº   rÁ   )ry   r¨   r@  rk   rk   rl   r?  Ã  s    
zLock.releaser3   c                 C  s*   | j rt| j ƒnd }t|  ¡ |t| jƒƒS r}   )r;  ÚAsyncIOTaskInfor3   rC  r×  r4  )ry   Z	task_infork   rk   rl   r5  Ï  s    zLock.statisticsN)
re   rf   rg   rö   rz   rA  rB  rC  r?  r5  rk   rk   rk   rl   rE   Š  s   "rE   c                      s¦   e Zd Zdddœdddd dœdd	„Zdddœdddd
œ‡ fdd„Zddœdd„Zddœdd„Zddœdd„Zeddœdd„ƒZ	eddœdd„ƒZ
ddœdd„Z‡  ZS )rI   NF©Ú	max_valuer7  r8  r1  rê   ©Úinitial_valuerF  r7  r|   c                C  s
   t  | ¡S r}   rô   ©rø   rH  rF  r7  rk   rk   rl   rö   Õ  s    zSemaphore.__new__)rH  rF  r7  c                  s.   t ƒ j||d� || _|| _|| _tƒ | _d S )N)rF  )rX  rz   Ú_valueÚ
_max_valuer:  r   r4  )ry   rH  rF  r7  r^  rk   rl   rz   Þ  s
    zSemaphore.__init__rƒ   r{   c                 Ã  sÔ   | j dkrh| jsht ¡ I d H  |  j d8  _ | jsdzt ¡ I d H  W n tk
rb   |  ¡  ‚ Y nX d S t 	¡ }| j 
|¡ z|I d H  W nD tk
rÎ   z| j |¡ W n tk
rÆ   |  ¡  Y nX ‚ Y nX d S ©Nr   r­   )rJ  r4  rZ  r=  r:  r>  r   r?  rØ   r   r@  r  rš   ©ry   r@  rk   rk   rl   rA  ë  s(    zSemaphore.acquirec                 C  s    | j dkrt‚|  j d8  _ d S rL  )rJ  r<   r   rk   rk   rl   rB    s    
zSemaphore.acquire_nowaitc                 C  s`   | j d k	r| j| j krtdƒ‚| jD ](}| ¡ s$| d ¡ | j |¡  d S q$|  jd7  _d S )Nz!semaphore released too many timesr­   )rK  rJ  rš   r4  rº   rÁ   r  rM  rk   rk   rl   r?    s    

zSemaphore.releasec                 C  s   | j S r}   )rJ  r   rk   rk   rl   r*    s    zSemaphore.valuec                 C  s   | j S r}   )rK  r   rk   rk   rl   rF    s    zSemaphore.max_valuerG   c                 C  s   t t| jƒƒS r}   )rG   r×  r4  r   rk   rk   rl   r5  !  s    zSemaphore.statistics)re   rf   rg   rö   rz   rA  rB  r?  r-  r*  rF  r5  rn  rk   rk   r^  rl   rI   Ô  s   ûûrI   c                   @  s  e Zd ZU dZded< dd dœdd„Zddœdd	„Zd
dœdd„Zdddd
dœdd„Ze	ddœdd„ƒZ
e
jdd
dœdd„ƒZ
e	ddœdd„ƒZe	ddœdd„ƒZd
dœdd„Zdd
d œd!d"„Zd
dœd#d$„Zdd
d œd%d&„Zd
dœd'd(„Zdd
d œd)d*„Zd+dœd,d-„Zd.S )/rA   r   rò   Ú_total_tokens©Útotal_tokensr|   c                 C  s
   t  | ¡S r}   rô   ©rø   rP  rk   rk   rl   rö   (  s    zCapacityLimiter.__new__)rP  c                 C  s   t ƒ | _tƒ | _|| _d S r}   )r×   Ú
_borrowersr   Ú_wait_queuerP  )ry   rP  rk   rk   rl   rz   +  s    zCapacityLimiter.__init__rƒ   r{   c                 Ã  s   |   ¡ I d H  d S r}   )rA  r   rk   rk   rl   r?  0  s    zCapacityLimiter.__aenter__r  r  r  r„   c                 Ã  s   |   ¡  d S r}   )r?  r‰   rk   rk   rl   rA  3  s    zCapacityLimiter.__aexit__c                 C  s   | j S r}   )rN  r   rk   rk   rl   rP  ;  s    zCapacityLimiter.total_tokensr)  c                 C  st   t |tƒst |¡stdƒ‚|dk r,tdƒ‚t|| j dƒ}|| _| jrp|rp| jj	dd�d }| 
¡  |d8 }qBd S )Nz'total_tokens must be an int or math.infr­   ztotal_tokens must be >= 1r   F©Úlast)r  r8  r  ÚisinfrM  rš   ÚmaxrN  rS  Úpopitemr×   )ry   r*  Úwaiters_to_notifyÚeventrk   rk   rl   rP  ?  s    
r8  c                 C  s
   t | jƒS r}   )r×  rR  r   rk   rk   rl   Úborrowed_tokensO  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| jƒ S r}   )rN  r×  rR  r   rk   rk   rl   Úavailable_tokensS  s    z CapacityLimiter.available_tokensc                 C  s   |   tƒ ¡ d S r}   )Úacquire_on_behalf_of_nowaitr   r   rk   rk   rl   rB  W  s    zCapacityLimiter.acquire_nowaitrõ   )Úborrowerr|   c                 C  s<   || j krtdƒ‚| js(t| j ƒ| jkr,t‚| j  |¡ d S )NzEthis borrower is already holding one of this CapacityLimiter's tokens)rR  rœ   rS  r×  rN  r<   r  )ry   r^  rk   rk   rl   r]  Z  s    
ÿz+CapacityLimiter.acquire_on_behalf_of_nowaitc                 Ã  s   |   tƒ ¡I d H S r}   )Úacquire_on_behalf_ofr   r   rk   rk   rl   rA  f  s    zCapacityLimiter.acquirec                 Ã  s¾   t  ¡ I d H  z|  |¡ W nj tk
r†   t ¡ }|| j|< z| ¡ I d H  W n$ tk
rt   | j 	|d ¡ ‚ Y nX | j
 |¡ Y n4X zt  ¡ I d H  W n tk
r¸   |  ¡  ‚ Y nX d S r}   )rZ  r=  r]  r<   rØ   rC   rS  r¾   r‚   ÚpoprR  r  r>  r?  ©ry   r^  rZ  rk   rk   rl   r_  i  s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |   tƒ ¡ d S r}   )Úrelease_on_behalf_ofr   r   rk   rk   rl   r?  ~  s    zCapacityLimiter.releasec                 C  sd   z| j  |¡ W n tk
r.   tdƒd ‚Y nX | jr`t| j ƒ| jk r`| jjdd�d }| ¡  d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensFrT  r­   )	rR  r  r  rœ   rS  r×  rN  rX  r×   ra  rk   rk   rl   rb  �  s    ÿþz$CapacityLimiter.release_on_behalf_ofr1   c                 C  s   t | j| jt| jƒt| jƒƒS r}   )r1   r[  rP  ÚtuplerR  r×  rS  r   rk   rk   rl   r5  Ž  s    üzCapacityLimiter.statisticsN)re   rf   rg   rN  r‚  rö   rz   r?  rA  r-  rP  r.  r[  r\  rB  r]  rA  r_  r?  rb  r5  rk   rk   rk   rl   rA   %  s(   
rA   Ú_default_thread_limiterzRunVar[CapacityLimiter]c                   @  sh   e Zd Zddœdd„Zdddœdd	„Zd d
œdd„Zdddddœdd„Zd d
œdd„Zdd
œdd„ZdS )Ú_SignalReceiverztuple[Signals, ...])Úsignalsc                 C  s,   || _ tƒ | _tƒ | _t ¡ | _tƒ | _	d S r}   )
Ú_signalsr   ru   r   Ú_signal_queuerØ   r   r9  r×   Ú_handled_signals)ry   rf  rk   rk   rl   rz      s
    
z_SignalReceiver.__init__r   rƒ   )r³   r|   c                 C  s&   | j  |¡ | j ¡ s"| j d ¡ d S r}   )rh  r@  r9  r°   rÁ   )ry   r³   rk   rk   rl   Ú_deliver§  s    
z_SignalReceiver._deliverr{   c                 C  s2   t | jƒD ]"}| j || j|¡ | j |¡ q
| S r}   )r×   rg  ru   Úadd_signal_handlerrj  ri  r  )ry   Úsigrk   rk   rl   r€   ¬  s    z_SignalReceiver.__enter__r  r  r  rp   r„   c                 C  s   | j D ]}| j |¡ qd S r}   )ri  ru   Úremove_signal_handler)ry   r…   r†   r‡   rl  rk   rk   rl   rŠ   ³  s    
z_SignalReceiver.__exit__c                 C  s   | S r}   rk   r   rk   rk   rl   Ú	__aiter__½  s    z_SignalReceiver.__aiter__c                 Ã  s4   t  ¡ I d H  | js*t ¡ | _| jI d H  | j ¡ S r}   )rZ  r€  rh  rØ   r   r9  rÕ  r   rk   rk   rl   Ú	__anext__À  s
    
z_SignalReceiver.__anext__N)	re   rf   rg   rz   rj  r€   rŠ   rn  ro  rk   rk   rk   rl   re  Ÿ  s   
re  c                      s0   e Zd Zddœ‡ fdd„Zddœdd„Z‡  ZS )	rD  r¬   rí   c                   sL   t  |¡}|d krd }n|j}tƒ  t|ƒ|| ¡ | ¡ ¡ t 	|¡| _
d S r}   )rÚ   rÕ   r/  rX  rz   r  Úget_namerë   ÚweakrefÚrefrF  )ry   r¨   r  r/  r^  rk   rl   rz   Ï  s    
zAsyncIOTaskInfo.__init__rê   r{   c                 C  sv   |   ¡  }sdS tjdkr(| ¡ rDdS nt|jtjƒrD|j ¡ rDdS t	 
|¡ }rr|j }rr|jpp|j op| ¡ S dS )NFrX   T)rF  r	  r
  r  r  r!  rØ   r   rº   rÚ   rÕ   rÛ   r"  rñ   r'  )ry   r¨   r  rÛ   rk   rk   rl   Úhas_pending_cancellationÙ  s     
ÿþ
ÿz(AsyncIOTaskInfo.has_pending_cancellation)re   rf   rg   rz   rs  rn  rk   rk   r^  rl   rD  Î  s   
rD  c                   @  sÞ   e Zd ZU ded< ddddœdddd	d
œdd„Zd dœdd„Zdddd	dœdd„Zddœdd„Zddd	dœdd„Zd	dœdd„Z	d d	d!œd"d#„Z
d$d%d&d'd(œd)d*„Zd+dd,d-œd.d/„Zd0dd'd-œd1d2„Zd3dd	d4œd5d6„ZdS )7Ú
TestRunnerzBMemoryObjectSendStream[tuple[Awaitable[Any], asyncio.Future[Any]]]Ú_send_streamNF)rn   Ú
use_uvloopro   rp   rê   rq   rƒ   )rn   rv  ro   r|   c                C  s8   |r|d krdd l }|j}t||d�| _g | _d | _d S )Nr   rm   )Úuvloopr©   rZ   Ú_runnerr>  Ú_runner_task)ry   rn   rv  ro   rw  rk   rk   rl   rz   ó  s    zTestRunner.__init__r{   c                 C  s   | j  ¡  |  ¡  | j¡ | S r}   )rx  r€   r”   Úset_exception_handlerÚ_exception_handlerr   rk   rk   rl   r€     s    
zTestRunner.__enter__r  r  r  r„   c                 C  s   | j  |||¡ d S r}   )rx  rŠ   r‰   rk   rk   rl   rŠ     s    zTestRunner.__exit__r   c                 C  s
   | j  ¡ S r}   )rx  r”   r   rk   rk   rl   r”     s    zTestRunner.get_looprç  rs  )r“   r•   r|   c                 C  s0   t | d¡tƒr"| j |d ¡ n
| |¡ d S )Nr¸   )r  rÕ   rÂ   r>  r@  Údefault_exception_handler)ry   r“   r•   rk   rk   rl   r{    s    zTestRunner._exception_handlerc                 C  s<   | j r8| j g  }| _ t|ƒdkr*|d ‚n|r8td|ƒ‚d S )Nr­   r   z6Multiple exceptions occurred in asynchronous callbacks)r>  r×  ra   )ry   r_   rk   rk   rl   Ú_raise_async_exceptions  s    
 ÿz"TestRunner._raise_async_exceptionszOMemoryObjectReceiveStream[tuple[Awaitable[T_Retval], asyncio.Future[T_Retval]]])Úreceive_streamr|   c                 Ã  sæ   ddl m} |�Ì | j�º |2 z¬3 d H W \}}z|I d H }W nz tk
rt } z| ¡ sb|j|jŽ  ‚ W 5 d }~X Y q tk
r¶ } z&| ¡ s–| |¡ t	|t
|fƒs¦‚ W 5 d }~X Y qX | ¡ s| |¡ q6 W 5 Q R X W 5 Q R X d S )Nr   )ÚOutcomeException)Z_pytest.outcomesr  ru  r   rº   r±   rÈ   r‚   rÃ   r  rÂ   rÁ   )ry   r~  r  r—   r½   Úretvalr  rk   rk   rl   Ú_run_tests_and_fixtures&  s     
z"TestRunner._run_tests_and_fixturesz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsr–   )rã   rÈ   rO  r|   c                 Ï  sl   | j s<tttt tjf  dƒ\| _}|  ¡  	|  
|¡¡| _ |||Ž}|  ¡  ¡ }| j ||f¡ |I d H S r  )ry  r?   r,   r%   r#   rØ   r   ru  r”   r   r�  rÉ   Zsend_nowait)ry   rã   rÈ   rO  r~  r—   r½   rk   rk   rl   Ú_call_in_runner_taskA  s    ÿþ
ÿ
zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])Úfixture_funcrO  r|   c                 c  sˆ   |f |Ž}|   ¡  |  |jd ¡¡}|  ¡  |V  z|   ¡  |  |jd ¡¡ W n tk
rh   |  ¡  Y nX |   ¡  | ¡ ¡ tdƒ‚d S )Nz$Async generator fixture did not stop)r”   rŽ   r‚  Úasendr}  ÚStopAsyncIterationr�  rœ   )ry   rƒ  rO  ÚasyncgenZfixturevaluerk   rk   rl   Úrun_asyncgen_fixtureT  s    
ÿÿzTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s$   |   ¡  | j|f|Ž¡}|  ¡  |S r}   )r”   rŽ   r‚  r}  )ry   rƒ  rO  r€  rk   rk   rl   Úrun_fixturek  s
    ÿzTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])Ú	test_funcrO  r|   c              
   C  sX   z|   ¡  | j|f|Ž¡ W n. tk
rJ } z| j |¡ W 5 d }~X Y nX |  ¡  d S r}   )r”   rŽ   r‚  rÂ   r>  r@  r}  )ry   r‰  rO  r  rk   rk   rl   Úrun_testv  s    ÿzTestRunner.run_test)re   rf   rg   r‚  rz   r€   rŠ   r”   r{  r}  r�  r‚  r‡  rˆ  rŠ  rk   rk   rk   rl   rt  ð  s   
ûrt  c                
   @  sD  e Zd Zeddddddœdd„ƒZedd	œd
d„ƒZedd	œdd„ƒZedd	œdd„ƒZedd	œdd„ƒZedd	œdd„ƒZ	edd	œdd„ƒZ
edddœdd„ƒZeejddœdddd œd!d"„ƒZedd	œd#d$„ƒZed%d	œd&d'„ƒZed(d	œd)d*„ƒZedd+d,œd-d.„ƒZed/dd0œd1d2dd3d4œd5d6„ƒZedd7d8œd9d:„ƒZed˜d;ddd<dd=œd>d?„ƒZedd	œd@dA„ƒZedddddBœdCdD„ƒZed;ddddBœdEdF„ƒZedGd	œdHdI„ƒZedJdKdKdKdLdMdNœdOdP„ƒZedQddRœdSdT„ƒZed™dUd1dVdWdXœdYdZ„ƒZed[d\d]œd^d_„ƒZed`dadbœdcdd„ƒZed`dadbœdedf„ƒZedgdVdVddhdiœdjdk„ƒZ ed`dldmdnœdodp„ƒZ!edqdqdqdqdrœdsdtdudvd1d1dwdxœdydz„ƒZ"edšd{d1d|d}œd~d„ƒZ#ed`ddbœd€d�„ƒZ$ed`ddbœd‚dƒ„ƒZ%ed„d	œd…d†„ƒZ&ed‡dˆd‰œdŠd‹„ƒZ'edŒd	œd�dŽ„ƒZ(ed�d	œd�d‘„ƒZ)edd	œd’d“„ƒZ*edd”d•œd–d—„ƒZ+d/S )›rZ  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]rB  rs  r–   )rã   rÈ   rO  Úoptionsr|   c           
   
     s†   t ˆƒddœ‡ ‡fdd„ƒ}| dd ¡}| dd ¡}|d krV| dd¡rVd	d l}|j}t||d
��}	|	 |ƒ ¡W  5 Q R £ S Q R X d S )Nr–   r{   c                  “  sJ   t tjtƒ ƒ} |  tˆƒ¡ td d ƒt| < zˆˆ Ž I d H W ¢S t| = X d S r}   )r.   rØ   rÙ   r   Úset_namerè   r  rÚ   rí   ©rÈ   rã   rk   rl   ÚwrapperŒ  s    z#AsyncIOBackend.run.<locals>.wrapperrn   ro   rv  Fr   rm   )r   rÕ   rw  r©   rZ   r�   )
rø   rã   rÈ   rO  r‹  rŽ  rn   ro   rw  Úrunnerrk   r�  rl   r�   „  s    
zAsyncIOBackend.runrõ   r{   c                 C  s   t ƒ S r}   )r   rr  rk   rk   rl   Úcurrent_token¡  s    zAsyncIOBackend.current_tokenrò   c                 C  s
   t ƒ  ¡ S r}   )r   r  rr  rk   rk   rl   r[  ¥  s    zAsyncIOBackend.current_timer�   c                 C  s   t S r}   )r   rr  rk   rk   rl   Úcancelled_exception_class©  s    z(AsyncIOBackend.cancelled_exception_classrƒ   c                 Ã  s   t dƒI d H  d S r«  ©r	   rr  rk   rk   rl   r€  ­  s    zAsyncIOBackend.checkpointc                 Ã  sh   t ƒ }|d krd S zt| j}W n tk
r6   Y d S X |rd|jrRtdƒI d H  q8|jr\qdq8|j}q8d S r«  )r   rÚ   rÛ   r  r"  r	   rñ   rÜ   )rø   r¨   rÛ   rk   rk   rl   r=  ±  s    z&AsyncIOBackend.checkpoint_if_cancelledc              	   Ã  s(   t dd�� tdƒI d H  W 5 Q R X d S )NTrT  r   )rK   r	   rr  rk   rk   rl   r>  Ä  s    z)AsyncIOBackend.cancel_shielded_checkpoint)Údelayr|   c                 Ã  s   t |ƒI d H  d S r}   r’  )rø   r“  rk   rk   rl   r	   É  s    zAsyncIOBackend.sleepFrï   rê   rK   ró   c                C  s   t ||d�S )Nrï   rJ   r÷   rk   rk   rl   Úcreate_cancel_scopeÍ  s    z"AsyncIOBackend.create_cancel_scopec                 C  sj   zt tƒ  j}W n tk
r*   tj Y S X tj}|rft||jƒ}|jrTtj }qfq2|j	r^qfq2|j
}q2|S r}   )rÚ   r   rÛ   r  r  r  Úminrð   rü   rñ   rÜ   )rø   rÛ   rð   rk   rk   rl   Úcurrent_effective_deadlineÓ  s     ÿ
z)AsyncIOBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t ƒ S r}   )r=  rr  rk   rk   rl   Úcreate_task_groupé  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t ƒ S r}   rB   rr  rk   rk   rl   Úcreate_eventí  s    zAsyncIOBackend.create_eventzabc.Lockr8  c                C  s
   t |d�S )Nr6  rD   r9  rk   rk   rl   Úcreate_lockñ  s    zAsyncIOBackend.create_lockNrE  r8  r1  zabc.SemaphorerG  c                C  s   t |||d�S )NrE  rH   rI  rk   rk   rl   Úcreate_semaphoreõ  s    zAsyncIOBackend.create_semaphorezabc.CapacityLimiterrO  c                 C  s   t |ƒS r}   r@   rQ  rk   rk   rl   Úcreate_capacity_limiterÿ  s    z&AsyncIOBackend.create_capacity_limiterz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)rã   rÈ   Úabandon_on_cancelÚlimiterr|   c                 Ã  s˜  |   ¡ I d H  zt ¡ }t ¡ }W n4 tk
rV   tƒ }tƒ }t |¡ t |¡ Y nX |pb|  ¡ 4 I d H �š t| d��� }t	 
¡ }tƒ }	|s¾t|	||ƒ}
|
 ¡  | |
¡ |	 |
j¡ nN| ¡ }
|  ¡ }|�r||d j tjk rì�q| ¡ }|j |j¡ | ¡  qÎtƒ }| tjjd ¡ |�s4|jd k�r:|}n|j}|
j |||||f¡ |I d H W  5 Q R £ W  5 Q I d H R £ S Q R X W 5 Q I d H R X d S )NrT  r   )r€  ro  rÕ   rp  ÚLookupErrorr   r×   Úcurrent_default_thread_limiterrK   rØ   r   rá   rU  rÊ   r  rN  rl  r`  r[  r\  rm  rÕ  rÞ   Úremove_done_callbackr   r�   ÚsniffioÚcurrent_async_library_cvarrÜ   rY  rj  )rø   rã   rÈ   rœ  r�  rW  rV  r&  r½   rÞ   ZworkerÚnowZexpired_workerr•   Zworker_scoperk   rk   rl   Úrun_sync_in_worker_thread	  sL    

ÿÿÿ
z(AsyncIOBackend.run_sync_in_worker_threadc                 C  s>   t j}|d k	r:|jr(tdt|ƒd›�ƒ‚|jr2d S |j}qd S )Nr  rå   )r7   re  r"  r   r  rñ   rÜ   )rø   r&  rk   rk   rl   Úcheck_cancelled>	  s    zAsyncIOBackend.check_cancelled)rã   rÈ   Útokenr|   c           	        sX   dddœ‡ ‡fdd„}t t|ƒ}tƒ }| tjjd¡ |tjƒ}| t	j
||¡}| ¡ S )NrK   r–   )r&  r|   c              
   “  sŽ   d}t tjtƒ ƒ}td | ƒt|< | j |¡ zNzˆˆ Ž I d H W W ¢:S  t	k
rv } zt
j 	t|ƒ¡d ‚W 5 d }~X Y nX W 5 | j |¡ X d S r(  )r.   rØ   rÙ   r   r  rÚ   r  r  rk  r   Ú
concurrentÚfuturesrâ   )r&  Z__tracebackhide__r¨   r  r�  rk   rl   Útask_wrapperQ	  s    (z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperrØ   )r.   r   r   r�   r¡  r¢  r×   r7   re  rØ   Úrun_coroutine_threadsafer`  )	rø   rã   rÈ   r¦  r©  r“   r•   rŽ  ri  rk   r�  rl   Úrun_async_from_threadJ	  s    

  ÿz$AsyncIOBackend.run_async_from_threadc                   s@   t ˆƒddœ‡ ‡‡fdd„ƒ}tƒ ‰tt|ƒ}| |¡ ˆ ¡ S )Nrƒ   r{   c               
     s\   zt j d¡ ˆ ˆˆ Ž ¡ W n8 tk
rV }  zˆ | ¡ t| tƒsF‚ W 5 d } ~ X Y nX d S )NrØ   )r¡  r¢  r×   rÁ   r‚   rÃ   r  rÂ   )r  ©rÈ   ri  rã   rk   rl   rŽ  m	  s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r.   r   r²   r`  )rø   rã   rÈ   r¦  rŽ  r“   rk   r¬  rl   rt  f	  s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t ƒ S r}   )rq  rr  rk   rk   rl   Úcreate_blocking_portal|	  s    z%AsyncIOBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner#   r‰  )Úcommandr“  r”  r•  rO  r|   c          
      Ë  sº   |   ¡ I d H  t|tƒr"t |¡}t|ttfƒrRtj|f|||dœ|—ŽI d H }ntj	||||dœ|—ŽI d H }|j
r€t|j
ƒnd }|jr”t|jƒnd }|jr¨t|jƒnd }	t||||	ƒS )N)r“  r”  r•  )r€  r  r   ÚosÚfspathrâ   rz  rØ   Úcreate_subprocess_shellÚcreate_subprocess_execr“  rƒ  r”  rw  r•  r‰  )
rø   r®  r“  r”  r•  rO  rœ  Zstdin_streamZstdout_streamZstderr_streamrk   rk   rl   Úopen_process€	  s2    


ÿüûüûzAsyncIOBackend.open_processrž  rŸ  c                 C  s&   t t|ƒdd� tƒ  tt|ƒ¡ d S )Nz AnyIO process pool shutdown taskrL  )r   r   rá   rN  r   r�  )rø   rV  rk   rk   rl   Ú#setup_process_pool_exit_at_shutdown¤	  s    þÿz2AsyncIOBackend.setup_process_pool_exit_at_shutdownrâ   zIPSockAddrType | Noner  )ÚhostÚportÚlocal_addressr|   c                 Ã  s@   t ttjtf tƒ jt|||d�I d H ƒ\}}| ¡  t||ƒS )N)Ú
local_addr)	r.   r,   rØ   r¬  r¡  r   Úcreate_connectionrÔ  r¿  )rø   rµ  r¶  r·  rª  rÁ  rk   rk   rl   Úconnect_tcp®	  s       ÿ
þzAsyncIOBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)Úpathr|   c                 ƒ  s®   |   ¡ I d H  tƒ ‰ t tj¡‰ˆ d¡ zˆ |¡ W nf tk
r‚   t ¡ }ˆ  	ˆ|j
d ¡ | ‡ ‡fdd„¡ |I d H  Y q* tk
rž   ˆ ¡  ‚ Y q*X tˆƒS q*d S )NFc                   s
   ˆ   ˆ¡S r}   ©rï  r  ©r“   rä  rk   rl   r®   Ç	  r¯   z-AsyncIOBackend.connect_unix.<locals>.<lambda>)r€  r   rÍ  ÚAF_UNIXr  Úconnectrø  rØ   r   rð  rÁ   rN  r‚   rˆ   rõ  )rø   r»  ri  rk   r½  rl   Úconnect_unix»	  s    
zAsyncIOBackend.connect_unixrË  rN   )Úsockr|   c                 C  s   t |ƒS r}   )r  ©rø   rÁ  rk   rk   rl   Úcreate_tcp_listenerÏ	  s    z"AsyncIOBackend.create_tcp_listenerc                 C  s   t |ƒS r}   )r  rÂ  rk   rk   rl   Úcreate_unix_listenerÓ	  s    z#AsyncIOBackend.create_unix_listenerr   zUDPSocket | ConnectedUDPSocket)Úfamilyr·  Úremote_addressÚ
reuse_portr|   c                 Ã  sP   t ƒ jt||||d�I d H \}}|jr4| ¡  |j‚|sBt||ƒS t||ƒS d S )N)r¸  Úremote_addrrÅ  rÇ  )r   Úcreate_datagram_endpointr¸  r¸   rˆ   r  r&  )rø   rÅ  r·  rÆ  rÇ  rª  rÁ  rk   rk   rl   Úcreate_udp_socket×	  s    û
z AsyncIOBackend.create_udp_socketzstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocket)rä  Úremote_pathr|   c                 ƒ  s¦   |   ¡ I d H  tƒ ‰ |ršzˆ |¡ W nf tk
rp   t ¡ }ˆ  ˆ|jd ¡ | ‡ ‡fdd„¡ |I d H  Y q t	k
rŒ   ˆ 
¡  ‚ Y qX tˆƒS qntˆƒS d S )Nc                   s
   ˆ   ˆ¡S r}   r¼  r  r½  rk   rl   r®   ý	  r¯   z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)r€  r   r¿  rø  rØ   r   rð  rÁ   rN  r‚   rˆ   r.  r(  )rø   rä  rË  ri  rk   r½  rl   Úcreate_unix_datagram_socketï	  s    z*AsyncIOBackend.create_unix_datagram_socketr   ©rÅ  ÚtypeÚprotor  zbytes | str | Nonezstr | int | Nonezint | AddressFamilyzint | SocketKindz]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])rµ  r¶  rÅ  rÎ  rÏ  r  r|   c                Ã  s   t ƒ j||||||d�I d H S )NrÍ  )r   Úgetaddrinfo)rø   rµ  r¶  rÅ  rÎ  rÏ  r  rk   rk   rl   rÐ  
  s         ÿzAsyncIOBackend.getaddrinforM   ztuple[str, str])Úsockaddrr  r|   c                 Ã  s   t ƒ  ||¡I d H S r}   )r   Úgetnameinfo)rø   rÑ  r  rk   rk   rl   rÒ  
  s    zAsyncIOBackend.getnameinfoc              
   Ã  s¼   |   ¡ I d H  zt ¡ }W n" tk
r<   i }t |¡ Y nX | |¡rRtdƒd ‚tƒ }t ¡  }||< | 	||j¡ z| ¡ I d H  W 5 | 
|d ¡d k	rª| |¡ d}nd}X |s¸t‚d S )NrÃ  TF)r€  r0  rÕ   rž  r×   r9   r   rØ   rC   rì  r`  rè  r¾   r:   )rø   rÁ  r/  r“   rZ  Úreadablerk   rk   rl   Úwait_socket_readable$
  s&    


z#AsyncIOBackend.wait_socket_readablec              
   Ã  sÀ   |   ¡ I d H  zt ¡ }W n" tk
r<   i }t |¡ Y nX | |¡rRtdƒd ‚tƒ }t ¡  }||< | 	| 
¡ |j¡ z| ¡ I d H  W 5 | |d ¡d k	r®| |¡ d}nd}X |s¼t‚d S )NrÄ  TF)r€  r2  rÕ   rž  r×   r9   r   rØ   rC   rð  rô  r`  rï  r¾   r:   )rø   rÁ  r1  r“   rZ  Úwritablerk   rk   rl   Úwait_socket_writable?
  s&    


z#AsyncIOBackend.wait_socket_writablerA   c                 C  s:   z
t  ¡ W S  tk
r4   tdƒ}t  |¡ | Y S X d S )Né(   )rd  rÕ   rž  rA   r×   )rø   r�  rk   rk   rl   rŸ  Z
  s    

z-AsyncIOBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])rf  r|   c                 G  s   t |ƒS r}   )re  )rø   rf  rk   rk   rl   Úopen_signal_receiverc
  s    z#AsyncIOBackend.open_signal_receiverr4   c                 C  s
   t tƒ ƒS r}   )rD  r   rr  rk   rk   rl   Úget_current_taski
  s    zAsyncIOBackend.get_current_taskzSequence[TaskInfo]c                 C  s   dd„ t ƒ D ƒS )Nc                 S  s   g | ]}|  ¡ st|ƒ‘qS rk   )r°   rD  )rÒ   r¨   rk   rk   rl   rÔ   o
  s      z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   rr  rk   rk   rl   Úget_running_tasksm
  s    z AsyncIOBackend.get_running_tasksc                 Ã  s\   |   ¡ I d H  tƒ }tƒ D ]6}||kr(q|j}|d ks>| ¡ rtdƒI d H   qqd S qd S )Ngš™™™™™¹?)r€  r   r   r!  r°   r	   )rø   Z	this_taskr¨   r%  rk   rk   rl   Úwait_all_tasks_blockedq
  s    
z%AsyncIOBackend.wait_all_tasks_blockedrt  )r‹  r|   c                 C  s
   t f |ŽS r}   )rt  )rø   r‹  rk   rk   rl   Úcreate_test_runner�
  s    z!AsyncIOBackend.create_test_runner)FN)N)r   ),re   rf   rg   Úclassmethodr�   r�  r[  r‘  r€  r=  r>  r	   r  r  r”  r–  r—  r˜  r™  rš  r›  r¤  r¥  r«  rt  r­  r³  r´  rº  rÀ  rÃ  rÄ  rÊ  rÌ  rÐ  rÒ  rÔ  rÖ  rŸ  rØ  rÙ  rÚ  rÛ  rÜ  rk   rk   rk   rl   rZ  ƒ  s°    ÿû	  û:#	 ÿø  ÿrZ  )¶Ú
__future__r   rþ  rØ   Úconcurrent.futuresr§  r  r¯  rÍ  r	  rž   rq  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   Úcollectionsr   r   Úcollections.abcr   r   r   Ú
contextlibr   r«   r   r   Údataclassesr   Ú	functoolsr   r   Úinspectr   r   r   r   Úior   r   rY  r   r¡   r   r   r   r    Útypesr!   Útypingr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r¡  rK  r1   r2   r3   r4   r5   Z_core._eventloopr6   r7   Z_core._exceptionsr8   r9   r:   r;   r<   r=   Z_core._socketsr>   Z_core._streamsr?   Z_core._synchronizationrA   ZBaseCapacityLimiterrC   Z	BaseEventrE   ZBaseLockrF   rG   rI   ZBaseSemaphoreZ_core._tasksrK   ZBaseCancelScoperL   rM   rN   rO   rP   Zabc._eventlooprQ   ZlowlevelrR   Zstreams.memoryrS   rT   r
  rW   Útyping_extensionsrZ   r[   r\   Úenumr]   r^   r_   r`   Zexceptiongroupra   ÚEnumrb   r�   r‘   r–   rÍ   rÏ   rÐ   rÑ   r‚  rá   rè   ré   rî   r  rÚ   Z
TaskStatusr6  r=  r‚   Z_Retval_Queue_TyperU  ro  rp  rq  ZByteReceiveStreamrw  ZByteSendStreamrƒ  r‰  r�  r   ÚProtocolr¡  r¸  r¿  rà  rõ  r  r  r  r&  r(  r.  r0  r2  rd  re  rD  rt  rZ  Zbackend_classrk   rk   rk   rl   Ú<module>   sò    $	<  
 y "Kÿ9'U.t<%02$$JQr/"     