提交 213db8fd authored 作者: James Bergstra's avatar James Bergstra

rewrote DestroyHandler and moved it to destroyhandler.py, moved view_roots to graph.py

上级 99a92131
差异被折叠。
差异被折叠。
...@@ -497,7 +497,7 @@ def clone_with_equiv(i, o, d, missing_input_policy = 'fail', orphan_policy = 'co ...@@ -497,7 +497,7 @@ def clone_with_equiv(i, o, d, missing_input_policy = 'fail', orphan_policy = 'co
return [d[input] for input in i], [d[output] for output in o] return [d[input] for input in i], [d[output] for output in o]
def general_toposort(r_out, deps): def general_toposort(r_out, deps, debug_print = False):
""" """
@note: deps(i) should behave like a pure function (no funny business with @note: deps(i) should behave like a pure function (no funny business with
internal state) internal state)
...@@ -534,11 +534,11 @@ def general_toposort(r_out, deps): ...@@ -534,11 +534,11 @@ def general_toposort(r_out, deps):
sources.append(client) sources.append(client)
if len(rlist) != len(reachable): if len(rlist) != len(reachable):
print '' if debug_print:
print reachable print ''
print rlist print reachable
print rlist
raise 'failed to complete topological sort of given nodes' raise ValueError('graph contains cycles')
return rlist return rlist
...@@ -644,3 +644,26 @@ def as_string(i, o, ...@@ -644,3 +644,26 @@ def as_string(i, o,
return [describe(output) for output in o] return [describe(output) for output in o]
def view_roots(r):
"""
Utility function that returns the leaves of a search through
consecutive view_map()s.
"""
owner = r.owner
if owner is not None:
try:
view_map = owner.op.view_map
view_map = dict([(owner.outputs[o], i) for o, i in view_map.items()])
except AttributeError:
return [r]
if r in view_map:
answer = []
for i in view_map[r]:
answer += view_roots(owner.inputs[i])
return answer
else:
return [r]
else:
return [r]
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论