@@ -67,23 +67,31 @@ def _reduced_ternary_form_eisenstein_with_matrix(a1, a2, a3, a23, a13, a12):
67
67
sage: Q(M) == Qr
68
68
True
69
69
"""
70
- M = identity_matrix(3 )
70
+ # M = identity_matrix(3)
71
+ # M = matrix(ZZ, 3, [m11, m12, m13, m21, m22, m23, m31, m32, m33])
72
+ m11, m12, m13, m21, m22, m23, m31, m32, m33 = 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1
71
73
72
74
loop = True
73
75
74
76
while loop:
75
77
76
78
# adjust
77
- v = a1+ a2+ a23+ a13+ a12
78
- if v < 0 :
79
- M *= matrix(ZZ, 3 , [1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 ])
79
+ v = a1 + a2 + a23 + a13 + a12
80
+ if (v < 0 ):
81
+ # M *= matrix(ZZ, 3, [1, 0, 1, 0, 1, 1, 0, 0, 1])
82
+ [m13] = [m11 + m12 + m13]
83
+ [m23] = [m21 + m22 + m23]
84
+ [m33] = [m31 + m32 + m33]
80
85
a3 += v
81
- a23 += a12+ 2 * a2
82
- a13 += a12+ 2 * a1
86
+ a23 += a12 + 2 * a2
87
+ a13 += a12 + 2 * a1
83
88
84
89
# cuadred 12
85
90
m = red_mfact(a1, a12)
86
- M *= matrix(ZZ, 3 , [1 , m, 0 , 0 , 1 , 0 , 0 , 0 , 1 ])
91
+ # M *= matrix(ZZ, 3, [1, m, 0, 0, 1, 0, 0, 0, 1])
92
+ [m12] = [m* m11 + m12]
93
+ [m22] = [m* m21 + m22]
94
+ [m32] = [m* m31 + m32]
87
95
t = a1* m
88
96
a12 += t
89
97
a2 += a12* m
@@ -92,7 +100,10 @@ def _reduced_ternary_form_eisenstein_with_matrix(a1, a2, a3, a23, a13, a12):
92
100
93
101
# cuadred 23
94
102
m = red_mfact(a2, a23)
95
- M *= matrix(ZZ, 3 , [1 , 0 , 0 , 0 , 1 , m, 0 , 0 , 1 ])
103
+ # M *= matrix(ZZ, 3, [1, 0, 0, 0, 1, m, 0, 0, 1])
104
+ [m13] = [m* m12 + m13]
105
+ [m23] = [m* m22 + m23]
106
+ [m33] = [m* m32 + m33]
96
107
t = a2* m
97
108
a23 += t
98
109
a3 += a23* m
@@ -101,7 +112,10 @@ def _reduced_ternary_form_eisenstein_with_matrix(a1, a2, a3, a23, a13, a12):
101
112
102
113
# cuadred 13
103
114
m = red_mfact(a1, a13)
104
- M *= matrix(ZZ, 3 , [1 , 0 , m, 0 , 1 , 0 , 0 , 0 , 1 ])
115
+ # M *= matrix(ZZ, 3, [1, 0, m, 0, 1, 0, 0, 0, 1])
116
+ [m13] = [m* m11 + m13]
117
+ [m23] = [m* m21 + m23]
118
+ [m33] = [m* m31 + m33]
105
119
t = a1* m
106
120
a13 += t
107
121
a3 += a13* m
@@ -110,130 +124,189 @@ def _reduced_ternary_form_eisenstein_with_matrix(a1, a2, a3, a23, a13, a12):
110
124
111
125
# order 12
112
126
if a1 > a2 or (a1 == a2 and abs (a23) > abs (a13)):
113
- M *= matrix(ZZ, 3 , [0 , - 1 , 0 , - 1 , 0 , 0 , 0 , 0 , - 1 ])
127
+ # M *= matrix(ZZ, 3, [0, -1, 0, -1, 0, 0, 0, 0, -1])
128
+ [m11, m12, m13] = [- m12, - m11, - m13]
129
+ [m21, m22, m23] = [- m22, - m21, - m23]
130
+ [m31, m32, m33] = [- m32, - m31, - m33]
114
131
[a1, a2] = [a2, a1]
115
132
[a13, a23] = [a23, a13]
116
133
117
134
# order 23
118
135
if a2 > a3 or (a2 == a3 and abs (a13) > abs (a12)):
119
- M *= matrix(ZZ, 3 , [- 1 , 0 , 0 , 0 , 0 , - 1 , 0 , - 1 , 0 ])
136
+ # M *= matrix(ZZ, 3, [-1, 0, 0, 0, 0, -1, 0, -1, 0])
137
+ [m11, m12, m13] = [- m11, - m13, - m12]
138
+ [m21, m22, m23] = [- m21, - m23, - m22]
139
+ [m31, m32, m33] = [- m31, - m33, - m32]
120
140
[a2, a3] = [a3, a2]
121
141
[a13, a12] = [a12, a13]
122
142
123
143
# order 12
124
144
if a1 > a2 or (a1 == a2 and abs (a23) > abs (a13)):
125
- M *= matrix(ZZ, 3 , [0 , - 1 , 0 , - 1 , 0 , 0 , 0 , 0 , - 1 ])
145
+ # M *= matrix(ZZ, 3, [0, -1, 0, -1, 0, 0, 0, 0, -1])
146
+ [m11, m12, m13] = [- m12, - m11, - m13]
147
+ [m21, m22, m23] = [- m22, - m21, - m23]
148
+ [m31, m32, m33] = [- m32, - m31, - m33]
126
149
[a1, a2] = [a2, a1]
127
150
[a13, a23] = [a23, a13]
128
151
129
152
# signs
130
153
if a23* a13* a12 > 0 :
131
154
# a23, a13, a12 positive
132
155
133
- if a23 < 0 :
134
- M *= diagonal_matrix([- 1 , 1 , 1 ])
156
+ if (a23 < 0 ):
157
+ # M *= diagonal_matrix([-1, 1, 1])
158
+ m11 = - m11
159
+ m21 = - m21
160
+ m31 = - m31
135
161
a23 = - a23
136
- if a13 < 0 :
137
- M *= diagonal_matrix([1 , - 1 , 1 ])
138
- a13 = - a13
139
- if a12 < 0 :
140
- M *= diagonal_matrix([1 , 1 , - 1 ])
162
+ if (a13 < 0 ):
163
+ # M *= diagonal_matrix([1, -1, 1])
164
+ m12 = - m12
165
+ m22 = - m22
166
+ m32 = - m32
167
+ a13= - a13
168
+ if (a12 < 0 ):
169
+ # M *= diagonal_matrix([1, 1, -1])
170
+ m13 = - m13
171
+ m23 = - m23
172
+ m33 = - m33
141
173
a12 = - a12
142
174
143
175
else :
144
176
# a23, a13, a12 nonpositive
145
177
146
178
[s1, s2, s3] = [a23 > 0 , a13 > 0 , a12 > 0 ]
147
- if (s1+ s2 + s3) % 2 :
179
+ if (s1 + s2 + s3) % 2 :
148
180
if a23 == 0 :
149
181
s1 = 1
150
182
else :
151
183
if a13 == 0 :
152
184
s2 = 1
153
185
else :
154
- if a12 == 0 :
186
+ if ( a12 == 0 ) :
155
187
s3 = 1
156
188
if s1:
157
- M *= diagonal_matrix([- 1 , 1 , 1 ])
158
- a23 = - a23
189
+ # M *= diagonal_matrix([-1, 1, 1])
190
+ m11 = - m11
191
+ m21 = - m21
192
+ m31 = - m31
193
+ a23 = - a23
159
194
if s2:
160
- M *= diagonal_matrix([1 , - 1 , 1 ])
161
- a13 = - a13
195
+ # M *= diagonal_matrix([1, -1, 1])
196
+ m12 = - m12
197
+ m22 = - m22
198
+ m32 = - m32
199
+ a13 = - a13
162
200
if s3:
163
- M *= diagonal_matrix([1 , 1 , - 1 ])
164
- a12 = - a12
201
+ # M *= diagonal_matrix([1, 1, -1])
202
+ m13 = - m13
203
+ m23 = - m23
204
+ m33 = - m33
205
+ a12 = - a12
165
206
166
- loop = not (abs (a23) <= a2 and abs (a13) <= a1 and abs (a12) <= a1 and a1+ a2 + a23+ a13+ a12 >= 0 )
207
+ loop = not (abs (a23) <= a2 and abs (a13) <= a1 and abs (a12) <= a1 and a1 + a2 + a23 + a13 + a12 >= 0 )
167
208
168
209
# adj 3
169
- if a1+ a2+ a23+ a13+ a12 == 0 and 2 * a1+ 2 * a13+ a12 > 0 :
170
- M *= matrix(ZZ, 3 , [- 1 , 0 , 1 , 0 , - 1 , 1 , 0 , 0 , 1 ])
171
- # a3 += a1+a2+a23+a13+a12
172
- a23 = - 2 * a2- a23- a12
173
- a13 = - 2 * a1- a13- a12
210
+ if a1 + a2 + a23 + a13 + a12 == 0 and 2 * a1 + 2 * a13 + a12 > 0 :
211
+ # M *= matrix(ZZ, 3, [-1, 0, 1, 0, -1, 1, 0, 0, 1])
212
+ [m11, m12, m13] = [- m11, - m12, m11 + m12 + m13]
213
+ [m21, m22, m23] = [- m21, - m22, m21 + m22 + m23]
214
+ [m31, m32, m33] = [- m31, - m32, m31 + m32 + m33]
215
+ # a3 += a1+a2+a23+a13+a12 = 0
216
+ a23 = - 2 * a2 - a23 - a12
217
+ a13 = - 2 * a1 - a13 - a12
174
218
175
219
# adj 5.12
176
220
if a1 == - a12 and a13 != 0 :
177
- M *= matrix(ZZ, 3 , [- 1 , - 1 , 0 , 0 , - 1 , 0 , 0 , 0 , 1 ])
178
- # a2 += a1+a12
179
- a23 = - a23- a13
221
+ # M *= matrix(ZZ, 3, [-1, -1, 0, 0, -1, 0, 0, 0, 1])
222
+ [m11, m12] = [- m11, - m11 - m12]
223
+ [m21, m22] = [- m21, - m21 - m22]
224
+ [m31, m32] = [- m31, - m31 - m32]
225
+ # a2 += a1 + a12 = 0
226
+ a23 = - a23 - a13
180
227
a13 = - a13
181
- a12 = - a12 # = 2*a1+ a12
228
+ a12 = - a12 # = 2*a1 + a12
182
229
183
230
# adj 5.13
184
231
if a1 == - a13 and a12 != 0 :
185
- M *= matrix(ZZ, 3 , [- 1 , 0 , - 1 , 0 , 1 , 0 , 0 , 0 , - 1 ])
186
- # a3 += a1+a13
187
- a23 = - a23- a12
188
- a13 = - a13 # = 2*a1+a13
232
+ # M *= matrix(ZZ, 3, [-1, 0, -1, 0, 1, 0, 0, 0, -1])
233
+ [m11, m13] = [- m11, - m11 - m13]
234
+ [m21, m23] = [- m21, - m21 - m23]
235
+ [m31, m33] = [- m31, - m31 - m33]
236
+ # a3 += a1 + a13 = 0
237
+ a23 = - a23 - a12
238
+ a13 = - a13 # = 2*a1 + a13
189
239
a12 = - a12
190
240
191
241
# adj 5.23
192
242
if a2 == - a23 and a12 != 0 :
193
- M *= matrix(ZZ, 3 , [1 , 0 , 0 , 0 , - 1 , - 1 , 0 , 0 , - 1 ])
194
- # a3 += a2+a23
195
- a23 = - a23 # = 2*a2+a23
196
- a13 = - a13- a12
243
+ # M *= matrix(ZZ, 3, [1, 0, 0, 0, -1, -1, 0, 0, -1])
244
+ [m12, m13] = [- m12, - m12 - m13]
245
+ [m22, m23] = [- m22, - m22 - m23]
246
+ [m32, m33] = [- m32, - m32 - m33]
247
+ # a3 += a2 + a23 = 0
248
+ a23 = - a23 # = 2*a2 + a23
249
+ a13 = - a13 - a12
197
250
a12 = - a12
198
251
199
252
# adj 4.12
200
253
if a1 == a12 and a13 > 2 * a23:
201
- M *= matrix(ZZ, 3 , [- 1 , - 1 , 0 , 0 , 1 , 0 , 0 , 0 , - 1 ])
202
- # a 2 += a1-a12
254
+ # M *= matrix(ZZ, 3, [-1, -1, 0, 0, 1, 0, 0, 0, -1])
255
+ [m11, m12, m13] = [- m11, - m11 + m12, - m13]
256
+ [m21, m22, m23] = [- m21, - m21 + m22, - m23]
257
+ [m31, m32, m33] = [- m31, - m31 + m32, - m33]
258
+ # a2 += a1 - a12 = 0
203
259
a23 = - a23 + a13
204
260
# a12 = 2*a1 - a12
205
261
206
262
# adj 4.13
207
263
if a1 == a13 and a12 > 2 * a23:
208
- M *= matrix(ZZ, 3 , [- 1 , 0 , - 1 , 0 , - 1 , 0 , 0 , 0 , 1 ])
209
- # a3 += a1-a13
264
+ # M *= matrix(ZZ, 3, [-1, 0, -1, 0, -1, 0, 0, 0, 1])
265
+ [m11, m12, m13] = [- m11, - m12, - m11 + m13]
266
+ [m21, m22, m23] = [- m21, - m22, - m21 + m23]
267
+ [m31, m32, m33] = [- m31, - m32, - m31 + m33]
268
+ # a3 += a1 - a13 = 0
210
269
a23 = - a23 + a12
211
270
# a13 = 2*a1 - a13
212
271
213
272
# adj 4.23
214
273
if a2 == a23 and a12 > 2 * a13:
215
- M *= matrix(ZZ, 3 , [- 1 , 0 , 0 , 0 , - 1 , - 1 , 0 , 0 , 1 ])
216
- # a3 += a2-a23
274
+ # M *= matrix(ZZ, 3, [-1, 0, 0, 0, -1, -1, 0, 0, 1])
275
+ [m11, m12, m13] = [- m11, - m12, - m12 + m13]
276
+ [m21, m22, m23] = [- m21, - m22, - m22 + m23]
277
+ [m31, m32, m33] = [- m31, - m32, - m32 + m33]
278
+ # a3 += a2 - a23 = 0
217
279
# a23 = 2*a2 - a23
218
280
a13 = - a13 + a12
219
281
220
282
# order 12
221
283
if a1 == a2 and abs (a23) > abs (a13):
222
- M *= matrix(ZZ, 3 , [0 , - 1 , 0 , - 1 , 0 , 0 , 0 , 0 , - 1 ])
284
+ # M *= matrix(ZZ, 3, [0, -1, 0, -1, 0, 0, 0, 0, -1])
285
+ [m11, m12, m13] = [- m12, - m11, - m13]
286
+ [m21, m22, m23] = [- m22, - m21, - m23]
287
+ [m31, m32, m33] = [- m32, - m31, - m33]
223
288
[a1, a2] = [a2, a1]
224
289
[a13, a23] = [a23, a13]
225
290
226
291
# order 23
227
292
if a2 == a3 and abs (a13) > abs (a12):
228
- M *= matrix(ZZ, 3 , [- 1 , 0 , 0 , 0 , 0 , - 1 , 0 , - 1 , 0 ])
293
+ # M *= matrix(ZZ, 3, [-1, 0, 0, 0, 0, -1, 0, -1, 0])
294
+ [m11, m12, m13] = [- m11, - m13, - m12]
295
+ [m21, m22, m23] = [- m21, - m23, - m22]
296
+ [m31, m32, m33] = [- m31, - m33, - m32]
229
297
[a13, a12] = [a12, a13]
230
298
231
299
# order 12
232
300
if a1 == a2 and abs (a23) > abs (a13):
233
- M *= matrix(ZZ, 3 , [0 , - 1 , 0 , - 1 , 0 , 0 , 0 , 0 , - 1 ])
301
+ # M *= matrix(ZZ, 3, [0, -1, 0, -1, 0, 0, 0, 0, -1])
302
+ [m11, m12, m13] = [- m12, - m11, - m13]
303
+ [m21, m22, m23] = [- m22, - m21, - m23]
304
+ [m31, m32, m33] = [- m32, - m31, - m33]
234
305
[a13, a23] = [a23, a13]
235
306
236
- return (a1, a2, a3, a23, a13, a12), M
307
+ return (a1, a2, a3, a23, a13, a12), \
308
+ matrix(ZZ, 3 , (m11, m12, m13, m21, m22, m23, m31, m32, m33))
309
+
237
310
238
311
239
312
def _reduced_ternary_form_eisenstein_without_matrix (a1 , a2 , a3 , a23 , a13 , a12 ):
0 commit comments