class_docstr: Base forecaster template class.
  
  The base forecaster specifies the methods and method signatures that all forecasters
  have to implement.
  
  Specific implementations of these methods is deferred to concrete forecasters.
class_docstr_tok: ["Base","forecaster","template","class",".","The","base","forecaster","specifies","the","methods","and","method","signatures","that","all","forecasters","have","to","implement",".","Specific","implementations","of","these","methods","is","deferred","to","concrete","forecasters","."]
docstr: Update time series to incremental training data.
  
  private _update containing the core logic, called from update
  
  State required:
      Requires state to be "fitted".
  
  Accesses in self:
      Fitted model attributes ending in "_"
      self.cutoff
  
  Writes to self:
      Sets fitted model attributes ending in "_", if update_params=True.
      Does not write to self if update_params=False.
  
  Parameters
  ----------
  y : guaranteed to be of a type in self.get_tag("y_inner_mtype")
      Time series with which to update the forecaster.
      if self.get_tag("scitype:y")=="univariate":
          guaranteed to have a single column/variable
      if self.get_tag("scitype:y")=="multivariate":
          guaranteed to have 2 or more columns
      if self.get_tag("scitype:y")=="both": no restrictions apply
  X : optional (default=None)
      guaranteed to be of a type in self.get_tag("X_inner_mtype")
      Exogeneous time series for the forecast
  update_params : bool, optional (default=True)
      whether model parameters should be updated
  
  Returns
  -------
  self : reference to self
docstr_tok: ["Update","time","series","to","incremental","training","data",".","private","_update","containing","the","core","logic",",","called","from","update","State","required",":","Requires","state","to","be","``","fitted","''",".","Accesses","in","self",":","Fitted","model","attributes","ending","in","``","_","''","self.cutoff","Writes","to","self",":","Sets","fitted","model","attributes","ending","in","``","_","''",",","if","update_params=True",".","Does","not","write","to","self","if","update_params=False",".","Parameters","--","--","--","--","--","y",":","guaranteed","to","be","of","a","type","in","self.get_tag","(","``","y_inner_mtype","''",")","Time","series","with","which","to","update","the","forecaster",".","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","univariate","''",":","guaranteed","to","have","a","single","column\/variable","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","multivariate","''",":","guaranteed","to","have","2","or","more","columns","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","both","''",":","no","restrictions","apply","X",":","optional","(","default=None",")","guaranteed","to","be","of","a","type","in","self.get_tag","(","``","X_inner_mtype","''",")","Exogeneous","time","series","for","the","forecast","update_params",":","bool",",","optional","(","default=True",")","whether","model","parameters","should","be","updated","Returns","--","--","--","-","self",":","reference","to","self"]
code: def _update(self, y, X=None, update_params=True):
      """Update time series to incremental training data.
  
      private _update containing the core logic, called from update
  
      State required:
          Requires state to be "fitted".
  
      Accesses in self:
          Fitted model attributes ending in "_"
          self.cutoff
  
      Writes to self:
          Sets fitted model attributes ending in "_", if update_params=True.
          Does not write to self if update_params=False.
  
      Parameters
      ----------
      y : guaranteed to be of a type in self.get_tag("y_inner_mtype")
          Time series with which to update the forecaster.
          if self.get_tag("scitype:y")=="univariate":
              guaranteed to have a single column/variable
          if self.get_tag("scitype:y")=="multivariate":
              guaranteed to have 2 or more columns
          if self.get_tag("scitype:y")=="both": no restrictions apply
      X : optional (default=None)
          guaranteed to be of a type in self.get_tag("X_inner_mtype")
          Exogeneous time series for the forecast
      update_params : bool, optional (default=True)
          whether model parameters should be updated
  
      Returns
      -------
      self : reference to self
      """
      if update_params:
          # default to re-fitting if update is not implemented
          warn(
              f"NotImplementedWarning: {self.__class__.__name__} "
              f"does not have a custom `update` method implemented. "
              f"{self.__class__.__name__} will be refit each time "
              f"`update` is called with update_params=True. "
              "To refit less often, use the wrappers in the "
              "forecasting.stream module, e.g., UpdateEvery.",
              obj=self,
          )
          # we need to overwrite the mtype last seen and converter store, since the _y
          #    may have been converted
          y_metadata = self._y_metadata
          _converter_store_y = self._converter_store_y
          # refit with updated data, not only passed data
          self.fit(y=self._y, X=self._X, fh=self._fh)
          # todo: should probably be self._fit, not self.fit
          # but looping to self.fit for now to avoid interface break
          self._y_metadata = y_metadata
          self._converter_store_y = _converter_store_y
  
      # if update_params=False, and there are no components, do nothing
      # if update_params=False, and there are components, we update cutoffs
      elif self.is_composite():
          # default to calling component _updates if update is not implemented
          warn(
              f"NotImplementedWarning: {self.__class__.__name__} "
              f"does not have a custom `update` method implemented. "
              f"{self.__class__.__name__} will update all component cutoffs each time"
              f" `update` is called with update_params=False.",
              obj=self,
          )
          comp_forecasters = self._components(base_class=BaseForecaster)
          for comp in comp_forecasters.values():
              comp.update(y=y, X=X, update_params=False)
  
      return self
  
imports: from copy import deepcopy
  from itertools import product
  import numpy
  import pandas
  from sktime.base import BaseEstimator
  from sktime.datatypes import VectorizedDF, check_is_scitype, convert_to, get_cutoff, mtype_to_scitype, scitype_to_mtype, update_data
  from sktime.forecasting.base._fh import ForecastingHorizon
  from sktime.utils.datetime import _shift
  from sktime.utils.validation._dependencies import _check_estimator_deps
  from sktime.utils.validation.forecasting import check_alpha, check_cv, check_fh, check_X
  from sktime.utils.validation.series import check_equal_time_index
  from sktime.utils.warnings import warn
label_desc: Use image node_id 32 for calling the BaseForecaster obj's underlying member method code with example usage: obj._update(y, X, update_params) and returns: self