code: def test_right_mult_by_jacobian_mat(
      self, use_automatic_differentiation
  ):
      vec = np.float32([1.0, 2.0, 3.0])
      jacobian = -np.float32(
          [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]
      )
      time = np.float32(0.0)
      state_vec = np.float32([1.0, 1.0, 1.0])
  
      def ode_fn(_, state):
          return tf.squeeze(tf.matmul(jacobian, state[:, tf.newaxis]))
  
      state_shape = tf.shape(state_vec)
      ode_fn_vec = util.get_ode_fn_vec(ode_fn, state_shape)
      jacobian_fn_mat = util.get_jacobian_fn_mat(
          None if use_automatic_differentiation else jacobian,
          ode_fn_vec,
          state_shape,
          dtype=tf.float32,
      )
      result = util.right_mult_by_jacobian_mat(
          jacobian_fn_mat, ode_fn_vec, time, state_vec, vec
      )
  
      self.assertAllClose(self.evaluate(result), np.dot(vec, jacobian))
  
file_path: probability/tensorflow_probability/python/math/ode/util_test.py
imports: from absl.testing import parameterized
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
  from tensorflow_probability.python.math.ode import util
label_desc: Use image node_id 1 for calling the JacobianTest obj's underlying member method code with example usage: obj.test_right_mult_by_jacobian_mat(use_automatic_differentiation) and returns: tf