code: def test_get_hyperparameter_grid_extra_configs(df, forecast_config):
      """Tests gets hyperparameter grid when the default and override have different lengths."""
      # The empty template has no configs.
      # The override components has two configs.
      forecast_config.model_template = "MULTISTAGE_EMPTY"
      template = MultistageForecastTemplate()
      template.df = df
      template.config = forecast_config
      # The grid should have exactly two configs which are the same as the override configs.
      hyperparameter_grid = template.get_hyperparameter_grid()
      assert hyperparameter_grid["estimator__model_configs"][0][
          0
      ].estimator_params == {
          "auto_seasonality": False,
          "yearly_seasonality": 12,
          "quarterly_seasonality": 5,
          "monthly_seasonality": 5,
          "weekly_seasonality": 4,
          "daily_seasonality": 0,
          "auto_growth": False,
          "growth_term": "linear",
          "changepoints_dict": None,
          "seasonality_changepoints_dict": None,
          "auto_holiday": False,
          "holidays_to_model_separately": "auto",
          "holiday_lookup_countries": "auto",
          "holiday_pre_num_days": 1,
          "holiday_post_num_days": 1,
          "holiday_pre_post_num_dict": None,
          "daily_event_df_dict": None,
          "auto_holiday_params": None,
          "daily_event_neighbor_impact": None,
          "daily_event_shifted_effect": None,
          "feature_sets_enabled": "auto",
          "fit_algorithm_dict": {
              "fit_algorithm": "ridge",
              "fit_algorithm_params": None,
          },
          "max_daily_seas_interaction_order": 0,
          "max_weekly_seas_interaction_order": 2,
          "extra_pred_cols": [],
          "drop_pred_cols": None,
          "explicit_pred_cols": None,
          "min_admissible_value": None,
          "max_admissible_value": None,
          "autoreg_dict": "auto",
          "simulation_num": 10,
          "fast_simulation": False,
          "normalize_method": "zero_to_one",
          "regressor_cols": [],
          "lagged_regressor_dict": None,
          "regression_weight_col": None,
          "remove_intercept": False,
          "uncertainty_dict": None,
          "origin_for_time_vars": None,
          "train_test_thresh": None,
          "training_fraction": None,
      }
      assert hyperparameter_grid["estimator__model_configs"][0][
          1
      ].estimator_params == {
          "auto_seasonality": False,
          "yearly_seasonality": 0,
          "quarterly_seasonality": 0,
          "monthly_seasonality": 0,
          "weekly_seasonality": 0,
          "daily_seasonality": 12,
          "auto_growth": False,
          "growth_term": None,
          "changepoints_dict": None,
          "seasonality_changepoints_dict": None,
          "auto_holiday": False,
          "holidays_to_model_separately": [],
          "holiday_lookup_countries": [],
          "holiday_pre_num_days": 0,
          "holiday_post_num_days": 0,
          "holiday_pre_post_num_dict": None,
          "daily_event_df_dict": None,
          "auto_holiday_params": None,
          "daily_event_neighbor_impact": None,
          "daily_event_shifted_effect": None,
          "feature_sets_enabled": "auto",
          "fit_algorithm_dict": {
              "fit_algorithm": "ridge",
              "fit_algorithm_params": None,
          },
          "max_daily_seas_interaction_order": 5,
          "max_weekly_seas_interaction_order": 2,
          "extra_pred_cols": [],
          "drop_pred_cols": None,
          "explicit_pred_cols": None,
          "min_admissible_value": None,
          "max_admissible_value": None,
          "normalize_method": "zero_to_one",
          "autoreg_dict": "auto",
          "simulation_num": 10,
          "fast_simulation": False,
          "regressor_cols": [],
          "lagged_regressor_dict": None,
          "regression_weight_col": None,
          "remove_intercept": False,
          "uncertainty_dict": None,
          "origin_for_time_vars": None,
          "train_test_thresh": None,
          "training_fraction": None,
      }
  
imports: import datetime
  import numpy
  import pytest
  from testfixtures import LogCapture
  from greykite.common.constants import LOGGER_NAME
  from greykite.common.constants import PREDICTED_COL
  from greykite.common.constants import PREDICTED_LOWER_COL
  from greykite.common.constants import PREDICTED_UPPER_COL
  from greykite.common.constants import TIME_COL
  from greykite.common.constants import VALUE_COL
  from greykite.common.testing_utils import generate_df_for_tests
  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.multistage_forecast_template import MultistageForecastTemplate
  from greykite.framework.templates.multistage_forecast_template_config import SILVERKITE_TWO_STAGE
  from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConfig
  from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate
  from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator
  from greykite.sklearn.uncertainty.uncertainty_methods import UncertaintyMethodEnum
label_desc: Use image node_id 10 for calling a global function with example usage: test_get_hyperparameter_grid_extra_configs(df, forecast_config) without return types