code: def test_metric_hierarchical_by_index(
      multioutput, multilevel, n_columns
  ):
      """Test hierarchical input for metrics."""
      # create numpy weights based on n_columns
      if multioutput == "numpy":
          if n_columns == 1:
              return None
          multioutput = np.random.rand(n_columns)
  
      # create test data
      y_pred = _make_hierarchical(random_state=21, n_columns=n_columns)
      y_true = _make_hierarchical(random_state=42, n_columns=n_columns)
  
      metric = MeanSquaredError(
          multioutput=multioutput, multilevel=multilevel
      )
  
      res = metric.evaluate_by_index(
          y_true=y_true,
          y_pred=y_pred,
      )
  
      if isinstance(multioutput, str) and multioutput == "raw_values":
          assert isinstance(res, pd.DataFrame)
          assert (res.columns == y_true.columns).all()
      else:
          assert isinstance(res, pd.Series)
  
      if multilevel == "raw_values":
          assert isinstance(res.index, pd.MultiIndex)
          expected_index = y_true.index
      else:
          assert not isinstance(res.index, pd.MultiIndex)
          expected_index = y_true.index.get_level_values(-1).unique()
  
      found_index = res.index.unique()
      assert set(expected_index) == set(found_index)
  
file_path: sktime/sktime/performance_metrics/tests/test_metrics_classes.py
imports: from inspect import getmembers, isclass
  import numpy
  import pandas
  import pytest
  from sktime.datasets import load_airline
  from sktime.performance_metrics.forecasting import MeanSquaredError, _classes, make_forecasting_scorer
  from sktime.utils._testing.hierarchical import _make_hierarchical
  from sktime.utils._testing.panel import _make_panel
  from sktime.utils._testing.series import _make_series
label_desc: Use image node_id 5 for calling a global function with example usage: test_metric_hierarchical_by_index(multioutput, multilevel, n_columns) and returns: None