code: def testMatmul(self, a, b, expected_shape=None, **kwargs):
      if callable(a):
          a = a()
      if callable(b):
          b = b()
      actual = ragged_math_ops.matmul(a, b, **kwargs)
      expected = self.eager_ragged_matmul(a, b, **kwargs)
      self.assertAllEqual(actual, expected)
  
      if expected_shape is not None and not kwargs:
          if context.executing_eagerly():
              self.assertTrue(
                  actual.shape.is_compatible_with(expected_shape)
              )
          else:
              self.assertEqual(actual.shape.as_list(), expected_shape)
  
imports: from absl.testing import parameterized
  from tensorflow.python.eager import context
  from tensorflow.python.eager import def_function
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import errors
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops.ragged import ragged_concat_ops
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.ops.ragged import ragged_math_ops
  from tensorflow.python.ops.ragged import ragged_tensor
  from tensorflow.python.platform import googletest
label_desc: Use image node_id 3 for calling the RaggedMatmulOpTest obj's underlying member method code with example usage: obj.testMatmul(a, b, expected_shape) without return types