
    :OhO                         d dl Z d dlmZmZ dZdZ G d de      Z G d de      Z G d	 d
e      Z G d de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Zd Zy)    N)ABCabstractmethodgMb?gMb?c                   0    e Zd ZdZd Zededefd       Zy)AbstractBackoffzBackoff interfacec                      y)z
        Reset internal state before an operation.
        `reset` is called once at the beginning of
        every call to `Retry.call_with_retry`
        N selfs    R/var/www/html/lionshead-backend/venv/lib/python3.12/site-packages/redis/backoff.pyresetzAbstractBackoff.reset   s     	    failuresreturnc                      y)z'Compute backoff in seconds upon failureNr   r
   r   s     r   computezAbstractBackoff.compute   s     	r   N)	__name__
__module____qualname____doc__r   r   intfloatr   r   r   r   r   r   
   s,        r   r   c                   0    e Zd ZdZdeddfdZdedefdZy)ConstantBackoffzConstant backoff upon failurebackoffr   Nc                     || _         y)z"`backoff`: backoff time in secondsN_backoff)r
   r   s     r   __init__zConstantBackoff.__init__   s	    r   r   c                     | j                   S Nr   r   s     r   r   zConstantBackoff.compute"   s    }}r   )r   r   r   r   r   r   r   r   r   r   r   r   r      s+    '   $    r   r   c                   $     e Zd ZdZd fdZ xZS )	NoBackoffzNo backoff upon failurec                 $    t         |   d       y Nr   )superr   )r
   	__class__s    r   r   zNoBackoff.__init__)   s    r   r   N)r   r   r   r   r   __classcell__)r'   s   @r   r#   r#   &   s    ! r   r#   c                   6    e Zd ZdZeefdedefdZdedefdZ	y)	ExponentialBackoffz Exponential backoff upon failurecapbasec                      || _         || _        ye
        `cap`: maximum backoff time in seconds
        `base`: base backoff time in seconds
        N_cap_baser
   r,   r-   s      r   r   zExponentialBackoff.__init__0       
 	
r   r   r   c                 N    t        | j                  | j                  d|z  z        S N   )minr2   r3   r   s     r   r   zExponentialBackoff.compute8   s     499djj1h;677r   N
r   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r   r   r   r   r   r   r+   r+   -   s0    *$/| E u 8 8 8r   r+   c                   :    e Zd ZdZeefdededdfdZdedefdZ	y)	FullJitterBackoffz Full jitter backoff upon failurer,   r-   r   Nc                      || _         || _        yr/   r1   r4   s      r   r   zFullJitterBackoff.__init__?   r5   r   r   c           	      v    t        j                  dt        | j                  | j                  d|z  z              S )Nr   r8   )randomuniformr9   r2   r3   r   s     r   r   zFullJitterBackoff.computeG   s+    ~~aTYY

Q[0H!IJJr   r:   r   r   r   r>   r>   <   s;    *$/| E u PT K K Kr   r>   c                   :    e Zd ZdZeefdededdfdZdedefdZ	y)	EqualJitterBackoffz!Equal jitter backoff upon failurer,   r-   r   Nc                      || _         || _        yr/   r1   r4   s      r   r   zEqualJitterBackoff.__init__N   r5   r   r   c                     t        | j                  | j                  d|z  z        dz  }|t        j                  d|      z   S )Nr8   r   )r9   r2   r3   rA   rB   )r
   r   temps      r   r   zEqualJitterBackoff.computeV   s:    499djj1h;67!;fnnQ---r   r:   r   r   r   rD   rD   K   s8    +$/| E u PT . . .r   rD   c                   B    e Zd ZdZeefdededdfdZd
dZde	defd	Z
y)DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurer,   r-   r   Nc                 .    || _         || _        d| _        y)r0   r   N)r2   r3   _previous_backoffr4   s      r   r   z"DecorrelatedJitterBackoff.__init__^   s    
 	
!"r   c                     d| _         y r%   )rK   r	   s    r   r   zDecorrelatedJitterBackoff.resetg   s
    !"r   r   c                     t        | j                  | j                  dz        }t        j                  | j                  |      }t        | j                  |      | _        | j                  S )N   )maxr3   rK   rA   rB   r9   r2   )r
   r   max_backoffrG   s       r   r   z!DecorrelatedJitterBackoff.computej   sP    $**d&<&<q&@A~~djj+6!$TYY!5%%%r   r(   )r   r   r   r   r;   r<   r   r   r   r   r   r   r   r   rI   rI   [   s=    2$/| #E #u #PT ##& & &r   rI   c                   :    e Zd ZdZeefdededdfdZdedefdZ	y)	ExponentialWithJitterBackoffz-Exponential backoff upon failure, with jitterr,   r-   r   Nc                      || _         || _        yr/   r1   r4   s      r   r   z%ExponentialWithJitterBackoff.__init__t   r5   r   r   c                 x    t        | j                  t        j                         | j                  z  d|z  z        S r7   )r9   r2   rA   r3   r   s     r   r   z$ExponentialWithJitterBackoff.compute|   s+    499fmmo

:Q[HIIr   r:   r   r   r   rR   rR   q   s;    7$/| E u PT J J Jr   rR   c                      t               S r!   )rD   r   r   r   default_backoffrV      s    r   )rA   abcr   r   r;   r<   r   r   r#   r+   r>   rD   rI   rR   rV   r   r   r   <module>rX      s     # c "o  8 8K K. . & &,J? J r   