o
    p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 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/m0Z0m1Z1 d dl-m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z9 d dl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJ ddlKmLZL ddlMmNZN ddlOmPZQ ddlOmRZS ddlOmTZU ddlOmVZVmWZW ddlOmXZY ddlZm[Z\ ddlCm]Z]m^Z^m_Z_ ddl`maZambZb dd lcmdZd e$r&d d!lemfZf ejgd"kr3d d#l"mhZh nd d#limhZh ejgd$krHd d%l"mjZjmkZk nd d&llmmZm d d%limjZjmkZk e(d'Zne(d(Zoe(d)epe]Zqejd*Zrehd+Zse,jtjuZuG d,d- d-e\Z[G d.d/ d/eCjvZvG d0d1 d1eCjwZwed2d3G d4d5 d5eCjxZyed2d3G d6d7 d7eCjzZ{ed2d3G d8d9 d9eCj|Z|G d:d; d;e,jCj}Z~eud<Zd=ed<< dgdBdCZG dDdE dEe&eq ZG dFdG dGeeCjZG dHdI dIeeCjZG dJdK dKeeCjZG dLdM dMeeCjZG dNdO dOee] eCjZG dPdQ dQee] eCjZG dRdS dSeep eCjZG dTdU dUeep eCjZG dVdW dWeSZRG dXdY dYeUZTG dZd[ d[eYZXG d\d] d]eQZPeud^Zd=ed^< G d_d` d`ZG dadb dbeCjZG dcdd ddeAZG dedf dfeaZeZdS )h    )annotationsN)AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableSequence)Future)AbstractContextManager)	dataclass)partial)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)rI      )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 )2rA   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrX   __new__)clsrU   rW    r_   \/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/anyio/_backends/_trio.pyr]   x   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S Nr_   )triorA   _CancelScope__original)selfrU   rW   r_   r_   r`   __init__}   s   zCancelScope.__init__c                 C  s   | j   | S r[   )rd   	__enter__re   r_   r_   r`   rg      s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Noneboolc                 C     | j |||S r[   )rd   __exit__re   ri   rk   rm   r_   r_   r`   rq         zCancelScope.__exit__reason
str | Nonec                 C     | j | d S r[   )rd   cancel)re   rt   r_   r_   r`   rw         zCancelScope.cancelfloatc                 C     | j jS r[   rd   deadlinerh   r_   r_   r`   r|         zCancelScope.deadlinevaluec                 C     || j _d S r[   r{   re   r~   r_   r_   r`   r|         c                 C  rz   r[   )rd   cancel_calledrh   r_   r_   r`   r      r}   zCancelScope.cancel_calledc                 C  rz   r[   )rd   cancelled_caughtrh   r_   r_   r`   r      r}   zCancelScope.cancelled_caughtc                 C  rz   r[   rd   shieldrh   r_   r_   r`   r      r}   zCancelScope.shieldc                 C  r   r[   r   r   r_   r_   r`   r      r   r[   )rU   rV   rW   rX   rY   rA   )rU   rV   rW   r   rY   ra   )rY   rA   ri   rj   rk   rl   rm   rn   rY   ro   )rt   ru   rY   ra   rY   ry   r~   ry   rY   ra   rY   ro   )r~   ro   rY   ra   )__name__
__module____qualname__r]   rf   rg   rq   rw   propertyr|   setterr   r   r   r_   r_   r_   r`   rA   w   s&    

rA   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 )#	TaskGrouprY   ra   c                 C  s   d| _ tjdd| _d | _d S )NFT)Zstrict_exception_groups)_activerc   Zopen_nursery_nursery_managercancel_scoperh   r_   r_   r`   rf      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryrA   r   rh   r_   r_   r`   r      s
   zTaskGroup.__aenter__ri   rj   rk   rl   rm   rn   ro   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   rO   splitrc   	Cancelled_create)re   ri   rk   rm   excr_   r_   r`   r      s   zTaskGroup.__aexit__Nnamefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   rX   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re   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rY   ra   )rY   r   r   )r   r   r   r   r   rX   rY   ra   )r   r   r   rX   r   rX   rY   r   )r   r   r   rf   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 )BlockingPortalrY   c                 C  rZ   r[   r\   r^   r_   r_   r`   r]         
