
    Mh_                    P   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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j                  Z G d d          Z edd          Z G d deej        e                   ZdS )z%Future-returning APIs for coroutines.    )annotationsN)Future)deque)partial)chain)Any	AwaitableCallable
NamedTupleTypeVarcast)EVENTSPOLLINPOLLOUTc                  L    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   dS )_FutureEventr   futurestrkindtupleargsdictkwargsr   msgtimerN)__name__
__module____qualname____annotations__     K/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/zmq/_future.pyr   r      sF         NNNIIIKKKLLLHHHJJJJJr!   r   c                  F    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dS )_AsynczMixin for common async logicNr   _current_loopztype[Future]_Futurereturnc                    | j         :|                                 | _         |                     | j                    | j         S |                                 }|| j         ur|| _         |                     |           |S )zGet 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   s     %!%!3!3!5!5D 233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FFr!   Nonec                    d S Nr    r+   loops     r"   r*   z_Async._init_io_stateE   s    r!   )r'   r   r3   )r'   r1   )	r   r   r   __doc__r%   r   r-   r)   r*   r    r!   r"   r$   r$   +   s~         &&M   "G G G 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_socketsr5   r   socketevtfr
   r'   r1   c                    t                      )z"Schedule callback for a raw socketr/   )r+   r5   r>   r?   r@   s        r"   _watch_raw_socketz_AsyncPoller._watch_raw_socketQ       !###r!   socketsc                    t                      )z$Unschedule callback for a raw socketr/   )r+   r5   rD   s      r"   _unwatch_raw_socketsz!_AsyncPoller._unwatch_raw_socketsU   rC   r!    Awaitable[list[tuple[Any, int]]]c                
                                      |dk    rf	 t                                          d          }                    |           n,# t          $ r}                    |           Y d}~nd}~ww xY wS                                                                    g fd}                     fd           g fd} j        D ]\  }}t          |t          j                  rt          | j                  s/ j                            |          }                    |           |t          j        z  r|                    d           |t          j        z  r|                    d                               |           d}|t          j        z  r
| j        z  }|t          j        z  r
| j        z  }                     |||            fd}	                    |	           r                    |           |?|dk    r9fd	}
                    d
|z  |
          fd}                    |           fd}                    |           S )z Return a Future for a poll eventr   Nc                 ^                                     s                    d            d S d S r3   done
set_result)r   watchers    r"   wake_rawz#_AsyncPoller.poll.<locals>.wake_rawm   s7    <<>> )""4((((() )r!   c                      j         gR  S r3   )rF   )r@   r5   r=   r+   s    r"   <lambda>z#_AsyncPoller.poll.<locals>.<lambda>r   s    /d/C{CCC r!   c                :    D ]}|                                  d S r3   )_clear_io_state)r@   swrapped_socketss     r"   _clear_wrapper_ioz,_AsyncPoller.poll.<locals>._clear_wrapper_iow   s1    $ $ $!!####$ $r!   pollr   c                                                    rd S                                 r(	                                  n# t          $ r Y nw xY wd S                                 r)                                                               d S 	 t          t                                        d          }	                    |           d S # t          $ r }                    |           Y d }~d S d }~ww xY wNr   )rL   	cancelledcancelRuntimeError	exceptionset_exceptionsuperr8   rW   rM   	Exception)r@   resulte	__class__r   r+   rN   s      r"   on_poll_readyz(_AsyncPoller.poll.<locals>.on_poll_ready   s&   {{}}   "" MMOOOO#   D   "" .$$W%6%6%8%899999."<66;;A>>F %%f----- ! , , ,((+++++++++,s)   A 
AA(C 
C;C66C;c                 ^                                      s                     d            d S d S r3   rK   )rN   s   r"   trigger_timeoutz*_AsyncPoller.poll.<locals>.trigger_timeout   s7    ||~~ -&&t,,,,,- -r!   MbP?c                ~    t          d          r                                 d S                                d S )Nr\   )hasattrr\   remove_timeout)r@   r5   timeout_handles    r"   cancel_timeoutz)_AsyncPoller.poll.<locals>.cancel_timeout   sG    >844 8"))+++++''77777r!   c                \                                     s                                 d S d S r3   )rL   r\   )r@   rN   s    r"   cancel_watcherz)_AsyncPoller.poll.<locals>.cancel_watcher   s3    <<>> !     ! !r!   )r&   r`   rW   rM   ra   r_   r-   add_done_callbackrD   
isinstance_zmqSocketr9   from_socketappendr   _add_recv_eventr   _add_send_eventr;   r<   rB   
call_later)r+   timeoutrb   rc   rO   rV   r>   maskr?   re   rg   rm   ro   r   r5   r=   rl   rN   rU   rd   s   `            @@@@@@r"   rW   z_AsyncPoller.pollY   sU   a<<*a !!&))))  ( ( ($$Q''''''''( M~~ ,,.. "$	) 	) 	) 	) 	) 	!!CCCCCC	
 	
 	
 /1	$ 	$ 	$ 	$ 	$ !L 	D 	DLFD&$+.. D!&$*<== 3!/;;FCCF#**6222$+% C**6'*BBB$,& C**6'*BBB""6***$+% &4:%C$,& '4;&C&&tVS(CCCC	. 	. 	. 	. 	. 	. 	. 	.( 	!!-000 	9%%&78887Q;;- - - - - "__TG^_MMN8 8 8 8 8 8 $$^444	! 	! 	! 	! 	! 	  000s   !A 
