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