code: def test_metric_output_direct(metric, multioutput, n_columns):
      """Test output is of correct type, dependent on multioutput.
  
      Also tests that four ways to call the metric yield equivalent results:
          1. using the __call__ dunder
          2. calling the evaluate method
      """
      # 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_series(
          n_columns=n_columns, n_timepoints=20, random_state=21
      )
      y_true = _make_series(
          n_columns=n_columns, n_timepoints=20, random_state=42
      )
  
      # coerce to DataFrame since _make_series does not return consistent output type
      y_pred = pd.DataFrame(y_pred)
      y_true = pd.DataFrame(y_true)
  
      res = dict()
  
      res[1] = metric(multioutput=multioutput)(
          y_true=y_true,
          y_pred=y_pred,
          y_pred_benchmark=y_pred,
          y_train=y_true,
      )
  
      res[2] = metric(multioutput=multioutput).evaluate(
          y_true=y_true,
          y_pred=y_pred,
          y_pred_benchmark=y_pred,
          y_train=y_true,
      )
  
      if (
          isinstance(multioutput, np.ndarray)
          or multioutput == "uniform_average"
      ):
          assert all(isinstance(x, float) for x in res.values())
      elif multioutput == "raw_values":
          assert all(isinstance(x, np.ndarray) for x in res.values())
          assert all(x.ndim == 1 for x in res.values())
          assert all(
              len(x) == len(y_true.columns) for x in res.values()
          )
  
      # assert results from all options are equal
      assert np.allclose(res[1], res[2])
  
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 1 for calling a global function with example usage: test_metric_output_direct(metric, multioutput, n_columns) and returns: None