Ë
    :vžj+_  ã                  ó@  — d Z ddlm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mZmZmZmZ ddlZdd
lmZmZmZ  G d„ de«      Z G d„ d«      Z G d„ deej6                  «      Z G d„ d«      Z edd¬«      Z G d„ deej>                  e   «      Z y)z%Future-returning APIs for coroutines.é    )ÚannotationsN)ÚFuture)Údeque)Ú	Awaitable)Úpartial)Úchain)ÚAnyÚCallableÚ
NamedTupleÚTypeVarÚcast)ÚEVENTSÚPOLLINÚPOLLOUTc                  óJ   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   y)Ú_FutureEventr   ÚfutureÚstrÚkindÚtupleÚargsÚdictÚkwargsr	   ÚmsgÚtimerN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú\/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/zmq/_future.pyr   r      s    … ØƒNØ
ƒIØ
ƒKØƒLØ	ƒHØ„Jr!   r   c                  óD   — e Zd ZU dZdZded<   ded<   d
d„Zd
d„Zddd	„Zy)Ú_AsynczMixin for common async logicNr	   Ú_current_loopztype[Future]Ú_Futurec                ó  — | j                   €<| j                  «       | _         | j                  | j                   «       | j                   S | j                  «       }|| j                   ur|| _         | j                  |«       |S )z‡Get event loop

        Notice if event loop has changed,
        and register init_io_state on activation of a new event loop
        )r%   Ú_default_loopÚ_init_io_state)ÚselfÚcurrent_loops     r"   Ú	_get_loopz_Async._get_loop1   sy   € ð ×ÑÐ%Ø!%×!3Ñ!3Ó!5ˆDÔØ×Ñ × 2Ñ 2Ô3Ø×%Ñ%Ð%Ø×)Ñ)Ó+ˆØ˜t×1Ñ1Ñ1à!-ˆDÔØ×Ñ Ô-ØÐr!   c                ó   — t        d«      ‚)Nz!Must be implemented in a subclass©ÚNotImplementedError)r*   s    r"   r(   z_Async._default_loopB   s   € Ü!Ð"EÓFÐFr!   c                 ó   — y ©Nr    ©r*   Úloops     r"   r)   z_Async._init_io_stateE   s   € Ør!   )Úreturnr	   r1   )r4   ÚNone)	r   r   r   Ú__doc__r%   r   r,   r(   r)   r    r!   r"   r$   r$   +   s%   … Ù&à€M�3ÓØÓóó"Gõr!   r$   c                  ó`   ‡ — e Zd ZU dZded<   ded<   ded<   ded<   dd	„Zdd
„Zddˆ fd„Zˆ xZS )Ú_AsyncPollerz:Poller that returns a Future on poll, instead of blocking.ztype[_AsyncSocket]Ú_socket_classÚintÚ_READÚ_WRITEz	list[Any]Úraw_socketsc                ó   — t        «       ‚)z"Schedule callback for a raw socketr.   )r*   r3   ÚsocketÚevtÚfs        r"   Ú_watch_raw_socketz_AsyncPoller._watch_raw_socketQ   ó   € ä!Ó#Ð#r!   c                ó   — t        «       ‚)z$Unschedule callback for a raw socketr.   )r*   r3   Úsocketss      r"   Ú_unwatch_raw_socketsz!_AsyncPoller._unwatch_raw_socketsU   rC   r!   c                ó¨  •‡ ‡‡‡‡‡‡— ‰ j                  «       Š|dk(  r#	 t        ‰‰ �	  d«      }‰j                  |«       ‰S ‰ j                  «       Š‰ j                  «       Šg Šˆfd„}‰j                  ˆˆˆ fd„«       g Šˆfd„}‰ j                  D �]  \  }}t        |t        j                  «      r�t        |‰ j                  «      s,‰ j                  j                  |«      }‰j                  |«       |t        j                  z  r|j!                  d‰¬«       |t        j"                  z  sŒ�|j%                  d‰¬«       Œ±‰j                  |«       d}|t        j                  z  r|‰ j&                  z  }|t        j"                  z  r|‰ j(                  z  }‰ j+                  ‰|||«       �Œ ˆˆˆ ˆfd„}	‰j                  |	«       ‰r‰j                  |«       |�6|dkD  r1ˆfd	„}
‰j-                  d
|z  |
«      Šˆˆfd„}‰j                  |«       ˆfd„}‰j                  |«       ‰S # t        $ r}‰j                  |«       Y d}~‰S d}~ww xY w)z Return a Future for a poll eventr   Nc                 óJ   •— ‰j                  «       s‰j                  d «       y y r1   ©ÚdoneÚ
set_result)r   Úwatchers    €r"   Úwake_rawz#_AsyncPoller.poll.<locals>.wake_rawm   s   ø€ Ø—<‘<”>Ø×"Ñ" 4Õ(ð "r!   c                ó*   •—  ‰j                   ‰g‰¢­Ž S r1   )rF   )rA   r3   r=   r*   s    €€€r"   Ú<lambda>z#_AsyncPoller.poll.<locals>.<lambda>r   s   ø€ Ð/�d×/Ñ/°ÐC°{ÓCr!   c                ó4   •— ‰D ]  }|j                  «        Œ y r1   )Ú_clear_io_state)rA   ÚsÚwrapped_socketss     €r"   Ú_clear_wrapper_ioz,_AsyncPoller.poll.<locals>._clear_wrapper_iow   s   ø€ Û$�Ø×!Ñ!Õ#ñ %r!   Úpoll©r   c                ó‚  •— ‰j                  «       ry ‰j                  «       r	 ‰j                  «        y ‰j	                  «       r ‰j                  ‰j	                  «       «       y 	 t        t        ‰�#  d«      }‰j                  |«       y # t        $ r Y y w xY w# t        $ r}‰j                  |«       Y d }~y d }~ww xY w©Nr   )rJ   Ú	cancelledÚcancelÚRuntimeErrorÚ	exceptionÚset_exceptionÚsuperr8   rU   rK   Ú	Exception)rA   ÚresultÚeÚ	__class__r   r*   rL   s      €€€€r"   Úon_poll_readyz(_AsyncPoller.poll.<locals>.on_poll_readyŽ   s°   ø€ Ø�{‰{Œ}ØØ× Ñ Ô"ðØ—M‘M”Oð Ø× Ñ Ô"Ø×$Ñ$ W×%6Ñ%6Ó%8Õ9ð.Ü"¤<°Ñ;¸AÓ>�Fð ×%Ñ% fÕ-øô $ò àØðûô !ò ,Ø×(Ñ(¨×+Ñ+ûð,ús)   ¤B Á&B Â	BÂBÂ	B>Â#B9Â9B>c                 óJ   •— ‰ j                  «       s‰ j                  d «       y y r1   rI   )rL   s   €r"   Útrigger_timeoutz*_AsyncPoller.poll.<locals>.trigger_timeout©   s   ø€ Ø—|‘|”~Ø×&Ñ& tÕ,ð &r!   çü©ñÒMbP?c                ób   •— t        ‰d«      r‰j                  «        y ‰j                  ‰«       y )NrZ   )ÚhasattrrZ   Úremove_timeout)rA   r3   Útimeout_handles    €€r"   Úcancel_timeoutz)_AsyncPoller.poll.<locals>.cancel_timeout¯   s'   ø€ Ü˜>¨8Ô4Ø"×)Ñ)Õ+à×'Ñ'¨Õ7r!   c                óH   •— ‰j                  «       s‰j                  «        y y r1   )rJ   rZ   )rA   rL   s    €r"   Úcancel_watcherz)_AsyncPoller.poll.<locals>.cancel_watcher·   s   ø€ Ø—<‘<”>Ø—‘Õ ð "r!   )r&   r^   rU   rK   r_   r]   r,   Úadd_done_callbackrE   Ú
isinstanceÚ_zmqÚSocketr9   Úfrom_socketÚappendr   Ú_add_recv_eventr   Ú_add_send_eventr;   r<   rB   Ú
call_later)r*   Útimeoutr`   ra   rM   rT   r?   Úmaskr@   rc   re   rk   rm   r   r3   r=   rj   rL   rS   rb   s   `            @@@@@@€r"   rU   z_AsyncPoller.pollY   s  ÿ€ à—‘“ˆØ�aŠ<ð*Ü™™ a›�ð ×!Ñ! &Ô)ØˆMà�~‰~Óˆð —,‘,“.ˆð "$ˆô	)ð 	×!Ñ!ÝCô	
ð /1ˆô	$ð !ŸL�L‰LˆF�DÜ˜&¤$§+¡+Ô.Ü! &¨$×*<Ñ*<Ô=à!×/Ñ/×;Ñ;¸FÓC�FØ#×*Ñ*¨6Ô2Øœ$Ÿ+™+Ò%Ø×*Ñ*¨6¸'Ð*ÔBØœ$Ÿ,™,Ó&Ø×*Ñ*¨6¸'Ð*ÕBà×"Ñ" 6Ô*Ø�Øœ$Ÿ+™+Ò%Ø˜4Ÿ:™:Ñ%�CØœ$Ÿ,™,Ò&Ø˜4Ÿ;™;Ñ&�CØ×&Ñ& t¨V°S¸(ÖCð# )÷&	.ð( 	×!Ñ! -Ô0áØ×%Ñ%Ð&7Ô8àÐ 7¨Q¢;ô-ð "Ÿ_™_¨T°G©^¸_ÓMˆNõ8ð ×$Ñ$ ^Ô4ô	!ð 	× Ñ  Ô0àˆøô} ò (Ø×$Ñ$ Q×'Ð'ð ˆMûð	(ús   ŸH, È,	IÈ5IÉI)
r3   r	   r?   r	   r@   r:   rA   r
   r4   r5   )r3   r	   rE   r	   r4   r5   )éÿÿÿÿ)r4   z Awaitable[list[tuple[Any, int]]])	r   r   r   r6   r   rB   rF   rU   Ú__classcell__©rb   s   @r"   r8   r8   I   s2   ø… ÙDà%Ó%ØƒJØƒKØÓó$ó$÷dò dr!   r8   c                  ó   — e Zd Zed„ «       Zy)Ú_NoTimerc                  ó   — y r1   r    r    r!   r"   rZ   z_NoTimer.cancelÁ   s   € àr!   N)r   r   r   ÚstaticmethodrZ   r    r!   r"   r}   r}   À   s   „ Øñó ñr!   r}   ÚTÚ_AsyncSocket)Úboundc                  óL  ‡ — e Zd ZU dZdZdZded<   eZdZ		 	 	 	 d 	 	 	 d!ˆ fd„Z
ed"d#d„«       Zd"d$ˆ fd„Zej                  j                  j                   e_        ˆ fd„Zej                  j"                  j                   e_        	 d%	 	 	 	 	 	 	 d&d	„Z	 d%	 	 	 	 	 	 	 d'd
„Zdddœ	 	 	 	 	 d(d„Z	 d%	 	 	 	 	 	 	 d)d„Z	 	 	 d%	 	 	 	 	 	 	 	 	 	 	 d*d„Zd„ Zdej0                  fd+d„Zd„ Zd„ Zed"d„«       Zddddœ	 	 	 	 	 	 	 	 	 d,d„Zd-d„Zd„ Z d„ Z!d.d„Z"d"d„Z#d„ Z$d„ Z%d„ Z&d"d„Z'd„ Z(ˆ xZ)S )/r�   Nr   ú_zmq.SocketÚ_shadow_sockc                óò  •— t        |t        j                  «      rd |}}|�"t        ‰| �  |j
                  ¬«       || _        n?t        ‰| �  ||fi |¤Ž t        j                  j                  | j
                  «      | _        |�3t        j                  | j                  j                  › d�t        d¬«       t        «       | _        t        «       | _        d| _        | j                  j"                  | _        y )N)Úshadowz^(io_loop) argument is deprecated in pyzmq 22.2. The currently active loop will always be used.é   )Ú
stacklevelr   )ro   rp   rq   r^   Ú__init__Ú
underlyingr…   r‡   ÚwarningsÚwarnrb   r   ÚDeprecationWarningr   Ú_recv_futuresÚ_send_futuresÚ_stateÚFDÚ_fd)r*   ÚcontextÚsocket_typeÚio_loopÚ_from_socketr   rb   s         €r"   rŠ   z_AsyncSocket.__init__Ó   sÓ   ø€ ô �gœtŸ{™{Ô+Ø%)¨7�\ˆGØÐ#Ü‰GÑ L×$;Ñ$;ÐÔ<Ø ,ˆDÕä‰GÑ˜W kÑ<°VÒ<Ü $§¡× 2Ñ 2°4·?±?Ó CˆDÔàÐÜ�M‰MØ—>‘>×*Ñ*Ð+ð ,Bð Bä"Øõ	ô #›WˆÔÜ"›WˆÔØˆŒØ×$Ñ$×'Ñ'ˆ�r!   c                ó   —  | ||¬«      S )z.Create an async socket from an existing Socket)r—   r–   r    )Úclsr?   r–   s      r"   rr   z_AsyncSocket.from_socketð   s   € ñ  °Ô8Ð8r!   c                óp  •— | j                   sŠ| j                  �~t        t        | j                  xs g | j
                  xs g «      «      }|D ]8  }|j                  j                  «       rŒ	 |j                  j                  «        Œ: | j                  «        t        ‰| �1  |¬«       y # t        $ r Y Œgw xY w)N)Úlinger)Úclosedr“   Úlistr   r�   r�   r   rJ   rZ   r[   rQ   r^   Úclose)r*   r›   Ú
event_listÚeventrb   s       €r"   rž   z_AsyncSocket.closeõ   sž   ø€ Ø�{Š{˜tŸx™xÐ3Ü-1Ü�d×(Ñ(Ò.¨B°×0BÑ0BÒ0HÀbÓIó.ˆJó $�Ø—|‘|×(Ñ(Õ*ðØŸ™×+Ñ+Õ-ð $ð × Ñ Ô"Ü‰‰˜VˆÕ$øô	 (ò áðús   Á,B)Â)	B5Â4B5c                óZ   •— t         ‰| �  |«      }|t        k(  r| j                  |«       |S r1   )r^   Úgetr   Ú_schedule_remaining_events)r*   Úkeyr`   rb   s      €r"   r¢   z_AsyncSocket.get  s+   ø€ Ü‘‘˜SÓ!ˆØ”&Š=Ø×+Ñ+¨FÔ3Øˆr!   c                ó@   — | j                  dt        |||¬«      ¬«      S )zvReceive a complete multipart zmq message.

        Returns a Future whose result will be a multipart message.
        Úrecv_multipart©ÚflagsÚcopyÚtrack©r   ©rt   r   ©r*   r¨   r©   rª   s       r"   r¦   z_AsyncSocket.recv_multipart  s*   € ð ×#Ñ#Ø¤T°¸DÈÔ%Nð $ó 
