20
20
21
21
Pickling test::
22
22
23
- sage: Q.<i,j,k> = QuaternionAlgebra(QQ,-5,-2)
23
+ sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -5, -2)
24
24
sage: Q == loads(dumps(Q))
25
25
True
26
26
"""
@@ -159,17 +159,17 @@ class QuaternionAlgebra(UniqueRepresentation, Parent):
159
159
160
160
The following tests address the issues raised in :issue:`10601`::
161
161
162
- sage: QuaternionAlgebra(1r,1)
162
+ sage: QuaternionAlgebra(1r, 1)
163
163
Quaternion Algebra (1, 1) with base ring Rational Field
164
- sage: QuaternionAlgebra(1,1.0r)
164
+ sage: QuaternionAlgebra(1, 1.0r)
165
165
Quaternion Algebra (1.00000000000000, 1.00000000000000) with base ring
166
166
Real Field with 53 bits of precision
167
167
sage: QuaternionAlgebra(0,0)
168
168
Traceback (most recent call last):
169
169
...
170
170
ValueError: defining elements of quaternion algebra (0, 0)
171
171
are not invertible in Rational Field
172
- sage: QuaternionAlgebra(GF(2)(1),1)
172
+ sage: QuaternionAlgebra(GF(2)(1), 1)
173
173
Traceback (most recent call last):
174
174
...
175
175
ValueError: 2 is not invertible in Finite Field of size 2
@@ -184,7 +184,7 @@ class QuaternionAlgebra(UniqueRepresentation, Parent):
184
184
185
185
sage: QuaternionAlgebra(QQ, -7, -21)
186
186
Quaternion Algebra (-7, -21) with base ring Rational Field
187
- sage: QuaternionAlgebra(QQ[sqrt(2)], -2,-3) # needs sage.symbolic
187
+ sage: QuaternionAlgebra(QQ[sqrt(2)], -2, -3) # needs sage.symbolic
188
188
Quaternion Algebra (-2, -3) with base ring Number Field in sqrt2
189
189
with defining polynomial x^2 - 2 with sqrt2 = 1.414213562373095?
190
190
@@ -303,7 +303,7 @@ def ngens(self):
303
303
304
304
EXAMPLES::
305
305
306
- sage: Q.<i,j,k> = QuaternionAlgebra(QQ,-5,-2)
306
+ sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -5, -2)
307
307
sage: Q.ngens()
308
308
3
309
309
sage: Q.gens()
@@ -319,11 +319,11 @@ def basis(self):
319
319
320
320
EXAMPLES::
321
321
322
- sage: Q.<i,j,k> = QuaternionAlgebra(QQ,-5,-2)
322
+ sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -5, -2)
323
323
sage: Q.basis()
324
324
(1, i, j, k)
325
325
326
- sage: Q.<xyz,abc,theta> = QuaternionAlgebra(GF(9,'a'),-5,-2)
326
+ sage: Q.<xyz,abc,theta> = QuaternionAlgebra(GF(9,'a'), -5, -2)
327
327
sage: Q.basis()
328
328
(1, xyz, abc, theta)
329
329
@@ -348,7 +348,7 @@ def inner_product_matrix(self):
348
348
349
349
EXAMPLES::
350
350
351
- sage: Q.<i,j,k> = QuaternionAlgebra(-5,-19)
351
+ sage: Q.<i,j,k> = QuaternionAlgebra(-5, -19)
352
352
sage: Q.inner_product_matrix()
353
353
[ 2 0 0 0]
354
354
[ 0 10 0 0]
@@ -367,27 +367,27 @@ def is_commutative(self) -> bool:
367
367
368
368
EXAMPLES::
369
369
370
- sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -3,-7)
370
+ sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -3, -7)
371
371
sage: Q.is_commutative()
372
372
False
373
373
"""
374
374
return False
375
375
376
376
def is_division_algebra (self ) -> bool :
377
- """
377
+ r """
378
378
Return ``True`` if the quaternion algebra is a division algebra (i.e.
379
379
every nonzero element in ``self`` is invertible), and ``False`` if the
380
- quaternion algebra is isomorphic to the 2x2 matrix algebra.
380
+ quaternion algebra is isomorphic to the `2\times 2` matrix algebra.
381
381
382
382
EXAMPLES::
383
383
384
- sage: QuaternionAlgebra(QQ,-5,-2).is_division_algebra()
384
+ sage: QuaternionAlgebra(QQ, -5, -2).is_division_algebra()
385
385
True
386
386
sage: QuaternionAlgebra(1).is_division_algebra()
387
387
False
388
- sage: QuaternionAlgebra(2,9).is_division_algebra()
388
+ sage: QuaternionAlgebra(2, 9).is_division_algebra()
389
389
False
390
- sage: QuaternionAlgebra(RR(2.),1).is_division_algebra()
390
+ sage: QuaternionAlgebra(RR(2.), 1).is_division_algebra()
391
391
Traceback (most recent call last):
392
392
...
393
393
NotImplementedError: base field must be rational numbers
@@ -398,19 +398,19 @@ def is_division_algebra(self) -> bool:
398
398
399
399
def is_matrix_ring (self ) -> bool :
400
400
"""
401
- Return ``True`` if the quaternion algebra is isomorphic to the 2x2
401
+ Return ``True`` if the quaternion algebra is isomorphic to the `2 \t imes 2`
402
402
matrix ring, and ``False`` if ``self`` is a division algebra (i.e.
403
403
every nonzero element in ``self`` is invertible).
404
404
405
405
EXAMPLES::
406
406
407
- sage: QuaternionAlgebra(QQ,-5,-2).is_matrix_ring()
407
+ sage: QuaternionAlgebra(QQ, -5, -2).is_matrix_ring()
408
408
False
409
409
sage: QuaternionAlgebra(1).is_matrix_ring()
410
410
True
411
- sage: QuaternionAlgebra(2,9).is_matrix_ring()
411
+ sage: QuaternionAlgebra(2, 9).is_matrix_ring()
412
412
True
413
- sage: QuaternionAlgebra(RR(2.),1).is_matrix_ring()
413
+ sage: QuaternionAlgebra(RR(2.), 1).is_matrix_ring()
414
414
Traceback (most recent call last):
415
415
...
416
416
NotImplementedError: base field must be rational numbers
@@ -571,7 +571,7 @@ def vector_space(self):
571
571
572
572
EXAMPLES::
573
573
574
- sage: QuaternionAlgebra(-3,19).vector_space()
574
+ sage: QuaternionAlgebra(-3, 19).vector_space()
575
575
Ambient quadratic space of dimension 4 over Rational Field
576
576
Inner product matrix:
577
577
[ 2 0 0 0]
@@ -589,7 +589,7 @@ class QuaternionAlgebra_ab(QuaternionAlgebra):
589
589
"""
590
590
A quaternion algebra of the form `(a, b)_K`.
591
591
592
- See `` QuaternionAlgebra` ` for many more examples.
592
+ See :class:` QuaternionAlgebra` for many more examples.
593
593
594
594
INPUT:
595
595
@@ -940,7 +940,8 @@ def order_with_level(self, level):
940
940
sage: A.<i,j,k> = QuaternionAlgebra(5)
941
941
sage: level = 2 * 5 * 17
942
942
sage: O = A.order_with_level(level); O
943
- Order of Quaternion Algebra (-2, -5) with base ring Rational Field with basis (1/2 + 1/2*j + 7/2*k, 1/2*i + 19/2*k, j + 7*k, 17*k)
943
+ Order of Quaternion Algebra (-2, -5) with base ring Rational Field
944
+ with basis (1/2 + 1/2*j + 7/2*k, 1/2*i + 19/2*k, j + 7*k, 17*k)
944
945
945
946
Check that the order has the right index in the maximal order::
946
947
@@ -1019,12 +1020,12 @@ def is_definite(self):
1019
1020
1020
1021
EXAMPLES::
1021
1022
1022
- sage: QuaternionAlgebra(QQ,-5,-2).is_definite()
1023
+ sage: QuaternionAlgebra(QQ, -5, -2).is_definite()
1023
1024
True
1024
1025
sage: QuaternionAlgebra(1).is_definite()
1025
1026
False
1026
1027
1027
- sage: QuaternionAlgebra(RR(2.),1).is_definite()
1028
+ sage: QuaternionAlgebra(RR(2.), 1).is_definite()
1028
1029
Traceback (most recent call last):
1029
1030
...
1030
1031
ValueError: base field must be rational numbers
@@ -1040,9 +1041,9 @@ def __eq__(self, other):
1040
1041
1041
1042
EXAMPLES::
1042
1043
1043
- sage: QuaternionAlgebra(-1,-7) == QuaternionAlgebra(-1,-7)
1044
+ sage: QuaternionAlgebra(-1, -7) == QuaternionAlgebra(-1, -7)
1044
1045
True
1045
- sage: QuaternionAlgebra(-1,-7) == QuaternionAlgebra(-1,-5)
1046
+ sage: QuaternionAlgebra(-1, -7) == QuaternionAlgebra(-1, -5)
1046
1047
False
1047
1048
"""
1048
1049
if not isinstance (other , QuaternionAlgebra_abstract ):
@@ -1056,9 +1057,9 @@ def __ne__(self, other):
1056
1057
1057
1058
EXAMPLES::
1058
1059
1059
- sage: QuaternionAlgebra(-1,-7) != QuaternionAlgebra(-1,-7)
1060
+ sage: QuaternionAlgebra(-1, -7) != QuaternionAlgebra(-1, -7)
1060
1061
False
1061
- sage: QuaternionAlgebra(-1,-7) != QuaternionAlgebra(-1,-5)
1062
+ sage: QuaternionAlgebra(-1, -7) != QuaternionAlgebra(-1, -5)
1062
1063
True
1063
1064
"""
1064
1065
return not self .__eq__ (other )
@@ -1069,9 +1070,9 @@ def __hash__(self):
1069
1070
1070
1071
EXAMPLES::
1071
1072
1072
- sage: h1 = hash(QuaternionAlgebra(-1,-7))
1073
- sage: h2 = hash(QuaternionAlgebra(-1,-7))
1074
- sage: h3 = hash(QuaternionAlgebra(-1,-5))
1073
+ sage: h1 = hash(QuaternionAlgebra(-1, -7))
1074
+ sage: h2 = hash(QuaternionAlgebra(-1, -7))
1075
+ sage: h3 = hash(QuaternionAlgebra(-1, -5))
1075
1076
sage: h1 == h2 and h1 != h3
1076
1077
True
1077
1078
"""
@@ -1087,7 +1088,7 @@ def gen(self, i=0):
1087
1088
1088
1089
EXAMPLES::
1089
1090
1090
- sage: Q.<ii,jj,kk> = QuaternionAlgebra(QQ,-1,-2); Q
1091
+ sage: Q.<ii,jj,kk> = QuaternionAlgebra(QQ, -1, -2); Q
1091
1092
Quaternion Algebra (-1, -2) with base ring Rational Field
1092
1093
sage: Q.gen(0)
1093
1094
ii
@@ -1106,7 +1107,7 @@ def gens(self) -> tuple:
1106
1107
1107
1108
EXAMPLES::
1108
1109
1109
- sage: Q.<ii,jj,kk> = QuaternionAlgebra(QQ,-1,-2); Q
1110
+ sage: Q.<ii,jj,kk> = QuaternionAlgebra(QQ, -1, -2); Q
1110
1111
Quaternion Algebra (-1, -2) with base ring Rational Field
1111
1112
sage: Q.gens()
1112
1113
(ii, jj, kk)
@@ -1119,7 +1120,7 @@ def _repr_(self):
1119
1120
1120
1121
TESTS::
1121
1122
1122
- sage: Q.<i,j,k> = QuaternionAlgebra(QQ,-5,-2)
1123
+ sage: Q.<i,j,k> = QuaternionAlgebra(QQ, -5, -2)
1123
1124
sage: type(Q)
1124
1125
<class 'sage.algebras.quatalg.quaternion_algebra.QuaternionAlgebra_ab_with_category'>
1125
1126
sage: Q._repr_()
@@ -1142,14 +1143,14 @@ def inner_product_matrix(self):
1142
1143
1143
1144
EXAMPLES::
1144
1145
1145
- sage: Q.<i,j,k> = QuaternionAlgebra(-5,-19)
1146
+ sage: Q.<i,j,k> = QuaternionAlgebra(-5, -19)
1146
1147
sage: Q.inner_product_matrix()
1147
1148
[ 2 0 0 0]
1148
1149
[ 0 10 0 0]
1149
1150
[ 0 0 38 0]
1150
1151
[ 0 0 0 190]
1151
1152
1152
- sage: R.<a,b> = QQ[]; Q.<i,j,k> = QuaternionAlgebra(Frac(R),a, b)
1153
+ sage: R.<a,b> = QQ[]; Q.<i,j,k> = QuaternionAlgebra(Frac(R), a, b)
1153
1154
sage: Q.inner_product_matrix()
1154
1155
[ 2 0 0 0]
1155
1156
[ 0 -2*a 0 0]
@@ -1167,7 +1168,7 @@ def discriminant(self):
1167
1168
1168
1169
EXAMPLES::
1169
1170
1170
- sage: QuaternionAlgebra(210,-22).discriminant()
1171
+ sage: QuaternionAlgebra(210, -22).discriminant()
1171
1172
210
1172
1173
sage: QuaternionAlgebra(19).discriminant()
1173
1174
19
@@ -1219,12 +1220,12 @@ def ramified_primes(self):
1219
1220
if hilbert_symbol (self ._a , self ._b , p ) == - 1 )
1220
1221
1221
1222
def is_isomorphic (self , A ) -> bool :
1222
- """
1223
- Return ``True`` if (and only if) ``self`` and ``A`` are isomorphic quaternion algebras over Q .
1223
+ r """
1224
+ Return ``True`` if (and only if) ``self`` and ``A`` are isomorphic quaternion algebras over `\QQ` .
1224
1225
1225
1226
INPUT:
1226
1227
1227
- - ``A`` -- a quaternion algebra defined over the rationals Q
1228
+ - ``A`` -- a quaternion algebra defined over the rationals `\QQ`
1228
1229
1229
1230
EXAMPLES::
1230
1231
@@ -1249,7 +1250,7 @@ def _magma_init_(self, magma):
1249
1250
1250
1251
EXAMPLES::
1251
1252
1252
- sage: Q = QuaternionAlgebra(-1,-1); Q
1253
+ sage: Q = QuaternionAlgebra(-1, -1); Q
1253
1254
Quaternion Algebra (-1, -1) with base ring Rational Field
1254
1255
sage: Q._magma_init_(magma) # optional - magma
1255
1256
'QuaternionAlgebra(_sage_[...],-1/1,-1/1)'
@@ -1262,7 +1263,7 @@ def _magma_init_(self, magma):
1262
1263
1263
1264
A more complicated example involving a quaternion algebra over a number field::
1264
1265
1265
- sage: K.<a> = QQ[sqrt(2)]; Q = QuaternionAlgebra(K,-1,a); Q # needs sage.symbolic
1266
+ sage: K.<a> = QQ[sqrt(2)]; Q = QuaternionAlgebra(K, -1, a); Q # needs sage.symbolic
1266
1267
Quaternion Algebra (-1, sqrt2) with base ring Number Field in sqrt2
1267
1268
with defining polynomial x^2 - 2 with sqrt2 = 1.414213562373095?
1268
1269
sage: magma(Q) # optional - magma, needs sage.symbolic
@@ -1287,7 +1288,7 @@ def quaternion_order(self, basis, check=True):
1287
1288
1288
1289
EXAMPLES::
1289
1290
1290
- sage: Q.<i,j,k> = QuaternionAlgebra(-11,-1)
1291
+ sage: Q.<i,j,k> = QuaternionAlgebra(-11, -1)
1291
1292
sage: Q.quaternion_order([1,i,j,k])
1292
1293
Order of Quaternion Algebra (-11, -1) with base ring Rational Field
1293
1294
with basis (1, i, j, k)
@@ -1386,7 +1387,7 @@ def modp_splitting_data(self, p):
1386
1387
1387
1388
The following is a good test because of the asserts in the code::
1388
1389
1389
- sage: v = [Q.modp_splitting_data(p) for p in primes(20,1000)]
1390
+ sage: v = [Q.modp_splitting_data(p) for p in primes(20, 1000)]
1390
1391
1391
1392
Proper error handling::
1392
1393
@@ -1482,7 +1483,7 @@ def unpickle_QuaternionAlgebra_v0(*key):
1482
1483
1483
1484
EXAMPLES::
1484
1485
1485
- sage: Q = QuaternionAlgebra(-5,-19)
1486
+ sage: Q = QuaternionAlgebra(-5, -19)
1486
1487
sage: t = (QQ, -5, -19, ('i', 'j', 'k'))
1487
1488
sage: sage.algebras.quatalg.quaternion_algebra.unpickle_QuaternionAlgebra_v0(*t)
1488
1489
Quaternion Algebra (-5, -19) with base ring Rational Field
@@ -1501,9 +1502,10 @@ class QuaternionOrder(Parent):
1501
1502
1502
1503
EXAMPLES::
1503
1504
1504
- sage: QuaternionAlgebra(-1,-7).maximal_order()
1505
- Order of Quaternion Algebra (-1, -7) with base ring Rational Field with basis (1/2 + 1/2*j, 1/2*i + 1/2*k, j, k)
1506
- sage: type(QuaternionAlgebra(-1,-7).maximal_order())
1505
+ sage: QuaternionAlgebra(-1, -7).maximal_order()
1506
+ Order of Quaternion Algebra (-1, -7) with base ring Rational Field
1507
+ with basis (1/2 + 1/2*j, 1/2*i + 1/2*k, j, k)
1508
+ sage: type(QuaternionAlgebra(-1, -7).maximal_order())
1507
1509
<class 'sage.algebras.quatalg.quaternion_algebra.QuaternionOrder_with_category'>
1508
1510
"""
1509
1511
def __init__ (self , A , basis , check = True ):
@@ -1521,7 +1523,7 @@ def __init__(self, A, basis, check=True):
1521
1523
1522
1524
EXAMPLES::
1523
1525
1524
- sage: A.<i,j,k> = QuaternionAlgebra(-3,-5)
1526
+ sage: A.<i,j,k> = QuaternionAlgebra(-3, -5)
1525
1527
sage: sage.algebras.quatalg.quaternion_algebra.QuaternionOrder(A, [1,i,j,k])
1526
1528
Order of Quaternion Algebra (-3, -5) with base ring Rational Field with basis (1, i, j, k)
1527
1529
sage: R = sage.algebras.quatalg.quaternion_algebra.QuaternionOrder(A, [1,2*i,2*j,2*k]); R
@@ -1532,26 +1534,27 @@ def __init__(self, A, basis, check=True):
1532
1534
Over QQ and number fields it is checked whether the given
1533
1535
basis actually gives an order (as a module over the maximal order)::
1534
1536
1535
- sage: A.<i,j,k> = QuaternionAlgebra(-1,-1)
1536
- sage: A.quaternion_order([1,i,j, i-j])
1537
+ sage: A.<i,j,k> = QuaternionAlgebra(-1, -1)
1538
+ sage: A.quaternion_order([1, i, j, i-j])
1537
1539
Traceback (most recent call last):
1538
1540
...
1539
1541
ValueError: basis must have rank 4
1540
- sage: A.quaternion_order([2,i,j, k])
1542
+ sage: A.quaternion_order([2, i, j, k])
1541
1543
Traceback (most recent call last):
1542
1544
...
1543
1545
ValueError: lattice must contain 1
1544
- sage: A.quaternion_order([1,i/2,j/2,k/2])
1546
+ sage: A.quaternion_order([1, i/2, j/2, k/2])
1545
1547
Traceback (most recent call last):
1546
1548
...
1547
1549
ValueError: given lattice must be a ring
1548
1550
1549
1551
sage: K = QuadraticField(10)
1550
- sage: A.<i,j,k> = QuaternionAlgebra(K,-1,-1)
1551
- sage: A.quaternion_order([1,i,j, k])
1552
+ sage: A.<i,j,k> = QuaternionAlgebra(K, -1, -1)
1553
+ sage: A.quaternion_order([1, i, j, k])
1552
1554
Order of Quaternion Algebra (-1, -1) with base ring Number Field in a
1553
- with defining polynomial x^2 - 10 with a = 3.162277660168380? with basis (1, i, j, k)
1554
- sage: A.quaternion_order([1,i/2,j,k])
1555
+ with defining polynomial x^2 - 10 with a = 3.162277660168380?
1556
+ with basis (1, i, j, k)
1557
+ sage: A.quaternion_order([1, i/2, j, k])
1555
1558
Traceback (most recent call last):
1556
1559
...
1557
1560
ValueError: given lattice must be a ring
@@ -1626,9 +1629,9 @@ def _element_constructor_(self, x):
1626
1629
1627
1630
EXAMPLES::
1628
1631
1629
- sage: Q.<i,j,k> = QuaternionAlgebra(-1,-19)
1630
- sage: O = Q.quaternion_order([1,i,j, k])
1631
- sage: O(1+ i)
1632
+ sage: Q.<i,j,k> = QuaternionAlgebra(-1, -19)
1633
+ sage: O = Q.quaternion_order([1, i, j, k])
1634
+ sage: O(1 + i)
1632
1635
1 + i
1633
1636
sage: O(1/2)
1634
1637
Traceback (most recent call last):
@@ -1656,7 +1659,7 @@ def one(self):
1656
1659
1657
1660
EXAMPLES::
1658
1661
1659
- sage: QuaternionAlgebra(-1,-7).maximal_order().one()
1662
+ sage: QuaternionAlgebra(-1, -7).maximal_order().one()
1660
1663
1
1661
1664
"""
1662
1665
return self .quaternion_algebra ().one ()
@@ -1667,7 +1670,7 @@ def gens(self):
1667
1670
1668
1671
EXAMPLES::
1669
1672
1670
- sage: QuaternionAlgebra(-1,-7).maximal_order().gens()
1673
+ sage: QuaternionAlgebra(-1, -7).maximal_order().gens()
1671
1674
(1/2 + 1/2*j, 1/2*i + 1/2*k, j, k)
1672
1675
"""
1673
1676
return self .__basis
@@ -1678,7 +1681,7 @@ def ngens(self):
1678
1681
1679
1682
EXAMPLES::
1680
1683
1681
- sage: QuaternionAlgebra(-1,-7).maximal_order().ngens()
1684
+ sage: QuaternionAlgebra(-1, -7).maximal_order().ngens()
1682
1685
4
1683
1686
"""
1684
1687
return 4
@@ -1693,7 +1696,7 @@ def gen(self, n):
1693
1696
1694
1697
EXAMPLES::
1695
1698
1696
- sage: R = QuaternionAlgebra(-11,-1).maximal_order(); R
1699
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order(); R
1697
1700
Order of Quaternion Algebra (-11, -1) with base ring Rational Field
1698
1701
with basis (1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
1699
1702
sage: R.gen(0)
@@ -1732,10 +1735,10 @@ def __richcmp__(self, other, op):
1732
1735
1733
1736
sage: B = QuaternionAlgebra(-1, -11)
1734
1737
sage: i,j,k = B.gens()
1735
- sage: O = B.quaternion_order([1,i,j, k])
1738
+ sage: O = B.quaternion_order([1, i, j, k])
1736
1739
sage: O == O
1737
1740
True
1738
- sage: R = B.quaternion_order([1,i, (i+j)/2,(1+k)/2])
1741
+ sage: R = B.quaternion_order([1, i, (i+j)/2, (1+k)/2])
1739
1742
sage: O <= R # indirect doctest
1740
1743
True
1741
1744
sage: O >= R
@@ -1766,9 +1769,9 @@ def __hash__(self):
1766
1769
1767
1770
EXAMPLES::
1768
1771
1769
- sage: h1 = hash(QuaternionAlgebra(-1,-7).maximal_order())
1770
- sage: h2 = hash(QuaternionAlgebra(-1,-7).maximal_order())
1771
- sage: h3 = hash(QuaternionAlgebra(-1,-5).maximal_order())
1772
+ sage: h1 = hash(QuaternionAlgebra(-1, -7).maximal_order())
1773
+ sage: h2 = hash(QuaternionAlgebra(-1, -7).maximal_order())
1774
+ sage: h3 = hash(QuaternionAlgebra(-1, -5).maximal_order())
1772
1775
sage: h1 == h2 and h1 != h3
1773
1776
True
1774
1777
"""
@@ -1780,7 +1783,7 @@ def basis(self):
1780
1783
1781
1784
EXAMPLES::
1782
1785
1783
- sage: QuaternionAlgebra(-11,-1).maximal_order().basis()
1786
+ sage: QuaternionAlgebra(-11, -1).maximal_order().basis()
1784
1787
(1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
1785
1788
"""
1786
1789
return self .__basis
@@ -1802,9 +1805,9 @@ def _repr_(self):
1802
1805
1803
1806
EXAMPLES::
1804
1807
1805
- sage: QuaternionAlgebra(-11,-1).maximal_order()._repr_()
1808
+ sage: QuaternionAlgebra(-11, -1).maximal_order()._repr_()
1806
1809
'Order of Quaternion Algebra (-11, -1) with base ring Rational Field with basis (1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)'
1807
- sage: QuaternionAlgebra(-11,-1).maximal_order()
1810
+ sage: QuaternionAlgebra(-11, -1).maximal_order()
1808
1811
Order of Quaternion Algebra (-11, -1) with base ring Rational Field with basis (1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
1809
1812
"""
1810
1813
return 'Order of %s with basis %s' % (self .quaternion_algebra (), self .basis ())
@@ -1825,9 +1828,9 @@ def random_element(self, *args, **kwds):
1825
1828
1826
1829
EXAMPLES::
1827
1830
1828
- sage: QuaternionAlgebra(-11,-1).maximal_order().random_element() # random
1831
+ sage: QuaternionAlgebra(-11, -1).maximal_order().random_element() # random
1829
1832
-4 - 4*i + j - k
1830
- sage: QuaternionAlgebra(-11,-1).maximal_order().random_element(-10,10) # random
1833
+ sage: QuaternionAlgebra(-11, -1).maximal_order().random_element(-10, 10) # random
1831
1834
-9/2 - 7/2*i - 7/2*j - 3/2*k
1832
1835
"""
1833
1836
return sum (ZZ .random_element (* args , ** kwds ) * b for b in self .basis ())
@@ -1844,21 +1847,21 @@ def intersection(self, other):
1844
1847
1845
1848
EXAMPLES::
1846
1849
1847
- sage: R = QuaternionAlgebra(-11,-1).maximal_order()
1850
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order()
1848
1851
sage: R.intersection(R)
1849
1852
Order of Quaternion Algebra (-11, -1) with base ring Rational Field
1850
1853
with basis (1/2 + 1/2*i, i, 1/2*j + 1/2*k, k)
1851
1854
1852
1855
We intersect various orders in the quaternion algebra ramified at 11::
1853
1856
1854
- sage: B = BrandtModule(11,3)
1857
+ sage: B = BrandtModule(11, 3)
1855
1858
sage: R = B.maximal_order(); S = B.order_of_level_N()
1856
1859
sage: R.intersection(S)
1857
1860
Order of Quaternion Algebra (-1, -11) with base ring Rational Field
1858
1861
with basis (1/2 + 1/2*j, 1/2*i + 5/2*k, j, 3*k)
1859
1862
sage: R.intersection(S) == S
1860
1863
True
1861
- sage: B = BrandtModule(11,5)
1864
+ sage: B = BrandtModule(11, 5)
1862
1865
sage: T = B.order_of_level_N()
1863
1866
sage: S.intersection(T)
1864
1867
Order of Quaternion Algebra (-1, -11) with base ring Rational Field
@@ -1890,7 +1893,7 @@ def free_module(self):
1890
1893
1891
1894
EXAMPLES::
1892
1895
1893
- sage: R = QuaternionAlgebra(-11,-1).maximal_order()
1896
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order()
1894
1897
sage: R.basis()
1895
1898
(1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
1896
1899
sage: R.free_module()
@@ -1916,9 +1919,9 @@ def discriminant(self):
1916
1919
1917
1920
EXAMPLES::
1918
1921
1919
- sage: QuaternionAlgebra(-11,-1).maximal_order().discriminant()
1922
+ sage: QuaternionAlgebra(-11, -1).maximal_order().discriminant()
1920
1923
11
1921
- sage: S = BrandtModule(11,5).order_of_level_N()
1924
+ sage: S = BrandtModule(11, 5).order_of_level_N()
1922
1925
sage: S.discriminant()
1923
1926
55
1924
1927
sage: type(S.discriminant())
@@ -2045,7 +2048,7 @@ def left_ideal(self, gens, check=True, *, is_basis=False):
2045
2048
2046
2049
EXAMPLES::
2047
2050
2048
- sage: Q.<i,j,k> = QuaternionAlgebra(-11,-1)
2051
+ sage: Q.<i,j,k> = QuaternionAlgebra(-11, -1)
2049
2052
sage: R = Q.maximal_order()
2050
2053
sage: R.left_ideal([a*2 for a in R.basis()], is_basis=True)
2051
2054
Fractional ideal (1 + i, 2*i, j + k, 2*k)
@@ -2055,9 +2058,9 @@ def left_ideal(self, gens, check=True, *, is_basis=False):
2055
2058
It is also possible to pass a generating set (rather than a basis),
2056
2059
or a single generator::
2057
2060
2058
- sage: R.left_ideal([i+ j])
2061
+ sage: R.left_ideal([i + j])
2059
2062
Fractional ideal (1/2 + 1/2*i + 1/2*j + 13/2*k, i + j, 6*j + 6*k, 12*k)
2060
- sage: R.left_ideal(i+ j)
2063
+ sage: R.left_ideal(i + j)
2061
2064
Fractional ideal (1/2 + 1/2*i + 1/2*j + 13/2*k, i + j, 6*j + 6*k, 12*k)
2062
2065
sage: R.left_ideal([2, 1+j]) == R*2 + R*(1+j)
2063
2066
True
@@ -2088,7 +2091,7 @@ def right_ideal(self, gens, check=True, *, is_basis=False):
2088
2091
2089
2092
EXAMPLES::
2090
2093
2091
- sage: Q.<i,j,k> = QuaternionAlgebra(-11,-1)
2094
+ sage: Q.<i,j,k> = QuaternionAlgebra(-11, -1)
2092
2095
sage: R = Q.maximal_order()
2093
2096
sage: R.right_ideal([2*a for a in R.basis()], is_basis=True)
2094
2097
Fractional ideal (1 + i, 2*i, j + k, 2*k)
@@ -2123,7 +2126,7 @@ def unit_ideal(self):
2123
2126
2124
2127
EXAMPLES::
2125
2128
2126
- sage: R = QuaternionAlgebra(-11,-1).maximal_order()
2129
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order()
2127
2130
sage: I = R.unit_ideal(); I
2128
2131
Fractional ideal (1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
2129
2132
"""
@@ -2140,7 +2143,7 @@ def basis_matrix(self):
2140
2143
2141
2144
EXAMPLES::
2142
2145
2143
- sage: O = QuaternionAlgebra(-11,-1).maximal_order()
2146
+ sage: O = QuaternionAlgebra(-11, -1).maximal_order()
2144
2147
sage: O.basis()
2145
2148
(1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
2146
2149
sage: O.basis_matrix()
@@ -2152,8 +2155,8 @@ def basis_matrix(self):
2152
2155
Note that the returned matrix is *not* necessarily the same as
2153
2156
the basis matrix of the :meth:`unit_ideal()`::
2154
2157
2155
- sage: Q.<i,j,k> = QuaternionAlgebra(-1,-11)
2156
- sage: O = Q.quaternion_order([j,i, -1,k])
2158
+ sage: Q.<i,j,k> = QuaternionAlgebra(-1, -11)
2159
+ sage: O = Q.quaternion_order([j, i, -1, k])
2157
2160
sage: O.basis_matrix()
2158
2161
[ 0 0 1 0]
2159
2162
[ 0 1 0 0]
@@ -2174,7 +2177,7 @@ def __mul__(self, other):
2174
2177
2175
2178
EXAMPLES::
2176
2179
2177
- sage: Q.<i,j,k> = QuaternionAlgebra(-1,-11)
2180
+ sage: Q.<i,j,k> = QuaternionAlgebra(-1, -11)
2178
2181
sage: O = Q.maximal_order()
2179
2182
sage: I = O*j; I
2180
2183
Fractional ideal (-11/2 + 1/2*j, -11/2*i + 1/2*k, -11, -11*i)
@@ -2191,7 +2194,7 @@ def __add__(self, other):
2191
2194
2192
2195
EXAMPLES::
2193
2196
2194
- sage: Q.<i,j,k> = QuaternionAlgebra(-1,-11)
2197
+ sage: Q.<i,j,k> = QuaternionAlgebra(-1, -11)
2195
2198
sage: O = Q.maximal_order()
2196
2199
sage: I = O + O*((j-3)/5); I
2197
2200
Fractional ideal (1/10 + 3/10*j, 1/10*i + 3/10*k, j, k)
@@ -2206,7 +2209,7 @@ def quadratic_form(self):
2206
2209
2207
2210
EXAMPLES::
2208
2211
2209
- sage: R = BrandtModule(11,13).order_of_level_N()
2212
+ sage: R = BrandtModule(11, 13).order_of_level_N()
2210
2213
sage: Q = R.quadratic_form(); Q
2211
2214
Quadratic form in 4 variables over Rational Field with coefficients:
2212
2215
[ 14 253 55 286 ]
@@ -2224,7 +2227,7 @@ def ternary_quadratic_form(self, include_basis=False):
2224
2227
2225
2228
INPUT:
2226
2229
2227
- - ``include_basis`` -- boolean (default: ``False``); if ``True`` also
2230
+ - ``include_basis`` -- boolean (default: ``False``); if ``True``, also
2228
2231
return a basis for the dimension 3 subspace `G`
2229
2232
2230
2233
OUTPUT: QuadraticForm
@@ -2249,7 +2252,7 @@ def ternary_quadratic_form(self, include_basis=False):
2249
2252
2250
2253
EXAMPLES::
2251
2254
2252
- sage: R = BrandtModule(11,13).order_of_level_N()
2255
+ sage: R = BrandtModule(11, 13).order_of_level_N()
2253
2256
sage: Q = R.ternary_quadratic_form(); Q
2254
2257
Quadratic form in 3 variables over Rational Field with coefficients:
2255
2258
[ 5820 1012 13156 ]
@@ -2313,8 +2316,10 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2313
2316
sage: iso = O0.isomorphism_to(O1)
2314
2317
sage: iso
2315
2318
Ring morphism:
2316
- From: Order of Quaternion Algebra (-1, -19) with base ring Rational Field with basis (1, i, 1/2*i + 1/2*j, 1/2 + 1/2*k)
2317
- To: Order of Quaternion Algebra (-1, -19) with base ring Rational Field with basis (1, 667*i, 1/2 + 9*i + 1/2*j, 222075/1334*i + 333/667*j + 1/1334*k)
2319
+ From: Order of Quaternion Algebra (-1, -19) with base ring Rational Field with
2320
+ basis (1, i, 1/2*i + 1/2*j, 1/2 + 1/2*k)
2321
+ To: Order of Quaternion Algebra (-1, -19) with base ring Rational Field with
2322
+ basis (1, 667*i, 1/2 + 9*i + 1/2*j, 222075/1334*i + 333/667*j + 1/1334*k)
2318
2323
Defn: i |--> 629/667*i + 36/667*j - 36/667*k
2319
2324
j |--> 684/667*i - 648/667*j - 19/667*k
2320
2325
k |--> -684/667*i - 19/667*j - 648/667*k
@@ -2381,7 +2386,7 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2381
2386
2382
2387
Test error cases::
2383
2388
2384
- sage: Quat.<i,j,k> = QuaternionAlgebra(-1,-11)
2389
+ sage: Quat.<i,j,k> = QuaternionAlgebra(-1, -11)
2385
2390
sage: O = Quat.maximal_order()
2386
2391
sage: O.isomorphism_to('potato')
2387
2392
Traceback (most recent call last):
@@ -2390,8 +2395,8 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2390
2395
2391
2396
::
2392
2397
2393
- sage: Quat1.<i1,j1,k1> = QuaternionAlgebra(-1,-11)
2394
- sage: Quat2.<i2,j2,k2> = QuaternionAlgebra(-3,-11)
2398
+ sage: Quat1.<i1,j1,k1> = QuaternionAlgebra(-1, -11)
2399
+ sage: Quat2.<i2,j2,k2> = QuaternionAlgebra(-3, -11)
2395
2400
sage: Quat1.discriminant() == Quat2.discriminant() # isomorphic
2396
2401
True
2397
2402
sage: O1 = Quat1.maximal_order()
@@ -2403,7 +2408,7 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2403
2408
2404
2409
::
2405
2410
2406
- sage: Quat.<i,j,k> = QuaternionAlgebra(7,11)
2411
+ sage: Quat.<i,j,k> = QuaternionAlgebra(7, 11)
2407
2412
sage: O1 = Quat.maximal_order()
2408
2413
sage: O2 = (O1 * (i+j)).right_order()
2409
2414
sage: O1.isomorphism_to(O2)
@@ -2413,7 +2418,7 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2413
2418
2414
2419
::
2415
2420
2416
- sage: Quat.<i,j,k> = QuaternionAlgebra(-1,-11)
2421
+ sage: Quat.<i,j,k> = QuaternionAlgebra(-1, -11)
2417
2422
sage: O1 = Quat.quaternion_order([1, i, j, k])
2418
2423
sage: O2 = Quat.quaternion_order([1,-i, j,-k])
2419
2424
sage: O1.isomorphism_to(O2)
@@ -2423,7 +2428,7 @@ def isomorphism_to(self, other, *, conjugator=False, B=10):
2423
2428
2424
2429
::
2425
2430
2426
- sage: Quat.<i,j,k> = QuaternionAlgebra(-1,-11)
2431
+ sage: Quat.<i,j,k> = QuaternionAlgebra(-1, -11)
2427
2432
sage: O1 = Quat.quaternion_order([1, i, (i+j)/2, (1+k)/2])
2428
2433
sage: O2 = Quat.quaternion_order([1, (2+i+k)/4, (-11*i+2*j+k)/4, (-5*i+k)/3])
2429
2434
sage: O1.isomorphism_to(O2)
@@ -2536,15 +2541,15 @@ def __init__(self, Q, basis, left_order=None, right_order=None, check=True):
2536
2541
"""
2537
2542
EXAMPLES::
2538
2543
2539
- sage: R = QuaternionAlgebra(-11,-1).maximal_order()
2544
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order()
2540
2545
sage: R.right_ideal(R.basis())
2541
2546
Fractional ideal (1/2 + 1/2*i, i, 1/2*j + 1/2*k, k)
2542
2547
sage: R.right_ideal(tuple(R.basis()), check=False, is_basis=True)
2543
2548
Fractional ideal (1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
2544
2549
2545
2550
TESTS::
2546
2551
2547
- sage: QuaternionAlgebra(-11,-1).maximal_order().unit_ideal().gens()
2552
+ sage: QuaternionAlgebra(-11, -1).maximal_order().unit_ideal().gens()
2548
2553
(1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
2549
2554
2550
2555
Check that :issue:`31582` is fixed::
@@ -2583,7 +2588,7 @@ def scale(self, alpha, left=False):
2583
2588
2584
2589
EXAMPLES::
2585
2590
2586
- sage: B = BrandtModule(5,37); I = B.right_ideals()[0]
2591
+ sage: B = BrandtModule(5, 37); I = B.right_ideals()[0]
2587
2592
sage: i,j,k = B.quaternion_algebra().gens(); I
2588
2593
Fractional ideal (2 + 2*j + 106*k, i + 2*j + 105*k, 4*j + 64*k, 148*k)
2589
2594
sage: I.scale(i)
@@ -2606,7 +2611,7 @@ def scale(self, alpha, left=False):
2606
2611
2607
2612
Check that :issue:`32726` is fixed::
2608
2613
2609
- sage: Q.<i,j,k> = QuaternionAlgebra(-1,-19)
2614
+ sage: Q.<i,j,k> = QuaternionAlgebra(-1, -19)
2610
2615
sage: I = Q.ideal([1,i,j,k])
2611
2616
sage: _ = I.left_order(), I.right_order() # cache
2612
2617
sage: span = lambda L: L.basis_matrix().row_module(ZZ)
@@ -2761,7 +2766,7 @@ def right_order(self):
2761
2766
corresponding left orders, then take ideals in the left orders
2762
2767
and from those compute the right order again::
2763
2768
2764
- sage: B = BrandtModule(11,19); R = B.right_ideals()
2769
+ sage: B = BrandtModule(11, 19); R = B.right_ideals()
2765
2770
sage: O = [r.left_order() for r in R]
2766
2771
sage: J = [O[i].left_ideal(R[i].basis()) for i in range(len(R))]
2767
2772
sage: len(set(J))
@@ -2810,7 +2815,7 @@ def basis(self):
2810
2815
2811
2816
EXAMPLES::
2812
2817
2813
- sage: QuaternionAlgebra(-11,-1).maximal_order().unit_ideal().basis()
2818
+ sage: QuaternionAlgebra(-11, -1).maximal_order().unit_ideal().basis()
2814
2819
(1/2 + 1/2*i, 1/2*j - 1/2*k, i, -k)
2815
2820
"""
2816
2821
return self .gens ()
@@ -2842,12 +2847,12 @@ def _richcmp_(self, right, op):
2842
2847
2843
2848
TESTS::
2844
2849
2845
- sage: B = QuaternionAlgebra(QQ,-1,-11)
2850
+ sage: B = QuaternionAlgebra(QQ, -1, -11)
2846
2851
sage: i,j,k = B.gens()
2847
- sage: I = B.ideal([1,i,j, i*j])
2852
+ sage: I = B.ideal([1, i, j, i*j])
2848
2853
sage: I == I
2849
2854
True
2850
- sage: O = B.ideal([1,i, (i+j)/2,(1+i*j)/2])
2855
+ sage: O = B.ideal([1, i, (i+j)/2, (1+i*j)/2])
2851
2856
sage: I <= O
2852
2857
True
2853
2858
sage: I >= O
@@ -2875,13 +2880,13 @@ def __hash__(self):
2875
2880
2876
2881
EXAMPLES::
2877
2882
2878
- sage: I = QuaternionAlgebra(-11,-1).maximal_order().unit_ideal()
2883
+ sage: I = QuaternionAlgebra(-11, -1).maximal_order().unit_ideal()
2879
2884
sage: hash(I) == hash(I)
2880
2885
True
2881
2886
2882
2887
TESTS::
2883
2888
2884
- sage: R = QuaternionAlgebra(-11,-1).maximal_order()
2889
+ sage: R = QuaternionAlgebra(-11, -1).maximal_order()
2885
2890
sage: H = hash(R.right_ideal(R.basis()))
2886
2891
"""
2887
2892
return hash (self .gens ())
@@ -2893,15 +2898,15 @@ def basis_matrix(self):
2893
2898
matrix with rational entries.
2894
2899
2895
2900
If `Q` is the ambient quaternion algebra, then the `\ZZ`-span of
2896
- the rows of `M` viewed as linear combinations of Q.basis() =
2901
+ the rows of `M` viewed as linear combinations of `` Q.basis()`` =
2897
2902
`[1,i,j,k]` is the fractional ideal ``self``. Also,
2898
2903
``M * M.denominator()`` is an integer matrix in Hermite normal form.
2899
2904
2900
2905
OUTPUT: matrix over `\QQ`
2901
2906
2902
2907
EXAMPLES::
2903
2908
2904
- sage: QuaternionAlgebra(-11,-1).maximal_order().unit_ideal().basis_matrix()
2909
+ sage: QuaternionAlgebra(-11, -1).maximal_order().unit_ideal().basis_matrix()
2905
2910
[1/2 1/2 0 0]
2906
2911
[ 0 1 0 0]
2907
2912
[ 0 0 1/2 1/2]
@@ -2921,7 +2926,7 @@ def reduced_basis(self):
2921
2926
2922
2927
EXAMPLES::
2923
2928
2924
- sage: B = BrandtModule(2,37); I = B.right_ideals()[0]
2929
+ sage: B = BrandtModule(2, 37); I = B.right_ideals()[0]
2925
2930
sage: I
2926
2931
Fractional ideal (2 + 2*i + 2*j + 2*k, 4*i + 108*k, 4*j + 44*k, 148*k)
2927
2932
sage: I.reduced_basis()
@@ -3018,9 +3023,10 @@ def minimal_element(self):
3018
3023
3019
3024
EXAMPLES::
3020
3025
3021
- sage: Quat.<i,j,k> = QuaternionAlgebra(-3,-101)
3026
+ sage: Quat.<i,j,k> = QuaternionAlgebra(-3, -101)
3022
3027
sage: O = Quat.maximal_order(); O
3023
- Order of Quaternion Algebra (-3, -101) with base ring Rational Field with basis (1/2 + 1/2*i, 1/2*j - 1/2*k, -1/3*i + 1/3*k, -k)
3028
+ Order of Quaternion Algebra (-3, -101) with base ring Rational Field
3029
+ with basis (1/2 + 1/2*i, 1/2*j - 1/2*k, -1/3*i + 1/3*k, -k)
3024
3030
sage: (O * 5).minimal_element()
3025
3031
5/2 + 5/2*i
3026
3032
sage: alpha = 1/2 + 1/6*i + j + 55/3*k
@@ -3040,7 +3046,7 @@ def minimal_element(self):
3040
3046
def theta_series (self , B , var = 'q' ):
3041
3047
r"""
3042
3048
Return normalized theta series of ``self``, as a power series over
3043
- `\ZZ` in the variable ``var``, which is 'q' by default.
3049
+ `\ZZ` in the variable ``var``, which is `` 'q'`` by default.
3044
3050
3045
3051
The normalized theta series is by definition
3046
3052
@@ -3092,7 +3098,7 @@ def gram_matrix(self):
3092
3098
3093
3099
EXAMPLES::
3094
3100
3095
- sage: I = BrandtModule(3,5).right_ideals()[1]; I
3101
+ sage: I = BrandtModule(3, 5).right_ideals()[1]; I
3096
3102
Fractional ideal (2 + 6*j + 4*k, 2*i + 4*j + 34*k, 8*j + 32*k, 40*k)
3097
3103
sage: I.gram_matrix()
3098
3104
[ 640 1920 2112 1920]
@@ -3128,7 +3134,7 @@ def norm(self):
3128
3134
sage: [ magma('rideal<O | %s>' % str(list(I.basis()))).Norm() for I in C]
3129
3135
[16, 32, 32]
3130
3136
3131
- sage: A.<i,j,k> = QuaternionAlgebra(-1,-1)
3137
+ sage: A.<i,j,k> = QuaternionAlgebra(-1, -1)
3132
3138
sage: R = A.ideal([i,j,k,1/2 + 1/2*i + 1/2*j + 1/2*k]) # this is actually an order, so has reduced norm 1
3133
3139
sage: R.norm()
3134
3140
1
@@ -3153,7 +3159,7 @@ def conjugate(self):
3153
3159
3154
3160
EXAMPLES::
3155
3161
3156
- sage: I = BrandtModule(3,5).right_ideals()[1]; I
3162
+ sage: I = BrandtModule(3, 5).right_ideals()[1]; I
3157
3163
Fractional ideal (2 + 6*j + 4*k, 2*i + 4*j + 34*k, 8*j + 32*k, 40*k)
3158
3164
sage: I.conjugate()
3159
3165
Fractional ideal (2 + 2*j + 28*k, 2*i + 4*j + 34*k, 8*j + 32*k, 40*k)
@@ -3241,7 +3247,7 @@ def free_module(self):
3241
3247
3242
3248
EXAMPLES::
3243
3249
3244
- sage: X = BrandtModule(3,5).right_ideals()
3250
+ sage: X = BrandtModule(3, 5).right_ideals()
3245
3251
sage: X[0]
3246
3252
Fractional ideal (2 + 2*j + 8*k, 2*i + 18*k, 4*j + 16*k, 20*k)
3247
3253
sage: X[0].free_module()
@@ -3259,7 +3265,7 @@ def free_module(self):
3259
3265
[ 0 0 4/7 16/7]
3260
3266
[ 0 0 0 20/7]
3261
3267
3262
- sage: QuaternionAlgebra(-11,-1).maximal_order().unit_ideal().basis_matrix()
3268
+ sage: QuaternionAlgebra(-11, -1).maximal_order().unit_ideal().basis_matrix()
3263
3269
[1/2 1/2 0 0]
3264
3270
[ 0 1 0 0]
3265
3271
[ 0 0 1/2 1/2]
@@ -3268,7 +3274,7 @@ def free_module(self):
3268
3274
The free module method is also useful since it allows for checking if
3269
3275
one ideal is contained in another, computing quotients `I/J`, etc.::
3270
3276
3271
- sage: X = BrandtModule(3,17).right_ideals()
3277
+ sage: X = BrandtModule(3, 17).right_ideals()
3272
3278
sage: I = X[0].intersection(X[2]); I
3273
3279
Fractional ideal (2 + 2*j + 164*k, 2*i + 4*j + 46*k, 16*j + 224*k, 272*k)
3274
3280
sage: I.free_module().is_submodule(X[3].free_module())
@@ -3299,7 +3305,7 @@ def intersection(self, J):
3299
3305
3300
3306
EXAMPLES::
3301
3307
3302
- sage: X = BrandtModule(3,5).right_ideals()
3308
+ sage: X = BrandtModule(3, 5).right_ideals()
3303
3309
sage: I = X[0].intersection(X[1]); I
3304
3310
Fractional ideal (2 + 6*j + 4*k, 2*i + 4*j + 34*k, 8*j + 32*k, 40*k)
3305
3311
"""
@@ -3321,7 +3327,7 @@ def multiply_by_conjugate(self, J):
3321
3327
3322
3328
EXAMPLES::
3323
3329
3324
- sage: R = BrandtModule(3,5).right_ideals()
3330
+ sage: R = BrandtModule(3, 5).right_ideals()
3325
3331
sage: R[0].multiply_by_conjugate(R[1])
3326
3332
Fractional ideal (8 + 8*j + 112*k, 8*i + 16*j + 136*k, 32*j + 128*k, 160*k)
3327
3333
sage: R[0]*R[1].conjugate()
@@ -3345,7 +3351,7 @@ def pushforward(self, J, side=None):
3345
3351
the same left order or right order as ``self``
3346
3352
3347
3353
- ``side`` -- string (default: ``None``); set to ``'left'`` or ``'right'`` to
3348
- perform pushforward of left or right ideals respectively. If ``None`` the side
3354
+ perform pushforward of left or right ideals, respectively. If ``None``, the side
3349
3355
is determined by the matching left or right orders
3350
3356
3351
3357
OUTPUT: a fractional quaternion ideal
@@ -3439,7 +3445,7 @@ def pullback(self, J, side=None):
3439
3445
left order equal to the right order of ``self``, or vice versa
3440
3446
3441
3447
- ``side`` -- string (default: ``None``); set to ``'left'`` or ``'right'`` to
3442
- perform pullback of left or right ideals respectively. If ``None`` the side
3448
+ perform pullback of left or right ideals, respectively. If ``None``, the side
3443
3449
is determined by the matching left and right orders
3444
3450
3445
3451
OUTPUT: a fractional quaternion ideal
@@ -3538,8 +3544,8 @@ def is_equivalent(self, J, B=10, certificate=False, side=None):
3538
3544
- ``certificate`` -- if ``True`` returns an element alpha such that
3539
3545
alpha*J = I or J*alpha = I for right and left ideals respectively
3540
3546
3541
- - ``side`` -- if ``'left'`` performs left equivalence test. If ``'right'
3542
- `` or ``None`` performs right ideal equivalence test
3547
+ - ``side`` -- if ``'left'`` performs left equivalence test. If ``'right'``
3548
+ or ``None``, performs right ideal equivalence test
3543
3549
3544
3550
OUTPUT: boolean, or (boolean, alpha) if ``certificate`` is ``True``
3545
3551
@@ -3988,12 +3994,12 @@ def basis_for_quaternion_lattice(gens, reverse=None):
3988
3994
EXAMPLES::
3989
3995
3990
3996
sage: from sage.algebras.quatalg.quaternion_algebra import basis_for_quaternion_lattice
3991
- sage: A.<i,j,k> = QuaternionAlgebra(-1,-7)
3997
+ sage: A.<i,j,k> = QuaternionAlgebra(-1, -7)
3992
3998
sage: basis_for_quaternion_lattice([i+j, i-j, 2*k, A(1/3)])
3993
3999
doctest:warning ... DeprecationWarning: ...
3994
4000
[1/3, i + j, 2*j, 2*k]
3995
4001
3996
- sage: basis_for_quaternion_lattice([A(1),i,j, k])
4002
+ sage: basis_for_quaternion_lattice([A(1), i, j, k])
3997
4003
[1, i, j, k]
3998
4004
"""
3999
4005
if reverse is None :
0 commit comments