| 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}") |
|
|