code: def _testBinaryOp(
      self,
      math_fun,
      np_fun,
      name,
      operands=None,
      extra_operands=None,
      check_promotion=True,
      check_promotion_result_type=True,
  ):
      def run_test(a, b):
          for fn in self.array_transforms:
              arg1 = fn(a)
              arg2 = fn(b)
              self.match(
                  math_fun(arg1, arg2),
                  np_fun(arg1, arg2),
                  msg="{}({}, {})".format(name, arg1, arg2),
              )
          # Tests type promotion
          for type_a in self.types:
              for type_b in self.types:
                  if not check_promotion and type_a != type_b:
                      continue
                  arg1 = array_ops.array(a, dtype=type_a)
                  arg2 = array_ops.array(b, dtype=type_b)
                  self.match(
                      math_fun(arg1, arg2),
                      np_fun(arg1, arg2),
                      msg="{}({}, {})".format(name, arg1, arg2),
                      check_dtype=check_promotion_result_type,
                  )
  
      if operands is None:
          operands = [
              (5, 2),
              (5, [2, 3]),
              (5, [[2, 3], [6, 7]]),
              ([1, 2, 3], 7),
              ([1, 2, 3], [5, 6, 7]),
          ]
      for operand1, operand2 in operands:
          run_test(operand1, operand2)
      if extra_operands is not None:
          for operand1, operand2 in extra_operands:
              run_test(operand1, operand2)
  
imports: import itertools
  from absl.testing import parameterized
  import numpy
  from six.moves import range
  import tensorflow.compat.v2
  from trax.tf_numpy.numpy_impl import array_ops
  from trax.tf_numpy.numpy_impl import arrays
  from trax.tf_numpy.numpy_impl import math_ops
label_desc: Use image node_id 2 for calling the MathTest obj's underlying member method code with example usage: obj._testBinaryOp(math_fun, np_fun, name, operands, extra_operands, check_promotion, check_promotion_result_type) without return types