U
    gn                     @  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	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)Z*d dl+Z*d dl,m-Z-m.Z.m/Z/ d dl+m0Z0m1Z1m2Z2m3Z3 d dl4m5Z6 d dl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJ ddlKmLZM ddlKmNZO ddlKmPZQ ddlKmRZRmSZS ddlKmTZU ddlVmWZX ddl?mYZYmZZZm[Z[ ddl\m]Z]m^Z^ ddl_m`Z` ejad kr@d d!lmbZb nd d!lcmbZb ejad"krjd d#lmdZdmeZe nd d$lfmgZg d d#lcmdZdmeZe e&d%Zhe&d&Zie&d'ejeYZkedd(Zlebd)Zme*jnjoZoG d*d+ d+eXZWG d,d- d-e?jpZpG d.d/ d/e?jqZqed0d1G d2d3 d3e?jrZsed0d1G d4d5 d5e?jtZued0d1G d6d7 d7e?jvZvG d8d9 d9e*j?jwZxeod:Zyd;ezd:< d<d=d>d?d@Z{G dAdB dBe#ek Z|G dCdD dDe|e?j}Z}G dEdF dFe}e?j~Z~G dGdH dHe|e?jZG dIdJ dJe|e?jZG dKdL dLe|eY e?jZG dMdN dNe|eY e?jZG dOdP dPe|ej e?jZG dQdR dRe|ej e?jZG dSdT dTeOZNG dUdV dVeQZPG dWdX dXeUZTG dYdZ dZeMZLeod[Zd;ezd[< G d\d] d]ZG d^d_ d_e?jZG d`da dae=ZG dbdc dce]ZeZdS )d    )annotationsN)AsyncIteratorIterable)Future)	dataclass)partial)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
CollectionContextManager	CoroutineGenericNoReturnSequenceTypeVarcastoverload)ErrorOutcomeValue)current_root_taskcurrent_taskwait_readablewait_writable)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsLockStatisticsTaskInfo
WouldBlockabc)claim_worker_thread)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEventLock)ResourceGuardSemaphoreStatistics	SemaphoreCancelScope)IPSockAddrTypeUDPPacketTypeUNIXDatagramPacketType)AsyncBackendStrOrBytesPath)MemoryObjectSendStream)   
   )	ParamSpec)rE      )TypeVarTupleUnpack)BaseExceptionGroupTT_Retval
T_SockAddrPosArgsTPc                   @  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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 )&r>   Nztrio.CancelScope | Noneobject)originalkwargsreturnc                 K  s
   t | S NrQ   __new__)clsrR   rS    rY   9/tmp/pip-unpacked-wheel-3u0cc9gf/anyio/_backends/_trio.pyrW   o   s    zCancelScope.__new__r   Nonec                 K  s   |pt jf || _d S rU   )trior>   _CancelScope__original)selfrR   rS   rY   rY   rZ   __init__t   s    zCancelScope.__init__rT   c                 C  s   | j   | S rU   )r]   	__enter__r^   rY   rY   rZ   ra   w   s    
zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonebool | Noneexc_typeexc_valexc_tbrT   c                 C  s   | j |||S rU   )r]   __exit__r^   rh   ri   rj   rY   rY   rZ   rk   {   s    zCancelScope.__exit__c                 C  s   | j   d S rU   )r]   cancelrb   rY   rY   rZ   rm      s    zCancelScope.cancelfloatc                 C  s   | j jS rU   r]   deadlinerb   rY   rY   rZ   rp      s    zCancelScope.deadlinevaluerT   c                 C  s   || j _d S rU   ro   r^   rr   rY   rY   rZ   rp      s    boolc                 C  s   | j jS rU   )r]   cancel_calledrb   rY   rY   rZ   ru      s    zCancelScope.cancel_calledc                 C  s   | j jS rU   )r]   cancelled_caughtrb   rY   rY   rZ   rv      s    zCancelScope.cancelled_caughtc                 C  s   | j jS rU   r]   shieldrb   rY   rY   rZ   rx      s    zCancelScope.shieldc                 C  s   || j _d S rU   rw   rs   rY   rY   rZ   rx      s    )N)N)__name__
__module____qualname__rW   r_   ra   rk   rm   propertyrp   setterru   rv   rx   rY   rY   rY   rZ   r>   n   s$    	r>   c                   @  sp   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S )	TaskGroupr[   r`   c                 C  s   d| _ tjdd| _d | _d S )NFT)Zstrict_exception_groups)_activer\   Zopen_nursery_nursery_managercancel_scoperb   rY   rY   rZ   r_      s    zTaskGroup.__init__c                   s*   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr>   r   rb   rY   rY   rZ   r      s    zTaskGroup.__aenter__rc   rd   re   rf   rg   c              
     sx   zjz| j|||I d H W W NS  tk
rf } z*|tj\}}|sTtj }|| W 5 d }~X Y nX W 5 d| _ X d S NF)r   r   	__aexit__rK   splitr\   	Cancelled_create)r^   rh   ri   rj   exc_restZcancelled_excrY   rY   rZ   r      s    
zTaskGroup.__aexit__Nnamez,Callable[[Unpack[PosArgsT]], Awaitable[Any]]zUnpack[PosArgsT]rQ   )funcargsr   rT   c                G  s*   | j std| jj|f|d|i d S Nz;This task group is not active; no new tasks can be started.r   )r   RuntimeErrorr   
start_soonr^   r   r   r   rY   rY   rZ   r      s
    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r   c                  s,   | j std| jj|f|d|iI d H S r   )r   r   r   startr   rY   rY   rZ   r      s
    zTaskGroup.start)ry   rz   r{   r_   r   r   r   r   rY   rY   rY   rZ   r~      s   r~   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 rU   rV   rX   rY   rY   rZ   rW      s    zBlockingPortal.__new__r[   c                   s   t    tj | _d S rU   )superr_   r\   lowlevelcurrent_trio_token_tokenrb   	__class__rY   rZ   r_      s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]tuple[Unpack[PosArgsT]]dict[str, Any]rQ   zFuture[T_Retval])r   r   rS   r   futurerT   c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )Z
trio_token)r\   from_threadr$   r   Z_task_groupr   Z
_call_funcr   )r^   r   r   rS   r   r   rY   rY   rZ   _spawn_task_from_thread   s    z&BlockingPortal._spawn_task_from_thread)ry   rz   r{   rW   r_   r   __classcell__rY   rY   r   rZ   r      s   r   F)eqc                   @  s6   e Zd ZU ded< ddddddZd	d
ddZdS )ReceiveStreamWrapperztrio.abc.ReceiveStream_streamN
int | Nonebytes	max_bytesrT   c              
     s~   z| j |I d H }W nV tjk
rB } zt|jW 5 d }~X Y n, tjk
rl } zt|jW 5 d }~X Y nX |rv|S td S rU   )r   Zreceive_somer\   r/   	__cause__r-   r0   r^   r   datar   rY   rY   rZ   receive  s    zReceiveStreamWrapper.receiver[   r`   c                   s   | j  I d H  d S rU   r   acloserb   rY   rY   rZ   r     s    zReceiveStreamWrapper.aclose)N)ry   rz   r{   __annotations__r   r   rY   rY   rY   rZ   r      s   
r   c                   @  s4   e Zd ZU ded< dddddZddd	d
ZdS )SendStreamWrapperztrio.abc.SendStreamr   r   r[   itemrT   c              
     sr   z| j |I d H  W nV tjk
rB } zt|jW 5 d }~X Y n, tjk
rl } zt|jW 5 d }~X Y nX d S rU   )r   Zsend_allr\   r/   r   r-   r^   r   r   rY   rY   rZ   send  s    zSendStreamWrapper.sendr`   c                   s   | j  I d H  d S rU   r   rb   rY   rY   rZ   r   !  s    zSendStreamWrapper.acloseN)ry   rz   r{   r   r   r   rY   rY   rY   rZ   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trio.Process_processzabc.ByteSendStream | None_stdinzabc.ByteReceiveStream | 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 NT)rx   )r>   r   r   r   r   waitBaseExceptionkillrb   rY   rY   rZ   r   ,  s    zProcess.acloseintc                   s   | j  I d H S rU   )r   r   rb   rY   rY   rZ   r   =  s    zProcess.waitc                 C  s   | j   d S rU   )r   	terminaterb   rY   rY   rZ   r   @  s    zProcess.terminatec                 C  s   | j   d S rU   )r   r   rb   rY   rY   rZ   r   C  s    zProcess.killr
   )signalrT   c                 C  s   | j | d S rU   )r   send_signal)r^   r   rY   rY   rZ   r   F  s    zProcess.send_signalc                 C  s   | j jS rU   )r   pidrb   rY   rY   rZ   r   I  s    zProcess.pidr   c                 C  s   | j jS rU   )r   
returncoderb   rY   rY   rZ   r   M  s    zProcess.returncodec                 C  s   | j S rU   )r   rb   rY   rY   rZ   stdinQ  s    zProcess.stdinc                 C  s   | j S rU   )r   rb   rY   rY   rZ   stdoutU  s    zProcess.stdoutc                 C  s   | j S rU   )r   rb   rY   rY   rZ   stderrY  s    zProcess.stderrN)ry   rz   r{   r   r   r   r   r   r   r|   r   r   r   r   r   rY   rY   rY   rZ   r   %  s&   
r   c                      s"   e Zd Zdd fddZ  ZS )_ProcessPoolShutdownInstrumentr[   r`   c                   s   t    d S rU   )r   	after_runrb   r   rY   rZ   r   _  s    z(_ProcessPoolShutdownInstrument.after_run)ry   rz   r{   r   r   rY   rY   r   rZ   r   ^  s   r   &current_default_worker_process_limiterztrio.lowlevel.RunVarset[abc.Process]r[   workersrT   c                   s|   zt tjI d H  W n` t jk
rv   | D ]}|jd kr,|  q,tdd | D ]}| I d H  qTW 5 Q R X Y nX d S r   )	r\   sleepmathinfr   r   r   r>   r   )r   processrY   rY   rZ   _shutdown_process_poolh  s    

r   c                   @  sZ   e Zd ZdddddZddddZed	dd
dZddddZdddddZdS )_TrioSocketMixinTrioSocketTyper[   trio_socketrT   c                 C  s   || _ d| _d S r   )_trio_socket_closedr^   r   rY   rY   rZ   r_   {  s    z_TrioSocketMixin.__init__r`   c                 C  s    | j r
t| j dk rtd S Nr   )r   r/   r   filenor-   rb   rY   rY   rZ   _check_closed  s    z_TrioSocketMixin._check_closedsocket.socketc                 C  s   | j jS rU   )r   _sockrb   rY   rY   rZ   _raw_socket  s    z_TrioSocketMixin._raw_socketc                   s"   | j  dkrd| _| j   d S )Nr   T)r   r   r   closerb   rY   rY   rZ   r     s    z_TrioSocketMixin.acloser   r   r   rT   c                 C  sJ   t |tjrt|n2| j dk r0| jr0td nt |trBt|n|d S r   )
isinstancer\   r/   r   r   r   OSErrorr-   r^   r   rY   rY   rZ   _convert_socket_error  s    
z&_TrioSocketMixin._convert_socket_errorN)	ry   rz   r{   r_   r   r|   r   r   r   rY   rY   rY   rZ   r   z  s   r   c                      sT   e Zd Zddd fddZdddd	d
dZdddddZddddZ  ZS )SocketStreamr   r[   r   c                   s$   t  | td| _td| _d S Nreading from
writing tor   r_   r9   _receive_guard_send_guardr   r   rY   rZ   r_     s    
zSocketStream.__init__   r   r   r   c                   sr   | j b z| j|I d H }W n, tk
rJ } z| | W 5 d }~X Y nX |r`|W  5 Q R  S tW 5 Q R X d S rU   )r   r   recvr   r   r0   r   rY   rY   rZ   r     s    zSocketStream.receiver   c                   st   | j d t|}|rfz| j|I d H }W n, tk
rV } z| | W 5 d }~X Y nX ||d  }qW 5 Q R X d S rU   )r   
memoryviewr   r   r   r   )r^   r   viewZ
bytes_sentr   rY   rY   rZ   r     s    zSocketStream.sendr`   c                   s   | j tj d S rU   )r   shutdownsocketSHUT_WRrb   rY   rY   rZ   send_eof  s    zSocketStream.send_eof)r   )ry   rz   r{   r_   r   r   r   r   rY   rY   r   rZ   r     s   r   c                   @  s0   e Zd ZddddddZdddd	d
dZdS )UNIXSocketStreamr   ztuple[bytes, list[int]])msglenmaxfdsrT   c                   s:  t |tr|dk rtdt |tr,|dk r4tdtd}tj I d H  | jp z,| j	|t
||j I d H \}}}}W n, tk
r } z| | W 5 d }~X Y qVX |s|stqqVW 5 Q R X |D ]^\}	}
}|	t
jks|
t
jkrtd|d|	 d|
 ||d t|t||j    q|t|fS )	Nr   z%msglen must be a non-negative integer   z!maxfds must be a positive integeriz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarrayr\   r   
