§
    ¼ÞMhv  ã                  ó¾  — 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j        ¦  «        Zee_         G d„ dej        e         ¦  «        Z G d„ de¦  «        ZdZd„ Zde_         d„ Z!g d¢Z"dS )z8AsyncIO support for zmq

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

    We automatically support proactor via tornado's AddThreadSelectorEventLoopN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úK/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/zmq/asyncio.pyr
   r
      s"   € € € € € ðRð Rð Rð Rr   r
   Úreturnúasyncio.AbstractEventLoopc                óp  ‡ ‡‡— ‰ t           v rt           ‰          S t          t          d¦  «        r‡t          ‰ t          j        ¦  «        rm	 ddlm} n# t          $ r t          d¦  «        ‚w xY wt          j
        dt          d¬¦  «          |‰ ¦  «        xŠt           ‰ <   ‰ j        Šˆ ˆˆfd„}|‰ _        ‰S ‰ S )	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   •— ‰‰ _         t                               ‰ d ¦  «         ‰                      ¦   «          d S ©N)Úcloser   Úpop)Úasyncio_loopÚ
loop_closeÚselector_loops   €€€r   Ú_close_selector_and_loopz7_get_selector_windows.<locals>._close_selector_and_loopM   s9   ø€ ð ",ˆ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ô 2ð )ð	ØKÐKÐKÐKÐKÐKÐKøÝð 	ð 	ð 	ÝðBñô ð ð	øøøõ 	Œð&õ àð	
ñ 	
ô 	
ð 	
ð 4NÐ3MØñ4
ô 4
ð 	
ˆ
 <Ñ0ð
 "Ô'ˆ
ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 6ˆÔØÐàÐs   Á
A ÁA+c                ó   — | S )zno-op on non-Windowsr   )Úloops    r   Ú_get_selector_noopr.   Z   s   € à€Kr   Úwin32c                  ó4   — e Zd ZeZej        Zej        Z	d„ Z
dS )Ú_AsyncIOc                ó¨   — 	 t          j        ¦   «         S # t          $ r t          j        dt
          d¬¦  «         Y nw xY wt          j        ¦   «         S )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   sn   € ð	ÝÔ+Ñ-Ô-Ð-øÝð 	ð 	ð 	ÝŒMØaÝØðñ ô ð ð ð ð	øøøõ Ô%Ñ'Ô'Ð's   ‚ •&>½>N)r   r   r   r   Ú_FutureÚ	selectorsÚEVENT_WRITEÚ_WRITEÚ
