class_docstr: Expanding window splitter.
  
  Split time series repeatedly into an growing training set and a fixed-size test set.
  
  Test window is defined by forecasting horizons
  relative to the end of the training window.
  It will contain as many indices
  as there are forecasting horizons provided to the `fh` argument.
  For a forecasating horizon :math:`(h_1,\ldots,h_H)`, the training window will
  consist of the indices :math:`(k_n+h_1,\ldots,k_n+h_H)`.
  
  For example for `initial_window = 5`, `step_length = 1` and `fh = [1, 2, 3]`
  here is a representation of the folds::
  
  |-----------------------|
  | * * * * * x x x - - - |
  | * * * * * * x x x - - |
  | * * * * * * * x x x - |
  | * * * * * * * * x x x |
  
  
  ``*`` = training fold.
  
  ``x`` = test fold.
  
  Parameters
  ----------
  fh : int, list or np.array, optional (default=1)
      Forecasting horizon
  initial_window : int or timedelta or pd.DateOffset, optional (default=10)
      Window length of initial training fold. If =0, initial training fold is empty.
  step_length : int or timedelta or pd.DateOffset, optional (default=1)
      Step length between windows
  
  Examples
  --------
  >>> import numpy as np
  >>> from sktime.split import ExpandingWindowSplitter
  >>> ts = np.arange(10)
  >>> splitter = ExpandingWindowSplitter(fh=[2, 4], initial_window=5, step_length=2)
  >>> list(splitter.split(ts)) # doctest: +SKIP
  '[(array([0, 1, 2, 3, 4]), array([6, 8]))]'
code: def _initial_window(self):
      return None
  
file_path: sktime/sktime/split/expandingwindow.py
imports: from sktime.split.base import BaseWindowSplitter
  from sktime.split.base._common import DEFAULT_FH, DEFAULT_STEP_LENGTH, DEFAULT_WINDOW_LENGTH, FORECASTING_HORIZON_TYPES, SPLIT_GENERATOR_TYPE
  from sktime.utils.validation import ACCEPTED_WINDOW_LENGTH_TYPES, NON_FLOAT_WINDOW_LENGTH_TYPES
label_desc: Use image node_id 2 for calling the ExpandingWindowSplitter obj's underlying member method code with example usage: obj._initial_window() and returns: None