Ë
    :vžjŸ  ã                  óº  — U d Z ddlm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ZddlmZ  e
«       Zded<    G d	„ d
e«      Z	 	 dd„Zdd„Zej(                  dk(  reZneZ G d„ d«      Z G d„ deej.                  «      Z G d„ deej2                  «      Zee_         G d„ dej8                  e   «      Z G d„ de«      ZdZdd„Zde_         dd„Z!g d¢Z"y)z8AsyncIO support for zmq

Requires asyncio and Python 3.
é    )ÚannotationsN)ÚFutureÚSelectorEventLoop)ÚWeakKeyDictionary)Ú_futurer   Ú
_selectorsc                  ó   — e Zd ZdZy)ÚProactorSelectorThreadWarningz•Warning class for notifying about the extra thread spawned by tornado

    We automatically support proactor via tornado's AddThreadSelectorEventLoopN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú\/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/zmq/asyncio.pyr
   r
      s   „ òRr   r
   c                óR  ‡ ‡‡— ‰ t         v r	t         ‰    S t        t        d«      rjt        ‰ t        j                  «      rP	 ddlm} t        j                  dt        d¬«        |‰ «      xŠt         ‰ <   ‰ j                  Šˆ ˆˆfd„}|‰ _        ‰S ‰ S # t        $ r t        d«      ‚w xY w)	zøGet selector-compatible loop

    Returns an object with ``add_reader`` family of methods,
    either the loop itself or a SelectorThread instance.

    Workaround Windows proactor removal of
    *reader methods, which we need for zmq sockets.
    ÚProactorEventLoopr   )ÚAddThreadSelectorEventLoopa  Proactor event loop does not implement add_reader family of methods required for zmq. zmq will work with proactor if tornado >= 6.1 can be found. Use `asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())` or install 'tornado>=6.1' to avoid this error.a   Proactor event loop does not implement add_reader family of methods required for zmq. Registering an additional selector thread for add_reader support via tornado. Use `asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())` to avoid this warning.é   ©Ú
stacklevelc                 ó`   •— ‰‰ _         t        j                  ‰ d «       ‰j                  «        y ©N)Úcloser   Úpop)Úasyncio_loopÚ
loop_closeÚselector_loops   €€€r   Ú_close_selector_and_loopz7_get_selector_windows.<locals>._close_selector_and_loopM   s'   ø€ ð ",ˆLÔÜ�N‰N˜<¨Ô.Ø×ÑÕ!r   )r   ÚhasattrÚasyncioÚ
isinstancer   Útornado.platform.asyncior   ÚImportErrorÚRuntimeErrorÚwarningsÚwarnÚRuntimeWarningr   )r   r   r   r   r   s   `  @@r   Ú_get_selector_windowsr)      sÄ   ú€ ð ”zÑ!Ü˜,Ñ'Ð'ô ŒwÐ+Ô,´ØÜ×!Ñ!ô2ð	ÝKô 	�‰ð&ô àõ	
ñ 4NØó4
ð 	
ˆœ
 <Ñ0ð
 "×'Ñ'ˆ
ö	"ð 6ˆÔØÐàÐøôG ò 	ÜðBóð ð	ús   Á B ÂB&c                ó   — | S )zno-op on non-Windowsr   )Úloops    r   Ú_get_selector_noopr,   Z   s   € à€Kr   Úwin32c                  óH   — e Zd ZeZej                  Zej                  Z	dd„Z
y)Ú_AsyncIOc                ó¨   — 	 t        j                  «       S # t        $ r2 t        j                  dt
        d¬«       Y t        j                  «       S w xY w)NuO   No running eventÂ loop. zmq.asyncio should be used from within an asyncio loop.é   r   )r!   Úget_running_loopr%   r&   r'   r(   Úget_event_loop©Úselfs    r   Ú_default_loopz_AsyncIO._default_loopj   sK   € ð	Ü×+Ñ+Ó-Ð-øÜò 	Ü�M‰MØaÜØöô ×%Ñ%Ó'Ð'ð	ús   ‚ –%AÁAN©Úreturnzasyncio.AbstractEventLoop)r   r   r   r   Ú_FutureÚ	selectorsÚEVENT_WRITEÚ_WRITEÚ