zBlockingPortal.__new__ra   c                   s   t    tj | _d S r[   )superrf   rc   lowlevelcurrent_trio_token_tokenrh   	__class__r_   r`   rf      s   
zBlockingPortal.__init__r   <Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r   tuple[Unpack[PosArgsT]]rW   dict[str, Any]r   rX   futureFuture[T_Retval]c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )
trio_token)rc   from_threadr&   r   Z_task_groupr   Z
_call_funcr   )re   r   r   rW   r   r   r_   r_   r`   _spawn_task_from_thread   s   
z&BlockingPortal._spawn_task_from_thread)rY   r   r   )r   r   r   r   rW   r   r   rX   r   r   rY   ra   )r   r   r   r]   rf   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 | NonerY   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r[   )r   Zreceive_somerc   r2   	__cause__r0   r   r3   re   r   datar   r_   r_   r`   receive  s   zReceiveStreamWrapper.receivera   c                      | j  I d H  d S r[   r   acloserh   r_   r_   r`   r        zReceiveStreamWrapper.acloser[   )r   r   rY   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   rY   ra   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 r[   )r   Zsend_allrc   r2   r   r0   re   r   r   r_   r_   r`   send!  s   zSendStreamWrapper.sendc                   r   r[   r   rh   r_   r_   r`   r   )  r   zSendStreamWrapper.acloseNr   r   rY   ra   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_stderrrY   ra   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   )rA   r   r   r   r   waitBaseExceptionkillrh   r_   r_   r`   r   4  s*   
zProcess.acloseintc                      | j  I d H S r[   )r   r   rh   r_   r_   r`   r   E     zProcess.waitc                 C     | j   d S r[   )r   	terminaterh   r_   r_   r`   r   H     zProcess.terminatec                 C  r   r[   )r   r   rh   r_   r_   r`   r   K  r   zProcess.killsignalr   c                 C  rv   r[   )r   send_signal)re   r   r_   r_   r`   r   N  rx   zProcess.send_signalc                 C  rz   r[   )r   pidrh   r_   r_   r`   r   Q  r}   zProcess.pidr   c                 C  rz   r[   )r   
returncoderh   r_   r_   r`   r   U  r}   zProcess.returncodec                 C     | j S r[   )r   rh   r_   r_   r`   stdinY     zProcess.stdinc                 C  r   r[   )r   rh   r_   r_   r`   stdout]  r   zProcess.stdoutc                 C  r   r[   )r   rh   r_   r_   r`   stderra  r   zProcess.stderrNr   rY   r   )r   r   rY   ra   rY   r   )rY   r   )rY   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 )_ProcessPoolShutdownInstrumentrY   ra   c                   s   t    d S r[   )r   	after_runrh   r   r_   r`   r   g  r   z(_ProcessPoolShutdownInstrument.after_runr   )r   r   r   r   r   r_   r_   r   r`   r   f  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rY   ra   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   )	rc   sleepmathinfr   r   r   rA   r   )r   processr_   r_   r`   _shutdown_process_poolp  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TrioSocketTyperY   ra   c                 C  s   || _ d| _d S NF)_trio_socket_closedre   r   r_   r_   r`   rf     s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r2   r   filenor0   rh   r_   r_   r`   _check_closed  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rz   r[   )r   _sockrh   r_   r_   r`   _raw_socket  r}   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closerh   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   )
isinstancerc   r2   r   r   r   OSErrorr0   re   r   r_   r_   r`   _convert_socket_error  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rY   ra   r   )rY   r   )r   r   rY   r   )	r   r   r   rf   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   rY   ra   c                   $   t  | td| _td| _d S Nreading from
writing tor   rf   r<   _receive_guard_send_guardr   r   r_   r`   rf        
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 r[   )r  r   recvr   r  r3   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 r[   )r  
memoryviewr   r   r   r  )re   r   viewZ
bytes_sentr   r_   r_   r`   r     s   "zSocketStream.sendc                   s   | j tj d S r[   )r   shutdownsocketSHUT_WRrh   r_   r_   r`   send_eof  s   zSocketStream.send_eofr  )r  )r   r   rY   r   r   r   )r   r   r   rf   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   maxfdsrY   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arrayrc   r   
checkpointr  r   recvmsgr  CMSG_LENitemsizer   r  r3   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)re   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]ra   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  rc   r   r  r  r   sendmsgr  r#  r$  r   r  )re   r)  r(  ZfilenosfdZfdarrayr   r_   r_   r`   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rY   r  )r)  r   r(  r1  rY   ra   )r   r   r   r0  r5  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   rf   rc   r  from_stdlib_socketr<   _accept_guardre   r8  r   r_   r`   rf        zTCPSocketListener.__init__rY   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   )
r=  r   acceptr   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYr  re   r   Z_addrr   r_   r_   r`   rA  
  s   zTCPSocketListener.acceptr8  r   )rY   r  r   r   r   rf   rA  r   r_   r_   r   r`   r7        r7  c                      r6  )UNIXSocketListenerr8  r   c                   r9  r:  r;  r>  r   r_   r`   rf     r?  zUNIXSocketListener.__init__rY   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 r[   )r=  r   rA  r   r  r  rE  r_   r_   r`   rA    s    

