U
    &%eSu                     @  s  U d dl mZ d dlZd dlZd dl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 d dlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#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/ d dl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ddl<mAZB ddlCmDZD ddlEmFZG ddlEmHZI ddlEmJZJ ddlKmLZM ddl6mNZNmOZO erd dlPmQZQ zd dl(mRZS W n2 eTk
r   d dl(mUZS d dlVmWZWmXZX Y nX d dlYmWZWmXZX z
eSjZZ[W n" e\k
r@   d dl(mZZ[ Y nX e$d Z]e$d!e^eNZ_e(j`Z`e(jRjaZbe(jRjcZce(jdZdG d"d# d#eMZLe(jeZfe(jRjgZge(jRjhZhe(jRjiZie(jjZje(jkZkG d$d% d%eBe(jlZAG d&d' d'e6jmZmd(dd)d*d+d,d-d d.d/d0Znd1d2d d3d4d5Zod*d2d d3d6d7ZpG d8d9 d9e6jqZqe
d(d:G d;d< d<e6jrZse
d(d:G d=d> d>e6jtZue
d(d:G d?d@ d@e6jvZvddd(dAdBd,dCdCdCdDdEd,d@dF	dGdHZZG dIdJ dJe(j6jwZxecdKZydLezdK< dMdNdOdPdQZ{dMdNdOdRdSZ|G dTdU dUee_ Z}G dVdW dWe}e6j~Z~G dXdY dYe~e6jZG dZd[ d[e}e6jZG d\d] d]e}e6jZG d^d_ d_e}eN e6jZG d`da dae}eN e6jZddbdcdddWdedfdgZdbdYdhdidjZdkddddd,dldmdndoZe(jjZe(jjZdpdNdqdrdsZdpdNdqdtduZG dvdw dweIZHG dxdy dyeGZFecdzZdLezdz< dyd{d|d}ZG d~d de8d ZdddddZdd{ddZdd{ddZdd{ddZG dd de6jZdS )    )annotationsN)Future)copy_context)	dataclass)partial)IOBase)PathLike)Signals)TracebackType)IOTYPE_CHECKINGAnyAsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineGenericIterableMappingNoReturnSequenceTypeVarcast)ErrorOutcomeValue)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)DeprecatedAsyncContextManagerDeprecatedAwaitableclaim_worker_thread)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)ExceptionGroup)convert_ipv6_sockaddr)CapacityLimiter)Event)ResourceGuard)CancelScope)IPSockAddrTypeUDPPacketType)
TaskStatus)lowlevel)hazmat)wait_readablewait_writable)open_processT_Retval
T_SockAddrc                   @  s   e Zd Zd#ddd dddZd$ddddd	d
Zd dddZdddddddZddddZeddddZ	e	j
dddddZ	eddddZeddd d!Zej
dddd"d!ZdS )%r2   Nztrio.CancelScope | Noneobject)originalkwargsreturnc                 K  s
   t | S Nr=   __new__)clsr>   r?    rE   T/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/anyio/_backends/_trio.pyrC   e   s    zCancelScope.__new__r   Nonec                 K  s   |pt jf || _d S rA   )trior2   _CancelScope__original)selfr>   r?   rE   rE   rF   __init__j   s    zCancelScope.__init__r@   c                 C  s   | j   | S rA   )rI   	__enter__rJ   rE   rE   rF   rM   m   s    
zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonebool | Noneexc_typeexc_valexc_tbr@   c                 C  s   | j |||S rA   )rI   __exit__rJ   rT   rU   rV   rE   rE   rF   rW   q   s
      zCancelScope.__exit__r&   c                 C  s   | j   t| jS rA   )rI   cancelr&   rN   rE   rE   rF   rY   |   s    
zCancelScope.cancelfloatc                 C  s   | j jS rA   rI   deadlinerN   rE   rE   rF   r\      s    zCancelScope.deadlinevaluer@   c                 C  s   || j _d S rA   r[   rJ   r^   rE   rE   rF   r\      s    boolc                 C  s   | j jS rA   )rI   cancel_calledrN   rE   rE   rF   ra      s    zCancelScope.cancel_calledc                 C  s   | j jS rA   rI   shieldrN   rE   rE   rF   rc      s    zCancelScope.shieldc                 C  s   || j _d S rA   rb   r_   rE   rE   rF   rc      s    )N)N)__name__
__module____qualname__rC   rK   rM   rW   rY   propertyr\   setterra   rc   rE   rE   rE   rF   r2   d   s     r2   c                   @  s   e Zd ZdS )r-   N)rd   re   rf   rE   rE   rE   rF   r-      s   r-   c                   @  sp   e Zd ZddddZd dddZddd	d
dddZdddddddddZdddddddddZdS )	TaskGrouprG   rL   c                 C  s   d| _ t | _d | _d S NF)_activerH   open_nursery_nursery_managercancel_scoperN   rE   rE   rF   rK      s    
zTaskGroup.__init__c                   s*   d| _ | j I d H | _t| jj| _| S NT)rk   rm   
__aenter___nurseryr2   rn   rN   rE   rE   rF   rp      s    zTaskGroup.__aenter__rO   rP   rQ   rR   rS   c              
     s`   zRz| j|||I d H W W 6S  tjk
rN } zt|jd W 5 d }~X Y nX W 5 d| _ X d S rj   )rk   rm   	__aexit__rH   
MultiErrorr-   
exceptions)rJ   rT   rU   rV   excrE   rE   rF   rr      s
    "zTaskGroup.__aexit__NnamezCallable[..., Awaitable[Any]]r=   )funcargsrw   r@   c                G  s*   | j std| jj|f|d|i d S Nz;This task group is not active; no new tasks can be started.rw   )rk   RuntimeErrorrq   
start_soonrJ   rx   rw   ry   rE   rE   rF   r|      s
    zTaskGroup.start_soonc                  s,   | j std| jj|f|d|iI d H S rz   )rk   r{   rq   startr}   rE   rE   rF   r~      s
    zTaskGroup.start)rd   re   rf   rK   rp   rr   r|   r~   rE   rE   rE   rF   ri      s   ri   FcancellablelimiterzCallable[..., T_Retval]r=   r`   trio.CapacityLimiter | None)rx   ry   r   r   r@   c                  sB   dd fdd}t  }|tjjd  t|j|||dI d H S )Nr;   rL   c                
     s(   t d   W  5 Q R  S Q R X d S )NrH   r'   rE   ry   rx   rE   rF   wrapper   s    
z*run_sync_in_worker_thread.<locals>.wrapperr   )r   runsniffiocurrent_async_library_cvarsetr   )rx   r   r   ry   r   contextrE   r   rF   run_sync_in_worker_thread   s       r   "Callable[..., Awaitable[T_Retval]]r   )fnry   r@   c                   s8   dd fdd}t  tjjd tj|S )Nr;   rL   c               
     sN   dd fdd} t  4 I d H }|j|  W 5 Q I d H R X d} S )NrG   rL   c                    s   d}   I d H d S ro   rE   )__tracebackhide__)ry   r   retvalrE   rF   inner   s    z5run_async_from_thread.<locals>.wrapper.<locals>.innerT)rH   rl   r   r|   )r   nr   ry   r   r   )r   rF   r      s
    z&run_async_from_thread.<locals>.wrapperrH   )r   r   r   r   r   rH   from_thread)r   ry   r   rE   r   rF   run_async_from_thread   s    r   c                 G  s"   t jjt j| f| }tt|S rA   )rH   r   r   r   r   r   r;   )r   ry   r   rE   rE   rF   run_sync_from_thread  s    r   c                      sH   e Zd Zd dddZdd fddZddd	d
dddddZ  ZS )BlockingPortalrL   c                 C  s
   t | S rA   rB   rD   rE   rE   rF   rC   	  s    zBlockingPortal.__new__rG   c                   s   t    tj | _d S rA   )superrK   rH   r6   current_trio_token_tokenrN   	__class__rE   rF   rK     s    
zBlockingPortal.__init__r   tupledict[str, Any]r=   r   )rx   ry   r?   rw   futurer@   c              
   C  sH   t  }|tjjd tjj|jt| j	j
|d| j||||| jd d S )NrH   rv   )Z
trio_token)r   r   r   r   r   rH   r   r   r   Z_task_groupr|   
_call_funcr   )rJ   rx   ry   r?   rw   r   r   rE   rE   rF   _spawn_task_from_thread  s    z&BlockingPortal._spawn_task_from_thread)rd   re   rf   rC   rK   r   __classcell__rE   rE   r   rF   r     s   r   )eqc                   @  s6   e Zd ZU ded< ddddddZd	d
ddZdS )ReceiveStreamWrapperztrio.abc.ReceiveStream_streamN
int | Nonebytes	max_bytesr@   c              
     s~   z| j |I d H }W nV tjk
rB } zt|jW 5 d }~X Y n, tjk
rl } zt|jW 5 d }~X Y nX |rv|S td S rA   )r   Zreceive_somerH   r+   	__cause__r)   r,   rJ   r   dataru   rE   rE   rF   receive/  s    zReceiveStreamWrapper.receiverG   rL   c                   s   | j  I d H  d S rA   r   acloserN   rE   rE   rF   r   <  s    zReceiveStreamWrapper.aclose)N)rd   re   rf   __annotations__r   r   rE   rE   rE   rF   r   +  s   
r   c                   @  s4   e Zd ZU ded< dddddZddd	d
ZdS )SendStreamWrapperztrio.abc.SendStreamr   r   rG   itemr@   c              
     sr   z| j |I d H  W nV tjk
rB } zt|jW 5 d }~X Y n, tjk
rl } zt|jW 5 d }~X Y nX d S rA   )r   Zsend_allrH   r+   r   r)   rJ   r   ru   rE   rE   rF   sendD  s    zSendStreamWrapper.sendrL   c                   s   | j  I d H  d S rA   r   rN   rE   rE   rF   r   L  s    zSendStreamWrapper.acloseN)rd   re   rf   r   r   r   rE   rE   rE   rF   r   @  s   
r   c                   @  s   e Zd ZU ded< ded< ded< ded< dd	d
dZdd	ddZdd	ddZdd	ddZdddddZe	dd	ddZ
e	dd	ddZe	dd	ddZe	dd	ddZe	dd	d d!Zd"S )#Processztrio.Process_processzabc.ByteSendStream | None_stdinzabc.ByteReceiveStream | None_stdout_stderrrG   rL   c                   sT   | j r| j  I d H  | jr,| j I d H  | jrB| j I d H  |  I d H  d S rA   )r   r   r   r   waitrN   rE   rE   rF   r   W  s    zProcess.acloseintc                   s   | j  I d H S rA   )r   r   rN   rE   rE   rF   r   a  s    zProcess.waitc                 C  s   | j   d S rA   )r   	terminaterN   rE   rE   rF   r   d  s    zProcess.terminatec                 C  s   | j   d S rA   )r   killrN   rE   rE   rF   r   g  s    zProcess.killr	   )signalr@   c                 C  s   | j | d S rA   )r   send_signal)rJ   r   rE   rE   rF   r   j  s    zProcess.send_signalc                 C  s   | j jS rA   )r   pidrN   rE   rE   rF   r   m  s    zProcess.pidr   c                 C  s   | j jS rA   )r   
returncoderN   rE   rE   rF   r   q  s    zProcess.returncodec                 C  s   | j S rA   )r   rN   rE   rE   rF   stdinu  s    zProcess.stdinc                 C  s   | j S rA   )r   rN   rE   rE   rF   stdouty  s    zProcess.stdoutc                 C  s   | j S rA   )r   rN   rE   rE   rF   stderr}  s    zProcess.stderrN)rd   re   rf   r   r   r   r   r   r   rg   r   r   r   r   r   rE   rE   rE   rF   r   P  s&   

r   )cwdenvstart_new_sessionz#str | bytes | Sequence[str | bytes]zint | IO[Any] | Nonezstr | bytes | PathLike | NonezMapping[str, str] | None)	commandshellr   r   r   r   r   r   r@   c             
     sh   t | |||||||dI d H }|jr.t|jnd }	|jrBt|jnd }
|jrVt|jnd }t||	|
|S )N)r   r   r   r   r   r   r   )trio_open_processr   r   r   r   r   r   )r   r   r   r   r   r   r   r   processZstdin_streamZstdout_streamZstderr_streamrE   rE   rF   r:     s    
r:   c                      s"   e Zd Zdd fddZ  ZS )_ProcessPoolShutdownInstrumentrG   rL   c                   s   t    d S rA   )r   	after_runrN   r   rE   rF   r     s    z(_ProcessPoolShutdownInstrument.after_run)rd   re   rf   r   r   rE   rE   r   rF   r     s   r   &current_default_worker_process_limiterRunVarzset[Process]rG   )workersr@   c                   sz   zt tjI d H  W n` tjk
rt   | D ]}|jd kr*|  q*tdd | D ]}| I d H  qRW 5 Q R X Y nX d S )NT)rc   )	sleepmathinfrH   	Cancelledr   r   r2   r   )r   r   rE   rE   rF   _shutdown_process_pool  s    