ð 	
r!   c                ó@   — | j                  dt        |||¬«      ¬«      S )z™Receive a single zmq frame.

        Returns a Future, whose result will be the received frame.

        Recommend using recv_multipart instead.
        Úrecvr§   r«   r¬   r­   s       r"   r¯   z_AsyncSocket.recv  s*   € ð ×#Ñ#Øœ4 e°$¸eÔDð $ó 
ð 	
r!   ©Únbytesr¨   c              óB   — | j                  d|ft        ||¬«      ¬«      S )zŽReceive a single zmq frame into a pre-allocated buffer.

        Returns a Future, whose result will be the number of bytes received.
        Ú	recv_intor°   )r   r   r¬   )r*   Úbufr±   r¨   s       r"   r³   z_AsyncSocket.recv_into&  s,   € ð ×#Ñ#Ø˜s˜f¬T¸ÀuÔ-Mð $ó 
ð 	
r!   c                óH   — ||d<   ||d<   ||d<   | j                  d||¬«      S )zqSend a complete multipart zmq message.

        Returns a Future that resolves when sending is complete.
        r¨   r©   rª   Úsend_multipart©r   r   )ru   )r*   Ú	msg_partsr¨   r©   rª   r   s         r"   r¶   z_AsyncSocket.send_multipart1  s8   € ð  ˆˆw‰Øˆˆv‰Øˆˆw‰Ø×#Ñ#Ð$4¸)ÈFÐ#ÓSÐSr!   c                ó‚   — ||d<   ||d<   ||d<   |j                  t        |||¬«      «       | j                  d||¬«      S )z”Send a single zmq frame.

        Returns a Future that resolves when sending is complete.

        Recommend using send_multipart instead.
        r¨   r©   rª   r§   Úsendr·   )Úupdater   ru   )r*   Údatar¨   r©   rª   r   s         r"   rº   z_AsyncSocket.send=  sL   € ð  ˆˆw‰Øˆˆv‰Øˆˆw‰Ø�‰”d ¨T¸Ô?Ô@Ø×#Ñ# F°¸VÐ#ÓDÐDr!   c                óŠ   ‡‡‡— | j                  «       Šˆˆˆfd„}‰j                  |«       ˆˆfd„}‰j                  |«       ‰S )zDeserialize with Futuresc                ó¬  •— ‰j                  «       rB‰j                  «       s1‰j                  «       €!t        j                  d‰› d‰› d�t
        «       y‰j                  «       r ‰j                  ‰j                  «       «       y‰j                  «       }	  ‰|«      }‰j                  |«       y# t        $ r}‰j                  |«       Y d}~yd}~ww xY w)z+Chain result through serialization to recvdNzFuture z completed while awaiting z. A message has been dropped!)
