コード例 #1
0
def test_all_row_placement_rules_partial(tiling1, t_row_placed):
    rules = list(RowAndColumnPlacementFactory(place_col=False, partial=True)(tiling1))
    assert len(rules) == 6
    for rule in rules:
        assert isinstance(rule, Rule)
        assert len(rule.children) > 1
        assert not rule.ignore_parent
        assert rule.workable
        assert isinstance(rule.constructor, DisjointUnion)
        assert rule.possibly_empty
    assert sorted(len(rule.children) for rule in rules) == [2, 2, 3, 3, 3, 3]

    # Nothing to do if only not placing on own row
    print(t_row_placed)
    rules = list(
        RowAndColumnPlacementFactory(place_col=False, partial=True)(t_row_placed)
    )
    assert len(rules) == 2
    for rule in rules:
        print(rule)
        assert isinstance(rule, Rule)
        assert len(rule.children) > 1
        assert not rule.ignore_parent
        assert rule.workable
        assert isinstance(rule.constructor, DisjointUnion)
        assert rule.possibly_empty
    assert sorted(len(rule.children) for rule in rules) == [2, 2]
コード例 #2
0
def test_row_col_placement():
    t = Tiling.from_string("132")
    cr_placement = RowAndColumnPlacementFactory(
        place_col=True, place_row=True, partial=False
    )
    partial_cr_placement = RowAndColumnPlacementFactory(
        place_col=True, place_row=True, partial=True
    )
    assert len(list(cr_placement(t))) == 4
    assert len(list(partial_cr_placement(t))) == 4
コード例 #3
0
def test_all_row_placement_rules(tiling1):
    rules = list(RowAndColumnPlacementFactory(place_col=False)(tiling1))
    assert len(rules) == 6
    for rule in rules:
        assert isinstance(rule, Rule)
        assert len(rule.children) > 1
        assert not rule.ignore_parent
        assert rule.workable
        assert isinstance(rule.constructor, DisjointUnion)
        assert rule.possibly_empty
    assert sorted(len(rule.children) for rule in rules) == [2, 2, 3, 3, 3, 3]
コード例 #4
0
def row_col_placement() -> dict:
    """Apply row column placement strategy to given tiling."""
    tiling, verification_tactics, direction, row, idx = _get_row_col_placement_input(
    )
    for rule in RowAndColumnPlacementFactory(row, not row,
                                             dirs=(direction, ))(tiling):
        assert isinstance(rule.strategy, RequirementPlacementStrategy)
        if row and rule.strategy.gps[0].pos[0][1] == idx:
            if len(rule.non_empty_children()) == 1:
                rule_json = rule_as_json(rule.to_equivalence_rule(),
                                         verification_tactics)
                rule_json["original_rule"] = original_rule_as_json(rule)
                return rule_json
            return rule_as_json(rule, verification_tactics)
        if not row and rule.strategy.gps[0].pos[0][0] == idx:
            if len(rule.non_empty_children()) == 1:
                rule_json = rule_as_json(rule.to_equivalence_rule(),
                                         verification_tactics)
                rule_json["original_rule"] = original_rule_as_json(rule)
                return rule_json
            return rule_as_json(rule, verification_tactics)
    raise BadRequest()
