Source code for m2isar.metrics

# SPDX-License-Identifier: Apache-2.0
#
# This file is part of the M2-ISA-R project: https://github.com/tum-ei-eda/M2-ISA-R
#
# Copyright (C) 2022
# Chair of Electrical Design Automation
# Technical University of Munich

"""M2-ISA-R metrics utils."""

import logging

[docs] logger = logging.getLogger("metrics")
[docs] def write_metrics(metrics, dest=None): import pandas as pd assert dest is not None metrics_df = pd.DataFrame({key: [val] for key, val in metrics.items()}) metrics_df.to_csv(dest, index=False)
[docs] def init_metrics(add_sets: bool = True, add_cores: bool = True, add_instructions: bool = True): metrics = {} if add_sets: metrics.update({ "n_sets": 0, "skipped_sets": [], "failed_sets": [], "success_sets": [], }) if add_cores: metrics.update({ "n_cores": 0, "skipped_cores": [], "failed_cores": [], "success_cores": [], }) if add_instructions: metrics.update({ "n_instructions": 0, "skipped_instructions": [], "failed_instructions": [], "success_instructions": [], }) return metrics
[docs] def handle_metrics(metrics, dest=None, ignore_failing: bool = False): if not ignore_failing: failed = {"instructions": metrics["failed_instructions"], "sets": metrics["failed_sets"], "cores": metrics["failed_cores"]} for kind, failed_ in failed.items(): n_failed = len(failed_) if n_failed > 0: failing_str = ", ".join(failed) logger.error("%d %s failed: %s", n_failed, kind, failing_str) raise RuntimeError("Abort due to errors") if dest: write_metrics(metrics, dest=dest)
[docs] def add_metrics_args(parser): parser.add_argument("--metrics", default=None, help="Output metrics to file") parser.add_argument("--ignore-failing", action="store_true", help="Do not crash in case of errors.")