zUNIXSocketListener.acceptrF  )rY   r  rG  r_   r_   r   r`   rI    rH  rI  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rY   ra   c                   r  r	  r  r   r   r_   r`   rf   %  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   recvfromr4   r   r  re   r   r,  r   r_   r_   r`   r   *  s   "zUDPSocket.receiver   rC   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 r[   r  r   sendtor   r  r   r_   r_   r`   r   2     "zUDPSocket.sendr  )rY   rK  )r   rC   rY   ra   r   r   r   rf   r   r   r   r_   r_   r   r`   rJ  $      
rJ  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rY   ra   c                   r  r	  r  r   r   r_   r`   rf   ;  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 rL  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 r[   r  r   r   r   r  r   r_   r_   r`   r   G  rR  zConnectedUDPSocket.sendr  rY   r   r   rS  r_   r_   r   r`   rV  :  s    
rV  c                      rU  )UNIXDatagramSocketr   r   rY   ra   c                   r  r	  r  r   r   r_   r`   rf   P  r  zUNIXDatagramSocket.__init__rD   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 rL  )r  r   rM  r   r  rN  r_   r_   r`   r   U  s   "zUNIXDatagramSocket.receiver   c                   rO  r[   rP  r   r_   r_   r`   r   ]  rR  zUNIXDatagramSocket.sendr  )rY   rD   )r   rD   rY   ra   rS  r_   r_   r   r`   r]  O  rT  r]  c                      rU  )ConnectedUNIXDatagramSocketr   r   rY   ra   c                   r  r	  r  r   r   r_   r`   rf   h  r  z$ConnectedUNIXDatagramSocket.__init__r   c                   rW  rL  rX  r  r_   r_   r`   r   m  rY  z#ConnectedUNIXDatagramSocket.receiver   c                   rZ  r[   r[  r   r_   r_   r`   r   t  rR  z ConnectedUNIXDatagramSocket.sendr  r\  r   rS  r_   r_   r   r`   r^  e  s    
r^  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 )r9   rY   c                 C  rZ   r[   r\   r   r_   r_   r`   r]     r   zEvent.__new__ra   c                 C  s   t  | _d S r[   )rc   r9   _Event__originalrh   r_   r_   r`   rf     r   zEvent.__init__ro   c                 C  
   | j  S r[   )r_  is_setrh   r_   r_   r`   ra    r   zEvent.is_setc                   r   r[   )r_  r   rh   r_   r_   r`   r     r   z
Event.waitr)   c                 C  s   | j  }t|jdS )N)tasks_waiting)r_  
statisticsr)   rb  re   orig_statisticsr_   r_   r`   rc    s   
zEvent.statisticsc                 C  r   r[   )r_  setrh   r_   r_   r`   rf    r   z	Event.setN)rY   r9   r   r   )rY   r)   )	r   r   r   r]   rf   ra  r   rc  rf  r_   r_   r_   r`   r9     s    