B%A??B)
r5   r   r>   r   r?   r:   r@   r
   r'   r1   )r5   r   rD   r   r'   r1   )rG   )r'   rH   )	r   r   r   r6   r   rB   rF   rW   __classcell__rd   s   @r"   r8   r8   I   s         DD%%%%JJJKKK$ $ $ $$ $ $ $d d d d d d d d d d dr!   r8   c                  $    e Zd Zed             ZdS )_NoTimerc                     d S r3   r    r    r!   r"   r\   z_NoTimer.cancel   s    r!   N)r   r   r   staticmethodr\   r    r!   r"   r~   r~      s-          \  r!   r~   T_AsyncSocket)boundc                      e Zd ZU dZdZdZded<   eZdZ		 	 	 	 dDdE fd
Z
edFdGd            ZdFdH fdZej        j        j        e_         fdZej        j        j        e_        	 dIdJdZ	 dIdKd Zddd!dLd$Z	 dIdMd'Z	 	 	 dIdNd*Zd+ Zdej        fdOd,Zd- Zd. ZedFd/            Zdddd0dPd9ZdQd:Zd; Z d< Z!dRd=Z"dFd>Z#d? Z$d@ Z%dA Z&dFdBZ'dC Z( xZ)S )Sr   Nr   _zmq.Socket_shadow_sockrG   _from_socket_zmq.Socket | Noner'   r1   c                    t          |t          j                  rd |}}|/t                                          |j                   || _        nD t                      j        ||fi | t          j                            | j                  | _        |)t          j	        | j
        j         dt          d           t                      | _        t                      | _        d| _        | j        j        | _        d S )N)shadowz^(io_loop) argument is deprecated in pyzmq 22.2. The currently active loop will always be used.   )
stacklevelr   )rq   rr   rs   r`   __init__
underlyingr   r   warningswarnrd   r   DeprecationWarningr   _recv_futures_send_futures_stateFD_fd)r+   contextsocket_typeio_loopr   r   rd   s         r"   r   z_AsyncSocket.__init__   s     gt{++ 	4%)7\G#GGL$;<<< ,DEGGWk<<V<<< $ 2 24? C CDM>* B B B"	    #WW"WW$'r!   clstype[T]r>   r   r   r   c                     | ||          S )z.Create an async socket from an existing Socket)r   r   r    )r   r>   r   s      r"   rt   z_AsyncSocket.from_socket   s     s8888r!   linger
int | Nonec                x   | j         s| j        t          t          | j        pg | j        pg                     }|D ]F}|j                                        s+	 |j                                         6# t          $ r Y Bw xY wG| 
                                 t                                          |           d S )N)r   )closedr   listr   r   r   r   rL   r\   r]   rS   r`   close)r+   r   
