
    +h                         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                   &    e Zd ZdZd Ze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    @/var/www/html/venv/lib/python3.12/site-packages/redis/backoff.pyresetzAbstractBackoff.reset   s     	    c                      y)z'Compute backoff in seconds upon failureNr   r
   failuress     r   computezAbstractBackoff.compute   s     	r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   
   s      r   r   c                       e Zd ZdZd Zd Zy)ConstantBackoffzConstant backoff upon failurec                     || _         y)z"`backoff`: backoff time in secondsN_backoff)r
   backoffs     r   __init__zConstantBackoff.__init__   s	    r   c                     | j                   S Nr   r   s     r   r   zConstantBackoff.compute"   s    }}r   N)r   r   r   r   r   r   r   r   r   r   r      s    ' r   r   c                   "     e Zd ZdZ 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   r   r   r   r   __classcell__)r$   s   @r   r    r    &   s    ! r   r    c                   "    e Zd ZdZeefdZd Zy)ExponentialBackoffz Exponential backoff upon failurec                      || _         || _        ye
        `cap`: maximum backoff time in seconds
        `base`: base backoff time in seconds
        N_cap_baser
   capbases      r   r   zExponentialBackoff.__init__0       
 	
r   c                 N    t        | j                  | j                  d|z  z        S )N   )minr,   r-   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'   -   s    *&\ 8r   r'   c                   "    e Zd ZdZeefdZd Zy)FullJitterBackoffz Full jitter backoff upon failurec                      || _         || _        yr)   r+   r.   s      r   r   zFullJitterBackoff.__init__?   r1   r   c           	      v    t        j                  dt        | j                  | j                  d|z  z              S )Nr   r3   )randomuniformr4   r,   r-   r   s     r   r   zFullJitterBackoff.computeG   s+    ~~aTYY

Q[0H!IJJr   Nr5   r   r   r   r9   r9   <   s    *&\ Kr   r9   c                   "    e Zd ZdZeefdZd Zy)EqualJitterBackoffz!Equal jitter backoff upon failurec                      || _         || _        yr)   r+   r.   s      r   r   zEqualJitterBackoff.__init__N   r1   r   c                     t        | j                  | j                  d|z  z        dz  }|t        j                  d|      z   S )Nr3   r   )r4   r,   r-   r<   r=   )r
   r   temps      r   r   zEqualJitterBackoff.computeV   s:    499djj1h;67!;fnnQ---r   Nr5   r   r   r   r?   r?   K   s    +&\ .r   r?   c                   (    e Zd ZdZeefdZd Zd Zy)DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurec                 .    || _         || _        d| _        y)r*   r   N)r,   r-   _previous_backoffr.   s      r   r   z"DecorrelatedJitterBackoff.__init__^   s    
 	
!"r   c                     d| _         y r"   )rF   r	   s    r   r   zDecorrelatedJitterBackoff.resetg   s
    !"r   c                     t        | j                  | j                  dz        }t        j                  | j                  |      }t        | j                  |      | _        | j                  S )N   )maxr-   rF   r<   r=   r4   r,   )r
   r   max_backoffrB   s       r   r   z!DecorrelatedJitterBackoff.computej   sP    $**d&<&<q&@A~~djj+6!$TYY!5%%%r   N)	r   r   r   r   r6   r7   r   r   r   r   r   r   rD   rD   [   s    2&\ ##&r   rD   c                      t               S r   )r?   r   r   r   default_backoffrM   q   s    r   )r<   abcr   r   r6   r7   r   r   r    r'   r9   r?   rD   rM   r   r   r   <module>rO      sr     # c "o  8 8K K. . & &, r   