U
    nË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-k8mofgf9/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_completeZ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^   Z_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   Z	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 )NZreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)ÚmessageÚ	exceptionr¦   )r`   r   r®   rŽ   ZgatherÚ	cancelledr´   Zcall_exception_handler)r’   Z	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   Z
_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®   Z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ù   Z_must_cancelrÕ   ræ   Ú_fut_waiterr  rÐ   r   r­   rú   r  r  r®   r  ró   rò   Úcancel_calledr  r   Z	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}   r(  )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)r.  rº   rÐ   ZInvalidStateErrorrµ   rš   r.   rÑ   r   r/  rÒ   r$  )ry   r  r¦   rk   rk   rl   Ústarted{  s    
ÿþz_AsyncioTaskStatus.started)N)re   rf   rg   rz   r0  rk   rk   rk   rl   r+  v  s   r+  c                   @  sˆ   e Zd Zddœdd„Zd dœdd„Zddd	d
dœdd„Zd ddddddœdd„Zddœdddddœdd„Zddœdddddœdd„ZdS )!Ú	TaskGrouprƒ   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   r2  Ú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­   r2  r4  r  r®   r¼   rš   )r:  r  r  Úe©ry   r¦   r9  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©r8  r(  )rö   rš   r  r   r+  rÓ   rÕ   r   r�   rf   Ú	TypeErrorrg   rà   rÚ   r   Úadd_done_callbackrþ   rÒ   rù   rü   )
ry   rÛ   rÁ   r8  r9  r>  Úkwargsr$  r–   Úprefixrk   r=  rl   Ú_spawn»  s:    $ÿ
 
ÿ

ÿ
 ÿ
zTaskGroup._spawnr@  zUnpack[PosArgsT])rÛ   rÁ   r8  r|   c                G  s   |   |||¡ d S r}   )rE  )ry   rÛ   r8  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   rE  r   r®   rK   r   )ry   rÛ   r8  rÁ   r¶   r¦   rk   rk   rl   rÃ     s    zTaskGroup.start)N)	re   rf   rg   rz   r3  r5  rE  rF  rÃ   rk   rk   rk   rl   r1  ˆ  s   , ûQü	ÿr1  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 threadr@  r0   F)Úsuperrz   rÖ   rJ  rK  ru   r’   r   ÚqueueÚAsyncIOBackendÚcurrent_timeÚ
idle_sinceÚstopping)ry   rÖ   rJ  rK  ©Ú	__class__rk   rl   rz   /  s    þ
zWorkerThread.__init__r,  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)rN  rO  rP  rQ  rK  r4  rµ   r  ÚStopIterationrš   Ú	__cause__r¼   rº   )ry   r¶   rT  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   rN  r’   rM  rÎ   rµ   r7   Úcurrent_cancel_scoper›   r‚   Z	is_closedr¯   rX  r>  )
ry   Úitemr”   rÛ   rÁ   r¶   rÓ   rT  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  )rQ  rM  Ú
put_nowaitrJ  ÚdiscardrK  rÿ   r™   )ry   r\  rk   rk   rl   Ústopm  s    zWorkerThread.stop)N)	re   rf   rg   ÚMAX_IDLE_TIMErz   rX  r›   r_  Ú__classcell__rk   rk   rR  rl   rI  ,  s
   rI  Ú_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}   )rL  rz   r   ru   r   rR  rk   rl   rz   �  s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r6  údict[str, Any]rí   zFuture[T_Retval])rÛ   rÁ   rC  r8  r¶   r|   c                 C  s,   t  t| jj|d�| j||||f| j¡ d S )Nr@  )rN  Úrun_sync_from_threadr   Z_task_grouprF  Z
_call_funcru   )ry   rÛ   rÁ   rC  r8  r¶   rk   rk   rl   Ú_spawn_task_from_thread…  s
    ýz&BlockingPortal._spawn_task_from_thread)re   rf   rg   rî   rz   rh  ra  rk   rk   rR  rl   rd  }  s   rd  F)Úeqc                   @  s6   e Zd ZU ded< ddddœdd„Zd	d
œdd„ZdS )ÚStreamReaderWrapperzasyncio.StreamReaderÚ_streamé   r-  Úbytes©Ú	max_bytesr|   c                 Ã  s"   | j  |¡I d H }|r|S t‚d S r}   )rk  Úreadr;   )ry   ro  Údatark   rk   rl   Úreceive�  s    zStreamReaderWrapper.receiverƒ   r{   c                 Ã  s    | j  tƒ ¡ t ¡ I d H  d S r}   )rk  r¼   r:   rN  Ú
checkpointr   rk   rk   rl   Úaclose¤  s    zStreamReaderWrapper.acloseN)rl  )re   rf   rg   Ú__annotations__rr  rt  rk   rk   rk   rl   rj  ™  s   
rj  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.StreamWriterrk  rm  rƒ   ©rZ  r|   c                 Ã  s    | j  |¡ | j  ¡ I d H  d S r}   )rk  ÚwriteZdrain©ry   rZ  rk   rk   rl   Úsend­  s    zStreamWriterWrapper.sendr{   c                 Ã  s   | j  ¡  t ¡ I d H  d S r}   )rk  rˆ   rN  rs  r   rk   rk   rl   rt  ±  s    
zStreamWriterWrapper.acloseN)re   rf   rg   ru  rz  rt  rk   rk   rk   rl   rv  ©  s   
rv  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 rG  )rK   r}  rt  r~  r  r·   r‚   Úkillr   rk   rk   rl   rt  ½  s    zProcess.acloser-  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.pidr&  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   ru  rt  r·   r�  r€  r‚  r"  rƒ  r„  r…  r†  r‡  rk   rk   rk   rl   r{  ¶  s&   
r{  zset[Process]rí   )rJ  r:  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Ð   Zget_event_loop_policyZget_child_watcherÚNotImplementedErrorr„  r}  rk  Ú
_transportrˆ   r~  r  r€  Zremove_child_handlerrƒ  )rJ  r:  Zchild_watcherÚprocessrk   rk   rl   Ú'_forcibly_shutdown_process_pool_on_exitð  s    

rŒ  úset[abc.Process]©rJ  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€  rt  )rJ  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.   Ú	TransportZ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´   rV  r“  rÏ   r”  ©ry   r  rk   rk   rl   Úconnection_lost0  s
    
zStreamProtocol.connection_lostrm  )rq  r|   c                 C  s   | j  t|ƒ¡ | j ¡  d S r}   )r‘  r4  rm  r“  rÏ   )ry   rq  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   ru  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_lostrm  rM   )rq  Úaddrr|   c                 C  s&   t |ƒ}| j ||f¡ | j ¡  d S r}   )r>   r‘  r4  r“  rÏ   )ry   rq  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   ru  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Š  Zget_extra_infor   rk   rk   rl   Ú_raw_socketp  s    zSocketStream._raw_socketrl  r-  rm  rn  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–  Zresume_readingr·   Úpause_readingrN  rs  r‘  ÚpopleftÚ
IndexErrorr·  r:   r´   r;   ÚlenÚ
appendleftr¬  )ry   ro  ÚchunkÚleftoverrk   rk   rl   rr  t  s2    
ÿþý
zSocketStream.receiverƒ   rw  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¶  rN  rs  r·  r:   r´  r´   rŠ  rx  rš   r¿  r8   r”  r·   )ry   rZ  r  rk   rk   rl   rz  —  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   rt  °  s    

zSocketStream.acloseN)rl  )
re   rf   rg   rz   r"  r½  rr  rz  rÉ  rt  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 )Ú_RawSocketMixinNr7  Ú_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.AbstractEventLoopr,  r²   c                   sD   dddœ‡ ‡fdd„}t  ¡  }ˆ_ˆ  ˆj|jd ¡ | |¡ |S )Nrí   rƒ   r[  c                   s   ˆ` ˆ  ˆj¡ d S r}   )rÍ  Úremove_readerrÑ  ©r\  ©r’   ry   rk   rl   ÚcallbackÌ  s    z6_RawSocketMixin._wait_until_readable.<locals>.callback)rÐ   r   rÍ  Ú
add_readerrÑ  rº   rB  ©ry   r’   r×  r\  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ƒ   r[  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º   rB  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   rt  ß  s    
z_RawSocketMixin.aclose)re   rf   rg   rÍ  ru  rÎ  rß  rz   r"  r½  rÚ  rÝ  rt  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_eofrl  r-  rm  rn  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   rN  rs  rµ  r½  ÚrecvÚBlockingIOErrorrÚ  rÈ  rß  r:   r8   r;   )ry   ro  r’   rq  r  rk   rk   rl   rr  ð  s    zUNIXSocketStream.receiverw  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   rN  rs  r¶  Ú
memoryviewr½  rz  rä  rÝ  rÈ  rß  r:   r8   )ry   rZ  r’   ÚviewZ
bytes_sentr  rk   rk   rl   rz    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  r-  r™   r   ÚarrayrN  rs  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  r-  r4  r   rà  rê  rN  rs  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)rl  )re   rf   rg   rÉ  rr  rz  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 )ÚTCPSocketListenerNr'  Ú_accept_scopeFr¹  rÏ  c                 C  s$   || _ ttjtƒ ƒ| _tdƒ| _d S )Núaccepting connections from)Ú_TCPSocketListener__raw_socketr.   rÐ   Z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û  rN  rs  rK   rø  ru   Zsock_acceptr½  rÐ   r   rÔ  r™   r‰  Ú
setsockoptr»  ÚIPPROTO_TCPÚTCP_NODELAYZ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   rt  ‰  s    
zTCPSocketListener.aclose)re   rf   rg   rø  ru  r·  rz   r"  r½  r  rt  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>)rN  rs  rû  r  r  Úsetblockingrá  rä  rÐ   r   ru   rØ  rº   rB  rÈ  r·  r:   r8   )ry   r  r  r\  r  rk   r   rl   r  ¢  s"    