rJ   rY   r\   rŒ   r�   ÚRuntimeWarningr]   r`   rK   r_   )Ú_r´   Úloadedra   rA   ÚloadÚrecvds       €€€r"   Ú_chainz)_AsyncSocket._deserialize.<locals>._chainU  s³   ø€ à�v‰vŒxð —‘Ô(¨U¯_©_Ó->Ð-FÜ—M‘Mð " ! Ð$>¸u¸gÐEbÐcÜ&ô	ð Ø�‰Ô Ø—‘ §¡Ó 1Õ2à—l‘l“n�ð)Ù! #›Y�Fð —L‘L Õ(øô !ò 'Ø—O‘O A×&Ñ&ûð'ús   ÂB/ Â/	CÂ8CÃCc                ój   •— ‰j                  «       ry‰j                  «       r‰j                  «        yy)z"Chain cancellation from f to recvdN)rJ   rY   rZ   )rÀ   rA   rÃ   s    €€r"   Ú_chain_cancelz0_AsyncSocket._deserialize.<locals>._chain_cancelp  s&   ø€ à�z‰zŒ|ØØ�{‰{Œ}Ø—‘•ð r!   )r&   rn   )r*   rÃ   rÂ   rÄ   rÆ   rA   s    ``  @r"   Ú_deserializez_AsyncSocket._deserializeQ  s=   ú€ à�L‰L‹Nˆö	)ð2 	×Ñ Ô'õ	ð 	
×Ñ˜MÔ*àˆr!   c                óš  ‡ ‡‡— ‰ j                   r#t        j                  t        j                  «      ‚‰ j	                  «       }|j                  ‰ |«       t        t        |j                  |«      «      Š‰ j                  «       Šˆˆˆ fd„}‰j                  «       r	 |‰«       n‰j                  |«       ˆfd„}‰j                  |«       ‰S )zSpoll the socket for events

        returns a Future for the poll results.
        c                ó^  •— ‰j                  «       ry ‰j                  «       r	 ‰j                  «        y | j	                  «       r ‰j                  ‰j	                  «       «       y t        ‰j                  «       «      }‰j                  |j                  ‰d«      «       y # t        $ r Y y w xY wrX   )
rJ   rY   rZ   r[   r\   r]   r   r`   rK   r¢   )rA   Úevtsr   Úpoll_futurer*   s     €€€r"   Úunwrap_resultz(_AsyncSocket.poll.<locals>.unwrap_resultŠ  s‘   ø€ Ø�{‰{Œ}ØØ×$Ñ$Ô&ðØ—M‘M”Oð Ø�{‰{Œ}Ø×$Ñ$ [×%:Ñ%:Ó%<Õ=ä˜K×.Ñ.Ó0Ó1�Ø×!Ñ! $§(¡(¨4°Ó"3Õ4øô $ò àØðús   ¤B  Â 	B,Â+B,c                óh   •— ‰j                  «       s	 ‰j                  «        yy# t        $ r Y yw xY w)z4Cancel underlying poll if request has been cancelledN)rJ   rZ   r[   )r   rË   s    €r"   Úcancel_pollz&_AsyncSocket.poll.<locals>.cancel_poll   s9   ø€ à×#Ñ#Ô%ðØ×&Ñ&Õ(ð &øô $ò áðús   “% ¥	1°1)rœ   rp   ÚZMQErrorÚENOTSUPÚ_poller_classÚregisterr   r   rU   r&   rJ   rn   )r*   rw   r¨   ÚprÌ   rÎ   r   rË   s   `     @@r"   rU   z_AsyncSocket.poll{  s�   ú€ ð �;Š;Ü—-‘-¤§¡Ó-Ð-à×ÑÓ ˆØ	�
‰
�4˜ÔÜœ6 1§6¡6¨'£?Ó3ˆà—‘“ˆö	5ð  ×ÑÔá˜+Õ&à×)Ñ)¨-Ô8ô	ð 	× Ñ  Ô-àˆr!   c                ó2   ‡— ˆfd„}| j                  ||«      S )z'Add a timeout for a send or recv Futurec                 ón   •— ‰ j                  «       ry ‰ j                  t        j                  «       «       y r1   )rJ   r]   rp   ÚAgainrV   s   €r"   Úfuture_timeoutz1_AsyncSocket._add_timeout.<locals>.future_timeout°  s%   ø€ Ø�{‰{Œ}àð × Ñ ¤§¡£Õ.r!   )Ú_call_later)r*   r   rw   r×   s    `  r"   Ú_add_timeoutz_AsyncSocket._add_timeout­  s   ø€ ô	/ð ×Ñ ¨Ó8Ð8r!   c                óB   — | j                  «       j                  ||«      S )zÊSchedule a function to be called later

        Override for different IOLoop implementations

        Tornado and asyncio happen to both have ioloop.call_later
        with the same signature.
        )r,   rv   )r*   ÚdelayÚcallbacks      r"   rØ   z_AsyncSocket._call_laterº  s   € ð �~‰~Ó×*Ñ*¨5°(Ó;Ð;r!   c                óL   — |sy	 |j                  |«       y# t        $ r Y yw xY w)z°Make sure that futures are removed from the event list when they resolve

        Avoids delaying cleanup until the next send/recv event,
        which may never come.
        N)ÚremoveÚ
