code: def test_forward(self) -> None:
      # input
      batch_size, channels_in, channels_out = 32, 3, 64
      img_height, img_width = 28, 28
      input_shape = (batch_size, channels_in, img_height, img_width)
      input_conv = np.random.normal(size=input_shape).astype(np.int32)
  
      # filters
      h_filter, w_filter = 2, 2
      strides = [2, 2]
      filter_shape = (h_filter, w_filter, channels_in, channels_out)
      filter_values = np.random.normal(size=filter_shape).astype(
          np.int32
      )
  
      inp = int100factory.tensor(input_conv)
      out = inp.conv2d(int100factory.tensor(filter_values), strides)
      actual = out.to_native()
  
      # conv input
      x = tf.Variable(input_conv, dtype=tf.float32)
      x_nhwc = tf.transpose(x, (0, 2, 3, 1))
  
      # conv filter
      filters_tf = tf.Variable(filter_values, dtype=tf.float32)
  
      conv_out_tf = tf.nn.conv2d(
          x_nhwc,
          filters_tf,
          strides=[1, strides[0], strides[1], 1],
          padding="SAME",
      )
      expected = tf.transpose(conv_out_tf, perm=[0, 3, 1, 2])
      np.testing.assert_array_almost_equal(actual, expected, decimal=3)
  
file_path: tf-encrypted/tf_encrypted/tensor/int100_test.py
imports: import math
  import random
  import unittest
  import numpy
  import tensorflow
  from tf_encrypted.tensor import int100factory
label_desc: Use image node_id 1 for calling the TestConv2D obj's underlying member method code with example usage: obj.test_forward() without return types