checkpointr   r   recvmsgr   CMSG_LENitemsizer   r   r0   
SOL_SOCKET
SCM_RIGHTSr   Z	frombyteslenlist)r^   r   r   fdsmessageZancdataflagsaddrr   Z
cmsg_levelZ	cmsg_typeZ	cmsg_datarY   rY   rZ   receive_fds  s0    
 &zUNIXSocketStream.receive_fdsr   zCollection[int | IOBase]r[   )r  r  rT   c                   s   |st d|st dg }|D ]2}t|tr:|| q t|tr ||  q td|}tj	 I d H  | j
` z*| j|gtjtj|fgI d H  W qW qx tk
r } z| | W 5 d }~X Y qxX qxW 5 Q R X d S )Nzmessage must not be emptyzfds must not be emptyr   )r   r   r   appendr   r   r   r\   r   r   r   r   sendmsgr   r   r  r   r   )r^   r  r  ZfilenosfdZfdarrayr   rY   rY   rZ   send_fds  s2    



zUNIXSocketStream.send_fdsN)ry   rz   r{   r  r  rY   rY   rY   rZ   r     s   !r   c                      s0   e Zd Zdd fddZddddZ  ZS )	TCPSocketListenerr   
raw_socketc                   s"   t  tj| td| _d S Nzaccepting connections fromr   r_   r\   r   from_stdlib_socketr9   _accept_guardr^   r  r   rY   rZ   r_     s    zTCPSocketListener.__init__r   r`   c                   sr   | j L z| j I d H \}}W n, tk
rL } z| | W 5 d }~X Y nX W 5 Q R X |tjtjd t	|S Nr   )
r  r   acceptr   r   
setsockoptr   IPPROTO_TCPTCP_NODELAYr   r^   r   Z_addrr   rY   rY   rZ   r    s    &zTCPSocketListener.acceptry   rz   r{   r_   r  r   rY   rY   r   rZ   r    s   r  c                      s0   e Zd Zdd fddZddddZ  ZS )	UNIXSocketListenerr   r  c                   s"   t  tj| td| _d S r  r  r  r   rY   rZ   r_     s    zUNIXSocketListener.__init__r   r`   c                   s`   | j L z| j I d H \}}W n, tk
rL } z| | W 5 d }~X Y nX W 5 Q R X t|S rU   )r  r   r  r   r   r   r  rY   rY   rZ   r    s    &zUNIXSocketListener.acceptr  rY   rY   r   rZ   r    s   r  c                      sB   e Zd Zddd fddZdddd	Zd
ddddZ  ZS )	UDPSocketr   r[   r   c                   s$   t  | td| _td| _d S r   r   r   r   rY   rZ   r_     s    
zUDPSocket.__init__ztuple[bytes, IPSockAddrType]r`   c                   st   | j d z0| jdI d H \}}|t|fW W  5 Q R  S  tk
rd } z| | W 5 d }~X Y nX W 5 Q R X d S Nr   )r   r   recvfromr1   r   r   r^   r   r  r   rY   rY   rZ   r   "  s    zUDPSocket.receiver@   r   c                   sZ   | j J z| jj| I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rU   r   r   sendtor   r   r   rY   rY   rZ   r   *  s
    zUDPSocket.sendry   rz   r{   r_   r   r   r   rY   rY   r   rZ   r    s   r  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )ConnectedUDPSocketr   r[   r   c                   s$   t  | td| _td| _d S r   r   r   r   rY   rZ   r_   3  s    
zConnectedUDPSocket.__init__r   r`   c                   sd   | j T z | jdI d H W W  5 Q R  S  tk
rT } z| | W 5 d }~X Y nX W 5 Q R X d S r  r   r   r   r   r   r   rY   rY   rZ   r   8  s
     zConnectedUDPSocket.receiver   c                   sZ   | j J z| j|I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rU   r   r   r   r   r   r   rY   rY   rZ   r   ?  s
    zConnectedUDPSocket.sendr#  rY   rY   r   rZ   r$  2  s   r$  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )UNIXDatagramSocketr   r[   r   c                   s$   t  | td| _td| _d S r   r   r   r   rY   rZ   r_   H  s    
