print_benchmark_summary.py
1 #!/usr/bin/env python3 2 3 import argparse 4 import json 5 import tabulate 6 7 8 def main(): 9 parser = argparse.ArgumentParser() 10 parser.add_argument("--precision", type=int, required=True, action="store", help="Precision of printed values") 11 parser.add_argument("results", nargs=1) 12 parser.add_argument("baseline_results", nargs=1) 13 14 args = parser.parse_args() 15 16 with open(args.results[0], "r") as f: 17 results = {entry["name"]: entry["value"] for entry in json.load(f)} 18 19 try: 20 with open(args.baseline_results[0], "r") as f: 21 baseline_results = {entry["name"]: entry["value"] for entry in json.load(f)} 22 except FileNotFoundError: 23 baseline_results: dict[str, float] = {} 24 25 keys = sorted(list(results.keys())) 26 values: list[str] = [] 27 for key in keys: 28 emoji = "" 29 val_str = f"{results[key]:.{args.precision}f}" 30 31 diff_str = "" 32 if key in baseline_results: 33 diff = results[key] - baseline_results[key] 34 35 emoji = "" 36 sign = "" 37 if diff > 0: 38 emoji = "▲ " 39 sign = "+" 40 elif diff < 0: 41 emoji = "▼ " 42 sign = "-" 43 44 diff_str = f" ({sign}{abs(diff):.{args.precision}f})" 45 46 values.append(emoji + val_str + diff_str) 47 48 print(tabulate.tabulate([values], headers=keys, tablefmt="github")) 49 50 51 if __name__ == "__main__": 52 main()