ValueError)r   rŸ   r    s      r"   Ú_remove_finished_futurez$_AsyncSocket._remove_finished_futureÄ  s/   € ñ Øð	Ø×Ñ˜eÕ$øÜò 	áð	ús   … —	#¢#)r   r   r   c               ój  — |xs | j                  «       }|€d}|€i }|j                  d«      rU|j                  dd«      t        j                  z  r2t        | j                  |«      }	  ||i |¤Ž}|j                  |«       |S t        }	t        t        d«      r0| j                  j                  }
|
dk\  r| j                  ||
dz  «      }	t        ||||d|	¬«      }| j                  j!                  |«       | j                  j                  t"        «      t$        z  r| j'                  «        | j                  rT|| j                  v rF|j)                  t+        | j,                  | j                  |¬	«      «       | j/                  t$        «       |S # t        $ r}|j                  |«       Y d}~|S d}~ww xY w)
z4Add a recv event, returning the corresponding FutureNr    r¯   r¨   r   ÚRCVTIMEOrf   ©r   r   r   r   ©rŸ   r    )r&   Ú
startswithr¢   rp   ÚDONTWAITÚgetattrr…   rK   r_   r]   r}   rh   ÚrcvtimeorÙ   r   r�   rs   r   r   Ú_handle_recvrn   r   rà   Ú_add_io_state)r*   r   r   r   r   rA   r¯   Úrra   r   Ú
timeout_msÚ_future_events               r"   rt   z_AsyncSocket._add_recv_eventÖ  s•  € ð Ò$�d—l‘l“nˆØˆ<ØˆDØˆ>ØˆFØ�?‰?˜6Ô" v§z¡z°'¸1Ó'=ÄÇÁÒ'Mä˜4×,Ñ,¨dÓ3ˆDð Ù˜$Ð) &Ñ)�ð —‘˜Q”ØˆHäˆÜ”4˜Ô$Ø×*Ñ*×3Ñ3ˆJØ˜QŠØ×)Ñ)¨!¨Z¸$Ñ->Ó?�ô %Øˆt˜$ v°4¸uô
ˆð 	×Ñ×!Ñ! -Ô0à×Ñ× Ñ ¤Ó(¬6Ò1à×ÑÔØ×Ò -°4×3EÑ3EÑ"Eð ×ÑÜØ×0Ñ0Ø#×1Ñ1Ø'ôôð ×ÑœvÔ&ØˆøôE ò #Ø—‘ ×"Ð"ð ˆHûð	#ús   Á(F Æ	F2ÆF-Æ-F2c                óÐ  — |xs | j                  «       }|dv r—| j                  s‹|j                  dd«      }|j                  «       }|t        j
                  z  |d<   t        | j                  |«      }d}		  ||fi |¤Ž}
