§
    ÇtºfF  ã                   óR   — d dl Z d dlmZ  G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚIBatchedTimerc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú_BatchedCallzÃ
    Wraps IDelayedCall-implementing objects, implementing only the API
    which txaio promised in the first place: .cancel

    Do not create these yourself; use _BatchedTimer.call_later()
    c                 ó0   — || _         || _        || _        d S ©N)Ú_timerÚ_indexÚ_call)ÚselfÚtimerÚindexÚthe_calls       úL/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/txaio/_common.pyÚ__init__z_BatchedCall.__init__'   s   € àˆŒØˆŒØˆŒ
ˆ
ˆ
ó    c                 óT   — | j                              | j        | ¦  «         d | _         d S r   )r   Ú_remove_callr	   ©r   s    r   Úcancelz_BatchedCall.cancel-   s'   € ØŒ× Ò  ¤¨dÑ3Ô3Ð3ØˆŒˆˆr   c                 ó*   — |                       ¦   «         S r   )r
   r   s    r   Ú__call__z_BatchedCall.__call__1   s   € Ø�zŠz‰|Œ|Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r      sK   € € € € € ðð ðð ð ðð ð ðð ð ð ð r   r   c                   ó.   — e Zd ZdZ	 dd„Zd„ Zd„ Zd„ ZdS )Ú_BatchedTimera=  
    Internal helper.

    Instances of this are returned from
    :meth:`txaio.make_batched_timer` and that is the only way they
    should be instantiated. You may depend on methods from the
    interface class only (:class:`txaio.IBatchedTimer`)

    **NOTE** that the times are in milliseconds in this class!
    Nc                 ó¶   — |dk    rt          d¦  «        ‚t          |¦  «        | _        || _        || _        || _        t          ¦   «         | _        || _        d S )Nç        z!bucket_milliseconds must be > 0.0)	Ú
ValueErrorÚfloatÚ_bucket_millisecondsÚ_chunk_sizeÚ_get_secondsÚ_create_delayed_callÚdictÚ_bucketsÚ_loop)r   Úbucket_millisecondsÚ
chunk_sizeÚseconds_providerÚdelayed_call_creatorÚloops         r   r   z_BatchedTimer.__init__A   sc   € à #Ò%Ð%ÝØ3ñô ð õ %*Ð*=Ñ$>Ô$>ˆÔ!Ø%ˆÔØ,ˆÔØ$8ˆÔ!Ý™œˆŒØˆŒ
ˆ
ˆ
r   c                 ó¬  ‡‡‡— |                       ¦   «         }t          ||z   ¦  «        dz  }|t          || j        z  ¦  «        z  }t          | |ˆˆˆfd„¦  «        }	 | j        |         d                              |¦  «         nO# t          $ rB |dz  |z
  }|                      t          d|¦  «        | j	        |¦  «        }	|	|gf| j        |<   Y nw xY w|S )z#
        IBatchedTimer API
        iè  c                  ó   •—  ‰‰ i ‰¤ŽS r   r   )ÚargsÚfuncÚkwargss   €€€r   ú<lambda>z*_BatchedTimer.call_later.<locals>.<lambda>V   s   ø€ °T°T¸4Ð5JÀ6Ð5JÐ5J€ r   é   ç     @�@r    )
