class_docstr: Update only periodically when update is called.
  
  If update is called, behaves like update_params=False, unless update_interval has
      elapsed since the last "true" update = inner update with update_params=False.
      update_window controls the lookback window on which refitting is done
          refit data is cutoff (inclusive) to cutoff minus refit_window (exclusive)
  
  Caution: default value of update_interval means *no updates* after `fit`.
  
  Parameters
  ----------
  update_interval : difference of sktime time indices (int or timedelta), optional
      interval that needs to elapse until inner update call with update_params=True
      default = None = infinity, i.e., never updates
      if index of y seen in fit is integer or y is index-free container type,
          update_interval must be int, is interpreted as difference of int location
      if index of y seen in fit is timestamp, must be int or pd.Timedelta
          if pd.Timedelta, will be interpreted as time since last true update elapsed
          if int, will be interpreted as number of time stamps seen since last update
class_docstr_tok: ["Update","only","periodically","when","update","is","called",".","If","update","is","called",",","behaves","like","update_params=False",",","unless","update_interval","has","elapsed","since","the","last","``","true","''","update","=","inner","update","with","update_params=False",".","update_window","controls","the","lookback","window","on","which","refitting","is","done","refit","data","is","cutoff","(","inclusive",")","to","cutoff","minus","refit_window","(","exclusive",")","Caution",":","default","value","of","update_interval","means","*","no","updates","*","after","`","fit","`",".","Parameters","--","--","--","--","--","update_interval",":","difference","of","sktime","time","indices","(","int","or","timedelta",")",",","optional","interval","that","needs","to","elapse","until","inner","update","call","with","update_params=True","default","=","None","=","infinity",",","i.e.",",","never","updates","if","index","of","y","seen","in","fit","is","integer","or","y","is","index-free","container","type",",","update_interval","must","be","int",",","is","interpreted","as","difference","of","int","location","if","index","of","y","seen","in","fit","is","timestamp",",","must","be","int","or","pd.Timedelta","if","pd.Timedelta",",","will","be","interpreted","as","time","since","last","true","update","elapsed","if","int",",","will","be","interpreted","as","number","of","time","stamps","seen","since","last","update"]
docstr: Fit forecaster to training data.
  
  private _fit containing the core logic, called from fit
  
  Writes to self:
      Sets fitted model attributes ending in "_".
  
  Parameters
  ----------
  y : guaranteed to be of a type in self.get_tag("y_inner_mtype")
      Time series to which to fit 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
  fh : guaranteed to be ForecastingHorizon or None, optional (default=None)
      The forecasting horizon with the steps ahead to to predict.
      Required (non-optional) here if self.get_tag("requires-fh-in-fit")==True
      Otherwise, if not passed in _fit, guaranteed to be passed in _predict
  X : optional (default=None)
      guaranteed to be of a type in self.get_tag("X_inner_mtype")
      Exogeneous time series to fit to.
  
  Returns
  -------
  self : reference to self
docstr_tok: ["Fit","forecaster","to","training","data",".","private","_fit","containing","the","core","logic",",","called","from","fit","Writes","to","self",":","Sets","fitted","model","attributes","ending","in","``","_","''",".","Parameters","--","--","--","--","--","y",":","guaranteed","to","be","of","a","type","in","self.get_tag","(","``","y_inner_mtype","''",")","Time","series","to","which","to","fit","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","fh",":","guaranteed","to","be","ForecastingHorizon","or","None",",","optional","(","default=None",")","The","forecasting","horizon","with","the","steps","ahead","to","to","predict",".","Required","(","non-optional",")","here","if","self.get_tag","(","``","requires-fh-in-fit","''",")","==True","Otherwise",",","if","not","passed","in","_fit",",","guaranteed","to","be","passed","in","_predict","X",":","optional","(","default=None",")","guaranteed","to","be","of","a","type","in","self.get_tag","(","``","X_inner_mtype","''",")","Exogeneous","time","series","to","fit","to",".","Returns","--","--","--","-","self",":","reference","to","self"]
code: def _fit(self, y, X, fh):
      """Fit forecaster to training data.
  
      private _fit containing the core logic, called from fit
  
      Writes to self:
          Sets fitted model attributes ending in "_".
  
      Parameters
      ----------
      y : guaranteed to be of a type in self.get_tag("y_inner_mtype")
          Time series to which to fit 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
      fh : guaranteed to be ForecastingHorizon or None, optional (default=None)
          The forecasting horizon with the steps ahead to to predict.
          Required (non-optional) here if self.get_tag("requires-fh-in-fit")==True
          Otherwise, if not passed in _fit, guaranteed to be passed in _predict
      X : optional (default=None)
          guaranteed to be of a type in self.get_tag("X_inner_mtype")
          Exogeneous time series to fit to.
  
      Returns
      -------
      self : reference to self
      """
      # we need to remember the time we last fit, to compare to it in _update
      self.last_update_cutoff_ = self.cutoff[0]
      estimator = self._get_delegate()
      estimator.fit(y=y, fh=fh, X=X)
      return self
  
imports: import pandas
  from sktime.datatypes import ALL_TIME_SERIES_MTYPES
  from sktime.datatypes._utilities import get_window
  from sktime.forecasting.base._delegate import _DelegatedForecaster
label_desc: Use image node_id 2 for calling the UpdateEvery obj's underlying member method code with example usage: obj._fit(y, X, fh) and returns: self