ÿzUNIXSocketListener.acceptrƒ   c                 Ã  s   d| _ | j ¡  d S r  )r·  r  rˆ   r   rk   rk   rl   rt  ·  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  rt  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   rt  Î  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µ  rN  rs  r´  r‘  rŠ  r¿  r“  r¬  r·   rÁ  rÂ  r·  r:   r8   r   rk   rk   rl   rr  Ó  s    zUDPSocket.receiverO   rw  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¶  rN  rs  r´  r”  r·   r·  r:   rŠ  r¿  r8   Úsendtory  rk   rk   rl   rz  ä  s    
zUDPSocket.sendN©	re   rf   rg   rz   r"  r½  rt  rr  rz  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   rt  þ  s    
zConnectedUDPSocket.acloserm  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   rr    s    zConnectedUDPSocket.receiverw  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  ry  rk   rk   rl   rz    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 ©Nrl  )r   rN  rs  rµ  r½  Úrecvfromrä  rÚ  rÈ  rß  r:   r8   ©ry   r’   rq  r  rk   rk   rl   rr  #  s    zUNIXDatagramSocket.receiverƒ   rw  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   rN  rs  r¶  r½  r  rä  rÝ  rÈ  rß  r:   r8   ©ry   rZ  r’   r  rk   rk   rl   rz  4  s    zUNIXDatagramSocket.sendN©re   rf   rg   rr  rz  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 )
ÚConnectedUNIXDatagramSocketrm  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   rN  rs  rµ  r½  rã  rä  rÚ  rÈ  rß  r:   r8   r  rk   rk   rl   rr  G  s    z#ConnectedUNIXDatagramSocket.receiverƒ   rw  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   rN  rs  r¶  r½  rz  rä  rÝ  rÈ  rß  r:   r8   r  rk   rk   rl   rz  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ì   re  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}   )r  rÏ   r   rk   rk   rl   rÏ   z  s    z	Event.setrâ   c                 C  s
   | j  ¡ S r}   )r  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¾  rN  rs  r  r·   r   rk   rk   rl   r·   €  s    z
