/ ci / print_benchmark_summary.py
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()