]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-138281: Remove unused `topsort` and bump minimal version in `peg_generator` (...
authorsobolevn <mail@sobolevn.me>
Wed, 3 Sep 2025 23:27:14 +0000 (02:27 +0300)
committerGitHub <noreply@github.com>
Wed, 3 Sep 2025 23:27:14 +0000 (00:27 +0100)
Tools/peg_generator/pegen/__main__.py
Tools/peg_generator/pegen/sccutils.py

index a6bc627d47cbbba9fa7b2e3a8c76e7cd3beef8b8..7a82ad861b4cb54d5929e1af3eef274ebe2bc961 100755 (executable)
@@ -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()
index 51f618a14d936b8ab178116f8859c2a635400481..db30fc283465b884c5c820ffb695a732045e8ec5 100644 (file)
@@ -49,54 +49,6 @@ def strongly_connected_components(
             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]]: