提交 a3253d39 authored 作者: Frederic Bastien's avatar Frederic Bastien

Small speed up

上级 e05a9c65
...@@ -282,7 +282,7 @@ class FunctionGraph(utils.object2): ...@@ -282,7 +282,7 @@ class FunctionGraph(utils.object2):
assert not test assert not test
r.clients.append(new_client) r.clients.append(new_client)
def __remove_clients__(self, r, clients_to_remove, def __remove_client__(self, r, client_to_remove,
prune=True, reason=None): prune=True, reason=None):
""" """
Removes all from the clients list of r. Removes all from the clients list of r.
...@@ -297,8 +297,8 @@ class FunctionGraph(utils.object2): ...@@ -297,8 +297,8 @@ class FunctionGraph(utils.object2):
---------- ----------
r : Variable r : Variable
The clients of r will be removed. The clients of r will be removed.
clients_to_remove : List of (op, i) pairs client_to_remove : (op, i) pairs
List of (op, i) pairs such that node.inputs[i] is not r anymore. (op, i) pairs such that node.inputs[i] is not r anymore.
prune : bool prune : bool
If prune is True, it remove r from this fgraph if it don't If prune is True, it remove r from this fgraph if it don't
have clients left. have clients left.
...@@ -312,8 +312,8 @@ class FunctionGraph(utils.object2): ...@@ -312,8 +312,8 @@ class FunctionGraph(utils.object2):
clients_to_remove and prune=True will remove r. clients_to_remove and prune=True will remove r.
""" """
for entry in clients_to_remove: if client_to_remove:
r.clients.remove(entry) r.clients.remove(client_to_remove)
# entry should be uniq in r. No need to assert it as it is # entry should be uniq in r. No need to assert it as it is
# already asserted in __add_client__. # already asserted in __add_client__.
# assert entry not in r.clients # assert entry not in r.clients
...@@ -336,8 +336,8 @@ class FunctionGraph(utils.object2): ...@@ -336,8 +336,8 @@ class FunctionGraph(utils.object2):
self.execute_callbacks('on_prune', apply_node, reason) self.execute_callbacks('on_prune', apply_node, reason)
for i, input in enumerate(apply_node.inputs): for i, input in enumerate(apply_node.inputs):
self.__remove_clients__(input, [(apply_node, i)], self.__remove_client__(input, (apply_node, i),
reason=reason) reason=reason)
# variable should not have any clients. # variable should not have any clients.
# assert not variable.clients # assert not variable.clients
...@@ -474,14 +474,14 @@ class FunctionGraph(utils.object2): ...@@ -474,14 +474,14 @@ class FunctionGraph(utils.object2):
self.__import_r__(new_r, reason=reason) self.__import_r__(new_r, reason=reason)
self.__add_client__(new_r, (node, i)) self.__add_client__(new_r, (node, i))
prune = self.__remove_clients__(r, [(node, i)], False) prune = self.__remove_client__(r, (node, i), False)
# Precondition: the substitution is semantically valid # Precondition: the substitution is semantically valid
# However it may introduce cycles to the graph, in which case the # However it may introduce cycles to the graph, in which case the
# transaction will be reverted later. # transaction will be reverted later.
self.execute_callbacks('on_change_input', node, i, self.execute_callbacks('on_change_input', node, i,
r, new_r, reason=reason) r, new_r, reason=reason)
if prune: if prune:
self.__remove_clients__(r, [], True, reason=reason) self.__remove_client__(r, None, True, reason=reason)
# replace # # replace #
def replace(self, r, new_r, reason=None, verbose=None): def replace(self, r, new_r, reason=None, verbose=None):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论