
    ha                    2   S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJrJrJrJrJrJr  SSKrSS	KJrJrJr   " S
 S\5      r " S S5      r " S S\\R4                  5      r " S S5      r\" SSS9r " S S\\R<                  \   5      rg)z%Future-returning APIs for coroutines.    )annotationsN)Future)deque)partial)chain)Any	AwaitableCallable
NamedTupleTypeVarcast)EVENTSPOLLINPOLLOUTc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S
\S'   Srg)_FutureEvent   r   futurestrkindtupleargsdictkwargsr   msgtimer N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       ^C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\zmq/_future.pyr   r      s     N
I
KL	HJr$   r   c                  T    \ rS rSr% SrSrS\S'   S\S'   SS jrSS	 jrSSS
 jjr	Sr
g)_Async+   zMixin for common async logicNr   _current_loopztype[Future]_Futurec                   U R                   c<  U R                  5       U l         U R                  U R                   5        U R                   $ U R                  5       nXR                   La  Xl         U R                  U5        U$ )zoGet 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_loop_Async._get_loop1   su     %!%!3!3!5D 2 23%%%))+111!--r$   c                    [        S5      e)Nz!Must be implemented in a subclassNotImplementedError)r.   s    r%   r,   _Async._default_loopB   s    !"EFFr$   c                    g Nr   r.   loops     r%   r-   _Async._init_io_stateE   s    r$   )r)   )returnr   r7   )r;   None)r   r   r    r!   __doc__r)   r"   r0   r,   r-   r#   r   r$   r%   r'   r'   +   s*    &M3"G r$   r'   c                  r   ^  \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   SS
 jrSS jrSSU 4S jjjrSr	U =r