r9   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 )!r;   Ffast_acquirerh  ro   rY   c                C  rZ   r[   r\   r^   rh  r_   r_   r`   r]     r   zLock.__new__ra   c                C  s   || _ t | _d S r[   )_fast_acquirerc   r;   _Lock__original)re   rh  r_   r_   r`   rf     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 r[   )rj  rk  acquirer   rl  rc   r   checkpoint_if_cancelledacquire_nowaitr-   _lotparkr  r_   r_   r`   rm    s(   

zLock.acquirec              
   C  sJ   z| j   W d S  tjy   td  ty$ } z| |  d }~ww r[   )rk  ro  rc   r-   r   rl  r  r_   r_   r`   ro    s   
zLock.acquire_nowaitc                 C  r`  r[   )rk  lockedrh   r_   r_   r`   rr    r   zLock.lockedc                 C  r   r[   )rk  releaserh   r_   r_   r`   rs    r   zLock.releaser*   c                 C  s.   | j  }|jrt|jnd }t|j||jS r[   )rk  rc  ownerTrioTaskInfor*   rr  rb  )re   re  rt  r_   r_   r`   rc    s
   

zLock.statisticsNrh  ro   rY   r;   )rh  ro   rY   ra   )r   r   rY   ra   r   r   )rY   r*   )r   r   r   r]   rf   staticmethodrl  rm  ro  rr  rs  rc  r_   r_   r_   r`   r;     s    


	
r;   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_valuerh  initial_valuer   ry  r   rh  ro   rY   c                C  rZ   r[   r\   r^   rz  ry  rh  r_   r_   r`   r]     s   
zSemaphore.__new__ra   c                  s&   t  j|||d tj||d| _d S )Nrx  )ry  )r   rf   rc   r?   _Semaphore__original)re   rz  ry  rh  r   r_   r`   rf     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 r[   )
rj  r|  rm  rc   r   rn  ro  r-   rp  rq  rh   r_   r_   r`   rm    s   zSemaphore.acquirec                 C  s(   z| j   W d S  tjy   td w r[   )r|  ro  rc   r-   rh   r_   r_   r`   ro    s
   zSemaphore.acquire_nowaitc                 C  rz   r[   )r|  ry  rh   r_   r_   r`   ry    r}   zSemaphore.max_valuec                 C  rz   r[   )r|  r~   rh   r_   r_   r`   r~     r}   zSemaphore.valuec                 C  r   r[   )r|  rs  rh   r_   r_   r`   rs    r   zSemaphore.releaser=   c                 C  s   | j  }t|jS r[   )r|  rc  r=   rb  rd  r_   r_   r`   rc    s   

zSemaphore.statistics)rz  r   ry  r   rh  ro   rY   r?   )rz  r   ry  r   rh  ro   rY   ra   r   r   r   )rY   r=   )r   r   r   r]   rf   rm  ro  r   ry  r~   rs  rc  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 )<r7   NrU   total_tokensfloat | NonerU   trio.CapacityLimiter | NonerY   c                C  rZ   r[   r\   )r^   r~  rU   r_   r_   r`   r]     s   
zCapacityLimiter.__new__ra   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S r[   )_CapacityLimiter__originalrc   r7   )re   r~  rU   r_   r_   r`   rf     s   
zCapacityLimiter.__init__c                   r   r[   )r  r   rh   r_   r_   r`   r     r   zCapacityLimiter.__aenter__ri   rj   rk   rl   rm   rn   c                   s   | j |||I d H  d S r[   )r  r   rr   r_   r_   r`   r     s   zCapacityLimiter.__aexit__ry   c                 C  rz   r[   r  r~  rh   r_   r_   r`   r~  $  r}   zCapacityLimiter.total_tokensr~   c                 C  r   r[   r  r   r_   r_   r`   r~  (  r   r   c                 C  rz   r[   )r  borrowed_tokensrh   r_   r_   r`   r  ,  r}   zCapacityLimiter.borrowed_tokensc                 C  rz   r[   )r  available_tokensrh   r_   r_   r`   r  0  r}   z CapacityLimiter.available_tokensc                 C  r   r[   )r  ro  rh   r_   r_   r`   ro  4  r   zCapacityLimiter.acquire_nowaitborrowerrX   c                 C  rv   r[   )r  acquire_on_behalf_of_nowaitre   r  r_   r_   r`   r  7  rx   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   r[   )r  rm  rh   r_   r_   r`   rm  :  r   zCapacityLimiter.acquirec                   s   | j |I d H  d S r[   )r  acquire_on_behalf_ofr  r_   r_   r`   r  =  s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  r`  r[   )r  rs  rh   r_   r_   r`   rs  @  r   zCapacityLimiter.releasec                 C  s   | j |S r[   )r  release_on_behalf_ofr  r_   r_   r`   r  C  s   z$CapacityLimiter.release_on_behalf_ofr(   c                 C  s&   | j  }t|j|jt|j|jdS )N)r  r~  	borrowersrb  )r  rc  r(   r  r~  tupler  rb  )re   origr_   r_   r`   rc  F  s   
zCapacityLimiter.statisticsr[   )r~  r  rU   r  rY   r7   )r~  r  rU   r  rY   ra   r   )ri   rj   rk   rl   rm   rn   rY   ra   r   r   r   )r  rX   rY   ra   )rY   r(   )r   r   r   r]   rf   r   r   r   r~  r   r  r  ro  r  rm  r  rs  r  rc  r_   r_   r_   r`   r7     s4    








