code: def test_mini_batch_sequential_pipeline_should_transform_steps_sequentially_for_each_barrier_for_each_batch():
      # Given
      tapes = [TapeCallbackFunction() for _ in range(4)]
      p = MiniBatchSequentialPipeline(
          [
              MultiplyBy2TransformCallbackStep(tapes[0], ["0"]),
              MultiplyBy2TransformCallbackStep(tapes[1], ["1"]),
              Joiner(batch_size=10),
              MultiplyBy2TransformCallbackStep(tapes[2], ["2"]),
              MultiplyBy2TransformCallbackStep(tapes[3], ["3"]),
              Joiner(batch_size=10),
          ]
      )
      minibatch_1 = list(range(10))
      minibatch_2 = list(range(10, 20))
      full_batch = minibatch_1 + minibatch_2
  
      # When
      outputs = p.transform(full_batch)
  
      # Then
      for t, tape in enumerate(tapes):
          assert tape.name_tape == [str(t), str(t)]
          assert (
              tape.data[0] == MultiplyByN(2**t).transform(minibatch_1)
          ).all()
          assert (
              tape.data[1] == MultiplyByN(2**t).transform(minibatch_2)
          ).all()
      assert (
          outputs == MultiplyByN(2**4).transform(full_batch)
      ).all()
  
imports: import unittest
  from neuraxle.data_container import StripAbsentValues
  from neuraxle.pipeline import MiniBatchSequentialPipeline, Joiner, Pipeline
  from neuraxle.steps.misc import TransformCallbackStep, TapeCallbackFunction, FitTransformCallbackStep
  from neuraxle.steps.numpy import MultiplyByN, ToList
label_desc: Use image node_id 1 for calling a global function with example usage: test_mini_batch_sequential_pipeline_should_transform_steps_sequentially_for_each_barrier_for_each_batch() without return types