code: def testJohnsonSUFullyReparameterized(self):
      skewness = tf.constant(1.0)
      tailweight = tf.constant(2.0)
      mu = tf.constant(4.0)
      sigma = tf.constant(3.0)
      _, [
          grad_skewness,
          grad_tailweight,
          grad_mu,
          grad_sigma,
      ] = gradient.value_and_gradient(
          lambda g, d, m, s: johnson_su.JohnsonSU(  # pylint:disable=g-long-lambda
              skewness=g,
              tailweight=d,
              loc=m,
              scale=s,
              validate_args=True,
          ).sample(
              100, seed=test_util.test_seed()
          ),
          [skewness, tailweight, mu, sigma],
      )
      (
          grad_skewness,
          grad_tailweight,
          grad_mu,
          grad_sigma,
      ) = self.evaluate(
          [grad_skewness, grad_tailweight, grad_mu, grad_sigma]
      )
      self.assertIsNotNone(grad_skewness)
      self.assertIsNotNone(grad_tailweight)
      self.assertIsNotNone(grad_mu)
      self.assertIsNotNone(grad_sigma)
  
imports: import math
  import numpy
  from scipy import stats
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import johnson_su
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 22 for calling the JohnsonSUTest obj's underlying member method code with example usage: obj.testJohnsonSUFullyReparameterized() without return types