r7   _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 r[   )_signals)re   r  r_   r_   r`   rf   [  r   z_SignalReceiver.__init__rY   c                 C  s   t j| j | _| j | _| S r[   )rc   open_signal_receiverr  _cmrg   r  rh   r_   r_   r`   rg   ^  s   z_SignalReceiver.__enter__ri   rj   rk   rl   rm   rn   bool | Nonec                 C  rp   r[   )r  rq   rr   r_   r_   r`   rq   c  rs   z_SignalReceiver.__exit__c                 C  s   | S r[   r_   rh   r_   r_   r`   	__aiter__k  s   z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S r[   )r  	__anext__r   )re   signumr_   r_   r`   r  n  s   z_SignalReceiver.__anext__N)r  r  )rY   r  )ri   rj   rk   rl   rm   rn   rY   r  )rY   r   )	r   r   r   r   rf   rg   rq   r  r  r_   r_   r_   r`   r  X  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   rY   ra   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)re   r  r  r_   r_   r`   rf   y  s   
zTestRunner.__init__ri   rj   rk   rl   rm   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S r[   )r  r  r  getrr   r_   r_   r`   rq     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 r@  )r5   r  r   r2  r   r   )re   Zreceive_streamcorooutcome_holderretvalr   r_   r_   r`   _run_tests_and_fixtures  s   "z"TestRunner._run_tests_and_fixturesoutcomerX   c                 C  s
   d | _ d S r[   )r  )re   r  r_   r_   r`   _main_task_finished  r   zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrW   P.kwargsrQ   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)Zrun_sync_soon_threadsafeZdone_callbackr   )r  rc   r   Zstart_guest_runr  r  putr  r  r  Zsend_nowaitunwrap)re   r   r   rW   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   )re   r  rW   asyncgenZ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 r[   r  )re   r  rW   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 r[   r  )re   r  rW   r_   r_   r`   run_test  s   zTestRunner.run_testN)r  r   rY   ra   )ri   rj   rk   rl   rm   r  rY   ra   r   )r  rX   rY   ra   )r   r  r   r  rW   r  rY   rQ   )r  r  rW   r   rY   r  )r  r  rW   r   rY   rQ   )r  r  rW   r   rY   ra   )r   r   r   rf   rq   r  r  r  r  r  r  r_   r_   r_   r`   r  x  s    






