code: def testGradientThroughParams(self):
      df = tf.Variable([[17.3], [14.0]])
      loc = tf.Variable([[-5.0, 0.0, 0.5]])
      scale = tf.Variable(2.0)
      d = half_student_t.HalfStudentT(
          df=df, loc=loc, scale=scale, validate_args=True
      )
      with tf.GradientTape() as tape:
          loss = -d.log_prob(np.ones((2, 3)))
      grad = tape.gradient(loss, d.trainable_variables)
      self.assertLen(grad, 3)
      self.assertAllNotNone(grad)
  
imports: import math
  import numpy
  from scipy import stats
  from scipy.special import gamma
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import half_student_t
  from tensorflow_probability.python.distributions.internal import statistical_testing
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 24 for calling the HalfStudentTTest obj's underlying member method code with example usage: obj.testGradientThroughParams() without return types