"""Constructed examples, not recognition-system measurements. Python + matplotlib."""
from pathlib import Path
import csv
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
ROOT=Path(__file__).resolve().parent
cases=[('Exact','the cat sat','the cat sat'),('Replace','the cat sat','the dog sat'),('Omit','the cat sat','the sat'),('Add','the cat sat','the small cat sat'),('Repeat','go','go go go go')]
def distance(a,b):
    last=list(range(len(b)+1))
    for i,x in enumerate(a,1):
        row=[i]
        for j,y in enumerate(b,1):row.append(min(row[-1]+1,last[j]+1,last[j-1]+(x!=y)))
        last=row
    return last[-1]
rows=[]
for label,reference,transcript in cases:
    a=reference.lower().split();b=transcript.lower().split();e=distance(a,b)
    rows.append([label,reference,transcript,len(a),e,100*e/len(a)])
with (ROOT/'examples.csv').open('w',newline='',encoding='utf-8') as f:
    w=csv.writer(f);w.writerow(['case','reference','transcript','reference_words','edit_distance','word_error_percent']);w.writerows(rows)
for name,size in [('errors',(8,4.8)),('errors-mobile',(4.2,5.5))]:
    fig,ax=plt.subplots(figsize=size,layout='constrained');fig.patch.set_facecolor('#edf3ff');ax.set_facecolor('#edf3ff')
    bars=ax.barh([r[0] for r in rows],[r[-1] for r in rows],color='#305f9d');ax.invert_yaxis();ax.set_xlim(0,355)
    for bar,r in zip(bars,rows):ax.text(r[-1]+6,bar.get_y()+bar.get_height()/2,f'{r[-1]:.1f}%',va='center',fontsize=11)
    ax.set_xlabel('Word error rate (%)');ax.set_title('Five constructed transcripts\nNot measured system performance',fontsize=13);ax.grid(axis='x',alpha=.2);ax.set_axisbelow(True)
    fig.savefig(ROOT/(name+'.svg'));fig.savefig(ROOT/(name+'.pdf'));plt.close(fig)
