"""Session 26 count map. Python + matplotlib + NumPy."""
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/'transition_prediction_results.json').read_text())
t=np.array(r['total_matrix'])
fig,ax=plt.subplots(figsize=(10,9),layout='constrained')
im=ax.imshow(t,cmap='cividis',vmin=0,vmax=int(t.max()),interpolation='nearest')
ax.set_xticks(range(29),r['labels'],fontsize=8,rotation=90)
ax.set_yticks(range(29),r['labels'],fontsize=8)
ax.set_xlabel('Next rune (transliteration label)',fontsize=12)
ax.set_ylabel('Previous rune (transliteration label)',fontsize=12)
ax.set_title('Which rune follows which?',loc='left',fontsize=18,fontweight='bold',pad=16)
cb=fig.colorbar(im,ax=ax,shrink=.85,pad=.025)
cb.set_label('Observed adjacent-pair count',fontsize=11)
fig.supxlabel('12,939 adjacent pairs in eight substantial unsolved sections; section boundaries excluded.\nThe dark diagonal contains the 86 identical-neighbor pairs. Labels are not decoded plaintext.',fontsize=10)
fig.savefig(root/'transition_count_map.png',dpi=180)
