#!/usr/bin/env python3
"""FlashMemory synthetic DRAM charge-sharing reading practice, not silicon/timing spec."""
import csv
import json
from pathlib import Path

path=Path(__file__).with_name("dram-charge-sharing-synthetic.csv")
with path.open(encoding="utf-8",newline="") as handle:
    rows=list(csv.DictReader(handle))
assert len(rows)==8
guardband_mv=30.0  # Arbitrary classroom comparison only; not a real amplifier offset or threshold
details=[]
for row in rows:
    cc=float(row["cell_cap_ff"])
    cb=float(row["bitline_cap_ff"])
    vc=float(row["initial_cell_v"])
    vp=float(row["precharge_v"])
    shared=(cc*vc+cb*vp)/(cc+cb)
    delta_mv=(shared-vp)*1000
    assert abs(shared-float(row["ideal_shared_bitline_v"]))<0.000001
    assert abs(delta_mv-float(row["ideal_delta_mv"]))<0.0006
    assert (delta_mv>0)==(int(row["stored_level"])==1)
    details.append({
        "case_id":row["case_id"],"cell_ff":cc,"bitline_ff":cb,
        "ideal_delta_mv":round(delta_mv,3),
        "exceeds_fictional_30mv_guardband":abs(delta_mv)>=guardband_mv
    })
result={
    "dataset":"SYNTHETIC_TRAINING_ONLY",
    "cases":len(details),
    "fictional_guardband_mv":guardband_mv,
    "passes":sum(int(x["exceeds_fictional_30mv_guardband"]) for x in details),
    "details":details,
    "caution":"Charge sharing only: ignores sense-amplifier offset, noise, transient behavior, cell leakage, bitline parasitics and timing. A classroom guardband does not establish actual device margin."
}
assert result["passes"]==4
print(json.dumps(result,ensure_ascii=False,indent=2))
