code: def testGammaFromMeanVarianceTapeSafe(self):
      concentration = 1.0
      rate = np.float32(3.0)
      scale = 1.0 / rate
      x = np.array([0.4, 5.0, 3.0], dtype=np.float32)
  
      mean = tf.convert_to_tensor(
          sp_stats.gamma.mean(a=concentration, scale=scale).astype(
              np.float32
          )
      )
      variance = tf.convert_to_tensor(
          sp_stats.gamma.var(a=concentration, scale=scale).astype(
              np.float32
          )
      )
  
      dist = gamma_lib.Gamma.experimental_from_mean_variance(
          mean, variance, validate_args=True
      )
      with tf.GradientTape() as tape:
          tape.watch((mean, variance))
          lp = dist.log_prob(x)
      grads = tape.gradient(lp, (mean, variance))
      self.assertAllNotNone(grads)
  
imports: import functools
  from absl.testing import parameterized
  import numpy
  from scipy import misc
  from scipy import special
  from scipy import stats
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import exp
  from tensorflow_probability.python.distributions import gamma
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions.internal import statistical_testing
  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 37 for calling the GammaTest obj's underlying member method code with example usage: obj.testGammaFromMeanVarianceTapeSafe() without return types