zUNIXDatagramSocket.__init__rA   r`   c                   sp   | j ` z,| jdI d H \}}||fW W  5 Q R  S  tk
r` } z| | W 5 d }~X Y nX W 5 Q R X d S r  )r   r   r  r   r   r   rY   rY   rZ   r   M  s    zUNIXDatagramSocket.receiver   c                   sZ   | j J z| jj| I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rU   r!  r   rY   rY   rZ   r   U  s
    zUNIXDatagramSocket.sendr#  rY   rY   r   rZ   r'  G  s   r'  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )ConnectedUNIXDatagramSocketr   r[   r   c                   s$   t  | td| _td| _d S r   r   r   r   rY   rZ   r_   `  s    
z$ConnectedUNIXDatagramSocket.__init__r   r`   c                   sd   | j T z | jdI d H W W  5 Q R  S  tk
rT } z| | W 5 d }~X Y nX W 5 Q R X d S r  r%  r   rY   rY   rZ   r   e  s
     z#ConnectedUNIXDatagramSocket.receiver   c                   sZ   | j J z| j|I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rU   r&  r   rY   rY   rZ   r   l  s
    z ConnectedUNIXDatagramSocket.sendr#  rY   rY   r   rZ   r(  ]  s   r(  c                   @  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 )r6   r`   c                 C  s
   t | S rU   rV   r   rY   rY   rZ   rW   z  s    zEvent.__new__r[   c                 C  s   t  | _d S rU   )r\   r6   _Event__originalrb   rY   rY   rZ   r_   }  s    zEvent.__init__rt   c                 C  s
   | j  S rU   )r)  is_setrb   rY   rY   rZ   r*    s    zEvent.is_setc                   s   | j  I d H S rU   )r)  r   rb   rY   rY   rZ   r     s    z
Event.waitr'   c                 C  s   | j  }t|jdS )N)tasks_waiting)r)  
statisticsr'   r+  r^   orig_statisticsrY   rY   rZ   r,    s    
zEvent.statisticsc                 C  s   | j   d S rU   )r)  setrb   rY   rY   rZ   r/    s    z	Event.setN)	ry   rz   r{   rW   r_   r*  r   r,  r/  rY   rY   rY   rZ   r6   y  s   r6   c                   @  s   e Zd Zdddd dddZddddddd	Z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Z
ddddZdS )r8   Ffast_acquirert   r1  rT   c                C  s
   t | S rU   rV   rX   r1  rY   rY   rZ   rW     s    zLock.__new__r[   c                C  s   || _ t | _d S rU   )_fast_acquirer\   r8   _Lock__original)r^   r1  rY   rY   rZ   r_     s    zLock.__init__r   r   c                 C  s   | j dkrd| _ d S )N)z*attempt to re-acquire an already held Lock)z)Attempted to acquire an already held Lock)r   )r   rY   rY   rZ   _convert_runtime_error_msg  s    
