
    ph                         S SK r S SKJrJr  SrSr " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r	 " S S\5      r
 " S S\5      r " S S\5      r " S S\5      rS rg)    N)ABCabstractmethodgMb?gMb?c                   :    \ rS rSrSrS r\S\S\4S j5       r	Sr
g)	AbstractBackoff
   zBackoff interfacec                     g)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/home/james-whalen/.local/lib/python3.13/site-packages/redis/backoff.pyresetAbstractBackoff.reset   s     	    failuresreturnc                     g)z'Compute backoff in seconds upon failureNr	   r   r   s     r   computeAbstractBackoff.compute   s     	r   r	   N)__name__
__module____qualname____firstlineno____doc__r   r   intfloatr   __static_attributes__r	   r   r   r   r   
   s,        r   r   c                   X    \ rS rSrSrS\SS4S jrS\4S jrS\	4S jr
S	\S\4S
 jrSrg)ConstantBackoff   zConstant backoff upon failurebackoffr   Nc                     Xl         g)z"`backoff`: backoff time in secondsN_backoff)r   r!   s     r   __init__ConstantBackoff.__init__   s    r   c                 .    [        U R                  45      $ N)hashr$   r
   s    r   __hash__ConstantBackoff.__hash__"   s    T]]$%%r   c                 j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ r(   )
isinstancer   NotImplementedr$   r   others     r   __eq__ConstantBackoff.__eq__%   s(    %11!!}}..r   r   c                     U R                   $ r(   r#   r   s     r   r   ConstantBackoff.compute+   s    }}r   r#   )r   r   r   r   r   r   r%   r   r*   boolr1   r   r   r	   r   r   r   r      sC    '   $  &# &/t /  r   r   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )	NoBackoff/   zNo backoff upon failurec                 $   > [         TU ]  S5        g Nr   )superr%   )r   	__class__s    r   r%   NoBackoff.__init__2   s    r   r	   r   N)r   r   r   r   r   r%   r   __classcell__)r<   s   @r   r7   r7   /   s    ! r   r7   c                   `    \ rS rSrSr\\4S\S\4S jjrS\	4S jr
S\4S jrS	\	S\4S
 jrSrg)ExponentialBackoff6   z Exponential backoff upon failurecapbasec                     Xl         X l        gM
`cap`: maximum backoff time in seconds
`base`: base backoff time in seconds
N_cap_baser   rC   rD   s      r   r%   ExponentialBackoff.__init__9       
 	
