
    Mh+                        U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ dZeed<   	 ddlZej        Zn# eef$ r Y nw xY wddlmZmZ dd	lmZ  G d
 de          Z G d d          Z G d de          ZeZd ZdS )uX  tornado IOLoop API with zmq compatibility

If you have tornado ≥ 3.0, this is a subclass of tornado's IOLoop,
otherwise we ship a minimal subset of tornado in zmq.eventloop.minitornado.

The minimal shipped version of tornado's IOLoop does not include
support for concurrent futures - this will only be available if you
have tornado ≥ 3.0.
    N)Tuple)ETERMPOLLERRPOLLINPOLLOUTPollerZMQError tornado_version   )PeriodicCallback
PollIOLoop)gen_logc                   0     e Zd ZdZd fd	Zd Zd Z xZS )DelayedCallbackzSchedules the given callback to be called once.

    The callback is called once, after callback_time milliseconds.

    `start` must be called after the DelayedCallback is created.

    The timeout is calculated from when `start` is called.
    Nc                     t          j        dt                     t          |d          }t	                                          |||           d S )NzDDelayedCallback is deprecated.
        Use loop.add_timeout instead.gMbP?)warningswarnDeprecationWarningmaxsuper__init__)selfcallbackcallback_timeio_loop	__class__s       Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/zmq/eventloop/_deprecated.pyr   zDelayedCallback.__init__*   sR    )	
 	
 	

 M400=':::::    c                     d| _         d| _        t          j                    | j        dz  z   | _        | j                            | j        | j                   dS )zStarts the timer.Tg     @@N)_running	_firstruntimer   _next_timeoutr   add_timeout_runr   s    r   startzDelayedCallback.start4   sN    !Y[[4+=+FF  !3TY?????r   c                     | j         sd S d| _         	 |                                  d S # t          $ r t          j        dd           Y d S w xY w)NFzError in delayed callbackT)exc_info)r!   r   	Exceptionr   errorr'   s    r   r&   zDelayedCallback._run;   sm    } 	F	FMMOOOOO 	F 	F 	FM5EEEEEEE	Fs   (  AAN)__name__
__module____qualname____doc__r   r(   r&   __classcell__r   s   @r   r   r       so         ; ; ; ; ; ;@ @ @F F F F F F Fr   r   c                   b    e Zd ZdZd Zed             Zed             Zd Zd Z	d Z
d Zd	 Zd
S )	ZMQPollerzA poller that can be used in the tornado IOLoop.

    This simply wraps a regular zmq.Poller, scaling the timeout
    by 1000, so that it is in seconds rather than milliseconds.
    c                 ,    t                      | _        d S r-   )r   _pollerr'   s    r   r   zZMQPoller.__init__L   s    xxr   c                     d}| t           j        z  r
|t          z  }| t           j        z  r
|t          z  }| t           j        z  r
|t          z  }|S )zEtranslate IOLoop.READ/WRITE/ERROR event masks into zmq.POLLIN/OUT/ERRr   )IOLoopREADr   WRITEr   ERRORr   )eventsz_eventss     r   _map_eventszZMQPoller._map_eventsO   sY     FK 	HFL  	 HFL  	 Hr   c                     d}| t           z  r|t          j        z  }| t          z  r|t          j        z  }| t
          z  r|t          j        z  }|S )zEtranslate zmq.POLLIN/OUT/ERR event masks into IOLoop.READ/WRITE/ERRORr   )r   r9   r:   r   r;   r   r<   )r>   r=   s     r   _remap_eventszZMQPoller._remap_events[   sY     f 	"fk!Fg 	#fl"Fg 	#fl"Fr   c                 ^    | j                             ||                     |                    S r-   )r7   registerr?   r   fdr=   s      r   rC   zZMQPoller.registerg   s(    |$$R)9)9&)A)ABBBr   c                 ^    | j                             ||                     |                    S r-   )r7   modifyr?   rD   s      r   rG   zZMQPoller.modifyj   s(    |""2t'7'7'?'?@@@r   c                 6    | j                             |          S r-   )r7   
unregister)r   rE   s     r   rI   zZMQPoller.unregisterm   s    |&&r***r   c                 Z      j                             d|z            } fd|D             S )zgpoll in seconds rather than milliseconds.

        Event masks will be IOLoop.READ/WRITE/ERROR
        i  c                 D    g | ]\  }}|                     |          fS r
   )rA   ).0rE   evtr   s      r   