Event.waitr2   c                 C  s   t t| jjƒƒS r}   )r2   rÃ  r  Ú_waitersr   rk   rk   rl   Ú
statistics†  s    zEvent.statisticsN)	re   rf   rg   rî   rz   rÏ   r¾  r·   r  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â   ©r   r|   c                C  s
   t  | ¡S r}   rì   ©rð   r   rk   rk   rl   rî   ‹  s    zLock.__new__rƒ   c                C  s   || _ d | _tƒ | _d S r}   )Ú_fast_acquireÚ_owner_taskr   r  )ry   r   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$  r  rN  Úcheckpoint_if_cancelledr#  Úcancel_shielded_checkpointr   Úreleaserš   r   r4  rÿ   )ry   r¦   ÚfutrZ  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$  r  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š   r  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   r,  rÃ  r  )ry   Z	task_infork   rk   rl   r  Ï  s    zLock.statisticsN)
re   rf   rg   rî   rz   r*  r+  r,  r(  r  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_valuer   r-  r&  râ   ©Úinitial_valuer/  r   r|   c                C  s
   t  | ¡S r}   rì   ©rð   r1  r/  r   rk   rk   rl   rî   Õ  s    zSemaphore.__new__)r1  r/  r   c                  s.   t ƒ j||d� || _|| _|| _tƒ | _d S )N)r/  )rL  rz   Ú_valueÚ
