o
    _i                     @  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mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ 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& d dl'Z(d dl)Z(d dl*m+Z+m,Z,m-Z- d dl)m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z5 d dl6m7Z7 ddl8m9Z9m: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 rd dlambZb ejcd kr'd d!lmdZd nd d!lemdZd ejcd"kr<d d#lmfZfmgZg nd d$lhmiZi d d#lemfZfmgZg e$d%Zje$d&Zke$d'eleYZmefd(Znedd)Zoe(jpjqZqG d*d+ d+eXZWG d,d- d-e?jrZred.d/G d0d1 d1e?jsZted.d/G d2d3 d3e?juZved.d/G d4d5 d5e?jwZwG d6d7 d7e(j?jxZyeqd8Zzd9e{d8< dcd>d?Z|G d@dA dAe"em Z}G dBdC dCe}e?j~Z~G dDdE dEe~e?jZG dFdG dGe}e?jZG dHdI dIe}e?jZG dJdK dKe}eY e?jZG dLdM dMe}eY e?jZG dNdO dOe}el e?jZG dPdQ dQe}el e?jZG dRdS dSeOZNG dTdU dUeQZPG dVdW dWeUZTG dXdY dYeMZLeqdZZd9e{dZ< G d[d\ d\ZG d]d^ d^e?jZG d_d` d`e=ZG dadb dbe]ZeZdS )d    )annotationsN)AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableSequence)AbstractContextManager)	dataclass)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)IOTYPE_CHECKINGAnyGenericNoReturnTypeVarcastoverload)ErrorOutcomeValue)current_root_taskcurrent_tasknotify_closingwait_readablewait_writable)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsLockStatisticsRunFinishedError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)FileDescriptorLike)   
   )	ParamSpec)rG      )TypeVarTupleUnpack)BaseExceptionGroupTT_Retval
T_SockAddrPosArgsTPc                   @  s   e Zd Z	d(d)ddZd(d*ddZd+ddZd,ddZd(d-ddZed.ddZ	e	j
d/d dZ	ed0d!d"Zed0d#d$Zed0d%d&Zej
d1d'd&ZdS )2r?   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrV   __new__)clsrS   rU    r]   N/home/air/demo/back/venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyr[   v   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S Nr]   )trior?   _CancelScope__original)selfrS   rU   r]   r]   r^   __init__{   s   zCancelScope.__init__c                 C  s   | j   | S rY   )rb   	__enter__rc   r]   r]   r^   re   ~   s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Noneboolc                 C     | j |||S rY   )rb   __exit__rc   rg   ri   rk   r]   r]   r^   ro         zCancelScope.__exit__reason
str | Nonec                 C     | j | d S rY   )rb   cancel)rc   rr   r]   r]   r^   ru         zCancelScope.cancelfloatc                 C     | j jS rY   rb   deadlinerf   r]   r]   r^   rz         zCancelScope.deadlinevaluec                 C     || j _d S rY   ry   rc   r|   r]   r]   r^   rz         c                 C  rx   rY   )rb   cancel_calledrf   r]   r]   r^   r      r{   zCancelScope.cancel_calledc                 C  rx   rY   )rb   cancelled_caughtrf   r]   r]   r^   r      r{   zCancelScope.cancelled_caughtc                 C  rx   rY   rb   shieldrf   r]   r]   r^   r      r{   zCancelScope.shieldc                 C  r}   rY   r   r~   r]   r]   r^   r      r   rY   )rS   rT   rU   rV   rW   r?   )rS   rT   rU   r   rW   r_   )rW   r?   rg   rh   ri   rj   rk   rl   rW   rm   )rr   rs   rW   r_   rW   rw   r|   rw   rW   r_   rW   rm   )r|   rm   rW   r_   )__name__
__module____qualname__r[   rd   re   ro   ru   propertyrz   setterr   r   r   r]   r]   r]   r^   r?   u   s&    

r?   c                   @  sJ   e Zd ZdddZdddZd ddZddd!ddZddd"ddZdS )#	TaskGrouprW   r_   c                 C  s   d| _ tjdd| _d | _d S )NFT)strict_exception_groups)_activera   open_nursery_nursery_managercancel_scoperf   r]   r]   r^   rd      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr?   r   rf   r]   r]   r^   r      s
   zTaskGroup.__aenter__rg   rh   ri   rj   rk   rl   rm   c              
     sl   z.z| j |||I d H W W ~~d| _S  ty/ } z|tjd s*tj | d }~ww ~~d| _w )NF   )r   	__aexit__r   rM   splitra   	Cancelled_create)rc   rg   ri   rk   excr]   r]   r^   r      s   zTaskGroup.__aexit__N)namefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   rV   c                G  s,   | j std| jj|g|R d|i d S Nz;This task group is not active; no new tasks can be started.r   )r   RuntimeErrorr   
start_soonrc   r   r   r   r]   r]   r^   r      s
   zTaskGroup.start_soonCallable[..., Awaitable[Any]]r   c                  s0   | j std| jj|g|R d|iI d H S r   )r   r   r   startr   r]   r]   r^   r      s    zTaskGroup.startrW   r_   )rW   r   r   )r   r   r   r   r   rV   rW   r_   )r   r   r   rV   r   rV   rW   r   )r   r   r   rd   r   r   r   r   r]   r]   r]   r^   r      s    


