
    (^i                        U d dl mZ d dlZd dlZd dlmZ d dlmZ  ej                  e	      Z
erd dlmZ d dlmZ  G d d      Zerd d	lmZ  e ed
            Zded<   yy)    )annotationsN)TYPE_CHECKING)ArtifactNotFound)BinaryIO)ArtifactStorec                  Z    e Zd ZdZddddd	 	 	 	 	 	 	 	 	 	 	 ddZddZdd	Zdd
ZddZy)Backoffa  An artifact store's middleware for exponential backoff.

    Example:
       .. code-block:: python

           import optuna
           from optuna.artifacts import upload_artifact
           from optuna.artifacts import Boto3ArtifactStore
           from optuna.artifacts import Backoff


           artifact_store = Backoff(Boto3ArtifactStore("my-bucket"))


           def objective(trial: optuna.Trial) -> float:
               ... = trial.suggest_float("x", -10, 10)
               file_path = generate_example(...)
               upload_artifact(
                   artifact_store=artifact_store,
                   file_path=file_path,
                   study_or_trial=trial,
               )
               return ...
    
      g?   )max_retries
multiplier	min_delay	max_delayc                   || _         |dkD  sJ |dkD  sJ |dkD  sJ ||kD  sJ || _        || _        || _        || _        y )Nr   )_backend_max_retries_multiplier
_min_delay
_max_delay)selfbackendr   r   r   r   s         Z/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/artifacts/_backoff.py__init__zBackoff.__init__-   s[      QA~~1}}9$$$'%##    c                b    t        | j                  | j                  |z  z  | j                        S )N)minr   r   r   )r   n_retrys     r   _get_sleep_secszBackoff._get_sleep_secsB   s'    4??T%5%5w%>>PPr   c                f   t        | j                        D ]  }	 | j                  j                  |      c S  J d       # t        $ r  t
        $ r:}|| j                  dz
  k(  r t        j                  d| d| |       Y d }~nd }~ww xY wt        j                  | j                  |             )N   Failed to open artifact=	 n_retry=exc_infozmust not reach here)ranger   r   open_readerr   	Exception_loggererrortimesleepr   r   artifact_idies       r   r'   zBackoff.open_readerE   s    t(() 
	0Ad}}00==
	0 	,++u $  d))A--MM$<[MSTRU"VabMcc	d
 JJt++A./s   ?B0BBc                ~   t        | j                        D ]   }	 | j                  j                  ||        y  y # t        $ r  t
        $ r:}|| j                  dz
  k(  r t        j                  d| d| |       Y d }~nd }~ww xY w|j                  d       t        j                  | j                  |             )Nr!   r"   r#   r$   r   )r&   r   r   writer   r(   r)   r*   seekr+   r,   r   )r   r.   content_bodyr/   r0   s        r   r2   zBackoff.writeS   s    t(() 	0A	d##K>	0 $  d))A--MM$<[MSTRU"VabMcc	d
 a JJt++A./s   :B0BBc                P   t        | j                        D ]B  }	 | j                  j                  |       t        j                  | j                  |             D y # t        $ r  t
        $ r7}|| j                  dz
  k(  r t        j                  d| |       Y d }~kd }~ww xY w)Nr!   zFailed to delete artifact=r$   )r&   r   r   remover   r(   r)   r*   r+   r,   r   r-   s       r   r6   zBackoff.removeb   s    t(() 
	0AZ$$[1 JJt++A./
	0 $  Z))A--MM$>{m"LWXMYY	Zs   AB%.-B  B%N)r   r   r   intr   floatr   r8   r   r8   returnNone)r   r7   r9   r8   )r.   strr9   r   )r.   r;   r4   r   r9   r:   )r.   r;   r9   r:   )	__name__
__module____qualname____doc__r   r   r'   r2   r6    r   r   r	   r	      si    : $$ 	$
 $ $ $ 
$*Q,00r   r	   )FileSystemArtifactStore.r   _)
__future__r   loggingr+   typingr   optuna.artifacts.exceptionsr   	getLoggerr<   r)   r   optuna.artifacts._protocolr   r	   optuna.artifactsrA   rC   __annotations__r@   r   r   <module>rL      sd    "     8 '

H
% 8Z0 Z0z  96s;<A}< r   