EVENT_READÚ_READr6   r   r   r   r/   r/   e   s"   „ Ø€GØ×"Ñ"€FØ× Ñ €Eô
(r   r/   c                  ó   — e Zd ZdZd„ Zd„ Zy)ÚPollerz1Poller returning asyncio.Future for poll results.c                ó®   ‡— t        |«      }|| j                  z  r|j                  |ˆfd„«       || j                  z  r|j	                  |ˆfd„«       yy)z"Schedule callback for a raw socketc                 ó   •—  ‰«       S r   r   ©ÚargsÚfs    €r   Ú<lambda>z*Poller._watch_raw_socket.<locals>.<lambda>~   ó   ø€ ±a´cr   c                 ó   •—  ‰«       S r   r   rC   s    €r   rF   z*Poller._watch_raw_socket.<locals>.<lambda>€   rG   r   N)Ú_get_selectorr>   Ú
add_readerr<   Ú
add_writer)r5   r+   ÚsocketÚevtrE   Úselectors       ` r   Ú_watch_raw_socketzPoller._watch_raw_socketz   sL   ø€ ä  Ó&ˆØ�—‘ÒØ×Ñ Ó(9Ô:Ø�—‘ÒØ×Ñ Ó(9Õ:ð r   c                ól   — t        |«      }|D ]$  }|j                  |«       |j                  |«       Œ& y)z$Unschedule callback for a raw socketN)rI   Úremove_readerÚremove_writer)r5   r+   ÚsocketsrN   rL   s        r   Ú_unwatch_raw_socketszPoller._unwatch_raw_sockets‚   s2   € ä  Ó&ˆÛˆFØ×"Ñ" 6Ô*Ø×"Ñ" 6Õ*ñ r   N)r   r   r   r   rO   rT   r   r   r   r@   r@   w   s   „ Ù;ò;ó+r   r@   c                  ó*   — e Zd ZdZeZdd„Zdd„Zd„ Zy)ÚSocketz<Socket returning asyncio Futures for send/recv/poll methods.Nc                ó<   — |€| j                  «       }t        |«      S r   )Ú	_get_looprI   ©r5   Úio_loops     r   rI   zSocket._get_selector�   s   € Øˆ?Ø—n‘nÓ&ˆGÜ˜WÓ%Ð%r   c                ób   ‡ — ‰ j                  |«      j                  ‰ j                  ˆ fd„«       y)z#initialize the ioloop event handlerc                 ó(   •— ‰ j                  dd«      S )Nr   )Ú_handle_eventsr4   s   €r   rF   z'Socket._init_io_state.<locals>.<lambda>—   s   ø€ ˜d×1Ñ1°!°QÔ7r   N)rI   rJ   Ú_fdrY   s   ` r   Ú_init_io_statezSocket._init_io_state”   s&   ø€ à×Ñ˜7Ó#×.Ñ.Ø�H‰HÓ7õ	
r   c                ó¸   — | j                   }|rL|j                  «       s;| j                  dk7  r+| j                  |«      j	                  | j                  «       yyyy)zEclear any ioloop event handler

        called once at close
        éÿÿÿÿN)Ú_current_loopÚ	is_closedr^   rI   rQ   )r5   r+   s     r   Ú_clear_io_statezSocket._clear_io_stateš   sL   € ð
 ×!Ñ!ˆÙ˜Ÿ™Ô(¨T¯X©X¸ª^Ø×Ñ˜tÓ$×2Ñ2°4·8±8Õ<ð .<Ð(ˆ4r   r   )	r   r   r   r   r@   Ú_poller_classrI   r_   rd   r   r   r   rV   rV   Š   s   „ ÙFà€Mó&ó

ó=r   rV   c                  ó@   ‡ — e Zd ZdZeZdZ	 	 d	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚContextz/Context for creating asyncio-compatible SocketsNc                ó&   •— t         ‰| �  ||«       y r   )ÚsuperÚ__init__)r5   Ú
io_threadsÚshadowÚ	__class__s      €r   rj   zContext.__init__°   s   ø€ ô
 	‰Ñ˜ VÕ,r   )é   r   )r5   rg   rk   zint | _zmq.Contextrl   z_zmq.Context | intr8   ÚNone)	r   r   r   r   rV   Ú_socket_classÚ	_instancerj   Ú__classcell__©rm   s   @r   rg   rg   §   sH   ø„ Ù9à€Mð €Ið
 *+Ø%&ð-Øð-à&ð-ð #ð-ð 
÷	-ñ -r   rg   c                  ó&   ‡ — e Zd ZdZddˆ fd„Zˆ xZS )ÚZMQEventLoopz}DEPRECATED: AsyncIO eventloop using zmq_poll.

    pyzmq sockets should work with any asyncio event loop as of pyzmq 17.
    c                ó6   •— t        «        t        ‰| �	  |«      S r   )Ú_deprecatedri   rj   )r5   rN   rm   s     €r   rj   zZMQEventLoop.__init__¾   s   ø€ ÜŒÜ‰wÑ Ó)Ð)r   r   )rN   zselectors.BaseSelector | Noner8   ro   )r   r   r   r   rj   rr   rs   s   @r   ru   ru   ¸   s   ø„ ñ÷
*ò *r   ru   c                 ót   — t         j                  ry dt         _        t        j                  dt        d¬«       y )NTzsZMQEventLoop and zmq.asyncio.install are deprecated in pyzmq 17. Special eventloop integration is no longer needed.é   r   )rw   Úcalledr&   r'   ÚDeprecationWarningr   r   r   rw   rw   Æ   s+   € Ü×ÒØØ„KÔä‡M�MØ}ÜØör   Fc                 ó   — t        «        y)z(DEPRECATED: No longer needed in pyzmq 17N)rw   r   r   r   Úinstallr}   Õ   s   € ä…Mr   )rg   rV   r@   ru   r}   r7   )r8   ro   )#r   Ú
__future__r   r!   r:   Úsysr&   r   r   Úweakrefr   ÚzmqÚ_zmqr   r   Ú__annotations__r(   r
   r)   r,   ÚplatformrI   r/   Ú_AsyncPollerr@   Ú_AsyncSocketrV   rp   rg   ru   Ú_looprw   rz   r}   Ú__all__r   r   r   Ú<module>r‰      sð   ðòõ #ã Û Û 
Û ß -Ý %ã Ý ñ !2Ó 3€
ÐÓ 3ôR Nô Rð9àó9óxð
 ‡<�<�7ÒØ)�Mà&€M÷(ñ (ô$+ˆX�w×+Ñ+ô +ô&=ˆX�w×+Ñ+ô =ð4 €Ô ô-ˆd�l‰l˜6Ñ"ô -ô"*Ð$ô *ð 	€ó	ð €Ô óò
�r   