o
    ?Hhf                     @  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 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) d dl*Z+d dl,Z+d dl-m.Z.m/Z/m0Z0 d dl,m1Z1m2Z2m3Z3m4Z4 d dl5m6Z7 d dl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZN ddlLmOZP ddlLmQZR ddlLmSZSmTZT ddlLmUZV ddlWmXZY ddl@mZZZm[Z[m\Z\ ddl]m^Z^m_Z_ dd l`maZa ejbd!kr$d d"l"mcZc nd d"ldmcZc ejbd#kr9d d$l"meZemfZf nd d%lgmhZh d d$ldmeZemfZf e'd&Zie'd'Zje'd(ekeZZleed)Zmecd*Zne+jojpZpG d+d, d,eYZXG d-d. d.e@jqZqG d/d0 d0e@jrZred1d2G d3d4 d4e@jsZted1d2G d5d6 d6e@juZved1d2G d7d8 d8e@jwZwG d9d: d:e+j@jxZyepd;Zzd<e{d;< dfdAdBZ|G dCdD dDe%el Z}G dEdF dFe}e@j~Z~G dGdH dHe~e@jZG dIdJ dJe}e@jZG dKdL dLe}e@jZG dMdN dNe}eZ e@jZG dOdP dPe}eZ e@jZG dQdR dRe}ek e@jZG dSdT dTe}ek e@jZG dUdV dVePZOG dWdX dXeRZQG dYdZ dZeVZUG d[d\ d\eNZMepd]Zd<e{d]< G d^d_ d_ZG d`da dae@jZG dbdc dce>ZG ddde dee^ZeZdS )g    )annotationsN)AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableSequence)Future)AbstractContextManager)	dataclass)partial)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)IOAnyGenericNoReturn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Zd'd)ddZd*ddZd+ddZd,ddZed-ddZ	e	j