event_listeventrd   s       r"   r   z_AsyncSocket.close   s    { 	#tx3-1d(.B0B0HbII. .J $  |((** ++----'      """V$$$$$s   A33
B ?B c                    t                                          |          }|t          k    r|                     |           |S r3   )r`   getr   _schedule_remaining_events)r+   keyrb   rd   s      r"   r   z_AsyncSocket.get  s:    S!!&==++F333r!   TFflagsr:   copybooltrack)Awaitable[list[bytes] | list[_zmq.Frame]]c                P    |                      dt          |||                    S )zvReceive a complete multipart zmq message.

        Returns a Future whose result will be a multipart message.
        recv_multipartr   r   r   r   rv   r   r+   r   r   r   s       r"   r   z_AsyncSocket.recv_multipart  s5     ##TD%N%N%N $ 
 
 	
r!   Awaitable[bytes | _zmq.Frame]c                P    |                      dt          |||                    S )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   z_AsyncSocket.recv  s5     ##4e$eDDD $ 
 
 	
r!   nbytesr   r   Awaitable[int]c              R    |                      d|ft          ||                    S )zReceive 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&  s7     ##sfTu-M-M-M $ 
 
 	
r!   	msg_parts%Awaitable[_zmq.MessageTracker | None]c                P    ||d<   ||d<   ||d<   |                      d||          S )zqSend a complete multipart zmq message.

        Returns a Future that resolves when sending is complete.
        r   r   r   send_multipartr   r   )rw   )r+   r   r   r   r   r   s         r"   r   z_AsyncSocket.send_multipart1  s;      wvw##$4)F#SSSr!   datar   c                    ||d<   ||d<   ||d<   |                     t          |||                     |                     d||          S )zSend a single zmq frame.

        Returns a Future that resolves when sending is complete.

        Recommend using send_multipart instead.
        r   r   r   r   sendr   )updater   rw   )r+   r   r   r   r   r   s         r"   r   z_AsyncSocket.send=  s[      wvwdT???@@@##FV#DDDr!   c                    |                                  fd}                    |           fd}                    |           S )zDeserialize with Futuresc                                                    rK                                s5                                !t          j        d d dt
                     dS                                 r)                                                               dS                                 }	  |          }                    |           dS # t          $ r }                    |           Y d}~dS d}~ww xY w)z+Chain result through serialization to recvdNzFuture z completed while awaiting z. A message has been dropped!)
rL   r[   r^   r   r   RuntimeWarningr_   rb   rM   ra   )_r   loadedrc   r@   loadrecvds       r"   _chainz)_AsyncSocket._deserialize.<locals>._chainU  s   vvxx  (( U__->->-FM d!ccuccc&	      	) 1 122222llnn)!T#YYF LL((((( ! ' ' 'OOA&&&&&&&&&'s   3C 
C?C::C?c                                                     rdS                                 r                                 dS dS )z"Chain cancellation from f to recvdN)rL   r[   r\   )r   r@   r   s    r"   _chain_cancelz0_AsyncSocket._deserialize.<locals>._chain_cancelp  sC    zz|| {{}}  r!   )r&   rp   )r+   r   r   r   r   r@   s    ``  @r"   _deserializez_AsyncSocket._deserializeQ  s    LLNN	) 	) 	) 	) 	) 	) 	)2 	'''	 	 	 	 	 	 	
M***r!   c                     j         rt          j        t          j                                                   }|                     |           t          t          |                    |                     	                                 fd}
                                r |           n                    |           fd}                    |           S )zSpoll the socket for events

        returns a Future for the poll results.
        c                                                    rd S                                 r(	                                  n# t          $ r Y nw xY wd S |                                 r)                                                               d S t                                                    }                    |	                    d                     d S rZ   )
rL   r[   r\   r]   r^   r_   r   rb   rM   r   )r@   evtsr   poll_futurer+   s     r"   unwrap_resultz(_AsyncSocket.poll.<locals>.unwrap_result  s    {{}} $$&& MMOOOO#   D {{}} 5$$[%:%:%<%<=====K..0011!!$((4"3"344444s   A 
AAc                                                     s(	                                  dS # t          $ r Y dS w xY wdS )z4Cancel underlying poll if request has been cancelledN)rL   r\   r]   )r   r   s    r"   cancel_pollz&_AsyncSocket.poll.<locals>.cancel_poll  s`    ##%% &&(((((#   DD s   - 
;;)r   rr   ZMQErrorENOTSUP_poller_classregisterr   r   rW   r&   rL   rp   )r+   ry   r   pr   r   r   r   s   `     @@r"   rW   z_AsyncSocket.poll{  s    ; 	.----  	

46166'??33	5 	5 	5 	5 	5 	5 	5   	9M+&&&&))-888	 	 	 	 	 	  ---r!   c                :    fd}|                      ||          S )z'Add a timeout for a send or recv Futurec                                                       rd S                      t          j                               d S r3   )rL   r_   rr   AgainrX   s   r"   future_timeoutz1_AsyncSocket._add_timeout.<locals>.future_timeout  s:    {{}}    .....r!   )_call_later)r+   r   ry   r   s    `  r"   _add_timeoutz_AsyncSocket._add_timeout  s4    	/ 	/ 	/ 	/ 	/ 888r!   c                R    |                                                      ||          S )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.
        )r-   rx   )r+   delaycallbacks      r"   r   z_AsyncSocket._call_later  s$     ~~**5(;;;r!   c                \    |sdS 	 |                     |           dS # t          $ r Y dS w xY w)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_futurez$_AsyncSocket._remove_finished_future  sR      	F	e$$$$$ 	 	 	FF	s    
