def skew(w): n = w.rank f = tuple(i for i in range(1, n + 1) if w(i) > i) r = len(f) lam = tuple(w(f[-1]) - r - f[i] + i + 1 for i in range(r)) mu = tuple(w(f[-1]) - r - w(f[i]) + i + 1 for i in range(r)) print(Partition.printable(lam)) print() print(Partition.printable(mu)) return lam, mu
def test_GQ_to_GP_expansion(): # noqa for mu in Partition.all(25, strict=True): print('mu =', mu) print() print(Partition.printable(mu, shifted=True)) print() n = len(mu) q = GQ(n, mu) expansion = SymmetricPolynomial.GP_expansion(q) normalized = Vector({ tuple(nu[i] - mu[i] for i in range(len(mu))): c * sgn(mu, nu) * BETA**(sum(nu) - sum(mu)) / 2**(len(mu) - sum(nu) + sum(mu)) for nu, c in expansion.items() }) unsigned = all(c > 0 for c in normalized.values()) print(' mu =', mu, 'n =', n) print(' expansion =', expansion) print(' normalized expansion =', normalized) assert all(len(nu) == 0 or max(nu) <= 1 for nu in normalized) assert all(len(nu) == len(mu) for nu in expansion) assert all(Partition.contains(nu, mu) for nu in expansion) assert all(c % 2**(len(mu) - sum(nu) + sum(mu)) == 0 for nu, c in expansion.items()) assert unsigned expected = { tuple(mu[i] + a[i] for i in range(len(a))) for a in zero_one_tuples(len(mu)) if all( mu[i - 1] + a[i - 1] > mu[i] + a[i] for i in range(1, len(a))) } print(' expected =', expected) assert set(expansion) == expected print() print()
def test_refined_gq_to_gp_expansion(k=12): # noqa for mu in Partition.all(k, strict=True): print('mu =', mu) print() print(Partition.printable(mu, shifted=True)) print() n = len(mu) q = SymmetricPolynomial._slow_refined_dual_stable_grothendieck_q(n, mu) expected = {} for a in zero_one_tuples(len(mu)): if not all(mu[i - 1] - a[i - 1] > mu[i] - a[i] for i in range(1, len(a))): continue if not all(mu[i] - a[i] > 0 for i in range(len(a))): continue nu = Partition.trim(tuple(mu[i] - a[i] for i in range(len(a)))) coeff = 2**(len(nu) - sum(a)) * sgn(nu, mu) * BETA**sum(a) assert coeff != 0 expected[nu] = coeff print(' expected =', expected) expected = sum([ coeff * SymmetricPolynomial._slow_refined_dual_stable_grothendieck_p( n, nu) for (nu, coeff) in expected.items() ]) print(' =', expected) assert q == expected print() print()
def test_gq_to_gp_expansion(): # noqa for mu in Partition.all(15, strict=True): print('mu =', mu) print() print(Partition.printable(mu, shifted=True)) print() n = len(mu) q = gq(n, mu) expansion = SymmetricPolynomial.gp_expansion(q) print(' mu =', mu, 'n =', n) print(' expansion =', expansion) assert all(len(nu) == len(mu) for nu in expansion) assert all(Partition.contains(mu, nu) for nu in expansion) # assert all(c % 2**(len(mu) - sum(nu) + sum(mu)) == 0 for nu, c in expansion.items()) expected = {} for a in zero_one_tuples(len(mu)): if not all(mu[i - 1] - a[i - 1] > mu[i] - a[i] for i in range(1, len(a))): continue if not all(mu[i] - a[i] > 0 for i in range(len(a))): continue nu = Partition.trim(tuple(mu[i] - a[i] for i in range(len(a)))) coeff = 2**(len(nu) - sum(a)) * sgn(nu, mu) * BETA**sum(a) assert coeff != 0 expected[nu] = coeff print(' expected =', expected) assert expansion == Vector(expected) print() print()
def _expansion(n, function, expand, shifted=True, unsigned=True): # noqa for mu in Partition.all(n, strict=shifted): n = len(mu) p = function(n, mu) ansion = expand(p) if unsigned: expansion = { nu: coeff * (-1)**abs(sum(mu) - sum(nu)) for nu, coeff in ansion.items() } else: expansion = ansion print('mu =', mu) print() print(Partition.printable(mu, shifted=shifted)) print() print(' mu =', mu, 'n =', n) print(' expansion =', ansion) if unsigned: print(' unsigned expansion =', expansion) print() assert all(v > 0 for v in expansion.values())