
    j,gi                         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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    g/var/www/trellinator.diamondhoofcare.com/public_html/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   r7   )randomuniformr8   r2   r3   r   s     r   r   zFullJitterBackoff.computeG   s+    ~~aTYY

Q[0H!IJJr   r9   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 )Nr7   r   )r8   r2   r3   r@   rA   )r
   r   temps      r   r   zEqualJitterBackoff.computeV   s:    499djj1h;67!;fnnQ---r   r9   r   r   r   rC   rC   K   s8    +$/| E u PT . . .r   rC   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%   )rJ   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   rJ   r@   rA   r8   r2   )r
   r   max_backoffrF   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   rH   rH   [   s=    2$/| #E #u #PT ##& & &r   rH   c                      t               S r!   )rC   r   r   r   default_backoffrQ   q   s    r   )r@   abcr   r   r:   r;   r   r   r#   r+   r=   rC   rH   rQ   r   r   r   <module>rS      sr     # c "o  8 8K K. . & &, r   