class_docstr: Test Pipeline
class_docstr_tok: ["Test","Pipeline"]
code: def test_concat_multi_types(self):
      def f(x):
          x = len(x)
          return x, x + 1, x + 2
  
      p2 = Pipeline.input("p").flat_map(
          "p", "f", lambda x: ((a, b) for a, b in x)
      )
      p3 = p2.map("f", "t", lambda x: x[1]).time_window(
          "f", "e", "t", 3, 3, lambda x: len(x)
      )  # pylint: disable=unnecessary-lambda
      p4 = p2.window_all("f", ("l", "s", "v"), f)
  
      pipe = p4.concat(p3).output("e", "l", "s", "v")
      data = [(i, i * 1000) for i in range(10) if i < 3 or i > 7]
      res = pipe(data)
      self.assertEqual(res.get(), [3, 5, 6, 7])
      self.assertEqual(res.get(), [1, 5, 6, 7])
      self.assertEqual(res.get(), [1, 5, 6, 7])
      self.assertEqual(res.get(), None)
  
imports: import unittest
  from towhee.operator.nop import NOPNodeOperator
  from towhee.operator import PyOperator
  from towhee.runtime.pipeline import Pipeline
  from towhee.runtime.data_queue import Empty
  from towhee.runtime import ops, register
  from towhee.runtime.runtime_pipeline import RuntimePipeline
label_desc: Use image node_id 20 for calling the TestPipeline obj's underlying member method code with example usage: obj.test_concat_multi_types() and returns: x,  unknown,  unknown