class_docstr: Mini Batch Sequential Pipeline class to create a pipeline processing data inputs in batch.
  
  Provide a default batch size :
  
  .. code-block:: python
  
      data_inputs = list(range(10))
      pipeline = MiniBatchSequentialPipeline([
          SomeStep()
      ], batch_size=2)
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
  
      pipeline = MiniBatchSequentialPipeline([
          SomeStep()
      ], batch_size=3, keep_incomplete_batch=False)
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  
      pipeline = MiniBatchSequentialPipeline(
          [SomeStep()],
          batch_size=3,
          keep_incomplete_batch=True,
          default_value_data_inputs=None,
          default_value_expected_outputs=None
      )
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, None, None]]
  
      pipeline = MiniBatchSequentialPipeline(
          [SomeStep()],
          batch_size=3,
          keep_incomplete_batch=True,
          default_value_data_inputs=StripAbsentValues()
      )
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
  
  
  Or manually add one or multiple :class`Barrier` steps to the mini batch sequential pipeline :
  
  .. code-block:: python
  
      data_inputs = list(range(10))
      pipeline = MiniBatchSequentialPipeline([
          SomeStep(),
          Joiner(batch_size=2)
      ])
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
  
      pipeline = MiniBatchSequentialPipeline([
          SomeStep(),
          Joiner(batch_size=3, keep_incomplete_batch=False)
      ])
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  
      pipeline = MiniBatchSequentialPipeline([
          SomeStep(),
          Joiner(
              batch_size=3,
              keep_incomplete_batch=True,
              default_value_data_inputs=None,
              default_value_expected_outputs=None
          )
      ])
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, None, None]]
  
      pipeline = MiniBatchSequentialPipeline([
          SomeStep(),
          Joiner(
              batch_size=3,
              keep_incomplete_batch=True,
              default_value_data_inputs=StripAbsentValues()
          )
      ])
      pipeline.transform(data_inputs)
      # SomeStep will receive: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
  
  Note that the default value for non-striped ids is None if not stripping incomplete batches of data inputs or expected outputs.
  
  :param steps: pipeline steps
  :param batch_size: number of elements to combine into a single batch
  :param keep_incomplete_batch: (Optional.) A bool representing
  whether the last batch should be dropped in the case it has fewer than
  `batch_size` elements; the default behavior is not to drop the smaller
  batch.
  :param default_value_data_inputs: expected_outputs default fill value
  for padding and values outside iteration range, or :class:`~neuraxle.data_container.StripAbsentValues`
  to trim absent values from the batch
  :param default_value_expected_outputs: expected_outputs default fill value
  for padding and values outside iteration range, or :class:`~neuraxle.data_container.StripAbsentValues`
  to trim absent values from the batch
  :param cache_folder: cache_folder if its at the root of the pipeline
  :param mute_joiner_batch_size_warning: If False, will log a warning when automatically setting the joiner batch_size attribute.
  
  .. seealso::
      :class:`~neuraxle.data_container.DataContainer`,
      :func:`~neuraxle.data_container.DataContainer.minibatches`,
      :class:`~neuraxle.data_container.StripAbsentValues`,
      :class:`Pipeline`,
      :class:`Barrier`,
      :class:`Joiner`,
      :class:`~neuraxle.base.ExecutionContext`,
      :class:`~neuraxle.distributed.streaming.SequentialQueuedPipeline`