r   r   c                 D    [        U R                  U R                  45      $ r(   r)   rJ   rI   r
   s    r   r*   ExponentialBackoff.__hash__A       TZZ+,,r   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r-   rA   r.   rJ   rI   r/   s     r   r1   ExponentialBackoff.__eq__D   ;    %!344!!zzU[[(DTYY%**-DDr   r   c                 N    [        U R                  U R                  SU-  -  5      $ N   )minrI   rJ   r   s     r   r   ExponentialBackoff.computeJ   s     499djj1h;677r   rJ   rI   Nr   r   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r%   r   r*   r5   r1   r   r   r	   r   r   rA   rA   6   sJ    *$/| E u -# -Et E8 8 8r   rA   c                   d    \ rS rSrSr\\4S\S\SS4S jjrS\	4S jr
S\4S	 jrS
\	S\4S jrSrg)FullJitterBackoffN   z Full jitter backoff upon failurerC   rD   r   Nc                     Xl         X l        grF   rH   rK   s      r   r%   FullJitterBackoff.__init__Q   rM   r   c                 D    [        U R                  U R                  45      $ r(   rO   r
   s    r   r*   FullJitterBackoff.__hash__Y   rQ   r   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r-   r_   r.   rJ   rI   r/   s     r   r1   FullJitterBackoff.__eq__\   s;    %!233!!zzU[[(DTYY%**-DDr   r   c           	      x    [         R                  " S[        U R                  U R                  SU-  -  5      5      $ )Nr   rW   )randomuniformrX   rI   rJ   r   s     r   r   FullJitterBackoff.computeb   s+    ~~aTYY

Q[0H!IJJr   rZ   r[   r	   r   r   r_   r_   N   sU    *$/| E u PT -# -Et EK K Kr   r_   c                   d    \ rS rSrSr\\4S\S\SS4S jjrS\	4S jr
S\4S	 jrS
\	S\4S jrSrg)EqualJitterBackofff   z!Equal jitter backoff upon failurerC   rD   r   Nc                     Xl         X l        grF   rH   rK   s      r   r%   EqualJitterBackoff.__init__i   rM   r   c                 D    [        U R                  U R                  45      $ r(   rO   r
   s    r   r*   EqualJitterBackoff.__hash__q   rQ   r   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r-   rl   r.   rJ   rI   r/   s     r   r1   EqualJitterBackoff.__eq__t   rT   r   r   c                     [        U R                  U R                  SU-  -  5      S-  nU[        R                  " SU5      -   $ )NrW   r   )rX   rI   rJ   rh   ri   )r   r   temps      r   r   EqualJitterBackoff.computez   s:    499djj1h;67!;fnnQ---r   rZ   r[   r	   r   r   rl   rl   f   sR    +$/| E u PT -# -Et E. . .r   rl   c                   n    \ rS rSrSr\\4S\S\SS4S jjrS\	4S jr
S\4S	 jrSS
 jrS\	S\4S jrSrg)DecorrelatedJitterBackoff   z(Decorrelated jitter backoff upon failurerC   rD   r   Nc                 *    Xl         X l        SU l        g)rG   r   N)rI   rJ   _previous_backoffrK   s      r   r%   "DecorrelatedJitterBackoff.__init__   s    
 	
!"r   c                 D    [        U R                  U R                  45      $ r(   rO   r
   s    r   r*   "DecorrelatedJitterBackoff.__hash__   rQ   r   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r-   rx   r.   rJ   rI   r/   s     r   r1    DecorrelatedJitterBackoff.__eq__   s;    %!:;;!!zzU[[(DTYY%**-DDr   c                     SU l         g r:   )r{   r
   s    r   r   DecorrelatedJitterBackoff.reset   s
    !"r   r   c                     [        U R                  U R                  S-  5      n[        R                  " U R                  U5      n[        U R                  U5      U l        U R                  $ )N   )maxrJ   r{   rh   ri   rX   rI   )r   r   max_backoffru   s       r   r   !DecorrelatedJitterBackoff.compute   sP    $**d&<&<q&@A~~djj+6!$TYY!5%%%r   )rJ   rI   r{   r>   )r   r   r   r   r   r\   r]   r   r%   r   r*   r5   r1   r   r   r   r	   r   r   rx   rx      sW    2$/| #E #u #PT #-# -Et E#& & &r   rx   c                   d    \ rS rSrSr\\4S\S\SS4S jjrS\	4S jr
S\4S	 jrS
\	S\4S jrSrg)ExponentialWithJitterBackoff   z-Exponential backoff upon failure, with jitterrC   rD   r   Nc                     Xl         X l        grF   rH   rK   s      r   r%   %ExponentialWithJitterBackoff.__init__   rM   r   c                 D    [        U R                  U R                  45      $ r(   rO   r
   s    r   r*   %ExponentialWithJitterBackoff.__hash__   rQ   r   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r-   r   r.   rJ   rI   r/   s     r   r1   #ExponentialWithJitterBackoff.__eq__   s;    %!=>>!!zzU[[(DTYY%**-DDr   r   c                 z    [        U R                  [        R                  " 5       U R                  -  SU-  -  5      $ rV   )rX   rI   rh   rJ   r   s     r   r   $ExponentialWithJitterBackoff.compute   s+    499fmmo

:Q[HIIr   rZ   r[   r	   r   r   r   r      sU    7$/| E u PT -# -Et EJ J Jr   r   c                      [        5       $ r(   )rl   r	   r   r   default_backoffr      s    r   )rh   abcr   r   r\   r]   r   r   r7   rA   r_   rl   rx   r   r   r	   r   r   <module>r      s     # c "o ( 8 80K K0. .2& &>J? J0 r   