fengxr93's picture
Archive CGTime training and evaluation pipelines
13a1073
Raw
History Blame Contribute Delete
1.33 kB
import json,sys,ast,collections
def P(v):
if isinstance(v,dict): return v
try: return ast.literal_eval(v)
except: return {}
rows=[json.loads(l) for l in open(sys.argv[1])]
G=collections.defaultdict(list); FO=collections.defaultdict(list); R25=collections.defaultdict(list)
def gauss(sc):
k=(sc.get("kernels") or {}).get("gaussian")
if isinstance(k,dict): return k.get("metric_score", k.get("mean_metric_score"))
return sc.get("metric_score")
for r in rows:
sc=P(r["score"]); m=P(r["meta"]); sp=m.get("split","?")
g=gauss(sc)
if g is not None: G[sp].append(g); G["overall"].append(g)
fo=sc.get("format_ok", sc.get("format_reward"))
if fo is not None:
ok=(fo>=0.6) if isinstance(fo,(int,float)) else bool(fo)
FO[sp].append(ok); FO["overall"].append(ok)
tol=sc.get("tolerance") or {}
r25=tol.get("rel25", tol.get("rel25_rate"))
if r25 is not None: R25[sp].append(bool(r25)); R25["overall"].append(bool(r25))
print(" split n gaussian fmt_ok rel25")
for sp in ["overall","univar","bivar","multivar"]:
b=G.get(sp,[])
if not b: continue
f=FO.get(sp,[]); rr=R25.get(sp,[])
fa=sum(f)/len(f) if f else float('nan'); ra=sum(rr)/len(rr) if rr else float('nan')
print(f" {sp:9s} {len(b):4d} {sum(b)/len(b):.4f} {fa:.3f} {ra:.4f}")