zLock._convert_runtime_error_msgr`   c              
     s   | j sNz| j I d H  W n. tk
rH } z| |  W 5 d }~X Y nX d S tj I d H  z| j  W nT tj	k
r   | jj
 I d H  Y n. tk
r } z| |  W 5 d }~X Y nX d S rU   )r4  r5  acquirer   r6  r\   r   checkpoint_if_cancelledacquire_nowaitr*   _lotparkr   rY   rY   rZ   r7    s    

zLock.acquirec              
   C  s\   z| j   W nH tjk
r*   td Y n. tk
rV } z| |  W 5 d }~X Y nX d S rU   )r5  r9  r\   r*   r   r6  r   rY   rY   rZ   r9    s    

zLock.acquire_nowaitc                 C  s
   | j  S rU   )r5  lockedrb   rY   rY   rZ   r<    s    zLock.lockedc                 C  s   | j   d S rU   )r5  releaserb   rY   rY   rZ   r=    s    zLock.releaser(   c                 C  s.   | j  }|jrt|jnd }t|j||jS rU   )r5  r,  ownerTrioTaskInfor(   r<  r+  )r^   r.  r>  rY   rY   rZ   r,    s    
  zLock.statisticsN)ry   rz   r{   rW   r_   staticmethodr6  r7  r9  r<  r=  r,  rY   rY   rY   rZ   r8     s   	r8   c                      s   e Zd Zddddddd ddd	Zddddddd
d f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
ddddZ  ZS )r<   NF	max_valuer1  r   r   rt   initial_valuerB  r1  rT   c                C  s
   t | S rU   rV   rX   rD  rB  r1  rY   rY   rZ   rW     s    zSemaphore.__new__r[   c                  s&   t  j|||d tj||d| _d S )NrA  )rB  )r   r_   r\   r<   _Semaphore__original)r^   rD  rB  r1  r   rY   rZ   r_     s    zSemaphore.__init__r`   c                   sf   | j s| j I d H  d S tj I d H  z| j  W n( tjk
r`   | jj	 I d H  Y nX d S rU   )
r4  rF  r7  r\   r   r8  r9  r*   r:  r;  rb   rY   rY   rZ   r7    s    zSemaphore.acquirec                 C  s0   z| j   W n tjk
r*   td Y nX d S rU   )rF  r9  r\   r*   rb   rY   rY   rZ   r9    s    zSemaphore.acquire_nowaitc                 C  s   | j jS rU   )rF  rB  rb   rY   rY   rZ   rB    s    zSemaphore.max_valuec                 C  s   | j jS rU   )rF  rr   rb   rY   rY   rZ   rr     s    zSemaphore.valuec                 C  s   | j   d S rU   )rF  r=  rb   rY   rY   rZ   r=    s    zSemaphore.releaser:   c                 C  s   | j  }t|jS rU   )rF  r,  r:   r+  r-  rY   rY   rZ   r,    s    
zSemaphore.statistics)ry   rz   r{   rW   r_   r7  r9  r|   rB  rr   r=  r,  r   rY   rY   r   rZ   r<     s   
r<   c                   @  s  e Zd Zd/ddddd dddZd0dddd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 )1r4   NrR   zfloat | Noneztrio.CapacityLimiter | None)total_tokensrR   rT   c                C  s
   t | S rU   rV   )rX   rH  rR   rY   rY   rZ   rW     s    zCapacityLimiter.__new__r[   c                C  s,   |d k	r|| _ n|d k	stt|| _ d S rU   )_CapacityLimiter__originalAssertionErrorr\   r4   )r^   rH  rR   rY   rY   rZ   r_     s    zCapacityLimiter.__init__r`   c                   s   | j  I d H S rU   )rI  r   rb   rY   rY   rZ   r     s    zCapacityLimiter.__aenter__rc   rd   re   rg   c                   s   | j |||I d H  d S rU   )rI  r   rl   rY   rY   rZ   r     s    zCapacityLimiter.__aexit__rn   c                 C  s   | j jS rU   rI  rH  rb   rY   rY   rZ   rH    s    zCapacityLimiter.total_tokensrq   c                 C  s   || j _d S rU   rK  rs   rY   rY   rZ   rH     s    r   c                 C  s   | j jS rU   )rI  borrowed_tokensrb   rY   rY   rZ   rL  $  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j jS rU   )rI  available_tokensrb   rY   rY   rZ   rM  (  s    z CapacityLimiter.available_tokensc                 C  s   | j   d S rU   )rI  r9  rb   rY   rY   rZ   r9  ,  s    zCapacityLimiter.acquire_nowaitrQ   )borrowerrT   c                 C  s   | j | d S rU   )rI  acquire_on_behalf_of_nowaitr^   rN  rY   rY   rZ   rO  /  s    z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   | j  I d H  d S rU   )rI  r7  rb   rY   rY   rZ   r7  2  s    zCapacityLimiter.acquirec                   s   | j |I d H  d S rU   )rI  acquire_on_behalf_ofrP  rY   rY   rZ   rQ  5  s    z$CapacityLimiter.acquire_on_behalf_ofc                 C  s
   | j  S rU   )rI  r=  rb   rY   rY   rZ   r=  8  s    zCapacityLimiter.releasec                 C  s   | j |S rU   )rI  release_on_behalf_ofrP  rY   rY   rZ   rR  ;  s    z$CapacityLimiter.release_on_behalf_ofr&   c                 C  s&   | j  }t|j|jt|j|jdS )N)rL  rH  	borrowersr+  )rI  r,  r&   rL  rH  tuplerS  r+  )r^   origrY   rY   rZ   r,  >  s    
