Function pickling#
REFERENCE: The python cookbook.
- sage.misc.fpickle.code_ctor(*args)[source]#
EXAMPLES:
This indirectly tests this function.
sage: def foo(a,b,c=10): return a+b+c sage: sage.misc.fpickle.reduce_code(foo.__code__) (<cyfunction code_ctor at ...>, ...) sage: unpickle_function(pickle_function(foo)) <function foo at ...>
>>> from sage.all import * >>> def foo(a,b,c=Integer(10)): return a+b+c >>> sage.misc.fpickle.reduce_code(foo.__code__) (<cyfunction code_ctor at ...>, ...) >>> unpickle_function(pickle_function(foo)) <function foo at ...>
- sage.misc.fpickle.pickle_function(func)[source]#
Pickle the Python function func. This is not a normal pickle; you must use the unpickle_function method to unpickle the pickled function.
NOTE: This does not work on all functions, but does work on ‘surprisingly’ many functions. In particular, it does not work on functions that includes nested functions.
INPUT:
func – a Python function
OUTPUT:
a string
EXAMPLES:
sage: def f(N): return N+1 ... sage: g = pickle_function(f) sage: h = unpickle_function(g) sage: h(10) 11
>>> from sage.all import * >>> def f(N): return N+Integer(1) ... >>> g = pickle_function(f) >>> h = unpickle_function(g) >>> h(Integer(10)) 11
- sage.misc.fpickle.reduce_code(co)[source]#
EXAMPLES:
sage: def foo(N): return N+1 sage: sage.misc.fpickle.reduce_code(foo.__code__) (<cyfunction code_ctor at ...>, ...)
>>> from sage.all import * >>> def foo(N): return N+Integer(1) >>> sage.misc.fpickle.reduce_code(foo.__code__) (<cyfunction code_ctor at ...>, ...)
Test that the constructed code matches the original code:
sage: ctor, args = sage.misc.fpickle.reduce_code(foo.__code__) sage: ctor(*args) == foo.__code__ True
>>> from sage.all import * >>> ctor, args = sage.misc.fpickle.reduce_code(foo.__code__) >>> ctor(*args) == foo.__code__ True
- sage.misc.fpickle.unpickleMethod(im_name, __self__, im_class)[source]#
support function for copyreg to unpickle method refs
- sage.misc.fpickle.unpickleModule(name)[source]#
support function for copyreg to unpickle module refs
- sage.misc.fpickle.unpickle_function(pickled)[source]#
Unpickle a pickled function.
EXAMPLES:
sage: def f(N,M): return N*M ... sage: unpickle_function(pickle_function(f))(3,5) 15
>>> from sage.all import * >>> def f(N,M): return N*M ... >>> unpickle_function(pickle_function(f))(Integer(3),Integer(5)) 15