from typing import List
from promptflow.core import tool
from promptflow.core import log_metric


@tool
def accuracy_aggregate(processed_results: List[int]):

    num_exception = 0
    num_correct = 0

    for i in range(len(processed_results)):
        if processed_results[i] == -1:
            num_exception += 1
        elif processed_results[i] == 1:
            num_correct += 1

    num_total = len(processed_results)
    accuracy = round(1.0 * num_correct / num_total, 2)
    error_rate = round(1.0 * num_exception / num_total, 2)

    log_metric(key="accuracy", value=accuracy)
    log_metric(key="error_rate", value=error_rate)

    return {
        "num_total": num_total,
        "num_correct": num_correct,
        "num_exception": num_exception,
        "accuracy": accuracy,
        "error_rate": error_rate
    }


if __name__ == "__main__":
    numbers = [1, 1, 1, 1, 0, -1, -1]
    accuracy = accuracy_aggregate(numbers)
    print("The accuracy is", accuracy)
