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]
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
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]
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()
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