Use original edges to organize SCCs in a graph by dependencies between them.
(
sccs: list[set[T]], edges: dict[T, list[T]]
)
| 55 | |
| 56 | |
| 57 | def prepare_sccs( |
| 58 | sccs: list[set[T]], edges: dict[T, list[T]] |
| 59 | ) -> dict[AbstractSet[T], set[AbstractSet[T]]]: |
| 60 | """Use original edges to organize SCCs in a graph by dependencies between them.""" |
| 61 | sccsmap = {} |
| 62 | for scc in sccs: |
| 63 | scc_frozen = frozenset(scc) |
| 64 | for v in scc: |
| 65 | sccsmap[v] = scc_frozen |
| 66 | data: dict[AbstractSet[T], set[AbstractSet[T]]] = {} |
| 67 | for scc in sccs: |
| 68 | deps: set[AbstractSet[T]] = set() |
| 69 | for v in scc: |
| 70 | deps.update(sccsmap[x] for x in edges[v]) |
| 71 | data[frozenset(scc)] = deps |
| 72 | return data |
| 73 | |
| 74 | |
| 75 | class topsort(Iterator[set[T]]): # noqa: N801 |
no test coverage detected
searching dependent graphs…