EVENT_READÚ_READr8   r   r   r   r1   r1   e   s8   € € € € € Ø€GØÔ"€FØÔ €Eð
(ð 
(ð 
(ð 
(ð 
(r   r1   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚPollerz1Poller returning asyncio.Future for poll results.c                ó¶   ‡— t          |¦  «        }|| j        z  r|                     |ˆfd„¦  «         || j        z  r|                     |ˆfd„¦  «         dS dS )z"Schedule callback for a raw socketc                 ó   •—  ‰¦   «         S r   r   ©ÚargsÚfs    €r   ú<lambda>z*Poller._watch_raw_socket.<locals>.<lambda>~   ó   ø€ °a°a±c´c€ r   c                 ó   •—  ‰¦   «         S r   r   rC   s    €r   rF   z*Poller._watch_raw_socket.<locals>.<lambda>€   rG   r   N)Ú_get_selectorr>   Ú
add_readerr<   Ú
add_writer)r7   r-   ÚsocketÚevtrE   Úselectors       ` r   Ú_watch_raw_socketzPoller._watch_raw_socketz   s~   ø€ å  Ñ&Ô&ˆØ”Ñð 	;Ø×Ò Ð(9Ð(9Ð(9Ð(9Ñ:Ô:Ð:Ø”Ñð 	;Ø×Ò Ð(9Ð(9Ð(9Ð(9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r   c                ó‚   — t          |¦  «        }|D ],}|                     |¦  «         |                     |¦  «         Œ-dS )z$Unschedule callback for a raw socketN)rI   Úremove_readerÚremove_writer)r7   r-   ÚsocketsrN   rL   s        r   Ú_unwatch_raw_socketszPoller._unwatch_raw_sockets‚   sS   € å  Ñ&Ô&ˆØð 	+ð 	+ˆFØ×"Ò" 6Ñ*Ô*Ð*Ø×"Ò" 6Ñ*Ô*Ð*Ð*ð	+ð 	+r   N)r   r   r   r   rO   rT   r   r   r   r@   r@   w   s8   € € € € € Ø;Ð;ð;ð ;ð ;ð+ð +ð +ð +ð +r   r@   c                  ó,   — e Zd ZdZeZdd„Zdd„Zd„ ZdS )ÚSocketz<Socket returning asyncio Futures for send/recv/poll methods.Nc                óL   — |€|                       ¦   «         }t          |¦  «        S r   )Ú	_get_looprI   ©r7   Úio_loops     r   rI   zSocket._get_selector   s$   € Øˆ?Ø—n’nÑ&Ô&ˆGÝ˜WÑ%Ô%Ð%r   c                ój   ‡ — ‰                       |¦  «                             ‰ j        ˆ fd„¦  «         dS )z#initialize the ioloop event handlerc                 ó0   •— ‰                       dd¦  «        S )Nr   )Ú_handle_eventsr6   s   €r   rF   z'Socket._init_io_state.<locals>.<lambda>—   s   ø€ ˜d×1Ò1°!°QÑ7Ô7€ r   N)rI   rJ   Ú_fdrY   s   ` r   Ú_init_io_statezSocket._init_io_state”   sD   ø€ à×Ò˜7Ñ#Ô#×.Ò.ØŒHÐ7Ð7Ð7Ð7ñ	
ô 	
ð 	
ð 	
ð 	
r   c                ó¼   — | j         }|rN|                     ¦   «         s<| j        dk    r3|                      |¦  «                             | j        ¦  «         dS dS dS dS )zEclear any ioloop event handler

        called once at close
        éÿÿÿÿN)Ú_current_loopÚ	is_closedr^   rI   rQ   )r7   r-   s     r   Ú_clear_io_statezSocket._clear_io_stateš   sq   € ð
 Ô!ˆØð 	=˜ŸšÑ(Ô(ð 	=¨T¬X¸ª^¨^Ø×Ò˜tÑ$Ô$×2Ò2°4´8Ñ<Ô<Ð<Ð<Ð<ð	=ð 	=ð 	=ð 	=¨^¨^r   r   )	r   r   r   r   r@   Ú_poller_classrI   r_   rd   r   r   r   rV   rV   Š   sV   € € € € € ØFÐFà€Mð&ð &ð &ð &ð

ð 
ð 
ð 
ð=ð =ð =ð =ð =r   rV   c                  ó2   ‡ — e Zd ZdZeZdZ	 	 ddˆ fd„Zˆ xZS )ÚContextz/Context for creating asyncio-compatible SocketsNé   r   r7   Ú
io_threadsúint | _zmq.ContextÚshadowú_zmq.Context | intr   ÚNonec                óL   •— t          ¦   «                              ||¦  «         d S r   )ÚsuperÚ__init__)r7   ri   rk   Ú	__class__s      €r   rp   zContext.__init__°   s%   ø€ õ
 	‰Œ×Ò˜ VÑ,Ô,Ð,Ð,Ð,r   )rh   r   )r7   rg   ri   rj   rk   rl   r   rm   )	r   r   r   r   rV   Ú_socket_classÚ	_instancerp   Ú__classcell__©rq   s   @r   rg   rg   §   s\   ø€ € € € € Ø9Ð9à€Mð €Ið
 *+Ø%&ð-ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -r   rg   c                  ó$   ‡ — e Zd ZdZ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.
    Nc                ób   •— t          ¦   «          t          ¦   «                              |¦  «        S r   )Ú_deprecatedro   rp   )r7   rN   rq   s     €r   rp   zZMQEventLoop.__init__¾   s$   ø€ Ý‰ŒˆÝ‰wŒw×Ò Ñ)Ô)Ð)r   r   )r   r   r   r   rp   rt   ru   s   @r   rw   rw   ¸   sG   ø€ € € € € ðð ð
*ð *ð *ð *ð *ð *ð *ð *ð *ð *r   rw   c                 ór   — t           j        rd S dt           _        t          j        dt          d¬¦  «         d S )NTzsZMQEventLoop and zmq.asyncio.install are deprecated in pyzmq 17. Special eventloop integration is no longer needed.é   r   )ry   Úcalledr(   r)   ÚDeprecationWarningr   r   r   ry   ry   Æ   sF   € ÝÔð ØˆØ…KÔå„MØ}ÝØðñ ô ð ð ð r   Fc                 ó"   — t          ¦   «          dS )z(DEPRECATED: No longer needed in pyzmq 17N)ry   r   r   r   Úinstallr   Õ   s   € åM„M€M€M€Mr   )rg   rV   r@   rw   r   )r   r   )#r   Ú
__future__r   r#   r:   Úsysr(   r   r   Úweakrefr   ÚzmqÚ_zmqr   r   Ú__annotations__r*   r
   r+   r.   ÚplatformrI   r1   Ú_AsyncPollerr@   Ú_AsyncSocketrV   rr   rg   rw   Ú_loopry   r|   r   Ú__all__r   r   r   ú<module>r‹      sY  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ø Ð Ð Ð Ð Ð ð !2Ð 1Ñ 3Ô 3€
Ð 3Ð 3Ð 3Ñ 3ðRð Rð Rð Rð R Nñ Rô Rð Rð9ð 9ð 9ð 9ðxð ð ð ð
 „<7ÒÐØ)€M€Mà&€Mð(ð (ð (ð (ð (ñ (ô (ð (ð$+ð +ð +ð +ð +ˆXwÔ+ñ +ô +ð +ð&=ð =ð =ð =ð =ˆXwÔ+ñ =ô =ð =ð4 €Ô ð-ð -ð -ð -ð -ˆdŒl˜6Ô"ñ -ô -ð -ð"*ð *ð *ð *ð *Ð$ñ *ô *ð *ð 	€ð	ð 	ð 	ð €Ô ðð ð ð
ð ð €€€r   