code: def test_evaluate_hierarchical(backend):
      """Check that evaluate works with hierarchical data."""
      # skip test for dask backend if dask is not installed
      if backend == "dask" and not _check_soft_dependencies(
          "dask", severity="none"
      ):
          return None
  
      y = _make_hierarchical(
          random_state=0,
          hierarchy_levels=(2, 2),
          min_timepoints=12,
          max_timepoints=12,
      )
      X = _make_hierarchical(
          random_state=42,
          hierarchy_levels=(2, 2),
          min_timepoints=12,
          max_timepoints=12,
      )
      y = y.sort_index()
      X = X.sort_index()
  
      forecaster = DirectReductionForecaster(LinearRegression())
      cv = SlidingWindowSplitter()
      scoring = MeanAbsolutePercentageError(symmetric=True)
      out_exog = evaluate(
          forecaster,
          cv,
          y,
          X=X,
          scoring=scoring,
          error_score="raise",
          **backend,
      )
      out_no_exog = evaluate(
          forecaster,
          cv,
          y,
          X=None,
          scoring=scoring,
          error_score="raise",
          **backend,
      )
  
      scoring_name = f"test_{scoring.name}"
      assert np.all(out_exog[scoring_name] != out_no_exog[scoring_name])
  
imports: import numpy
  import pandas
  import pytest
  from sklearn.linear_model import LinearRegression
  from sktime.datasets import load_airline, load_longley
  from sktime.exceptions import FitFailedWarning
  from sktime.forecasting.arima import ARIMA, AutoARIMA
  from sktime.forecasting.compose._reduce import DirectReductionForecaster
  from sktime.forecasting.exp_smoothing import ExponentialSmoothing
  from sktime.forecasting.model_evaluation import evaluate
  from sktime.forecasting.model_evaluation._functions import _check_scores, _get_column_order_and_datatype
  from sktime.forecasting.naive import NaiveForecaster
  from sktime.forecasting.tests._config import TEST_FHS, TEST_STEP_LENGTHS_INT
  from sktime.performance_metrics.forecasting import MeanAbsoluteError, MeanAbsolutePercentageError, MeanAbsoluteScaledError
  from sktime.performance_metrics.forecasting.probabilistic import CRPS, EmpiricalCoverage, LogLoss, PinballLoss
  from sktime.split import ExpandingWindowSplitter, SlidingWindowSplitter
  from sktime.tests.test_switch import run_test_for_class
  from sktime.utils._testing.estimator_checks import _assert_array_almost_equal
  from sktime.utils._testing.forecasting import make_forecasting_problem
  from sktime.utils._testing.hierarchical import _make_hierarchical
  from sktime.utils._testing.series import _make_series
  from sktime.utils.parallel import _get_parallel_test_fixtures
  from sktime.utils.validation._dependencies import _check_soft_dependencies
label_desc: Use image node_id 7 for calling a global function with example usage: test_evaluate_hierarchical(backend) and returns: None