Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagesmc
Path: blob/master/src/sage/groups/matrix_gps/pickling_overrides.py
8815 views
1
"""
2
Overrides to unpickle old matrix groups
3
"""
4
5
from sage.structure.sage_object import SageObject, register_unpickle_override
6
7
from sage.groups.matrix_gps.finitely_generated import FinitelyGeneratedMatrixGroup_gap
8
from sage.groups.matrix_gps.group_element import MatrixGroupElement_gap
9
from sage.groups.matrix_gps.linear import GL, LinearMatrixGroup_generic
10
11
12
13
class LegacyMatrixGroup(FinitelyGeneratedMatrixGroup_gap):
14
15
def __setstate__(self, state):
16
"""
17
Restore from old pickle.
18
19
EXAMPLES::
20
21
sage: from sage.groups.matrix_gps.pickling_overrides import *
22
sage: state = dict()
23
sage: state['_MatrixGroup_gap__n'] = 2
24
sage: state['_MatrixGroup_gap__R'] = GF(3)
25
sage: state['_gensG'] = [ matrix(GF(3), [[1,2],[0,1]]) ]
26
sage: M = LegacyMatrixGroup.__new__(LegacyMatrixGroup)
27
sage: M.__setstate__(state)
28
sage: M
29
Matrix group over Finite Field of size 3 with 1 generators (
30
[1 2]
31
[0 1]
32
)
33
"""
34
matrix_gens = state['_gensG']
35
ring = state['_MatrixGroup_gap__R']
36
degree = state['_MatrixGroup_gap__n']
37
from sage.libs.all import libgap
38
libgap_group = libgap.Group(libgap(matrix_gens))
39
self.__init__(degree, ring, libgap_group)
40
41
42
register_unpickle_override(
43
'sage.groups.matrix_gps.matrix_group', 'MatrixGroup_gens_finite_field',
44
LegacyMatrixGroup)
45
46
47
class LegacyMatrixGroupElement(MatrixGroupElement_gap):
48
49
def __setstate__(self, state):
50
"""
51
Restore from old pickle.
52
53
EXAMPLES::
54
55
sage: from sage.groups.matrix_gps.pickling_overrides import *
56
sage: state = dict()
57
sage: state['_MatrixGroup_gap__n'] = 2
58
sage: state['_MatrixGroup_gap__R'] = GF(3)
59
sage: state['_gensG'] = [ matrix(GF(3), [[1,2],[0,1]]) ]
60
sage: M = LegacyMatrixGroup.__new__(LegacyMatrixGroup)
61
sage: M.__setstate__(state)
62
sage: M
63
Matrix group over Finite Field of size 3 with 1 generators (
64
[1 2]
65
[0 1]
66
)
67
sage: state = [ M, {'_MatrixGroupElement__mat':matrix(GF(3), [[1,2],[0,1]])} ]
68
sage: m = LegacyMatrixGroupElement.__new__(LegacyMatrixGroupElement)
69
sage: m.__setstate__(state)
70
sage: m
71
[1 2]
72
[0 1]
73
"""
74
parent = state[0]
75
m = state[1]['_MatrixGroupElement__mat']
76
m = parent.matrix_space()(m)
77
self.__init__(parent, m, check=False)
78
79
80
register_unpickle_override(
81
'sage.groups.matrix_gps.matrix_group_element', 'MatrixGroupElement',
82
LegacyMatrixGroupElement)
83
84
85
class LegacyGeneralLinearGroup(LinearMatrixGroup_generic):
86
87
def __setstate__(self, state):
88
"""
89
Restore from old pickle.
90
91
EXAMPLES::
92
93
sage: from sage.groups.group import Group
94
sage: from sage.groups.matrix_gps.pickling_overrides import *
95
sage: state = dict()
96
sage: state['_MatrixGroup_gap__n'] = 2
97
sage: state['_MatrixGroup_gap__R'] = ZZ
98
sage: M = Group.__new__(LegacyGeneralLinearGroup)
99
sage: M.__setstate__(state)
100
sage: M
101
General Linear Group of degree 2 over Integer Ring
102
"""
103
ring = state['_MatrixGroup_gap__R']
104
n = state['_MatrixGroup_gap__n']
105
G = GL(n, ring)
106
self.__init__(G.degree(), G.base_ring(), G._special, G._name_string, G._latex_string)
107
108
109
register_unpickle_override(
110
'sage.groups.matrix_gps.general_linear', 'GeneralLinearGroup_finite_field',
111
LegacyGeneralLinearGroup)
112
113