]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
hurwitz: make entry algebras "configurable."
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 9 Mar 2021 02:43:34 +0000 (21:43 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 9 Mar 2021 02:43:34 +0000 (21:43 -0500)
mjo/hurwitz.py
mjo/matrix_algebra.py

index 75e856862f735251775506d237aa8b3e1b726a67..a1a6af06e944e97ea49536b8b9f76e1ecf54cde6 100644 (file)
@@ -315,7 +315,7 @@ class HurwitzMatrixAlgebraElement(MatrixAlgebraElement):
 
         EXAMPLES::
 
-            sage: A = HurwitzMatrixAlgebra(QQbar, ZZ, 2)
+            sage: A = HurwitzMatrixAlgebra(2, QQbar, ZZ)
             sage: M = A([ [ 0,I],
             ....:         [-I,0] ])
             sage: M.is_hermitian()
@@ -344,13 +344,13 @@ class HurwitzMatrixAlgebra(MatrixAlgebra):
     """
     Element = HurwitzMatrixAlgebraElement
 
-    def __init__(self, entry_algebra, scalars, n, **kwargs):
+    def __init__(self, n, entry_algebra, scalars, **kwargs):
         from sage.rings.all import RR
         if not scalars.is_subring(RR):
             # Not perfect, but it's what we're using.
             raise ValueError("scalar field is not real")
 
-        super().__init__(entry_algebra, scalars, n, **kwargs)
+        super().__init__(n, entry_algebra, scalars, **kwargs)
 
     def entry_algebra_gens(self):
         r"""
@@ -382,15 +382,15 @@ class HurwitzMatrixAlgebra(MatrixAlgebra):
         sets of generators have cartinality 1,2,4, and 8 as you'd
         expect::
 
-            sage: HurwitzMatrixAlgebra(AA, AA, 2).entry_algebra_gens()
+            sage: HurwitzMatrixAlgebra(2, AA, AA).entry_algebra_gens()
             (1,)
-            sage: HurwitzMatrixAlgebra(QQbar, AA, 2).entry_algebra_gens()
+            sage: HurwitzMatrixAlgebra(2, QQbar, AA).entry_algebra_gens()
             (1, I)
             sage: Q = QuaternionAlgebra(AA,-1,-1)
-            sage: HurwitzMatrixAlgebra(Q, AA, 2).entry_algebra_gens()
+            sage: HurwitzMatrixAlgebra(2, Q, AA).entry_algebra_gens()
             (1, i, j, k)
             sage: O = Octonions()
-            sage: HurwitzMatrixAlgebra(O, AA, 2).entry_algebra_gens()
+            sage: HurwitzMatrixAlgebra(2, O, AA).entry_algebra_gens()
             (e0, e1, e2, e3, e4, e5, e6, e7)
 
         """
@@ -414,16 +414,32 @@ class OctonionMatrixAlgebra(HurwitzMatrixAlgebra):
 
     SETUP::
 
-        sage: from mjo.hurwitz import OctonionMatrixAlgebra
+        sage: from mjo.hurwitz import Octonions, OctonionMatrixAlgebra
 
     EXAMPLES::
 
         sage: OctonionMatrixAlgebra(3)
         Module of 3 by 3 matrices with entries in Octonion algebra with base
         ring Algebraic Real Field over the scalar ring Algebraic Real Field
-        sage: OctonionMatrixAlgebra(3,QQ)
-        Module of 3 by 3 matrices with entries in Octonion algebra with base
-        ring Rational Field over the scalar ring Rational Field
+
+    ::
+
+        sage: OctonionMatrixAlgebra(3,scalars=QQ)
+        Module of 3 by 3 matrices with entries in Octonion algebra with
+        base ring Rational Field over the scalar ring Rational Field
+
+    ::
+
+        sage: O = Octonions(RR)
+        sage: A = OctonionMatrixAlgebra(1,O)
+        sage: A
+        Module of 1 by 1 matrices with entries in Octonion algebra with
+        base ring Real Field with 53 bits of precision over the scalar
+        ring Algebraic Real Field
+        sage: A.one()
+        +---------------------+
+        | 1.00000000000000*e0 |
+        +---------------------+
 
     ::
 
@@ -439,8 +455,8 @@ class OctonionMatrixAlgebra(HurwitzMatrixAlgebra):
 
     ::
 
-        sage: A1 = OctonionMatrixAlgebra(1,QQ)
-        sage: A2 = OctonionMatrixAlgebra(1,QQ)
+        sage: A1 = OctonionMatrixAlgebra(1,scalars=QQ)
+        sage: A2 = OctonionMatrixAlgebra(1,scalars=QQ)
         sage: cartesian_product([A1,A2])
         Module of 1 by 1 matrices with entries in Octonion algebra with
         base ring Rational Field over the scalar ring Rational Field (+)
@@ -456,11 +472,12 @@ class OctonionMatrixAlgebra(HurwitzMatrixAlgebra):
         True
 
     """
-    def __init__(self, n, scalars=AA, prefix="E", **kwargs):
-        super().__init__(Octonions(field=scalars),
+    def __init__(self, n, entry_algebra=None, scalars=AA, **kwargs):
+        if entry_algebra is None:
+            entry_algebra = Octonions(field=scalars)
+        super().__init__(n,
+                         entry_algebra,
                          scalars,
-                         n,
-                         prefix=prefix,
                          **kwargs)
 
 class QuaternionMatrixAlgebra(HurwitzMatrixAlgebra):
@@ -482,11 +499,27 @@ class QuaternionMatrixAlgebra(HurwitzMatrixAlgebra):
         Module of 3 by 3 matrices with entries in Quaternion
         Algebra (-1, -1) with base ring Algebraic Real Field
         over the scalar ring Algebraic Real Field
-        sage: QuaternionMatrixAlgebra(3,QQ)
+
+    ::
+
+        sage: QuaternionMatrixAlgebra(3,scalars=QQ)
         Module of 3 by 3 matrices with entries in Quaternion
         Algebra (-1, -1) with base ring Rational Field over
         the scalar ring Rational Field
 
+    ::
+
+        sage: Q = QuaternionAlgebra(RDF, -1, -1)
+        sage: A = QuaternionMatrixAlgebra(1,Q)
+        sage: A
+        Module of 1 by 1 matrices with entries in Quaternion Algebra
+        (-1.0, -1.0) with base ring Real Double Field over the scalar
+        ring Algebraic Real Field
+        sage: A.one()
+        +-----+
+        | 1.0 |
+        +-----+
+
     ::
 
         sage: A = QuaternionMatrixAlgebra(2)
@@ -501,8 +534,8 @@ class QuaternionMatrixAlgebra(HurwitzMatrixAlgebra):
 
     ::
 
-        sage: A1 = QuaternionMatrixAlgebra(1,QQ)
-        sage: A2 = QuaternionMatrixAlgebra(2,QQ)
+        sage: A1 = QuaternionMatrixAlgebra(1,scalars=QQ)
+        sage: A2 = QuaternionMatrixAlgebra(2,scalars=QQ)
         sage: cartesian_product([A1,A2])
         Module of 1 by 1 matrices with entries in Quaternion Algebra
         (-1, -1) with base ring Rational Field over the scalar ring
@@ -519,11 +552,14 @@ class QuaternionMatrixAlgebra(HurwitzMatrixAlgebra):
         True
 
     """
-    def __init__(self, n, scalars=AA, **kwargs):
-        # The -1,-1 gives us the "usual" definition of quaternion
-        from sage.algebras.quatalg.quaternion_algebra import QuaternionAlgebra
-        Q = QuaternionAlgebra(scalars,-1,-1)
-        super().__init__(Q, scalars, n, **kwargs)
+    def __init__(self, n, entry_algebra=None, scalars=AA, **kwargs):
+        if entry_algebra is None:
+            # The -1,-1 gives us the "usual" definition of quaternion
+            from sage.algebras.quatalg.quaternion_algebra import (
+                QuaternionAlgebra
+            )
+            entry_algebra = QuaternionAlgebra(scalars,-1,-1)
+        super().__init__(n, entry_algebra, scalars, **kwargs)
 
 
 class ComplexMatrixAlgebra(HurwitzMatrixAlgebra):
@@ -545,10 +581,24 @@ class ComplexMatrixAlgebra(HurwitzMatrixAlgebra):
         sage: ComplexMatrixAlgebra(3)
         Module of 3 by 3 matrices with entries in Algebraic Field
         over the scalar ring Algebraic Real Field
-        sage: ComplexMatrixAlgebra(3,QQ)
+
+    ::
+
+        sage: ComplexMatrixAlgebra(3,scalars=QQ)
         Module of 3 by 3 matrices with entries in Algebraic Field
         over the scalar ring Rational Field
 
+    ::
+
+        sage: A = ComplexMatrixAlgebra(1,CC)
+        sage: A
+        Module of 1 by 1 matrices with entries in Complex Field with
+        53 bits of precision over the scalar ring Algebraic Real Field
+        sage: A.one()
+        +------------------+
+        | 1.00000000000000 |
+        +------------------+
+
     ::
 
         sage: A = ComplexMatrixAlgebra(2)
@@ -563,8 +613,8 @@ class ComplexMatrixAlgebra(HurwitzMatrixAlgebra):
 
     ::
 
-        sage: A1 = ComplexMatrixAlgebra(1,QQ)
-        sage: A2 = ComplexMatrixAlgebra(2,QQ)
+        sage: A1 = ComplexMatrixAlgebra(1,scalars=QQ)
+        sage: A2 = ComplexMatrixAlgebra(2,scalars=QQ)
         sage: cartesian_product([A1,A2])
         Module of 1 by 1 matrices with entries in Algebraic Field over
         the scalar ring Rational Field (+) Module of 2 by 2 matrices with
@@ -579,6 +629,8 @@ class ComplexMatrixAlgebra(HurwitzMatrixAlgebra):
         True
 
     """
-    def __init__(self, n, scalars=AA, **kwargs):
-        from sage.rings.all import QQbar
-        super().__init__(QQbar, scalars, n, **kwargs)
+    def __init__(self, n, entry_algebra=None, scalars=AA, **kwargs):
+        if entry_algebra is None:
+            from sage.rings.all import QQbar
+            entry_algebra = QQbar
+        super().__init__(n, entry_algebra, scalars, **kwargs)
index 94a8410f9929986a8737f9bbb846c04490751fe5..c38e8556203243536fc0af87078840f82e2d57cb 100644 (file)
@@ -18,7 +18,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
         EXAMPLES::
 
-            sage: M = MatrixAlgebra(QQbar,RDF,2)
+            sage: M = MatrixAlgebra(2, QQbar,RDF)
             sage: A = M.monomial((0,0,1)) + 4*M.monomial((0,1,1))
             sage: A
             +-----+-----+
@@ -50,7 +50,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
         EXAMPLES::
 
-            sage: MatrixAlgebra(ZZ,ZZ,2).zero()
+            sage: MatrixAlgebra(2,ZZ,ZZ).zero()
             +---+---+
             | 0 | 0 |
             +---+---+
@@ -71,7 +71,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
         EXAMPLES::
 
-            sage: A = MatrixAlgebra(ZZ,ZZ,2)
+            sage: A = MatrixAlgebra(2,ZZ,ZZ)
             sage: A([[1,2],[3,4]]).list()
             [1, 2, 3, 4]
 
@@ -88,7 +88,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
         EXAMPLES::
 
-            sage: M = MatrixAlgebra(ZZ,ZZ,2)([[1,2],[3,4]])
+            sage: M = MatrixAlgebra(2,ZZ,ZZ)([[1,2],[3,4]])
             sage: M[0,0]
             1
             sage: M[0,1]
@@ -117,7 +117,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
             sage: entries = MatrixSpace(ZZ,2)
             sage: scalars = ZZ
-            sage: M = MatrixAlgebra(entries, scalars, 2)
+            sage: M = MatrixAlgebra(2, entries, scalars)
             sage: I = entries.one()
             sage: Z = entries.zero()
             sage: M([[I,Z],[Z,I]]).trace()
@@ -139,7 +139,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement):
 
             sage: set_random_seed()
             sage: entries = QuaternionAlgebra(QQ,-1,-1)
-            sage: M = MatrixAlgebra(entries, QQ, 3)
+            sage: M = MatrixAlgebra(3, entries, QQ)
             sage: M.random_element().matrix_space() == M
             True
 
@@ -167,7 +167,7 @@ class MatrixAlgebra(CombinatorialFreeModule):
 
     The existence of a unit element is determined dynamically::
 
-        sage: MatrixAlgebra(ZZ,ZZ,2).one()
+        sage: MatrixAlgebra(2,ZZ,ZZ).one()
         +---+---+
         | 1 | 0 |
         +---+---+
@@ -177,7 +177,7 @@ class MatrixAlgebra(CombinatorialFreeModule):
     """
     Element = MatrixAlgebraElement
 
-    def __init__(self, entry_algebra, scalars, n, prefix="A", **kwargs):
+    def __init__(self, n, entry_algebra, scalars, prefix="A", **kwargs):
 
         category = MagmaticAlgebras(scalars).FiniteDimensional()
         category = category.WithBasis()
@@ -245,7 +245,7 @@ class MatrixAlgebra(CombinatorialFreeModule):
             sage: e = O.gens()
             sage: e[2]*e[1]
             -e3
-            sage: A = MatrixAlgebra(O,QQ,2)
+            sage: A = MatrixAlgebra(2,O,QQ)
             sage: A.product_on_basis( (0,0,e[2]), (0,0,e[1]) )
             +-----+---+
             | -e3 | 0 |
@@ -278,7 +278,7 @@ class MatrixAlgebra(CombinatorialFreeModule):
 
         EXAMPLES::
 
-            sage: A = MatrixAlgebra(QQbar, ZZ, 2)
+            sage: A = MatrixAlgebra(2, QQbar, ZZ)
             sage: A.from_list([[0,I],[-I,0]])
             +----+---+
             | 0  | I |