zCapacityLimiter.statistics)N)N)ry   rz   r{   rW   r_   r   r   r|   rH  r}   rL  rM  r9  rO  r7  rQ  r=  rR  r,  rY   rY   rY   rZ   r4     s2    
 r4   _capacity_limiter_wrapperc                   @  sb   e Zd ZU de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AsyncIterator[int]	_iteratorztuple[Signals, ...])signalsc                 C  s
   || _ d S rU   )_signals)r^   rY  rY   rY   rZ   r_   S  s    z_SignalReceiver.__init__r`   c                 C  s   t j| j | _| j | _| S rU   )r\   open_signal_receiverrZ  _cmra   rX  rb   rY   rY   rZ   ra   V  s    z_SignalReceiver.__enter__rc   rd   re   rf   rg   c                 C  s   | j |||S rU   )r\  rk   rl   rY   rY   rZ   rk   [  s    z_SignalReceiver.__exit__c                 C  s   | S rU   rY   rb   rY   rY   rZ   	__aiter__c  s    z_SignalReceiver.__aiter__r
   c                   s   | j  I d H }t|S rU   )rX  	__anext__r
   )r^   signumrY   rY   rZ   r^  f  s    z_SignalReceiver.__anext__N)	ry   rz   r{   r   r_   ra   rk   r]  r^  rY   rY   rY   rZ   rW  P  s   
rW  c                   @  s   e Zd Zd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ddddddZddddddZd dddd!d"Z	d#ddd$d%d&Z
d'S )(
TestRunnerr   r[   optionsrT   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuerc  _call_queue_send_stream_options)r^   rb  rc  rY   rY   rZ   r_   q  s    zTestRunner.__init__rc   rd   ztypes.TracebackType | Nonerg   c                 C  s,   | j r(| j   | j d k	r(| j   qd S rU   )rf  r   re  getrl   rY   rY   rZ   rk   x  s    

zTestRunner.__exit__r`   c                   s   t d\| _}|l |2 z^3 d H W \}}z|I d H }W n0 tk
rf } z|t| W 5 d }~X Y qX |t| q6 W 5 Q R X d S r  )r2   rf  r   r	  r   r   )r^   Zreceive_streamcorooutcome_holderretvalr   rY   rY   rZ   _run_tests_and_fixtures  s     z"TestRunner._run_tests_and_fixturesrQ   )outcomerT   c                 C  s
   d | _ d S rU   )rf  )r^   rm  rY   rY   rZ   _main_task_finished  s    zTestRunner._main_task_finishedz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsrM   )r   r   rS   rT   c                 O  s~   | j d krFtjj| jf| jj| jd| j | j d krF| j	   q.g }| j 
