From 43f6c54de92a39f045a98e3628d644122e405c35 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 4 Sep 2025 01:16:50 +0300 Subject: [PATCH] gh-138281: Remove unused `topsort` and bump minimal version in `peg_generator` --- Tools/peg_generator/pegen/__main__.py | 4 +-- Tools/peg_generator/pegen/sccutils.py | 48 --------------------------- 2 files changed, 2 insertions(+), 50 deletions(-) diff --git a/Tools/peg_generator/pegen/__main__.py b/Tools/peg_generator/pegen/__main__.py index a6bc627d47cbbb..7a82ad861b4cb5 100755 --- a/Tools/peg_generator/pegen/__main__.py +++ b/Tools/peg_generator/pegen/__main__.py @@ -187,7 +187,7 @@ def main() -> None: if __name__ == "__main__": - if sys.version_info < (3, 8): # noqa: UP036 - print("ERROR: using pegen requires at least Python 3.8!", file=sys.stderr) + if sys.version_info < (3, 10): # noqa: UP036 + print("ERROR: using pegen requires at least Python 3.10!", file=sys.stderr) sys.exit(1) main() diff --git a/Tools/peg_generator/pegen/sccutils.py b/Tools/peg_generator/pegen/sccutils.py index 51f618a14d936b..db30fc283465b8 100644 --- a/Tools/peg_generator/pegen/sccutils.py +++ b/Tools/peg_generator/pegen/sccutils.py @@ -49,54 +49,6 @@ def dfs(v: str) -> Iterator[set[str]]: yield from dfs(v) -def topsort( - data: dict[Set[str], set[Set[str]]] -) -> Iterable[Set[Set[str]]]: - """Topological sort. - - Args: - data: A map from SCCs (represented as frozen sets of strings) to - sets of SCCs, its dependencies. NOTE: This data structure - is modified in place -- for normalization purposes, - self-dependencies are removed and entries representing - orphans are added. - - Returns: - An iterator yielding sets of SCCs that have an equivalent - ordering. NOTE: The algorithm doesn't care about the internal - structure of SCCs. - - Example: - Suppose the input has the following structure: - - {A: {B, C}, B: {D}, C: {D}} - - This is normalized to: - - {A: {B, C}, B: {D}, C: {D}, D: {}} - - The algorithm will yield the following values: - - {D} - {B, C} - {A} - - From https://code.activestate.com/recipes/577413-topological-sort/history/1/. - """ - # TODO: Use a faster algorithm? - for k, v in data.items(): - v.discard(k) # Ignore self dependencies. - for item in set.union(*data.values()) - set(data.keys()): - data[item] = set() - while True: - ready = {item for item, dep in data.items() if not dep} - if not ready: - break - yield ready - data = {item: (dep - ready) for item, dep in data.items() if item not in ready} - assert not data, f"A cyclic dependency exists amongst {data}" - - def find_cycles_in_scc( graph: dict[str, Set[str]], scc: Set[str], start: str ) -> Iterable[list[str]]: