class_docstr: DataContainer (dact) class to store IDs (ids), data inputs (di), and expected outputs (eo) together.
  In some dacts, you could have only ids and data inputs, and in other dacts you could have only expected outputs,
  or you could have all if you want, such as when your :class:`~neuraxle.pipeline.Pipeline` is used to train a model
  in a certain :class:`~neuraxle.base.ExecutionMode` within a certain :class:`~neuraxle.base.ExecutionContext`.
  
  You can use typing for your dact, and create a dact, such as:
  
  .. code-block:: python
  
      from typing import List
      from neuraxle.data_container import DataContainer as DACT
  
      dact: DACT[List[str], List[int], List[float]] = DACT(
          ids=['a', 'b', 'c'],
          data_inputs=[1, 2, 3],
          expected_outputs=[1.0, 2.0, 3.0]
      )
  
  
  This is because the DataContainer inherits from the :class:`~typing.Generic` type
  as ``class DataContainer(Generic[IDT, DIT, EOT]): ...``.
  
  The DataContainer object is passed to all of the :class:`~neuraxle.base.BaseStep` 's handle methods :
      * :func:`~neuraxle.base.BaseStep.handle_transform`
      * :func:`~neuraxle.base.BaseStep.handle_fit_transform`
      * :func:`~neuraxle.base.BaseStep.handle_fit`
  
  Most of the time, the steps will manage it in the handler methods.
  
  .. seealso::
      :class:`~neuraxle.base.BaseStep`,
      :class:`~neuraxle.data_container.StripAbsentValues`
class_docstr_tok: ["DataContainer","(","dact",")","class","to","store","IDs","(","ids",")",",","data","inputs","(","di",")",",","and","expected","outputs","(","eo",")","together",".","In","some","dacts",",","you","could","have","only","ids","and","data","inputs",",","and","in","other","dacts","you","could","have","only","expected","outputs",",","or","you","could","have","all","if","you","want",",","such","as","when","your",":","class",":","`","~neuraxle.pipeline.Pipeline","`","is","used","to","train","a","model","in","a","certain",":","class",":","`","~neuraxle.base.ExecutionMode","`","within","a","certain",":","class",":","`","~neuraxle.base.ExecutionContext","`",".","You","can","use","typing","for","your","dact",",","and","create","a","dact",",","such","as",":","..","code-block",":",":","python","from","typing","import","List","from","neuraxle.data_container","import","DataContainer","as","DACT","dact",":","DACT","[","List","[","str","]",",","List","[","int","]",",","List","[","float","]","]","=","DACT","(","ids=","[","'","a","'",",","'","b","'",",","'","c","'","]",",","data_inputs=","[","1",",","2",",","3","]",",","expected_outputs=","[","1.0",",","2.0",",","3.0","]",")","This","is","because","the","DataContainer","inherits","from","the",":","class",":","`","~typing.Generic","`","type","as","``","class","DataContainer","(","Generic","[","IDT",",","DIT",",","EOT","]",")",":","...","``",".","The","DataContainer","object","is","passed","to","all","of","the",":","class",":","`","~neuraxle.base.BaseStep","`","'s","handle","methods",":","*",":","func",":","`","~neuraxle.base.BaseStep.handle_transform","`","*",":","func",":","`","~neuraxle.base.BaseStep.handle_fit_transform","`","*",":","func",":","`","~neuraxle.base.BaseStep.handle_fit","`","Most","of","the","time",",","the","steps","will","manage","it","in","the","handler","methods",".","..","seealso",":",":",":","class",":","`","~neuraxle.base.BaseStep","`",",",":","class",":","`","~neuraxle.data_container.StripAbsentValues","`"]
docstr: Create a DataContainer[IDT, DIT, EOT] object from specified ids, di, and eo.
  
  :param ids: ids that are iterable. If None, will put a range of integers of data_inputs length. Often a list of integers.
  :param di: same as ``data_inputs``, but shorter.
  :param eo: same as ``expected_outputs``, but shorter.
  :param data_inputs: data inputs that are iterable. Can use di instead.
  :param expected_outputs: expected outputs that are iterable. If None, will put a list of None of data_inputs length.
  :param sub_data_containers: sub data containers.
docstr_tok: ["Create","a","DataContainer","[","IDT",",","DIT",",","EOT","]","object","from","specified","ids",",","di",",","and","eo",".",":","param","ids",":","ids","that","are","iterable",".","If","None",",","will","put","a","range","of","integers","of","data_inputs","length",".","Often","a","list","of","integers",".",":","param","di",":","same","as","``","data_inputs","``",",","but","shorter",".",":","param","eo",":","same","as","``","expected_outputs","``",",","but","shorter",".",":","param","data_inputs",":","data","inputs","that","are","iterable",".","Can","use","di","instead",".",":","param","expected_outputs",":","expected","outputs","that","are","iterable",".","If","None",",","will","put","a","list","of","None","of","data_inputs","length",".",":","param","sub_data_containers",":","sub","data","containers","."]
code: def __init__(
      self,
      data_inputs: Optional[DIT] = None,
      ids: Optional[IDT] = None,
      expected_outputs: Optional[EOT] = None,
      sub_data_containers: List["NamedDACTTuple"] = None,
      *,
      di: Optional[DIT] = None,
      eo: Optional[EOT] = None,
  ):
      """
      Create a DataContainer[IDT, DIT, EOT] object from specified ids, di, and eo.
  
      :param ids: ids that are iterable. If None, will put a range of integers of data_inputs length. Often a list of integers.
      :param di: same as ``data_inputs``, but shorter.
      :param eo: same as ``expected_outputs``, but shorter.
      :param data_inputs: data inputs that are iterable. Can use di instead.
      :param expected_outputs: expected outputs that are iterable. If None, will put a list of None of data_inputs length.
      :param sub_data_containers: sub data containers.
      """
      self._ids: IDT = ids
      self.data_inputs: DIT = data_inputs if di is None else di
      self.expected_outputs: EOT = (
          expected_outputs if eo is None else eo
      )
      self.sub_data_containers: List[NamedDACTTuple] = (
          sub_data_containers or []
      )
  
imports: import copy
  import math
  from operator import attrgetter
  from typing import Any, Callable, Generic, Iterable, Iterator, List, Optional, Tuple, TypeVar, Union
  import numpy
  import pandas
label_desc: Use image node_id 1 to create a new DataContainer object from inherited base classes: Generic with example: obj = DataContainer(data_inputs, ids, expected_outputs, sub_data_containers)