ó
    ,Êžj„  ã                  óÚ   • % S SK Jr  S SKrS SKrS SKJr  S SKJr  \R                  " \	5      r
\(       a  S SKJr  S SKJr   " S S5      r\(       a  S S	KJr  \" \" S
5      5      rS\S'   gg)é    )ÚannotationsN)ÚTYPE_CHECKING)ÚArtifactNotFound)ÚBinaryIO)ÚArtifactStorec                  ón   • \ rS rSrSrSSSSS.           SS jjrSS	 jrSS
 jrSS jrSS jr	Sr
g)ÚBackoffé   a˜  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               ó~   • Xl         US:”  d   eUS:”  d   eUS:”  d   eXT:”  d   eX l        X0l        X@l        XPl        g )Nr   )Ú_backendÚ_max_retriesÚ_multiplierÚ
_min_delayÚ
_max_delay)ÚselfÚbackendr   r   r   r   s         Ú§C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\optuna/artifacts/_backoff.pyÚ__init__ÚBackoff.__init__-   sO   € ð  ŒØ˜Q‹ÐˆØ˜A‹~Ðˆ~Ø˜1‹}Ðˆ}ØÓ$Ð$Ð$Ø'ÔØ%ÔØ#ŒØ#�ó    c                ób   • [        U R                  U R                  U-  -  U R                  5      $ )N)Úminr   r   r   )r   Ún_retrys     r   Ú_get_sleep_secsÚBackoff._get_sleep_secsB   s'   € Ü�4—?‘? T×%5Ñ%5°wÑ%>Ñ>ÀÇÁÓPÐPr   c                ój  • [        U R                  5       H  n U R                  R                  U5      s  $     S5       e! [         a    e [
         a7  nX R                  S-
  :X  a  e [        R                  SU SU 3US9   S nAOS nAff = f[        R                  " U R                  U5      5        MŸ  )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*   ÚBackoff.open_readerE   s¬   € Ü�t×(Ñ(Ö)ˆAðdØ—}‘}×0Ñ0°Ó=Ò=ñ *ð 	,Ð+Ó+ˆuøô $ó ØÜó dØ×)Ñ)¨AÑ-Ó-Øä—M‘MÐ$<¸[¸MÈÐSTÐRUÐ"VÐab�MÖcûð	dúô
 �JŠJ�t×+Ñ+¨AÓ.Ö/s   šA Á BÁ-BÂBc                ó€  • [        U R                  5       H  n U R                  R                  X5          g    g ! [         a    e [
         a7  nX0R                  S-
  :X  a  e [        R                  SU SU 3US9   S nAOS nAff = fUR                  S5        [        R                  " U R                  U5      5        Mª  )Nr$   r%   r&   r'   r   )r)   r   r   Úwriter   r+   r,   r-   Úseekr.   r/   r!   )r   r1   Úcontent_bodyr2   r3   s        r   r6   ÚBackoff.writeS   s­   € Ü�t×(Ñ(Ö)ˆAð	dØ—‘×#Ñ# KÔ>Ùò *øô $ó ØÜó dØ×)Ñ)¨AÑ-Ó-Øä—M‘MÐ$<¸[¸MÈÐSTÐRUÐ"VÐab�MÖcûð	dúð
 ×Ñ˜aÔ Ü�JŠJ�t×+Ñ+¨AÓ.Ö/s   š:ºBÁ-B Â Bc                óT  • [        U R                  5       HD  n U R                  R                  U5        [        R                  " U R                  U5      5        MF     g ! [         a    e [
         a4  nX R                  S-
  :X  a  e [        R                  SU 3US9   S nANmS nAff = f)Nr$   zFailed to delete artifact=r'   )r)   r   r   Úremover   r+   r,   r-   r.   r/   r!   r0   s       r   r;   ÚBackoff.removeb   s”   € Ü�t×(Ñ(Ö)ˆAðZØ—‘×$Ñ$ [Ô1ô �JŠJ�t×+Ñ+¨AÓ.Ö/ò *øô $ó ØÜó ZØ×)Ñ)¨AÑ-Ó-Øä—M‘MÐ$>¸{¸mÐ"LÐWX�MÖYûð	Zús   šAÁB'Á3*B"Â"B')r   r   r   r   r   N)r   r   r   Úintr   Úfloatr   r>   r   r>   ÚreturnÚNone)r    r=   r?   r>   )r1   Ústrr?   r   )r1   rA   r8   r   r?   r@   )r1   rA   r?   r@   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r!   r*   r6   r;   Ú__static_attributes__© r   r   r	   r	      si   † ñð: ØØØñ$àð$ð ð	$ð
 ð$ð ð$ð ð$ð 
õ$ô*Qô,ô0÷0r   r	   )ÚFileSystemArtifactStoreÚ.r   Ú_)Ú
__future__r   Úloggingr.   Útypingr   Úoptuna.artifacts.exceptionsr   Ú	getLoggerrB   r,   r   Úoptuna.artifacts._protocolr   r	   Úoptuna.artifactsrI   rK   Ú__annotations__rH   r   r   Ú<module>rT      sb   ðÞ "ã Û Ý  å 8ð ×
Ò
˜HÓ
%€ö Ýå8÷Z0ñ Z0öz õ 9áÑ6°sÓ;Ó<€A€}Ô<ð r   