Esempio n. 1
0
def lvector(nu, mu, p_max):
    ans = LCACHE.get((nu, mu), RowVector())
    if len(ans) >= p_max:
        return ans.subvector(p_max)
    for p in range(len(ans), p_max):
        v = 0
        for lam in lshapes(nu, mu):
            c = sum(lam) - sum(mu)

            if p == 0:
                d = Tableau.KOG_counts(nu, lam, p)
            else:
                d = 2 * Tableau.KOG_counts(nu, lam, p) + Tableau.KOG_counts(
                    nu, lam, p + 1)
            v += d * 2**(len(mu) - c) * (-1)**(columns(lam, mu) + c)

        if p == 0 and columns(nu, mu) == 1:
            v *= -1

        ans.append(v)
    LCACHE[(nu, mu)] = ans
    return ans
Esempio n. 2
0
def test_gq_pieri(n=4, m=10, l=5):
    for mu in Partition.all(m, strict=True):
        if not mu:
            continue
        f = gq(n, mu)
        for p in range(1, l + 1):
            g = gq(n, (p,))

            actual = f * g

            expected = 0
            pieri = gq_pieri(mu, p)
            for (lam, c) in pieri.items():
                expected += gq(n, lam) * c

            # print('gq_%s(x_%s)' % (mu, n), '*', 'gq_%s(x_%s)' % (p, n))
            # print('  ', actual - expected)
            # print()
            assert actual == expected

            q = mu[0] if mu else 0
            nu = (q + p,) + mu
            print()
            print(Partition.printable(nu, mu, shifted=True))
            print()
            print('mu =', mu, 'p =', p, 'q =', q)
            print()

            rho1 = (q + p,) + mu[1:]
            rho2 = (q + p - 1,) + mu[1:]

            for lam in pieri:
                co = pieri[lam].substitute(0, 1)
                co = co - 1 if lam in [rho1, rho2] else co
                kog = Tableau.KOG_counts(nu, lam, q)
                print(lam, co, kog)
                assert co == kog
            print()