code: def test_columnwise_max(self, batch_size, m, n, gc, dc):
      X = np.random.rand(batch_size, m, n).astype(np.float32)
  
      def columnwise_max(X):
          return [np.max(X, axis=1)]
  
      op = core.CreateOperator("ColwiseMax", ["x"], ["y"])
  
      self.assertReferenceChecks(
          device_option=gc,
          op=op,
          inputs=[X],
          reference=columnwise_max,
      )
  
      # Test shape inference logic
      net = core.Net("test_shape_inference")
      workspace.FeedBlob("x", X)
      output = net.ColwiseMax(["x"], ["y"])
      (shapes, types) = workspace.InferShapesAndTypes([net])
      workspace.RunNetOnce(net)
  
      self.assertEqual(
          shapes[output], list(workspace.blobs[output].shape)
      )
      self.assertEqual(shapes[output], [X.shape[0]] + [X.shape[2]])
      self.assertEqual(types[output], core.DataType.FLOAT)
  
file_path: pytorch/caffe2/python/operator_test/reduction_ops_test.py
imports: from caffe2.python import core, workspace
  from hypothesis import assume, given, settings
  import caffe2.python.hypothesis_test_util
  import caffe2.python.serialized_test.serialized_test_util
  import hypothesis.strategies
  import numpy
label_desc: Use image node_id 6 for calling the TestReductionOps obj's underlying member method code with example usage: obj.test_columnwise_max(batch_size, m, n, gc, dc) and returns: list