def METHOD_NAME(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)