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 backtest(
      self, final_study: optuna.Study
  ) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
      print("Hyperparameters after tuning", final_study.best_params)
      print("Best Trial", final_study.best_trial)
  
      tuned_model = self.MODELS[self.model_name].load(
          f"./{config.TRAINED_MODEL_DIR}/{self.model_name}_{final_study.best_trial.number}.pth",
          env=self.env_train,
      )
  
      (
          df_account_value_tuned,
          df_actions_tuned,
      ) = DRLAgent.DRL_prediction(
          model=tuned_model, environment=self.env_trade
      )
  
      print("==============Get Backtest Results===========")
      now = datetime.datetime.now().strftime("%Y%m%d-%Hh%M")
  
      perf_stats_all_tuned = backtest_stats(
          account_value=df_account_value_tuned
      )
      perf_stats_all_tuned = pd.DataFrame(perf_stats_all_tuned)
      perf_stats_all_tuned.to_csv(
          "./"
          + config.RESULTS_DIR
          + "/perf_stats_all_tuned_"
          + now
          + ".csv"
      )
  
      return (
          df_account_value_tuned,
          df_actions_tuned,
          perf_stats_all_tuned,
      )
  
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 6 for calling the TuneSB3Optuna obj's underlying member method code with example usage: obj.backtest(final_study) and returns: df_account_value_tuned,  df_actions_tuned,  perf_stats_all_tuned