class_docstr: Common tests for single-part and multi-part bijectors.
code: def testOutputsWaterfall(self, steps=4):
      struct = self.test_arg()
  
      # Call forward a few times.
      for i in range(steps):
          self.assertLen(self.forward_keys, i)
          self.assertLen(self.inverse_keys, i)
          struct = self.forward(struct)
  
      # Grab a reference, and call forward some more.
      mid_ref = struct
      for i in range(steps):
          self.assertLen(self.forward_keys, steps + i)
          self.assertLen(self.inverse_keys, steps + i)
          struct = self.forward(struct)
  
      # Clear strong references to the final output
      del struct
      self.assertLen(self.inverse_keys, steps)
      self.assertLen(self.forward_keys, steps + 1)
  
      # Clear strong references to the midpoint
      del mid_ref
      self.assertLen(self.forward_keys, 0)
      self.assertLen(self.inverse_keys, 0)
  
imports: from absl.testing import parameterized
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import cache_util
  from tensorflow_probability.python.internal import test_util
label_desc: Use image node_id 2 for calling the CacheTestCommon obj's underlying member method code with example usage: obj.testOutputsWaterfall(steps) without return types