xref: /aosp_15_r20/external/pytorch/benchmarks/dynamo/combine_csv.py (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1# This script takes csvs produced by parse_logs.py and combines them
2# into a single CSV file
3
4import ast
5import csv
6import sys
7from collections import defaultdict
8
9
10assert len(sys.argv) == 3
11
12RESULTS = defaultdict(dict)
13
14for side, f in zip(["static", "dynamic"], sys.argv[1:]):
15    with open(f) as f:
16        reader = csv.DictReader(f)
17        for row in reader:
18            RESULTS[(row["bench"], row["name"])][side] = row
19
20fields = ["frame_time", "graph_breaks"]
21
22out = csv.DictWriter(
23    sys.stdout,
24    ["bench", "name"] + [f"delta_{n}" for n in fields] + ["static_url", "dynamic_url"],
25    dialect="excel",
26)
27out.writeheader()
28
29for (bench, name), sides in RESULTS.items():
30    if "static" not in sides:
31        continue
32    if "dynamic" not in sides:
33        continue
34    if not name:
35        out.writerow(
36            {
37                "static_url": sides["static"]["explain"],
38                "dynamic_url": sides["dynamic"]["explain"],
39            }
40        )
41        continue
42    row = {"bench": bench, "name": name}
43    for f in fields:
44        try:
45            static = ast.literal_eval(sides["static"][f])
46            dynamic = ast.literal_eval(sides["dynamic"][f])
47        except SyntaxError:
48            continue
49        row[f"delta_{f}"] = dynamic - static
50    out.writerow(row)
51