r   F)eqc                   @  s,   e Zd ZU ded< dddd	ZdddZdS )ReceiveStreamWrapperztrio.abc.ReceiveStream_streamN	max_bytes
int | NonerW   bytesc              
     sl   z| j |I d H }W n! tjy } zt|jd }~w tjy- } zt|jd }~ww |r4t|S trY   )r   receive_somera   r0   	__cause__r.   r   r1   rc   r   datar   r]   r]   r^   receive   s   zReceiveStreamWrapper.receiver_   c                      | j  I d H  d S rY   r   acloserf   r]   r]   r^   r         zReceiveStreamWrapper.acloserY   )r   r   rW   r   r   )r   r   r   __annotations__r   r   r]   r]   r]   r^   r      s   
 r   c                   @  s*   e Zd ZU ded< dddZdd	d
ZdS )SendStreamWrapperztrio.abc.SendStreamr   itemr   rW   r_   c              
     s^   z| j |I d H  W d S  tjy } zt|jd }~w tjy. } zt|jd }~ww rY   )r   send_allra   r0   r   r.   rc   r   r   r]   r]   r^   send   s   zSendStreamWrapper.sendc                   r   rY   r   rf   r]   r]   r^   r     r   zSendStreamWrapper.acloseNr   r   rW   r_   r   )r   r   r   r   r   r   r]   r]   r]   r^   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Zd$ddZd#ddZd#ddZd%ddZe	d$ddZ
e	d&ddZe	d'ddZe	d(ddZe	d(d d!Zd"S ))Processztrio.Process_processabc.ByteSendStream | None_stdinabc.ByteReceiveStream | None_stdout_stderrrW   r_   c                   s   t dd) | jr| j I d H  | jr| j I d H  | jr(| j I d H  W d    n1 s2w   Y  z
|  I d H  W d S  tyi   |   t dd |  I d H  W d     1 scw   Y   w NT)r   )r?   r   r   r   r   waitBaseExceptionkillrf   r]   r]   r^   r     s*   
zProcess.acloseintc                      | j  I d H S rY   )r   r   rf   r]   r]   r^   r   #     zProcess.waitc                 C     | j   d S rY   )r   	terminaterf   r]   r]   r^   r   &     zProcess.terminatec                 C  r   rY   )r   r   rf   r]   r]   r^   r   )  r   zProcess.killsignalr   c                 C  rt   rY   )r   send_signal)rc   r   r]   r]   r^   r   ,  rv   zProcess.send_signalc                 C  rx   rY   )r   pidrf   r]   r]   r^   r   /  r{   zProcess.pidr   c                 C  rx   rY   )r   
returncoderf   r]   r]   r^   r   3  r{   zProcess.returncodec                 C     | j S rY   )r   rf   r]   r]   r^   stdin7     zProcess.stdinc                 C  r   rY   )r   rf   r]   r]   r^   stdout;  r   zProcess.stdoutc                 C  r   rY   )r   rf   r]   r]   r^   stderr?  r   zProcess.stderrNr   rW   r   )r   r   rW   r_   rW   r   )rW   r   )rW   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r]   r]   r^   r     s(   
 




r   c                      s   e Zd Zd fddZ  ZS )_ProcessPoolShutdownInstrumentrW   r_   c                   s   t    d S rY   )super	after_runrf   	__class__r]   r^   r   E  r   z(_ProcessPoolShutdownInstrument.after_runr   )r   r   r   r   __classcell__r]   r]   r   r^   r   D  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rW   r_   c                   s   zt tjI d H  W d S  t jyI   | D ]}|jd u r"|  qtdd | D ]	}| I d H  q+W d    Y d S 1 sAw   Y  Y d S w r   )	ra   sleepmathinfr   r   r   r?   r   )r   processr]   r]   r^   _shutdown_process_poolN  s   
&r   c                   @  sB   e Zd ZdddZdddZedd
dZdddZdddZdS )_TrioSocketMixintrio_socketTrioSocketTyperW   r_   c                 C  s   || _ d| _d S NF)_trio_socket_closedrc   r   r]   r]   r^   rd   a  s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r0   r   filenor.   rf   r]   r]   r^   _check_closede  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rx   rY   )r   _sockrf   r]   r]   r^   _raw_socketk  r{   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closerf   r]   r]   r^   r   o  s
   z_TrioSocketMixin.acloser   r   r   c                 C  s@   t |tjr	t|| j dk r| jrtd t |trt||r   )