class_docstr_tok: ["Mini","Batch","Sequential","Pipeline","class","to","create","a","pipeline","processing","data","inputs","in","batch",".","Provide","a","default","batch","size",":","..","code-block",":",":","python","data_inputs","=","list","(","range","(","10",")",")","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")","]",",","batch_size=2",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1","]",",","[","2",",","3","]",",","[","4",",","5","]",",","[","6",",","7","]",",","[","8",",","9","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")","]",",","batch_size=3",",","keep_incomplete_batch=False",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")","]",",","batch_size=3",",","keep_incomplete_batch=True",",","default_value_data_inputs=None",",","default_value_expected_outputs=None",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]",",","[","9",",","None",",","None","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")","]",",","batch_size=3",",","keep_incomplete_batch=True",",","default_value_data_inputs=StripAbsentValues","(",")",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]",",","[","9","]","]","Or","manually","add","one","or","multiple",":","class","`","Barrier","`","steps","to","the","mini","batch","sequential","pipeline",":","..","code-block",":",":","python","data_inputs","=","list","(","range","(","10",")",")","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")",",","Joiner","(","batch_size=2",")","]",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1","]",",","[","2",",","3","]",",","[","4",",","5","]",",","[","6",",","7","]",",","[","8",",","9","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")",",","Joiner","(","batch_size=3",",","keep_incomplete_batch=False",")","]",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")",",","Joiner","(","batch_size=3",",","keep_incomplete_batch=True",",","default_value_data_inputs=None",",","default_value_expected_outputs=None",")","]",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]",",","[","9",",","None",",","None","]","]","pipeline","=","MiniBatchSequentialPipeline","(","[","SomeStep","(",")",",","Joiner","(","batch_size=3",",","keep_incomplete_batch=True",",","default_value_data_inputs=StripAbsentValues","(",")",")","]",")","pipeline.transform","(","data_inputs",")","#","SomeStep","will","receive",":","[","[","0",",","1",",","2","]",",","[","3",",","4",",","5","]",",","[","6",",","7",",","8","]",",","[","9","]","]","Note","that","the","default","value","for","non-striped","ids","is","None","if","not","stripping","incomplete","batches","of","data","inputs","or","expected","outputs",".",":","param","steps",":","pipeline","steps",":","param","batch_size",":","number","of","elements","to","combine","into","a","single","batch",":","param","keep_incomplete_batch",":","(","Optional",".",")","A","bool","representing","whether","the","last","batch","should","be","dropped","in","the","case","it","has","fewer","than","`","batch_size","`","elements",";","the","default","behavior","is","not","to","drop","the","smaller","batch",".",":","param","default_value_data_inputs",":","expected_outputs","default","fill","value","for","padding","and","values","outside","iteration","range",",","or",":","class",":","`","~neuraxle.data_container.StripAbsentValues","`","to","trim","absent","values","from","the","batch",":","param","default_value_expected_outputs",":","expected_outputs","default","fill","value","for","padding","and","values","outside","iteration","range",",","or",":","class",":","`","~neuraxle.data_container.StripAbsentValues","`","to","trim","absent","values","from","the","batch",":","param","cache_folder",":","cache_folder","if","its","at","the","root","of","the","pipeline",":","param","mute_joiner_batch_size_warning",":","If","False",",","will","log","a","warning","when","automatically","setting","the","joiner","batch_size","attribute",".","..","seealso",":",":",":","class",":","`","~neuraxle.data_container.DataContainer","`",",",":","func",":","`","~neuraxle.data_container.DataContainer.minibatches","`",",",":","class",":","`","~neuraxle.data_container.StripAbsentValues","`",",",":","class",":","`","Pipeline","`",",",":","class",":","`","Barrier","`",",",":","class",":","`","Joiner","`",",",":","class",":","`","~neuraxle.base.ExecutionContext","`",",",":","class",":","`","~neuraxle.distributed.streaming.SequentialQueuedPipeline","`"]
code: def _validate_barriers_batch_size(self, batch_size):
      if batch_size is not None:
          return
  
      for _, step in self:
          if isinstance(step, Barrier):
              if step.batch_size is None:
                  raise Exception(
                      "Invalid Joiner batch size {}[{}]. Please provide a default batch size to MiniBatchSequentialPipeline, or add a batch size to {}[{}].".format(
                          self.name, step.name, self.name, step.name
                      )
                  )
  
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 3 for calling the MiniBatchSequentialPipeline obj's underlying member method code with example usage: obj._validate_barriers_batch_size(batch_size) without return types