$ )_AsyncPollerI   z:Poller that returns a Future on poll, instead of blocking.ztype[_AsyncSocket]_socket_classint_READ_WRITEz	list[Any]raw_socketsc                    [        5       e)z"Schedule callback for a raw socketr3   )r.   r9   socketevtfs        r%   _watch_raw_socket_AsyncPoller._watch_raw_socketQ       !##r$   c                    [        5       e)z$Unschedule callback for a raw socketr3   )r.   r9   socketss      r%   _unwatch_raw_sockets!_AsyncPoller._unwatch_raw_socketsU   rL   r$   c                  >^ ^^^^^^ T R                  5       mUS:X  a#   [        TT ]	  S5      nTR                  U5        T$ T R                  5       mT R                  5       m/ mU4S jnTR                  UUU 4S j5        / mU4S jnT R                   GH4  u  pg[        U[        R                  5      (       a  [        UT R                  5      (       d,  T R                  R                  U5      nTR                  U5        U[        R                  -  (       a  UR!                  STS9  U[        R"                  -  (       a  UR%                  STS9  M  M  TR                  U5        SnU[        R                  -  (       a  UT R&                  -  nU[        R"                  -  (       a  UT R(                  -  nT R+                  TXhU5        GM7     UUU U4S jn	TR                  U	5        T(       a  TR                  U5        Ub9  US:  a3  U4S	 jn
TR-                  S
U-  U
5      mUU4S jnTR                  U5        U4S jnTR                  U5        T$ ! [         a  nTR                  U5         SnAT$ SnAff = f)z Return a Future for a poll eventr   Nc                 T   > TR                  5       (       d  TR                  S 5        g g r7   done
set_result)r   watchers    r%   wake_raw#_AsyncPoller.poll.<locals>.wake_rawm   s!    <<>>""4( "r$   c                *   > TR                   " T/TQ76 $ r7   )rO   )rI   r9   rE   r.   s    r%   <lambda>#_AsyncPoller.poll.<locals>.<lambda>r   s    d//C{Cr$   c                8   > T H  nUR                  5         M     g r7   )_clear_io_state)rI   swrapped_socketss     r%   _clear_wrapper_io,_AsyncPoller.poll.<locals>._clear_wrapper_iow   s    $!!# %r$   pollr   c                  > TR                  5       (       a  g TR                  5       (       a   TR                  5         g TR	                  5       (       a   TR                  TR	                  5       5        g  [        [        T]#  S5      nTR                  U5        g ! [         a     g f = f! [         a  nTR                  U5         S nAg S nAff = fNr   )rT   	cancelledcancelRuntimeError	exceptionset_exceptionsuperr?   rb   rU   	Exception)rI   resulte	__class__r   r.   rV   s      r%   on_poll_ready(_AsyncPoller.poll.<locals>.on_poll_ready   s    {{}}  ""MMO   ""$$W%6%6%89."<;A>F %%f- $  ! ,((++,s)   B 5B* 
B'&B'*
C4C

Cc                 T   > T R                  5       (       d  T R                  S 5        g g r7   rS   )rV   s   r%   trigger_timeout*_AsyncPoller.poll.<locals>.trigger_timeout   s!    ||~~&&t, &r$   MbP?c                l   > [        TS5      (       a  TR                  5         g TR                  T5        g )Nrg   )hasattrrg   remove_timeout)rI   r9   timeout_handles    r%   cancel_timeout)_AsyncPoller.poll.<locals>.cancel_timeout   s*    >844"))+''7r$   c                R   > TR                  5       (       d  TR                  5         g g r7   )rT   rg   )rI   rV   s    r%   cancel_watcher)_AsyncPoller.poll.<locals>.cancel_watcher   s    <<>>  "r$   )r*   rk   rb   rU   rl   rj   r0   add_done_callbackrN   
isinstance_zmqSocketrA   from_socketappendr   _add_recv_eventr   _add_send_eventrC   rD   rJ   
call_later)r.   timeoutrm   rn   rW   r`   rG   maskrH   rp   rs   rz   r}   r   r9   rE   ry   rV   r_   ro   s   `            @@@@@@r%   rb   _AsyncPoller.pollY   s%   a<*a !!&)M~~ ,,. "$	) 	!!C	
 /1	$ !LLLF&$++..!&$*<*<==!//;;FCF#**62$++%**6'*B$,,&**6'*B ' ""6*$++%4::%C$,,&4;;&C&&tV(C# )&	. 	.( 	!!-0%%&787Q;- "__TG^_MN8 $$^4	! 	  0}  ($$Q'' M	(s   I 
I;I66I;r   )
r9   r   rG   r   rH   rB   rI   r
   r;   r<   )r9   r   rN   r   r;   r<   ))r;   z Awaitable[list[tuple[Any, int]]])r   r   r    r!   r=   r"   rJ   rO   rb   r#   __classcell__ro   s   @r%   r?   r?   I   s2    D%%JK$$d dr$   r?   c                  $    \ rS rSr\S 5       rSrg)_NoTimer   c                     g r7   r   r   r$   r%   rg   _NoTimer.cancel   s    r$   r   N)r   r   r    r!   staticmethodrg   r#   r   r$   r%   r   r      s     r$   r   T_AsyncSocket)boundc                    ^  \ rS rSr% SrSrSrS\S'   \r	Sr
    S"   S#U 4S jjjr\S$S%S jj5       rS$S&U 4S jjjr\R                   R                  R"                  \l        U 4S	 jr\R                   R$                  R"                  \l         S'       S(S
 jjr S'       S)S jjrSSS.     S*S jjr S'       S+S jjr   S'           S,S jjrS rS\R2                  4S-S jjrS rS r\S$S j5       rSSSS.         S.S jjrS/S jr S r!S r"S0S jr#S$S jr$S r%S r&S r'S$S jr(S  r)S!r*U =r+$ )1r      Nr   _zmq.Socket_shadow_sockc                  > [        U[        R                  5      (       a  S UpAUb  [        TU ]  UR
                  S9  X@l        O?[        TU ]  " X40 UD6  [        R                  R                  U R
                  5      U l        Ub1  [        R                  " U R                  R                   S3[        SS9  [        5       U l        [        5       U l        SU l        U R                  R"                  U l        g )N)shadowz^(io_loop) argument is deprecated in pyzmq 22.2. The currently active loop will always be used.   )
stacklevelr   )r   r   r   rk   __init__
underlyingr   r   warningswarnro   r   DeprecationWarningr   _recv_futures_send_futures_stateFD_fd)r.   contextsocket_typeio_loop_from_socketr   ro   s         r%   r   _AsyncSocket.__init__   s     gt{{++%)7\#GL$;$;< ,GW<V< $ 2 24?? CDMM>>**+ ,B B"	 #W"W$$''r$   c                    U " XS9$ )z.Create an async socket from an existing Socket)r   r   r   )clsrG   r   s      r%   r   _AsyncSocket.from_socket   s     88r$   c                  > U R                   (       d  U R                  b  [        [        U R                  =(       d    / U R
                  =(       d    / 5      5      nU H?  nUR                  R                  5       (       a  M$   UR                  R                  5         MA     U R                  5         [        TU ]1  US9  g ! [         a     Mn  f = f)N)linger)closedr   listr   r   r   r   rT   rg   rh   r]   rk   close)r.   r   
