code: def test_trials_dataframe_with_multi_objective_optimization(
      attrs: tuple[str, ...], multi_index: bool
  ) -> None:
      def f(trial: Trial) -> tuple[float, float]:
          x = trial.suggest_float("x", 1, 1)
          y = trial.suggest_float("y", 2, 2)
  
          return x + y, x**2 + y**2  # 3, 5
  
      # without set_metric_names()
      study = create_study(directions=["minimize", "maximize"])
      study.optimize(f, n_trials=1)
      df = study.trials_dataframe(attrs=attrs, multi_index=multi_index)
      if multi_index:
          assert df.get("values")[0][0] == 3
          assert df.get("values")[1][0] == 5
      else:
          assert df.values_0[0] == 3
          assert df.values_1[0] == 5
  
      # with set_metric_names()
      study.set_metric_names(["v0", "v1"])
      df = study.trials_dataframe(attrs=attrs, multi_index=multi_index)
      if multi_index:
          assert df.get("values")["v0"][0] == 3
          assert df.get("values")["v1"][0] == 5
      else:
          assert df.get("values_v0")[0] == 3
          assert df.get("values_v1")[0] == 5
  
file_path: optuna/tests/study_tests/test_dataframe.py
imports: from __future__ import annotations
  import pandas
  import pytest
  from optuna import create_study
  from optuna import create_trial
  from optuna import Trial
  from optuna.testing.storages import STORAGE_MODES
  from optuna.testing.storages import StorageSupplier
  from optuna.trial import TrialState
label_desc: Use image node_id 4 for calling a global function with example usage: test_trials_dataframe_with_multi_objective_optimization(attrs, multi_index) and returns: unknown,  unknown