コード例 #5
0
def test_not_equivalent_to_itself(
    t_fully_placed, t_row_placed, t_row_placed2, t_col_placed, t_col_placed2
):
    """
    We don't want the rule to say the tiling is equivalent to itself.
    The opposite can create situation where the tiling is mark as unworkable
    because of the ignore parent flag.
    """
    placement_fully_placed = list(PatternPlacementFactory()(t_fully_placed))
    placement_fully_placed_partial_col = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_WEST, DIR_EAST))(t_fully_placed)
    )
    placement_fully_placed_partial_row = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_NORTH, DIR_SOUTH))(
            t_fully_placed
        )
    )
    placement_row_placed = list(PatternPlacementFactory()(t_row_placed))
    placement_row_placed_partial_col = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_EAST, DIR_WEST))(t_row_placed)
    )
    placement_row_placed_partial_row = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_NORTH, DIR_SOUTH))(t_row_placed)
    )
    placement_row_placed2 = list(PatternPlacementFactory()(t_row_placed2))
    placement_col_placed = list(PatternPlacementFactory()(t_col_placed))
    placement_col_placed_partial_col = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_EAST, DIR_WEST))(t_col_placed)
    )
    placement_col_placed_partial_row = list(
        PatternPlacementFactory(partial=True, dirs=(DIR_NORTH, DIR_SOUTH))(t_col_placed)
    )
    placement_col_placed2 = list(PatternPlacementFactory()(t_col_placed2))
    print("fully placed")
    print(t_fully_placed)
    print("row placed")
    print(t_row_placed)
    print("row placed 2")
    print(t_row_placed2)
    print("col placed")
    print(t_col_placed)
    print("cold placed 2")
    print(t_col_placed2)
    # Requirement placements
    assert len(placement_fully_placed) == 0
    assert len(placement_fully_placed_partial_row) == 0
    assert len(placement_fully_placed_partial_col) == 0
    assert len(placement_row_placed) == 4
    assert len(placement_row_placed_partial_col) == 2
    assert len(placement_row_placed_partial_row) == 0
    assert len(placement_row_placed2) == 16
    assert len(placement_col_placed) == 4
    assert len(placement_col_placed_partial_col) == 0
    assert len(placement_col_placed_partial_row) == 2
    assert len(placement_col_placed2) == 16
    # Check that the class are correct
    assert all(r.children[0] != t_fully_placed for r in placement_fully_placed)
    assert all(r.children[0] != t_row_placed for r in placement_row_placed)
    assert all(r.children[0] != t_row_placed2 for r in placement_row_placed2)
    assert all(r.children[0] != t_col_placed for r in placement_col_placed)
    assert all(r.children[0] != t_col_placed2 for r in placement_col_placed2)

    placement_fully_placed = list(
        PatternPlacementFactory(point_only=True)(t_fully_placed)
    )
    placement_row_placed = list(PatternPlacementFactory(point_only=True)(t_row_placed))
    placement_row_placed2 = list(
        PatternPlacementFactory(point_only=True)(t_row_placed2)
    )
    placement_col_placed = list(PatternPlacementFactory(point_only=True)(t_col_placed))
    placement_col_placed2 = list(
        PatternPlacementFactory(point_only=True)(t_col_placed2)
    )
    # Point placements
    assert len(placement_fully_placed) == 0
    assert len(placement_row_placed) == 4
    assert len(placement_row_placed2) == 8
    assert len(placement_col_placed) == 4
    assert len(placement_col_placed2) == 8
    # Check that the class are correct
    assert all(r.children[0] != t_fully_placed for r in placement_fully_placed)
    assert all(r.children[0] != t_row_placed for r in placement_row_placed)
    assert all(r.children[0] != t_row_placed2 for r in placement_row_placed2)
    assert all(r.children[0] != t_col_placed for r in placement_col_placed)
    assert all(r.children[0] != t_col_placed2 for r in placement_col_placed2)

    placement_fully_placed = list(
        RowAndColumnPlacementFactory(place_col=False)(t_fully_placed)
    )
    placement_fully_placed_partial_col = list(
        RowAndColumnPlacementFactory(place_col=False, partial=True)(t_fully_placed)
    )
    placement_fully_placed_partial_row = list(
        RowAndColumnPlacementFactory(place_col=False, partial=True)(t_fully_placed)
    )
    placement_row_placed = list(
        RowAndColumnPlacementFactory(place_col=False)(t_row_placed)
    )
    placement_row_placed_partial_col = list(
        RowAndColumnPlacementFactory(place_col=False, partial=True)(t_row_placed)
    )
    placement_row_placed_partial_row = list(
        RowAndColumnPlacementFactory(place_col=False, partial=True)(t_col_placed)
    )
    placement_row_placed2 = list(
        RowAndColumnPlacementFactory(place_col=False)(t_row_placed2)
    )
    placement_col_placed = list(
        RowAndColumnPlacementFactory(place_col=False)(t_col_placed)
    )
    placement_col_placed2 = list(
        RowAndColumnPlacementFactory(place_col=False)(t_col_placed2)
    )
    # Row placement
    assert len(placement_fully_placed) == 2
    assert len(placement_fully_placed_partial_col) == 2
    assert len(placement_fully_placed_partial_row) == 2
    assert len(placement_row_placed) == 4
    assert len(placement_row_placed_partial_col) == 2
    assert len(placement_row_placed_partial_row) == 2
    assert len(placement_row_placed2) == 4
    assert len(placement_col_placed) == 2
    assert len(placement_col_placed2) == 2

    placement_fully_placed = list(
        RowAndColumnPlacementFactory(place_row=False)(t_fully_placed)
    )
    placement_fully_placed_partial_col = list(
        RowAndColumnPlacementFactory(place_row=False, partial=True)(t_fully_placed)
    )
    placement_fully_placed_partial_row = list(
        RowAndColumnPlacementFactory(place_row=False, partial=True)(t_fully_placed)
    )
    placement_row_placed = list(
        RowAndColumnPlacementFactory(place_row=False)(t_row_placed)
    )
    placement_row_placed2 = list(
        RowAndColumnPlacementFactory(place_row=False)(t_row_placed2)
    )
    placement_col_placed = list(
        RowAndColumnPlacementFactory(place_row=False)(t_col_placed)
    )
    placement_col_placed2 = list(
        RowAndColumnPlacementFactory(place_row=False)(t_col_placed2)
    )
    # Col placement
    assert len(placement_fully_placed) == 2
    assert len(placement_fully_placed_partial_col) == 2
    assert len(placement_fully_placed_partial_row) == 2
    assert len(placement_row_placed) == 2
    assert len(placement_row_placed2) == 2
    assert len(placement_col_placed) == 4
    assert len(placement_col_placed2) == 4