class_docstr: Create a function that splits data with K-Fold Cross-Validation resampling.
  
  .. code-block:: python
  
      # create a kfold cross validation splitter with 2 kfold
      kfold_cross_validation_split(0.20)
  
  
  :param k_fold: number of folds.
  :return:
code: def split(
      self,
      data_inputs: DIT,
      ids: Optional[IDT] = None,
      expected_outputs: Optional[EOT] = None,
      context: Optional[CX] = None,
  ) -> Tuple[
      FoldsList[DIT],
      FoldsList[EOT],
      FoldsList[IDT],
      FoldsList[DIT],
      FoldsList[EOT],
      FoldsList[IDT],
  ]:
      train_di, valid_di = self._kfold_cv_split(data_inputs)
  
      _n_folds = len(train_di)
      _empty_folds: Tuple[FoldsList] = [[None] * _n_folds] * 2
  
      train_ids, valid_ids = self._kfold_cv_split(ids) or copy.deepcopy(
          _empty_folds
      )
  
      train_eo, valid_eo = self._kfold_cv_split(
          expected_outputs
      ) or copy.deepcopy(_empty_folds)
  
      return (
          train_di,
          train_eo,
          train_ids,
          valid_di,
          valid_eo,
          valid_ids,
      )
  
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 3 for calling the KFoldCrossValidationSplitter obj's underlying member method code with example usage: obj.split(data_inputs, ids, expected_outputs, context) and returns: train_di,  train_eo,  train_ids,  valid_di,  valid_eo,  valid_ids