<listcomp>z"ZMQPoller.poll.<locals>.<listcomp>v   s0    HHH)2sT'',,-HHHr   )r7   poll)r   timeoutr>   s   `  r   rO   zZMQPoller.pollp   s8    
 <$$TG^44HHHHxHHHHr   c                     d S r-   r
   r'   s    r   closezZMQPoller.closex   s    r   N)r.   r/   r0   r1   r   staticmethodr?   rA   rC   rG   rI   rO   rR   r
   r   r   r5   r5   E   s               	 	 \	 	 	 \	C C CA A A+ + +I I I    r   r5   c                   ^     e Zd ZdZeZd fd	Zed             Zed             Z	 fdZ
 xZS )	ZMQIOLoopzfZMQ subclass of tornado's IOLoop

    Minor modifications, so that .current/.instance return self
    Nc                 n    ||                                  n|} t                      j        dd|i| d S )Nimplr
   )	_zmq_implr   
initialize)r   rW   kwargsr   s      r   rY   zZMQIOLoop.initialize   sC    #'<t~~T////////r   c                     t           dk    rt          j        |            t          j        |i |}t	          ||           s"t          j        d| d|t          d           |S )a  Returns a global `IOLoop` instance.

        Most applications have a single, global `IOLoop` running on the
        main thread.  Use this method to get this instance from
        another thread.  To get the current thread's `IOLoop`, use `current()`.
           $IOLoop.current expected instance of , got    
stacklevel)r   r   	configureinstance
isinstancer   r   RuntimeWarningclsargsrZ   loops       r   rd   zZMQIOLoop.instance   s     d"" %%%"D3F33$$$ 	MLsLLDLL   
 r   c                     t           dk    rt          j        |            t          j        |i |}t	          ||           s"t          j        d| d|t          d           |S )u&   Returns the current thread’s IOLoop.r\   r^   r_   r`   ra   )r   r   rc   currentre   r   r   rf   rg   s       r   rl   zZMQIOLoop.current   s    
 d"" %%%!42622$$$ 	MLsLLDLL   
 r   c                     	 t                                                       d S # t          $ r}|j        t          k    rn Y d }~d S d }~ww xY wr-   )r   r(   r	   errnor   )r   er   s     r   r(   zZMQIOLoop.start   s^    	GGMMOOOOO 	 	 	w% 	s    % 
AAAr-   )r.   r/   r0   r1   r5   rX   rY   classmethodrd   rl   r(   r2   r3   s   @r   rU   rU   |   s         
 I0 0 0 0 0 0   [(   [        r   rU   c                  Z   ddl m}  | j                                        r<| j                                        t                                          u s
J d            t
          dk    r!| j                            t                     dS t                                          | j        _        dS )a,  set the tornado IOLoop instance with the pyzmq IOLoop.

    After calling this function, tornado's IOLoop.instance() and pyzmq's
    IOLoop.instance() will return the same object.

    An assertion error will be raised if tornado's IOLoop has been initialized
    prior to calling this function.
    r   ioloopz"tornado IOLoop already initializedr\   N)	tornadors   r9   initializedrd   r   rc   rU   	_instancerr   s    r   installrw      s     
 M%%''				!	!V__%6%6	6	6	6, 
7	6	6 $	***** #)//"3"3r   )r1   r#   r   typingr   zmqr   r   r   r   r   r	   r   __annotations__rt   version_infoImportErrorAttributeErrorminitornado.ioloopr   r   minitornado.logr   r   r5   rU   r9   rw   r
   r   r   <module>r      s             A A A A A A A A A A A A A A A A   	NNN*OO^$ 	 	 	D	 = < < < < < < < $ $ $ $ $ $"F "F "F "F "F& "F "F "FJ4 4 4 4 4 4 4 4n9 9 9 9 9
 9 9 9z 
4 4 4 4 4s   6 A A 