提交 686bcd80 authored 作者: Reyhane Askari's avatar Reyhane Askari

minor speed by not checking the already checked nodes

上级 1860ab2e
...@@ -394,21 +394,27 @@ class DestroyHandler(toolbox.Bookkeeper): # noqa ...@@ -394,21 +394,27 @@ class DestroyHandler(toolbox.Bookkeeper): # noqa
return [] return []
fgraph.destroyers = get_destroyers_of fgraph.destroyers = get_destroyers_of
def recursive_destroys_finder(clients_list): def has_destroyers(protected_list):
for (app, idx) in clients_list: visited_app_set = set()
if app == 'output':
continue def recursive_destroys_finder(protected_var):
destroy_maps = getattr(app.op, 'destroy_map', {}).values() for (app, idx) in protected_var.clients:
if idx in [dmap for sublist in destroy_maps for dmap in sublist]: if app in visited_app_set:
return True continue
for var in getattr(app.op, 'view_map', {}).keys(): else:
if recursive_destroys_finder(app.outputs[var].clients): visited_app_set.add(app)
if app == 'output':
continue
destroy_maps = getattr(app.op, 'destroy_map', {}).values()
if idx in [dmap for sublist in destroy_maps for dmap in sublist]:
return True return True
return False for var in getattr(app.op, 'view_map', {}).keys():
if idx in app.op.view_map[var] and recursive_destroys_finder(app.outputs[var]):
return True
return False
def has_destroyers(protected_list):
for protected_var in protected_list: for protected_var in protected_list:
if recursive_destroys_finder(protected_var.clients): if recursive_destroys_finder(protected_var):
return True return True
fgraph.has_destroyers = has_destroyers fgraph.has_destroyers = has_destroyers
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论