Example #1
0
def test_q(n=4):
    lam = tuple([n - i for i in range(n)])
    for mu in Partition.subpartitions(lam, strict=True):
        for nu in Partition.subpartitions(mu, strict=True):
            f = SymmetricPolynomial._slow_transposed_dual_stable_grothendieck_q(n, mu, nu)
            g = SymmetricPolynomial.dual_stable_grothendieck_q(n, mu, nu)
            ef, eg = f.omega_schur_expansion(f), g.schur_expansion(g)
            print('n =', n, 'mu =', mu)
            print(ef)
            print(eg)
            print()
            assert ef == eg
Example #2
0
def test_other_dual(n=5, k=5):
    partitions = list(Partition.all(k, strict=True))
    for lam in partitions:
        for kappa in partitions:
            if Partition.contains(lam, kappa):
                lhs = 2**sum(lam) * gp(n, lam, kappa)
                rhs = 0
                expected = {
                    tuple(lam[i] - a[i] for i in range(len(a)))
                    for a in zero_one_tuples(len(lam))
                    if all(lam[i] - a[i] > 0 for i in range(len(a))) and all(
                        lam[i - 1] - a[i - 1] > lam[i] - a[i]
                        for i in range(1, len(a)))
                }
                for mu in expected:
                    for nu in Partition.subpartitions(mu, strict=True):
                        if len(nu) == len(kappa) and Partition.contains(
                                nu, kappa):
                            rhs += 2**(len(nu) - len(mu) + overlap(lam, mu) +
                                       sum(kappa) + sum(mu) - sum(nu)) * cols(
                                           nu, kappa) * (-beta)**(
                                               sum(lam) - sum(mu) + sum(nu) -
                                               sum(kappa)) * gq(n, mu, nu)
                print('n =', n, 'lambda =', lam, 'kappa =', kappa)
                if lhs != rhs:
                    print()
                    print(lhs)
                    print(rhs)
                    print()
                assert lhs == rhs
Example #3
0
def test(n=5, k=5):
    partitions = list(Partition.all(k, strict=True))
    for mu in partitions:
        for kappa in partitions:
            rhs = 0
            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)))
            }
            for lam in expected:
                rhs += 2**(len(mu) - sum(lam) + sum(mu)) * cols(lam, mu) * (
                    -beta)**(sum(lam) - sum(mu)) * GP_doublebar(n, lam, kappa)
            lhs = 0
            expected = {
                tuple(kappa[i] - a[i] for i in range(len(a)))
                for a in zero_one_tuples(len(kappa))
                if all(kappa[i - 1] - a[i - 1] > kappa[i] - a[i]
                       for i in range(1, len(a))) and all(
                           0 < kappa[i] - a[i] <= (mu[i] if i < len(mu) else 0)
                           for i in range(len(a)))
            }
            for nu in expected:
                lhs += 2**(len(kappa) - sum(kappa) + sum(nu)) * cols(
                    kappa, nu) * (-beta)**(sum(kappa) -
                                           sum(nu)) * GQ_doublebar(n, mu, nu)
            if lhs != 0 or rhs != 0:
                print('n =', n, 'mu =', mu, 'kappa =', kappa)
                # print()
                # print(lhs)
                # print()
            assert lhs == rhs

            if Partition.contains(mu, kappa):
                lhs = 2**(sum(kappa) + len(kappa)) * GQ_doublebar(n, mu, kappa)
                rhs = 0
                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)))
                }
                for nu in Partition.subpartitions(kappa, strict=True):
                    if len(nu) == len(kappa):
                        for lam in expected:
                            rhs += 2**(len(mu) + overlap(kappa, nu) + sum(nu) -
                                       sum(lam) +
                                       sum(mu)) * cols(lam, mu) * (-beta)**(
                                           sum(lam) - sum(mu) + sum(kappa) -
                                           sum(nu)) * GP_doublebar(n, lam, nu)
                print('n =', n, 'mu =', mu, 'kappa =', kappa)
                print()
                print(lhs)
                print(rhs)
                print()
                assert lhs == rhs