_max_valuer#  r   r  )ry   r1  r/  r   rR  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ª   )r3  r  rN  r&  r#  r'  r   r(  rÐ   r   r4  rÿ   r™   ©ry   r)  rk   rk   rl   r*  ë  s(    zSemaphore.acquirec                 C  s    | j dkrt‚|  j d8  _ d S r5  )r3  r<   r   rk   rk   rl   r+    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ª   )r4  r3  r™   r  rµ   rº   rÿ   r6  rk   rk   rl   r(    s    

zSemaphore.releasec                 C  s   | j S r}   )r3  r   rk   rk   rl   r    s    zSemaphore.valuec                 C  s   | j S r}   )r4  r   rk   rk   rl   r/    s    zSemaphore.max_valuerG   c                 C  s   t t| jƒƒS r}   )rG   rÃ  r  r   rk   rk   rl   r  !  s    zSemaphore.statistics)re   rf   rg   rî   rz   r*  r+  r(  r"  r  r/  r  ra  rk   rk   rR  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ð   r9  rk   rk   rl   rî   (  s    zCapacityLimiter.__new__)r9  c                 C  s   t ƒ | _tƒ | _|| _d S r}   )rÏ   Ú
_borrowersr   Ú_wait_queuer9  )ry   r9  rk   rk   rl   rz   +  s    zCapacityLimiter.__init__rƒ   r{   c                 Ã  s   |   ¡ I d H  d S r}   )r*  r   rk   rk   rl   r3  0  s    zCapacityLimiter.__aenter__r  r  r  r„   c                 Ã  s   |   ¡  d S r}   )r(  r‰   rk   rk   rl   r5  3  s    zCapacityLimiter.__aexit__c                 C  s   | j S r}   )r7  r   rk   rk   rl   r9  ;  s    zCapacityLimiter.total_tokensr  c                 C  st   t |tƒst |¡stdƒ‚|dk r,tdƒ‚t|| j dƒ}|| _| jrp|rp| jj	dd�d }| 
¡  |d8 }qBd S )Nz'total_tokens must be an int or math.infrª   ztotal_tokens must be >= 1r   F©Úlast)r  r-  r  ÚisinfrA  r™   Úmaxr7  r<  ÚpopitemrÏ   )ry   r  Úwaiters_to_notifyÚeventrk   rk   rl   r9  ?  s    
r-  c                 C  s
   t | jƒS r}   )rÃ  r;  r   rk   rk   rl   Úborrowed_tokensO  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| jƒ S r}   )r7  rÃ  r;  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   r+  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)r;  rš   r<  rÃ  r7  r<   rü   )ry   rG  rk   rk   rl   rF  Z  s    
