code: def testGradientsThroughParams(self):
      logits = self._build_variable([1.0, 2.0, 3.0])
      loc = self._build_variable([0.0, 0.0, 0])
      scale = self._build_variable(1.0)
      dist = mixture_same_family.MixtureSameFamily(
          mixture_distribution=categorical.Categorical(logits=logits),
          components_distribution=logistic.Logistic(
              loc=loc, scale=scale
          ),
          validate_args=True,
      )
      with tf.GradientTape() as tape:
          loss = -dist.log_prob([5.0, 4.0])
      grad = tape.gradient(loss, dist.trainable_variables)
      self.assertLen(grad, 3)
      self.assertAllNotNone(grad)
  
      logits = self._build_variable(np.zeros((4, 4, 5)))
      loc = self._build_variable(np.zeros((4, 4, 5, 2, 3)))
      scale = self._build_variable(1.0)
      dist = mixture_same_family.MixtureSameFamily(
          mixture_distribution=categorical.Categorical(logits=logits),
          components_distribution=independent.Independent(
              logistic.Logistic(loc=loc, scale=scale),
              reinterpreted_batch_ndims=self._build_tensor(
                  2, dtype=np.int32
              ),
          ),
          validate_args=True,
      )
      with tf.GradientTape() as tape:
          loss = -dist.log_prob(np.zeros((4, 4, 2, 3)))
      grad = tape.gradient(loss, dist.trainable_variables)
      self.assertLen(grad, 3)
      self.assertAllNotNone(grad)
  
imports: import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import bernoulli
  from tensorflow_probability.python.distributions import categorical
  from tensorflow_probability.python.distributions import dirichlet
  from tensorflow_probability.python.distributions import exponential
  from tensorflow_probability.python.distributions import independent
  from tensorflow_probability.python.distributions import logistic
  from tensorflow_probability.python.distributions import mixture_same_family
  from tensorflow_probability.python.distributions import mvn_diag
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.internal import hypothesis_testlib
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 23 for calling the _MixtureSameFamilyTest obj's underlying member method code with example usage: obj.testGradientsThroughParams() without return types