Looking at the offending code (in matrix_integer_dense.pyx, line 535:
def _unpickle(self, data, int version):
if version == 0:
if isinstance(data, bytes):
self._unpickle_version0(data)
elif isinstance(data, list):
self._unpickle_matrix_2x2_version0(data)
else:
raise RuntimeError("invalid pickle data")
else:
raise RuntimeError("unknown matrix version (=%s)"%version)
it's the classing Py2/Py3 unpickle incompatibility: there's a shift between
str/bytes/unicode between the 3 that rather fundamentally breaks pickling
of them. It can be fixed fairly easily. We're probably unpickling what used
to be a python 2 (str==bytes) object as a python 3 latin1-encoded string,
because most py2 str/bytes objects are supposed to be strings (and latin1
has the nice property that it preserves bit patterns). So in the code
above, we just need to check
I think we want change this to something like:
if version == 0:
+ if isinstance(data, str): #old Py2 pickle: old "bytes" object
reaches us as a latin1-encoded string
+ data = data.encode('latin1')
if isinstance(data, bytes):
Making this change is really worthwhile: these are small problems that are
hard to find without a "pickle jar" without good coverage. Each of them is
probably fairly easy to fix. These problems come up particularly when data
is encoded as "bytes". That happens for optimized picklers. There aren't
that many of them, so the number of these changes required is probably
limited, and each of them can have a huge positive knock-on effect as you
can see here.
(If I have important, expensive computational data I want to save for
posterity, I would not go for Pickle anyway: you want something that's
platform-independent. Sage will die at some point in the future too, and
Pickle is not a format that is *that* easy to maintain: It's not archive
quality in the librarian sense).
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-devel/50cac9c1-760d-4f4f-b061-2183cf869a4bo%40googlegroups.com.