Ejemplo n.º 1
0
    def test_slide_multiple(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [W, B, W, B],
            [W],
            [B],
            [B],
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        g1 = g.move(tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, 1, 1, 1)))
        assert g1[0, 0] == []
        assert g1[1, 0] == [B, W]
        assert g1[2, 0] == [W, B]
        assert g1[3, 0] == [B, B]
        assert g1[4, 0] == [W, W]
Ejemplo n.º 2
0
    def test_initial_special(self):
        g = tak.Position.from_config(tak.Config(size=5))
        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(0, 0, tak.MoveType.PLACE_CAPSTONE))

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(0, 0, tak.MoveType.PLACE_STANDING))
Ejemplo n.º 3
0
    def test_basic_slide(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        g1 = g.move(tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, )))
        assert g1[0, 0] == []
        assert g1[1, 0] == [W]
Ejemplo n.º 4
0
    def test_place_flat(self):
        g = tak.Position.from_config(tak.Config(size=5))
        g1 = g.move(tak.Move(
            x=0,
            y=0,
        ))
        assert g.ply == 0
        assert g[0, 0] == []
        assert g1[0, 0] == [tak.Piece(tak.Color.BLACK, tak.Kind.FLAT)]
        assert g1.ply == 1
        assert g1.stones[1].caps == 1
        assert g1.stones[1].stones == 20

        g2 = g1.move(tak.Move(
            x=4,
            y=4,
        ))

        assert g2[0, 0] == [tak.Piece(tak.Color.BLACK, tak.Kind.FLAT)]
        assert g2[4, 4] == [tak.Piece(tak.Color.WHITE, tak.Kind.FLAT)]
        assert g2.stones[0].stones == 20
        assert g2.stones[1].stones == 20

        g3 = g2.move(tak.Move(
            x=2,
            y=2,
        ))

        assert g3[2, 2] == [tak.Piece(tak.Color.WHITE, tak.Kind.FLAT)]
Ejemplo n.º 5
0
 def test_initial_slide(self):
     g = tak.Position.from_config(tak.Config(size=5))
     with pytest.raises(tak.IllegalMove):
         g.move(tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, )))
     g = g.move(tak.Move(0, 0))
     with pytest.raises(tak.IllegalMove):
         g.move(tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, )))
Ejemplo n.º 6
0
def test_new():
    g = tak.Position.from_config(tak.Config(size=5))
    assert g.size == 5
    assert g.ply == 0
    assert g.stones[0].stones == 21
    assert g.stones[1].stones == 21
    assert g.stones[0].caps == 1
    assert g.stones[1].caps == 1

    assert g.to_move() == tak.Color.WHITE
Ejemplo n.º 7
0
    def test_illegal_slide(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [W, B, W, B, W, W, W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(1, 1, tak.MoveType.SLIDE_RIGHT, (1, )))

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(0, 0, tak.MoveType.SLIDE_UP, (6, )))

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(0, 0, tak.MoveType.SLIDE_UP, ()))

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(0, 0, tak.MoveType.SLIDE_LEFT, (1, )))

        with pytest.raises(tak.IllegalMove):
            g.move(tak.Move(4, 4, tak.MoveType.SLIDE_LEFT, (1, )))
Ejemplo n.º 8
0
def transform_position(sym, pos):
    ix = np.stack([
        np.repeat(np.arange(pos.size), pos.size),
        np.tile(np.arange(pos.size), pos.size),
        (pos.size - 1) * np.ones(pos.size * pos.size)
    ],
                  axis=-1)
    ix = np.transpose(np.matmul(sym, np.transpose(ix))).astype(np.int)
    ix = ix.reshape((pos.size, pos.size, 3))

    sqs = list(pos.board)
    for i in range(pos.size):
        for j in range(pos.size):
            oi, oj, _ = ix[i, j]
            sqs[oi + oj * pos.size] = pos[i, j]

    return tak.Position.from_squares(
        tak.Config(size=pos.size),
        sqs,
        pos.ply,
    )
Ejemplo n.º 9
0
    def test_place_special(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        g1 = g.move(tak.Move(2, 2, tak.MoveType.PLACE_CAPSTONE))
        assert g1[2, 2] == [WC]
        assert g1.stones[tak.Color.WHITE.value].caps == 0

        g2 = g1.move(tak.Move(1, 2, tak.MoveType.PLACE_STANDING))
        assert g2[1, 2] == [BS]

        with pytest.raises(tak.IllegalMove):
            g2.move(tak.Move(2, 3, tak.MoveType.PLACE_CAPSTONE))
        with pytest.raises(tak.IllegalMove):
            g2.move(tak.Move(2, 2, tak.MoveType.PLACE_FLAT))
Ejemplo n.º 10
0
    def test_smash(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [WC, W],
            [BS, W],
            [],
            [],
            [],
            [],
            [W],
            [],
            [],
            [],
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        for m in [
                tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (2, )),
                tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, 1)),
                tak.Move(1, 1, tak.MoveType.SLIDE_DOWN, (1, ))
        ]:
            with pytest.raises(tak.IllegalMove) as exc:
                g.move(m)
            assert 'standing stone' in str(exc.value)

        g1 = g.move(tak.Move(0, 0, tak.MoveType.SLIDE_RIGHT, (1, )))
        assert g1[1, 0] == [WC, B, W]
