def _proto_evaluation_to_evaluation()

in tensorflow_decision_forests/component/inspector/inspector.py [0:0]


def _proto_evaluation_to_evaluation(
    src: metric_pb2.EvaluationResults) -> Evaluation:
  """Converts an Yggdrasil evaluation proto to an evaluation object."""

  dst = Evaluation(num_examples=src.count_predictions_no_weight)

  if dst.num_examples == 0:
    return dst

  if src.HasField("loss_value"):
    dst = dst._replace(loss=src.loss_value)

  if src.HasField("classification"):
    cls = src.classification
    if cls.HasField("confusion"):
      sum_diagonal = 0
      for i in range(cls.confusion.nrow):
        sum_diagonal += cls.confusion.counts[i + i * cls.confusion.nrow]
      dst = dst._replace(accuracy=sum_diagonal / cls.confusion.sum)

    if cls.rocs:
      dst = dst._replace(aucs=[roc.auc for roc in cls.rocs])

    if dst.loss is None and cls.HasField("sum_log_loss"):
      dst = dst._replace(loss=cls.sum_log_loss / src.count_predictions)

  if src.HasField("regression"):
    reg = src.regression
    if reg.HasField("sum_square_error"):
      dst = dst._replace(
          rmse=math.sqrt(reg.sum_square_error / src.count_predictions))

  if src.HasField("ranking"):
    rank = src.ranking
    if rank.HasField("ndcg"):
      dst = dst._replace(ndcg=rank.ndcg.value)

  return dst