code: def assert_basic_pipeline_equal(actual: Pipeline, expected: Pipeline):
      """Asserts that the two pipelines are equal
      The Pipelines should be created by `get_basic_pipeline`.
      """
      # checks features
      actual_params = actual.get_params()
      expected_params = expected.get_params()
      check_keys = [
          "input__date__select_date__column_names",
          "input__response__select_val__column_names",
          "input__response__outlier__params",
          "input__response__null__impute_algorithm",
          "input__response__null__impute_all",
          "input__response__null__impute_params",
          "input__response__null__max_frac",
          "input__regressors_numeric__select_reg__column_names",
          "input__regressors_numeric__select_reg_numeric__exclude",
          "input__regressors_numeric__select_reg_numeric__include",
          "input__regressors_numeric__outlier__params",
          "input__regressors_numeric__normalize__normalize_algorithm",
          "input__regressors_numeric__normalize__normalize_params",
          "input__regressors_numeric__null__impute_algorithm",
          "input__regressors_numeric__null__impute_all",
          "input__regressors_numeric__null__impute_params",
          "input__regressors_numeric__null__max_frac",
          "input__regressors_other__select_reg__column_names",
          "input__regressors_other__select_reg_non_numeric__exclude",
          "input__regressors_other__select_reg_non_numeric__include",
          "degenerate__drop_degenerate",
      ]
      for key in check_keys:
          assert (
              actual_params[key] == expected_params[key]
          ), f"{key} is different, found {actual_params[key]}, expected {expected_params[key]}"
  
      # checks estimator
      actual_estimator = actual.steps[-1][-1]
      expected_estimator = expected.steps[-1][-1]
      assert isinstance(actual_estimator, type(expected_estimator))
      actual_estimator_dict = actual_estimator.__dict__.copy()
      expected_estimator_dict = expected_estimator.__dict__.copy()
      del actual_estimator_dict["null_model"]
      del expected_estimator_dict["null_model"]
      actual_estimator_dict.pop("silverkite", None)
      expected_estimator_dict.pop("silverkite", None)
      actual_estimator_dict.pop("silverkite_diagnostics", None)
      expected_estimator_dict.pop("silverkite_diagnostics", None)
      actual_score_func = actual_estimator_dict.pop("score_func")
      expected_score_func = expected_estimator_dict.pop("score_func")
      assert_equal(actual_estimator_dict, expected_estimator_dict)
      with warnings.catch_warnings():
          warnings.simplefilter("ignore")
          assert_eval_function_equal(
              actual_score_func, expected_score_func
          )
  
imports: import warnings
  from functools import partial
  from typing import Optional
  import numpy
  import pandas
  from sklearn.model_selection import RandomizedSearchCV
  from sklearn.pipeline import Pipeline
  from greykite.common.constants import ACTUAL_COL
  from greykite.common.constants import PREDICTED_COL
  from greykite.common.constants import PREDICTION_BAND_COVERAGE
  from greykite.common.constants import TIME_COL
  from greykite.common.constants import VALUE_COL
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.evaluation import fraction_outside_tolerance
  from greykite.common.python_utils import assert_equal
  from greykite.common.testing_utils import assert_eval_function_equal
  from greykite.framework.constants import FRACTION_OUTSIDE_TOLERANCE_NAME
  from greykite.framework.output.univariate_forecast import UnivariateForecast
  from greykite.framework.pipeline.pipeline import validate_pipeline_input
  from greykite.framework.pipeline.utils import get_score_func_with_aggregation
  from greykite.framework.utils.result_summary import summarize_grid_search_results
  from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator
  from greykite.sklearn.sklearn_scorer import _PredictScorerDF
label_desc: Use image node_id 5 for calling a global function with example usage: assert_basic_pipeline_equal(actual, expected) without return types