code: def testGradientsThroughParams(self):
      loc = tf.Variable(
          np.zeros((4, 5, 2, 3)), shape=tf.TensorShape(None)
      )
      scale = tf.Variable(np.ones([]), shape=tf.TensorShape(None))
      ndims = tf.Variable(
          2, trainable=False, shape=tf.TensorShape(None)
      )
      dist = independent.Independent(
          logistic.Logistic(loc=loc, scale=scale),
          reinterpreted_batch_ndims=ndims,
          validate_args=True,
      )
      with tf.GradientTape() as tape:
          loss = -dist.log_prob(np.zeros((4, 5, 2, 3)))
      grad = tape.gradient(loss, dist.trainable_variables)
      self.assertLen(grad, 2)
      self.assertAllNotNone(grad)
  
imports: import functools
  import os
  from absl.testing import parameterized
  import numpy
  from scipy import stats
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import bernoulli
  from tensorflow_probability.python.distributions import exponential
  from tensorflow_probability.python.distributions import independent
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions import log_prob_ratio
  from tensorflow_probability.python.distributions import logistic
  from tensorflow_probability.python.distributions import lognormal
  from tensorflow_probability.python.distributions import mvn_diag
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.distributions import poisson
  from tensorflow_probability.python.internal import hypothesis_testlib
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow_probability.python.internal import test_util
label_desc: Use image node_id 18 for calling the IndependentDistributionTest obj's underlying member method code with example usage: obj.testGradientsThroughParams() without return types