On Jun 14, 2008, at 1:25 PM, Daniel Bump wrote: > > > Some code that has been proposed by Nicolas Thiery > for sage/combinat/families.py would create classes > that have as attributes dictionaries of functions. > > However dumps(s) will raise an exception if s is > such a class instance. > > Example: the simple reflections in a Weyl group. See: > > http://groups.google.com/group/sage-combinat-devel/msg/ > 8b987cd471db3493?hl=en > > What it boils down to is this. The following is > fine in native Python: > >>>> import pickle >>>> def f(x): return x+1 > ... >>>> pickle.dumps(f) > 'c__main__\nf\np0\n.' >>>> pickle.dumps({1:f}) > '(dp0\nI1\nc__main__\nf\np1\ns.' > > But if you try to run this from within Sage, > both calls to dumps() will raise exceptions. > > Is this a bug in Sage?
I actually thought you couldn't really pickle functions, even in plain python. http://docs.python.org/lib/node317.html "Note that functions (built-in and user-defined) are pickled by ``fully qualified'' name reference, not by value. This means that only the function name is pickled, along with the name of module the function is defined in. Neither the function's code, nor any of its function attributes are pickled. Thus the defining module must be importable in the unpickling environment, and the module must contain the named object, otherwise an exception will be raised." david --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---