diff --git a/tools/mapping-tester/plotconv.py b/tools/mapping-tester/plotconv.py index 8e2cd058..deb336d8 100755 --- a/tools/mapping-tester/plotconv.py +++ b/tools/mapping-tester/plotconv.py @@ -45,18 +45,27 @@ def parseArguments(args): styles = [(c, m) for m in style_markers for c in style_colours] -def plot(df: pl.DataFrame, yname: str, ylabel: str, filename: str): +def plotBack( + df: pl.DataFrame, yname: str, ylabel: str, xname: str, xlabel: str, filename: str +): + if xname not in df.columns: + print(f"Skipping {xname}-{yname} plot as {xname} not found in dataset.") + return + if yname not in df.columns: - print(f"Skipping {yname} as not found in dataset.") + print(f"Skipping {xname}-{yname} plot as {yname} not found in dataset.") return fig, ax = plt.subplots(sharex=True, sharey=True) - ax.set_xlabel("edge length(h) of mesh A") + ax.set_xlabel(xlabel) ax.set_ylabel(ylabel) - ax.set_yscale("log") - if df["mesh A"].dtype.is_numeric(): + + if df[xname].dtype.is_numeric(): ax.set_xscale("log") + if df[yname].dtype.is_numeric(): + ax.set_yscale("log") + series = df.group_by("mapping") for grouped, style in zip(series, styles): name, group = grouped @@ -65,7 +74,7 @@ def plot(df: pl.DataFrame, yname: str, ylabel: str, filename: str): continue color, marker = style ax.plot( - group["mesh A"], + group[xname], group[yname], label=name, marker=marker, @@ -74,9 +83,32 @@ def plot(df: pl.DataFrame, yname: str, ylabel: str, filename: str): plt.gca().invert_xaxis() plt.grid() + plt.legend() plt.savefig(filename + ".pdf") +def plotConv(df: pl.DataFrame, yname: str, ylabel: str, filename: str): + plotBack( + df, + yname=yname, + ylabel=ylabel, + xname="mesh A", + xlabel="edge length(h) of mesh A", + filename=filename, + ) + + +def plotWorkError(df: pl.DataFrame, yname: str, ylabel: str, filename: str): + plotBack( + df, + yname=yname, + ylabel=ylabel, + xname="relative-l2", + xlabel="relative l2-error", + filename=filename, + ) + + def main(argv): args = parseArguments(argv[1:]) @@ -93,30 +125,42 @@ def main(argv): if not df["mesh A"].dtype.is_numeric(): print("Note: 'mesh A' isn't numeric. The x-axis will not use log scaling.") - plot( + plotConv( df, yname="relative-l2", ylabel="relative-l2 error mapping to mesh B", filename=f"{args.prefix}-error", ) - plot( + plotConv( df, yname="peakMemB", ylabel="peak memory of participant B [Kbytes]", filename=f"{args.prefix}-peakMemB", ) - plot( + plotConv( df, yname="computeMappingTime", ylabel="time to compute mapping [us]", filename=f"{args.prefix}-computet", ) - plot( + plotConv( df, yname="mapDataTime", ylabel="time to map Data [us]", filename=f"{args.prefix}-mapt", ) + plotWorkError( + df, + yname="computeMappingTime", + ylabel="time to compute mapping [us]", + filename=f"{args.prefix}-computetAccuracy", + ) + plotWorkError( + df, + yname="mapDataTime", + ylabel="time to map Data [us]", + filename=f"{args.prefix}-maptAccuracy", + ) return 0