code: def test_group_conv_shape(device_id):
      x = C.input_variable((16, 64, 64))
      param = C.parameter((16, 1, 3, 3))
      y_pad_channel = C.convolution(param, x, groups=16)
      y_pad_channel_2 = C.convolution(
          param, x, groups=16, auto_padding=[True, True, True]
      )
      y_not_pad_channel = C.convolution(
          param, x, groups=16, auto_padding=[False, True, True]
      )
  
      # Though in most cases unintended, padding in channel axis is expected and supported behavior when auto_padding is not specified or set to [True, ..].
      assert np.allclose(y_pad_channel.shape, (256, 64, 64))
      assert np.allclose(y_pad_channel_2.shape, (256, 64, 64))
      # Explicit specification is required if we don't want padding on channel
      assert np.allclose(y_not_pad_channel.shape, (16, 64, 64))
  
imports: from __future__ import division
  import numpy
  import pytest
  import cntk
  from .ops_test_utils import unittest_helper, _test_unary_op, AA, precision, PRECISION_TO_TYPE, constant, cntk_device
  from cntk.ops import AVG_POOLING, MAX_POOLING, MAX_UNPOOLING
  from cntk.internal import sanitize_dtype_cntk
  from cntk.cntk_py import should_force_deterministic_algorithms
label_desc: Use image node_id 24 for calling a global function with example usage: test_group_conv_shape(device_id) without return types