++)r   r   r   r   r   r   tuple | Nonedict[str, Any] | Noner   Future | Noner   c                  |p|                                  }|d}|i }|                    d          r|                    dd          t          j        z  rbt          | j        |          }	  ||i |}|                    |           n,# t          $ r}|	                    |           Y d}~nd}~ww xY w|S t          }	t          t          d          r+| j        j        }
|
dk    r|                     ||
dz            }	t          ||||d|	          }| j                            |           | j                            t"                    t$          z  r|                                  | j        rR|| j        v rI|                    t+          | j        | j        |	                     |                     t$                     |S )
z4Add a recv event, returning the corresponding FutureNr    r   r   r   RCVTIMEOrh   r   r   r   r   r   r   )r&   
startswithr   rr   DONTWAITgetattrr   rM   ra   r_   r~   rj   rcvtimeor   r   r   ru   r   r   _handle_recvrp   r   r   _add_io_state)r+   r   r   r   r   r@   r   rrc   r   
timeout_ms_future_events               r"   rv   z_AsyncSocket._add_recv_event  s    $dllnn<D>F??6"" 		vzz'1'='='M 		4,d33D D$)&)) Q  # # #""""""""# H4$$ 	@*3JQ))!Z$->?? %t$v4u
 
 
 	!!-000  ((61 	  	'-43E"E"E 0#1'     v&&&s   -B 
B4B//B4c                   |p|                                  }|dv r| j        s|                    dd          }|                                }|t          j        z  |d<   t          | j        |          }d}		  ||fi |}
|                    |
           nj# t          j	        $ r1}|t          j        z  r|
                    |           nd}	Y d}~n/d}~wt          $ r}|
                    |           Y d}~nd}~ww xY w|	r| j        r|                                  |S t          }t          t          d          rC| j                            t          j                  }|dk    r|                     ||dz            }t%          ||d	|||
          }| j                            |           |                    t+          | j        | j        |                     |                     t0                     |S )z4Add a send event, returning the corresponding Future)r   r   r   r   TFNSNDTIMEOrh   r    r   r   )r&   r   r   r   rr   r   r   r   rM   r   r_   ra   r   r   r~   rj   r   r   r   ru   rp   r   r   r   r   )r+   r   r   r   r   r@   r   nowait_kwargsr   finish_earlyr   rc   r   r   r   s                  r"   rw   z_AsyncSocket._add_send_event  s@   $dllnn ---d6H-JJw**E"KKMMM%*T]%:M'" 4,d33D  L D.... Q : ) ) )4=( )OOA&&&& $)L # # #""""""""#
   % 6335554$$ 	@*..t}==JQ))!Z$->?? %t"VE
 
 
 	!!-000	,-#  	
 	
 	
 	7###s$   7	B C=%'CC=C88C=c                   | j                             t                    t          z  sdS d}| j        r?| j                                        \  }}}}}}|                                rd}nn| j        ?| j        s|                     t                     |dS |                                 |dk    r|	                    d           dS |dk    r| j         j
        }n8|dk    r| j         j        }n%|dk    r| j         j        }nt          d|          |dxx         t          j        z  cc<   	  ||i |}|	                    |           dS # t           $ r }	|                    |	           Y d}	~	dS d}	~	ww xY w)zHandle recv eventsNrW   r   r   r   zUnhandled recv event type: r   )r   r   r   r   r   popleftrL   _drop_io_stater\   rM   r   r   r   r   rr   r   ra   r_   )
r+   r@   r   r   r   r   r   r   rb   rc   s
             r"   r   z_AsyncSocket._handle_recvJ  s    $$V,,v5 	F  	.2.@.H.H.J.J+AtT61evvxx    	 ! 	('''9F6>>LLF%%%$3DDV^^$)DD[  $.DDC4CCDDDw4=(	!T4*6**F LL       	 	 	OOA	s   .E 
E7E22E7c                   | j                             t                    t          z  sd S d }| j        r?| j                                        \  }}}}}}|                                rd }nn| j        ?| j        s|                     t                     |d S |                                 |dk    r|	                    d            d S |dk    r| j         j
        }n%|dk    r| j         j        }nt          d|          |dxx         t          j        z  cc<   	  ||fi |}|	                    |           d S # t          $ r }	|                    |	           Y d }	~	d S d }	~	ww xY w)NrW   r   r   zUnhandled send event type: r   )r   r   r   r   r   r   rL   r   r\   rM   r   r   r   rr   r   ra   r_   )
