def test_subpartitions():
    assert set(Partition.subpartitions(())) == {()}
    assert set(Partition.subpartitions([1])) == {(), (1, )}
    assert set(Partition.subpartitions([1, 1])) == {(), (1, ), (1, 1)}
    assert set(Partition.subpartitions([2, 1])) == {(), (1, ), (1, 1), (2, ),
                                                    (2, 1)}
    assert len(list(Partition.subpartitions([2, 1]))) == 5

    assert set(Partition.subpartitions((), True)) == {()}
    assert set(Partition.subpartitions([1], True)) == {(), (1, )}
    assert set(Partition.subpartitions([1, 1], True)) == {(), (1, )}
    assert set(Partition.subpartitions([2, 1], True)) == {(), (1, ), (2, ),
                                                          (2, 1)}
    assert len(list(Partition.subpartitions([2, 1], True))) == 4
def _test(n_max, v_max):
    for n in range(n_max + 1):
        for v in range(1, v_max + 1):
            for lam1 in Partition.all(n):
                for lam2 in Partition.all(n):
                    print()
                    print()
                    print('* v =', v, ', n =', n, ', mu =', lam1, ', nu =',
                          lam2)
                    print()

                    print('Computing LHS . . .')
                    print()

                    s = Polynomial()
                    for mu in Partition.all(n + max(sum(lam1), sum(lam2))):
                        a = SymmetricPolynomial.stable_grothendieck_doublebar(
                            v, mu, lam1).truncate(n).polynomial('x')
                        b = SymmetricPolynomial.dual_stable_grothendieck(
                            v, mu, lam2).truncate(n).polynomial('y')
                        s += (a * b).truncate(n)
                        print('  ', mu, ':', s, '|', a, '|', b)
                        print()
                    print('LHS =', s)
                    print()
                    print()

                    print('Computing RHS . . .')
                    print()

                    f = Polynomial.one()
                    x = Polynomial.x
                    y = Polynomial.y
                    for i in range(1, v + 1):
                        for j in range(1, v + 1):
                            a = x(i) * y(j)
                            term = Polynomial.one()
                            for e in range(1, n + 1):
                                term += a**e
                            f = (f * term).truncate(n)
                    print('  ', '   :', f)
                    print()

                    t = Polynomial()
                    for kappa in Partition.subpartitions(lam2):
                        a = SymmetricPolynomial.stable_grothendieck_doublebar(
                            v, lam2, kappa).truncate(n)
                        b = SymmetricPolynomial.dual_stable_grothendieck(
                            v, lam1, kappa).truncate(n)
                        t += (f * a.polynomial('x') *
                              b.polynomial('y')).truncate(n)
                        print('  ', kappa, ':', t)
                        print()

                    print('RHS =', t)
                    print()
                    print()
                    print('diff =', s - t)
                    print()
                    assert s == t
def _test_shifted_p(n_max, v_max):
    for n in range(n_max + 1):
        for v in range(1, v_max + 1):
            for lam1 in Partition.all(n, strict=True):
                for lam2 in Partition.all(n, strict=True):
                    print()
                    print()
                    print('* v =', v, ', n =', n, ', mu =', lam1, ', nu =',
                          lam2)
                    print()

                    print('Computing LHS . . .')
                    print()

                    s = Polynomial()
                    for mu in Partition.all(n + max(sum(lam1), sum(lam2)),
                                            strict=True):
                        a = SymmetricPolynomial.stable_grothendieck_p_doublebar(
                            v, mu, lam1).truncate(n).polynomial('x')
                        b = SymmetricPolynomial.dual_stable_grothendieck_q(
                            v, mu, lam2).truncate(n).polynomial('y')
                        s += (a * b).truncate(n)
                        print('  ', mu, ':', s, '|', a, '|', b)
                        print()
                    print('LHS =', s)
                    print()
                    print()

                    print('Computing RHS . . .')
                    print()

                    f = kernel(n, v)
                    print('  ', '   :', f)
                    print()

                    t = Polynomial()
                    for kappa in Partition.subpartitions(lam2, strict=True):
                        a = SymmetricPolynomial.stable_grothendieck_p_doublebar(
                            v, lam2, kappa).truncate(n)
                        b = SymmetricPolynomial.dual_stable_grothendieck_q(
                            v, lam1, kappa).truncate(n)
                        t += (f * a.polynomial('x') *
                              b.polynomial('y')).truncate(n)
                        print('  ', kappa, ':', t)
                        print()

                    print('RHS =', t)
                    print()
                    print()
                    print('diff =', s - t)
                    print()
                    assert s == t
 def fpf_grassmannians(cls, rank):
     assert rank % 2 == 0
     delta = tuple(range(rank - 2, 0, -2))
     for mu in Partition.subpartitions(delta, strict=True):
         yield cls.get_fpf_grassmannian(*mu)
 def inv_grassmannians(cls, rank):
     delta = tuple(range(rank - 1, 0, -2))
     for mu in Partition.subpartitions(delta, strict=True):
         yield cls.get_inv_grassmannian(*mu)
 def grassmannians(cls, rank):
     delta = tuple(range(rank - 1, 0, -1))
     for mu in Partition.subpartitions(delta):
         yield cls.get_grassmannian(*mu)