beam: fix mixed-type node crash in toposort ready-queue sort

This commit is contained in:
beam committed 2026-10-21 22:23:27 +00:00
1 parent 13282f4295
commit 972f917f26
1 file changed
+3 -3
+3 -3
View File
@@ -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))