diff --git a/synthesize.sage b/synthesize.sage index 3426e9c3697f204e8d36a94c5805bf6484624fa3..6c01c68b213351ec0352941aa2c7a4f9a5612b4b 100644 --- a/synthesize.sage +++ b/synthesize.sage @@ -59,7 +59,7 @@ def time_format_2(t): def steps_format(N): - if N == 0: + if N is None or N == 0: return "" elif N < 10_000: return str(math.ceil(N)) @@ -68,7 +68,7 @@ def steps_format(N): def steps_format_2(N): - if N == 0: + if N is None or N == 0: return "" elif N < 100: return "$<$ 0.01" @@ -195,6 +195,12 @@ data_stats = { "htype": lambda data: "N" if data.split("_")[0] == "newton" else ("T" if data.split("_")[0] == "linear" else "?") } +def median(L): + if L: + return numpy.median(L) + else: + return None + result_stats = { "failures": lambda res: str(res["failures"]) if res["failures"] != 0 else "", "tottime": lambda res: time_format_2(res["overheadtime"]) if "overheadtime" in res else time_format_2(res["time"]), @@ -205,9 +211,9 @@ result_stats = { "timeperstep": lambda res: '{0:.2e}'.format(1000*float(res["time"])/float(sum([int(p) for p in res["steplist"] if p is not None]))), "meansteps": lambda res: steps_format(round(numpy.mean([int(p) for p in res["steplist"] if p is not None]), 1)), "stdsteps": lambda res: steps_format(round(numpy.std([int(p) for p in res["steplist"] if p is not None]), 1)), - "medsteps": lambda res: steps_format(numpy.median([int(p) for p in res["steplist"] if p is not None])), - "minsteps": lambda res: steps_format(min([int(p) for p in res["steplist"] if p is not None])), - "maxsteps": lambda res: steps_format(max([int(p) for p in res["steplist"] if p is not None])), + "medsteps": lambda res: steps_format(median([int(p) for p in res["steplist"] if p is not None])), + "minsteps": lambda res: steps_format(min([int(p) for p in res["steplist"] if p is not None], default = None)), + "maxsteps": lambda res: steps_format(max([int(p) for p in res["steplist"] if p is not None], default = None)), "q1steps": lambda res: steps_format(round(numpy.quantile([int(p) for p in res["steplist"] if p is not None], 0.25), 1)), "q3steps": lambda res: steps_format(round(numpy.quantile([int(p) for p in res["steplist"] if p is not None], 0.75), 1)), "maxprec": lambda res: str(max([int(p) for p in res["maxpreclist"]])),