# Spheres Spin_2n/Spin_{2n-1}: r(m_{e1+e2})(u) = sum over roots +-e_i+-e_j of q^{<rho_L, nu>} u^{nu_1}; rho_L = (0, n-2, ..., 1, 0).
from collections import Counter
from itertools import combinations, product
for n in range(2, 8):
    rhoL = [0] + [n - j for j in range(2, n + 1)]
    # check rho_L = half sum of positive roots of D_{n-1} on coordinates 2..n
    posL = []
    for i, j in combinations(range(1, n), 2):
        for s in (1, -1):
            v = [0] * n; v[i] = 1; v[j] = s; posL.append(v)
    half = [sum(v[k] for v in posL) / 2 for k in range(n)]
    assert half == rhoL, (n, half, rhoL)
    coef = {}
    for i, j in combinations(range(n), 2):
        for si, sj in product((1, -1), repeat=2):
            nu = [0] * n; nu[i] = si; nu[j] = sj
            e = sum(a * b for a, b in zip(rhoL, nu))
            coef.setdefault(nu[0], Counter())[e] += 1
    cn = dict(sorted(coef[1].items())); cm = dict(sorted(coef[-1].items()))
    pred = Counter({0: 2}); [pred.update({k: 1, -k: 1}) for k in range(1, n - 1)]
    print('n=%d  coeff of u: %s  coeff of u^-1 equal: %s  matches c_n: %s  only u^{+-1,0}: %s' % (
        n, cn, cm == cn, Counter(cn) == pred, set(coef) <= {-1, 0, 1}))
