def METHOD_NAME():
    out_grad_np = np.random.uniform(size=out_grad_shape).astype(dtype)
    filter_np = np.random.uniform(size=filter_shape).astype(dtype)
    dilated_out_grad_np = tvm.topi.testing.dilate_python(
        out_grad_np, [1, stride_h, stride_w, 1]
    )
    # padding params in forward propagation
    fpad_top, fpad_left, fpad_bottom, fpad_right = get_pad_tuple(
        [padding_h, padding_w], (filter_h, filter_w)
    )
    # padding params in backward propagation
    bpad_top = filter_h - 1 - fpad_top
    bpad_bottom = (filter_h - 1 - fpad_bottom) + (stride_h - 1)
    bpad_left = filter_w - 1 - fpad_left
    bpad_right = (filter_w - 1 - fpad_right) + (stride_w - 1)
    padded_out_grad = np.zeros(
        (
            batch,
            dilated_out_grad_np.shape[1] + bpad_top + bpad_bottom,
            dilated_out_grad_np.shape[2] + bpad_left + bpad_right,
            out_channel,
        )
    )
    padded_out_grad[
        :,
        bpad_top : dilated_out_grad_np.shape[1] + bpad_top,
        bpad_left : dilated_out_grad_np.shape[2] + bpad_left,
        :,
    ] = dilated_out_grad_np
    in_grad_np = np.zeros((batch, in_h, in_w, in_channel))
    for b in range(batch):
        for c in range(in_channel):
            for m in range(channel_multiplier):
                in_grad_np[b, :, :, c] += signal.convolve2d(
                    padded_out_grad[b, :, :, c * channel_multiplier + m],
                    filter_np[:, :, c, m],
                    mode="valid",
                )[0:in_h, 0:in_w]
    return (out_grad_np, filter_np, in_grad_np)