||||f |sr| j	   q`|d  S )N)Zrun_sync_soon_threadsafeZdone_callbackr   )rf  r\   r   Zstart_guest_runrl  re  putrn  rg  rh  Zsend_nowaitunwrap)r^   r   r   rS   rj  rY   rY   rZ   _call_in_runner_task  s     

zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]r   zIterable[T_Retval])fixture_funcrS   rT   c                 c  s^   |f |}|  |jd }|V  z|  |jd  W n tk
rD   Y nX |  |j tdd S )Nz$Async generator fixture did not stop)rq  asendStopAsyncIterationr   r   )r^   rr  rS   ZasyncgenZfixturevaluerY   rY   rZ   run_asyncgen_fixture  s    
zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |f|S rU   rq  )r^   rr  rS   rY   rY   rZ   run_fixture  s    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrS   rT   c                 C  s   | j |f| d S rU   rv  )r^   rx  rS   rY   rY   rZ   run_test  s    zTestRunner.run_testN)ry   rz   r{   r_   rk   rl  rn  rq  ru  rw  ry  rY   rY   rY   rZ   r`  p  s   r`  c                      s0   e Zd Zdd fddZddddZ  ZS )	r?  ztrio.lowlevel.Task)taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rU   )
Zparent_nurseryZparent_taskidr   r_   r   ri  weakrefproxy_task)r^   rz  Z	parent_idr   rY   rZ   r_     s
    zTrioTaskInfo.__init__rt   r`   c                 C  s(   z| j jjW S  tk
r"   Y dS X d S r   )r~  Z_cancel_statusZeffectively_cancelledReferenceErrorrb   rY   rY   rZ   has_pending_cancellation  s    z%TrioTaskInfo.has_pending_cancellation)ry   rz   r{   r_   r  r   rY   rY   r   rZ   r?    s   r?  c                
   @  sx  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dd;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ddUd1dVdWdX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e!d`ddldmdndoZ"ee!d`d[dpdmdqdoZ"ed`drdsdmdtdoZ"edududududvdwdxdydzd1d1d{d|d}d~Z#eddd1ddddZ$ed`ddbddZ%ed`ddbddZ&ed7d	ddZ'edddddZ(edd	ddZ)edd	ddZ*edd	ddZ+edddddZ,d/S )TrioBackendz1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rM   )r   r   rS   rb  rT   c                 C  s   t j|f| S rU   )r\   run)rX   r   r   rS   rb  rY   rY   rZ   r    s    zTrioBackend.runrQ   r`   c                 C  s
   t j S rU   )r\   r   r   r   rY   rY   rZ   current_token  s    zTrioBackend.current_tokenrn   c                 C  s   t  S rU   )r\   current_timer   rY   rY   rZ   r    s    zTrioBackend.current_timeztype[BaseException]c                 C  s   t jS rU   )r\   r   r   rY   rY   rZ   cancelled_exception_class  s    z%TrioBackend.cancelled_exception_classr[   c                   s   t j I d H  d S rU   )r\   r   r   r   rY   rY   rZ   r     s    zTrioBackend.checkpointc                   s   t j I d H  d S rU   )r\   r   r8  r   rY   rY   rZ   r8    s    z#TrioBackend.checkpoint_if_cancelledc                   s   t j I d H  d S rU   )r\   r   cancel_shielded_checkpointr   rY   rY   rZ   r    s    z&TrioBackend.cancel_shielded_checkpoint)delayrT   c                   s   t |I d H  d S rU   )r\   r   )rX   r  rY   rY   rZ   r     s    zTrioBackend.sleepFrp   rx   rt   zabc.CancelScope)rp   rx   rT   c                C  s   t ||dS )Nr  r=   )rX   rp   rx   rY   rY   rZ   create_cancel_scope   s    zTrioBackend.create_cancel_scopec                 C  s   t  S rU   )r\   current_effective_deadliner   rY   rY   rZ   r    s    z&TrioBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S rU   )r~   r   rY   rY   rZ   create_task_group
  s    zTrioBackend.create_task_groupz	abc.Eventc                 C  s   t  S rU   r5   r   rY   rY   rZ   create_event  s    zTrioBackend.create_eventr8   r2  c                C  s
   t |dS )Nr0  r7   r3  rY   rY   rZ   create_lock  s    zTrioBackend.create_lockNrA  r   r   zabc.SemaphorerC  c                C  s   t |||dS )NrA  r;   rE  rY   rY   rZ   create_semaphore  s    zTrioBackend.create_semaphorer4   )rH  rT   c                 C  s   t |S rU   r3   )rX   rH  rY   rY   rZ   create_capacity_limiter   s    z#TrioBackend.create_capacity_limiterz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)r   r   abandon_on_cancellimiterrT   c                   s:   dd fdd}t  t||ttj|dI d H S )NrM   r`   c                
     s*   t t   W  5 Q R  S Q R X d S rU   )r,   r  rY   r   r   tokenrY   rZ   wrapper,  s    z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )r  r  r$   r   r\   r4   )rX   r   r   r  r  r  rY   r  rZ   run_sync_in_worker_thread$  s    
z%TrioBackend.run_sync_in_worker_threadc                 C  s   t j  d S rU   )r\   r   check_cancelledr   rY   rY   rZ   r  7  s    zTrioBackend.check_cancelled)r   r   r  rT   c                 C  s   t jj|f| S rU   )r\   r   r  rX   r   r   r  rY   rY   rZ   run_async_from_thread;  s    z!TrioBackend.run_async_from_threadc                 C  s   t jj|f| S rU   )r\   r   r$   r  rY   rY   rZ   run_sync_from_threadD  s    z TrioBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S rU   )r   r   rY   rY   rZ   create_blocking_portalM  s    z"TrioBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner   r   )commandr   r   r   rS   rT   c          
        s   ddddd t |tttfrJtjj |f|||dd|I d H }n2tjj fdd	|D f|||d
d|I d H }|jrt|jnd }|j	rt
|j	nd }|jrt
|jnd }	t||||	S )NrC   strr   c                 S  s&   t | }t|tr|S t |S d S rU   )osfspathr   r  fsdecode)r   Zstr_or_bytesrY   rY   rZ   convert_item[  s    

z.TrioBackend.open_process.<locals>.convert_itemT)r   r   r   shellc                   s   g | ]} |qS rY   rY   ).0r   r  rY   rZ   
<listcomp>m  s     z,TrioBackend.open_process.<locals>.<listcomp>F)r   r  r   r	   r\   r   open_processr   r   r   r   r   r   )
rX   r  r   r   r   rS   r   Zstdin_streamZstdout_streamZstderr_streamrY   r  rZ   r  Q  s4    
		zTrioBackend.open_processr   r   c                 C  s   t jt| d S rU   )r\   r   Zspawn_system_taskr   )rX   r   rY   rY   rZ   #setup_process_pool_exit_at_shutdownz  s    z/TrioBackend.setup_process_pool_exit_at_shutdownr  zIPSockAddrType | Noner   )hostportlocal_addressrT   c                   s   d|krt jnt j}tj  |}|t jt jd |rF||I d H  z|||fI d H  W n t	k
r|   |
   Y nX t|S )N:r   )r   AF_INET6AF_INETr\   r  r  r  bindconnectr   r   r   )rX   r  r  r  familyr   rY   rY   rZ   connect_tcp~  s    zTrioBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)pathrT   c                   sJ   t jtj}z||I d H  W n tk
