o
    nil'                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZmZ d dlmZ d dlZd dlmZ ddlmZ eeZejjZejZejZ G dd de!Z"ed	Z#G d
d dee# Z$ededZ%de
de
dee%ge%f fddZ&G dd de j'Z(G dd de(Z)G dd de(Z*ddde(dedee# f de
deee!gdf  de
de#fdd Z+dS )!    N)Any	AwaitableCallableGenericOptionalTupleTypeTypeVar)	HTTPError)CheckRetryFnType   )ContextCancelledErrorc                       s:   e Zd ZdZ	ddee dee ddf fddZ  ZS )	TransientErrorzException type designated for errors that may only be temporary.

    Can have its own message and/or wrap another exception.
    Nmsgexcreturnc                    s   t  | || _|| _d S N)super__init__message	exception)selfr   r   	__class__ Q/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/retry.pyr   #   s   
zTransientError.__init__NN)	__name__
__module____qualname____doc__r   strBaseExceptionr   __classcell__r   r   r   r   r      s    r   _Rc                   @   s   e Zd ZdZdZddddd dddfdedef d	eej	 d
ee
j dee dedeeee df  dedeeeegef  ddfddZdedee
j defddZedefddZdededefddZdS )RetryzCreate a retryable version of a function.

    Calling this will call the passed function, retrying if any exceptions in
    retryable_exceptions are caught, with exponential backoff.
    i,  Nc                 C   s   dS )NTr   )er   r   r   <lambda>=   s    zRetry.<lambda>zNetwork errorcall_fn.retry_timedeltaretry_cancel_eventnum_retriescheck_retry_fnretryable_exceptionserror_prefixretry_callbackr   c	           	      C   sd   || _ || _|| _tj tjdd | _|| _|| _|| _	|d ur&|| _
ntf| _
d| _|| _d S )Nr   minutesr   )_call_fn_check_retry_fn_error_prefixdatetimenow	timedelta_last_print_retry_timedelta_retry_cancel_event_num_retries_retryable_exceptionsr   _indexr/   )	r   r(   r)   r*   r+   r,   r-   r.   r/   r   r   r   r   7   s   
zRetry.__init__wait_secondscancel_eventc                 C   s   |st | dS ||}|S )NF)SLEEP_FNwait)r   r>   r?   	cancelledr   r   r   _sleep_check_cancelledP   s
   
zRetry._sleep_check_cancelledc                 C   s   | j S )z7The number of iterations the previous __call__ retried.)	_num_iter)r   r   r   r   	num_itersY   s   zRetry.num_itersargskwargsc              
   O   s$  | d| j}|du rtjdd}| d| j}| d| j}|du r%d}tjdr-d	}| d
d}| d| j	}|}t
 }	|	}