isinstancera   r0   r   r   r   OSErrorr.   rc   r   r]   r]   r^   _convert_socket_errort  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rW   r_   r   )rW   r   )r   r   rW   r   )	r   r   r   rd   r   r   r   r   r   r]   r]   r]   r^   r   `  s    


r   c                      s>   e Zd Zd fddZddddZdddZdddZ  ZS )SocketStreamr   r   rW   r_   c                   $   t  | td| _td| _d S Nreading from
writing tor   rd   r:   _receive_guard_send_guardr   r   r]   r^   rd        
zSocketStream.__init__   r   r   r   c                   s~   | j 1 z| j|I d H }W n ty' } z| | W Y d }~nd }~ww |r3|W  d    S t1 s8w   Y  d S rY   )r   r   recvr   r   r1   r   r]   r]   r^   r     s   	zSocketStream.receiver   c                   s   | j B t|}|r>z| j|I d H }W n ty- } z| | W Y d }~nd }~ww ||d  }|sW d    d S W d    d S 1 sIw   Y  d S rY   )r  
memoryviewr   r   r   r   )rc   r   view
bytes_sentr   r]   r]   r^   r     s   "zSocketStream.sendc                   s   | j tj d S rY   )r   shutdownsocketSHUT_WRrf   r]   r]   r^   send_eof  s   zSocketStream.send_eofr   )r  )r   r   rW   r   r   r   )r   r   r   rd   r   r   r  r   r]   r]   r   r^   r     s
    
r   c                   @  s    e Zd ZdddZdddZdS )UNIXSocketStreammsglenr   maxfdsrW   tuple[bytes, list[int]]c                   sR  t |tr
|dk rtdt |tr|dk rtdtd}tj I d H  | j? 	 z| j	|t
||j I d H \}}}}W n tyZ } z| | W Y d }~nd }~ww |sa|satnq-W d    n1 smw   Y  |D ].\}	}
}|	t
jks|
t
jkrtd|d|	 d	|
 ||d t|t||j    qt|t|fS )
Nr   z%msglen must be a non-negative integerr   z!maxfds must be a positive integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarrayra   lowlevel
checkpointr   r   recvmsgr	  CMSG_LENitemsizer   r   r1   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rc   r  r  fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datar]   r]   r^   receive_fds  sD   
&zUNIXSocketStream.receive_fdsr  r   r  Collection[int | IOBase]r_   c                   s   |st d|st dg }|D ]}t|tr|| qt|tr*||  qtd|}tj	 I d H  | j
6 	 z| j|gtjtj|fgI d H  W n tyh } z| | W Y d }~nd }~ww q>W d    d S 1 suw   Y  d S )Nzmessage must not be emptyzfds must not be emptyr  )r  r   r   appendr   r   r  ra   r  r  r  r   sendmsgr	  r  r  r   r   )rc   r  r  filenosfdfdarrayr   r]   r]   r^   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rW   r  )r  r   r  r&  rW   r_   )r   r   r   r%  r,  r]   r]   r]   r^   r    s    
!r  c                      (   e Zd Zd	 fddZd
ddZ  ZS )TCPSocketListener
raw_socketr   c                   "   t  tj| td| _d S Nzaccepting connections fromr   rd   ra   r	  from_stdlib_socketr:   _accept_guardrc   r/  r   r]   r^   rd        zTCPSocketListener.__init__rW   r   c                   s   | j , z| j I d H \}}W n ty( } z| | W Y d }~nd }~ww W d    n1 s3w   Y  |tjtjd t	|S Nr   )
r4  r   acceptr   r   
setsockoptr	  IPPROTO_TCPTCP_NODELAYr   rc   r   _addrr   r]   r]   r^   r8    s   zTCPSocketListener.acceptr/  r   )rW   r   r   r   r   rd   r8  r   r]   r]   r   r^   r.        r.  c                      r-  )UNIXSocketListenerr/  r   c                   r0  r1  r2  r5  r   r]   r^   rd     r6  zUNIXSocketListener.__init__rW   r  c                   s   | j 9 z| j I d H \}}W n ty( } z| | W Y d }~nd }~ww W d    t|S W d    t|S 1 s@w   Y  t|S rY   )r4  r   r8  r   r   r  r<  r]   r]   r^   r8    s    

zUNIXSocketListener.acceptr>  )rW   r  r?  r]   r]   r   r^   rA    r@  rA  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rW   r_   c                   r   r   r   r   r   r]   r^   rd     r  zUDPSocket.__init__tuple[bytes, IPSockAddrType]c                   s   | j : z| jdI d H \}}|t|fW W  d    S  ty5 } z| | W Y d }~nd }~ww W d    d S 1 sAw   Y  d S Nr  )r   r   recvfromr2   r   r   rc   r   r!  r   r]   r]   r^   r     s   "zUDPSocket.receiver   rA   c                      | j 4 z| jj| I d H  W n ty' } z| | W Y d }~nd }~ww W d    d S W d    d S 1 s;w   Y  d S rY   r  r   sendtor   r   r   r]   r]   r^   r        "zUDPSocket.sendr   )rW   rC  )r   rA   rW   r_   r   r   r   rd   r   r   r   r]   r]   r   r^   rB        
rB  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rW   r_   c                   r   r   r   r   r   r]   r^   rd     r  zConnectedUDPSocket.__init__r   c                      | j 2 z| jdI d H W W  d    S  ty- } z| | W Y d }~nd }~ww W d    d S 1 s9w   Y  d S rD  r   r   r  r   r   r   r]   r]   r^   r        "zConnectedUDPSocket.receiver   c                      | j 4 z| j|I d H  W n ty' } z| | W Y d }~nd }~ww W d    d S W d    d S 1 s;w   Y  d S rY   r  r   r   r   r   r   r]   r]   r^   r   %  rJ  zConnectedUDPSocket.sendr   rW   r   r   rK  r]   r]   r   r^   rN    s    
rN  c                      rM  )UNIXDatagramSocketr   r   rW   r_   c                   r   r   r   r   r   r]   r^   rd   .  r  zUNIXDatagramSocket.__init__rB   c                   s   | j 8 z| jdI d H \}}||fW W  d    S  ty3 } z| | W Y d }~nd }~ww W d    d S 1 s?w   Y  d S rD  )r   r   rE  r   r   rF  r]   r]   r^   r   3  s   "zUNIXDatagramSocket.receiver   c                   rG  rY   rH  r   r]   r]   r^   r   ;  rJ  zUNIXDatagramSocket.sendr   )rW   rB   )r   rB   rW   r_   rK  r]   r]   r   r^   rU  -  rL  rU  c                      rM  )ConnectedUNIXDatagramSocketr   r   rW   r_   c                   r   r   r   r   r   r]   r^   rd   F  r  z$ConnectedUNIXDatagramSocket.__init__r   c                   rO  rD  rP  r   r]   r]   r^   r   K  rQ  z#ConnectedUNIXDatagramSocket.receiver   c                   rR  rY   rS  r   r]   r]   r^   r   R  rJ  z ConnectedUNIXDatagramSocket.sendr   rT  r   rK  r]   r]   r   r^   rV  C  s    
rV  c                   @  sH   e Zd ZdddZdddZddd	Zdd
dZdddZdddZdS )r7   rW   c                 C  rX   rY   rZ   r\   r]   r]   r^   r[   `     
zEvent.__new__r_   c                 C  s   t  | _d S rY   )ra   r7   _Event__originalrf   r]   r]   r^   rd   c  r   zEvent.__init__rm   c                 C  
   | j  S rY   )rY  is_setrf   r]   r]   r^   r[  f  rX  zEvent.is_setc                   r   rY   )rY  r   rf   r]   r]   r^   r   i  r   z
