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

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