import csv,statistics as st,sys,pathlib d=pathlib.Path(sys.argv[1]) R=list(csv.DictReader(open(d/'fig2-transcribed.csv'))) for r in R: for k in ('strict','lenient','error','ambiguity'): r[k]=float(r[k]) print('cells',len(R)) bad=[(r['model'],r['strategy'],round(r['lenient']+r['error']+r['ambiguity'],1)) for r in R if abs(r['lenient']+r['error']+r['ambiguity']-100)>0.15] print('sum check lenient+error+amb=100 +-0.15: fails',len(bad),bad) print('strict<=lenient all:',all(r['strict']<=r['lenient'] for r in R)) m=lambda k: st.mean(r[k] for r in R) print('H mean lenient over 50 = %.3f (paper 61.2)'%m('lenient')) print(' mean strict = %.3f (paper 48.0); mean amb = %.3f (paper <2)'%(m('strict'),m('ambiguity'))) b=max(R,key=lambda r:r['lenient']); print('C2 max lenient',b['model'],b['strategy'],b['lenient'],'strict',b['strict']) bs=max(R,key=lambda r:r['strict']); print(' max strict',bs['model'],bs['strategy'],bs['strict'],'lenient',bs['lenient']) e=[(r['model'],r['strategy'],r['error']) for r in R if r['error']>50]; print('C3 cells error>50:',len(e),sorted(set(x[0] for x in e))) print('C4 uniform baseline: strict 20.0, lenient 40.0; min lenient cell',min(r['lenient'] for r in R),'cells lenient<=40:',sum(r['lenient']<=40 for r in R)) T={r['model']:r for r in csv.DictReader(open(d/'table2-transcribed.csv'))} F={(r['model'],r['strategy']):r for r in R} for mdl,t in T.items(): for S,strat in (('S1','no_guide'),('S5','detailed_respiratory')): r=F[(mdl,strat)]; base=(2*r['strict']+(r['lenient']-r['strict']))/100 lo,hi=base-2*r['error']/100, base-r['error']/100 sc=float(t['score_'+S]); amb=float(t['amb_'+S]) ok=lo-0.0015<=sc<=hi+0.0015 print(f"T2 {mdl:32s} {S} score {sc:+.3f} bounds [{lo:+.3f},{hi:+.3f}] {'ok' if ok else 'OUT'} amb table {amb} fig {r['ambiguity']} {'ok' if abs(amb-r['ambiguity'])<0.05 else 'DIFF'}")