d.ddZ	ed/d d!Zed/d"d#Zed/d$d%Zej
d0d&d%ZdS )1r>   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrT   __new__)clsrQ   rS    r[   U/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyrY   r   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S Nr[   )trior>   _CancelScope__original)selfrQ   rS   r[   r[   r\   __init__w   s   zCancelScope.__init__c                 C  s   | j   | S rW   )r`   	__enter__ra   r[   r[   r\   rc   z   s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonebool | Nonec                 C     | j |||S rW   )r`   __exit__ra   re   rg   ri   r[   r[   r\   rm   ~   s   zCancelScope.__exit__c                 C     | j   d S rW   )r`   cancelrd   r[   r[   r\   rp         zCancelScope.cancelfloatc                 C     | j jS rW   r`   deadlinerd   r[   r[   r\   ru         zCancelScope.deadlinevaluec                 C     || j _d S rW   rt   ra   rw   r[   r[   r\   ru         boolc                 C  rs   rW   )r`   cancel_calledrd   r[   r[   r\   r|      rv   zCancelScope.cancel_calledc                 C  rs   rW   )r`   cancelled_caughtrd   r[   r[   r\   r}      rv   zCancelScope.cancelled_caughtc                 C  rs   rW   r`   shieldrd   r[   r[   r\   r      rv   zCancelScope.shieldc                 C  rx   rW   r~   ry   r[   r[   r\   r      rz   rW   )rQ   rR   rS   rT   rU   r>   )rQ   rR   rS   r   rU   r]   )rU   r>   re   rf   rg   rh   ri   rj   rU   rk   rU   r]   rU   rr   rw   rr   rU   r]   rU   r{   )rw   r{   rU   r]   )__name__
__module____qualname__rY   rb   rc   rm   rp   propertyru   setterr|   r}   r   r[   r[   r[   r\   r>   q   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 )#	TaskGrouprU   r]   c                 C  s   d| _ tjdd| _d | _d S )NFT)strict_exception_groups)_activer_   open_nursery_nursery_managercancel_scoperd   r[   r[   r\   rb      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr>   r   rd   r[   r[   r\   r      s
   zTaskGroup.__aenter__re   rf   rg   rh   ri   rj   rk   c              
     sl   z0z| j |||I d H W W d| _S  ty1 } z|tj\}}|s,tj }|| d }~ww d| _w NF)r   	__aexit__r   rK   splitr_   	Cancelled_create)ra   re   rg   ri   exc_restcancelled_excr[   r[   r\   r      s   	
zTaskGroup.__aexit__Nnamefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   rT   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ra   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.startr   )rU   r   r   )r   r   r   r   r   rT   rU   r]   )r   r   r   rT   r   rT   rU   r   )r   r   r   rb   r   r   r   r   r[   r[   r[   r\   r      s    


r   c                      s2   e Zd ZdddZd fddZdddZ  ZS )BlockingPortalrU   c                 C  rV   rW   rX   rZ   r[   r[   r\   rY         
zBlockingPortal.__new__r]   c                   s   t    tj | _d S rW   )superrb   r_   lowlevelcurrent_trio_token_tokenrd   	__class__r[   r\   rb      s   
zBlockingPortal.__init__r   <Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r   tuple[Unpack[PosArgsT]]rS   dict[str, Any]r   rT   futureFuture[T_Retval]c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )
trio_token)r_   from_threadr$   r   _task_groupr   
_call_funcr   )ra   r   r   rS   r   r   r[   r[   r\   _spawn_task_from_thread   s   
z&BlockingPortal._spawn_task_from_thread)rU   r   r   )r   r   r   r   rS   r   r   rT   r   r   rU   r]   )r   r   r   rY   rb   r   __classcell__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 | NonerU   bytesc              
     sh   z| j |I d H }W n! tjy } zt|jd }~w tjy- } zt|jd }~ww |r2|S trW   )r   receive_somer_   r/   	__cause__r-   r0   ra   r   datar   r[   r[   r\   receive  s   zReceiveStreamWrapper.receiver]   c                      | j  I d H  d S rW   r   acloserd   r[   r[   r\   r        zReceiveStreamWrapper.acloserW   )r   r   rU   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   rU   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 rW   )r   send_allr_   r/   r   r-   ra   r   r   r[   r[   r\   send  s   zSendStreamWrapper.sendc                   r   rW   r   rd   r[   r[   r\   r   $  r   zSendStreamWrapper.acloseNr   r   rU   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_stderrrU   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killrd   r[   r[   r\   r   /  s*   
zProcess.acloseintc                      | j  I d H S rW   )r   r   rd   r[   r[   r\   r   @     zProcess.waitc                 C  ro   rW   )r   	terminaterd   r[   r[   r\   r   C  rq   zProcess.terminatec                 C  ro   rW   )r   r   rd   r[   r[   r\   r   F  rq   zProcess.killsignalr   c                 C     | j | d S rW   )r   send_signal)ra   r   r[   r[   r\   r   I     zProcess.send_signalc                 C  rs   rW   )r   pidrd   r[   r[   r\   r   L  rv   zProcess.pidr   c                 C  rs   rW   )r   
returncoderd   r[   r[   r\   r   P  rv   zProcess.returncodec                 C     | j S rW   )r   rd   r[   r[   r\   stdinT     zProcess.stdinc                 C  r   rW   )r   rd   r[   r[   r\   stdoutX  r   zProcess.stdoutc                 C  r   rW   )r   rd   r[   r[   r\   stderr\  r   zProcess.stderrNr   rU   r   )r   r   rU   r]   rU   r   )rU   r   )rU   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 )_ProcessPoolShutdownInstrumentrU   r]   c                   s   t    d S rW   )r   	after_runrd   r   r[   r\   r   b  rq   z(_ProcessPoolShutdownInstrument.after_runr   )r   r   r   r   r   r[   r[   r   r\   r   a  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rU   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   )	r_   sleepmathinfr   r   r   r>   r   )r   processr[   r[   r\   _shutdown_process_poolk  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TrioSocketTyperU   r]   c                 C  s   || _ d| _d S r   )_trio_socket_closedra   r   r[   r[   r\   rb   ~  s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r/   r   filenor-   rd   r[   r[   r\   _check_closed  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rs   rW   )r   _sockrd   r[   r[   r\   _raw_socket  rv   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closerd   r[   r[   r\   r     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   )
isinstancer_   r/   r   r   r   OSErrorr-   ra   r   r[   r[   r\   _convert_socket_error  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rU   r]   r   )rU   r   )r   r   rU   r   )	r   r   r   rb   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   rU   r]   c                   $   t  | td| _td| _d S Nreading from
writing tor   rb   r9   _receive_guard_send_guardr   r   r[   r\   rb        
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 rW   )r  r   recvr   r  r0   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 rW   )r  
memoryviewr   r   r   r  )ra   r   view
bytes_sentr   r[   r[   r\   r     s   "zSocketStream.sendc                   s   | j tj d S rW   )r   shutdownsocketSHUT_WRrd   r[   r[   r\   send_eof  s   zSocketStream.send_eofr  )r  )r   r   rU   r   r   r   )r   r   r   rb   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   maxfdsrU   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 integer   z!maxfds must be a positive integeriTz.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   	frombyteslenlist)ra   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"  r_   r   r#  r  r   sendmsgr  r'  r(  r   r  )ra   r-  r,  filenosfdfdarrayr   r[   r[   r\   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rU   r  )r-  r   r,  r5  rU   r]   )r   r   r   r4  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   rb   r_   r  from_stdlib_socketr9   _accept_guardra   r>  r   r[   r\   rb        zTCPSocketListener.__init__rU   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  )
rC  r   acceptr   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYr	  ra   r   _addrr   r[   r[   r\   rG    s   zTCPSocketListener.acceptr>  r   )rU   r	  r   r   r   rb   rG  r   r[   r[   r   r\   r=         r=  c                      r<  )UNIXSocketListenerr>  r   c                   r?  r@  rA  rD  r   r[   r\   rb     rE  zUNIXSocketListener.__init__rU   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 rW   )rC  r   rG  r   r  r  rK  r[   r[   r\   rG    s    

zUNIXSocketListener.acceptrM  )rU   r  rN  r[   r[   r   r\   rP    rO  rP  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rU   r]   c                   r
  r  r  r   r   r[   r\   rb      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   recvfromr1   r   r  ra   r   r0  r   r[   r[   r\   r   %  s   "zUDPSocket.receiver   r@   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 rW   r  r   sendtor   r  r   r[   r[   r\   r   -     "zUDPSocket.sendr  )rU   rR  )r   r@   rU   r]   r   r   r   rb   r   r   r   r[   r[   r   r\   rQ        
rQ  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rU   r]   c                   r
  r  r  r   r   r[   r\   rb   6  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 rS  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 rW   r  r   r   r   r  r   r[   r[   r\   r   B  rY  zConnectedUDPSocket.sendr  rU   r   r   rZ  r[   r[   r   r\   r]  5  s    
r]  c                      r\  )UNIXDatagramSocketr   r   rU   r]   c                   r
  r  r  r   r   r[   r\   rb   K  r  zUNIXDatagramSocket.__init__rA   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 rS  )r  r   rT  r   r  rU  r[   r[   r\   r   P  s   "zUNIXDatagramSocket.receiver   c                   rV  rW   rW  r   r[   r[   r\   r   X  rY  zUNIXDatagramSocket.sendr  )rU   rA   )r   rA   rU   r]   rZ  r[   r[   r   r\   rd  J  r[  rd  c                      r\  )ConnectedUNIXDatagramSocketr   r   rU   r]   c                   r
  r  r  r   r   r[   r\   rb   c  r  z$ConnectedUNIXDatagramSocket.__init__r   c                   r^  rS  r_  r  r[   r[   r\   r   h  r`  z#ConnectedUNIXDatagramSocket.receiver   c                   ra  rW   rb  r   r[   r[   r\   r   o  rY  z ConnectedUNIXDatagramSocket.sendr  rc  r   rZ  r[   r[   r   r\   re  `  s    
re  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 )r6   rU   c                 C  rV   rW   rX   r   r[   r[   r\   rY   }  r   zEvent.__new__r]   c                 C  s   t  | _d S rW   )r_   r6   _Event__originalrd   r[   r[   r\   rb     rq   zEvent.__init__r{   c                 C  
   | j  S rW   )rf  is_setrd   r[   r[   r\   rh    r   zEvent.is_setc                   r   rW   )rf  r   rd   r[   r[   r\   r     r   z
Event.waitr'   c                 C  s   | j  }t|jdS )N)tasks_waiting)rf  
statisticsr'   ri  ra   orig_statisticsr[   r[   r\   rj    s   
zEvent.statisticsc                 C  ro   rW   )rf  setrd   r[   r[   r\   rm    rq   z	Event.setN)rU   r6   r   r   )rU   r'   )	r   r   r   rY   rb   rh  r   rj  rm  r[   r[   r[   r\   r6   |  s    




r6   c                   @  s^   e Zd ZdddddZdd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 )r8   Ffast_acquirero  r{   rU   c                C  rV   rW   rX   rZ   ro  r[   r[   r\   rY     r   zLock.__new__r]   c                C  s   || _ t | _d S rW   )_fast_acquirer_   r8   _Lock__original)ra   ro  r[   r[   r\   rb     s   zLock.__init__c                   f   | 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 rW   )
rq  rr  acquirer_   r   checkpoint_if_cancelledacquire_nowaitr*   _lotparkrd   r[   r[   r\   rt       zLock.acquirec                 C  (   z| j   W d S  tjy   td w rW   )rr  rv  r_   r*   rd   r[   r[   r\   rv    
   zLock.acquire_nowaitc                 C  rg  rW   )rr  lockedrd   r[   r[   r\   r|    r   zLock.lockedc                 C  ro   rW   )rr  releaserd   r[   r[   r\   r}    rq   zLock.releaser(   c                 C  s.   | j  }|jrt|jnd }t|j||jS rW   )rr  rj  ownerTrioTaskInfor(   r|  ri  )ra   rl  r~  r[   r[   r\   rj    s
   

zLock.statisticsNro  r{   rU   r8   )ro  r{   rU   r]   r   r   )rU   r(   )
r   r   r   rY   rb   rt  rv  r|  r}  rj  r[   r[   r[   r\   r8     s    



r8   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_valuero  initial_valuer   r  r   ro  r{   rU   c                C  rV   rW   rX   rZ   r  r  ro  r[   r[   r\   rY     s   
zSemaphore.__new__r]   c                  s&   t  j|||d tj||d| _d S )Nr  )r  )r   rb   r_   r<   _Semaphore__original)ra   r  r  ro  r   r[   r\   rb     s   zSemaphore.__init__c                   rs  rW   )
rq  r  rt  r_   r   ru  rv  r*   rw  rx  rd   r[   r[   r\   rt    ry  zSemaphore.acquirec                 C  rz  rW   )r  rv  r_   r*   rd   r[   r[   r\   rv    r{  zSemaphore.acquire_nowaitc                 C  rs   rW   )r  r  rd   r[   r[   r\   r    rv   zSemaphore.max_valuec                 C  rs   rW   )r  rw   rd   r[   r[   r\   rw     rv   zSemaphore.valuec                 C  ro   rW   )r  r}  rd   r[   r[   r\   r}    rq   zSemaphore.releaser:   c                 C  s   | j  }t|jS rW   )r  rj  r:   ri  rk  r[   r[   r\   rj    s   

zSemaphore.statistics)r  r   r  r   ro  r{   rU   r<   )r  r   r  r   ro  r{   rU   r]   r   r   r   )rU   r:   )r   r   r   rY   rb   rt  rv  r   r  rw   r}  rj  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 )<r4   NrQ   total_tokensfloat | NonerQ   trio.CapacityLimiter | NonerU   c                C  rV   rW   rX   )rZ   r  rQ   r[   r[   r\   rY     s   
zCapacityLimiter.__new__r]   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S rW   )_CapacityLimiter__originalr_   r4   )ra   r  rQ   r[   r[   r\   rb     s   
zCapacityLimiter.__init__c                   r   rW   )r  r   rd   r[   r[   r\   r     r   zCapacityLimiter.__aenter__re   rf   rg   rh   ri   rj   c                   s   | j |||I d H  d S rW   )r  r   rn   r[   r[   r\   r     s   zCapacityLimiter.__aexit__rr   c                 C  rs   rW   r  r  rd   r[   r[   r\   r    rv   zCapacityLimiter.total_tokensrw   c                 C  rx   rW   r  ry   r[   r[   r\   r    rz   r   c                 C  rs   rW   )r  borrowed_tokensrd   r[   r[   r\   r    rv   zCapacityLimiter.borrowed_tokensc                 C  rs   rW   )r  available_tokensrd   r[   r[   r\   r    rv   z CapacityLimiter.available_tokensc                 C  ro   rW   )r  rv  rd   r[   r[   r\   rv    rq   zCapacityLimiter.acquire_nowaitborrowerrT   c                 C  r   rW   )r  acquire_on_behalf_of_nowaitra   r  r[   r[   r\   r  "  r   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   rW   )r  rt  rd   r[   r[   r\   rt  %  r   zCapacityLimiter.acquirec                   s   | j |I d H  d S rW   )r  acquire_on_behalf_ofr  r[   r[   r\   r  (  s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  rg  rW   )r  r}  rd   r[   r[   r\   r}  +  r   zCapacityLimiter.releasec                 C  s   | j |S rW   )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  r  	borrowersri  )r  rj  r&   r  r  tupler  ri  )ra   origr[   r[   r\   rj  1  s   
zCapacityLimiter.statisticsrW   )r  r  rQ   r  rU   r4   )r  r  rQ   r  rU   r]   r   )re   rf   rg   rh   ri   rj   rU   r]   r   r   r   )r  rT   rU   r]   )rU   r&   )r   r   r   rY   rb   r   r   r   r  r   r  r  rv  r  rt  r  r}  r  rj  r[   r[   r[   r\   r4     s4    








r4   _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 rW   )_signals)ra   r  r[   r[   r\   rb   F  r   z_SignalReceiver.__init__rU   c                 C  s   t j| j | _| j | _| S rW   )r_   open_signal_receiverr  _cmrc   r  rd   r[   r[   r\   rc   I  s   z_SignalReceiver.__enter__re   rf   rg   rh   ri   rj   rk   c                 C  rl   rW   )r  rm   rn   r[   r[   r\   rm   N  s   z_SignalReceiver.__exit__c                 C  s   | S rW   r[   rd   r[   r[   r\   	__aiter__V  s   z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S rW   )r  	__anext__r   )ra   signumr[   r[   r\   r  Y  s   z_SignalReceiver.__anext__N)r  r  )rU   r  r   )rU   r   )	r   r   r   r   rb   rc   rm   r  r  r[   r[   r[   r\   r  C  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   rU   r]   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)ra   r  r  r[   r[   r\   rb   d  s   
zTestRunner.__init__re   rf   rg   rh   ri   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S rW   )r  r  r  getrn   r[   r[   r\   rm   k  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 rF  )r2   r  r   r6  r   r   )ra   receive_streamcorooutcome_holderretvalr   r[   r[   r\   _run_tests_and_fixturesv  s   "z"TestRunner._run_tests_and_fixturesoutcomerT   c                 C  s
   d | _ d S rW   )r  )ra   r  r[   r[   r\   _main_task_finished  r   zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrS   P.kwargsrM   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  r_   r   start_guest_runr  r  putr  r  r  send_nowaitunwrap)ra   r   r   rS   r  r[   r[   r\   _call_in_runner_task  s$   


zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]r   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   )ra   r  rS   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 rW   r  )ra   r  rS   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 rW   r  )ra   r  rS   r[   r[   r\   run_test  s   zTestRunner.run_testN)r  r   rU   r]   )re   rf   rg   rh   ri   r  rU   r]   r   )r  rT   rU   r]   )r   r  r   r  rS   r  rU   rM   )r  r  rS   r   rU   r  )r  r  rS   r   rU   rM   )r  r  rS   r   rU   r]   )r   r   r   rb   rm   r  r  r  r  r  r  r[   r[   r[   r\   r  c  s    






r  c                      r<  )r  tasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rW   )
parent_nurseryparent_taskidr   rb   r   r  weakrefproxy_task)ra   r  	parent_idr   r[   r\   rb     s
   zTrioTaskInfo.__init__rU   r{   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  _cancel_statuseffectively_cancelledReferenceErrorrd   r[   r[   r\   has_pending_cancellation  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r   )r   r   r   rb   r  r   r[   r[   r   r\   r    s    r  c                   @  sp  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ddNdOZeddXdYZedd\d]Ze	3dddddeZeddidjZeddndoZeddpdqZeddwdxZ ee!dd|d}Z"ee!ddd}Z"eddd}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,d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rS   r   r  rU   rM   c                 C  s   t j|g|R  S rW   )r_   run)rZ   r   r   rS   r  r[   r[   r\   r    s   zTrioBackend.runrT   c                 C  s
   t j S rW   )r_   r   r   r   r[   r[   r\   current_token     
zTrioBackend.current_tokenrr   c                 C     t  S rW   )r_   current_timer   r[   r[   r\   r    rv   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS rW   )r_   r   r   r[   r[   r\   cancelled_exception_class  r   z%TrioBackend.cancelled_exception_classr]   c                      t j I d H  d S rW   )r_   r   r#  r   r[   r[   r\   r#       zTrioBackend.checkpointc                   r  rW   )r_   r   ru  r   r[   r[   r\   ru    r  z#TrioBackend.checkpoint_if_cancelledc                   r  rW   )r_   r   cancel_shielded_checkpointr   r[   r[   r\   r    r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rW   )r_   r   )rZ   r  r[   r[   r\   r     r  zTrioBackend.sleepFru   r   ru   r   r{   abc.CancelScopec                C  s   t ||dS )Nr  r=   )rZ   ru   r   r[   r[   r\   create_cancel_scope  s   zTrioBackend.create_cancel_scopec                 C  r  rW   )r_   current_effective_deadliner   r[   r[   r\   r    rv   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S rW   )r   r   r[   r[   r\   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  rW   r5   r   r[   r[   r\   create_event  r   zTrioBackend.create_eventro  r8   c                C  s
   t |dS )Nrn  r7   rp  r[   r[   r\   create_lock  r  zTrioBackend.create_lockNr  r  r   r  r   abc.Semaphorec                C  s   t |||dS )Nr  r;   r  r[   r[   r\   create_semaphore	  s   zTrioBackend.create_semaphorer  r4   c                 C     t |S rW   r3   )rZ   r  r[   r[   r\   create_capacity_limiter  rv   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 )NrU   rM   c                     s6   t t   W  d    S 1 sw   Y  d S rW   )r,   r  r[   r   r   tokenr[   r\   wrapper  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rU   rM   )r  r  r$   r   r_   r4   )rZ   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 rW   )r_   r   check_cancelledr   r[   r[   r\   r  *     zTrioBackend.check_cancelledr  c                 C     t jj|g|R  S rW   )r_   r   r  rZ   r   r   r  r[   r[   r\   run_async_from_thread.     z!TrioBackend.run_async_from_threadc                 C  r  rW   )r_   r   r$   r  r[   r[   r\   run_sync_from_thread7  r  z TrioBackend.run_sync_from_threadabc.BlockingPortalc                 C  r  rW   )r   r   r[   r[   r\   create_blocking_portal@  r   z"TrioBackend.create_blocking_portal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   rC   rU   strc                 S  s"   t | }t|tr|S t |S rW   )osfspathr  r  fsdecode)r   str_or_bytesr[   r[   r\   convert_itemN  s   


z.TrioBackend.open_process.<locals>.convert_itemT)r   r   r   shellc                   s   g | ]} |qS r[   r[   ).0r   r
  r[   r\   
<listcomp>`  s    z,TrioBackend.open_process.<locals>.<listcomp>F)r   rC   rU   r  )r  r  r   r   r_   r   open_processr   r   r   r   r   r   )
rZ   r  r   r   r   rS   r   stdin_streamstdout_streamstderr_streamr[   r  r\   r  D  s6   

		zTrioBackend.open_processr   r   c                 C  s   t jt| d S rW   )r_   r   spawn_system_taskr   )rZ   r   r[   r[   r\   #setup_process_pool_exit_at_shutdownm  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_INETr_   rH  rI  rJ  bindconnectr   r  r	  )rZ   r  r  r  familyr   r[   r[   r\   connect_tcpq  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 rW   )r_   r  AF_UNIXr  r   r  r  )rZ   r   r   r[   r[   r\   connect_unix  s   zTrioBackend.connect_unixsockr   abc.SocketListenerc                 C  r  rW   )r=  rZ   r%  r[   r[   r\   create_tcp_listener  rv   zTrioBackend.create_tcp_listenerc                 C  r  rW   )rP  r'  r[   r[   r\   create_unix_listener  rv   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  )
r_   r  
SOCK_DGRAMrH  r'  SO_REUSEPORTr  r  r]  rQ  )rZ   r  r  r+  r,  r   r[   r[   r\   create_udp_socket  s   zTrioBackend.create_udp_socketr>  remote_pathabc.UNIXDatagramSocketc                      d S rW   r[   rZ   r>  r2  r[   r[   r\   create_unix_datagram_socket     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r4  rW   r[   r5  r[   r[   r\   r6    r7  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S rW   )r_   r  rB  r  re  rd  )rZ   r>  r2  r   r[   r[   r\   r6    s   r   )r  r.  protor/  bytes | str | Nonestr | int | Noneint | AddressFamilyr.  int | SocketKindr;  r/  ]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]c                  s   t j||||||I d H S rW   )r_   r  getaddrinfo)rZ   r  r  r  r.  r;  r/  r[   r[   r\   rA    s   zTrioBackend.getaddrinfosockaddrr?   tuple[str, str]c                   s   t j||I d H S rW   )r_   r  getnameinfo)rZ   rB  r/  r[   r[   r\   rD    s   zTrioBackend.getnameinfoc              
     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!   r_   r/   with_traceback__traceback__r.   rZ   r%  r   r[   r[   r\   wait_socket_readable     
z TrioBackend.wait_socket_readablec              
     rE  )Nr  )r"   r_   r/   rF  rG  r.   rH  r[   r[   r\   wait_socket_writable  rJ  z TrioBackend.wait_socket_writablec                 C  s<   zt  W S  ty   ttj d}t | | Y S w )Nr  )r  r  LookupErrorr4   r_   	to_threadcurrent_default_thread_limiterrm  )rZ   r  r[   r[   r\   rN    s   

z*TrioBackend.current_default_thread_limiterr  r   .AbstractContextManager[AsyncIterator[Signals]]c                 G  r  rW   )r  )rZ   r  r[   r[   r\   r    s   z TrioBackend.open_signal_receiverr)   c                 C  s   t  }t|S rW   )r    r  )rZ   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 rW   )r   r  child_nurserieschild_tasksr6  extend)rZ   	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[  )rZ   r[  r[   r[   r\   r[    s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S r^   )r  )rZ   r  r[   r[   r\   create_test_runner  r  zTrioBackend.create_test_runner)
r   r  r   r   rS   r   r  r   rU   rM   )rU   rT   r   )rU   r  r   )r  rr   rU   r]   )ru   rr   r   r{   rU   r  )rU   r  )rU   r  r  )r  r   r  r   ro  r{   rU   r  )r  rr   rU   r4   )FN)
r   r  r   r   r  r{   r  r  rU   rM   )r   r  r   r   r  rT   rU   rM   )r   r  r   r   r  rT   rU   rM   )rU   r   )r  r  r   r  r   r  r   r  rS   r   rU   r   r   r   rU   r]   rW   )r  r  r  r   r  r  rU   r	  )r   r!  rU   r"  )r%  r   rU   r&  )
r  r*  r  r  r+  r  r,  r{   rU   r-  )r>  r   r2  r]   rU   r3  )r>  r   r2  r!  rU   r8  )r>  r   r2  r9  rU   r:  )r  r<  r  r=  r  r>  r.  r?  r;  r   r/  r   rU   r@  )r   )rB  r?   r/  r   rU   rC  )r%  r   rU   r]   )rU   r4   )r  r   rU   rO  )rU   r)   )rU   rQ  )r  r   rU   r  )-r   r   r   classmethodr  r  r  r  r#  ru  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r(  r)  r1  r   r6  rA  rD  rI  rK  rN  r  rP  rZ  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
   concurrent.futuresr   
contextlibr   dataclassesr   	functoolsr   ior   r   r   r   r   r   r   typingr   r   r   r   r   r   r   trio.from_threadr_   trio.lowlevelr  r   r   r   r   r    r!   r"   trio.socketr#   r   trio.to_threadr$    r&   r'   r(   r)   r*   r+   _core._eventloopr,   _core._exceptionsr-   r.   r/   r0   _core._socketsr1   _core._streamsr2   _core._synchronizationr4   BaseCapacityLimiterr6   	BaseEventr8   BaseLockr9   r:   r<   BaseSemaphore_core._tasksr>   BaseCancelScoper?   r@   rA   abc._eventlooprB   rC   streams.memoryrD   version_inforG   typing_extensionsrI   rJ   exceptiongrouprK   rL   rM   r  rN   rO   rP   r   RunVarr   r   ByteReceiveStreamr   ByteSendStreamr   r   
Instrumentr   r   r   r   r   r	  r  SocketListenerr=  rP  rQ  r]  rd  re  r  r  r  r  r  backend_classr[   r[   r[   r\   <module>   s    (
$
 7; 8
!C

(6L W  Y