Ejemplo n.º 11
0
def parse_tps(tps):
    bits = tps.split(' ')
    if len(bits) != 3:
        raise IllegalTPS("need three components")
    board, who, move = bits

    if not who in '12':
        raise IllegalTPS("Current player must be either 1 or 2")
    try:
        ply = 2 * (int(move) - 1) + int(who) - 1
    except ValueError:
        raise IllegalTPS("Bad move number: " + move)

    squares = []
    rows = board.split("/")
    for row in reversed(rows):
        rsq = parse_row(row)
        if len(rsq) != len(rows):
            raise IllegalTPS("inconsistent size")
        squares += rsq

    return tak.Position.from_squares(tak.Config(size=len(rows)), squares, ply)
Ejemplo n.º 12
0
    def test_cap_slide(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [WC, W],
            [BS, W],
            [],
            [],
            [],
            [BC],
            [W],
            [],
            [],
            [],
            [W],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
        ], 2)

        for m in [
                tak.Move(0, 0, tak.MoveType.SLIDE_UP, (2, )),
                tak.Move(0, 0, tak.MoveType.SLIDE_UP, (1, 1)),
                tak.Move(0, 0, tak.MoveType.SLIDE_UP, (1, )),
                tak.Move(1, 1, tak.MoveType.SLIDE_LEFT, (1, ))
        ]:
            with pytest.raises(tak.IllegalMove) as exc:
                g.move(m)
            assert 'capstone' in str(exc.value)
Ejemplo n.º 13
0
def main(args):
    model = tak.model.load_model(FLAGS.model, eval_symmetries=FLAGS.symmetries)
    pos = tak.Position.from_config(tak.Config(size=FLAGS.size))

    with open(FLAGS.out, 'w') as ptn:
        ptn.write('[Size "{0}"]\n'.format(pos.size))
        while True:
            if pos.ply % 2 == 0:
                ptn.write("\n{0}. ".format(1 + int(pos.ply / 2)))
            if pos.ply == 0:
                m = tak.ptn.parse_move('a1')
                pos = pos.move(m)
            elif pos.ply == 1:
                m = tak.ptn.parse_move('a{}'.format(FLAGS.size))
                pos = pos.move(m)
            else:
                m, pos = model.get_move(pos)
            ptn.write(tak.ptn.format_move(m))
            ptn.write(" ")
            who, why = pos.winner()
            if why is not None:
                break
        ptn.write("\n")
Ejemplo n.º 14
0
    def test_from_stones(self):
        g = tak.Position.from_squares(tak.Config(size=5), [
            [W],
            [W],
            [B],
            [W],
            [W],
            [],
            [],
            [BC],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [B],
            [B],
            [B],
            [WS],
            [],
        ], 5)
        assert g[0, 0] == [W]
        assert g[2, 1] == [BC]

        assert g.stones[tak.Color.WHITE.value].stones == 16
        assert g.stones[tak.Color.WHITE.value].caps == 1
        assert g.stones[tak.Color.BLACK.value].stones == 17
        assert g.stones[tak.Color.BLACK.value].caps == 0
        assert g.ply == 5
Ejemplo n.º 15
0
 def initial_position(self):
     if 'TPS' in self.tags:
         return tps.parse_tps(self.tags['TPS'])
     return tak.Position.from_config(
         tak.Config(size=int(self.tags['Size'])))
Ejemplo n.º 16
0
 def test_game_over_road(self):
     cases = [
         ([
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
         ], (None, None)),
         ([
             [W],
             [W],
             [W],
             [W],
             [W],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
         ], (tak.Color.WHITE, tak.WinReason.ROAD)),
         ([
             [W] * 21,
             [],
             [],
             [],
             [],
             [],
             [WC],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [B],
             [B],
         ], (tak.Color.BLACK, tak.WinReason.FLATS)),
         ([
             [W] * 21,
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [B],
             [B],
         ], (None, None)),
         ([
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
         ], (tak.Color.WHITE, tak.WinReason.FLATS)),
         ([
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [WS],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
             [B],
             [W],
         ], (None, tak.WinReason.FLATS)),
     ]
     for i, tc in enumerate(cases):
         sq, want = tc
         g = tak.Position.from_squares(tak.Config(size=5), sq, 4)
         has = g.winner()
         assert has == want, "{0}: got winner={1} expect {2}".format(
             i, has, want)
Ejemplo n.º 17
0
 def test_has_road(self):
     cases = [
         ([
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
         ], None),
         ([
             [W],
             [W],
             [W],
             [W],
             [W],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
             [],
         ], tak.Color.WHITE),
         ([
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
         ], tak.Color.BLACK),
         ([
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
         ], tak.Color.BLACK),
         ([
             [],
             [B],
             [W],
             [],
             [],
             [],
             [B],
             [W],
             [],
             [],
             [],
             [B],
             [W],
             [],
             [],
             [],
             [B],
             [W],
             [],
             [],
             [],
             [B],
             [W],
             [],
             [],
         ], tak.Color.BLACK),
         ([
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [BS],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
         ], None),
         ([
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
             [],
             [BC],
             [],
             [],
             [],
             [],
             [B],
             [],
             [],
             [],
         ], tak.Color.BLACK),
     ]
     for i, tc in enumerate(cases):
         sq, color = tc
         g = tak.Position.from_squares(tak.Config(size=5), sq, 4)
         has = g.has_road()
         assert has == color, "{0}: got road={1} expect {2}".format(
             i, has, color)