docstr: Wrap a validation split function with a split data container function.
  A validation split function takes two arguments:  data inputs, and expected outputs.
  
  :param data_container: data container to split
  :return: a tuple of the train and validation data containers.
docstr_tok: ["Wrap","a","validation","split","function","with","a","split","data","container","function",".","A","validation","split","function","takes","two","arguments",":","data","inputs",",","and","expected","outputs",".",":","param","data_container",":","data","container","to","split",":","return",":","a","tuple","of","the","train","and","validation","data","containers","."]
code: def split_dact(
      self, data_container: DACT, context: CX
  ) -> FoldsList[Tuple[TrainDACT, ValidDACT]]:
      """
      Wrap a validation split function with a split data container function.
      A validation split function takes two arguments:  data inputs, and expected outputs.
  
      :param data_container: data container to split
      :return: a tuple of the train and validation data containers.
      """
      splits: FoldsList[Tuple[TrainDACT, ValidDACT]] = []
  
      data_folds: FoldsList[Tuple[DIT, EOT, IDT, DIT, EOT, IDT]] = list(
          zip(
              *self.split(
                  data_container.data_inputs,
                  data_container.ids,
                  data_container.expected_outputs,
                  context,
              )
          )
      )
  
      # Iterate on folds:
      for (
          train_di,
          train_eo,
          train_ids,
          valid_di,
          valid_eo,
          valid_ids,
      ) in data_folds:
          # TODO: use ListDACT?
          train_data_container_split: TrainDACT = TrainDACT(
              ids=train_ids,
              data_inputs=train_di,
              expected_outputs=train_eo,
          )
  
          validation_data_container_split: ValidDACT = ValidDACT(
              ids=valid_ids,
              data_inputs=valid_di,
              expected_outputs=valid_eo,
          )
  
          splits.append(
              (
                  train_data_container_split,
                  validation_data_container_split,
              )
          )
  
      return splits
  
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 BaseValidationSplitter obj's underlying member method code with example usage: obj.split_dact(data_container, context) and returns: splits