code: def top(self, body_output, features):
      
      if isinstance(body_output, dict):
        logits = {}
        for k, v in six.iteritems(body_output):
          # TODO(aidangomez): share variables here?
          with tf.variable_scope(k) as top_vs:
            self._add_variable_scope("top_%s" % k, top_vs)
            logits[k] = self._top_single(v, k, features)
        return logits
      else:
        return self._top_single(body_output, "targets", features)
docs: Computes logits given body output and features.
  
      Args:
        body_output: dict of str to Tensor, comprising one key-value pair for each
          target. Each value denotes the target's pre-logit activations.
          Alternatively, it may be a single Tensor denoting the pre-logits for
          that target.
        features: dict of str to Tensor. Typically it is the preprocessed data
          batch after Problem's preprocess_example().
  
      Returns:
        logits: dict of str to Tensor, denoting each logits for each target; or
          a single Tensor denoting the logits for that target.
          When targets are generated at training time:
            logits == {
              "self_generated_targets": <generated targets tensor>
              "logits": <original logits Tensor or dict>
            }