|j                  |
«       |	r| j                  r| j                  «        |S t        }t        t        d«      rC| j                  j                  t        j                   «      }|dk\  r| j#                  ||dz  «      }t%        ||d	|||¬
«      }| j                  j'                  |«       |j)                  t+        | j,                  | j                  |¬«      «       | j/                  t0        «       |S # t        j                  $ r2}|t        j
                  z  r|j                  |«       nd}	Y d}~�Œ-d}~wt        $ r}|j                  |«       Y d}~�ŒPd}~ww xY w)z4Add a send event, returning the corresponding Future)rº   r¶   r¨   r   TFNÚSNDTIMEOrf   r    rã   rä   )r&   r�   r¢   r©   rp   ræ   rç   r…   rK   rÖ   r]   r_   r�   r£   r}   rh   rï   rÙ   r   rs   rn   r   rà   rê   r   )r*   r   r   r   r   rA   r¨   Únowait_kwargsrº   Úfinish_earlyrë   ra   r   rì   rí   s                  r"   ru   z_AsyncSocket._add_send_event  s³  € àÒ$�d—l‘l“nˆð Ð-Ñ-°d×6HÒ6HØ—J‘J˜w¨Ó*ˆEØ"ŸK™K›MˆMØ%*¬T¯]©]Ñ%:ˆM˜'Ñ"ô ˜4×,Ñ,¨dÓ3ˆDð  ˆLð Ù˜Ñ. Ñ.�ð —‘˜Q”áð ×%Ò%Ø×3Ñ3Ô5Ø�äˆÜ”4˜Ô$Ø×*Ñ*×.Ñ.¬t¯}©}Ó=ˆJØ˜QŠØ×)Ñ)¨!¨Z¸$Ñ->Ó?�ô %Øˆt˜" V°¸Eô