d}d	| _	 z0| j|i |}| jdkru|	| j tjddkrut
 | _| jru| dd| jt
 |
  |W S  | jy } z`||}|s | j|kr t
 }	t|tjr|s|	}|	| |kr |	|
 |kr | jdkrtjd|d t|tr|jdur| jdur| |jj|jj ntd| j|jj W Y d}~nd}~ww | j|t d |  |d}|rtd|d9 }|| j kr| j }t
 }	|  jd7  _qG)a  Call the wrapped function, with retries.

        Args:
           retry_timedelta (kwarg): amount of time to retry before giving up.
           sleep_base (kwarg): amount of time to sleep upon first failure, all other sleeps
               are derived from this one.
        r)   Nim  )daysr*   r+   i@B 
WANDB_TESTr   retry_sleep_baser   r,   T   r0      z0{} resolved after {}, resuming normal operation.zRetry attempt failed:)exc_infoz{} ({}), entering retry loop.g      ?)r?   zretry timeout)!popr9   r5   r7   r:   r;   osenvirongetr3   NOW_FNrD   r2   r8   r/   formatr4   r<   
isinstanceloggerinfor
   responsestatus_codetextwandbtermlogr   r   rC   randomr   MAX_SLEEP_SECONDS)r   rF   rG   r)   r*   r+   
sleep_baser,   sleepr6   
start_timestart_time_triggeredresultr&   retry_timedelta_triggeredrB   r   r   r   __call__^   s   




-zRetry.__call__)r   r   r   r    r]   r   r$   r   r5   r7   	threadingEventintr   r   r   	Exceptionr!   r   r   floatboolrC   propertyrE   rd   r   r   r   r   r%   .   sN    
	


	r%   _F)boundrF   kargsr   c                     s   dt dt f fdd}|S )Nfnr   c                    s>   t | gR i  t| dtdtdtf fdd}|S )NrF   rn   r   c                     s    | i |S r   r   rF   rn   retrierr   r   
wrapped_fn   s   z0retriable.<locals>.decorator.<locals>.wrapped_fn)r%   	functoolswrapsr   )ro   rs   rp   rq   r   	decorator   s   zretriable.<locals>.decorator)rl   )rF   rn   rv   r   rp   r   	retriable   s   	rw   c                   @   s*   e Zd ZdZejdedejfddZ	dS )BackoffzTA backoff strategy: decides whether to sleep or give up when an exception is raised.r   r   c                 C   s   t r   )NotImplementedErrorr   r   r   r   r   next_sleep_or_reraise   s   zBackoff.next_sleep_or_reraiseN)
r   r   r   r    abcabstractmethodrh   r5   r7   r{   r   r   r   r   rx      s    rx   c                   @   sV   e Zd ZdZ		ddejdejdee deej ddf
dd	Zd
e	dejfddZ
dS )ExponentialBackoffzSJittered exponential backoff: sleep times increase ~exponentially up to some limit.Ninitial_sleep	max_sleepmax_retries
timeout_atr   c                 C   s"   t ||| _|| _|| _|| _d S r   )min_next_sleep
_max_sleep_remaining_retries_timeout_at)r   r   r   r   r   r   r   r   r      s   
zExponentialBackoff.__init__r   c                 C   sh   | j d ur| j dkr||  j d8  _ | jd ur t | jkr || jt| j| jdt   }| _|S )Nr   r   )r   r   rR   r   r   r   r\   )r   r   rb   r   r   r   r{      s   

z(ExponentialBackoff.next_sleep_or_reraiser   )r   r   r   r    r5   r7   r   rg   r   rh   r{   r   r   r   r   r~      s     
r~   c                   @   sD   e Zd ZdZdeegef deddfddZdede	j
fd	d
ZdS )FilteredBackoffzRRe-raise any exceptions that fail a predicate; delegate others to another Backoff.filterwrappedr   Nc                 C   s   || _ || _d S r   )_filter_wrapped)r   r   r   r   r   r   r     s   
zFilteredBackoff.__init__r   c                 C   s   |  |s|| j|S r   )r   r   r{   rz   r   r   r   r{   
  s   
z%FilteredBackoff.next_sleep_or_reraise)r   r   r   r    r   rh   rj   rx   r   r5   r7   r{   r   r   r   r   r     s     r   )on_excbackoffro   .r   rG   c             
      sj   	 z||i |I dH W S  t y3 } z|dur|| t| | I dH  W Y d}~nd}~ww q)zCall `fn` repeatedly until either it succeeds, or `backoff` decides we should give up.

    Each time `fn` fails, `on_exc` is called with the exception.
    TN)rh   SLEEP_ASYNC_FNr{   total_seconds)r   ro   r   rF   rG   r&   r   r   r   retry_async  s   $r   ),r|   asyncior5   rt   loggingrO   r\   re   timetypingr   r   r   r   r   r   r   r	   requestsr
   rZ   
wandb.utilr   mailboxr   	getLoggerr   rU   r6   rR   r_   r@   r   rh   r   r$   r%   rl   rw   ABCrx   r~   r   r   r   r   r   r   <module>   sR    (
   