beam: fix mixed-type node crash in toposort ready-queue sort
This commit is contained in:
1 parent
13282f4295
commit
972f917f26
1 file changed
+3
-3
@@ -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))
|
||||
Reference in new issue
Block a user