Event.waitr'   c                 C  s   | j  }t|jdS )N)tasks_waiting)rY  
statisticsr'   r\  rc   orig_statisticsr]   r]   r^   r]  l  s   
zEvent.statisticsc                 C  r   rY   )rY  setrf   r]   r]   r^   r`  p  r   z	Event.setN)rW   r7   r   r   )rW   r'   )	r   r   r   r[   rd   r[  r   r]  r`  r]   r]   r]   r^   r7   _  s    




r7   c                   @  sl   e Zd ZdddddZdddd	d
ZedddZdddZdddZdddZ	dddZ
d ddZdS )!r9   Ffast_acquirerb  rm   rW   c                C  rX   rY   rZ   r\   rb  r]   r]   r^   r[   u  rX  zLock.__new__r_   c                C  s   || _ t | _d S rY   )_fast_acquirera   r9   _Lock__original)rc   rb  r]   r]   r^   rd   x  s   zLock.__init__r   r   c                 C  s   | j dkr
d| _ d S d S )N)z*attempt to re-acquire an already held Lock)z)Attempted to acquire an already held Lock)r   )r   r]   r]   r^   _convert_runtime_error_msg|  s   

zLock._convert_runtime_error_msgc              
     s   | j s"z| j I d H  W d S  ty! } z| |  d }~ww tj I d H  z| j  W d S  tj	yF   | jj
 I d H  Y d S  tyW } z| |  d }~ww rY   )rd  re  acquirer   rf  ra   r  checkpoint_if_cancelledacquire_nowaitr+   _lotparkr   r]   r]   r^   rg    s(   

zLock.acquirec              
   C  sJ   z| j   W d S  tjy   td  ty$ } z| |  d }~ww rY   )re  ri  ra   r+   r   rf  r   r]   r]   r^   ri    s   
zLock.acquire_nowaitc                 C  rZ  rY   )re  lockedrf   r]   r]   r^   rl    rX  zLock.lockedc                 C  r   rY   )re  releaserf   r]   r]   r^   rm    r   zLock.releaser(   c                 C  s.   | j  }|jrt|jnd }t|j||jS rY   )re  r]  ownerTrioTaskInfor(   rl  r\  )rc   r_  rn  r]   r]   r^   r]    s
   

zLock.statisticsNrb  rm   rW   r9   )rb  rm   rW   r_   )r   r   rW   r_   r   r   )rW   r(   )r   r   r   r[   rd   staticmethodrf  rg  ri  rl  rm  r]  r]   r]   r]   r^   r9   t  s    


	
r9   c                      s|   e Zd ZddddddZdddd fddZdddZdddZed ddZed!ddZ	dddZ
d"ddZ  ZS )#r=   NF	max_valuerb  initial_valuer   rs  r   rb  rm   rW   c                C  rX   rY   rZ   r\   rt  rs  rb  r]   r]   r^   r[     s   
zSemaphore.__new__r_   c                  s&   t  j|||d tj||d| _d S )Nrr  )rs  )r   rd   ra   r=   _Semaphore__original)rc   rt  rs  rb  r   r]   r^   rd     s   zSemaphore.__init__c                   sf   | j s| j I d H  d S tj I d H  z| j  W d S  tjy2   | jj	 I d H  Y d S w rY   )
rd  rv  rg  ra   r  rh  ri  r+   rj  rk  rf   r]   r]   r^   rg    s   zSemaphore.acquirec                 C  s(   z| j   W d S  tjy   td w rY   )rv  ri  ra   r+   rf   r]   r]   r^   ri    s
   zSemaphore.acquire_nowaitc                 C  rx   rY   )rv  rs  rf   r]   r]   r^   rs    r{   zSemaphore.max_valuec                 C  rx   rY   )rv  r|   rf   r]   r]   r^   r|     r{   zSemaphore.valuec                 C  r   rY   )rv  rm  rf   r]   r]   r^   rm    r   zSemaphore.releaser;   c                 C  s   | j  }t|jS rY   )rv  r]  r;   r\  r^  r]   r]   r^   r]    s   

