code: def call(self, inputs):
      if self.groups > 1:
          input_shape = inputs.shape
          output_shape = input_shape[:-1].concatenate(self.dim)
          output_shape = [
              d if d is not None else -1 for d in output_shape.as_list()
          ]
          inputs = tf.reshape(
              inputs, [-1, self.groups, input_shape[-1] // self.groups]
          )
          inputs = tf.transpose(inputs, [1, 0, 2])
          outputs = tf.matmul(inputs, self.kernel)
          outputs = tf.transpose(outputs, [1, 0, 2])
          outputs = tf.reshape(outputs, output_shape)
      else:
          outputs = tf.matmul(
              inputs, tf.reshape(self.weights, [-1, self.dim])
          )
      if self.use_bias:
          outputs = tf.nn.bias_add(outputs, self.bias)
      if self.activation:
          outputs = self.activation(outputs)
      return outputs
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  import tf_euler
  from tf_euler.python.convolution import conv
  from tf_euler.python.euler_ops import mp_ops
label_desc: Use image node_id 3 for calling the GroupDense obj's underlying member method code with example usage: obj.call(inputs) and returns: outputs