code: def test_conv_shapes(self):
      paddings = ["valid", "same"]
      strides = [(1, 1), (2, 1), (2, 2)]
      x = asfloat(np.random.random((20, 12, 11, 2)))
  
      for stride, padding in product(strides, paddings):
          network = layers.join(
              layers.Input((12, 11, 2)),
              layers.Convolution(
                  (3, 4, 5), padding=padding, stride=stride
              ),
          )
          y = self.eval(network.output(x))
  
          self.assertShapesEqual(
              y.shape[1:],
              network.output_shape[1:],
              msg="padding={} and stride={}".format(padding, stride),
          )
  
imports: import random
  from itertools import product
  from collections import namedtuple
  import numpy
  import tensorflow
  from neupy import layers
  from neupy.utils import asfloat, shape_to_tuple
  from neupy.layers.convolutions import conv_output_shape, deconv_output_shape
  from neupy.exceptions import LayerConnectionError
  from base import BaseTestCase
label_desc: Use image node_id 3 for calling the ConvLayersTestCase obj's underlying member method code with example usage: obj.test_conv_shapes() without return types