
    )Jf                         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                   .    e Zd ZdZd Ze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    P/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/redis/backoff.pyresetzAbstractBackoff.reset   s	     	    c                     dS )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   
   sD             ^  r   r   c                       e Zd ZdZd Zd ZdS )ConstantBackoffzConstant backoff upon failurec                     || _         dS )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      s8        ''         r   r   c                   "     e Zd ZdZ fdZ xZS )	NoBackoffzNo backoff upon failurec                 J    t                                          d           d S 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dS )ExponentialBackoffz Exponential backoff upon failurec                 "    || _         || _        dS 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                 B    t          | j        | j        d|z  z            S )N   )minr,   r-   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'   -   sB        **&\    8 8 8 8 8r   r'   c                   $    e Zd ZdZeefdZd ZdS )FullJitterBackoffz Full jitter backoff upon failurec                 "    || _         || _        dS r)   r+   r.   s      r   r   zFullJitterBackoff.__init__?   r1   r   c           	      h    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TY
Q[0H!I!IJJJr   Nr5   r   r   r   r9   r9   <   sG        **&\    K K K K Kr   r9   c                   $    e Zd ZdZeefdZd ZdS )EqualJitterBackoffz!Equal jitter backoff upon failurec                 "    || _         || _        dS r)   r+   r.   s      r   r   zEqualJitterBackoff.__init__N   r1   r   c                 x    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:    49dj1h;677!;fnQ----r   Nr5   r   r   r   r?   r?   K   sB        ++&\    . . . . .r   r?   c                   *    e Zd ZdZeefdZd Zd ZdS )DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurec                 0    || _         || _        d| _        dS )r*   r   N)r,   r-   _previous_backoffr.   s      r   r   z"DecorrelatedJitterBackoff.__init__^   s     
 	
!"r   c                     d| _         d S 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   sK    $*d&<q&@AA~dj+66!$TY!5!5%%r   N)	r   r   r   r   r6   r7   r   r   r   r   r   r   rD   rD   [   sQ        2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      sy    # # # # # # # #     c   "    o          8 8 8 8 8 8 8 8K K K K K K K K. . . . . . . . & & & & & & & &,         r   