コード例 #1
0
def test_next_f_d1():
    # transition (D1)
    t = Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (1, 4): 5,
        (2, 2): 6,
        (2, 3): 7,
        (2, 4): 8,
        (2, 6): 4
    })
    state = FState(t, (2, 6))

    state, box = state.next()
    i, j = box

    t = Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (1, 4): 5,
        (2, 2): 4,
        (2, 3): 7,
        (2, 4): 8,
        (4, 3): 6
    })
    assert state == FState(t, (4, 3))
    assert i == 2
    assert j == 2
コード例 #2
0
def test_next_f_c3():
    # transition (C3)
    t = Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 5,
        (1, 4): 6,
        (2, 2): 4,
        (2, 3): 6,
        (2, 4): 7,
        (3, 3): 8,
        (5, 3): 5
    })
    state = FState(t, (5, 3))

    state, box = state.next()
    i, j = box

    t = Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 5,
        (1, 4): 6,
        (2, 2): 4,
        (2, 3): 6,
        (2, 4): 7,
        (3, 3): 8,
        (5, 4): 6
    })
    assert state == FState(t, (5, 4))
    assert i == 2
    assert j == 3
コード例 #3
0
def test_next_f_c1():
    # transition (C1)
    t = Tableau({
        (1, 1): 5,
        (1, 2): 5,
        (1, 3): 5,
        (1, 4): 4,
        (2, 2): 4,
        (4, 3): 6
    })
    state = FState(t, (4, 3))

    state, box = state.next()
    i, j = box

    t = Tableau({
        (1, 1): 5,
        (1, 2): 5,
        (1, 3): 5,
        (1, 4): 4,
        (2, 2): 4,
        (2, 3): 6
    })
    assert state == FState(t)
    assert i == 2
    assert j == 3
コード例 #4
0
def test_next_f_r1():
    # transition (R1)
    state = FState().add(1)

    t = Tableau().add(1, 2, 1)
    assert state == FState(t, (1, 2))

    state, box = state.next()
    i, j = box

    t = Tableau().add(1, 1, 1)
    assert state == FState(t)
    assert i == 1
    assert j == 1
コード例 #5
0
def test_reverse_insertion_complete():
    n = 8
    count = 200
    for w in Permutation.symplectic_hecke_words(n):
        count -= 1
        if count == 0:
            break
        print(w)
        p, q = FState.insertion_tableaux(*w)
        print()
        print(p)
        print()
        print(q)
        v = FState.inverse_insertion(p, q)
        print()
        print(v)
        print()
        assert v == w
コード例 #6
0
def test_next_f_r3():
    # transition (R3)
    #
    #   1 2 3  1
    # 5 5 3 4
    #
    t = Tableau({
        (1, 1): 5,
        (1, 2): 5,
        (1, 3): 5,
        (1, 4): 4,
        (2, 2): 1,
        (2, 3): 2,
        (2, 4): 3,
        (2, 6): 1
    })
    state = FState(t, (2, 6))

    state, box = state.next()
    i, j = box

    #     2
    #
    #   1 2 3
    # 5 5 5 4
    #
    t = Tableau({
        (1, 1): 5,
        (1, 2): 5,
        (1, 3): 5,
        (1, 4): 4,
        (2, 2): 1,
        (2, 3): 2,
        (2, 4): 3,
        (4, 3): 2
    })
    assert state == FState(t, (4, 3))
    assert i == 2
    assert j == 3
コード例 #7
0
def test_reverse_insertion():
    w = (2, 1, 4, 1, 4, 3, 4, 1, 2)
    p, q = FState.insertion_tableaux(*w)
    r = (2, 3, {-9})

    assert q.values() == {1, -2, 3, -4, 5, 6, 7, -8, -9}

    assert p == Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (2, 2): 4,
        (2, 3): 5
    })

    s, box = FState(p).previous(r)
    assert box == (2, 3)
    assert s.tableau == Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (2, 2): 4,
        (4, 3): 5
    })
    assert s.outer == (4, 3)

    s, box = s.previous()
    assert box == (2, 2)
    assert s.tableau == Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (2, 2): 4,
        (2, 5): 3
    })
    assert s.outer == (2, 5)

    s, box = s.previous()
    assert box == (1, 2)
    assert s.tableau == Tableau({
        (1, 1): 2,
        (1, 2): 3,
        (1, 3): 4,
        (2, 2): 4,
        (1, 5): 2
    })
    assert s.outer == (1, 5)
    assert s.is_initial()

    assert FState.inverse_insertion(p, q) == w

    #
    #     22
    #   6  8 22
    # 2 4  6 20
    #
    w = (2, 6, 8, 22, 4, 6, 20, 6)
    p, q = FState.insertion_tableaux(*w)
    assert p == Tableau({
        (3, 3): 22,
        (2, 2): 6,
        (2, 3): 8,
        (2, 4): 22,
        (1, 1): 2,
        (1, 2): 4,
        (1, 3): 6,
        (1, 4): 20
    })
    assert FState.inverse_insertion(p, q) == w
コード例 #8
0
def test_fstate_insertion():
    a = Tableau()
    b = Tableau({(1, 1): 4})
    c = Tableau({(1, 1): 2, (1, 2): 4})
    d = Tableau({(1, 1): 2, (1, 2): 3, (2, 2): 4})
    e = Tableau({(1, 1): 2, (1, 2): 3, (2, 2): 4, (1, 3): 4})
    f = Tableau({(1, 1): 2, (1, 2): 3, (2, 2): 4, (1, 3): 4, (2, 3): 5})

    state = FState()
    assert state.is_terminal() and state.tableau == a

    state, path = state.insert(4)
    assert state.is_terminal() and state.tableau == b
    assert path == [(1, 1)]

    state, path = state.insert(2)
    assert state.is_terminal() and state.tableau == c
    assert path == [(1, 1), (1, 2)]

    state, path = state.insert(3)
    assert state.is_terminal() and state.tableau == d
    assert path == [(1, 2), (2, 2)]

    state, path = state.insert(1)
    assert state.is_terminal() and state.tableau == e
    assert path == [(1, 1), (2, 2), (1, 3)]

    state, path = state.insert(2)
    assert state.is_terminal() and state.tableau == f
    assert path == [(1, 2), (2, 2), (2, 3)]

    p, q = FState.insertion_tableaux(4, 2, 3, 1, 2)
    assert p == f