import sys, os; sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# Axiom 2.4.2 at the uncovered (wall) labels 3k w1^vee, k odd, and mirror 3k w6^vee:
# find mu with phi(mu)=kappa, <beta,mu> >= 0 on Phi(U_Q) and <beta,mu> >= -1 on Phi(U_{P_M}).
from e6core import *
import itertools, math
def search(a, b, sideQ, sidePM):
    half = [(Ainv[i][0]*a + Ainv[i][5]*b)/2 for i in range(n)]
    c1 = (2*a + b)//3; c6 = (a + 2*b)//3
    base = [math.floor(half[j]) for j in black]
    sols = []
    for x in itertools.product(range(-2, 4), repeat=4):
        mu = (c1, base[0]+x[0], base[1]+x[1], base[2]+x[2], base[3]+x[3], c6)
        assert ab(mu) == (a, b)
        if min(ip(bb, mu) for bb in sideQ) >= 0 and min(ip(bb, mu) for bb in sidePM) >= -1:
            sols.append(mu)
    return sols
if __name__ == '__main__':
    UQ = [b for b in Pos if b[0] > 0]; UPM = [b for b in Pos if b[0] == 0 and b[5] > 0]
    assert len(UQ) == 16 and len(UPM) == 8
    zeta = fw((3,0,0,0,0,0)); print('zeta = 3 w1^vee =', zeta, ' <beta,zeta> on U_Q:', sorted({ip(b, zeta) for b in UQ}), ' on M roots:', sorted({ip(b, zeta) for b in Pos if b[0] == 0}))
    mu1 = (2,0,1,1,1,1); print('mu_1 =', mu1, 'ab =', ab(mu1), ' min on U_Q', min(ip(b, mu1) for b in UQ), ' min on U_PM', min(ip(b, mu1) for b in UPM))
    for k in (1, 3, 5, 7):
        s = search(3*k, 0, UQ, UPM)
        print('kappa = %d w1^vee: good mu found = %d, e.g. %s' % (3*k, len(s), s[:1]))
    UQp = [b for b in Pos if b[5] > 0]; UPMp = [b for b in Pos if b[5] == 0 and b[0] > 0]
    for k in (1, 3, 5):
        s = search(0, 3*k, UQp, UPMp)
        print('kappa = %d w6^vee: good mu found = %d, e.g. %s' % (3*k, len(s), s[:1]))
