codexpast-exam-of-the-mathematics-course-of-the-university-of-cambridge2014iiipaper-2-input-weight-diagrams.py
past-exam-of-the-mathematics-course-of-the-university-of-cambridge/2014/iii/paper-2-input-weight-diagrams.py
"""Original weight sketches. Python 3.14; NumPy 2.3.5, Matplotlib 3.10.7.
Run with cwd set to the desired media output directory; output is a cwd basename.
"""
import os
os.environ.setdefault('MPLCONFIGDIR',os.path.join(os.getcwd(),'.paper-2-mplconfig'))
import math
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
G21=[(-3,2,1),(-2,0,1),(-2,3,1),(-1,-2,1),(-1,1,2),(0,-1,2),(0,2,1),(1,-3,1),(1,0,2),(2,-2,1),(2,1,1),(3,-1,1)]
G10=[(1,0,1),(-1,1,1),(0,-1,1)]
G20=[(2,0,1),(0,1,1),(1,-1,1),(-2,2,1),(-1,0,1),(0,-2,1)]
def xy(a,b):return (a+b/2,math.sqrt(3)*b/2)
def draw(ax,data,title,highest):
lo=min(xy(a,b)[0] for a,b,m in data)-.65;hi=max(xy(a,b)[0] for a,b,m in data)+.65
bot=min(xy(a,b)[1] for a,b,m in data)-.65;top=max(xy(a,b)[1] for a,b,m in data)+.65
offset=(data[0][0]-data[0][1])%3
for a in range(-8,9):
for b in range(-8,9):
if (a-b)%3!=offset:continue
x,y=xy(a,b)
for da,db in [(2,-1),(-1,2),(1,1)]:
x2,y2=xy(a+da,b+db);ax.plot([x,x2],[y,y2],color='#dfe5ec',lw=.65,zorder=0)
for a,b,m in data:
x,y=xy(a,b);color='#d27a00' if (a,b)==highest else '#185686'
ax.scatter([x],[y],s=430 if len(data)>6 else 370,color=color,zorder=2)
ax.text(x,y,str(m),ha='center',va='center',color='white',fontweight='bold',fontsize=12,zorder=3)
ax.annotate(f'({a}, {b})',(x,y),xytext=(0,18),textcoords='offset points',ha='center',fontsize=10)
ax.set_xlim(lo,hi);ax.set_ylim(bot,top);ax.set_aspect('equal');ax.axis('off');ax.set_title(title,fontsize=16,pad=20)
fig=plt.figure(figsize=(12.5,6.2),dpi=100,facecolor='white')
a1=fig.add_axes([.025,.14,.465,.68]);a2=fig.add_axes([.52,.14,.21,.68]);a3=fig.add_axes([.755,.14,.22,.68])
draw(a1,G21,r'$\Gamma_{2,1}$: dimension 15',(2,1));draw(a2,G10,r'$\Gamma_{1,0}$: dimension 3',(1,0));draw(a3,G20,r'$S^2\Gamma_{1,0}$: dimension 6',(2,0))
fig.suptitle('A₂ input weight diagrams',fontsize=21,y=.98)
fig.text(.5,.045,'Dot labels give multiplicities; coordinate labels are Dynkin labels (a, b). Orange marks each highest weight.',ha='center',fontsize=12)
fig.savefig('paper-2-input-weight-diagrams.png',dpi=100,facecolor='white',transparent=False)