def loop_fn(i):
     grad1 = array_ops.gather(grad, i)
     return nn.conv2d_backprop_input(x_shape,
                                     filt,
                                     grad1,
                                     strides=[1, 2, 2, 1],
                                     padding="VALID",
                                     data_format="NHWC")
 def loop_fn(i):
   grad1 = array_ops.gather(grad, i)
   return nn.conv2d_backprop_input(
       x_shape,
       filt,
       grad1,
       strides=[1, 2, 2, 1],
       padding="VALID",
       data_format="NHWC")
def template(N=2,
             Hin=5,
             Hout=3,
             Win=5,
             Wout=3,
             Cin=7,
             Cout=9,
             KH=3,
             KW=3,
             strides=[1, 1, 1, 1],
             padding="VALID",
             data_format="NHWC",
             description: str = ""):
    from tensorflow.python.ops import nn
    x_shape = [N, Hin, Win, Cin
               ] if data_format == "NHWC" else [N, Cin, Hin, Win]
    y_shape = [N, Hout, Wout, Cout
               ] if data_format == "NHWC" else [N, Cout, Hout, Wout]
    w_shape = [KH, KW, Cin, Cout]
    w = tf.placeholder(np.float32, w_shape)
    gy = tf.placeholder(np.float32, y_shape)
    x = nn.conv2d_backprop_input(x_shape,
                                 w,
                                 gy,
                                 strides=strides,
                                 padding=padding,
                                 data_format=data_format)

    vw = np.random.rand(*w_shape).astype(np.float32)
    vgy = np.random.rand(*y_shape).astype(np.float32)

    with tf.Session() as sess:
        vx, = sess.run([x], {w: vw, gy: vgy})
        graph = TensorFlowConverter(sess, batch_size=2).convert([w, gy], [x])

    generate_kernel_test_case(
        description=f"[TensorFlow] Conv2DBackPropInput {description}",
        graph=graph,
        backend=["webgpu", "webassembly", "webgl"],
        inputs={
            graph.inputs[0]: vw,
            graph.inputs[1]: vgy
        },
        expected={graph.outputs[0]: vx})