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 calculate_sharpe(self, df: pd.DataFrame):
      df["daily_return"] = df["account_value"].pct_change(1)
      if df["daily_return"].std() != 0:
          sharpe = (
              (252**0.5)
              * df["daily_return"].mean()
              / df["daily_return"].std()
          )
          return sharpe
      else:
          return 0
  
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 3 for calling the TuneSB3Optuna obj's underlying member method code with example usage: obj.calculate_sharpe(df) and returns: sharpe, int