code: def helper_check_output(
      metric, score_average, multioutput, sample_data
  ):
      y_true, y_pred = sample_data
      """Test output is correct class and shape for given data."""
      loss = metric.create_test_instance()
      loss.set_params(
          score_average=score_average, multioutput=multioutput
      )
  
      eval_loss = loss(y_true, y_pred)
      index_loss = loss.evaluate_by_index(y_true, y_pred)
  
      no_vars = len(y_pred.columns.get_level_values(0).unique())
      no_scores = len(y_pred.columns.get_level_values(1).unique())
  
      if (
          0.5 in y_pred.columns.get_level_values(1)
          and loss.get_tag("scitype:y_pred") == "pred_interval"
          and y_pred.columns.nlevels == 2
      ):
          no_scores = no_scores - 1
          no_scores = (
              no_scores / 2
          )  # one interval loss per two quantiles given
          if (
              no_scores == 0
          ):  # if only 0.5 quant, no output to interval loss
              no_vars = 0
  
      if score_average and multioutput == "uniform_average":
          assert isinstance(eval_loss, float)
          assert isinstance(index_loss, pd.Series)
  
          assert len(index_loss) == y_pred.shape[0]
  
      if not score_average and multioutput == "uniform_average":
          assert isinstance(eval_loss, pd.Series)
          assert isinstance(index_loss, pd.DataFrame)
  
          # get two quantiles from each interval so if not score averaging
          # get twice number of unique coverages
          if (
              loss.get_tag("scitype:y_pred") == "pred_quantiles"
              and y_pred.columns.nlevels == 3
          ):
              assert len(eval_loss) == 2 * no_scores
          else:
              assert len(eval_loss) == no_scores
  
      if not score_average and multioutput == "raw_values":
          assert isinstance(eval_loss, pd.Series)
          assert isinstance(index_loss, pd.DataFrame)
  
          true_len = no_vars * no_scores
  
          if (
              loss.get_tag("scitype:y_pred") == "pred_quantiles"
              and y_pred.columns.nlevels == 3
          ):
              assert len(eval_loss) == 2 * true_len
          else:
              assert len(eval_loss) == true_len
  
      if score_average and multioutput == "raw_values":
          assert isinstance(eval_loss, pd.Series)
          assert isinstance(index_loss, pd.DataFrame)
  
          assert len(eval_loss) == no_vars
  
file_path: sktime/sktime/performance_metrics/forecasting/probabilistic/tests/test_probabilistic_metrics.py
imports: import warnings
  import numpy
  import pandas
  import pytest
  from sktime.performance_metrics.forecasting.probabilistic import ConstraintViolation, EmpiricalCoverage, PinballLoss
  from sktime.split import temporal_train_test_split
  from sktime.utils._testing.series import _make_series
label_desc: Use image node_id 3 for calling a global function with example usage: helper_check_output(metric, score_average, multioutput, sample_data) without return types