code: def testVonMisesVonMisesKL(self):
      d1 = von_mises.VonMises(
          loc=self.make_tensor(np.array([[0.05, 0.1, 0.2]])),
          concentration=self.make_tensor(np.array([[0.0, 0.3, 0.4]])),
          validate_args=True,
      )
      d2 = von_mises.VonMises(
          loc=self.make_tensor(
              np.array([[0.7, 0.5, 0.3], [0.1, 0.3, 0.5]])
          ),
          concentration=self.make_tensor(np.array([[0.8, 0.0, 0.5]])),
          validate_args=True,
      )
  
      kl_actual = kullback_leibler.kl_divergence(d1, d2)
      x = d1.sample(
          int(1e5), seed=test_util.test_seed(hardcoded_seed=0)
      )
      kl_sample = d1.log_prob(x) - d2.log_prob(x)
      kl_same = kullback_leibler.kl_divergence(d1, d1)
  
      [kl_actual_val, kl_sample_val, kl_same_val] = self.evaluate(
          [kl_actual, kl_sample, kl_same]
      )
  
      # Computed by reference code.
      kl_expected = np.array(
          [
              [0.15402061, 0.02212654, 0.00282222],
              [0.15402061, 0.02212654, 0.00671171],
          ]
      )
      self.assertAllClose(kl_actual_val, kl_expected)
      self.assertAllMeansClose(
          kl_sample_val, kl_actual_val, axis=0, atol=0.0, rtol=1e-1
      )
      self.assertAllClose(kl_same_val, np.zeros((1, 3)))
  
imports: import numpy
  from scipy import special
  from scipy import stats
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions import von_mises
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 18 for calling the _VonMisesTest obj's underlying member method code with example usage: obj.testVonMisesVonMisesKL() without return types