r   c                 C  s   t jt|  d S rA   )rH   r6   Zspawn_system_taskr   )r   rE   rE   rF   #setup_process_pool_exit_at_shutdown  s    r   c                   @  sZ   e Zd ZdddddZddddZed	dd
dZddddZdddddZdS )_TrioSocketMixinTrioSocketTyperG   trio_socketr@   c                 C  s   || _ d| _d S rj   )_trio_socket_closedrJ   r   rE   rE   rF   rK     s    z_TrioSocketMixin.__init__rL   c                 C  s    | j r
t| j dk rtd S Nr   )r   r+   r   filenor)   rN   rE   rE   rF   _check_closed  s    z_TrioSocketMixin._check_closedsocket.socketc                 C  s   | j jS rA   )r   _sockrN   rE   rE   rF   _raw_socket  s    z_TrioSocketMixin._raw_socketc                   s"   | j  dkrd| _| j   d S )Nr   T)r   r   r   closerN   rE   rE   rF   r     s    z_TrioSocketMixin.acloseBaseExceptionr   )ru   r@   c                 C  sJ   t |tjrt|n2| j dk r0| jr0td nt |trBt|n|d S r   )
isinstancerH   r+   r   r   r   OSErrorr)   rJ   ru   rE   rE   rF   _convert_socket_error  s    
z&_TrioSocketMixin._convert_socket_errorN)	rd   re   rf   rK   r   rg   r   r   r   rE   rE   rE   rF   r     s   r   c                      sT   e Zd Zddd fddZdddd	d
dZdddddZddddZ  ZS )SocketStreamr   rG   r   c                   s$   t  | td| _td| _d S Nreading from
writing tor   rK   r1   _receive_guard_send_guardr   r   rE   rF   rK     s    
zSocketStream.__init__   r   r   r   c                   sr   | j b z| j|I d H }W n, tk
rJ } z| | W 5 d }~X Y nX |r`|W  5 Q R  S tW 5 Q R X d S rA   )r   r   recvr   r   r,   r   rE   rE   rF   r     s    zSocketStream.receiver   c                   st   | j d t|}|rfz| j|I d H }W n, tk
rV } z| | W 5 d }~X Y nX ||d  }qW 5 Q R X d S rA   )r   
memoryviewr   r   r   r   )rJ   r   viewZ
bytes_sentru   rE   rE   rF   r     s    zSocketStream.sendrL   c                   s   | j tj d S rA   )r   shutdownsocketSHUT_WRrN   rE   rE   rF   send_eof  s    zSocketStream.send_eof)r   )rd   re   rf   rK   r   r   r   r   rE   rE   r   rF   r     s   r   c                   @  s0   e Zd ZddddddZdddd	d
dZdS )UNIXSocketStreamr   ztuple[bytes, list[int]])msglenmaxfdsr@   c                   s6  t |tr|dk rtdt |tr,|dk r4tdtd}t I d H  | jp z,| j|t	||j
 I d H \}}}}W n, tk
r } z| | W 5 d }~X Y qRX |s|stqqRW 5 Q R X |D ]^\}	}
}|	tjks|
tjkrtd|d|	 d|
 ||d t|t||j
    q|t|fS )	Nr   z%msglen must be a non-negative integer   z!maxfds must be a positive integeriz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarray
checkpointr   r   recvmsgr   CMSG_LENitemsizer   r   r,   
SOL_SOCKET
SCM_RIGHTSr{   	frombyteslenlist)rJ   r   r   fdsmessageZancdataflagsaddrru   Z
cmsg_levelZ	cmsg_typeZ	cmsg_datarE   rE   rF   receive_fds  s0    
 &zUNIXSocketStream.receive_fdsr   zCollection[int | IOBase]rG   )r
  r	  r@   c                   s   |st d|st dg }|D ]2}t|tr:|| q t|tr ||  q td|}t I d H  | j` z*| j	