ˆð 	×Ñ×!Ñ! -Ô0à	×ÑÜØ×,Ñ,Ø×-Ñ-Ø#ôô	
ð 	×Ñœ7Ô#ØˆøôS —:‘:ò )Øœ4Ÿ=™=Ò(Ø—O‘O AÕ&ð $)�LÿùÜò #Ø—‘ ×"Ò"ûð#ús$   Á6	E= Å=G%Æ'F=Æ=G%Ç	G Ç G%c                ó  — | j                   j                  t        «      t        z  syd}| j                  rB| j                  j                  «       \  }}}}}}|j                  «       rd}nn| j                  rŒB| j                  s| j                  t        «       |€yj                  «        dk(  r|j                  d«       y|dk(  r| j                   j                  }nF|dk(  r| j                   j                  }n*|dk(  r| j                   j                  }nt        d|›�«      ‚dxx   t        j                  z  cc<   	  |i |¤Ž}|j                  |«       y# t         $ r}	|j#                  |	«       Y d}	~	yd}	~	ww xY w)zHandle recv eventsNrU   r¦   r¯   r³   zUnhandled recv event type: r¨   )r…   r¢   r   r   r�   ÚpopleftrJ   Ú_drop_io_staterZ   rK   r¦   r¯   r³   rß   rp   ræ   r_   r]   )
r*   rA   r   r   r   rÀ   r   r¯   r`   ra   s
             r"   ré   z_AsyncSocket._handle_recvJ  s\  € à× Ñ ×$Ñ$¤VÓ,¬vÒ5àØˆØ× Ò Ø.2×.@Ñ.@×.HÑ.HÓ.JÑ+ˆAˆt�T˜6 1 eà�v‰vŒxØ‘àð × Ó ð ×!Ò!Ø×Ñ¤Ô'àˆ9Øà�‰Œà�6Š>à�L‰L˜ÔØØÐ%Ò%Ø×$Ñ$×3Ñ3‰DØ�VŠ^Ø×$Ñ$×)Ñ)‰DØ�[Ò Ø×$Ñ$×.Ñ.‰DäÐ:¸4¸(ÐCÓDÐDàˆw‹œ4Ÿ=™=Ñ(‹ð	!Ù˜4Ð* 6Ñ*ˆFð �L‰L˜Õ øô ò 	Ø�O‰O˜A×Ñûð	ús   ÅE Å	E?Å$E:Å:E?c                óÎ  — | j                   j                  t        «      t        z  sy d }| j                  rB| j                  j                  «       \  }}}}}}|j                  «       rd }nn| j                  rŒB| j                  s| j                  t        «       |€y j                  «        dk(  r|j                  d «       y |dk(  r| j                   j                  }n*|dk(  r| j                   j                  }nt        d|›�«      ‚dxx   t        j                  z  cc<   	  |fi |¤Ž}|j                  |«       y # t        $ r}	|j!                  |	«       Y d }	~	y d }	~	ww xY w)NrU   r¶   rº   zUnhandled send event type: r¨   )r…   r¢   r   r   r�   ró   rJ   rô   rZ   rK   r¶   rº   rß   rp   ræ   r_   r]   )
r*   rA   r   r   r   r   r   rº   r`   ra   s
             r"   Ú_handle_sendz_AsyncSocket._handle_sendu  sC  € Ø× Ñ ×$Ñ$¤VÓ,¬wÒ6àØˆØ× Ò Ø04×0BÑ0B×0JÑ0JÓ0LÑ-ˆAˆt�T˜6 3¨à�v‰vŒxØ‘àð × Ó ð ×!Ò!Ø×Ñ¤Ô(àˆ9Øà�‰Œà�6Š>à�L‰L˜ÔØØÐ%Ò%Ø×$Ñ$×3Ñ3‰DØ�VŠ^Ø×$Ñ$×)Ñ)‰DäÐ:¸4¸(ÐCÓDÐDàˆw‹œ4Ÿ=™=Ñ(‹ð	!Ù˜#Ñ( Ñ(ˆFð �L‰L˜Õ øô ò 	Ø�O‰O˜A×Ñûð	ús   Ä%	E  Å 	E$Å	EÅE$c                ó  — | j                   j                  ry| j                   j                  t        «      }|t        j
                  z  r| j                  «        |t        j                  z  r| j                  «        | j                  «        y)z(Dispatch IO events to _handle_recv, etc.N)
