def test_children(self):
        t1 = Tiling(
            obstructions=[
                GriddedPerm.single_cell((0, 1, 3, 2), ((0, 0))),
                GriddedPerm.single_cell((0, 2, 1), ((1, 1))),
            ]
        )
        t2 = Tiling(
            obstructions=[
                GriddedPerm.single_cell((0, 1, 3, 2), ((0, 0))),
                GriddedPerm.single_cell((0, 2, 1), ((1, 1))),
                GriddedPerm((0, 2, 1), ((0, 0), (1, 1), (1, 1))),
            ]
        )
        t3 = Tiling(
            obstructions=[
                GriddedPerm.single_cell((0, 2, 1), ((0, 0))),
                GriddedPerm.single_cell((0, 2, 1), ((1, 1))),
            ]
        )
        t4 = Tiling(
            obstructions=[
                GriddedPerm.single_cell((0, 1, 3, 2), ((0, 0))),
                GriddedPerm.single_cell((0, 2, 1), ((0, 1))),
                GriddedPerm((0, 2, 1), ((0, 0), (0, 1), (0, 1))),
            ]
        )
        strat = LocallyFactorableVerificationStrategy(basis=[Perm((0, 1, 3, 2))])
        assert strat(t1).children == (Tiling.from_string("0132"),)
        assert strat(t2).children == (Tiling.from_string("0132"),)
        assert strat(t3).children == tuple()
        with pytest.raises(StrategyDoesNotApply):
            strat(t4).children
        assert strat.decomposition_function(t4) is None
        assert strat(t1.add_single_cell_requirement(Perm((0,)), (0, 0))).children == (
            Tiling.from_string("0132"),
        )

        strat_with_sym = LocallyFactorableVerificationStrategy(
            basis=[Perm((0, 1, 3, 2))], symmetry=True
        )
        assert strat_with_sym(t1).children == (Tiling.from_string("0132"),)
        assert strat_with_sym(t1.rotate90()).children == (Tiling.from_string("0132"),)
Exemple #2
0
def test_requirement_extensions(
    typical_obstructions_with_local, typical_requirements_with_local
):
    t = Tiling.from_string("123_132").add_single_cell_requirement(Perm((0, 1)), (0, 0))
    strats = set(
        [tuple(s(t).children) for s in RequirementExtensionFactory(maxreqlen=3)(t)]
    )
    actual = set(
        [
            (
                t.add_single_cell_obstruction(Perm((2, 0, 1)), (0, 0)),
                t.add_single_cell_requirement(Perm((2, 0, 1)), (0, 0)),
            ),
            (
                t.add_single_cell_obstruction(Perm((1, 0, 2)), (0, 0)),
                t.add_single_cell_requirement(Perm((1, 0, 2)), (0, 0)),
            ),
            (
                t.add_single_cell_obstruction(Perm((1, 2, 0)), (0, 0)),
                t.add_single_cell_requirement(Perm((1, 2, 0)), (0, 0)),
            ),
        ]
    )
    assert actual == strats

    tiling = Tiling(
        obstructions=typical_obstructions_with_local,
        requirements=typical_requirements_with_local,
    )
    strats = set(
        [
            frozenset(s(tiling).children)
            for s in RequirementExtensionFactory(maxreqlen=3)(tiling)
        ]
    )
    actual = set(
        [
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 1)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((0, 1)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 0)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 1, 2)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((0, 1, 2)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 2, 1)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((0, 2, 1)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 0, 2)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 2, 0)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((2, 0, 1)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (0, 0)),
                    tiling.add_single_cell_requirement(Perm((2, 1, 0)), (0, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0)), (3, 1)),
                    tiling.add_single_cell_requirement(Perm((1, 0)), (3, 1)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (3, 1)),
                    tiling.add_single_cell_requirement(Perm((2, 1, 0)), (3, 1)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (2, 0)),
                    tiling.add_single_cell_requirement(Perm((2, 1, 0)), (2, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 2, 1)), (2, 2)),
                    tiling.add_single_cell_requirement(Perm((0, 2, 1)), (2, 2)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (2, 2)),
                    tiling.add_single_cell_requirement(Perm((1, 0, 2)), (2, 2)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (2, 2)),
                    tiling.add_single_cell_requirement(Perm((1, 2, 0)), (2, 2)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (2, 2)),
                    tiling.add_single_cell_requirement(Perm((2, 0, 1)), (2, 2)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (2, 2)),
                    tiling.add_single_cell_requirement(Perm((2, 1, 0)), (2, 2)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 1)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((0, 1)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 0)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((0, 1, 2)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((0, 1, 2)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 0, 2)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((1, 2, 0)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((2, 0, 1)), (3, 0)),
                ]
            ),
            frozenset(
                [
                    tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (3, 0)),
                    tiling.add_single_cell_requirement(Perm((2, 1, 0)), (3, 0)),
                ]
            ),
        ]
    )
    assert strats == actual
def test_requirement_extensions(typical_obstructions_with_local,
                                typical_requirements_with_local):
    tiling = Tiling(obstructions=typical_obstructions_with_local,
                    requirements=typical_requirements_with_local)
    strats = set([
        frozenset(s.comb_classes)
        for s in all_requirement_extensions(tiling, maxreqlen=3)
    ])

    actual = set([
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 1)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((0, 1)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((1, 0)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 1, 2)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((0, 1, 2)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 2, 1)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((0, 2, 1)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((1, 0, 2)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((1, 2, 0)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((2, 0, 1)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (0, 0)),
            tiling.add_single_cell_requirement(Perm((2, 1, 0)), (0, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0)), (3, 1)),
            tiling.add_single_cell_requirement(Perm((1, 0)), (3, 1))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (3, 1)),
            tiling.add_single_cell_requirement(Perm((2, 1, 0)), (3, 1))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (2, 0)),
            tiling.add_single_cell_requirement(Perm((2, 1, 0)), (2, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 2, 1)), (2, 2)),
            tiling.add_single_cell_requirement(Perm((0, 2, 1)), (2, 2))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (2, 2)),
            tiling.add_single_cell_requirement(Perm((1, 0, 2)), (2, 2))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (2, 2)),
            tiling.add_single_cell_requirement(Perm((1, 2, 0)), (2, 2))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (2, 2)),
            tiling.add_single_cell_requirement(Perm((2, 0, 1)), (2, 2))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (2, 2)),
            tiling.add_single_cell_requirement(Perm((2, 1, 0)), (2, 2))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 1)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((0, 1)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((1, 0)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((0, 1, 2)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((0, 1, 2)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 0, 2)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((1, 0, 2)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((1, 2, 0)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((1, 2, 0)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 0, 1)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((2, 0, 1)), (3, 0))
        ]),
        frozenset([
            tiling.add_single_cell_obstruction(Perm((2, 1, 0)), (3, 0)),
            tiling.add_single_cell_requirement(Perm((2, 1, 0)), (3, 0))
        ])
    ])
    assert strats == actual