import csv,json
from pathlib import Path
rows=list(csv.DictReader(Path(__file__).with_name('content-change-toy.csv').open()))
phases={p:[r for r in rows if r['phase']==p] for p in ['before','after']}
valid={p:[r for r in rs if r['status']=='ok'] for p,rs in phases.items()}
assert [len(phases[p]) for p in phases]==[12,12]
assert [len(valid[p]) for p in valid]==[10,11]
counts={p:{k:sum(int(r[k]) for r in rs) for k in ['owned_page_cited','recommended']} for p,rs in valid.items()}
assert counts=={'before':{'owned_page_cited':2,'recommended':3},'after':{'owned_page_cited':5,'recommended':4}}
keys={p:{(r['question_id'],r['repeat_id']) for r in rs} for p,rs in valid.items()}
common=keys['before']&keys['after']
matched={p:[r for r in rs if (r['question_id'],r['repeat_id']) in common] for p,rs in valid.items()}
assert len(common)==10
matched_cites={p:sum(int(r['owned_page_cited']) for r in rs) for p,rs in matched.items()}
assert matched_cites=={'before':2,'after':4}
print(json.dumps({'fictional':True,'attempts':[12,12],'valid':[10,11],'counts':counts,'common_slots':10,'common_slot_citations':matched_cites,'raw_citation_rates':[2/10,5/11],'common_citation_rates':[2/10,4/10]},indent=2))