event_listeventro   s       r%   r   _AsyncSocket.close   s    {{txx3-1d((.B0B0B0HbI.J $||((**++- $   "V$	 ( s   B>>
CCc                \   > [         TU ]  U5      nU[        :X  a  U R                  U5        U$ r7   )rk   getr   _schedule_remaining_events)r.   keyrm   ro   s      r%   r   _AsyncSocket.get  s+    S!&=++F3r$   c           	     2    U R                  S[        XUS9S9$ )zfReceive a complete multipart zmq message.

Returns a Future whose result will be a multipart message.
recv_multipartflagscopytrackr   r   r   r.   r   r   r   s       r%   r   _AsyncSocket.recv_multipart  s(     ##T%N $ 
 	
r$   c           	     2    U R                  S[        XUS9S9$ )zReceive 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   _AsyncSocket.recv  s(     ##4eeD $ 
 	
r$   nbytesr   c         	     4    U R                  SU4[        X#S9S9$ )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   _AsyncSocket.recv_into&  s*     ##sfT-M $ 
 	
r$   c                :    X%S'   X5S'   XES'   U R                  SXS9$ )zaSend a complete multipart zmq message.

Returns a Future that resolves when sending is complete.
r   r   r   send_multipartr   r   )r   )r.   	msg_partsr   r   r   r   s         r%   r   _AsyncSocket.send_multipart1  s0      wvw##$4)#SSr$   c                l    X%S'   X5S'   XES'   UR                  [        X#US95        U R                  SXS9$ )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   r   )r.   datar   r   r   r   s         r%   r   _AsyncSocket.send=  sB      wvwd?@##F#DDr$   c                   ^^^ U R                  5       mUUU4S jnTR                  U5        UU4S jnTR                  U5        T$ )zDeserialize with Futuresc                  > TR                  5       (       aI  TR                  5       (       d3  TR                  5       c"  [        R                  " ST ST S3[
        5        gTR                  5       (       a   TR                  TR                  5       5        gTR                  5       n T" U5      nTR                  U5        g! [         a  nTR                  U5         SnAgSnAff = f)z+Chain result through serialization to recvdNzFuture z completed while awaiting z. A message has been dropped!)
rT   rf   ri   r   r   RuntimeWarningrj   rm   rU   rl   )_r   loadedrn   rI   loadrecvds       r%   _chain)_AsyncSocket._deserialize.<locals>._chainU  s    vvxx ((U__->-FMM "!$>ugEbc&	    12lln)!#YF LL( ! 'OOA&&'s   &C   
C%
C  C%c                ~   > TR                  5       (       a  gTR                  5       (       a  TR                  5         gg)z"Chain cancellation from f to recvdN)rT   rf   rg   )r   rI   r   s    r%   _chain_cancel0_AsyncSocket._deserialize.<locals>._chain_cancelp  s*    zz||{{}} r$   )r*   r   )r.   r   r   r   r   rI   s    ``  @r%   _deserialize_AsyncSocket._deserializeQ  s=    LLN	)2 	'	 	
M*r$   c                  ^ ^^ T R                   (       a$  [        R                  " [        R                  5      eT R	                  5       nUR                  T U5        [        [        UR                  U5      5      mT R                  5       mUUU 4S jnTR                  5       (       a	  U" T5        OTR                  U5        U4S jnTR                  U5        T$ )zCpoll the socket for events

returns a Future for the poll results.
c                ~  > TR                  5       (       a  g TR                  5       (       a   TR                  5         g U R	                  5       (       a   TR                  TR	                  5       5        g [        TR                  5       5      nTR                  UR                  TS5      5        g ! [         a     g f = fre   )
rT   rf   rg   rh   ri   rj   r   rm   rU   r   )rI   evtsr   poll_futurer.   s     r%   unwrap_result(_AsyncSocket.poll.<locals>.unwrap_result  s    {{}}$$&&MMO {{}}$$[%:%:%<=K..01!!$((4"34 $ s   B/ /
B<;B<c                t   > TR                  5       (       d   TR                  5         gg! [         a     gf = f)z4Cancel underlying poll if request has been cancelledN)rT   rg   rh   )r   r   s    r%   cancel_poll&_AsyncSocket.poll.<locals>.cancel_poll  s<    ##%%&&( & $ s   * 
77)r   r   ZMQErrorENOTSUP_poller_classregisterr   r   rb   r*   rT   r   )r.   r   r   pr   r   r   r   s   `     @@r%   rb   _AsyncSocket.poll{  s     ;;---- 	

46166'?3	5  +&))-8	 	  -r$   c                2   ^ U4S jnU R                  X#5      $ )z'Add a timeout for a send or recv Futurec                 z   > T R                  5       (       a  g T R                  [        R                  " 5       5        g r7   )rT   rj   r   Againrc   s   r%   future_timeout1_AsyncSocket._add_timeout.<locals>.future_timeout  s'    {{}}   .r$   )_call_later)r.   r   r   r   s    `  r%   _add_timeout_AsyncSocket._add_timeout  s    	/ 88r$   c                @    U R                  5       R                  X5      $ )zSchedule 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.
)r0   r   )r.   delaycallbacks      r%   r   _AsyncSocket._call_later  s     ~~**5;;r$   c                X    U(       d  g UR                  U5        g! [         a     gf = f)zMake 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_future$_AsyncSocket._remove_finished_future  s/     	e$ 		s    
)))r   r   r   c          	        U=(       d    U R                  5       nUc  SnUc  0 nUR                  S5      (       aZ  UR                  SS5      [        R                  -  (       a2  [        U R                  U5      n U" U0 UD6nUR                  U5        U$ [        n	[        [        S5      (       a0  U R                  R                  n
U
S:  a  U R                  XZS-  5      n	[        XQX#SU	S9nU R                  R!                  U5        U R                  R                  ["        5      [$        -  (       a  U R'                  5         U R                  (       aR  XR                  ;   aC  UR)                  [+        U R,                  U R                  US	95        U R/                  [$        5        U$ ! [         a  nUR                  U5         SnAU$ SnAff = f)
z4Add a recv event, returning the corresponding FutureNr   r   r   r   RCVTIMEOru   r   r   r   r   r   r   )r*   
startswithr   r   DONTWAITgetattrr   rU   rl   rj   r   rw   rcvtimeor   r   r   r   r   r   _handle_recvr   r   r  _add_io_state)r.   r   r   r   r   rI   r   rrn   r   
timeout_ms_future_events               r%   r   _AsyncSocket._add_recv_event  s    $dlln<D>F??6""vzz'1'='M4,,d3D $)&) QH4$$**33JQ))!$->? %$4u
 	!!-0  (61-3E3E"E 00#11' v&E  #"" H	#s   9F& &
G0GGc           	        U=(       d    U R                  5       nUS;   a  U R                  (       d  UR                  SS5      nUR                  5       nU[        R
                  -  US'   [        U R                  U5      nSn	 U" U40 UD6n
UR                  U
5        U	(       a#  U R                  (       a  U R                  5         U$ [        n[        [        S5      (       aC  U R                  R                  [        R                   5      nUS:  a  U R#                  X]S-  5      n[%        XQS	X2US
9nU R                  R'                  U5        UR)                  [+        U R,                  U R                  US95        U R/                  [0        5        U$ ! [        R                   a<  nU[        R
                  -  (       a  UR                  U5         SnAGN7Sn	 SnAGN?SnAf[         a  nUR                  U5         SnAGNcSnAff = f)z4Add a send event, returning the corresponding Future)r   r   r   r   TFNSNDTIMEOru   r   r  r  )r*   r   r   r   r   r  r  r   rU   r   rj   rl   r   r   r   rw   r  r   r   r   r   r   r  r  r   )r.   r   r   r   r   rI   r   nowait_kwargsr   finish_earlyr  rn   r   r  r  s                  r%   r   _AsyncSocket._add_send_event  s   $dlln --d6H6HJJw*E"KKMM%*T]]%:M'" 4,,d3D  L .. Q %%3354$$**..t}}=JQ))!$->? %"VE
 	!!-0	,,--#	
 	7#S :: )4==(OOA&& $)L #""#s*   	F H$)GGH(G??Hc                @   U R                   R                  [        5      [        -  (       d  gSnU R                  (       aJ  U R                  R                  5       u  pp4pVUR                  5       (       a  SnOOU R                  (       a  MJ  U R                  (       d  U R                  [        5        Uc  gWR                  5         WS:X  a  UR                  S5        gUS:X  a  U R                   R                  nOIUS:X  a  U R                   R                  nO,US:X  a  U R                   R                  nO[        SU< 35      eWS==   [        R                  -  ss'    U" W0 UD6nUR                  U5        g! [          a  n	UR#                  U	5         Sn	A	gSn	A	ff = f)zHandle recv eventsNrb   r   r   r   zUnhandled recv event type: r   )r   r   r   r   r   popleftrT   _drop_io_staterg   rU   r   r   r   r  r   r  rl   rj   )
r.   rI   r   r   r   r   r   r   rm   rn   s
             r%   r  _AsyncSocket._handle_recvJ  s[     $$V,v5  .2.@.@.H.H.J+AT1vvxx     !!'96>LL%%$$33DV^$$))D[ $$..D:4(CDDw4==(	!4*6*F LL   	OOA	s   E8 8
FFFc                   U R                   R                  [        5      [        -  (       d  g S nU R                  (       aJ  U R                  R                  5       u  pp4pVUR                  5       (       a  S nOOU R                  (       a  MJ  U R                  (       d  U R                  [        5        Uc  g WR                  5         WS:X  a  UR                  S 5        g US:X  a  U R                   R                  nO,US:X  a  U R                   R                  nO[        SU< 35      eWS==   [        R                  -  ss'    U" W40 UD6nUR                  U5        g ! [         a  n	UR!                  U	5         S n	A	g S n	A	ff = f)Nrb   r   r   zUnhandled send event type: r   )r   r   r   r   r   r  rT   r  rg   rU   r   r   r  r   r  rl   rj   )
r.   rI   r   r   r   r   r   r   rm   rn   s
             r%   _handle_send_AsyncSocket._handle_sendu  sB     $$V,w6  040B0B0J0J0L-AT3vvxx     !!(96>LL%%$$33DV^$$))D:4(CDDw4==(	!#((F LL   	OOA	s   	E 
F&E<<Fc                :   U R                   R                  (       a  gU R                   R                  [        5      nU[        R
                  -  (       a  U R                  5         U[        R                  -  (       a  U R                  5         U R                  5         g)z(Dispatch IO events to _handle_recv, etc.N)
r   r   r   r   r   r   r  r   r!  r   )r.   fdevents
zmq_eventss       r%   _handle_events_AsyncSocket._handle_events  sf    ##&&**62
#$'')r$   c                    U R                   S:X  a  gUc  U R                  R                  [        5      nXR                   -  (       a  U R	                  SU R
                  5        gg)z[Schedule 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   '_AsyncSocket._schedule_remaining_events  sS     ;;!>&&**62FKKQ 3 34  r$   c                    U R                   U:w  a  U R                   U-  =ol         U R                  U R                   5        g)zAdd io_state to poller.Nr   _update_handlerr.   states     r%   r  _AsyncSocket._add_io_state  s3    ;;%"&++"55EKT[[)r$   c                    U R                   U-  (       a  U R                   U) -  U l         U R                  U R                   5        g)z&Stop poller from watching an io_state.Nr,  r.  s     r%   r  _AsyncSocket._drop_io_state  s2    ;;++%0DKT[[)r$   c                R    U(       a  U R                  5         U R                  5         g)z?Update IOLoop handler with state.

zmq FD is always read-only.
N)r0   r   r.  s     r%   r-  _AsyncSocket._update_handler  s     NN'')r$   c                    Uc  U R                  5       nUR                  U R                  U R                  U R                  5        U R                  SU R                  5        g)z#initialize the ioloop event handlerNr   )r0   add_handlerr   r'  rC   r   r8   s     r%   r-   _AsyncSocket._init_io_state  sK    <>>#D**D,?,?LD//0r$   c                    U R                   nU R                   R                  (       a  U R                  nU R                  b  U R                  R	                  U5        gg)z>unregister the ioloop event handler

called once during close
N)r   r   r   r)   remove_handler)r.   r$  s     r%   r]   _AsyncSocket._clear_io_state  sL    
 ##B)--b1 *r$   )r   r   r   r   r   )Nr   NN)r   z_zmq.Socket | Noner;   r<   r7   )r   ztype[T]rG   r   r   r   r;   r   )r   z
int | Noner;   r<   )r   TF)r   rB   r   boolr   r;  r;   z)Awaitable[list[bytes] | list[_zmq.Frame]])r   rB   r   r;  r   r;  r;   zAwaitable[bytes | _zmq.Frame])r   rB   r   rB   r;   Awaitable[int])r   r   r   rB   r   r;  r;   %Awaitable[_zmq.MessageTracker | None])r   r   r   rB   r   r;  r   r;  r   r   r;   r=  )r;   r<  )
r   r   r   ztuple | Noner   zdict[str, Any] | Noner   zFuture | Noner;   r   )NNN)r   r   ),r   r   r    r!   r   r   r   r"   r?   r   r   r   classmethodr   r   r   r   r=   r   r   r   r   r   r   r   r   rb   r   r   r   r  r   r   r  r!  r'  r   r  r  r-  r-   r]   r#   r   r   s   @r%   r   r      sQ    MMF M
C +/(
 )( 
( (: 9 9% % KK%%--EM ++//))CK @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	2 	2r$   ) r=   
__future__r   r   asyncior   collectionsr   	functoolsr   	itertoolsr   typingr   r	   r
   r   r   r   zmqr   r   r   r   r   r'   Pollerr?   r   r   r   r   r   r$   r%   <module>rG     s    + #        ' ': $ <t64;; tn  C~&X264;;v. X2r$   