def test_splitting_gf():
    parent = Tiling(
        obstructions=(
            GriddedPerm.single_cell((0, 1), (0, 1)),
            GriddedPerm.single_cell((0, 1), (1, 0)),
        ),
        assumptions=(
            TrackingAssumption([
                GriddedPerm.point_perm((0, 1)),
                GriddedPerm.point_perm((1, 0))
            ]),
            TrackingAssumption([GriddedPerm.point_perm((1, 0))]),
        ),
    )
    child = Tiling(
        obstructions=(
            GriddedPerm.single_cell((0, 1), (0, 1)),
            GriddedPerm.single_cell((0, 1), (1, 0)),
        ),
        assumptions=(
            TrackingAssumption([GriddedPerm.point_perm((0, 1))]),
            TrackingAssumption([GriddedPerm.point_perm((1, 0))]),
        ),
    )
    strat = SplittingStrategy()
    rule = strat(parent)
    x, k0, k1 = var("x k_0 k_1")
    parent_func = Function("F_0")(x, k0, k1)
    child_func = Function("F_1")(x, k0, k1)
    expected_eq = Eq(parent_func, child_func.subs({k1: k0 * k1}))

    assert len(rule.children) == 1
    assert rule.children[0] == child
    assert rule.constructor.get_equation(parent_func,
                                         (child_func, )) == expected_eq
示例#2
0
 def interleaving_parameters(self,
                             comb_class: Tiling) -> List[Tuple[str, ...]]:
     """
     Return the parameters on the parent tiling that needed to be interleaved.
     """
     res: List[Tuple[str, ...]] = []
     cols, rows = interleaving_rows_and_cols(self.partition)
     for x in cols:
         assumptions = [
             TrackingAssumption(
                 GriddedPerm.point_perm(cell) for cell in cells
                 if x == cell[0]) for cells in self.partition
         ]
         res.append(
             tuple(
                 comb_class.get_assumption_parameter(ass)
                 for ass in assumptions if ass.gps))
     for y in rows:
         assumptions = [
             TrackingAssumption(
                 GriddedPerm.point_perm(cell) for cell in cells
                 if y == cell[1]) for cells in self.partition
         ]
         res.append(
             tuple(
                 comb_class.get_assumption_parameter(ass)
                 for ass in assumptions if ass.gps))
     return res
def test_no_interleaving():
    strat = SplittingStrategy(interleaving="none")
    rule = strat(t)
    assert len(rule.children) == 1
    child = rule.children[0]
    assert len(child.assumptions) == 2
    assert (TrackingAssumption(
        [GriddedPerm.point_perm((0, 0)),
         GriddedPerm.point_perm((1, 0))]) in child.assumptions)
    assert (TrackingAssumption(
        [GriddedPerm.point_perm((2, 1)),
         GriddedPerm.point_perm((3, 1))]) in child.assumptions)
示例#4
0
def assumptions_to_add(cells: Tuple[Cell, ...], cols: Set[int],
                       rows: Set[int]) -> Tuple[TrackingAssumption, ...]:
    """
    Return the assumptions that should be tracked in the set of cells if we are
    interleaving the given rows and cols.
    """
    col_assumptions = [
        TrackingAssumption(
            [GriddedPerm.point_perm(cell) for cell in cells if x == cell[0]])
        for x in cols
    ]
    row_assumptions = [
        TrackingAssumption(
            [GriddedPerm.point_perm(cell) for cell in cells if y == cell[1]])
        for y in rows
    ]
    return tuple(ass for ass in chain(col_assumptions, row_assumptions)
                 if ass.gps)