Example #4
0
def test_dual_inclusion_excluson(k=5):
    partitions = list(Partition.all(k, strict=True))
    for lam in partitions:
        for nu in partitions:
            if not Partition.contains(lam, nu):
                continue
            ans, queue = Vector(), {nu: 1}
            while queue:
                kappa = next(iter(queue))
                coeff = queue[kappa]
                ans += Vector({kappa: coeff})
                del queue[kappa]
                additions = {
                    tuple(kappa[i] + a[i] for i in range(len(a)))
                    for a in zero_one_tuples(len(kappa))
                    if not all(a[i] == 0 for i in range(len(a))) and all(
                        kappa[i - 1] + a[i - 1] > kappa[i] + a[i]
                        for i in range(1, len(a))) and all(
                            lam[i] >= kappa[i] + a[i] for i in range(len(a)))
                }
                for gam in additions:
                    queue[gam] = queue.get(gam, 0) - cols(gam, kappa) * coeff
            print('lambda =', lam, 'nu =', nu)
            print()
            for gam in ans:
                print(Partition.printable(gam, nu, True))
                print()
                print('coefficient =', ans[gam])
                print()
            print()
            print(ans)
            print()
            print()
            assert all(ans[g] == 2**overlap(g, nu) for g in ans)
            assert set(ans) == {
                g
                for g in Partition.subpartitions(lam, strict=True)
                if len(g) == len(nu) and Partition.contains(g, nu)
            }
Example #5
0
def test_inclusion_excluson(k=5):
    partitions = list(Partition.all(k, strict=True))
    for kappa in partitions:
        ans, queue = Vector(), {kappa: 1}
        while queue:
            pop = next(iter(queue))
            coeff = queue[pop]
            ans += Vector({pop: coeff})
            del queue[pop]
            additions = {
                tuple(pop[i] - a[i] for i in range(len(a)))
                for a in zero_one_tuples(len(kappa))
                if not all(a[i] == 0 for i in range(len(a))) and all(
                    pop[i - 1] - a[i - 1] > pop[i] - a[i]
                    for i in range(1, len(a))) and all(0 < pop[i] - a[i]
                                                       for i in range(len(a)))
            }
            for nu in additions:
                queue[nu] = queue.get(nu, 0) - cols(pop, nu) * coeff
        print('kappa =', kappa)
        print()
        for nu in ans:
            print(Partition.printable(kappa, nu, True))
            print()
            print('coefficient =', ans[nu])
            print()
        print()
        print(ans)
        print()
        print()
        assert all(ans[nu] == 2**overlap(kappa, nu) for nu in ans)
        assert set(ans) == {
            nu
            for nu in Partition.subpartitions(kappa, strict=True)
            if len(nu) == len(kappa)
        }
def test_shifted_schur_relations(n=4):
    def tag(args):
        if len(args) == 0:
            return 'id'
        if args == ZERO:
            return '0'
        s = ''
        for a in args:
            s += '%s_{%i} ' % a
        return s.strip()

    delta = tuple(range(n + 1, 0, -1))
    partitions = list(Partition.subpartitions(delta, strict=True))
    small = {k: v for k, v in small_q_schur_expressions(n)}

    def equals(k1, k2):
        op1, op2 = small[k1], small[k2]
        return all(op1(mu) == op2(mu) for mu in partitions)

    expected = [{(('u', i), ('u', i + 1), ('u', i)), ZERO}
                for i in range(1, n)] + [{
                    (('d', i), ('d', i + 1), ('d', i)), ZERO
                } for i in range(1, n)] + [{(
                    ('u', i), ('u', i)), ZERO} for i in range(0, n + 1)] + [{
                        (('u', i + 1), ('u', i), ('u', i + 1)), ZERO
                    } for i in range(0, n)] + [{
                        (('d', i), ('d', i)), ZERO
                    } for i in range(0, n + 1)] + [{
                        (('d', i + 1), ('d', i), ('d', i + 1)), ZERO
                    } for i in range(0, n)] + [{
                        (('u', i + 1), ('d', i)), ZERO
                    } for i in range(0, n)] + [{
                        (('d', i), ('u', i + 1)), ZERO
                    } for i in range(0, n)] + [{(
                        ('d', i + 1),
                        ('u', i)), ZERO} for i in range(0, n)] + [{
                            (('u', i), ('d', i + 1)), ZERO
                        } for i in range(0, n)] + [
                            {(('u', i), ('u', j)), (('u', j), ('u', i))}
                            for i in range(0, n + 1)
                            for j in range(0, n + 1) if i + 1 < j
                        ] + [{(('d', i), ('d', j)), (('d', j), ('d', i))}
                             for i in range(0, n + 1)
                             for j in range(0, n + 1) if i + 1 < j
                             ] + [{(('u', i), ('d', j)), (('d', j), ('u', i))}
                                  for i in range(0, n + 1)
                                  for j in range(0, n + 1) if abs(i - j) > 1]
    span = get_span(get_dict(expected), small)
    print('\n.\n')

    def check_expected_identities(k1, k2, do_check=True):
        if {k1, k2} in expected:
            if do_check:
                try:
                    assert equals(k1, k2)
                except:
                    print()
                    print('** failure: ', tag(k1), '!=', tag(k2))
                    # for mu in partitions:
                    #     op1 = small[k1]
                    #     op2 = small[k2]
                    #     if op1(mu) != op2(mu):
                    #         print('  ', mu, ':', op1(mu), '!=', op2(mu))
                    # print()
                    raise Exception
            return True
        return False

    relations = set()
    for k1 in sorted(small):
        for k2 in sorted(small):
            if k1 < k2:
                if check_expected_identities(k1, k2):
                    relations.add((k1, k2))
                    # print()
                    # print('* expected: ', tag(k1), '=', tag(k2))
                    continue
                if span[k1] & span[k2]:
                    continue

