code: def test_discover_variables(self):
      expected_vars = (
          tf.Variable(0.0, name="a"),
          tf.Variable(1.0, name="b"),
          tf.Variable(2.0, name="d"),
          tf.Variable(3.0, name="e", trainable=False),
      )
      input_ = [
          tf.constant(1),
          expected_vars[0],
          (
              tf.constant(2),
              expected_vars[1],
              {
                  "c": tf.constant(3),
                  "d": expected_vars[2],
                  "e": expected_vars[3],
              },
          ),
      ]
      actual_vars = tensor_util.discover_variables(input_)
      self.assertAllIs(expected_vars, actual_vars)
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import scale
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.util import deferred_tensor
label_desc: Use image node_id 2 for calling the VariableTrackingUtils obj's underlying member method code with example usage: obj.test_discover_variables() without return types