提交 43af1eac authored 作者: Arnaud Bergeron's avatar Arnaud Bergeron

Make as_op instances pickleable.

上级 ae47cc39
......@@ -402,6 +402,12 @@ def register_shape_i_c_code(typ, code, check_input, version=()):
# Scan can deal with.
expandable_types = ()
def load_back(mod, name):
__import__(mod)
import sys
module = sys.modules[mod]
obj = getattr(module, name)
return obj
class FromFunctionOp(gof.Op):
"""
......@@ -447,6 +453,20 @@ class FromFunctionOp(gof.Op):
for i in range(len(outs)):
outputs[i][0] = outs[i]
def __reduce__(self):
mod = self.__fn.__module__
name = self.__fn.__name__
try:
obj = load_back(mod, name)
except (ImportError, KeyError, AttributeError):
raise PicklingError("Can't pickle as_op(), not found as %s.%s" %
(mod, name))
else:
if obj is not self:
raise PicklingError("Can't pickle as_op(), not the object "
"at %s.%s" % (mod, name))
return load_back, (mod, name)
def _infer_shape(self, node, input_shapes):
return self.__infer_shape(node, input_shapes)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论