code: def testPoissonCdfGradient(self):
      batch_size = 12
      lam = tf.constant([3.0] * batch_size)
      lam_v = 3.0
      x = np.array(
          [
              -3.0,
              -0.5,
              0.0,
              2.0,
              2.2,
              3.0,
              3.1,
              4.0,
              5.0,
              5.5,
              6.0,
              7.0,
          ],
          dtype=np.float32,
      )
  
      def cdf(lam):
          return self._make_poisson(
              rate=lam,
              force_probs_to_zero_outside_support=True,
              validate_args=False,
          ).cdf(x)
  
      _, dcdf_dlam = self.evaluate(
          gradient.value_and_gradient(cdf, lam)
      )
  
      # A finite difference approximation of the derivative.
      eps = 1e-6
      expected = (
          stats.poisson.cdf(x, lam_v + eps)
          - stats.poisson.cdf(x, lam_v - eps)
      ) / (2 * eps)
  
      self.assertEqual(dcdf_dlam.shape, (batch_size,))
      self.assertAllClose(dcdf_dlam, expected)
  
imports: import numpy
  from scipy import stats
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import poisson
  from tensorflow_probability.python.distributions.internal import statistical_testing
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import implementation_selection
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 13 for calling the PoissonTest obj's underlying member method code with example usage: obj.testPoissonCdfGradient() and returns: self