
    Pfi                         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dS )    N)ABCabstractmethodgMb?gMb?c                   8    e Zd ZdZd Zededefd            ZdS )AbstractBackoffzBackoff interfacec                     dS )z
        Reset internal state before an operation.
        `reset` is called once at the beginning of
        every call to `Retry.call_with_retry`
        N selfs    ?/var/www/html/env/lib/python3.11/site-packages/redis/backoff.pyresetzAbstractBackoff.reset   s	     	    failuresreturnc                     dS )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   
   sW                ^  r   r   c                   2    e Zd ZdZdeddfdZdedefdZdS )ConstantBackoffzConstant backoff upon failurebackoffr   Nc                     || _         dS )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 failurer   Nc                 J    t                                          d           d S 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#   &   sC        !!         r   r#   c                   8    e Zd ZdZeefdedefdZdedefdZ	dS )	ExponentialBackoffz Exponential backoff upon failurecapbasec                 "    || _         || _        dS 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                 B    t          | j        | j        d|z  z            S )N   )minr2   r3   r   s     r   r   zExponentialBackoff.compute8   s    49dj1h;6777r   N
r   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r   r   r   r   r   r   r+   r+   -   sh        **$/|  E u    8 8 8 8 8 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	dS )	FullJitterBackoffz Full jitter backoff upon failurer,   r-   r   Nc                 "    || _         || _        dS r/   r1   r4   s      r   r   zFullJitterBackoff.__init__?   r5   r   r   c           	      h    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TY
Q[0H!I!IJJJr   r9   r   r   r   r=   r=   <   sx        **$/|  E u PT    K K K K K 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	dS )	EqualJitterBackoffz!Equal jitter backoff upon failurer,   r-   r   Nc                 "    || _         || _        dS r/   r1   r4   s      r   r   zEqualJitterBackoff.__init__N   r5   r   r   c                 x    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:    49dj1h;677!;fnQ----r   r9   r   r   r   rC   rC   K   sp        ++$/|  E u PT    . . . . . . . .r   rC   c                   D    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
dS )DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurer,   r-   r   Nc                 0    || _         || _        d| _        dS )r0   r   N)r2   r3   _previous_backoffr4   s      r   r   z"DecorrelatedJitterBackoff.__init__^   s     
 	
!"r   c                     d| _         d S 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   sK    $*d&<q&@AA~dj+66!$TY!5!5%%r   r(   )r   r   r   r   r:   r;   r   r   r   r   r   r   r   r   rH   rH   [   s        2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      sy    # # # # # # # #     c   "    o          8 8 8 8 8 8 8 8K K K K K K K K. . . . . . . . & & & & & & & &,         r   