code: def testCategoricalCategoricalKLExtreme(self, kwargs1, kwargs2):
      a = categorical.Categorical(**kwargs1)
      kl = kullback_leibler.kl_divergence(a, a)
      kl_val = self.evaluate(kl)
      self.assertEqual(kl_val, 0.0)
  
      b = categorical.Categorical(**kwargs2)
      kl = kullback_leibler.kl_divergence(a, b)
      kl_val = self.evaluate(kl)
      self.assertAllClose(
          kl_val, np.log(0.5) - 0.5 * (np.log(0.2) + np.log(0.6))
      )
  
      kl = kullback_leibler.kl_divergence(b, a)
      kl_val = self.evaluate(kl)
      self.assertEqual(kl_val, np.inf)
  
imports: from absl.testing import parameterized
  import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import identity
  from tensorflow_probability.python.distributions import categorical
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
  from tensorflow_probability.python.util import deferred_tensor
label_desc: Use image node_id 31 for calling the CategoricalTest obj's underlying member method code with example usage: obj.testCategoricalCategoricalKLExtreme(kwargs1, kwargs2) without return types