Skip to content

Commit 150254c

Browse files
committed
optimize lazy traversal
1 parent 9be0ab4 commit 150254c

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

autoray/lazy/core.py

+16-11
Original file line numberDiff line numberDiff line change
@@ -94,21 +94,26 @@ def ascend(lz):
9494
LazyArray
9595
"""
9696
queue = to_queue(lz)
97-
seen = set()
98-
ready = set()
97+
visited = set()
98+
9999
while queue:
100100
node = queue[-1]
101-
need_to_visit = [c for c in node._deps if id(c) not in ready]
102-
if need_to_visit:
103-
need_to_visit.sort(key=get_depth)
104-
queue.extend(need_to_visit)
105-
else:
106-
node = queue.pop()
101+
unvisited_deps = [c for c in node._deps if id(c) not in visited]
102+
k = len(unvisited_deps)
103+
if k == 1:
104+
# single unvisited dependency, add it to the queue
105+
queue.append(unvisited_deps[0])
106+
elif k >= 2:
107+
# sort dependencies by depth and add them to the queue
108+
unvisited_deps.sort(key=get_depth)
109+
queue.extend(unvisited_deps)
110+
else: # k == 0:
111+
# all dependencies visited, yield this node
112+
queue.pop()
107113
nid = id(node)
108-
ready.add(nid)
109-
if nid not in seen:
114+
if nid not in visited:
110115
yield node
111-
seen.add(nid)
116+
visited.add(nid)
112117

113118

114119
def compute(lz):

0 commit comments

Comments
 (0)