code: def test_concat_with_TensorCPU(self, tensor_splits, gc, dc):
      axis, _, splits = tensor_splits
      op0 = core.CreateOperator(
          "Concat",
          ["X_{}".format(i) for i in range(len(splits))],
          ["concat_result0", "split_info0"],
          axis=axis,
          add_axis=1,
          device_option=dc[0],
      )
      op1 = core.CreateOperator(
          "Concat",
          ["X_{}".format(i) for i in range(len(splits))],
          ["concat_result1", "split_info1"],
          axis=axis,
          add_axis=1,
          device_option=dc[1],
      )
  
      for i, X in enumerate(splits):
          workspace.FeedBlob("X_{}".format(i), X, dc[0])
  
      workspace.RunOperatorOnce(op0)
      res0 = workspace.FetchBlob("concat_result0")
      inf0 = workspace.FetchBlob("split_info0")
  
      workspace.RunOperatorOnce(op1)
      res1 = workspace.FetchBlob("concat_result1")
      inf1 = workspace.FetchBlob("split_info1")
  
      if not np.allclose(res0, res1, atol=0.0, rtol=0.0):
          print(res1.flatten())
          print(res0.flatten())
          print(np.max(np.abs(res1 - res0)))
          self.assertTrue(False)
  
      if not np.allclose(inf0, inf1, atol=0.0, rtol=0.0):
          print(inf1.flatten())
          print(inf0.flatten())
          print(np.max(np.abs(inf1 - inf0)))
          self.assertTrue(False)
  
file_path: pytorch/caffe2/python/ideep/concat_split_op_test.py
imports: import numpy
  import hypothesis.strategies
  import unittest
  import caffe2.python.hypothesis_test_util
  from caffe2.python import core, workspace
  from hypothesis import given, settings
  import caffe2.python.ideep_test_util
label_desc: Use image node_id 4 for calling the TestConcatSplitOps obj's underlying member method code with example usage: obj.test_concat_with_TensorCPU(tensor_splits, gc, dc) without return types