]> gitweb.michael.orlitzky.com - sage.d.git/blob - mjo/eja/eja_cache.py
eja: more cached charpoly coefficients.
[sage.d.git] / mjo / eja / eja_cache.py
1 r"""
2 Cached characteristic polynomial coefficients for a few of the
3 example algebras. These take a long time to compute, so it makes more
4 sense to cache them and then only test that the cached values are
5 correct every once in a while. And they're in this separate file
6 because they are visually horrific.
7
8 The function used to turn SageMath's output into the appropriate input
9 can be found in the eja_utils module.
10
11 The simple algebras _not_ represented here all have rank two or less,
12 and are "easy" to compute even over the algebraic reals.
13 """
14
15 def real_symmetric_eja_coeffs(J):
16 X = J.coordinate_polynomial_ring().gens()
17
18 if J.dimension() == 3: # n == 2
19 a0 = -X[1]**2 + X[0]*X[2]
20 a1 = -X[0] - X[2]
21 return (a0,a1)
22
23 elif J.dimension() == 6: # n == 3
24 a0 = ( X[2]*X[3]**2 - 2*X[1]*X[3]*X[4] + X[0]*X[4]**2 +
25 X[1]**2*X[5] - X[0]*X[2]*X[5] )
26 a1 = ( -X[1]**2 + X[0]*X[2] - X[3]**2 - X[4]**2 +
27 X[0]*X[5] + X[2]*X[5] )
28 a2 = -X[0] - X[2] - X[5]
29 return (a0,a1,a2)
30
31 elif J.dimension() == 10: # n == 4
32 a0 = ( X[4]**2*X[6]**2 - X[2]*X[5]*X[6]**2 -
33 2*X[3]*X[4]*X[6]*X[7] + 2*X[1]*X[5]*X[6]*X[7] +
34 X[3]**2*X[7]**2 - X[0]*X[5]*X[7]**2 +
35 2*X[2]*X[3]*X[6]*X[8] - 2*X[1]*X[4]*X[6]*X[8] -
36 2*X[1]*X[3]*X[7]*X[8] + 2*X[0]*X[4]*X[7]*X[8] +
37 X[1]**2*X[8]**2 - X[0]*X[2]*X[8]**2 -
38 X[2]*X[3]**2*X[9] + 2*X[1]*X[3]*X[4]*X[9] -
39 X[0]*X[4]**2*X[9] - X[1]**2*X[5]*X[9] +
40 X[0]*X[2]*X[5]*X[9] )
41
42 a1 = ( X[2]*X[3]**2 - 2*X[1]*X[3]*X[4] + X[0]*X[4]**2 +
43 X[1]**2*X[5] - X[0]*X[2]*X[5] + X[2]*X[6]**2 +
44 X[5]*X[6]**2 - 2*X[1]*X[6]*X[7] + X[0]*X[7]**2 +
45 X[5]*X[7]**2 - 2*X[3]*X[6]*X[8] - 2*X[4]*X[7]*X[8] +
46 X[0]*X[8]**2 + X[2]*X[8]**2 + X[1]**2*X[9] -
47 X[0]*X[2]*X[9] + X[3]**2*X[9] + X[4]**2*X[9] -
48 X[0]*X[5]*X[9] - X[2]*X[5]*X[9] )
49
50 a2 = ( -X[1]**2 + X[0]*X[2] - X[3]**2 - X[4]**2 +
51 X[0]*X[5] + X[2]*X[5] - X[6]**2 - X[7]**2 -
52 X[8]**2 + X[0]*X[9] + X[2]*X[9] + X[5]*X[9] )
53
54 a3 = -X[0] - X[2] - X[5] - X[9]
55
56 return (a0,a1,a2,a3)
57
58 # Don't know them
59 return None
60
61
62 def complex_hermitian_eja_coeffs(J):
63 X = J.coordinate_polynomial_ring().gens()
64
65 if J.dimension() == 4: # n == 2
66 a0 = -X[1]**2 - X[2]**2 + X[0]*X[3]
67 a1 = -X[0] - X[3]
68 return (a0,a1)
69
70 elif J.dimension() == 9: # n == 3
71 a0 = ( X[3]*X[4]**2 + X[3]*X[5]**2 - 2*X[1]*X[4]*X[6] -
72 2*X[2]*X[5]*X[6] + X[0]*X[6]**2 + 2*X[2]*X[4]*X[7] -
73 2*X[1]*X[5]*X[7] + X[0]*X[7]**2 + X[1]**2*X[8] +
74 X[2]**2*X[8] - X[0]*X[3]*X[8] )
75
76 a1 = ( -X[1]**2 - X[2]**2 + X[0]*X[3] - X[4]**2 - X[5]**2 -
77 X[6]**2 - X[7]**2 + X[0]*X[8] + X[3]*X[8] )
78
79 a2 = -X[0] - X[3] - X[8]
80
81 return (a0,a1,a2)
82
83 elif J.dimension() == 16: # n == 4
84 a0 = ( X[6]**2*X[9]**2 + X[7]**2*X[9]**2 - X[3]*X[8]*X[9]**2 +
85 X[6]**2*X[10]**2 + X[7]**2*X[10]**2 - X[3]*X[8]*X[10]**2 -
86 2*X[4]*X[6]*X[9]*X[11] - 2*X[5]*X[7]*X[9]*X[11] +
87 2*X[1]*X[8]*X[9]*X[11] - 2*X[5]*X[6]*X[10]*X[11] +
88 2*X[4]*X[7]*X[10]*X[11] + 2*X[2]*X[8]*X[10]*X[11] +
89 X[4]**2*X[11]**2 + X[5]**2*X[11]**2 - X[0]*X[8]*X[11]**2 +
90 2*X[5]*X[6]*X[9]*X[12] - 2*X[4]*X[7]*X[9]*X[12] -
91 2*X[2]*X[8]*X[9]*X[12] - 2*X[4]*X[6]*X[10]*X[12] -
92 2*X[5]*X[7]*X[10]*X[12] + 2*X[1]*X[8]*X[10]*X[12] +
93 X[4]**2*X[12]**2 + X[5]**2*X[12]**2 - X[0]*X[8]*X[12]**2 +
94 2*X[3]*X[4]*X[9]*X[13] - 2*X[1]*X[6]*X[9]*X[13] +
95 2*X[2]*X[7]*X[9]*X[13] + 2*X[3]*X[5]*X[10]*X[13] -
96 2*X[2]*X[6]*X[10]*X[13] - 2*X[1]*X[7]*X[10]*X[13] -
97 2*X[1]*X[4]*X[11]*X[13] - 2*X[2]*X[5]*X[11]*X[13] +
98 2*X[0]*X[6]*X[11]*X[13] + 2*X[2]*X[4]*X[12]*X[13] -
99 2*X[1]*X[5]*X[12]*X[13] + 2*X[0]*X[7]*X[12]*X[13] +
100 X[1]**2*X[13]**2 + X[2]**2*X[13]**2 - X[0]*X[3]*X[13]**2 -
101 2*X[3]*X[5]*X[9]*X[14] + 2*X[2]*X[6]*X[9]*X[14] +
102 2*X[1]*X[7]*X[9]*X[14] + 2*X[3]*X[4]*X[10]*X[14] -
103 2*X[1]*X[6]*X[10]*X[14] + 2*X[2]*X[7]*X[10]*X[14] -
104 2*X[2]*X[4]*X[11]*X[14] + 2*X[1]*X[5]*X[11]*X[14] -
105 2*X[0]*X[7]*X[11]*X[14] - 2*X[1]*X[4]*X[12]*X[14] -
106 2*X[2]*X[5]*X[12]*X[14] + 2*X[0]*X[6]*X[12]*X[14] +
107 X[1]**2*X[14]**2 + X[2]**2*X[14]**2 - X[0]*X[3]*X[14]**2 -
108 X[3]*X[4]**2*X[15] - X[3]*X[5]**2*X[15] +
109 2*X[1]*X[4]*X[6]*X[15] + 2*X[2]*X[5]*X[6]*X[15] -
110 X[0]*X[6]**2*X[15] - 2*X[2]*X[4]*X[7]*X[15] +
111 2*X[1]*X[5]*X[7]*X[15] - X[0]*X[7]**2*X[15] -
112 X[1]**2*X[8]*X[15] - X[2]**2*X[8]*X[15] +
113 X[0]*X[3]*X[8]*X[15] )
114
115 a1 = ( X[3]*X[4]**2 + X[3]*X[5]**2 - 2*X[1]*X[4]*X[6] -
116 2*X[2]*X[5]*X[6] + X[0]*X[6]**2 + 2*X[2]*X[4]*X[7] -
117 2*X[1]*X[5]*X[7] + X[0]*X[7]**2 + X[1]**2*X[8] +
118 X[2]**2*X[8] - X[0]*X[3]*X[8] + X[3]*X[9]**2 +
119 X[8]*X[9]**2 + X[3]*X[10]**2 + X[8]*X[10]**2 -
120 2*X[1]*X[9]*X[11] - 2*X[2]*X[10]*X[11] + X[0]*X[11]**2 +
121 X[8]*X[11]**2 + 2*X[2]*X[9]*X[12] - 2*X[1]*X[10]*X[12] +
122 X[0]*X[12]**2 + X[8]*X[12]**2 - 2*X[4]*X[9]*X[13] -
123 2*X[5]*X[10]*X[13] - 2*X[6]*X[11]*X[13] -
124 2*X[7]*X[12]*X[13] + X[0]*X[13]**2 + X[3]*X[13]**2 +
125 2*X[5]*X[9]*X[14] - 2*X[4]*X[10]*X[14] +
126 2*X[7]*X[11]*X[14] - 2*X[6]*X[12]*X[14] + X[0]*X[14]**2 +
127 X[3]*X[14]**2 + X[1]**2*X[15] + X[2]**2*X[15] -
128 X[0]*X[3]*X[15] + X[4]**2*X[15] + X[5]**2*X[15] +
129 X[6]**2*X[15] + X[7]**2*X[15] - X[0]*X[8]*X[15] -
130 X[3]*X[8]*X[15] )
131
132 a2 = ( -X[1]**2 - X[2]**2 + X[0]*X[3] - X[4]**2 - X[5]**2 -
133 X[6]**2 - X[7]**2 + X[0]*X[8] + X[3]*X[8] - X[9]**2 -
134 X[10]**2 - X[11]**2 - X[12]**2 - X[13]**2 - X[14]**2 +
135 X[0]*X[15] + X[3]*X[15] + X[8]*X[15] )
136
137 a3 = -X[0] - X[3] - X[8] - X[15]
138
139 return (a0,a1,a2,a3)
140
141 # Don't know them
142 return None
143
144
145 def quaternion_hermitian_eja_coeffs(J):
146 X = J.coordinate_polynomial_ring().gens()
147
148 if J.dimension() == 6: # n == 2
149 a0 = -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 + X[0]*X[5]
150 a1 = -X[0] - X[5]
151 return (a0,a1)
152
153 elif J.dimension() == 15: # n == 3
154 a0 = ( X[5]*X[6]**2 + X[5]*X[7]**2 + X[5]*X[8]**2 + X[5]*X[9]**2 -
155 2*X[1]*X[6]*X[10] - 2*X[2]*X[7]*X[10] - 2*X[3]*X[8]*X[10] -
156 2*X[4]*X[9]*X[10] + X[0]*X[10]**2 + 2*X[2]*X[6]*X[11] -
157 2*X[1]*X[7]*X[11] + 2*X[4]*X[8]*X[11] - 2*X[3]*X[9]*X[11] +
158 X[0]*X[11]**2 + 2*X[3]*X[6]*X[12] - 2*X[4]*X[7]*X[12] -
159 2*X[1]*X[8]*X[12] + 2*X[2]*X[9]*X[12] + X[0]*X[12]**2 +
160 2*X[4]*X[6]*X[13] + 2*X[3]*X[7]*X[13] - 2*X[2]*X[8]*X[13] -
161 2*X[1]*X[9]*X[13] + X[0]*X[13]**2 + X[1]**2*X[14] +
162 X[2]**2*X[14] + X[3]**2*X[14] + X[4]**2*X[14] -
163 X[0]*X[5]*X[14] )
164 a1 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 + X[0]*X[5] -
165 X[6]**2 - X[7]**2 - X[8]**2 - X[9]**2 - X[10]**2 -
166 X[11]**2 - X[12]**2 - X[13]**2 + X[0]*X[14] + X[5]*X[14] )
167
168 a2 = -X[0] - X[5] - X[14]
169
170 return (a0,a1,a2)
171
172 # Don't know them
173 return None
174
175 def octonion_hermitian_eja_coeffs(J):
176 X = J.coordinate_polynomial_ring().gens()
177
178 if J.dimension() == 10: # n == 2
179 a0 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 - X[5]**2 -
180 X[6]**2 - X[7]**2 - X[8]**2 + X[0]*X[9] )
181 a1 = -X[0] - X[9]
182 return (a0,a1)
183
184 elif J.dimension() == 27: # n == 3
185 a0 = ( X[9]*X[10]**2 + X[9]*X[11]**2 + X[9]*X[12]**2 + X[9]*X[13]**2 +
186 X[9]*X[14]**2 + X[9]*X[15]**2 + X[9]*X[16]**2 + X[9]*X[17]**2 -
187 2*X[1]*X[10]*X[18] - 2*X[2]*X[11]*X[18] - 2*X[3]*X[12]*X[18] -
188 2*X[4]*X[13]*X[18] - 2*X[5]*X[14]*X[18] - 2*X[6]*X[15]*X[18] -
189 2*X[7]*X[16]*X[18] - 2*X[8]*X[17]*X[18] + X[0]*X[18]**2 +
190 2*X[2]*X[10]*X[19] - 2*X[1]*X[11]*X[19] + 2*X[4]*X[12]*X[19] -
191 2*X[3]*X[13]*X[19] + 2*X[6]*X[14]*X[19] - 2*X[5]*X[15]*X[19] -
192 2*X[8]*X[16]*X[19] + 2*X[7]*X[17]*X[19] + X[0]*X[19]**2 +
193 2*X[3]*X[10]*X[20] - 2*X[4]*X[11]*X[20] - 2*X[1]*X[12]*X[20] +
194 2*X[2]*X[13]*X[20] + 2*X[7]*X[14]*X[20] + 2*X[8]*X[15]*X[20] -
195 2*X[5]*X[16]*X[20] - 2*X[6]*X[17]*X[20] + X[0]*X[20]**2 +
196 2*X[4]*X[10]*X[21] + 2*X[3]*X[11]*X[21] - 2*X[2]*X[12]*X[21] -
197 2*X[1]*X[13]*X[21] + 2*X[8]*X[14]*X[21] - 2*X[7]*X[15]*X[21] +
198 2*X[6]*X[16]*X[21] - 2*X[5]*X[17]*X[21] + X[0]*X[21]**2 +
199 2*X[5]*X[10]*X[22] - 2*X[6]*X[11]*X[22] - 2*X[7]*X[12]*X[22] -
200 2*X[8]*X[13]*X[22] - 2*X[1]*X[14]*X[22] + 2*X[2]*X[15]*X[22] +
201 2*X[3]*X[16]*X[22] + 2*X[4]*X[17]*X[22] + X[0]*X[22]**2 +
202 2*X[6]*X[10]*X[23] + 2*X[5]*X[11]*X[23] - 2*X[8]*X[12]*X[23] +
203 2*X[7]*X[13]*X[23] - 2*X[2]*X[14]*X[23] - 2*X[1]*X[15]*X[23] -
204 2*X[4]*X[16]*X[23] + 2*X[3]*X[17]*X[23] + X[0]*X[23]**2 +
205 2*X[7]*X[10]*X[24] + 2*X[8]*X[11]*X[24] + 2*X[5]*X[12]*X[24] -
206 2*X[6]*X[13]*X[24] - 2*X[3]*X[14]*X[24] + 2*X[4]*X[15]*X[24] -
207 2*X[1]*X[16]*X[24] - 2*X[2]*X[17]*X[24] + X[0]*X[24]**2 +
208 2*X[8]*X[10]*X[25] - 2*X[7]*X[11]*X[25] + 2*X[6]*X[12]*X[25] +
209 2*X[5]*X[13]*X[25] - 2*X[4]*X[14]*X[25] - 2*X[3]*X[15]*X[25] +
210 2*X[2]*X[16]*X[25] - 2*X[1]*X[17]*X[25] + X[0]*X[25]**2 +
211 X[1]**2*X[26] + X[2]**2*X[26] + X[3]**2*X[26] + X[4]**2*X[26] +
212 X[5]**2*X[26] + X[6]**2*X[26] + X[7]**2*X[26] + X[8]**2*X[26] -
213 X[0]*X[9]*X[26] )
214
215 a1 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 - X[5]**2 - X[6]**2 -
216 X[7]**2 - X[8]**2 + X[0]*X[9] - X[10]**2 - X[11]**2 -
217 X[12]**2 - X[13]**2 - X[14]**2 - X[15]**2 - X[16]**2 -
218 X[17]**2 - X[18]**2 - X[19]**2 - X[20]**2 - X[21]**2 -
219 X[22]**2 - X[23]**2 - X[24]**2 - X[25]**2 + X[0]*X[26] +
220 X[9]*X[26] )
221
222 a2 = -X[0] - X[9] - X[26]
223
224 return (a0,a1,a2)
225
226 # Don't know them
227 return None