"""Session 27 observed vs section-conditioned expected event counts."""
from pathlib import Path
import json
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

root=Path(__file__).resolve().parent
r=json.loads((root/'double_context_results.json').read_text())
rows=r['measurements'][:6]
labels=['Entire two-rune word','First pair in longer word','Middle of word',
        'Last pair in longer word','Across plain word boundary','Across punctuated boundary']
y=np.arange(6)
fig,ax=plt.subplots(figsize=(10,5.8),layout='constrained')
ax.barh(y-.17,[v['events'] for v in rows],height=.30,color='#166b98',label='Observed')
ax.barh(y+.17,[v['expected'] for v in rows],height=.30,color='#b3b8be',label='Expected under random placement')
for i,v in enumerate(rows):
    ax.text(v['events']+.4,i-.17,str(v['events']),va='center',fontsize=10,color='#166b98')
    ax.text(v['expected']+.4,i+.17,f"{v['expected']:.1f}",va='center',fontsize=10,color='#525b66')
ax.set_yticks(y,labels,fontsize=11);ax.invert_yaxis()
ax.set_xlim(0,39);ax.set_xlabel('Number of immediate-repeat events',fontsize=12)
ax.set_title('No clear concentration at word endings or punctuation',loc='left',fontsize=16,fontweight='bold',pad=15)
ax.spines[['top','right']].set_visible(False)
ax.legend(loc='lower right',frameon=False,fontsize=10)
fig.supxlabel('Expected counts preserve each section’s observed number of repeats and its layout.\nThe six displayed categories partition all 86 events; the full test covers 21 overlapping features.',fontsize=10)
fig.savefig(root/'double_context_comparison.png',dpi=180)
