提交 053b08bd authored 作者: Frederic's avatar Frederic

Remove clone not needed

上级 01de70fe
...@@ -631,9 +631,8 @@ def _optcheck_fgraph(input_specs, output_specs, accept_inplace=False): ...@@ -631,9 +631,8 @@ def _optcheck_fgraph(input_specs, output_specs, accept_inplace=False):
updates = [spec.update for spec in input_specs if spec.update] updates = [spec.update for spec in input_specs if spec.update]
orig_outputs = [spec.variable for spec in output_specs] + updates orig_outputs = [spec.variable for spec in output_specs] + updates
inputs, outputs = gof.graph.clone(orig_inputs, orig_outputs)
equivalence_tracker = _VariableEquivalenceTracker() equivalence_tracker = _VariableEquivalenceTracker()
fgraph = gof.fg.FunctionGraph(inputs, outputs, fgraph = gof.fg.FunctionGraph(orig_inputs, orig_outputs,
# DestroyHandler may not be needed yet, as there is usually no # DestroyHandler may not be needed yet, as there is usually no
# inplace operation in the graph at this stage. DestroyHandler # inplace operation in the graph at this stage. DestroyHandler
# will be installed by an optimization after canonicalization, # will be installed by an optimization after canonicalization,
...@@ -658,7 +657,7 @@ def _optcheck_fgraph(input_specs, output_specs, accept_inplace=False): ...@@ -658,7 +657,7 @@ def _optcheck_fgraph(input_specs, output_specs, accept_inplace=False):
break break
# We need to protect all immutable inputs from inplace operations. # We need to protect all immutable inputs from inplace operations.
fgraph.attach_feature(Supervisor(input for spec, input in zip(input_specs, inputs) fgraph.attach_feature(Supervisor(input for spec, input in zip(input_specs, fgraph.inputs)
if not (spec.mutable or (hasattr(fgraph, 'destroyers') if not (spec.mutable or (hasattr(fgraph, 'destroyers')
and fgraph.destroyers(input))))) and fgraph.destroyers(input)))))
...@@ -1595,7 +1594,7 @@ class _Linker(gof.link.LocalLinker): ...@@ -1595,7 +1594,7 @@ class _Linker(gof.link.LocalLinker):
# directly from PureOp) # directly from PureOp)
if not isinstance(node.op, gof.op.Op): if not isinstance(node.op, gof.op.Op):
raise utils.MethodNotDefined() raise utils.MethodNotDefined()
e = FunctionGraph(*graph.clone(node.inputs, node.outputs)) e = FunctionGraph(node.inputs, node.outputs)
# The toposort isn't a stochastic order as it contain only one node. # The toposort isn't a stochastic order as it contain only one node.
e.toposort = lambda: list(e.apply_nodes) e.toposort = lambda: list(e.apply_nodes)
# Specifically... e.nodes is a set, but of only 1 element # Specifically... e.nodes is a set, but of only 1 element
......
...@@ -2928,6 +2928,9 @@ class Composite(ScalarOp): ...@@ -2928,6 +2928,9 @@ class Composite(ScalarOp):
self.name = rval self.name = rval
def init_fgraph(self): def init_fgraph(self):
#The clone done by FunctionGraph is needed as we don't want
#the fgraph to be set to the variable as we need to pickle
#them for the cache of c module to work.
fgraph = FunctionGraph(self.inputs, self.outputs) fgraph = FunctionGraph(self.inputs, self.outputs)
gof.MergeOptimizer().optimize(fgraph) gof.MergeOptimizer().optimize(fgraph)
for node in fgraph.apply_nodes: for node in fgraph.apply_nodes:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论