|
4 | 4 | import pandas as pd |
5 | 5 | import matplotlib.pyplot as plt |
6 | 6 |
|
7 | | -def plot_speed_graph(outcomes, ax): |
8 | | - baseline_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-baseline") & (outcomes['rival_iter'] > 73)] |
9 | | - rival_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-rival") & (outcomes['rival_iter'] > 73)] |
10 | | - sollya_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-sollya") & (outcomes['rival_iter'] > 73)] |
| 7 | +def plot_speed_graph_rival_iter(outcomes, args): |
| 8 | + # Create figure |
| 9 | + fig, ax = plt.subplots(figsize=(4, 3.5)) |
| 10 | + fig.tight_layout(pad=2.0) |
| 11 | + |
| 12 | + # Drop precision column and sum up based on iteration |
| 13 | + outcomes = outcomes.drop(['baseline_precision'], axis=1) |
| 14 | + outcomes = outcomes.groupby(['rival_iter', 'tool_name'], as_index=False).sum() |
| 15 | + |
| 16 | + # Select appropriate tools |
| 17 | + baseline_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-baseline")] # & (outcomes['baseline_precision'] > 73) |
| 18 | + rival_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-rival")] |
| 19 | + sollya_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-sollya")] |
11 | 20 |
|
| 21 | + # Some weird functions that creates speed per millisecond for each tool |
12 | 22 | def add_values(row): |
13 | 23 | return int(row['rival_iter']), (row['number_of_points'] / row['time']) * 1000 |
14 | | - |
15 | 24 | def tool_cmp2speed(x): |
16 | 25 | return x.sort_values(by=['rival_iter']).apply(add_values, axis=1, result_type='expand') |
17 | 26 |
|
| 27 | + # Sollya timings considered are as base since we are doing speed ratio comparison |
18 | 28 | base = np.array(tool_cmp2speed(sollya_cmp)[1]) |
19 | 29 |
|
| 30 | + # Plot Rival |
20 | 31 | ax.plot(tool_cmp2speed(rival_cmp)[0], np.array(tool_cmp2speed(rival_cmp)[1])/base, '.-', linewidth=2.0, color='r', label='reval') |
| 32 | + # Plot Baseline |
21 | 33 | ax.plot(tool_cmp2speed(baseline_cmp)[0], np.array(tool_cmp2speed(baseline_cmp)[1])/base, '--', linewidth=2.0, color='g', |
22 | 34 | label='baseline') |
| 35 | + # Plot Sollya |
23 | 36 | ax.plot(tool_cmp2speed(sollya_cmp)[0], np.array(tool_cmp2speed(sollya_cmp)[1])/base, '-', linewidth=2.0, color='b', |
24 | 37 | label='sollya') |
25 | 38 |
|
| 39 | + ax.legend() |
| 40 | + ax.set_xlabel("Difficulty") |
| 41 | + ax.set_ylabel("Ratio") |
| 42 | + ax.yaxis.grid(True, linestyle='-', which='major', color='grey', alpha=0.3) |
| 43 | + plt.savefig(args.path + "/ratio_plot_iter.png", format="png") |
| 44 | + plt.savefig(args.path + "/ratio_plot_iter.pdf", format="pdf") |
| 45 | + |
| 46 | + # Latex stuff |
26 | 47 | print("\\newcommand{\RivalAvgSpeedupOverSollya}{" + str(round(tool_cmp2speed(rival_cmp)[1].sum()/np.array(tool_cmp2speed(sollya_cmp)[1]).sum(), 2)) + "\\xspace}") |
27 | 48 | print("\\newcommand{\RivalAvgSpeedupOverBaseline}{" + str( |
28 | 49 | round(tool_cmp2speed(rival_cmp)[1].sum() / np.array(tool_cmp2speed(baseline_cmp)[1]).sum(), 2)) + "\\xspace}") |
29 | | - |
30 | 50 | print("\\newcommand{\RivalMaxSpeedupOverSollya}{" + str(round(np.array(tool_cmp2speed(rival_cmp)[1])[-1]/np.array(tool_cmp2speed(sollya_cmp)[1])[-1], 2)) + "\\xspace}") |
31 | 51 | print("\\newcommand{\RivalMaxSpeedupOverBaseline}{" + str(round(np.array(tool_cmp2speed(rival_cmp)[1])[-1]/np.array(tool_cmp2speed(baseline_cmp)[1])[-1], 2)) + "\\xspace}") |
32 | 52 |
|
| 53 | +def plot_speed_graph_baseline_precision(outcomes, args): |
| 54 | + # Create figure |
| 55 | + fig, ax = plt.subplots(figsize=(4, 3.5)) |
| 56 | + fig.tight_layout(pad=2.0) |
| 57 | + |
| 58 | + # Drop precision column and sum up based on iteration |
| 59 | + outcomes = outcomes.drop(['rival_iter'], axis=1) |
| 60 | + outcomes = outcomes.groupby(['baseline_precision', 'tool_name'], as_index=False).sum() |
| 61 | + |
| 62 | + # Select appropriate tools |
| 63 | + baseline_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-baseline") & (outcomes['baseline_precision'] > 73)] |
| 64 | + rival_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-rival") & (outcomes['baseline_precision'] > 73)] |
| 65 | + sollya_cmp = outcomes.loc[(outcomes['tool_name'] == "valid-sollya") & (outcomes['baseline_precision'] > 73)] |
| 66 | + |
| 67 | + # Some weird functions that creates speed per millisecond for each tool |
| 68 | + def add_values(row): |
| 69 | + return int(row['baseline_precision']), (row['number_of_points'] / row['time']) * 1000 |
| 70 | + def tool_cmp2speed(x): |
| 71 | + return x.sort_values(by=['baseline_precision']).apply(add_values, axis=1, result_type='expand') |
| 72 | + |
| 73 | + # Sollya timings considered are as base since we are doing speed ratio comparison |
| 74 | + base = np.array(tool_cmp2speed(sollya_cmp)[1]) |
| 75 | + |
| 76 | + # Plot Rival |
| 77 | + ax.plot(tool_cmp2speed(rival_cmp)[0], np.array(tool_cmp2speed(rival_cmp)[1])/base, '.-', linewidth=2.0, color='r', label='reval') |
| 78 | + # Plot Baseline |
| 79 | + ax.plot(tool_cmp2speed(baseline_cmp)[0], np.array(tool_cmp2speed(baseline_cmp)[1])/base, '--', linewidth=2.0, color='g', |
| 80 | + label='baseline') |
| 81 | + # Plot Sollya |
| 82 | + ax.plot(tool_cmp2speed(sollya_cmp)[0], np.array(tool_cmp2speed(sollya_cmp)[1])/base, '-', linewidth=2.0, color='b', |
| 83 | + label='sollya') |
| 84 | + |
33 | 85 | ax.legend() |
34 | | - ax.set_xlabel("Difficulty") |
| 86 | + ax.set_xlabel("Truth uniform precision") |
35 | 87 | ax.set_ylabel("Ratio") |
36 | 88 | ax.yaxis.grid(True, linestyle='-', which='major', color='grey', alpha=0.3) |
37 | | - |
| 89 | + plt.savefig(args.path + "/ratio_plot_precision.png", format="png") |
| 90 | + plt.savefig(args.path + "/ratio_plot_precision.pdf", format="pdf") |
| 91 | + |
| 92 | + # Latex stuff |
| 93 | + print("\\newcommand{\RivalAvgSpeedupOverSollya}{" + str(round(tool_cmp2speed(rival_cmp)[1].sum()/np.array(tool_cmp2speed(sollya_cmp)[1]).sum(), 2)) + "\\xspace}") |
| 94 | + print("\\newcommand{\RivalAvgSpeedupOverBaseline}{" + str( |
| 95 | + round(tool_cmp2speed(rival_cmp)[1].sum() / np.array(tool_cmp2speed(baseline_cmp)[1]).sum(), 2)) + "\\xspace}") |
| 96 | + print("\\newcommand{\RivalMaxSpeedupOverSollya}{" + str(round(np.array(tool_cmp2speed(rival_cmp)[1])[-1]/np.array(tool_cmp2speed(sollya_cmp)[1])[-1], 2)) + "\\xspace}") |
| 97 | + print("\\newcommand{\RivalMaxSpeedupOverBaseline}{" + str(round(np.array(tool_cmp2speed(rival_cmp)[1])[-1]/np.array(tool_cmp2speed(baseline_cmp)[1])[-1], 2)) + "\\xspace}") |
| 98 | + |
38 | 99 | def load_outcomes(path): |
39 | 100 | outcomes = json.load(open(path, "r"))["outcomes"] |
40 | | - outcomes = pd.DataFrame(outcomes, columns=['time', 'rival_iter', 'tool_name', 'number_of_points']) |
| 101 | + outcomes = pd.DataFrame(outcomes, columns=['time', 'rival_iter', 'baseline_precision', 'tool_name', 'number_of_points']) |
41 | 102 | return outcomes |
42 | 103 |
|
43 | | -parser = argparse.ArgumentParser(prog='histograms.py', description='Script outputs mixed precision histograms for a Herbie run') |
| 104 | +parser = argparse.ArgumentParser(prog='ratio_plot.py', description='Script outputs ratio plots') |
44 | 105 | parser.add_argument('-t', '--timeline', dest='timeline', default="report/timeline.json") |
45 | 106 | parser.add_argument('-o', '--output-path', dest='path', default="report") |
46 | 107 | args = parser.parse_args() |
47 | 108 |
|
48 | 109 | outcomes = load_outcomes(args.timeline) |
| 110 | +plot_speed_graph_rival_iter(outcomes, args) |
| 111 | +plot_speed_graph_baseline_precision(outcomes, args) |
49 | 112 |
|
50 | | -fig, ax = plt.subplots(figsize=(4, 3.5)) |
51 | | -fig.tight_layout(pad=2.0) |
52 | | -plot_speed_graph(outcomes, ax) |
53 | | -plt.savefig(args.path + "/ratio_plot.png", format="png") |
54 | | -plt.savefig(args.path + "/ratio_plot.pdf", format="pdf") |
|
0 commit comments