code: def testConcatNCHW(self):
      for input_size, d1, d2, d3, d4 in self.test_configs:
          op = core.CreateOperator(
              "Concat",
              ["X1", "X2", "X3", "X4"],
              ["Y", "Y_dims"],
              order="NCHW",
          )
          Xs = [
              np.random.rand(2, d1, input_size, input_size).astype(
                  np.float32
              ),
              np.random.rand(2, d2, input_size, input_size).astype(
                  np.float32
              ),
              np.random.rand(2, d3, input_size, input_size).astype(
                  np.float32
              ),
              np.random.rand(2, d4, input_size, input_size).astype(
                  np.float32
              ),
          ]
          for i in range(4):
              res = device_checker.CheckSimple(op, Xs, [0])
              self.assertTrue(res)
              for checker in gradient_checkers:
                  res, grad, grad_estimated = checker.CheckSimple(
                      op, Xs, i, [0]
                  )
                  self.assertTrue(res)
  
imports: import numpy
  from caffe2.python import brew, core, device_checker, gradient_checker, model_helper, test_util, workspace
  from caffe2.python.gradient_checker import NetGradientChecker
  from caffe2.python.net_builder import ops, NetBuilder
  from caffe2.proto import caffe2_pb2
  import unittest
  from typing import Optional
label_desc: Use image node_id 3 for calling the TestConcat obj's underlying member method code with example usage: obj.testConcatNCHW() without return types