class_docstr: 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(trial, file_path, artifact_store)
             return ...
code: def write(self, artifact_id: str, content_body: BinaryIO) -> None:
      for i in range(self._max_retries):
          try:
              self._backend.write(artifact_id, content_body)
              break
          except ArtifactNotFound:
              raise
          except Exception as e:
              if i == self._max_retries - 1:
                  raise
              else:
                  _logger.error(
                      f"Failed to open artifact={artifact_id} n_retry={i}",
                      exc_info=e,
                  )
          content_body.seek(0)
          time.sleep(self._get_sleep_secs(i))
  
file_path: optuna/optuna/artifacts/_backoff.py
imports: from __future__ import annotations
  import logging
  import time
  from typing import TYPE_CHECKING
  from optuna.artifacts.exceptions import ArtifactNotFound
label_desc: Use image node_id 4 for calling the Backoff obj's underlying member method code with example usage: obj.write(artifact_id, content_body) without return types