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