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 sage-support+unsubscr...@googlegroups.com.
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


Reply via email to