|gtjtj|fgI d H  W qW qt tk
r } z| | W 5 d }~X Y qtX qtW 5 Q R X d S )Nzmessage must not be emptyzfds must not be emptyr   )r   r   r   appendr   r   r   r   r   r   sendmsgr   r  r  r   r   )rJ   r
  r	  ZfilenosfdZfdarrayru   rE   rE   rF   send_fds   s2    



zUNIXSocketStream.send_fdsN)rd   re   rf   r  r  rE   rE   rE   rF   r     s   !r   c                      s0   e Zd Zdd fddZddddZ  ZS )	TCPSocketListenerr   
raw_socketc                   s"   t  tj| td| _d S Nzaccepting connections fromr   rK   rH   r   Zfrom_stdlib_socketr1   _accept_guardrJ   r  r   rE   rF   rK   B  s    zTCPSocketListener.__init__r   rL   c                   sr   | j L z| j I d H \}}W n, tk
rL } z| | W 5 d }~X Y nX W 5 Q R X |tjtjd t	|S )Nr   )
r  r   acceptr   r   
setsockoptr   IPPROTO_TCPTCP_NODELAYr   rJ   r   Z_addrru   rE   rE   rF   r  F  s    &zTCPSocketListener.acceptrd   re   rf   rK   r  r   rE   rE   r   rF   r  A  s   r  c                      s0   e Zd Zdd fddZddddZ  ZS )	UNIXSocketListenerr   r  c                   s"   t  tj| td| _d S r  r  r  r   rE   rF   rK   R  s    zUNIXSocketListener.__init__r   rL   c                   s`   | j L z| j I d H \}}W n, tk
rL } z| | W 5 d }~X Y nX W 5 Q R X t|S rA   )r  r   r  r   r   r   r  rE   rE   rF   r  V  s    &zUNIXSocketListener.acceptr  rE   rE   r   rF   r  Q  s   r  c                      sB   e Zd Zddd fddZdddd	Zd
ddddZ  ZS )	UDPSocketr   rG   r   c                   s$   t  | td| _td| _d S r   r   r   r   rE   rF   rK   a  s    
zUDPSocket.__init__ztuple[bytes, IPSockAddrType]rL   c                   st   | j d z0| jdI d H \}}|t|fW W  5 Q R  S  tk
rd } z| | W 5 d }~X Y nX W 5 Q R X d S Nr   )r   r   recvfromr.   r   r   )rJ   r   r  ru   rE   rE   rF   r   f  s    zUDPSocket.receiver4   r   c                   sZ   | j J z| jj| I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rA   )r   r   sendtor   r   r   rE   rE   rF   r   n  s
    zUDPSocket.sendrd   re   rf   rK   r   r   r   rE   rE   r   rF   r   `  s   r   c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )ConnectedUDPSocketr   rG   r   c                   s$   t  | td| _td| _d S r   r   r   r   rE   rF   rK   w  s    
zConnectedUDPSocket.__init__r   rL   c                   sd   | j T z | jdI d H W W  5 Q R  S  tk
rT } z| | W 5 d }~X Y nX W 5 Q R X d S r!  )r   r   r   r   r   r   rE   rE   rF   r   |  s
     zConnectedUDPSocket.receiver   c                   sZ   | j J z| j|I d H  W n, tk
rJ } z| | W 5 d }~X Y nX W 5 Q R X d S rA   )r   r   r   r   r   r   rE   rE   rF   r     s
    zConnectedUDPSocket.sendr$  rE   rE   r   rF   r%  v  s   r%  strr   zIPSockAddrType | None)hostportlocal_addressr@   c                   s   d| krt jnt j}tj  |}|t jt jd |rF||I d H  z|| |fI d H  W n t	k
r|   |
   Y nX t|S )N:r   )r   AF_INET6AF_INETrH   r  r  r  bindconnectr   r   r   )r'  r(  r)  familyr   rE   rE   rF   connect_tcp  s    r0  )pathr@   c                   sJ   t jtj}z|| I d H  W n tk
r@   |   Y nX t|S rA   )rH   r   AF_UNIXr.  r   r   r   )r1  r   rE   rE   rF   connect_unix  s    r3  zsocket.AddressFamilyzUDPSocket | ConnectedUDPSocket)r/  r)  remote_address
reuse_portr@   c                   sd   t jj| tjd}|r(|tjtjd |r<||I d H  |rX||I d H  t|S t	|S d S )N)r/  typer   )
rH   r   
SOCK_DGRAMr  r  SO_REUSEPORTr-  r.  r%  r   )r/  r)  r4  r5  r   rE   rE   rF   create_udp_socket  s    r9  r   )sockr@   c              
     sj   zt | I d H  W nR tjk
rF } zt |jd W 5 d }~X Y n  tjk
rd   tdd Y nX d S )Nr   )r8   rH   r+   with_traceback__traceback__r*   r:  ru   rE   rE   rF   wait_socket_readable  s     r>  c              
     sj   zt | I d H  W nR tjk
rF } zt |jd W 5 d }~X Y n  tjk
rd   tdd Y nX d S )Nr   )r9   rH   r+   r;  r<  r*   r=  rE   rE   rF   wait_socket_writable  s     r?  c                   @  s`   e Zd Zd dddZddddZdddd	Zddd
dZddddZddddZdS )r0   rL   c                 C  s
   t | S rA   rB   r   rE   rE   rF   rC     s    zEvent.__new__rG   c                 C  s   t  | _d S rA   )rH   r0   _Event__originalrN   rE   rE   rF   rK     s    zEvent.__init__r`   c                 C  s
   | j  S rA   )r@  is_setrN   rE   rE   rF   rA    s    zEvent.is_setc                   s   | j  I d H S rA   )r@  r   rN   rE   rE   rF   r     s    z
Event.waitr"   c                 C  s   | j  }t|jdS )N)tasks_waiting)r@  
statisticsr"   rB  )rJ   Zorig_statisticsrE   rE   rF   rC    s    
zEvent.statisticsr&   c                 C  s   | j   t| jS rA   )r@  r   r&   rN   rE   rE   rF   r     s    
z	Event.setN)	rd   re   rf   rC   rK   rA  r   rC  r   rE   rE   rE   rF   r0     s   r0   c                   @  s  e Zd Zddd dddZddddd	d
ddZd	dddZdddd	dddZeddddZej	dd	dddZeddddZ
eddddZd dd!d"Zdd d#d$d%Zd	dd&d'Zdd	d#d(d)Zd	dd*d+Zdd	d#d,d-Zd.dd/d0ZdS )1r/   r=   )ry   r?   r@   c                 O  s
   t | S rA   rB   )rD   ry   r?   rE   rE   rF   rC     s    zCapacityLimiter.__new__Nr>   r   r   rG   )ry   r>   r@   c                G  s   |pt j| | _d S rA   )rH   r/   _CapacityLimiter__original)rJ   r>   ry   rE   rE   rF   rK     s    zCapacityLimiter.__init__rL   c                   s   | j  I d H S rA   )rE  rp   rN   rE   rE   rF   rp     s    zCapacityLimiter.__aenter__rO   rP   rQ   rS   c                   s   | j |||I d H  d S rA   )rE  rr   rX   rE   rE   rF   rr     s    zCapacityLimiter.__aexit__rZ   c                 C  s   | j jS rA   rE  total_tokensrN   rE   rE   rF   rG    s    zCapacityLimiter.total_tokensr]   c                 C  s   || j _d S rA   rF  r_   rE   rE   rF   rG    s    r   c                 C  s   | j jS rA   )rE  borrowed_tokensrN   rE   rE   rF   rH  
  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j jS rA   )rE  available_tokensrN   rE   rE   rF   rI    s    z CapacityLimiter.available_tokensr&   c                 C  s   | j   t| jS rA   )rE  acquire_nowaitr&   rN   rE   rE   rF   rJ    s    
zCapacityLimiter.acquire_nowait)borrowerr@   c                 C  s   | j | t| jS rA   )rE  acquire_on_behalf_of_nowaitr&   rJ   rK  rE   rE   rF   rL    s    z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   | j  I d H  d S rA   )rE  acquirerN   rE   rE   rF   rN    s    zCapacityLimiter.acquirec                   s   | j |I d H  d S rA   )rE  acquire_on_behalf_ofrM  rE   rE   rF   rO    s    z$CapacityLimiter.acquire_on_behalf_ofc                 C  s
   | j  S rA   )rE  releaserN   rE   rE   rF   rP     s    zCapacityLimiter.releasec                 C  s   | j |S rA   )rE  release_on_behalf_ofrM  rE   rE   rF   rQ  #  s    z$CapacityLimiter.release_on_behalf_ofr!   c                 C  s"   | j  }t|j|j|j|jdS )N)rH  rG  	borrowersrB  )rE  rC  r!   rH  rG  rR  rB  )rJ   origrE   rE   rF   rC  &  s    
zCapacityLimiter.statistics)rd   re   rf   rC   rK   rp   rr   rg   rG  rh   rH  rI  rJ  rL  rN  rO  rP  rQ  rC  rE   rE   rE   rF   r/     s(   r/   _capacity_limiter_wrapperrL   c                  C  sB   z
t  W S  tk
r<   ttj d} t |  |  Y S X d S )NrD  )rT  getLookupErrorr/   rH   Z	to_threadcurrent_default_thread_limiterr   )r   rE   rE   rF   rW  3  s    

rW  c                   @  sb   e Zd ZU ded< ddddZd ddd	Zd
ddddddZd dddZddddZdS )_SignalReceiverzAsyncIterator[int]	_iteratorztuple[Signals, ...]signalsc                 C  s
   || _ d S rA   )_signals)rJ   r[  rE   rE   rF   rK   F  s    z_SignalReceiver.__init__rL   c                 C  s   t j| j | _| j | _| S rA   )rH   open_signal_receiverr\  _cmrM   rY  rN   rE   rE   rF   rM   I  s    z_SignalReceiver.__enter__rO   rP   rQ   rR   rS   c                 C  s   | j |||S rA   )r^  rW   rX   rE   rE   rF   rW   N  s    z_SignalReceiver.__exit__c                 C  s   | S rA   rE   rN   rE   rE   rF   	__aiter__V  s    z_SignalReceiver.__aiter__r	   c                   s   | j  I d H }t|S rA   )rY  	__anext__r	   )rJ   signumrE   rE   rF   r`  Y  s    z_SignalReceiver.__anext__N)	rd   re   rf   r   rK   rM   rW   r_  r`  rE   rE   rE   rF   rX  C  s   
rX  r	   )r[  r@   c                  G  s   t | S rA   )rX  rZ  rE   rE   rF   r]  ^  s    r]  r#   c                  C  s<   t  } d }| jr&| jjr&t| jj}tt| || j| jS rA   )trio_lowlevelcurrent_taskZparent_nurseryparent_taskidr#   rw   coro)taskZ	parent_idrE   rE   rF   get_current_taskg  s
    rh  zlist[TaskInfo]c               	   C  s|   t  } tt| d | j| jg}| j}|rxg }|D ]>}|jD ]2}|tt|t|j	|j|j |
|j q<q2|}q&|S rA   )rb  Zcurrent_root_taskr#   re  rw   rf  Zchild_nurseriesZchild_tasksr  rd  extend)Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZnurseryrg  rE   rE   rF   get_running_tasksq  s    
rj  zAwaitable[None]c                  C  s   dd l } | j S r   )Ztrio.testingtestingwait_all_tasks_blocked)rH   rE   rE   rF   rl    s    rl  c                   @  s   e Zd ZdddddZddddZd	d
dddddZdddddZddddZdddddddZddddZ	ddddd d!Z
d"dddd#d$Zd%ddd&d'd(Zd)S )*
TestRunnerr   rG   )optionsr@   c                 K  s>   ddl m} ddlm} | | _| | _d | _d | _|| _d S )Nr   )deque)Queue)	collectionsro  queuerp  _call_queue_result_queue_stop_eventrq   _options)rJ   rn  ro  rp  rE   rE   rF   rK     s    zTestRunner.__init__rL   c              
     sB   t  | _t  4 I d H | _| j I d H  W 5 Q I d H R X d S rA   )rH   r0   ru  rl   rq   r   rN   rE   rE   rF   
_trio_main  s    
zTestRunner._trio_mainz Callable[..., Awaitable[object]]r   dict)rx   ry   r?   r@   c              
     s\   z|||I d H }W n2 t k
rF } z| jt| W 5 d }~X Y nX | jt| d S rA   )r   rt  r  r   r   )rJ   rx   ry   r?   r   ru   rE   rE   rF   r     s
    "zTestRunner._call_funcr=   )outcomer@   c                 C  s
   d | _ d S rA   )rq   )rJ   ry  rE   rE   rF   _main_task_finished  s    zTestRunner._main_task_finishedztrio.Nurseryc                 C  sL   | j d krFtjj| jf| jj| jd| j | j d krF| j	   q.| j S )N)Zrun_sync_soon_threadsafeZdone_callback)
rq   rH   r6   Zstart_guest_runrw  rs  putrz  rv  rU  rN   rE   rE   rF   _get_nursery  s    

zTestRunner._get_nurseryr   r;   c                 O  s<   |   | j||| | js*| j   q| j }| S rA   )r|  r|   r   rt  rs  rU  popunwrap)rJ   rx   ry   r?   ry  rE   rE   rF   _call  s
    
zTestRunner._callc                 C  s,   | j r(| j   | jd k	r(| j   qd S rA   )ru  r   rq   rs  rU  rN   rE   rE   rF   r     s    

zTestRunner.closez,Callable[..., AsyncGenerator[T_Retval, Any]]r   zIterable[T_Retval])fixture_funcr?   r@   c                 #  sF   ddd fddt  fdd}|V    d S )NzTaskStatus[T_Retval]rG   )task_statusr@   c                   sv    f }| d I d H }| |  I d H  z| d I d H  W n tk
rZ   Y nX | I d H  tdd S )Nz$Async generator fixture did not stop)asendstartedr   StopAsyncIterationr   r{   )r  agenr   )r  r?   teardown_eventrE   rF   fixture_runner  s    

z7TestRunner.run_asyncgen_fixture.<locals>.fixture_runnerc                     s      S rA   )r|  r~   rE   )r  rJ   rE   rF   <lambda>      z1TestRunner.run_asyncgen_fixture.<locals>.<lambda>)rH   r0   r  r   )rJ   r  r?   Zfixture_valuerE   )r  r  r?   rJ   r  rF   run_asyncgen_fixture  s
    zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |f|S rA   r  )rJ   r  r?   rE   rE   rF   run_fixture  s    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcr?   r@   c                 C  s   | j |f| d S rA   r  )rJ   r  r?   rE   rE   rF   run_test  s    zTestRunner.run_testN)rd   re   rf   rK   rw  r   rz  r|  r  r   r  r  r  rE   rE   rE   rF   rm    s   


rm  )N)
__future__r   r   r   r   concurrent.futuresr   contextvarsr   dataclassesr   	functoolsr   ior   osr   r   r	   typesr
   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztrio.from_threadrH   ry  r   r   r   Ztrio.socketr   r   Ztrio.to_threadr    r!   r"   r#   r$   Z_core._compatr%   r&   Z_core._eventloopr(   Z_core._exceptionsr)   r*   r+   r,   r-   ZBaseExceptionGroupZ_core._socketsr.   Z_core._synchronizationr/   ZBaseCapacityLimiterr0   Z	BaseEventr1   Z_core._tasksr2   ZBaseCancelScoper3   r4   Ztrio_typingr5   r6   rb  ImportErrorr7   Ztrio.hazmatr8   r9   Ztrio.lowlevelr:   r   AttributeErrorr;   r&  r<   r   r   current_tokenr   r   r   CancelledErrorr   Zcheckpoint_if_cancelledZcancel_shielded_checkpointZcurrent_effective_deadlinecurrent_timers   ri   r   r   r   r   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r   r   r   ZSocketListenerr  r  r   r%  r0  r3  r9  getaddrinfogetnameinfor>  r?  rT  rW  rX  r]  rh  rj  rl  rm  rE   rE   rE   rF   <module>   s    H
16#8"	!C 	B	
