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: Make single-step or multi-step moving cutoff predictions.
  
  Parameters
  ----------
  y : time series in sktime compatible data container format
          Time series to which to fit the forecaster in the update.
      y can be in one of the following formats, must be same scitype as in fit:
      Series scitype: pd.Series, pd.DataFrame, or np.ndarray (1D or 2D)
          for vanilla forecasting, one time series
      Panel scitype: pd.DataFrame with 2-level row MultiIndex,
          3D np.ndarray, list of Series pd.DataFrame, or nested pd.DataFrame
          for global or panel forecasting
      Hierarchical scitype: pd.DataFrame with 3 or more level row MultiIndex
          for hierarchical forecasting
      Number of columns admissible depend on the "scitype:y" tag:
          if self.get_tag("scitype:y")=="univariate":
              y must have a single column/variable
          if self.get_tag("scitype:y")=="multivariate":
              y must have 2 or more columns
          if self.get_tag("scitype:y")=="both": no restrictions on columns apply
      For further details:
          on usage, see forecasting tutorial examples/01_forecasting.ipynb
          on specification of formats, examples/AA_datatypes_and_datasets.ipynb
  cv : temporal cross-validation generator, optional (default=None)
  X : time series in sktime compatible format, optional (default=None)
          Exogeneous time series for updating and forecasting
      Should be of same scitype (Series, Panel, or Hierarchical) as y
      if self.get_tag("X-y-must-have-same-index"),
          X.index must contain y.index and fh.index both
      there are no restrictions on number of columns (unlike for y)
  update_params : bool, optional (default=True)
      whether model parameters should be updated in each update step
  reset_forecaster : bool, optional (default=True)
      if True, will not change the state of the forecaster,
          i.e., update/predict sequence is run with a copy,
          and cutoff, model parameters, data memory of self do not change
      if False, will update self when the update/predict sequence is run
          as if update/predict were called directly
  
  Returns
  -------
  y_pred = pd.Series
