code: def test_run_prophet_template_custom():
      """Tests running prophet template through the pipeline"""
      data = generate_df_with_reg_for_tests(
          freq="D",
          periods=50,
          train_frac=0.8,
          conti_year_origin=2018,
          remove_extra_cols=True,
          mask_test_actuals=True,
      )
      # select relevant columns for testing
      relevant_cols = [
          cst.TIME_COL,
          cst.VALUE_COL,
          "regressor1",
          "regressor2",
          "regressor3",
      ]
      df = data["df"][relevant_cols]
      forecast_horizon = data["fut_time_num"]
  
      # Model components - custom holidays; other params as defaults
      model_components = ModelComponentsParam(
          seasonality={
              "seasonality_mode": ["additive"],
              "yearly_seasonality": ["auto"],
              "weekly_seasonality": [True],
              "daily_seasonality": ["auto"],
          },
          growth={"growth_term": ["linear"]},
          events={
              "holiday_pre_num_days": [1],
              "holiday_post_num_days": [1],
              "holidays_prior_scale": [1.0],
          },
          changepoints={
              "changepoint_prior_scale": [0.05],
              "n_changepoints": [1],
              "changepoint_range": [0.5],
          },
          regressors={
              "add_regressor_dict": [
                  {
                      "regressor1": {
                          "prior_scale": 10,
                          "standardize": True,
                          "mode": "additive",
                      },
                      "regressor2": {
                          "prior_scale": 15,
                          "standardize": False,
                          "mode": "additive",
                      },
                      "regressor3": {},
                  }
              ]
          },
          uncertainty={"uncertainty_samples": [10]},
      )
  
      metadata = MetadataParam(
          time_col=cst.TIME_COL,
          value_col=cst.VALUE_COL,
          freq="D",
      )
      evaluation_period = EvaluationPeriodParam(
          test_horizon=5,  # speeds up test case
          periods_between_train_test=5,
          cv_horizon=0,  # speeds up test case
      )
      config = ForecastConfig(
          model_template=ModelTemplateEnum.PROPHET.name,
          metadata_param=metadata,
          forecast_horizon=forecast_horizon,
          coverage=0.95,
          model_components_param=model_components,
          evaluation_period_param=evaluation_period,
      )
      result = Forecaster().run_forecast_config(
          df=df,
          config=config,
      )
  
      forecast_df = result.forecast.df_test.reset_index(drop=True)
      expected_cols = [
          "ts",
          "actual",
          "forecast",
          "forecast_lower",
          "forecast_upper",
      ]
      assert list(forecast_df.columns) == expected_cols
      assert result.backtest.coverage == 0.95, "coverage is not correct"
      # NB: coverage is poor because of very small dataset size and low uncertainty_samples
      assert result.backtest.train_evaluation[
          cst.PREDICTION_BAND_COVERAGE
      ] == pytest.approx(
          0.742, rel=1e-3
      ), "training coverage is None or less than expected"
      assert result.backtest.test_evaluation[
          cst.PREDICTION_BAND_COVERAGE
      ] == pytest.approx(
          0.800, rel=1e-3
      ), "testing coverage is None or less than expected"
      assert result.backtest.train_evaluation["MSE"] == pytest.approx(
          3.3942, rel=1e-3
      ), "training MSE is None or more than expected"
      assert result.backtest.test_evaluation["MSE"] == pytest.approx(
          1.9477, rel=1e-3
      ), "testing MSE is None or more than expected"
      assert result.forecast.train_evaluation[
          cst.PREDICTION_BAND_COVERAGE
      ] == pytest.approx(
          0.7805, rel=1e-3
      ), "forecast coverage is None or less than expected"
      assert result.forecast.train_evaluation["MSE"] == pytest.approx(
          3.6025, rel=1e-3
      ), "forecast MSE is None or more than expected"
  
      # ensure regressors were used in the model
      prophet_estimator = result.model.steps[-1][-1]
      regressors = prophet_estimator.model.extra_regressors
      assert regressors.keys() == {
          "regressor1",
          "regressor2",
          "regressor3",
      }
      assert regressors["regressor1"]["prior_scale"] == 10.0
      assert regressors["regressor1"]["standardize"] is True
      assert regressors["regressor1"]["mode"] == "additive"
      assert regressors["regressor2"]["prior_scale"] == 15.0
      assert regressors["regressor3"]["standardize"] == "auto"
  
imports: import datetime
  import sys
  import warnings
  import numpy
  import pandas
  import pytest
  from pandas.testing import assert_frame_equal
  import greykite.common.constants
  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.common.testing_utils import generate_df_with_reg_for_tests
  from greykite.framework.constants import COMPUTATION_N_JOBS
  from greykite.framework.constants import CV_REPORT_METRICS_ALL
  from greykite.framework.templates.autogen.forecast_config import ComputationParam
  from greykite.framework.templates.autogen.forecast_config import EvaluationMetricParam
  from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam
  from greykite.framework.templates.autogen.forecast_config import ForecastConfig
  from greykite.framework.templates.autogen.forecast_config import MetadataParam
  from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam
  from greykite.framework.templates.forecaster import Forecaster
  from greykite.framework.templates.model_templates import ModelTemplateEnum
  from greykite.framework.templates.prophet_template import ProphetTemplate
  from greykite.framework.utils.framework_testing_utils import assert_basic_pipeline_equal
  from greykite.sklearn.estimator.prophet_estimator import ProphetEstimator
label_desc: Use image node_id 17 for calling a global function with example usage: test_run_prophet_template_custom() without return types