Hello,
I am currently trying to convert my Boolean-Cayley-graphs project from
Python 2 to Python 3 Sage.
https://github.com/penguian/Boolean-Cayley-graphs/tree/23-port-to-python-3
I have succeeded in converting the code, but am having a tough time trying
to load objects that were saved by my previous Python 2-based code. These
objects contain matrices as members.What do I need to do to be able to load
these objects?
As far as I can tell, load(...,encoding='latin-1') doesn't work with a dict
containing a matrix but load(...,encoding='bytes') does. See the attachment.
Thanks!
--
You received this message because you are subscribed to the Google Groups
"sage-support" 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-support/ca2c8bd4-b465-4e9f-ba50-d9b431444829n%40googlegroups.com.
~/test-matrix-save-load$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 8.6.rc0, Release Date: 2019-01-03 │
│ Using Python 2.7.15. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Warning: this is a prerelease version, and it may be unstable. ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sage: m=matrix([[1,2,3],[4,5,7]])
sage: m
[1 2 3]
[4 5 7]
sage: d={'1':0,'2':'Hello','3':m}
sage: d
{'1': 0, '2': 'Hello', '3': [1 2 3]
[4 5 7]}
sage: save(m,'m')
sage: save(d,'d')
sage: dl=load('d.sobj')
sage: dl==d
True
sage: df=open('d.sobj','rb').read()
sage: explain_pickle(df)
pg_make_integer = unpickle_global('sage.rings.integer', 'make_integer')
pg_unpickle = unpickle_global('sage.matrix.matrix0', 'unpickle')
pg_Matrix_integer_dense = unpickle_global('sage.matrix.matrix_integer_dense',
'Matrix_integer_dense')
pg_unreduce = unpickle_global('sage.structure.unique_representation',
'unreduce')
pg_MatrixSpace = unpickle_global('sage.matrix.matrix_space', 'MatrixSpace')
pg_IntegerRing = unpickle_global('sage.rings.integer_ring', 'IntegerRing')
pg = unpickle_instantiate(pg_IntegerRing, ())
{'1':pg_make_integer('0'), '3':pg_unpickle(pg_Matrix_integer_dense,
pg_unreduce(pg_MatrixSpace, (pg, 2r, 3r, False, pg_Matrix_integer_dense), {}),
False, None, '1 2 3 4 5 7', 0r), '2':'Hello'}
sage: quit
Exiting Sage (CPU time 0m0.82s, Wall time 3m12.86s).
~/test-matrix-save-load$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.1, Release Date: 2020-05-20 │
│ Create a "Sage Worksheet" file for the notebook interface. │
│ Enhanced for CoCalc. │
│ Using Python 3.7.3. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
sage: df=open('d.sobj','rb').read()
sage: explain_pickle(df)
pg_make_integer = unpickle_global('sage.rings.integer', 'make_integer')
pg_unpickle = unpickle_global('sage.matrix.matrix0', 'unpickle')
pg_Matrix_integer_dense = unpickle_global('sage.matrix.matrix_integer_dense',
'Matrix_integer_dense')
pg_unreduce = unpickle_global('sage.structure.unique_representation',
'unreduce')
pg_MatrixSpace = unpickle_global('sage.matrix.matrix_space', 'MatrixSpace')
pg_IntegerRing = unpickle_global('sage.rings.integer_ring', 'IntegerRing')
pg = unpickle_instantiate(pg_IntegerRing, ())
{'1':pg_make_integer('0'), '3':pg_unpickle(pg_Matrix_integer_dense,
pg_unreduce(pg_MatrixSpace, (pg, 2r, 3r, False, pg_Matrix_integer_dense), {}),
False, None, '1 2 3 4 5 7', 0r), '2':'Hello'}
sage: dl=load('d.sobj')
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-3-899fae33c04f> in <module>()
----> 1 dl=load('d.sobj')
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.load (build/cythonized/sage/misc/persist.c:2900)()
156
157 ## Load file by absolute filename
--> 158 with open(filename, 'rb') as fobj:
159 X = loads(fobj.read(), compress=compress, **kwargs)
160 try:
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.load (build/cythonized/sage/misc/persist.c:2850)()
157 ## Load file by absolute filename
158 with open(filename, 'rb') as fobj:
--> 159 X = loads(fobj.read(), compress=compress, **kwargs)
160 try:
161 X._default_filename = os.path.abspath(filename)
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.loads (build/cythonized/sage/misc/persist.c:7424)()
1042
1043 unpickler = SageUnpickler(io.BytesIO(s), **kwargs)
-> 1044 return unpickler.load()
1045
1046
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/matrix/matrix0.pyx in
sage.matrix.matrix0.unpickle (build/cythonized/sage/matrix/matrix0.c:39715)()
5874 A._cache = cache
5875 if version >= 0:
-> 5876 A._unpickle(data, version)
5877 else:
5878 A._unpickle_generic(data, version)
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/matrix/matrix_integer_dense.pyx
in sage.matrix.matrix_integer_dense.Matrix_integer_dense._unpickle
(build/cythonized/sage/matrix/matrix_integer_dense.c:8221)()
540 self._unpickle_matrix_2x2_version0(data)
541 else:
--> 542 raise RuntimeError("invalid pickle data")
543 else:
544 raise RuntimeError("unknown matrix version (=%s)"%version)
RuntimeError: invalid pickle data
sage: dl=load('d.sobj',encoding='bytes')
sage: dl
{b'1': 0, b'3': [1 2 3]
[4 5 7], b'2': b'Hello'}
sage: dl=load('d.sobj',encoding='latin1')
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-6-e6b22aac0f5a> in <module>()
----> 1 dl=load('d.sobj',encoding='latin1')
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.load (build/cythonized/sage/misc/persist.c:2900)()
156
157 ## Load file by absolute filename
--> 158 with open(filename, 'rb') as fobj:
159 X = loads(fobj.read(), compress=compress, **kwargs)
160 try:
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.load (build/cythonized/sage/misc/persist.c:2850)()
157 ## Load file by absolute filename
158 with open(filename, 'rb') as fobj:
--> 159 X = loads(fobj.read(), compress=compress, **kwargs)
160 try:
161 X._default_filename = os.path.abspath(filename)
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/misc/persist.pyx in
sage.misc.persist.loads (build/cythonized/sage/misc/persist.c:7424)()
1042
1043 unpickler = SageUnpickler(io.BytesIO(s), **kwargs)
-> 1044 return unpickler.load()
1045
1046
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/matrix/matrix0.pyx in
sage.matrix.matrix0.unpickle (build/cythonized/sage/matrix/matrix0.c:39715)()
5874 A._cache = cache
5875 if version >= 0:
-> 5876 A._unpickle(data, version)
5877 else:
5878 A._unpickle_generic(data, version)
/ext/sage/sage-9.1/local/lib/python3.7/site-packages/sage/matrix/matrix_integer_dense.pyx
in sage.matrix.matrix_integer_dense.Matrix_integer_dense._unpickle
(build/cythonized/sage/matrix/matrix_integer_dense.c:8221)()
540 self._unpickle_matrix_2x2_version0(data)
541 else:
--> 542 raise RuntimeError("invalid pickle data")
543 else:
544 raise RuntimeError("unknown matrix version (=%s)"%version)
RuntimeError: invalid pickle data