docstr_tok: ["Make","single-step","or","multi-step","moving","cutoff","predictions",".","Parameters","--","--","--","--","--","y",":","time","series","in","sktime","compatible","data","container","format","Time","series","to","which","to","fit","the","forecaster","in","the","update",".","y","can","be","in","one","of","the","following","formats",",","must","be","same","scitype","as","in","fit",":","Series","scitype",":","pd.Series",",","pd.DataFrame",",","or","np.ndarray","(","1D","or","2D",")","for","vanilla","forecasting",",","one","time","series","Panel","scitype",":","pd.DataFrame","with","2-level","row","MultiIndex",",","3D","np.ndarray",",","list","of","Series","pd.DataFrame",",","or","nested","pd.DataFrame","for","global","or","panel","forecasting","Hierarchical","scitype",":","pd.DataFrame","with","3","or","more","level","row","MultiIndex","for","hierarchical","forecasting","Number","of","columns","admissible","depend","on","the","``","scitype",":","y","''","tag",":","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","univariate","''",":","y","must","have","a","single","column\/variable","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","multivariate","''",":","y","must","have","2","or","more","columns","if","self.get_tag","(","``","scitype",":","y","''",")","==","''","both","''",":","no","restrictions","on","columns","apply","For","further","details",":","on","usage",",","see","forecasting","tutorial","examples\/01_forecasting.ipynb","on","specification","of","formats",",","examples\/AA_datatypes_and_datasets.ipynb","cv",":","temporal","cross-validation","generator",",","optional","(","default=None",")","X",":","time","series","in","sktime","compatible","format",",","optional","(","default=None",")","Exogeneous","time","series","for","updating","and","forecasting","Should","be","of","same","scitype","(","Series",",","Panel",",","or","Hierarchical",")","as","y","if","self.get_tag","(","``","X-y-must-have-same-index","''",")",",","X.index","must","contain","y.index","and","fh.index","both","there","are","no","restrictions","on","number","of","columns","(","unlike","for","y",")","update_params",":","bool",",","optional","(","default=True",")","whether","model","parameters","should","be","updated","in","each","update","step","reset_forecaster",":","bool",",","optional","(","default=True",")","if","True",",","will","not","change","the","state","of","the","forecaster",",","i.e.",",","update\/predict","sequence","is","run","with","a","copy",",","and","cutoff",",","model","parameters",",","data","memory","of","self","do","not","change","if","False",",","will","update","self","when","the","update\/predict","sequence","is","run","as","if","update\/predict","were","called","directly","Returns","--","--","--","-","y_pred","=","pd.Series"]
code: def _predict_moving_cutoff(
      self, y, cv, X=None, update_params=True, reset_forecaster=True
  ):
      """Make single-step or multi-step moving cutoff predictions.
  
      Parameters
      ----------
      y : time series in sktime compatible data container format
              Time series to which to fit the forecaster in the update.
          y can be in one of the following formats, must be same scitype as in fit:
          Series scitype: pd.Series, pd.DataFrame, or np.ndarray (1D or 2D)
              for vanilla forecasting, one time series
          Panel scitype: pd.DataFrame with 2-level row MultiIndex,
              3D np.ndarray, list of Series pd.DataFrame, or nested pd.DataFrame
              for global or panel forecasting
          Hierarchical scitype: pd.DataFrame with 3 or more level row MultiIndex
              for hierarchical forecasting
          Number of columns admissible depend on the "scitype:y" tag:
              if self.get_tag("scitype:y")=="univariate":
                  y must have a single column/variable
              if self.get_tag("scitype:y")=="multivariate":
                  y must have 2 or more columns
              if self.get_tag("scitype:y")=="both": no restrictions on columns apply
          For further details:
              on usage, see forecasting tutorial examples/01_forecasting.ipynb
              on specification of formats, examples/AA_datatypes_and_datasets.ipynb
      cv : temporal cross-validation generator, optional (default=None)
      X : time series in sktime compatible format, optional (default=None)
              Exogeneous time series for updating and forecasting
          Should be of same scitype (Series, Panel, or Hierarchical) as y
          if self.get_tag("X-y-must-have-same-index"),
              X.index must contain y.index and fh.index both
          there are no restrictions on number of columns (unlike for y)
      update_params : bool, optional (default=True)
          whether model parameters should be updated in each update step
      reset_forecaster : bool, optional (default=True)
          if True, will not change the state of the forecaster,
              i.e., update/predict sequence is run with a copy,
              and cutoff, model parameters, data memory of self do not change
          if False, will update self when the update/predict sequence is run
              as if update/predict were called directly
  
      Returns
      -------
      y_pred = pd.Series
      """
      fh = cv.get_fh()
      y_preds = []
      cutoffs = []
  
      # enter into a detached cutoff mode, if reset_forecaster is True
      if reset_forecaster:
          self_copy = deepcopy(self)
      # otherwise just work with a reference to self
      else:
          self_copy = self
  
      # set cutoff to time point before data
      y_first_index = get_cutoff(
          y, return_index=True, reverse_order=True
      )
      self_copy._set_cutoff(
          _shift(y_first_index, by=-1, return_index=True)
      )
  
      if isinstance(y, VectorizedDF):
          y = y.X
      if isinstance(X, VectorizedDF):
          X = X.X
  
      # iterate over data
      for new_window, _ in cv.split(y):
          y_new = y.iloc[new_window]
  
          # we use `update_predict_single` here
          #  this updates the forecasting horizon
          y_pred = self_copy.update_predict_single(
              y=y_new,
              fh=fh,
              X=X,
              update_params=update_params,
          )
          y_preds.append(y_pred)
          cutoffs.append(self_copy.cutoff)
  
          for i in range(len(y_preds)):
              y_preds[i] = convert_to(
                  y_preds[i],
                  self._y_metadata["mtype"],
                  store=self._converter_store_y,
                  store_behaviour="freeze",
              )
      return _format_moving_cutoff_predictions(y_preds, cutoffs)
  
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 38 for calling the BaseForecaster obj's underlying member method code with example usage: obj._predict_moving_cutoff(y, cv, X, update_params, reset_forecaster) and returns: _format_moving_cutoff_predictions