class_docstr: Perform a classic walk forward cross validation by performing a forward rolling split.
  As opposed to the AnchoredWalkForwardTimeSeriesCrossValidationSplitter, this class
  has a train split that is always of the same size.
  
  All the training split have the same `validation_window_size` size. The start time and end time of each training
  split will increase identically toward the end at each forward split. Same principle apply with the validation
  split, where the start and end will increase in the same manner toward the end. Each validation split start after
  a certain time delay (if padding is set) after their corresponding training split.
  
  Notes: The data supported by this cross validation is nd.array of shape [batch_size, total_time_steps, n_features].
  The array can have an arbitrary number of dimension, but the time series axis is currently limited to `axis=1`.
docstr: Create a classic walk forward time series cross validation object.
  
  The difference in start position between two consecutive validation split are equal to one
  `validation_window_size`.
  
  :param training_window_size: the window size of training split.
  :param validation_window_size: the window size of each validation split and also the time step taken between
      each forward roll, by default None. If None : It takes the value `training_window_size`.
  :param padding_between_training_and_validation: the size of the padding between the end of the training split
      and the start of the validation split, by default 0.
  :param drop_remainder: drop the last split if the last validation split does not coincide
      with a full validation_window_size, by default False.
docstr_tok: ["Create","a","classic","walk","forward","time","series","cross","validation","object",".","The","difference","in","start","position","between","two","consecutive","validation","split","are","equal","to","one","`","validation_window_size","`",".",":","param","training_window_size",":","the","window","size","of","training","split",".",":","param","validation_window_size",":","the","window","size","of","each","validation","split","and","also","the","time","step","taken","between","each","forward","roll",",","by","default","None",".","If","None",":","It","takes","the","value","`","training_window_size","`",".",":","param","padding_between_training_and_validation",":","the","size","of","the","padding","between","the","end","of","the","training","split","and","the","start","of","the","validation","split",",","by","default","0.",":","param","drop_remainder",":","drop","the","last","split","if","the","last","validation","split","does","not","coincide","with","a","full","validation_window_size",",","by","default","False","."]
code: def __init__(
      self,
      training_window_size,
      validation_window_size=None,
      padding_between_training_and_validation=0,
      drop_remainder=False,
  ):
      """
      Create a classic walk forward time series cross validation object.
  
      The difference in start position between two consecutive validation split are equal to one
      `validation_window_size`.
  
      :param training_window_size: the window size of training split.
      :param validation_window_size: the window size of each validation split and also the time step taken between
          each forward roll, by default None. If None : It takes the value `training_window_size`.
      :param padding_between_training_and_validation: the size of the padding between the end of the training split
          and the start of the validation split, by default 0.
      :param drop_remainder: drop the last split if the last validation split does not coincide
          with a full validation_window_size, by default False.
      """
      AnchoredWalkForwardTimeSeriesCrossValidationSplitter.__init__(
          self,
          training_window_size,
          validation_window_size=validation_window_size,
          padding_between_training_and_validation=padding_between_training_and_validation,
          drop_remainder=drop_remainder,
      )
  
imports: import copy
  import math
  from abc import ABC, abstractmethod
  from typing import Any, List, Optional, Set, Tuple
  import numpy
  from neuraxle.base import ExecutionContext
  from neuraxle.data_container import DIT, EOT, IDT, DACTData
  from neuraxle.data_container import DataContainer
  from neuraxle.data_container import TrainDACT, ValidDACT
label_desc: Use image node_id 1 to create a new WalkForwardTimeSeriesCrossValidationSplitter object from inherited base classes: AnchoredWalkForwardTimeSeriesCrossValidationSplitter with example: obj = WalkForwardTimeSeriesCrossValidationSplitter(training_window_size, validation_window_size, padding_between_training_and_validation, drop_remainder)