ÿz+CapacityLimiter.acquire_on_behalf_of_nowaitc                 Ã  s   |   tƒ ¡I d H S r}   )Úacquire_on_behalf_ofr   r   rk   rk   rl   r*  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}   )rN  r&  rF  r<   rÐ   rC   r<  r·   r‚   Úpopr;  rü   r'  r(  ©ry   rG  rC  rk   rk   rl   rH  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 tokensFr=  rª   )	r;  rÿ   rý   rš   r<  rÃ  r7  rA  rÏ   rJ  rk   rk   rl   rK  �  s    ÿþz$CapacityLimiter.release_on_behalf_ofr1   c                 C  s   t | j| jt| jƒt| jƒƒS r}   )r1   rD  r9  Útupler;  rÃ  r<  r   rk   rk   rl   r  Ž  s    üzCapacityLimiter.statisticsN)re   rf   rg   r7  ru  rî   rz   r3  r5  r"  r9  r#  rD  rE  r+  rF  r*  rH  r(  rK  r  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   r.  rÏ   Ú_handled_signals)ry   rO  rk   rk   rl   rz      s
    
z_SignalReceiver.__init__r   rƒ   )r°   r|   c                 C  s&   | j  |¡ | j ¡ s"| j d ¡ d S r}   )rQ  r4  r.  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Ï   rP  ru   Zadd_signal_handlerrS  rR  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}   )rR  ru   Zremove_signal_handler)ry   r…   r†   r‡   rT  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}   )rN  rs  rQ  rÐ   r   r.  rÁ  r   rk   rk   rl   Ú	__anext__À  s
    
z_SignalReceiver.__anext__N)	re   rf   rg   rz   rS  r€   rŠ   rU  rV  rk   rk   rk   rl   rN  Ÿ  s   
rN  c                      s0   e Zd Zddœ‡ fdd„Zddœdd„Z‡  ZS )	r-  r©   rå   c                   sL   t  |¡}|d krd }n|j}tƒ  t|ƒ|| ¡ | ¡ ¡ t 	|¡| _
d S r}   )rÒ   rÎ   r$  rL  rz   r  Úget_namerã   ÚweakrefÚrefr:  )ry   r¦   r  r$  rR  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)r:  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   rZ  ra  rk   rk   rR  rl   r-  Î  s   
r-  c                   @  sÞ   e Zd ZU ded< ddddœdddd	d
œdd„Zd dœdd„Zdddd	dœdd„Zddœdd„Zddd	dœdd„Zd	dœdd„Z	d d	d!œd"d#„Z
d$d%d&d'd(œd)d*„Zd+dd,d-œd.d/„Zd0dd'd-œd1d2„Zd3dd	d4œd5d6„ZdS )7Ú
TestRunnerzBMemoryObjectSendStream[tuple[Awaitable[Any], asyncio.Future[Any]]]Ú_send_streamNF)rn   Ú
use_uvloopro   rp   râ   rq   rƒ   )rn   r]  ro   r|   c                C  s8   |r|d krdd l }|j}t||d�| _g | _d | _d S )Nr   rm   )Úuvloopr§   rZ   Ú_runnerr2  Ú_runner_task)ry   rn   r]  ro   r^  rk   rk   rl   rz   ó  s    zTestRunner.__init__r{   c                 C  s   | j  ¡  |  ¡  | j¡ | S r}   )r_  r€   r“   Zset_exception_handlerÚ_exception_handlerr   rk   rk   rl   r€     s    
zTestRunner.__enter__r  r  r  r„   c                 C  s   | j  |||¡ d S r}   )r_  rŠ   r‰   rk   rk   rl   rŠ     s    zTestRunner.__exit__r   c                 C  s
   | j  ¡ S r}   )r_  r“   r   rk   rk   rl   r“     s    zTestRunner.get_looprÓ  rf  )r’   r”   r|   c                 C  s0   t | d¡tƒr"| j |d ¡ n
