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