r@   |   Y nX t|S rU   )r\   r   AF_UNIXr  r   r   r   )rX   r  r   rY   rY   rZ   connect_unix  s    zTrioBackend.connect_unixr   zabc.SocketListener)sockrT   c                 C  s   t |S rU   )r  rX   r  rY   rY   rZ   create_tcp_listener  s    zTrioBackend.create_tcp_listenerc                 C  s   t |S rU   )r  r  rY   rY   rZ   create_unix_listener  s    z TrioBackend.create_unix_listenerzsocket.AddressFamilyzUDPSocket | ConnectedUDPSocket)r  r  remote_address
reuse_portrT   c                   sd   t jj|tjd}|r(|tjtjd |r<||I d H  |rX||I d H  t|S t	|S d S )N)r  typer   )
r\   r   
SOCK_DGRAMr  r   SO_REUSEPORTr  r  r$  r  )rX   r  r  r  r  r   rY   rY   rZ   create_udp_socket  s    zTrioBackend.create_udp_socketzabc.UNIXDatagramSocket)r  remote_pathrT   c                   s   d S rU   rY   rX   r  r  rY   rY   rZ   create_unix_datagram_socket  s    z'TrioBackend.create_unix_datagram_socketzabc.ConnectedUNIXDatagramSocketc                   s   d S rU   rY   r  rY   rY   rZ   r    s    zstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s4   t j|}|r(||I d H  t|S t|S d S rU   )r\   r   r  r  r(  r'  )rX   r  r  r   rY   rY   rZ   r    s
    r   )r  r  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  rT   c                  s   t j||||||I d H S rU   )r\   r   getaddrinfo)rX   r  r  r  r  r  r  rY   rY   rZ   r    s    zTrioBackend.getaddrinfor?   ztuple[str, str])sockaddrr  rT   c                   s   t j||I d H S rU   )r\   r   getnameinfo)rX   r  r  rY   rY   rZ   r    s    zTrioBackend.getnameinfoc              
     sj   zt |I d H  W nR tjk
rF } zt |jd W 5 d }~X Y n  tjk
rd   tdd Y nX d S )Nr   )r!   r\   r/   with_traceback__traceback__r.   rX   r  r   rY   rY   rZ   wait_socket_readable  s     z TrioBackend.wait_socket_readablec              
     sj   zt |I d H  W nR tjk
rF } zt |jd W 5 d }~X Y n  tjk
rd   tdd Y nX d S )Nr   )r"   r\   r/   r  r  r.   r  rY   rY   rZ   wait_socket_writable  s     z TrioBackend.wait_socket_writablec                 C  sB   z
t  W S  tk
r<   ttj d}t | | Y S X d S )NrG  )rV  rh  LookupErrorr4   r\   Z	to_threadcurrent_default_thread_limiterr/  )rX   r  rY   rY   rZ   r    s    

z*TrioBackend.current_default_thread_limiterr
   z&ContextManager[AsyncIterator[Signals]])rY  rT   c                 G  s   t |S rU   )rW  )rX   rY  rY   rY   rZ   r[  	  s    z TrioBackend.open_signal_receiverr)   c                 C  s   t  }t|S rU   )r    r?  )rX   rz  rY   rY   rZ   get_current_task  s    zTrioBackend.get_current_taskzSequence[TaskInfo]c                 C  s`   t  }|stt|g}|j}|r\g }|D ]*}|jD ]}|t| ||j q4q*|}q|S rU   )r   rJ  r?  Zchild_nurseriesZchild_tasksr	  extend)rX   Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZnurseryrz  rY   rY   rZ   get_running_tasks  s    

zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)Ztrio.testingr  )rX   r  rY   rY   rZ   r  %  s    z"TrioBackend.wait_all_tasks_blockedr`  ra  c                 C  s
   t f |S rU   )r`  )rX   rb  rY   rY   rZ   create_test_runner+  s    zTrioBackend.create_test_runner)FN)N)r   )-ry   rz   r{   classmethodr  r  r  r  r   r8  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r[  r  r  r  r  rY   rY   rY   rZ   r    s   	 	  ( 
  
r  )
__future__r   r   r   r  r   systypesr|  collections.abcr   r   concurrent.futuresr   Zdataclassesr   	functoolsr   ior   r	   r   r
   r   r   r   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztrio.from_threadr\   Ztrio.lowlevelrm  r   r   r   r   r    r!   r"   Ztrio.socketr#   r   Ztrio.to_threadr$    r&   r'   r(   r)   r*   r+   Z_core._eventloopr,   Z_core._exceptionsr-   r.   r/   r0   Z_core._socketsr1   Z_core._streamsr2   Z_core._synchronizationr4   ZBaseCapacityLimiterr6   Z	BaseEventr8   ZBaseLockr9   r:   r<   ZBaseSemaphoreZ_core._tasksr>   ZBaseCancelScoper?   r@   rA   Zabc._eventlooprB   rC   Zstreams.memoryrD   version_inforG   Ztyping_extensionsrI   rJ   ZexceptiongrouprK   rL   rM   r  rN   rO   rP   r   ZRunVarr~   r   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r   r   ZSocketListenerr  r  r  r$  r'  r(  rV  rW  r`  r?  r  Zbackend_classrY   rY   rY   rZ   <module>   s    @ 7; 8!C
 86L W  Y