<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def top_prior(name, z_shape, learn_prior="normal", temperature=1.0):
 """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" """

  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)