def req_lists_to_insert(self, tiling: Tiling) -> Iterator[ListRequirement]: bdict = tiling.cell_basis() cell_with_req = ( (cell, obs, reqlist[0]) for cell, (obs, reqlist) in bdict.items() if len(reqlist) == 1 ) for cell, obs, curr_req in cell_with_req: for length in range(len(curr_req) + 1, self.maxreqlen + 1): basis = obs + self.extra_basis patterns = ( Av(basis).of_length(length) if basis else Perm.of_length(length) ) for patt in patterns: if curr_req in patt: yield (GriddedPerm.single_cell(patt, cell),)
def req_lists_to_insert(self, tiling: Tiling) -> Iterator[ListRequirement]: if self.one_cell_only: assert self.maxreqlen == 1 and self.ignore_parent cells = sorted( frozenset(tiling.active_cells) - frozenset(tiling.positive_cells) ) if cells: yield (GriddedPerm.single_cell((0,), cells[0]),) return active = tiling.active_cells bdict = tiling.cell_basis() for cell, length in product(active, range(1, self.maxreqlen + 1)): basis = bdict[cell][0] + self.extra_basis patterns = Av(basis).of_length(length) if basis else Perm.of_length(length) yield from ( (GriddedPerm.single_cell(patt, cell),) for patt in patterns if not any(patt in perm for perm in bdict[cell][1]) )