code: def testEmptyMatMul(self):
      def f(x, y):
          return math_ops.matmul(x, y)
  
      x = constant_op.constant(
          np.random.random_sample((0, 3)), dtype=dtypes.float32
      )
      y = constant_op.constant(
          np.random.random_sample((3, 4)), dtype=dtypes.float32
      )
      for grad in gradient_checker.compute_gradient(f, [x, y]):
          self.assertEqual(grad[0].shape, (0, 0))
          self.assertEqual(grad[1].shape, (0, 12))
      error = gradient_checker.max_error(
          *gradient_checker.compute_gradient(f, [x, y])
      )
      self.assertEqual(error, 0)
  
imports: import numpy
  from tensorflow.python.eager import backprop
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import sparse_tensor
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import custom_gradient
  from tensorflow.python.ops import gradient_checker_v2
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import nn_ops
  from tensorflow.python.ops import sparse_ops
  import tensorflow.python.ops.nn_grad
  from tensorflow.python.platform import test
  from tensorflow.python.platform import tf_logging
label_desc: Use image node_id 12 for calling the GradientCheckerTest obj's underlying member method code with example usage: obj.testEmptyMatMul() and returns: math_ops