| |¡ d S )Nr´   )r  rÎ   r»   r2  r4  Zdefault_exception_handler)ry   r’   r”   rk   rk   rl   ra    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)r2  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.outcomesrd  r\  r   rµ   r®   rÁ   r‚   r¼   r  r»   rº   )ry   rc  rd  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Á   rC  r|   c                 Ï  sl   | j s<tttt tjf  dƒ\| _}|  ¡  	|  
|¡¡| _ |||Ž}|  ¡  ¡ }| j ||f¡ |I d H S rý  )r`  r?   r,   r%   r#   rÐ   r   r\  r“   r   rf  rÂ   Zsend_nowait)ry   rÛ   rÁ   rC  rc  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_funcrC  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Ž   rg  Úasendrb  ÚStopAsyncIterationrt  rš   )ry   rh  rC  Z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Ž   rg  rb  )ry   rh  rC  re  rk   rk   rl   Úrun_fixturek  s
    ÿzTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])Ú	test_funcrC  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Ž   rg  r»   r2  r4  rb  )ry   rm  rC  r  rk   rk   rl   Úrun_testv  s    ÿzTestRunner.run_test)re   rf   rg   ru  rz   r€   rŠ   r“   ra  rb  rf  rg  rk  rl  rn  rk   rk   rk   rl   r[  ð  s   
ûr[  c                
   @  sD  e Zd Zeddddddœdd„ƒZedd	œd
d„ƒZedd	œdd„ƒZedd	œdd„ƒZedd	œdd„ƒZedd	œdd„ƒZ	edd	œdd„ƒZ
edddœdd„ƒZeejddœdddd œd!d"„ƒZedd	œd#d$„ƒZed%d	œd&d'„ƒZed(d	œd)d*„ƒZedd+d,œd-d.„ƒZed/dd0œd1d2dd3d4œd5d6„ƒZedd7d8œd9d:„ƒZe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 )›rN  z1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r6  rf  r•   )rÛ   rÁ   rC  Ú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   r]  Fr   rm   )r   rÎ   r^  r§   rZ   r›   )
rð   rÛ   rÁ   rC  ro  rr  rn   ro   r^  Úrunnerrk   rq  rl   r›   „  s    
zAsyncIOBackend.runrí   r{   c                 C  s   t ƒ S r}   )r   re  rk   rk   rl   Úcurrent_token¡  s    zAsyncIOBackend.current_tokenrê   c                 C  s
   t ƒ  ¡ S r}   )r   r  re  rk   rk   rl   rO  ¥  s    zAsyncIOBackend.current_timer�   c                 C  s   t S r}   )r   re  rk   rk   rl   Úcancelled_exception_class©  s    z(AsyncIOBackend.cancelled_exception_classrƒ   c                 Ã  s   t dƒI d H  d S rš  ©r	   re  rk   rk   rl   rs  ­  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 )NTrH  r   )rK   r	   re  rk   rk   rl   r'  Ä  s    z)AsyncIOBackend.cancel_shielded_checkpoint)Údelayr|   c                 Ã  s   t |ƒI d H  d S r}   rv  )rð   rw  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}   )r1  re  rk   rk   rl   Úcreate_task_groupé  s    z AsyncIOBackend.create_task_groupz	abc.Eventc                 C  s   t ƒ S r}   rB   re  rk   rk   rl   Úcreate_eventí  s    zAsyncIOBackend.create_eventzabc.Lockr!  c                C  s
   t |d�S )Nr  rD   r"  rk   rk   rl   Úcreate_lockñ  s    zAsyncIOBackend.create_lockNr.  r-  r&  zabc.Semaphorer0  c                C  s   t |||d�S )Nr.  rH   r2  rk   rk   rl   Úcreate_semaphoreõ  s    zAsyncIOBackend.create_semaphorezabc.CapacityLimiterr8  c                 C  s   t |ƒS r}   r@   r:  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 )NrH  r   )rs  rb  rÎ   rc  ÚLookupErrorr   rÏ   Úcurrent_default_thread_limiterrK   rÐ   r   rÙ   rI  rÃ   rü   rB  r_  rI  rO  rP  r`  rÁ  rÖ   Zremove_done_callbackr   r›   ÚsniffioÚcurrent_async_library_cvarrÔ   rM  r]  )rð   rÛ   rÁ   r€  r�  rK  rJ  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   rY  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ü   r^  r   Ú
concurrentZfuturesrÚ   )r  Z__tracebackhide__r¦   r  rq  rk   rl   Útask_wrapperQ	  s    (z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperrÐ   )r.   r   r   r›   r„  r…  rÏ   r7   rY  rÐ   Zrun_coroutine_threadsaferT  )	rð   rÛ   rÁ   r‰  r‹  r’   r”   rr  r\  rk   rq  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Á   r\  rÛ   rk   rl   rr  m	  s    

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapper)r   r   r.   r   r¯   rT  )rð   rÛ   rÁ   r‰  rr  r’   rk   r�  rl   rg  f	  s    	

