class_docstr: Forecast one-by-one estimator.
  
  Parameters
  ----------
  score_func : `callable`, default mean_squared_error
      Function to calculate model R2_null_model_score score,
      with signature (actual, predicted).
      ``actual``, ``predicted`` are array-like with the same shape.
      Smaller values are better.
  
  coverage : `float`, default 0.95
      Intended coverage of the prediction bands (0.0 to 1.0).
      If None, the upper/lower predictions are not returned by ``predict``.
  
  null_model_params : `dict`, default None
      Dictionary keys must be in ("strategy", "constant", "quantile").
      Defines null model. model score is R2_null_model_score of model error relative to null model,
      evaluated by score_func.
      If None, model score is score_func of the model itself.
  
  estimator : `str`
      The estimator used in forecast one-by-one.
      Must be one of the keys in ``ONEBYONE_ESTIMATORS``.
  
  forecast_horizon : `int`
      The forecast horizon.
  
  estimator_map : `bool`, `int` or `list` [`int`], default None
      The map between estimators and forecast horizons.
  
          If True, each time point in the forecasting period has a different model.
          If False, forecast one-by-one is turned off.
          If `int`, every ``estimator_map`` time points have a different model.
          If `list`, the sum must equal to the forecast horizon.
              The values are the number of timepoints in each estimator.
  
      For example, if forecast horizon is 7
  
          `estimator_map = True` corresponds to [1, 1, 1, 1, 1, 1, 1], 7 models.
          `estimator_map = 1` corresponds to [1, 1, 1, 1, 1, 1, 1], 7 models.
          `estimator_map = 2` corresponds to [2, 2, 2, 1], 4 models.
          `estimator_map = [1, 2, 4]` corresponds to 3 models.
          `estimator_map = False` corresponds to [7], 1 model.
          `estimator_map = None` corresponds to [7], 1 model.
  
  
  Attributes
  ----------
  estimator : `str`
      The estimator name.
  estimator_params : `dict`
      The parameters used in the estimator.
  forecast_horizon : `int`
      The forecast horizon.
  estimator_map : `bool`, `int`, `list` [`int]`
      The map between estimators and time points.
  estimator_map_list : `list` [`int`]
      The processed estimator_map as a list.
      We don't want to overwrite the original self.estimator_map.
  estimator_param_names : `list` [`str`]
      All available parameter names in estimator.
  estimator_class : `class`
      The estimator class.
  estimators : `list` [`class`]
      The list of estimator class instances.
  model_results : `list`
      The list of estimator fit method outputs.
  pred_indices : `list` [`int`]
      The list of indices used to splice forecasts.
  forecast : `pandas.DataFrame`
      The cached forecast results from the last call of ``self.predict``.
docstr: Overrides the set_params method in `sklearn.base.BaseEstimator`
  to recognize estimator parameters.
  
  The set_params in sklearn requires each parameter to appear explicitly
  in the __init__ function. However, we want the estimator to be able to
  set estimator parameters as well. The estimators are used to update
  ``self.estimator_params``.
  
  Parameters
  ----------
  **params : keyword arguments
      The parameters to be set to estimator class attributes.
docstr_tok: ["Overrides","the","set_params","method","in","`","sklearn.base.BaseEstimator","`","to","recognize","estimator","parameters",".","The","set_params","in","sklearn","requires","each","parameter","to","appear","explicitly","in","the","__init__","function",".","However",",","we","want","the","estimator","to","be","able","to","set","estimator","parameters","as","well",".","The","estimators","are","used","to","update","``","self.estimator_params","``",".","Parameters","--","--","--","--","--","*","*","params",":","keyword","arguments","The","parameters","to","be","set","to","estimator","class","attributes","."]
code: def set_params(self, **params):
      """Overrides the set_params method in `sklearn.base.BaseEstimator`
      to recognize estimator parameters.
  
      The set_params in sklearn requires each parameter to appear explicitly
      in the __init__ function. However, we want the estimator to be able to
      set estimator parameters as well. The estimators are used to update
      ``self.estimator_params``.
  
      Parameters
      ----------
      **params : keyword arguments
          The parameters to be set to estimator class attributes.
      """
      if not params:
          return self
      self.estimator_param_names = list(
          ONEBYONE_ESTIMATORS[self.estimator]["class"]()
          .get_params()
          .keys()
      )  # Estimator parameters
      # If ``estimator_params`` is provided, it will be used to update
      # the parameters first.
      if self.estimator_params is None:
          self.estimator_params = {}
      if "estimator_params" in params:
          self.estimator_params.update(params["estimator_params"])
          del params["estimator_params"]
      for key, value in params.items():
          if key in [
              "forecast_horizon",
              "estimator",
              "estimator_map",
              "score_func",
              "coverage",
              "null_model_params",
          ]:
              # Class level parameters.
              setattr(self, key, value)
          elif key in self.estimator_param_names:
              # Estimator level parameters.
              self.estimator_params[key] = value
          else:
              # KeyError, copied from sklearn error.
              raise ValueError(
                  f"Invalid parameter {key} for estimator OneByOneEstimator. "
                  f"Check the list of available parameters "
                  f"with `estimator.get_params().keys()`."
              )
      return self
  
imports: from copy import deepcopy
  from typing import Callable
  from typing import List
  from typing import Optional
  from typing import Union
  import pandas
  from sklearn.metrics import mean_squared_error
  from greykite.common import constants
  from greykite.common.logging import LoggingLevelEnum
  from greykite.common.logging import log_message
  from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator
  from greykite.sklearn.estimator.prophet_estimator import ProphetEstimator
  from greykite.sklearn.estimator.silverkite_estimator import SilverkiteEstimator
  from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator
label_desc: Use image node_id 2 for calling the OneByOneEstimator obj's underlying member method code with example usage: obj.set_params() and returns: self, self