aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2019-11-22 22:23:06 +0100
committerFlorian Fischer <florian.fl.fischer@fau.de>2019-11-22 22:23:06 +0100
commit291627d0815a3371d4ffd7a732e94a60459d8399 (patch)
tree5f5bc01fa8446423eb021e6f4e4e0bc4ac99d0a9
parent0ece10940224e5027e9547933e3ac64ae031adce (diff)
downloadallocbench-291627d0815a3371d4ffd7a732e94a60459d8399.tar.gz
allocbench-291627d0815a3371d4ffd7a732e94a60459d8399.zip
make plot_* functions more robust to missing values
-rw-r--r--src/benchmark.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/benchmark.py b/src/benchmark.py
index 3fae5ac..adf84c8 100644
--- a/src/benchmark.py
+++ b/src/benchmark.py
@@ -549,6 +549,16 @@ class Benchmark:
self.results["stats"][alloc][perm] = stats
###### Summary helpers ######
+ def _eval_with_stat(self, evaluation, alloc, perm, stat):
+ try:
+ s = evaluation.format(**self.results["stats"][alloc][perm][stat])
+ except KeyError as e:
+ import traceback
+ print_warn(traceback.format_exc())
+ print_warn(f"For {alloc} in {perm}")
+ return nan
+ return eval(s)
+
def plot_single_arg(self, yval, ylabel="'y-label'", xlabel="'x-label'",
autoticks=True, title="'default title'", filepostfix="",
sumdir="", arg="", scale=None, file_ext=src.globalvars.summary_file_ext):
@@ -570,11 +580,11 @@ class Benchmark:
if scale == allocator:
y_vals = [1] * len(x_vals)
else:
- mean = eval(yval.format(**self.results["stats"][allocator][perm]["mean"]))
- norm_mean = eval(yval.format(**self.results["stats"][scale][perm]["mean"]))
+ mean = self._eval_with_stat(yval, allocator, perm, "mean")
+ norm_mean = self._eval_with_stat(yval, scale, perm, "mean")
y_vals.append(mean / norm_mean)
else:
- y_vals.append(eval(yval.format(**self.results["stats"][allocator][perm]["mean"])))
+ y_vals.append(self._eval_with_stat(yval, allocator, perm, "mean"))
plt.plot(x_vals, y_vals, marker='.', linestyle='-',
label=allocator, color=allocators[allocator]["color"])
@@ -617,14 +627,14 @@ class Benchmark:
if scale == allocator:
y_vals = [1] * len(x_vals)
else:
- mean = eval(yval.format(**self.results["stats"][allocator][perm]["mean"]))
- norm_mean = eval(yval.format(**self.results["stats"][scale][perm]["mean"]))
+ mean = self._eval_with_stat(yval, allocator, perm, "mean")
+ norm_mean = self._eval_with_stat(yval, scale, perm, "mean")
y_vals.append(mean / norm_mean)
else:
- y_vals.append(eval(yval.format(**self.results["stats"][allocator][perm]["mean"])))
+ y_vals.append(self._eval_with_stat(yval, allocator, perm, "mean"))
if yerr:
- y_errs.append(eval(yval.format(**self.results["stats"][allocator][perm]["std"])))
+ y_errs.append(self._eval_with_stat(yval, allocator, perm, "std"))
plt.bar(x_vals, y_vals, width=1, label=allocator, yerr=y_errs,
color=allocators[allocator]["color"])
@@ -660,13 +670,11 @@ class Benchmark:
if scale == allocator:
y_vals = [1] * len(x_vals)
else:
- mean = eval(yval.format(**self.results["stats"][allocator][perm]["mean"]))
- norm_mean = eval(yval.format(**self.results["stats"][scale][perm]["mean"]))
+ mean = self._eval_with_stat(yval, allocator, perm, "mean")
+ norm_mean = self._eval_with_stat(yval, scale, perm, "mean")
y_vals.append(mean / norm_mean)
else:
- eval_dict = self.results["stats"][allocator][perm]["mean"]
- eval_str = yval.format(**eval_dict)
- y_vals.append(eval(eval_str))
+ y_vals.append(self._eval_with_stat(yval, allocator, perm, "mean"))
plt.plot(x_vals, y_vals, marker='.', linestyle='-',
label=allocator, color=allocators[allocator]["color"])