r…   rœ   r¢   r   rp   r   ré   r   rö   r£   )r*   ÚfdÚeventsÚ
zmq_eventss       r"   Ú_handle_eventsz_AsyncSocket._handle_eventsž  sf   € à×Ñ×#Ò#Øà×&Ñ&×*Ñ*¬6Ó2ˆ
ØœŸ™Ò#Ø×ÑÔØœŸ™Ò$Ø×ÑÔØ×'Ñ'Õ)r!   c                ó¾   — | j                   dk(  ry|€| j                  j                  t        «      }|| j                   z  r| j	                  d| j
                  «       yy)zkSchedule a call to handle_events next loop iteration

        If there are still events to handle.
        r   N)r‘   r…   r¢   r   rØ   rû   )r*   rù   s     r"   r£   z'_AsyncSocket._schedule_remaining_eventsª  sU   € ð �;‰;˜!ÒàØˆ>Ø×&Ñ&×*Ñ*¬6Ó2ˆFØ�D—K‘KÒØ×Ñ˜Q × 3Ñ 3Õ4ð  r!   c                ó„   — | j                   |k7  r| j                   |z  x}| _         | j                  | j                   «       y)zAdd io_state to poller.N©r‘   Ú_update_handler©r*   Ústates     r"   rê   z_AsyncSocket._add_io_stateº  s5   € à�;‰;˜%ÒØ"&§+¡+°Ñ"5Ð5ˆE�D”KØ×Ñ˜TŸ[™[Õ)r!   c                ó‚   — | j                   |z  r| j                   | z  | _         | j                  | j                   «       y)z&Stop poller from watching an io_state.Nrþ   r   s     r"   rô   z_AsyncSocket._drop_io_stateÀ  s2   € à�;‰;˜ÒØŸ+™+¨%¨Ñ0ˆDŒKØ×Ñ˜TŸ[™[Õ)r!   c                óH   — |r| j                  «        | j                  «        y)zOUpdate IOLoop handler with state.

        zmq FD is always read-only.
        N)r,   r£   r   s     r"   rÿ   z_AsyncSocket._update_handlerÆ  s   € ñ Ø�N‰NÔØ×'Ñ'Õ)r!   c                óÂ   — |€| j                  «       }|j                  | j                  | j                  | j                  «       | j                  d| j                  «       y)z#initialize the ioloop event handlerNr   )r,   Úadd_handlerr…   rû   r;   rØ   r2   s     r"   r)   z_AsyncSocket._init_io_stateÑ  sK   € àˆ<Ø—>‘>Ó#ˆDØ×Ñ˜×*Ñ*¨D×,?Ñ,?ÀÇÁÔLØ×Ñ˜˜D×/Ñ/Õ0r!   c                ó°   — | j                   }| j                   j                  r| j                  }| j                  �| j                  j	                  |«       yy)zNunregister the ioloop event handler

        called once during close
        N)r…   rœ   r“   r%   Úremove_handler)r*   rø   s     r"   rQ   z_AsyncSocket._clear_io_stateØ  sL   € ð
 ×ÑˆØ×Ñ×#Ò#Ø—‘ˆBØ×ÑÐ)Ø×Ñ×-Ñ-¨bÕ1ð *r!   )Nry   NN)r—   z_zmq.Socket | Noner4   r5   r1   )r™   ztype[T]r?   r„   r–   r	   r4   r€   )r›   z
