code: def testTracksExogenousTrainableVariables(self):
      loc = tf.Variable(0.0, name="loc")
  
      def build_normal(s):
          return normal.Normal(loc=loc, scale=s)
  
      dist = deferred_module.DeferredModule(
          build_normal, s=tf.Variable(1.0, name="scale"), also_track=loc
      )
  
      # Check that variable tracking works recursively, as well as directly.
      wrapped_dist = sample.Sample(dist, sample_shape=[2])
      self.assertLen(getattr(wrapped_dist, "trainable_variables"), 2)
      self.assertLen(getattr(dist, "trainable_variables"), 2)
  
file_path: probability/tensorflow_probability/python/experimental/util/deferred_module_test.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import scale
  from tensorflow_probability.python.distributions import gamma
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.distributions import sample
  from tensorflow_probability.python.distributions import transformed_distribution
  from tensorflow_probability.python.experimental.util import deferred_module
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import test_util
label_desc: Use image node_id 2 for calling the DeferredModuleTest obj's underlying member method code with example usage: obj.testTracksExogenousTrainableVariables() and returns: normal