r  c                      r6  )ru  tasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S r[   )
Zparent_nurseryZparent_taskidr   rf   r   r  weakrefproxy_task)re   r  Z	parent_idr   r_   r`   rf     s
   zTrioTaskInfo.__init__rY   ro   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  Z_cancel_statusZeffectively_cancelledReferenceErrorrh   r_   r_   r`   has_pending_cancellation  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r   )r   r   r   rf   r  r   r_   r_   r   r`   ru    s    ru  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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,edddZ-edddZ.edddZ/edddZ0edddZ1edddZ2edddZ3edddZ4d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rW   r   r  rY   rQ   c                 C  s   t j|g|R  S r[   )rc   run)r^   r   r   rW   r  r_   r_   r`   r    s   zTrioBackend.runrX   c                 C  s
   t j S r[   )rc   r   r   r   r_   r_   r`   current_token     
zTrioBackend.current_tokenry   c                 C     t  S r[   )rc   current_timer   r_   r_   r`   r    r}   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS r[   )rc   r   r   r_   r_   r`   cancelled_exception_class  r   z%TrioBackend.cancelled_exception_classra   c                      t j I d H  d S r[   )rc   r   r  r   r_   r_   r`   r       zTrioBackend.checkpointc                   r  r[   )rc   r   rn  r   r_   r_   r`   rn    r  z#TrioBackend.checkpoint_if_cancelledc                   r  r[   )rc   r   cancel_shielded_checkpointr   r_   r_   r`   r     r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S r[   )rc   r   )r^   r  r_   r_   r`   r     r  zTrioBackend.sleepFr|   r   r|   r   ro   abc.CancelScopec                C  s   t ||dS )Nr  r@   )r^   r|   r   r_   r_   r`   create_cancel_scope  s   zTrioBackend.create_cancel_scopec                 C  r  r[   )rc   current_effective_deadliner   r_   r_   r`   r    r}   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S r[   )r   r   r_   r_   r`   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  r[   r8   r   r_   r_   r`   create_event  r   zTrioBackend.create_eventrh  r;   c                C  s
   t |dS )Nrg  r:   ri  r_   r_   r`   create_lock  r  zTrioBackend.create_lockNrx  rz  r   ry  r   abc.Semaphorec                C  s   t |||dS )Nrx  r>   r{  r_   r_   r`   create_semaphore  s   zTrioBackend.create_semaphorer~  r7   c                 C     t |S r[   r6   )r^   r~  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 )NrY   rQ   c                     s6   t t   W  d    S 1 sw   Y  d S r[   )r/   r  r_   r   r   tokenr_   r`   wrapper4  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rY   rQ   )r  r  r&   r   rc   r7   )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 r[   )rc   r   check_cancelledr   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 | Noner   )r   rc   r   r  r+   r^   r   r   r  r   r_   r_   r`   run_async_from_threadC     
z!TrioBackend.run_async_from_threadc                 C  r  r  )r   rc   r   r&   r+   r  r_   r_   r`   run_sync_from_threadP  r  z TrioBackend.run_sync_from_threadabc.BlockingPortalc                 C  r  r[   )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   rF   rY   strc                 S  s"   t | }t|tr|S t |S r[   )osfspathr  r  fsdecode)r   Zstr_or_bytesr_   r_   r`   convert_itemk  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   rF   rY   r  )r  r  r   r   rc   r   open_processr   r   r   r   r   r   )
r^   r  r   r   r   rW   r   Zstdin_streamZstdout_streamZstderr_streamr_   r  r`   r  a  s6   

		zTrioBackend.open_processr   r   c                 C  s   t jt| d S r[   )rc   r   Zspawn_system_taskr   )r^   r   r_   r_   r`   #setup_process_pool_exit_at_shutdown  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_INETrc   rB  rC  rD  bindconnectr   r  r  )r^   r  r  r   familyr   r_   r_   r`   connect_tcp  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 r[   )rc   r  AF_UNIXr  r   r  r  )r^   r	  r   r_   r_   r`   connect_unix  s   zTrioBackend.connect_unixsockr   abc.SocketListenerc                 C  r  r[   r7  r^   r  r_   r_   r`   create_tcp_listener  r}   zTrioBackend.create_tcp_listenerc                 C  r  r[   )rI  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   )
rc   r  
SOCK_DGRAMrB  r#  SO_REUSEPORTr  r  rV  rJ  )r^   r  r   r  r  r   r_   r_   r`   create_udp_socket  s   zTrioBackend.create_udp_socketr8  remote_pathabc.UNIXDatagramSocketc                      d S r[   r_   r^   r8  r  r_   r_   r`   create_unix_datagram_socket     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r  r[   r_   r  r_   r_   r`   r     r!  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S r[   )rc   r  r<  r  r^  r]  )r^   r8  r  r   r_   r_   r`   r     s   r   )r  r  protor+  bytes | str | Nonestr | int | Noneint | AddressFamilyr  int | SocketKindr%  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 r[   )rc   r  getaddrinfo)r^   r  r  r  r  r%  r+  r_   r_   r`   r+    s   zTrioBackend.getaddrinfosockaddrrB   tuple[str, str]c                   s   t j||I d H S r[   )rc   r  getnameinfo)r^   r,  r+  r_   r_   r`   r.    s   zTrioBackend.getnameinfoobjrH   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#   rc   r2   with_traceback__traceback__r1   r^   r/  r   r_   r_   r`   r#        
zTrioBackend.wait_readablec              
     r0  )Nr  )r$   rc   r2   r1  r2  r1   r3  r_   r_   r`   r$     r4  zTrioBackend.wait_writablec                 C  s   t | d S r[   )r"   )r^   r/  r_   r_   r`   r"     r   zTrioBackend.notify_closingc                   s
   t |S r[   r  r  r_   r_   r`   wrap_listener_socket  s   z TrioBackend.wrap_listener_socketc                      t j|}t|S r[   )rc   r  r<  r  r^   r  Z	trio_sockr_   r_   r`   wrap_stream_socket     zTrioBackend.wrap_stream_socketr  c                   r6  r[   )rc   r  r<  r  r7  r_   r_   r`   wrap_unix_stream_socket  r9  z#TrioBackend.wrap_unix_stream_socketrJ  c                   r6  r[   )rc   r  r<  rJ  r7  r_   r_   r`   wrap_udp_socket   r9  zTrioBackend.wrap_udp_socketrV  c                   r6  r[   )rc   r  r<  rV  r7  r_   r_   r`   wrap_connected_udp_socket%  r9  z%TrioBackend.wrap_connected_udp_socketr]  c                   r6  r[   )rc   r  r<  r]  r7  r_   r_   r`   wrap_unix_datagram_socket*  r9  z%TrioBackend.wrap_unix_datagram_socketr^  c                   r6  r[   )rc   r  r<  r^  r7  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 )Nr}  )r  r  LookupErrorr7   rc   	to_threadcurrent_default_thread_limiterrf  )r^   r  r_   r_   r`   rA  6  s   

z*TrioBackend.current_default_thread_limiterr  r   .AbstractContextManager[AsyncIterator[Signals]]c                 G  r  r[   )r  )r^   r  r_   r_   r`   r  A  s   z TrioBackend.open_signal_receiverr,   c                 C  s   t  }t|S r[   )r!   ru  )r^   r  r_   r_   r`   get_current_taskG  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 r[   )r    ru  Zchild_nurseriesZchild_tasksr2  extend)r^   Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZnurseryr  r_   r_   r`   get_running_tasksL  s   

	zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)Ztrio.testingrG  )r^   rG  r_   r_   r`   rG  ]  s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S rb   )r  )r^   r  r_   r_   r`   create_test_runnerc  r  zTrioBackend.create_test_runner)
