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"),)
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