zSemaphore.statistics)rt  r   rs  r   rb  rm   rW   r=   )rt  r   rs  r   rb  rm   rW   r_   r   r   r   )rW   r;   )r   r   r   r[   rd   rg  ri  r   rs  r|   rm  r]  r   r]   r]   r   r^   r=     s    



r=   c                   @  s   e Zd Z	d2ddd3dd	Z	d2ddd4ddZd5ddZd6ddZed7ddZej	d8ddZed9ddZ
ed7dd Zd5d!d"Zd:d%d&Zd5d'd(Zd:d)d*Zd5d+d,Zd:d-d.Zd;d0d1ZdS )<r5   NrS   total_tokensfloat | NonerS   trio.CapacityLimiter | NonerW   c                C  rX   rY   rZ   )r\   rx  rS   r]   r]   r^   r[     s   
zCapacityLimiter.__new__r_   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S rY   )_CapacityLimiter__originalra   r5   )rc   rx  rS   r]   r]   r^   rd     s   
zCapacityLimiter.__init__c                   r   rY   )r{  r   rf   r]   r]   r^   r     r   zCapacityLimiter.__aenter__rg   rh   ri   rj   rk   rl   c                   s   | j |||I d H  d S rY   )r{  r   rp   r]   r]   r^   r     s   zCapacityLimiter.__aexit__rw   c                 C  rx   rY   r{  rx  rf   r]   r]   r^   rx    r{   zCapacityLimiter.total_tokensr|   c                 C  r}   rY   r|  r~   r]   r]   r^   rx    r   r   c                 C  rx   rY   )r{  borrowed_tokensrf   r]   r]   r^   r}  
  r{   zCapacityLimiter.borrowed_tokensc                 C  rx   rY   )r{  available_tokensrf   r]   r]   r^   r~    r{   z CapacityLimiter.available_tokensc                 C  r   rY   )r{  ri  rf   r]   r]   r^   ri    r   zCapacityLimiter.acquire_nowaitborrowerrV   c                 C  rt   rY   )r{  acquire_on_behalf_of_nowaitrc   r  r]   r]   r^   r    rv   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   rY   )r{  rg  rf   r]   r]   r^   rg    r   zCapacityLimiter.acquirec                   s   | j |I d H  d S rY   )r{  acquire_on_behalf_ofr  r]   r]   r^   r    s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  rZ  rY   )r{  rm  rf   r]   r]   r^   rm    rX  zCapacityLimiter.releasec                 C  s   | j |S rY   )r{  release_on_behalf_ofr  r]   r]   r^   r  !  s   z$CapacityLimiter.release_on_behalf_ofr&   c                 C  s&   | j  }t|j|jt|j|jdS )N)r}  rx  	borrowersr\  )r{  r]  r&   r}  rx  tupler  r\  )rc   origr]   r]   r^   r]  $  s   
zCapacityLimiter.statisticsrY   )rx  ry  rS   rz  rW   r5   )rx  ry  rS   rz  rW   r_   r   )rg   rh   ri   rj   rk   rl   rW   r_   r   r   r   )r  rV   rW   r_   )rW   r&   )r   r   r   r[   rd   r   r   r   rx  r   r}  r~  ri  r  rg  r  rm  r  r]  r]   r]   r]   r^   r5     s4    








r5   _capacity_limiter_wrapperc                   @  sH   e Zd ZU ded< dddZddd	ZdddZdddZdddZdS )_SignalReceiverzAsyncIterator[int]	_iteratorsignalstuple[Signals, ...]c                 C  s
   || _ d S rY   )_signals)rc   r  r]   r]   r^   rd   9  rX  z_SignalReceiver.__init__rW   c                 C  s   t j| j | _| j | _| S rY   )ra   open_signal_receiverr  _cmre   r  rf   r]   r]   r^   re   <  s   z_SignalReceiver.__enter__rg   rh   ri   rj   rk   rl   bool | Nonec                 C  rn   rY   )r  ro   rp   r]   r]   r^   ro   A  rq   z_SignalReceiver.__exit__c                 C  s   | S rY   r]   rf   r]   r]   r^   	__aiter__I  s   z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S rY   )r  	__anext__r   )rc   signumr]   r]   r^   r  L  s   z_SignalReceiver.__anext__N)r  r  )rW   r  )rg   rh   ri   rj   rk   rl   rW   r  )rW   r   )	r   r   r   r   rd   re   ro   r  r  r]   r]   r]   r^   r  6  s   
 



r  c                   @  s\   e Zd Zd,ddZd-ddZd.ddZd/ddZd0ddZd1d"d#Zd2d%d&Z	d3d)d*Z
d+S )4
TestRunneroptionsr   rW   r_   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)rc   r  r  r]   r]   r^   rd   W  s   
zTestRunner.__init__rg   rh   ri   rj   rk   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S rY   )r  r   r  getrp   r]   r]   r^   ro   ^  s   

