class_docstr: Plugs parameters from a parameter estimator into a forecaster.
  
  In `fit`, first fits `param_est` to data passed:
  
  * `y` of `fit` is passed as the first arg to `param_est.fit`
  * `X` of `fit` is passed as the second arg, if `param_est.fit` has a second arg
  * `fh` of `fit` is passed as `fh`, if any remaining arg of `param_est.fit` is `fh`
  
  Then, does `forecaster.set_params` with desired/selected parameters.
  Parameters of the fitted `param_est` are passed on to `forecaster`,
  from/to pairs are as specified by the `params` parameter of `self`, see below.
  
  Then, fits `forecaster` to the data passed in `fit`.
  
  After that, behaves identically to `forecaster` with those parameters set.
  `update` behaviour is controlled by the `update_params` parameter.
  
  Example: `param_est` seasonality test to determine `sp` parameter;
      `forecaster` being any forecaster with an `sp` parameter.
  
  Parameters
  ----------
  param_est : sktime estimator object with a fit method, inheriting from BaseEstimator
      e.g., estimator inheriting from BaseParamFitter or forecaster
      this is a "blueprint" estimator, state does not change when `fit` is called
  forecaster : sktime forecaster, i.e., estimator inheriting from BaseForecaster
      this is a "blueprint" estimator, state does not change when `fit` is called
  params : None, str, list of str, dict with str values/keys, optional, default=None
      determines which parameters from param_est are plugged into forecaster and where
      None: all parameters of param_est are plugged into forecaster
          only parameters present in both `forecaster` and `param_est` are plugged in
      list of str: parameters in the list are plugged into parameters of the same name
          only parameters present in both `forecaster` and `param_est` are plugged in
      str: considered as a one-element list of str with the string as single element
      dict: parameter with name of value is plugged into parameter with name of key
          only keys present in `param_est` and values in `forecaster` are plugged in
  update_params : bool, optional, default=False
      whether fitted parameters by param_est_ are to be updated in self.update
  
  Attributes
  ----------
  param_est_ : sktime parameter estimator, clone of estimator in `param_est`
      this clone is fitted in the pipeline when `fit` is called
  forecaster_ : sktime forecaster, clone of forecaster in `forecaster`
      this clone is fitted in the pipeline when `fit` is called
  param_map_ : dict
      mapping of parameters from `param_est_` to `forecaster_` used in `fit`,
      after filtering for parameters present in both
  
  Examples
  --------
  >>> from sktime.datasets import load_airline
  >>> from sktime.forecasting.naive import NaiveForecaster
  >>> from sktime.param_est.plugin import PluginParamsForecaster
  >>> from sktime.param_est.seasonality import SeasonalityACF
  >>> from sktime.transformations.series.difference import Differencer
  >>>
  >>> y = load_airline()  # doctest: +SKIP
  >>> sp_est = Differencer() * SeasonalityACF()  # doctest: +SKIP
  >>> fcst = NaiveForecaster()  # doctest: +SKIP
  >>> sp_auto = PluginParamsForecaster(sp_est, fcst)  # doctest: +SKIP
  >>> sp_auto.fit(y, fh=[1, 2, 3])  # doctest: +SKIP
  PluginParamsForecaster(...)
  >>> y_pred = sp_auto.predict()  # doctest: +SKIP
  >>> sp_auto.forecaster_.get_params()["sp"]  # doctest: +SKIP
  12
  
  using dictionary to plug "foo" parameter into "sp"
  
  >>> from sktime.param_est.fixed import FixedParams
  >>> sp_plugin = PluginParamsForecaster(
  ...     FixedParams({"foo": 12}), NaiveForecaster(), params={"foo": "sp"}
  ... )  # doctest: +SKIP
code: def __init__(
      self, param_est, forecaster, params=None, update_params=False
  ):
      self.param_est = param_est
      self.param_est_ = param_est.clone()
      self.forecaster = forecaster
      self.forecaster_ = forecaster.clone()
      self.params = params
      self.update_params = update_params
  
      super().__init__()
      self.clone_tags(self.forecaster_)
      self.set_tags(**{"fit_is_empty": False})
      # todo: only works for single series now
      #   think about how to deal with vectorization later
      self.set_tags(
          **{
              "y_inner_mtype": [
                  "pd.DataFrame",
                  "pd.Series",
                  "np.ndarray",
              ]
          }
      )
  
imports: from inspect import signature
  from sktime.forecasting.base._delegate import _DelegatedForecaster
label_desc: Use image node_id 1 to create a new PluginParamsForecaster object from inherited base classes: _DelegatedForecaster with example: obj = PluginParamsForecaster(param_est, forecaster, params, update_params)