from pathlib import Path
import csv,statistics,math,json
p=Path(__file__).parent;factor={'mm':1,'cm':10};out=[];mapping=[]
for g in 'abc':
 rows=list(csv.DictReader((p/f'measurement-{g}.csv').open(encoding='utf-8-sig')));vals=[]
 for r in rows:
  assert r['unit']in factor
  v=None if r['value']==''else float(r['value'])*factor[r['unit']];mapping.append([g,r['sample_id'],r['value'],r['unit'],''if v is None else v])
  if v is not None:vals.append(v)
 sd=statistics.stdev(vals);out.append([g,len(vals),statistics.mean(vals),sd,sd/math.sqrt(len(vals))])
for name,h,rows in [('measurement-results.csv',['group','n','mean_mm','sample_sd_mm','se_mm'],out),('source-unit-map.csv',['group','sample_id','raw_value','unit','value_mm'],mapping)]:
 with(p/name).open('w',encoding='utf-8-sig',newline='')as f:w=csv.writer(f);w.writerow(h);w.writerows(rows)
assert out[1][1]==4 and abs(out[1][2]-101.5)<1e-9;print(json.dumps({'errorbar':'sample standard deviation ddof=1','groups':out}))
