code: def _testBroadcasting(
      self, dtype, adjoint_a, adjoint_b, use_static_shape
  ):
      def CompareNonEmpty(self, a_shape, b_shape):
          self._compare(
              GetRandomNormalInput(a_shape, dtype),
              GetRandomNormalInput(b_shape, dtype),
              adjoint_a,
              adjoint_b,
              static_shape=use_static_shape,
          )
  
      CompareNonEmpty(self, [2, 3], [1, 3, 5])
      CompareNonEmpty(self, [1, 2, 3], [3, 5])
      CompareNonEmpty(self, [5, 1, 2, 3], [1, 7, 3, 5])
      CompareNonEmpty(self, [5, 2, 2, 3], [3, 5])
      CompareNonEmpty(self, [2, 3], [5, 2, 3, 5])
      CompareNonEmpty(self, [4, 5, 1, 2, 3], [1, 1, 3, 5])
      CompareNonEmpty(
          self, [1, 2, 1, 4, 2, 1, 3, 4], [3, 2, 1, 1, 1, 2, 4, 2]
      )
  
imports: import numpy
  from tensorflow.python import tf2
  from tensorflow.python.client import session
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import gradient_checker_v2
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import variables
  from tensorflow.python.platform import benchmark
  from tensorflow.python.platform import test
label_desc: Use image node_id 4 for calling the BatchMatmulOpTest obj's underlying member method code with example usage: obj._testBroadcasting(dtype, adjoint_a, adjoint_b, use_static_shape) without return types