code: def test_works_correctly_side_vars(self):
      x_ = np.float32(2.1)  # Adding extra tenth to force imprecision.
      y_ = np.float32(3.1)
      x = tf.Variable(x_, name="x")
      y = tf.Variable(y_, name="y")
      self.evaluate([x.initializer, y.initializer])
  
      f = lambda x: x * y
      g = lambda z: tf.square(x) * y
  
      with tf.GradientTape() as tape:
          fx = custom_gradient.custom_gradient(f(x), g(x), x)
      gx = tape.gradient(fx, [x, y])
      [x_, fx_, gx_] = self.evaluate([x, fx, gx[0]])
      gy_ = gx[1]
  
      self.assertEqual(x_ * y_, fx_)
      self.assertEqual(np.square(x_) * y_, gx_)
      self.assertIsNone(gy_)
  
file_path: probability/tensorflow_probability/python/math/custom_gradient_test.py
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import custom_gradient
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 4 for calling the CustomGradientTest obj's underlying member method code with example usage: obj.test_works_correctly_side_vars() without return types