code: def test_output_sizes(
      self,
      input_shape,
      output_shape,
      kernel,
      stride,
      padding,
      data_format,
  ):
      batch_dim = 2
      num_channels = 3
      if data_format == "channels_first":
          data = jnp.zeros([batch_dim, num_channels] + input_shape)
      if data_format == "channels_last":
          data = jnp.zeros([batch_dim] + input_shape + [num_channels])
  
      net = conv.ConvNDTranspose(
          num_spatial_dims=len(input_shape),
          output_channels=3,
          kernel_shape=kernel,
          output_shape=output_shape,
          stride=stride,
          padding=padding,
          data_format=data_format,
      )
      out = net(data)
  
      if output_shape is None:
          output_shape = [
              default_output_shape(in_shape, kernel, stride, padding)
              for in_shape in input_shape
          ]
      if data_format == "channels_first":
          expected_shape = tuple(
              [batch_dim, num_channels] + output_shape
          )
      if data_format == "channels_last":
          expected_shape = tuple(
              [batch_dim] + output_shape + [num_channels]
          )
      self.assertEqual(out.shape, expected_shape)
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  from haiku._src import conv
  from haiku._src import initializers
  from haiku._src import test_utils
  from haiku._src import transform
  import jax
  from jax import random
  import jax.numpy
  import numpy
label_desc: Use image node_id 12 for calling the ConvTransposeTest obj's underlying member method code with example usage: obj.test_output_sizes(input_shape, output_shape, kernel, stride, padding, data_format) without return types