]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: use custom gram-schmidt in the new constructor.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 27 Nov 2020 14:17:35 +0000 (09:17 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 27 Nov 2020 14:17:35 +0000 (09:17 -0500)
mjo/eja/eja_algebra.py

index 44d83147bbeceb4acae52d573749545dec3c4b99..05b9a5a4191bffa74f3680df50d0327cf12b1d1e 100644 (file)
@@ -1040,7 +1040,7 @@ class RationalBasisEuclideanJordanAlgebraNg(FiniteDimensionalEuclideanJordanAlge
         n = len(basis)
         vector_basis = basis
 
-        from sage.matrix.matrix import is_Matrix
+        from sage.structure.element import is_Matrix
         basis_is_matrices = False
 
         degree = 0
@@ -1054,18 +1054,22 @@ class RationalBasisEuclideanJordanAlgebraNg(FiniteDimensionalEuclideanJordanAlge
 
         V = VectorSpace(field, degree)
 
-        self._deorthonormalization_matrix = matrix.identity(field,n)
+        # Compute this from "Q" (obtained from Gram-Schmidt) below as
+        # R = Q.solve_right(A), where the rows of "Q" are the
+        # orthonormalized vector_basis and and the rows of "A" are the
+        # original vector_basis.
+        self._deorthonormalization_matrix = None
+
         if orthonormalize:
-            A = matrix(field, vector_basis)
-            # uh oh, this is only the "usual" inner product
-            Q,R = A.gram_schmidt(orthonormal=True)
-            self._deorthonormalization_matrix = R.inverse().transpose()
-            vector_basis = Q.rows()
+            from mjo.eja.eja_utils import gram_schmidt
+            vector_basis = gram_schmidt(vector_basis, inner_product)
             W = V.span_of_basis( vector_basis )
             if basis_is_matrices:
                 from mjo.eja.eja_utils import _vec2mat
                 basis = tuple( map(_vec2mat,vector_basis) )
 
+        W = V.span_of_basis( vector_basis )
+
         mult_table = [ [0 for i in range(n)] for j in range(n) ]
         ip_table = [ [0 for i in range(n)] for j in range(n) ]
 
@@ -1086,12 +1090,14 @@ class RationalBasisEuclideanJordanAlgebraNg(FiniteDimensionalEuclideanJordanAlge
         if basis_is_matrices:
             for m in basis:
                 m.set_immutable()
+        else:
+            basis = tuple( x.column() for x in basis )
 
         super().__init__(field,
                          mult_table,
                          prefix,
                          category,
-                         basis,
+                         basis, # matrix basis
                          check_field,
                          check_axioms)