def METHOD_NAME(self, stride, pad, kernel, size,
                     input_channels, output_channels,
                     batch_size, use_bias, training_mode, group, gc, dc):
    training = 1 if training_mode else 0
    op = core.CreateOperator(
        "Conv",
        ["X", "w", "b"] if use_bias else ["X", "w"],
        ["Y"],
        stride=stride,
        pad=pad,
        kernel=kernel,
        group=group,
        training_mode=training,
    )
    X = np.random.rand(
        batch_size, input_channels * group, size, size).astype(np.float32) - 0.5
    w = np.random.rand(output_channels * group, input_channels, kernel, kernel) \
        .astype(np.float32) - 0.5
    b = np.random.rand(output_channels * group).astype(np.float32) - 0.5
    inputs = [X, w, b] if use_bias else [X, w]
    self.assertDeviceChecks(dc, op, inputs, [0])
    if training_mode:
        for i in range(len(inputs)):
            self.assertGradientChecks(gc, op, inputs, i, [0], threshold=0.01)