r%   Úintr#   r   r(   ÚappendÚKeyErrorr&   ÚmaxÚ_notify_bucket)
r   Údelayr2   r1   r3   ÚnowÚ	real_timeÚcallÚdiffÚdelayed_calls
     ```     r   Ú
call_laterz_BatchedTimer.call_laterN   s  øøø€ ð
 ×ÒÑ!Ô!ˆÝ˜˜e™Ñ$Ô$ tÑ+ˆ	Ø•S˜ TÔ%>Ñ>Ñ?Ô?Ñ?ˆ	Ý˜D )Ð-JÐ-JÐ-JÐ-JÐ-JÐ-JÑKÔKˆð	>ØŒM˜)Ô$ QÔ'×.Ò.¨tÑ4Ô4Ð4Ð4øÝð 
	>ð 
	>ð 
	>à Ñ&¨#Ñ-ˆDð  ×4Ò4Ý�C˜‘”ØÔ# Yñô ˆLð )5°t°fÐ'=ˆDŒM˜)Ñ$Ð$Ð$ð
	>øøøð ˆs   Á&B ÂA	CÃCc                 ó
  ‡ ‡‡— ‰ j         |         \  }}‰ j         |= g Šˆˆˆ fd„Š‰ j        t          j        t	          t          |¦  «        ¦  «        ‰ j        z  ¦  «        z  } ‰|‰ j        t          d|¦  «        ¦  «         dS )z�
        Internal helper. This 'does' the callbacks in a particular bucket.

        :param real_time: the bucket to do callbacks on
        c                 ó^  •— | d |…         D ]9}	  |¦   «          Œ# t           $ r}‰                     |¦  «         Y d }~Œ2d }~ww xY w| |d …         } | r‰                     |dz  ‰| ||¦  «         d S t          ‰¦  «        r.d}‰D ]}|d                     |¦  «        z  }Œt          |¦  «        ‚d S )Nr6   z'Error(s) processing call_later bucket:
z{}
)Ú	Exceptionr8   r&   ÚlenÚformatÚRuntimeError)	Úcallsr+   Úchunk_delay_msr?   ÚeÚmsgÚerrorsÚnotify_one_chunkr   s	         €€€r   rN   z6_BatchedTimer._notify_bucket.<locals>.notify_one_chunkp   s
  ø€ Ø˜k˜z˜kÔ*ð %ð %�ð%Ø�D‘F”F�F�FøÝ ð %ð %ð %Ø—M’M !Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð%øøøà˜*˜+˜+Ô&ˆEØð ,Ø×)Ò)Ø" VÑ+Ø$ e¨Z¸ñô ð ð ð õ �v‘;”;ð ,ØD�CØ#ð 0ð 0˜Ø˜vŸ}š}¨QÑ/Ô/Ñ/˜˜Ý& sÑ+Ô+Ð+ð	,ð ,s   �
š
A¤>¾Ar    N)r(   r#   ÚmathÚceilr"   rF   r$   r:   )r   r>   rA   rI   Údelay_msrM   rN   s   `    @@r   r;   z_BatchedTimer._notify_bucketf   s£   øøø€ ð !%¤¨iÔ 8Ñˆ�uØŒM˜)Ð$Øˆð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð* Ô,­t¬y½½sÀ5¹z¼zÑ9JÔ9JÈTÔM]Ñ9]Ñ/^Ô/^Ñ^ˆð 	Ð˜ Ô 0µ#°c¸8Ñ2DÔ2DÑEÔEÐEÐEÐEr   c                 ó¶   — 	 | j         |         \  }}n# t          $ r Y dS w xY w|                     |¦  «         |s| j         |= |                     ¦   «          dS dS )zº
        Internal helper. Removes a (possibly still pending) call from a
        bucket. It is *not* an error of the bucket is gone (e.g. the
        call has already happened).
        N)r(   r9   Úremover   )r   r>   r?   rA   rI   s        r   r   z_BatchedTimer._remove_callŠ   s„   € ð	Ø$(¤M°)Ô$<Ñ!ˆ\˜5˜5øÝð 	ð 	ð 	àˆFˆFð	øøøð
 	�Š�TÑÔÐØð 	"Ø”˜iÐ(Ø×ÒÑ!Ô!Ð!Ð!Ð!ð	"ð 	"s   ‚ “
! !r   )r   r   r   r   r   rB   r;   r   r   r   r   r   r   5   si   € € € € € ð	ð 	ð ?Cðð ð ð ðð ð ð0"Fð "Fð "FðH"ð "ð "ð "ð "r   r   )rO   Útxaio.interfacesr   Úobjectr   r   r   r   r   ú<module>rV      sŠ   ðð6 €€€Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð �6ñ ô ð ð,e"ð e"ð e"ð e"ð e"�Mñ e"ô e"ð e"ð e"ð e"r   