class_docstr: Common tests for single-part and multi-part bijectors.
code: def testAttrsGetCleanedUp(self):
      x = self.test_arg()
      x_attrs = self.cache.forward_attributes(x)
      x_attrs["foo"] = "bar"
  
      # Attributes only exist in from_x
      self.assertEqual(x_attrs, {"foo": "bar"})
      self.assertLen(self.forward_keys, 1)  # Holding attrs
      self.assertLen(
          self.inverse_keys, 0
      )  # from_x not called; nothing here.
  
      x = None
      # When x goes out of scope, it's cleared from the cache.
      self.assertLen(self.forward_keys, 0)
      self.assertLen(self.inverse_keys, 0)
      # But external references to attrs may be retained.
      self.assertEqual(x_attrs, {"foo": "bar"})
  
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 3 for calling the CacheTestCommon obj's underlying member method code with example usage: obj.testAttrsGetCleanedUp() without return types