code: def _testIndirectRegistration(self, fn):
      class Sub1(normal.Normal):
          def entropy(self):
              return ""
  
      class Sub2(normal.Normal):
          def entropy(self):
              return ""
  
      class Sub11(Sub1):
          def entropy(self):
              return ""
  
      # pylint: disable=unused-argument,unused-variable
      @kullback_leibler.RegisterKL(Sub1, Sub1)
      def _kl11(a, b, name=None):
          return "sub1-1"
  
      @kullback_leibler.RegisterKL(Sub1, Sub2)
      def _kl12(a, b, name=None):
          return "sub1-2"
  
      @kullback_leibler.RegisterKL(Sub2, Sub1)
      def _kl21(a, b, name=None):
          return "sub2-1"
  
      # pylint: enable=unused-argument,unused_variable
  
      sub1 = Sub1(loc=0.0, scale=1.0)
      sub2 = Sub2(loc=0.0, scale=1.0)
      sub11 = Sub11(loc=0.0, scale=1.0)
  
      self.assertEqual("sub1-1", fn(sub1, sub1))
      self.assertEqual("sub1-2", fn(sub1, sub2))
      self.assertEqual("sub2-1", fn(sub2, sub1))
      self.assertEqual("sub1-1", fn(sub11, sub11))
      self.assertEqual("sub1-1", fn(sub11, sub1))
      self.assertEqual("sub1-2", fn(sub11, sub2))
      self.assertEqual("sub1-1", fn(sub11, sub1))
      self.assertEqual("sub1-2", fn(sub11, sub2))
      self.assertEqual("sub2-1", fn(sub2, sub11))
      self.assertEqual("sub1-1", fn(sub1, sub11))
  
file_path: probability/tensorflow_probability/python/distributions/kullback_leibler_test.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.internal import reparameterization
  from tensorflow_probability.python.internal import test_util
label_desc: Use image node_id 5 for calling the KLTest obj's underlying member method code with example usage: obj._testIndirectRegistration(fn) and returns: str, str, str, str, str, str