zTestRunner.__exit__c                   s   t d\| _}|= |2 z03 d H W \}}z|I d H }W n ty5 } z|t| W Y d }~qd }~ww |t| q6 W d    d S 1 sJw   Y  d S r7  )r3   r  r   r'  r   r   )rc   receive_streamcorooutcome_holderretvalr   r]   r]   r^   _run_tests_and_fixturesi  s   "z"TestRunner._run_tests_and_fixturesoutcomerV   c                 C  s
   d | _ d S rY   )r  )rc   r  r]   r]   r^   _main_task_finishedt  rX  zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrU   P.kwargsrO   c                 O  s   | j d u r'tjj| jf| jj| jd| j | j d u r'| j	   | j d u sg }| j 
||i ||f |s@| j	   |r8|d  S )N)run_sync_soon_threadsafedone_callbackr   )r  ra   r  start_guest_runr  r  putr  r  r  send_nowaitunwrap)rc   r   r   rU   r  r]   r]   r^   _call_in_runner_taskw  s$   


zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]dict[str, Any]Iterable[T_Retval]c                 c  s`    |di |}|  |jd }|V  z	|  |jd  W n
 ty%   Y d S w |  |j td)Nz$Async generator fixture did not stopr]   )r  asendStopAsyncIterationr   r   )rc   r  rU   asyncgenfixturevaluer]   r]   r^   run_asyncgen_fixture  s   zTestRunner.run_asyncgen_fixture,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |fi |S rY   r  )rc   r  rU   r]   r]   r^   run_fixture  s   zTestRunner.run_fixture	test_func'Callable[..., Coroutine[Any, Any, Any]]c                 C  s   | j |fi | d S rY   r  )rc   r  rU   r]   r]   r^   run_test  s   zTestRunner.run_testN)r  r   rW   r_   )rg   rh   ri   rj   rk   r  rW   r_   r   )r  rV   rW   r_   )r   r  r   r  rU   r  rW   rO   )r  r  rU   r  rW   r  )r  r  rU   r  rW   rO   )r  r  rU   r  rW   r_   )r   r   r   rd   ro   r  r  r  r  r  r  r]   r]   r]   r^   r  V  s    






r  c                      r-  )ro  tasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rY   )
parent_nurseryparent_taskidr   rd   r   r  weakrefproxy_task)rc   r  	parent_idr   r]   r^   rd     s
   zTrioTaskInfo.__init__rW   rm   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  _cancel_statuseffectively_cancelledReferenceErrorrf   r]   r]   r^   has_pending_cancellation  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r   )r   r   r   rd   r  r   r]   r]   r   r^   ro    s    ro  c                   @  s  e Zd Zedd
dZedddZedddZedddZedddZedddZ	edddZ
edddZeejdd dd%d&Zedd'd(Zedd*d+Zedd-d.Zedd1d2Zed3dd4dd:d;Zedd>d?Ze		3dddDdEZeddFdGZeddIdJZeddKdLZeddUdVZeddYdZZe	3dddadbZeddfdgZeddkdlZeddmdnZeddtduZee ddydzZ!ee dd|dzZ!edddzZ!eddddddddZ"e	ddddZ#edddZ$edddZ%edddZ&edddZ'edddZ(edddZ)edddZ*edddZ+edddZ,edddZ-edddZ.edddZ/edddZ0edddZ1edddZ2edddZ3d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   tuple[Unpack[PosArgsT]]rU   r  r  rW   rO   c                 C  s   t j|g|R  S rY   )ra   run)r\   r   r   rU   r  r]   r]   r^   r    s   zTrioBackend.runrV   c                 C  s
   t j S rY   )ra   r  current_trio_tokenrW  r]   r]   r^   current_token     
zTrioBackend.current_tokenrw   c                 C     t  S rY   )ra   current_timerW  r]   r]   r^   r    r{   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS rY   )ra   r   rW  r]   r]   r^   cancelled_exception_class  r   z%TrioBackend.cancelled_exception_classr_   c                      t j I d H  d S rY   )ra   r  r  rW  r]   r]   r^   r       zTrioBackend.checkpointc                   r  rY   )ra   r  rh  rW  r]   r]   r^   rh    r  z#TrioBackend.checkpoint_if_cancelledc                   r  rY   )ra   r  cancel_shielded_checkpointrW  r]   r]   r^   r    r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rY   )ra   r   )r\   r  r]   r]   r^   r     r  zTrioBackend.sleepFrz   r   rz   r   rm   abc.CancelScopec                C  s   t ||dS )Nr  r>   )r\   rz   r   r]   r]   r^   create_cancel_scope  s   zTrioBackend.create_cancel_scopec                 C  r  rY   )ra   current_effective_deadlinerW  r]   r]   r^   r    r{   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S rY   )r   rW  r]   r]   r^   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  rY   r6   rW  r]   r]   r^   create_event  r   zTrioBackend.create_eventrb  r9   c                C  s
   t |dS )Nra  r8   rc  r]   r]   r^   create_lock  r  zTrioBackend.create_lockNrr  rt  r   rs  r   abc.Semaphorec                C  s   t |||dS )Nrr  r<   ru  r]   r]   r^   create_semaphore  s   zTrioBackend.create_semaphorerx  r5   c                 C     t |S rY   r4   )r\   rx  r]   r]   r^   create_capacity_limiter  r{   z#TrioBackend.create_capacity_limiter&Callable[[Unpack[PosArgsT]], T_Retval]abandon_on_cancellimiterabc.CapacityLimiter | Nonec                   s8   d fdd}t  t||ttj|dI d H S )NrW   rO   c                     s6   t t   W  d    S 1 sw   Y  d S rY   )r-   r  r]   r   r   tokenr]   r^   wrapper  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rW   rO   )r  r  r$   r   ra   r5   )r\   r   r   r  r  r  r]   r  r^   run_sync_in_worker_thread
  s   
z%TrioBackend.run_sync_in_worker_threadc                 C  s   t j  d S rY   )ra   from_threadcheck_cancelledrW  r]   r]   r^   r       zTrioBackend.check_cancelledr  c                 C  >   t d|}ztjj|g|R d|iW S  tjy   td w Nztrio.lowlevel.TrioToken | None
trio_token)r   ra   r  r  r)   r\   r   r   r  r  r]   r]   r^   run_async_from_thread!     
z!TrioBackend.run_async_from_threadc                 C  r  r  )r   ra   r  r$   r)   r  r]   r]   r^   run_sync_from_thread.  r  z TrioBackend.run_sync_from_threadcommand)StrOrBytesPath | Sequence[StrOrBytesPath]r   int | IO[Any] | Noner   r   r   r   c          
        s   ddd t |tttfr#tjj |f|||dd|I d H }ntjj fd	d
|D f|||dd|I d H }|jrDt|jnd }|j	rNt
|j	nd }|jrXt
|jnd }	t||||	S )Nr   rD   rW   strc                 S  s"   t | }t|tr|S t |S rY   )osfspathr   r  fsdecode)r   str_or_bytesr]   r]   r^   convert_itemE  s   


z.TrioBackend.open_process.<locals>.convert_itemT)r   r   r   shellc                   s   g | ]} |qS r]   r]   ).0r   r   r]   r^   
<listcomp>W  s    z,TrioBackend.open_process.<locals>.<listcomp>F)r   rD   rW   r  )r   r  r   r   ra   r  open_processr   r   r   r   r   r   )
r\   r  r   r   r   rU   r   stdin_streamstdout_streamstderr_streamr]   r  r^   r  ;  s6   

		zTrioBackend.open_processr   r   c                 C  s   t jt| d S rY   )ra   r  spawn_system_taskr   )r\   r   r]   r]   r^   #setup_process_pool_exit_at_shutdownd  s   z/TrioBackend.setup_process_pool_exit_at_shutdownhostr  portlocal_addressIPSockAddrType | Noner   c                   s   d|v rt jnt j}tj  |}|t jt jd |r$||I d H  z|||fI d H  W t|S  t	y?   |
   w )N:r   )r	  AF_INET6AF_INETra   r9  r:  r;  bindconnectr   r   r   )r\   r  r  r  familyr   r]   r]   r^   connect_tcph  s   zTrioBackend.connect_tcppathstr | bytesabc.UNIXSocketStreamc                   sD   t jtj}z||I d H  W t|S  ty!   |   w rY   )ra   r	  AF_UNIXr  r   r   r  )r\   r  r   r]   r]   r^   connect_unixz  s   zTrioBackend.connect_unixsockr   abc.SocketListenerc                 C  r  rY   r.  r\   r  r]   r]   r^   create_tcp_listener  r{   zTrioBackend.create_tcp_listenerc                 C  r  rY   )rA  r  r]   r]   r^   create_unix_listener  r{   z TrioBackend.create_unix_listenerr  socket.AddressFamilyremote_address
reuse_portUDPSocket | ConnectedUDPSocketc                   sb   t jj|tjd}|r|tjtjd |r||I d H  |r-||I d H  t|S t	|S )N)r  typer   )
ra   r	  
SOCK_DGRAMr9  r  SO_REUSEPORTr  r  rN  rB  )r\   r  r  r"  r#  r   r]   r]   r^   create_udp_socket  s   zTrioBackend.create_udp_socketr/  remote_pathabc.UNIXDatagramSocketc                      d S rY   r]   r\   r/  r)  r]   r]   r^   create_unix_datagram_socket     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r+  rY   r]   r,  r]   r]   r^   r-    r.  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S rY   )ra   r	  r3  r  rV  rU  )r\   r/  r)  r   r]   r]   r^   r-    s   r   )r  r%  protor   bytes | str | Nonestr | int | Noneint | AddressFamilyr%  int | SocketKindr2  r   uSequence[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]c                  s   t j||||||I d H S rY   )ra   r	  getaddrinfo)r\   r  r  r  r%  r2  r   r]   r]   r^   r8    s   zTrioBackend.getaddrinfosockaddrr@   tuple[str, str]c                   s   t j||I d H S rY   )ra   r	  getnameinfo)r\   r9  r   r]   r]   r^   r;    s   zTrioBackend.getnameinfoobjrF   c              
     Z   z
t |I d H  W d S  tjy  } zt |jd d }~w tjy,   tdd w )Nr   )r!   ra   r0   with_traceback__traceback__r/   r\   r<  r   r]   r]   r^   r!        
zTrioBackend.wait_readablec              
     r=  )Nr   )r"   ra   r0   r>  r?  r/   r@  r]   r]   r^   r"     rA  zTrioBackend.wait_writablec                 C  s   t | d S rY   )r    )r\   r<  r]   r]   r^   r      r   zTrioBackend.notify_closingc                   s
   t |S rY   r  r  r]   r]   r^   wrap_listener_socket  s   z TrioBackend.wrap_listener_socketc                      t j|}t|S rY   )ra   r	  r3  r   r\   r  	trio_sockr]   r]   r^   wrap_stream_socket     zTrioBackend.wrap_stream_socketr  c                   rC  rY   )ra   r	  r3  r  rD  r]   r]   r^   wrap_unix_stream_socket  rG  z#TrioBackend.wrap_unix_stream_socketrB  c                   rC  rY   )ra   r	  r3  rB  rD  r]   r]   r^   wrap_udp_socket  rG  zTrioBackend.wrap_udp_socketrN  c                   rC  rY   )ra   r	  r3  rN  rD  r]   r]   r^   wrap_connected_udp_socket  rG  z%TrioBackend.wrap_connected_udp_socketrU  c                   rC  rY   )ra   r	  r3  rU  rD  r]   r]   r^   wrap_unix_datagram_socket  rG  z%TrioBackend.wrap_unix_datagram_socketrV  c                   rC  rY   )ra   r	  r3  rV  rD  r]   r]   r^   #wrap_connected_unix_datagram_socket	  s   z/TrioBackend.wrap_connected_unix_datagram_socketc                 C  s<   zt  W S  ty   ttj d}t | | Y S w )Nrw  )r  r  LookupErrorr5   ra   	to_threadcurrent_default_thread_limiterr`  )r\   r  r]   r]   r^   rO    s   