#                if all(small[k1](mu).is_zero() for mu in partitions) and k2 != ZERO:
#                     continue

                if equals(k1, k2):
                    relations.add((k1, k2))
                    print()
                    print('unexpected:', tag(k1), '=', tag(k2))
                    raise Exception
    print()
    return relations
def test_schur_relations(n=4):
    def tag(args):
        if len(args) == 0:
            return 'id'
        s = ''
        for a in args:
            if a > 0:
                s += 'u_%i ' % a
            else:
                s += 'd_%i ' % -a
        return s.strip()

    square = (n + 1) * (n + 1, )
    partitions = list(Partition.subpartitions(square))
    small = {k: v for k, v in small_schur_expressions(n)}

    def equals(k1, k2):
        op1, op2 = small[k1], small[k2]
        return all(op1(mu) == op2(mu) for mu in partitions)

    expected = [
        {(), (-1, 1)},
    ] + [{(i, j), (j, i)} for i in range(1, n + 1)
         for j in range(1, n + 1) if i + 1 < j] + [{
             (-i, -j), (-j, -i)
         } for i in range(1, n + 1) for j in range(1, n + 1) if i + 1 < j] + [
             {(-i, j), (j, -i)} for i in range(1, n + 1)
             for j in range(1, n + 1) if i != j
         ] + [{(-i - 1, i + 1), (i, -i)} for i in range(1, n)
              ] + [{(i + 1, i, i), (i, i + 1, i)} for i in range(1, n)] + [{
                  (i + 1, i, i + 1), (i + 1, i + 1, i)
              } for i in range(1, n)] + [{(-i, -i - 1, -i), (-i, -i, -i - 1)}
                                         for i in range(1, n)
                                         ] + [{(-i, -i - 1, -i - 1),
                                               (-i - 1, -i, -i - 1)}
                                              for i in range(1, n)]
    dictionary = get_dict(expected)
    span = get_span(dictionary, small)

    def check_expected_identities(k1, k2, do_check=True):
        if {k1, k2} in expected:
            if do_check:
                try:
                    assert equals(k1, k2)
                except:
                    print()
                    print('** failure: ', tag(k1), '!=', tag(k2))
                    raise Exception
            return True
        return False

    relations = set()
    for k1 in small:
        for k2 in small:
            if k1 < k2:
                if check_expected_identities(k1, k2):
                    relations.add((k1, k2))
                    print()
                    print('* expected: ', tag(k1), '=', tag(k2))
                    continue
                if span[k1] & span[k2]:
                    continue
                if equals(k1, k2):
                    relations.add((k1, k2))
                    print()
                    print('unexpected:', tag(k1), '=', tag(k2))
                    raise Exception
    print()
    return relations