"""Clean-cloud parts against the mesh route (elephant left out), per config: total parts, mesh, sum |parts - mesh|,
objects within +-25 %, geometric-mean error, normal median; argv: config substrings."""
import sys
import numpy as np, pandas as pd
import os
D = pd.read_csv("/home/joao/code/data/meshes/fcp_2810_gwn/report/" + os.environ.get("BENCH", "bench2.csv"))
D = D[(D.cloud == "clean") & ~D.object.isin(["elephant", "loaf_pan"])]
sel = sys.argv[1:]
rows = []
for (n, c), g in D.groupby(["points", "config"]):
    if c not in ("package", "gwn") and not any(s in c for s in sel):
        continue
    if len(g) < 9:
        continue
    pr = g.parts / g.ref_parts
    rows.append(dict(n=n, config=c, parts=int(g.parts.sum()), mesh=int(g.ref_parts.sum()), absdev=int((g.parts - g.ref_parts).abs().sum()),
                     within=int(((pr >= .75) & (pr <= 1.25)).sum()), err=1e3 * np.exp(np.log(g["mean"]).mean()), n_med=g.n_med.median()))
pd.set_option("display.width", 200)
print(pd.DataFrame(rows).sort_values(["n", "absdev"]).round(2).to_string(index=False))
