"""G6: check that eta = 49a2+9a3+34a4+41a5 (A7's choice) is regular, i.e. no E6 root vanishes on it,
and re-check |lambda_k|^2 = 3k^2+1 and the 8 norm-1 vectors of the coset of m. Standard library only."""
from fractions import Fraction as Fr
A = [[2,0,-1,0,0,0],[0,2,0,-1,0,0],[-1,0,2,-1,0,0],[0,-1,-1,2,-1,0],[0,0,0,-1,2,-1],[0,0,0,0,-1,2]]
n = 6
def ip(x, y): return sum(x[i]*A[i][j]*y[j] for i in range(n) for j in range(n))
def refl(i, x):
    c = sum(A[i][j]*x[j] for j in range(n)); y = list(x); y[i] -= c; return tuple(y)
simple = [tuple(int(i == j) for j in range(n)) for i in range(n)]
roots = set(simple); fr = list(simple)
while fr:
    new = []
    for r in fr:
        for i in range(n):
            s = refl(i, r)
            if s not in roots: roots.add(s); new.append(s)
    fr = new
eta = (0, 49, 9, 34, 41, 0)
print('roots:', len(roots), ' roots with <alpha,eta>=0:', sum(1 for r in roots if ip(r, eta) == 0))
om1 = (Fr(4,3),1,Fr(5,3),2,Fr(4,3),Fr(2,3)); om6 = (Fr(2,3),1,Fr(4,3),2,Fr(5,3),Fr(4,3))
for k in (1,3,5,7):
    c = Fr(3*k-1,2); lam = tuple(c*a+b for a,b in zip(om1, om6))
    print('k',k,' |lambda_k|^2 =', ip(lam, lam), ' 3k^2+1 =', 3*k*k+1)
