
    yhV                       % S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKrSSKJr  \
" 5       rS\S'    " S	 S
\5      r  SS jrSS jr\R(                  S:X  a  \rO\r " S S5      r " S S\\R.                  5      r " S S\\R2                  5      r\\l         " S S\R8                  \   5      r " S S\5      rSrS rS\l         S r!/ SQr"g)z8AsyncIO support for zmq

Requires asyncio and Python 3.
    )annotationsN)FutureSelectorEventLoop)WeakKeyDictionary)_futurer   
_selectorsc                      \ rS rSrSrSrg)ProactorSelectorThreadWarning   zWarning class for notifying about the extra thread spawned by tornado

We automatically support proactor via tornado's AddThreadSelectorEventLoop N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       cc:\Users\julio\OneDrive\Documentos\Trabajo\IdeasFrscas\Cabanna\env\Lib\site-packages\zmq/asyncio.pyr
   r
      s    Rr   r
   c                j  ^ ^^ T [         ;   a	  [         T    $ [        [        S5      (       an  [        T [        R                  5      (       aO   SSKJn  [        R                  " S[        SS9  U" T 5      =m[         T '   T R                  mU UU4S jnUT l        T$ T $ ! [         a    [        S5      ef = f)	zGet 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 l         [        R                  T S 5        TR                  5         g N)closer   pop)asyncio_loop
loop_closeselector_loops   r   _close_selector_and_loop7_get_selector_windows.<locals>._close_selector_and_loopM   s'     ",LNN<.!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 	& 	
 4N4
 	

<0
 "''
	" 6G  	B 	s   B B2c                    U $ )zno-op on non-Windowsr   )loops    r   _get_selector_noopr0   Z   s    Kr   win32c                  N    \ rS rSr\r\R                  r\R                  r
S rSrg)_AsyncIOe   c                     [         R                  " 5       $ ! [         a    [        R                  " S[
        SS9   Of = f[         R                  " 5       $ )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_loop_AsyncIO._default_loopj   sK    	++-- 	MMa	 %%''s    $>>r   N)r   r   r   r   r   _Future	selectorsEVENT_WRITE_WRITE
EVENT_READ_READr;   r   r   r   r   r3   r3   e   s"    G""F  E
(r   r3   c                  $    \ rS rSrSrS rS rSrg)Pollerw   z1Poller returning asyncio.Future for poll results.c                   ^ [        U5      nX0R                  -  (       a  UR                  UU4S j5        X0R                  -  (       a  UR	                  UU4S j5        gg)z"Schedule callback for a raw socketc                    > T" 5       $ r   r   argsfs    r   <lambda>*Poller._watch_raw_socket.<locals>.<lambda>~       acr   c                    > T" 5       $ r   r   rH   s    r   rK   rL      rM   r   N)_get_selectorrB   
add_readerr@   
add_writer)r:   r/   socketevtrJ   selectors       ` r   _watch_raw_socketPoller._watch_raw_socketz   sH     &(9:(9: r   c                p    [        U5      nU H%  nUR                  U5        UR                  U5        M'     g)z$Unschedule callback for a raw socketN)rO   remove_readerremove_writer)r:   r/   socketsrT   rR   s        r   _unwatch_raw_socketsPoller._unwatch_raw_sockets   s2     &F""6*""6* r   r   N)r   r   r   r   r   rU   r[   r   r   r   r   rD   rD   w   s    ;;+r   rD   c                  6    \ rS rSrSr\rSS jrSS jrS r	Sr
g)	Socket   z<Socket returning asyncio Futures for send/recv/poll methods.Nc                >    Uc  U R                  5       n[        U5      $ r   )	_get_looprO   r:   io_loops     r   rO   Socket._get_selector   s    ?nn&GW%%r   c                d   ^  T R                  U5      R                  T R                  U 4S j5        g)z#initialize the ioloop event handlerc                 (   > T R                  SS5      $ )Nr   )_handle_eventsr9   s   r   rK   'Socket._init_io_state.<locals>.<lambda>   s    d11!Q7r   N)rO   rP   _fdrb   s   ` r   _init_io_stateSocket._init_io_state   s&    7#..HH7	
r   c                    U R                   nU(       aR  UR                  5       (       d<  U R                  S:w  a+  U R                  U5      R	                  U R                  5        gggg)z5clear any ioloop event handler

called once at close
N)_current_loop	is_closedri   rO   rX   )r:   r/   s     r   _clear_io_stateSocket._clear_io_state   sO    
 !!((TXX^t$22488< .<(4r   r   r   )r   r   r   r   r   rD   _poller_classrO   rj   rp   r   r   r   r   r^   r^      s    FM&

=r   r^   c                  N   ^  \ rS rSrSr\rSr  S       SU 4S jjjrSr	U =r
$ )Context   z/Context for creating asyncio-compatible SocketsNc                $   > [         TU ]  X5        g r   )super__init__)r:   
io_threadsshadow	__class__s      r   rx   Context.__init__   s    
 	,r   r   )   r   )r:   rt   ry   zint | _zmq.Contextrz   z_zmq.Context | intreturnNone)r   r   r   r   r   r^   _socket_class	_instancerx   r   __classcell__r{   s   @r   rt   rt      sH    9M I
 *+%&--&- #- 
	- -r   rt   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )ZMQEventLoop   zuDEPRECATED: AsyncIO eventloop using zmq_poll.

pyzmq sockets should work with any asyncio event loop as of pyzmq 17.
c                6   > [        5         [        TU ]	  U5      $ r   )_deprecatedrw   rx   )r:   rT   r{   s     r   rx   ZMQEventLoop.__init__   s    w))r   r   r   )r   r   r   r   r   rx   r   r   r   s   @r   r   r      s    
* *r   r   c                 z    [         R                  (       a  g S[         l        [        R                  " S[        SS9  g )NTzsZMQEventLoop and zmq.asyncio.install are deprecated in pyzmq 17. Special eventloop integration is no longer needed.   r   )r   calledr*   r+   DeprecationWarningr   r   r   r   r      s+    KMM}r   Fc                     [        5         g)z(DEPRECATED: No longer needed in pyzmq 17N)r   r   r   r   installr      s    Mr   )rt   r^   rD   r   r   )r~   zasyncio.AbstractEventLoop)#r   
__future__r   r%   r>   sysr*   r   r   weakrefr   zmq_zmqr   r   __annotations__r,   r
   r-   r0   platformrO   r3   _AsyncPollerrD   _AsyncSocketr^   r   rt   r   _loopr   r   r   __all__r   r   r   <module>r      s    #   
  - %   !2 3
 3RN R99x
 <<7)M&M( ($+Xw++ +&=Xw++ =4  -dll6" -"*$ * 		  
r   