class_docstr: The Joiner step joins the transformed mini batches together with
  mostly the DACT.minibatches and then DACT.extend method.
  It is used in a minibatch sequential pipeline and streaming / queued pipeline
  as a way to handle batches of previous steps in the pipeline.
  
  .. seealso::
      :class:`~neuraxle.data_container.DataContainer`,
      :func:`~neuraxle.data_container.DataContainer.batch`
class_docstr_tok: ["The","Joiner","step","joins","the","transformed","mini","batches","together","with","mostly","the","DACT.minibatches","and","then","DACT.extend","method",".","It","is","used","in","a","minibatch","sequential","pipeline","and","streaming","\/","queued","pipeline","as","a","way","to","handle","batches","of","previous","steps","in","the","pipeline",".","..","seealso",":",":",":","class",":","`","~neuraxle.data_container.DataContainer","`",",",":","func",":","`","~neuraxle.data_container.DataContainer.batch","`"]
docstr: The Joiner step joins the transformed mini batches together with DACT.minibatches and then DACT.extend method.
  Note that the default value for IDs is None.
  
  .. seealso::
      :class:`~neuraxle.data_container.DataContainer`,
      :func:`~neuraxle.data_container.DataContainer.minibatches`
docstr_tok: ["The","Joiner","step","joins","the","transformed","mini","batches","together","with","DACT.minibatches","and","then","DACT.extend","method",".","Note","that","the","default","value","for","IDs","is","None",".","..","seealso",":",":",":","class",":","`","~neuraxle.data_container.DataContainer","`",",",":","func",":","`","~neuraxle.data_container.DataContainer.minibatches","`"]
code: def __init__(
      self,
      batch_size: int,
      keep_incomplete_batch: bool = True,
      default_value_data_inputs=StripAbsentValues(),
      default_value_expected_outputs=None,
  ):
      """
      The Joiner step joins the transformed mini batches together with DACT.minibatches and then DACT.extend method.
      Note that the default value for IDs is None.
  
      .. seealso::
          :class:`~neuraxle.data_container.DataContainer`,
          :func:`~neuraxle.data_container.DataContainer.minibatches`
      """
      Barrier.__init__(self)
      self.batch_size: int = batch_size
      self.keep_incomplete_batch: bool = keep_incomplete_batch
      self.default_value_data_inputs: Union[
          Any, StripAbsentValues
      ] = default_value_data_inputs
      self.default_value_expected_outputs: Union[
          Any, StripAbsentValues
      ] = default_value_expected_outputs
  
imports: import warnings
  from abc import ABC, abstractmethod
  from typing import Any, List, Tuple, Union
  from neuraxle.base import BaseStep
  from neuraxle.base import ExecutionContext
  from neuraxle.base import ExecutionMode, ForceHandleMixin, Identity, NamedStepsList, TruncableSteps, _CustomHandlerMethods, _TruncableServiceWithBodyMixin
  from neuraxle.data_container import DataContainer
  from neuraxle.data_container import ListDataContainer, StripAbsentValues, ZipDataContainer
  from neuraxle.logging.warnings import warn_deprecated_arg
label_desc: Use image node_id 1 to create a new Joiner object from inherited base classes: Barrier with example: obj = Joiner(batch_size, keep_incomplete_batch, default_value_data_inputs, default_value_expected_outputs)