class_docstr: Hyperparameter tuning of SB3 agents using Optuna
  
  Attributes
  ----------
    env_train: Training environment for SB3
    model_name: str
    env_trade: testing environment
    logging_callback: callback for tuning
    total_timesteps: int
    n_trials: number of hyperparameter configurations
  
  Note:
    The default sampler and pruner are used are
    Tree Parzen Estimator and Hyperband Scheduler
    respectively.
code: def default_sample_hyperparameters(self, trial: optuna.Trial):
      if self.model_name == "a2c":
          return hpt.sample_a2c_params(trial)
      elif self.model_name == "ddpg":
          return hpt.sample_ddpg_params(trial)
      elif self.model_name == "td3":
          return hpt.sample_td3_params(trial)
      elif self.model_name == "sac":
          return hpt.sample_sac_params(trial)
      elif self.model_name == "ppo":
          return hpt.sample_ppo_params(trial)
  
imports: from __future__ import annotations
  import datetime
  import joblib
  import optuna
  import pandas
  from stable_baselines3 import A2C
  from stable_baselines3 import DDPG
  from stable_baselines3 import PPO
  from stable_baselines3 import SAC
  from stable_baselines3 import TD3
  import finrl.agents.stablebaselines3.hyperparams_opt
  from finrl import config
  from finrl.agents.stablebaselines3.models import DRLAgent
  from finrl.main import check_and_make_directories
  from finrl.plot import backtest_stats
label_desc: Use image node_id 2 for calling the TuneSB3Optuna obj's underlying member method code with example usage: obj.default_sample_hyperparameters(trial) and returns: hpt, hpt, hpt, hpt, hpt