BubbleProfiler  0.3.0
by Peter Athron, Csaba Balazs, Michael Bardsley, Andrew Fowlie, Dylan Harries & Graham White
plot_tabulate_results.py
Go to the documentation of this file.
1 import argparse
2 import matplotlib.pyplot as plt
3 import numpy as np
4 
6  parser = argparse.ArgumentParser(
7  description="Plot action and timing values")
8  parser.add_argument("data_file", help="data file to read")
9  parser.add_argument("-o,--output-file", dest="output_file",
10  default="", help="name to save plot with")
11  args = parser.parse_args()
12  return (args.data_file, args.output_file)
13 
14 def get_profilers(column_names):
15  potnl_cols = ['dim', 'E', 'alpha']
16  profiler_cols = [c for c in column_names if c not in potnl_cols]
17 
18  if len(profiler_cols) % 3 != 0:
19  raise IOError("invalid data column format")
20 
21  return [p[:p.find("_action")] for p in profiler_cols[::3]]
22 
23 def get_profiler_data(profiler, dim, E, data):
24  dim_data = data["dim"]
25  E_data = data["E"]
26 
27  action_data = data[profiler + "_action"]
28  timing_data = data[profiler + "_timems"]
29  error_data = data[profiler + "_error"]
30 
31  profiler_data = {"action": action_data[(dim_data == dim) & (E_data == E)],
32  "timing": timing_data[(dim_data == dim) & (E_data == E)],
33  "error": error_data[(dim_data == dim) & (E_data == E)]
34  }
35 
36  return profiler_data
37 
38 def read_data(data_file):
39  data = np.genfromtxt(data_file, names=True)
40  cols = [c for c in data.dtype.fields]
41 
42  if "dim" not in cols:
43  raise IOError("missing dimension column")
44  dim = np.unique(data["dim"])[0]
45 
46  if "E" not in cols:
47  raise IOError("missing E parameter column")
48  E = np.unique(data["E"])[0]
49 
50  if "alpha" not in cols:
51  raise IOError("missing alpha parameter column")
52  alpha_data = data["alpha"]
53 
54  profilers = get_profilers(cols)
55  profilers_data = {}
56  for p in profilers:
57  profilers_data[p] = get_profiler_data(p, dim, E, data)
58 
59  return (dim, E, alpha_data, profilers_data)
60 
61 def plot_action(axis, alpha_values, profilers_data):
62  for p in profilers_data:
63  error_data = profilers_data[p]["error"]
64  valid_alpha_values = alpha_values[error_data == 0]
65  valid_action_data = profilers_data[p]["action"][error_data == 0]
66  axis.semilogy(valid_alpha_values, valid_action_data, label=p)
67 
68  axis.set_ylabel("Action")
69  axis.legend(numpoints=1)
70  axis.grid()
71 
72 def plot_timings(axis, alpha_values, profilers_data):
73  for p in profilers_data:
74  error_data = profilers_data[p]["error"]
75  valid_alpha_values = alpha_values[error_data == 0]
76  valid_timings_data = profilers_data[p]["timing"][error_data == 0]
77  axis.semilogy(valid_alpha_values, valid_timings_data, label=p)
78 
79  axis.set_ylabel("Time/ms")
80  axis.legend(numpoints=1)
81  axis.grid()
82 
83 def plot_results(dim, E, alpha_values, profilers_data, output_file):
84  fig, ax = plt.subplots(2, 1, sharex=True)
85 
86  fig.suptitle("d = {:d}, E = {:.2f}".format(int(dim), E))
87 
88  plot_action(ax[0], alpha_values, profilers_data)
89  plot_timings(ax[1], alpha_values, profilers_data)
90 
91  ax[-1].set_xlabel("alpha")
92 
93  if output_file:
94  plt.savefig(output_file)
95  else:
96  plt.show()
97 
98  plt.close(fig)
99 
100 if __name__ == "__main__":
101  data_file, output_file = parse_cmd_line_args()
102  dim, E, alpha_data, profilers_data = read_data(data_file)
103  plot_results(dim, E, alpha_data, profilers_data, output_file)
def plot_results(dim, E, alpha_values, profilers_data, output_file)
def plot_timings(axis, alpha_values, profilers_data)
def get_profilers(column_names)
def plot_action(axis, alpha_values, profilers_data)
def get_profiler_data(profiler, dim, E, data)