r   r  r   r   rW   r   r  r   rY   rQ   )rY   rX   r   )rY   r  r   )r  ry   rY   ra   )r|   ry   r   ro   rY   r  )rY   r  )rY   r  rv  )rz  r   ry  r   rh  ro   rY   r  )r~  ry   rY   r7   )FN)
r   r  r   r   r  ro   r  r  rY   rQ   )r   r  r   r   r  rX   rY   rQ   )r   r  r   r   r  rX   rY   rQ   )rY   r  )r  r  r   r  r   r  r   r  rW   r   rY   r   r   r   rY   ra   r[   )r  r  r  r   r   r  rY   r  )r	  r
  rY   r  )r  r   rY   r  )
r  r  r   r  r  r  r  ro   rY   r  )r8  r   r  ra   rY   r  )r8  r   r  r
  rY   r"  )r8  r   r  r#  rY   r$  )r  r&  r  r'  r  r(  r  r)  r%  r   r+  r   rY   r*  )r   )r,  rB   r+  r   rY   r-  )r/  rH   rY   ra   )r  r   rY   r  )r  r   rY   r  )r  r   rY   rJ  )r  r   rY   rV  )r  r   rY   r]  )r  r   rY   r^  )rY   r7   )r  r   rY   rB  )rY   r,   )rY   rD  )r  r   rY   r  )5r   r   r   classmethodr  r  r  r  r  rn  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"   r5  r8  r:  r;  r<  r=  r>  rA  r  rC  rF  rG  rH  r_   r_   r_   r`   r    s    		(

r  rI  )
__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   r   Ztrio.from_threadrc   Ztrio.lowlevelr  r   r   r   r    r!   r"   r#   r$   Ztrio.socketr%   r   Ztrio.to_threadr&    r(   r)   r*   r+   r,   r-   r.   Z_core._eventloopr/   Z_core._exceptionsr0   r1   r2   r3   Z_core._socketsr4   Z_core._streamsr5   Z_core._synchronizationr7   ZBaseCapacityLimiterr9   Z	BaseEventr;   ZBaseLockr<   r=   r?   ZBaseSemaphoreZ_core._tasksrA   ZBaseCancelScoperB   rC   rD   Zabc._eventlooprE   rF   Zstreams.memoryrG   Z	_typeshedrH   version_inforK   Ztyping_extensionsrM   rN   ZexceptiongrouprO   rP   rQ   r  rR   rS   rT   r   ZRunVarr   r   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r  r  ZSocketListenerr7  rI  rJ  rV  r]  r^  r  r  r  ru  r  Zbackend_classr_   r_   r_   r`   <module>   s    (
($	6; 8
!C

86L W   