r+   r@   r   r   r   r   r   r   rb   rc   s
             r"   _handle_sendz_AsyncSocket._handle_sendu  s    $$V,,w6 	F  	040B0J0J0L0L-AtT63vvxx    	 ! 	)(((9F6>>LLF%%%$3DDV^^$)DDC4CCDDDw4=(	!T#((((F LL       	 	 	OOA	s   	D; ;
E%E  E%c                   | j         j        rdS | j                             t                    }|t          j        z  r|                                  |t          j        z  r|                                  | 	                                 dS )z(Dispatch IO events to _handle_recv, etc.N)
r   r   r   r   rr   r   r   r   r  r   )r+   fdevents
zmq_eventss       r"   _handle_eventsz_AsyncSocket._handle_events  s    # 	F&**622
# 	 $ 	 '')))))r!   c                    | j         dk    rdS || j                            t                    }|| j         z  r|                     d| j                   dS dS )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  si     ;!F>&**622FDK 	5Q 344444	5 	5r!   c                r    | j         |k    r| j         |z  x}| _         |                     | j                    dS )zAdd io_state to poller.Nr   _update_handlerr+   states     r"   r   z_AsyncSocket._add_io_state  s>    ;%"&+"55EDKT[)))))r!   c                n    | j         |z  r| j         | z  | _         |                     | j                    dS )z&Stop poller from watching an io_state.Nr
  r  s     r"   r   z_AsyncSocket._drop_io_state  s=    ; 	1+%0DKT[)))))r!   c                Z    |r|                                   |                                  dS )zOUpdate IOLoop handler with state.

        zmq FD is always read-only.
        N)r-   r   r  s     r"   r  z_AsyncSocket._update_handler  s4      	NN'')))))r!   c                    ||                                  }|                    | j        | j        | j                   |                     d| j                   dS )z#initialize the ioloop event handlerNr   )r-   add_handlerr   r  r;   r   r4   s     r"   r*   z_AsyncSocket._init_io_state  sU    <>>##D*D,?LLLD/00000r!   c                    | j         }| j         j        r| j        }| j        | j                            |           dS dS )zNunregister the ioloop event handler

        called once during close
        N)r   r   r   r%   remove_handler)r+   r  s     r"   rS   z_AsyncSocket._clear_io_state  sO    
 # 	B)--b11111 *)r!   )NrG   NN)r   r   r'   r1   r3   )r   r   r>   r   r   r   r'   r   )r   r   r'   r1   )r   TF)r   r:   r   r   r   r   r'   r   )r   r:   r   r   r   r   r'   r   )r   r:   r   r:   r'   r   )r   r   r   r:   r   r   r'   r   )r   r   r   r:   r   r   r   r   r   r   r'   r   )r'   r   )
r   r   r   r   r   r   r   r   r'   r   )NNN)r   r   )*r   r   r   r   r   r   r   r8   r   r   r   classmethodrt   r   rr   rs   r6   r   r   r   r   r   r   r   r   rW   r   r   r   r   rv   rw   r   r  r  r   r   r   r  r*   rS   r{   r|   s   @r"   r   r      s         MMF M
C +/( ( ( ( ( ( (: 9 9 9 9 [9% % % % % % % K%-EM     +/)CK @E	
 	
 	
 	
 	
 @E
 
 
 
 
 ()q	
 	
 	
 	
 	
 	
 HM
T 
T 
T 
T 
T E E E E E(( ( (T  t{ 0 0 0 0 0d9 9 9< < <    \* "(, $5 5 5 5 5 5n; ; ; ;z)! )! )!V&! &! &!R
* 
* 
* 
*5 5 5 5 * * ** * *	* 	* 	*1 1 1 1	2 	2 	2 	2 	2 	2 	2r!   ) r6   
__future__r   r   asyncior   collectionsr   	functoolsr   	itertoolsr   typingr   r	   r
   r   r   r   zmqrr   r   r   r   r   r$   Pollerr8   r~   r   rs   r   r    r!   r"   <module>r     s   + + # " " " " "                                             ' ' ' ' ' ' ' ' ' '    :   $       <t t t t t64; t t tn        GC~&&&X2 X2 X2 X2 X264;v. X2 X2 X2 X2 X2r!   