Пример #1
0
def test_gp_pieri(n=4, m=10, l=5):
    for mu in Partition.all(m, strict=True):
        if sum(mu) <= 1:
            continue
        f = gp(n, mu)
        for p in range(1, l + 1):
            g = gp(n, (p,))

            actual = f * g

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

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

            pieri = {k: 2 * v for k, v in pieri.items()}
            if p >= 2:
                for (lam, c) in gp_pieri(mu, p - 1).items():
                    pieri[lam] = pieri.get(lam, 0) + c * beta

            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:]

            print(pieri)
            print()

            for lam in pieri:
                co = pieri[lam].substitute(0, 1)
                co = co - 1 if lam in [rho1, rho2] else co
                klg = Tableau.KLG_counts(nu, lam, q)
                print(lam, co, klg)
                assert co == klg
            print()
Пример #2
0
def rvector(nu, mu, p_max):
    ans = RCACHE.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 rshapes(nu, mu):
            c = sum(nu) - sum(lam)
            v += 2**(len(lam) - c) * (-1)**(
                columns(nu, lam) + c) * Tableau.KLG_counts(lam, mu, p)

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

        ans.append(v)
    RCACHE[(nu, mu)] = ans
    return ans