code: def pipeline_results():
      """Runs forecast_pipeline three times to get
      grid search results"""
      pipeline_results = {}
  
      data = generate_df_for_tests(freq="1D", periods=20 * 7)
      df = data["df"]
      with warnings.catch_warnings():
          warnings.simplefilter("ignore")
      hyperparameter_grid = [
          {
              "estimator__strategy": ["quantile"],
              "estimator__quantile": [0.9],
          },
          {"estimator__strategy": ["mean"]},
          {
              "estimator__strategy": ["constant"],
              "estimator__constant": [1.0, 2.0],
          },
      ]
      pipeline = Pipeline([("estimator", DummyEstimator())])
      # Tests MAPE `score_func`, list `cv_report_metrics`
      metric = EvaluationMetricEnum.MeanAbsolutePercentError
      pipeline_results["1"] = forecast_pipeline(
          df,
          pipeline=pipeline,
          hyperparameter_grid=hyperparameter_grid,
          n_jobs=-1,
          forecast_horizon=20,
          coverage=None,
          agg_periods=7,
          agg_func=np.sum,
          score_func=metric.name,
          score_func_greater_is_better=metric.get_metric_greater_is_better(),
          cv_report_metrics=[
              EvaluationMetricEnum.MeanAbsoluteError.name,
              EvaluationMetricEnum.MeanSquaredError.name,
              EvaluationMetricEnum.MedianAbsolutePercentError.name,
          ],
          null_model_params=None,
      )
  
      # Tests FRACTION_OUTSIDE_TOLERANCE `score_func`, all `cv_report_metrics`
      pipeline = Pipeline([("estimator", DummyEstimator())])
      pipeline_results["2"] = forecast_pipeline(
          df,
          pipeline=pipeline,
          hyperparameter_grid=hyperparameter_grid,
          n_jobs=-1,
          forecast_horizon=20,
          coverage=None,
          score_func=FRACTION_OUTSIDE_TOLERANCE,
          score_func_greater_is_better=False,
          cv_report_metrics=CV_REPORT_METRICS_ALL,
          null_model_params=None,
          relative_error_tolerance=0.02,
      )
  
      # Tests callable `score_func`, greater_is_better=True, no `cv_report_metrics`
      fs1 = pd.DataFrame(
          {
              "name": ["tow", "conti_year"],
              "period": [7.0, 1.0],
              "order": [3, 3],
              "seas_names": ["weekly", None],
          }
      )
      fs2 = pd.DataFrame(
          {
              "name": ["tow"],
              "period": [7.0],
              "order": [3],
              "seas_names": ["weekly"],
          }
      )
      hyperparameter_grid = {
          "estimator__origin_for_time_vars": [2018],
          "estimator__extra_pred_cols": [["ct1"], ["ct2"]],
          "estimator__fit_algorithm_dict": [
              {"fit_algorithm": "linear"}
          ],
          "estimator__fs_components_df": [fs1, fs2],
      }
      cv_max_splits = 2
      pipeline_results["3"] = forecast_pipeline(
          df,
          estimator=SilverkiteEstimator(),
          hyperparameter_grid=hyperparameter_grid,
          hyperparameter_budget=4,
          n_jobs=1,
          forecast_horizon=3 * 7,
          test_horizon=2 * 7,
          score_func=mean_absolute_error,  # callable score_func
          score_func_greater_is_better=True,  # Not really True, only for the sake of testing
          null_model_params=None,
          cv_horizon=1 * 7,
          cv_expanding_window=True,
          cv_min_train_periods=7 * 7,
          cv_periods_between_splits=7,
          cv_periods_between_train_test=3 * 7,
          cv_max_splits=cv_max_splits,
      )
      return pipeline_results
  
imports: import warnings
  import numpy
  import pandas
  import pytest
  from sklearn.metrics import mean_absolute_error
  from sklearn.pipeline import Pipeline
  from greykite.common.constants import FRACTION_OUTSIDE_TOLERANCE
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.python_utils import assert_equal
  from greykite.common.testing_utils import generate_df_for_tests
  from greykite.framework.constants import CUSTOM_SCORE_FUNC_NAME
  from greykite.framework.constants import CV_REPORT_METRICS_ALL
  from greykite.framework.constants import FRACTION_OUTSIDE_TOLERANCE_NAME
  from greykite.framework.pipeline.pipeline import forecast_pipeline
  from greykite.framework.utils.result_summary import get_ranks_and_splits
  from greykite.framework.utils.result_summary import summarize_grid_search_results
  from greykite.sklearn.estimator.null_model import DummyEstimator
  from greykite.sklearn.estimator.silverkite_estimator import SilverkiteEstimator
label_desc: Use image node_id 3 for calling a global function with example usage: pipeline_results() and returns: pipeline_results