z*TrioBackend.current_default_thread_limiterr  r   .AbstractContextManager[AsyncIterator[Signals]]c                 G  r  rY   )r  )r\   r  r]   r]   r^   r    s   z TrioBackend.open_signal_receiverr*   c                 C  s   t  }t|S rY   )r   ro  )r\   r  r]   r]   r^   get_current_task!  s   zTrioBackend.get_current_taskSequence[TaskInfo]c                 C  sb   t  }|sJ t|g}|j}|r/g }|D ]}|jD ]}|t| ||j qq|}|s|S rY   )r   ro  child_nurserieschild_tasksr'  extend)r\   	root_task
task_infos	nurseriesnew_nurseriesnurseryr  r]   r]   r^   get_running_tasks&  s   

	zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)trio.testingr\  )r\   r\  r]   r]   r^   r\  7  s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S r`   )r  )r\   r  r]   r]   r^   create_test_runner=  r  zTrioBackend.create_test_runner)
r   r  r   r  rU   r  r  r  rW   rO   )rW   rV   r   )rW   r  r   )r  rw   rW   r_   )rz   rw   r   rm   rW   r  )rW   r  )rW   r  rp  )rt  r   rs  r   rb  rm   rW   r  )rx  rw   rW   r5   )FN)
r   r  r   r  r  rm   r  r  rW   rO   )r   r  r   r  r  rV   rW   rO   )r   r  r   r  r  rV   rW   rO   )r  r  r   r  r   r  r   r  rU   r   rW   r   r   r   rW   r_   rY   )r  r  r  r   r  r  rW   r   )r  r  rW   r  )r  r   rW   r  )
r  r!  r  r  r"  r  r#  rm   rW   r$  )r/  r   r)  r_   rW   r*  )r/  r   r)  r  rW   r/  )r/  r   r)  r0  rW   r1  )r  r3  r  r4  r  r5  r%  r6  r2  r   r   r   rW   r7  )r   )r9  r@   r   r   rW   r:  )r<  rF   rW   r_   )r  r   rW   r   )r  r   rW   r  )r  r   rW   rB  )r  r   rW   rN  )r  r   rW   rU  )r  r   rW   rV  )rW   r5   )r  r   rW   rP  )rW   r*   )rW   rR  )r  r  rW   r  )4r   r   r   classmethodr  r  r  r  r  rh  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r   r(  r   r-  r8  r;  r!   r"   r    rB  rF  rH  rI  rJ  rK  rL  rO  r  rQ  r[  r\  r^  r]   r]   r]   r^   r    s    		(

r  r_  )
__future__r   r  r   r  r	  systypesr  collections.abcr   r   r   r   r   r   r	   r
   
contextlibr   dataclassesr   ior   r   r   r   r   r   r   typingr   r   r   r   r   r   r   r   trio.from_threadra   trio.lowlevelr  r   r   r   r   r   r    r!   r"   trio.socketr#   r   trio.to_threadr$    r&   r'   r(   r)   r*   r+   r,   _core._eventloopr-   _core._exceptionsr.   r/   r0   r1   _core._socketsr2   _core._streamsr3   _core._synchronizationr5   BaseCapacityLimiterr7   	BaseEventr9   BaseLockr:   r;   r=   BaseSemaphore_core._tasksr?   BaseCancelScoper@   rA   rB   abc._eventlooprC   rD   streams.memoryrE   	_typeshedrF   version_inforI   typing_extensionsrK   rL   exceptiongrouprM   rN   rO   r  rP   rQ   rR   r  RunVarr   ByteReceiveStreamr   ByteSendStreamr   r   
Instrumentr   r   r   r   r   r   r  SocketListenerr.  rA  rB  rN  rU  rV  r  r  r  ro  r  backend_classr]   r]   r]   r^   <module>   s    (
($	6;8
!C

86L W   