From 972f917f2625e68f92c3e820f4817b699a5847c3 Mon Sep 17 00:00:00 2001 From: beam Date: Wed, 21 Oct 2026 22:23:27 +0000 Subject: [PATCH] beam: fix mixed-type node crash in toposort ready-queue sort --- wizard-work/beam/toposort/toposort.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wizard-work/beam/toposort/toposort.py b/wizard-work/beam/toposort/toposort.py index f786aeb..0faaf31 100644 --- a/wizard-work/beam/toposort/toposort.py +++ b/wizard-work/beam/toposort/toposort.py @@ -50,14 +50,14 @@ def topo_sort(graph: Mapping[Any, Iterable[Any]]) -> TopoResult: # ready set as a min-heap via sorted list (nodes sortable; if not, fall back) try: - ready = sorted(n for n in nodes if in_deg[n] == 0) + ready = sorted((n for n in nodes if in_deg[n] == 0), key=_key) except TypeError: ready = [n for n in nodes if in_deg[n] == 0] out: list[Any] = [] # We'll use a list as a priority queue by re-sorting on pop; fine for tests. while ready: # pop smallest - ready.sort() + ready.sort(key=_key) cur = ready.pop(0) out.append(cur) for dep in sorted(dependents[cur], key=_key): @@ -171,6 +171,6 @@ def topo_sort(graph: Mapping[Any, Iterable[Any]]) -> TopoResult: def _key(x): try: - return (0, x) + return (0, type(x).__name__, x) except TypeError: return (1, id(x)) \ No newline at end of file