def test_slow_dual_stable_grothendieck_pq():
    n = 3
    mu = (1, )
    g = SymmetricPolynomial._slow_dual_stable_grothendieck_p(n, mu)
    h = SymmetricPolynomial._slow_dual_stable_grothendieck_q(n, mu)
    print(g)
    print(h)
    print()
    assert g == SymmetricMonomial(n, (1, ))
    assert h == 2 * SymmetricMonomial(n, (1, ))

    n = 3
    mu = (2, )
    for t in Tableau.semistandard_marked_rpp(3, mu, diagonal_nonprimes=False):
        print(t)
    g = SymmetricPolynomial._slow_dual_stable_grothendieck_p(n, mu)
    print(g)
    assert g == \
        SymmetricPolynomial._slow_dual_stable_grothendieck(n, (1, 1)) + \
        SymmetricPolynomial._slow_dual_stable_grothendieck(n, (2,))

    n = 3
    mu = (2, 1)
    for t in Tableau.semistandard_marked_rpp(n, mu):
        print(t)
    g = SymmetricPolynomial._slow_dual_stable_grothendieck_p(n, mu)
    h = SymmetricPolynomial._slow_dual_stable_grothendieck_q(n, mu)
    print(g)
    print(h)
    print()
    assert g == -BETA * SymmetricMonomial(
        n,
        (1, 1)) + -BETA * SymmetricMonomial(n, (2, )) + 2 * SymmetricMonomial(
            n, (1, 1, 1)) + SymmetricMonomial(n, (2, 1))

    n = 5
    mu = (3, 2)
    g = SymmetricPolynomial._slow_dual_stable_grothendieck_p(n, mu)
    h = SymmetricPolynomial._slow_dual_stable_grothendieck_q(n, mu)

    n = 6
    mu = (3, 2, 1)
    assert SymmetricPolynomial._slow_dual_stable_grothendieck_p(n, mu) == \
        SymmetricPolynomial._slow_dual_stable_grothendieck(n, mu)
def test_strict_symmetric_functions():
    nn = 5
    for mu in Partition.all(nn, strict=True):
        for nu in Partition.all(nn, strict=True):
            for n in range(nn):
                print(n, mu, nu)
                print()

                # Schur-P and GP

                f = SymmetricPolynomial.schur_p(n, mu, nu)
                g = SymmetricPolynomial.stable_grothendieck_p(n, mu, nu)
                h = SymmetricPolynomial.dual_stable_grothendieck_p(n, mu, nu)

                fs = SymmetricPolynomial._slow_schur_p(n, mu, nu)
                gs = SymmetricPolynomial._slow_stable_grothendieck_p(n, mu, nu)
                hs = SymmetricPolynomial._slow_dual_stable_grothendieck_p(
                    n, mu, nu)

                if f != fs:
                    print(f)
                    print(fs)
                    print()

                if g != gs:
                    print(g)
                    print(gs)
                    print()

                if h != hs:
                    print(h)
                    print(hs)
                    print()
                    print()
                    print()

                assert f == fs
                assert g == gs
                assert h == hs

                if mu == nu:
                    assert f == 1
                    assert g == 1
                    assert h == 1
                    assert fs == 1
                    assert gs == 1
                    assert hs == 1

                if not Partition.contains(mu, nu):
                    assert f == 0
                    assert g == 0
                    assert h == 0
                    assert fs == 0
                    assert gs == 0
                    assert hs == 0

                # Schur-Q and GQ

                f = SymmetricPolynomial.schur_q(n, mu, nu)
                g = SymmetricPolynomial.stable_grothendieck_q(n, mu, nu)
                h = SymmetricPolynomial.dual_stable_grothendieck_q(n, mu, nu)

                fs = SymmetricPolynomial._slow_schur_q(n, mu, nu)
                gs = SymmetricPolynomial._slow_stable_grothendieck_q(n, mu, nu)
                hs = SymmetricPolynomial._slow_dual_stable_grothendieck_q(
                    n, mu, nu)

                if f != fs:
                    print(f)
                    print(fs)
                    print()

                if g != gs:
                    print(g)
                    print(gs)
                    print()

                if h != hs:
                    print(h)
                    print(hs)
                    print()
                    print()
                    print()

                assert f == fs
                assert g == gs
                assert h == hs

                if mu == nu:
                    assert f == 1
                    assert g == 1
                    assert h == 1
                    assert fs == 1
                    assert gs == 1
                    assert hs == 1

                if not Partition.contains(mu, nu):
                    assert f == 0
                    assert g == 0
                    assert h == 0
                    assert fs == 0
                    assert gs == 0
                    assert hs == 0