code: def top_prior(name, z_shape, learn_prior="normal", temperature=1.0):
    
    with tf.variable_scope(name, reuse=tf.AUTO_REUSE):
      h = tf.zeros(z_shape, dtype=tf.float32)
      if learn_prior == "normal":
        prior_dist = tfp.distributions.Normal(h, tf.exp(h))
      elif learn_prior == "single_conv":
        prior_dist = single_conv_dist("top_learn_prior", h)
      else:
        raise ValueError("Expected learn_prior to be normal or single_conv "
                         "got %s" % learn_prior)
      return TemperedNormal(prior_dist.loc, prior_dist.scale, temperature)
docs: Unconditional prior distribution.
  
    Args:
      name: variable scope
      z_shape: Shape of the mean / scale of the prior distribution.
      learn_prior: Possible options are "normal" and "single_conv".
                   If set to "single_conv", the gaussian is parametrized by a
                   single convolutional layer whose input are an array of zeros
                   and initialized such that the mean and std are zero and one.
                   If set to "normal", the prior is just a Gaussian with zero
                   mean and unit variance.
      temperature: Temperature with which to sample from the Gaussian.
    Returns:
      objective: 1-D Tensor shape=(batch_size,) summed across spatial components.
    Raises:
      ValueError: If learn_prior not in "normal" or "single_conv"