int | Noner4   r5   )r   TF)r¨   r:   r©   Úboolrª   r  r4   z)Awaitable[list[bytes] | list[_zmq.Frame]])r¨   r:   r©   r  rª   r  r4   zAwaitable[bytes | _zmq.Frame])r±   r:   r¨   r:   r4   úAwaitable[int])r¸   r	   r¨   r:   r©   r  r4   ú%Awaitable[_zmq.MessageTracker | None])r¼   r	   r¨   r:   r©   r  rª   r  r   r	   r4   r
  )r4   r	  )
r   r   r   ztuple | Noner   zdict[str, Any] | Noner   zFuture | Noner4   r   )NNN)r   r   )*r   r   r   r�   r�   r‘   r   r8   rÑ   r“   rŠ   Úclassmethodrr   rž   rp   rq   r6   r¢   r¦   r¯   r³   r¶   rº   rÇ   r   rU   rÙ   rØ   r   rà   rt   ru   ré   rö   rû   r£   rê   rô   rÿ   r)   rQ   rz   r{   s   @r"   r�   r�   É   sB  ø… ð €MØ€MØ€FØÓØ €MØ
€Cð ØØØ+/ð(ð
 )ð(ð 
õ(ð: ó9ó ð9ö%ð —K‘K×%Ñ%×-Ñ-€E„Môð —+‘+—/‘/×)Ñ)€C„Kð @Eð	
Øð	
Ø$(ð	
Ø8<ð	
à	2ó	
ð @Eð
Øð
Ø$(ð
Ø8<ð
à	&ó
ð ()°qñ	
Ø!$ð	
Ø14ð	
à	ó	
ð HMð
TØð
TØ%(ð
TØ48ð
Tà	.ó
Tð ØØðEàðEð ðEð ð	Eð
 ðEð ðEð 
/óEò((ðT   t§{¡{ô 0òd9ò<ð òó ðð* "Ø(,Ø $ñ5àð5ð ð	5ð
 &ð5ð ð5ð 
ó5ón;òz)!òV&!óR
*ó5ò *ò*ò	*ó1ö	2r!   )!r6   Ú
__future__r   rŒ   Úasyncior   Úcollectionsr   Úcollections.abcr   Ú	functoolsr   Ú	itertoolsr   Útypingr	   r
   r   r   r   Úzmqrp   r   r   r   r   r$   ÚPollerr8   r}   r€   rq   r�   r    r!   r"   Ú<module>r     s�   ðÙ +õ #ã Ý Ý Ý %Ý Ý ÷õ ó ß 'Ñ 'ô�:ô ÷$ñ ô<t�6˜4Ÿ;™;ô t÷nñ ñ ˆC�~Ô&€ôX2�6˜4Ÿ;™; vÑ.õ X2r!   