示例#5
0
 def enum_verified(self):
     t = Tiling(
         obstructions=[
             GriddedPerm(Perm((0, 1, 2)), ((0, 0), ) * 3),
             GriddedPerm(Perm((1, 0, 2)), ((0, 0), ) * 3),
             GriddedPerm(Perm((2, 0, 1)), ((0, 0), ) * 3),
             GriddedPerm(Perm((0, 2, 1)), ((1, 0), ) * 3),
             GriddedPerm(Perm((0, 1, 2)), ((1, 0), ) * 3),
             GriddedPerm(Perm((1, 0, 2)), ((1, 0), ) * 3),
             GriddedPerm(Perm((2, 0, 1)), ((1, 0), ) * 3),
         ],
         requirements=[
             [GriddedPerm(Perm((0, )), ((0, 0), ))],
             [GriddedPerm(Perm((0, )), ((1, 0), ))],
         ],
     )
     t1 = Tiling(
         obstructions=[
             GriddedPerm(Perm((0, 1)), [(0, 0), (0, 0)]),
             GriddedPerm(Perm((0, 1)), [(1, 1), (1, 1)]),
             GriddedPerm(Perm((0, 1)), [(2, 0), (2, 0)]),
             GriddedPerm(Perm((1, 0)), [(1, 1), (1, 1)]),
         ],
         requirements=[
             [GriddedPerm(Perm((1, 0)), ((0, 0), (0, 0)))],
             [GriddedPerm.point_perm((1, 1))],
             [GriddedPerm.point_perm((2, 0))],
         ],
         assumptions=[
             TrackingAssumption([GriddedPerm.point_perm((0, 0))]),
             TrackingAssumption([GriddedPerm.point_perm((1, 1))]),
             TrackingAssumption([GriddedPerm.point_perm((2, 0))]),
             TrackingAssumption([
                 GriddedPerm.point_perm((0, 0)),
                 GriddedPerm.point_perm((2, 0))
             ]),
         ],
     )
     t2 = Tiling(
         obstructions=(
             GriddedPerm(Perm((0, )), ((0, 0), )),
             GriddedPerm(Perm((0, )), ((1, 1), )),
             GriddedPerm(Perm((0, )), ((2, 0), )),
             GriddedPerm(Perm((0, 1)), ((0, 1), (0, 1))),
             GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))),
             GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))),
             GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))),
         ),
         requirements=(
             (GriddedPerm(Perm((0, )), ((1, 0), )), ),
             (GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), ),
         ),
         assumptions=(
             TrackingAssumption((
                 GriddedPerm(Perm((0, )), ((0, 1), )),
                 GriddedPerm(Perm((0, )), ((1, 0), )),
             )),
             TrackingAssumption((
                 GriddedPerm(Perm((0, )), ((0, 1), )),
                 GriddedPerm(Perm((0, )), ((1, 0), )),
                 GriddedPerm(Perm((0, )), ((2, 1), )),
             )),
             TrackingAssumption((GriddedPerm(Perm((0, )), ((2, 1), )), )),
         ),
     )
     return [t, t1, t2]
 def test_with_assumptions(self, strategy):
     ass = TrackingAssumption([GriddedPerm.point_perm((0, 0))])
     t = Tiling.from_string("01").add_assumption(ass)
     assert strategy.verified(t)
     assert strategy.get_genf(t) == sympy.sympify("-1/(k_0*x - 1)")
from sympy import Eq, Function, var

from tilings import GriddedPerm, Tiling
from tilings.assumptions import TrackingAssumption
from tilings.strategies import SplittingStrategy

t = Tiling(
    obstructions=[
        GriddedPerm.single_cell((0, 1, 2), (0, 0)),
        GriddedPerm.single_cell((0, 1), (1, 0)),
        GriddedPerm.single_cell((0, 1, 2), (2, 1)),
        GriddedPerm.single_cell((0, 1, 2), (3, 1)),
    ],
    assumptions=[
        TrackingAssumption([
            GriddedPerm.point_perm((0, 0)),
            GriddedPerm.point_perm((1, 0)),
            GriddedPerm.point_perm((2, 1)),
            GriddedPerm.point_perm((3, 1)),
        ])
    ],
)


def test_no_interleaving():
    strat = SplittingStrategy(interleaving="none")
    rule = strat(t)
    assert len(rule.children) == 1
    child = rule.children[0]
    assert len(child.assumptions) == 2
    assert (TrackingAssumption(