code: def _mul_exp(x, logp):
      """Returns `x * exp(logp)` with zero output if `exp(logp)==0`.
  
      Args:
        x: A `Tensor`.
        logp: A `Tensor`.
  
      Returns:
        `x * exp(logp)` with zero output and zero gradient if `exp(logp)==0`,
        even if `x` is NaN or infinite.
      """
      p = tf.math.exp(logp)
      # If p==0, the gradient with respect to logp is zero,
      # so we can replace the possibly non-finite `x` with zero.
      x = tf.where(tf.math.equal(p, 0), tf.zeros_like(x), x)
      return x * p
  
imports: import numpy
  import six
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import softmax_centered
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import reparameterization
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.internal import tensorshape_util
label_desc: Use image node_id 4 for calling a global function with example usage: _mul_exp(x, logp) and returns: unknown