z#AsyncIOBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t ƒ S r}   )rd  re  rk   rk   rl   Úcreate_blocking_portal|	  s    z%AsyncIOBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner#   r{  )Úcommandr…  r†  r‡  rC  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‡  )rs  r  r   ÚosÚfspathrÚ   rm  rÐ   Zcreate_subprocess_shellZcreate_subprocess_execr…  rv  r†  rj  r‡  r{  )
rð   r�  r…  r†  r‡  rC  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 taskr@  )r   r�  rÙ   rB  r   rŒ  )rð   rJ  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>)rs  r   r»  ÚAF_UNIXr  Úconnecträ  rÐ   r   rÜ  rº   rB  r‚   rˆ   rá  )rð   rš  r\  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—  Zremote_addrr¤  r¦  )r   Z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>)rs  r   rž  rä  rÐ   r   rÜ  rº   rB  r‚   rˆ   r  r  )rð   rÐ  r¨  r\  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)rs  r  rÎ   r‚  rÏ   r9   r   rÐ   rC   rØ  rI  rÔ  r·   r:   )rð   r   r  r’   rC  Ú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)rs  r  rÎ   r‚  rÏ   r9   r   rÐ   rC   rÜ  rà  rI  rÛ  r·   r:   )rð   r   r  r’   rC  Ú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é(   )rM  rÎ   r‚  rA   rÏ   )rð   r�  rk   rk   rl   rƒ  Z
  s    

z-AsyncIOBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])rO  r|   c                 G  s   t |ƒS r}   )rN  )rð   rO  rk   rk   rl   Úopen_signal_receiverc
  s    z#AsyncIOBackend.open_signal_receiverr4   c                 C  s
   t tƒ ƒS r}   )r-  r   re  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­   r-  )rË   r¦   rk   rk   rl   rÍ   o
  s      z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   re  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š™™™™™¹?)rs  r   r   r  r­   r	   )rð   Z	this_taskr¦   r  rk   rk   rl   Úwait_all_tasks_blockedq
  s    
z%AsyncIOBackend.wait_all_tasks_blockedr[  )ro  r|   c                 C  s
   t f |ŽS r}   )r[  )rð   ro  rk   rk   rl   Úcreate_test_runner�
  s    z!AsyncIOBackend.create_test_runner)FN)N)r   ),re   rf   rg   Úclassmethodr›   rt  rO  ru  rs  r&  r'  r	   r  r  rx  rz  r{  r|  r}  r~  r  r‡  rˆ  rŒ  rg  rŽ  r’  r“  r™  rŸ  r¢  r£  r§  r©  r­  r¯  r±  r³  rƒ  rµ  r¶  r·  r¸  r¹  rk   rk   rk   rl   rN  ƒ  s°    ÿû	  û:#	 ÿø  ÿrN  )¶Ú
__future__r   rê  rÐ   Úconcurrent.futuresrŠ  r  r�  r»  r  rœ   rX  r   r   r   r   r   r   r	   Zasyncio.base_eventsr
   Úcollectionsr   r   Úcollections.abcr   r   r   Ú
contextlibr   r¨   r   r   Zdataclassesr   Ú	functoolsr   r   Úinspectr   r   r   r   Úior   r   rM  r   rŸ   r   r   r   r    Útypesr!   Útypingr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r„  r?  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   Ztyping_extensionsrZ   r[   r\   Úenumr]   r^   r_   r`   Zexceptiongroupra   ÚEnumrb   r�   r�   r•   rÆ   rÈ   rÉ   rÊ   ru  rÙ   rà   rá   ræ   rþ   rÒ   Z
TaskStatusr+  r1  r‚   Z_Retval_Queue_TyperI  rb  rc  rd  ZByteReceiveStreamrj  ZByteSendStreamrv  r{  rŒ  r�  ÚProtocolr�  r¦  r­  rÌ  rá  r÷  r  r  r  r  r  r  r  rM  rN  r-  r[  rN  Zbackend_classrk   rk   rk   rl   Ú<module>   sò    $	<  
 y "Kÿ9'U.t<%02$$JQr/"     