
    eio                     <    d dl Z d dlZd dlmZ  G d d          ZdS )    N)timec                   0    e Zd ZddZd Zd Zd ZddZdS )	ThrottlerNc           	         || _         ddddddddd| _        | j                            |           | j        d         dk    r#| j        d	         | j        d
         z  | j        d<   t          j                    | _        d| _        g | _        d S )Ng      ?gMbP?r   leakyBucketg     L@g        )
refillRatedelaycapacitytokenscost	algorithm
windowSize	maxWeightr   r   	rateLimitr   F)loopconfigupdatecollectionsdequequeuerunning
timestamps)selfr   r   s      _/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/async_support/base/throttler.py__init__zThrottler.__init__   s    	&!	
 	
 	6""";{#}44'+{<'@4;{C['[DK$ &((
    c                   K   t                      dz  }| j        rI| j        d         \  }}|| j        d         n|}| j        d         dk    r| j        dxx         |z  cc<   |                                s|                    d            | j                                         t          j        d           d {V  t          | j                  dk    rd| _        n|t          j        | j        d                    d {V  t                      dz  }||z
  }|}t          | j        d         || j        d         z  z   | j        d                   | j        d<   | j        Gd S d S )	N  r   r   r   Fr	   r   r
   )r   r   r   r   done
set_resultpopleftasynciosleeplenmin)r   last_timestampfuturer   nowelapseds         r   leaky_bucket_loopzThrottler.leaky_bucket_loop   s     $l 	B:a=LFD*.,4;v&&DD{8$))H%%%-%%%{{}} ,%%d+++
""$$$mA&&&&&&&&&tz??a''#(DLmDK$8999999999fftm.!$(+DK,AGdkZfNgDg,gimitu  jA  )B  )BH%# l 	B 	B 	B 	B 	Br   c                   K   | j         rp| j        d         \  }}|| j        d         n|}t                      dz  }|| j        d         z
  }d}g }| j        D ].}|d         |k    r ||d         z  }|                    |           /|| _        ||z   | j        d         k    r| j                            ||d           |                                s|                    d            | j                                         t          j
        d           d {V  | j        sd| _         nG| j        d         d         | j        d         z   |z
  }|dk    rt          j
        |dz             d {V  | j         nd S d S )	Nr   r   r   r   	timestampr   )r,   r   F)r   r   r   r   r   appendr   r    r!   r"   r#   )	r   r'   r   r(   
cutoffTime	totalCostr   t	wait_times	            r   rolling_window_loopzThrottler.rolling_window_loop/   s     l 	::a=LFD*.,4;v&&DD&&4-Ct{<88JIJ_ ) )[>J..6*I%%a((((DO44;{#;;;&&S$'G'GHHH{{}} ,%%d+++
""$$$mA&&&&&&&&&z )#(DL!_Q/<t{<?XX\__	q==!-	D(89999999995 l 	: 	: 	: 	: 	:r   c                    K   | j         d         dk    r|                                  d {V  d S |                                  d {V  d S )Nr   r   )r   r*   r2   )r   s    r   looperzThrottler.looperL   sl      ;{#}44((*************,,,,,,,,,,,r   c                     t          j                    }| j                            ||f           | j        s4d| _        t          j        |                                 | j                   |S )NT)r   )r"   Futurer   r-   r   ensure_futurer4   r   )r   r   r'   s      r   __call__zThrottler.__call__R   s`    !!
64.)))| 	ADL!$++--di@@@@r   )N)__name__
__module____qualname__r   r*   r2   r4   r8    r   r   r   r      sl           &B B B*: : ::- - -     r   r   )r"   r   r   r   r<   r   r   <module>r=      sh              R R R R R R R R R Rr   