]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_element_subalgebra.py
eja: move the "field" argument to (usually passed through) kwargs.
[sage.d.git] / mjo / eja / eja_element_subalgebra.py
index 3936ac1fe5c7709165b91114b9e52bd8f47ab683..7edf1df940fb3e16435eb7d232fea0ceb58eff7a 100644 (file)
@@ -1,4 +1,5 @@
 from sage.matrix.constructor import matrix
+from sage.misc.cachefunc import cached_method
 from sage.rings.all import QQ
 
 from mjo.eja.eja_subalgebra import FiniteDimensionalEuclideanJordanSubalgebra
@@ -71,6 +72,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide
         self.rank.set_cache(self.dimension())
 
 
+    @cached_method
     def one(self):
         """
         Return the multiplicative identity element of this algebra.
@@ -78,7 +80,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide
         The superclass method computes the identity element, which is
         beyond overkill in this case: the superalgebra identity
         restricted to this algebra is its identity. Note that we can't
-        count on the first basis element being the identity -- it migth
+        count on the first basis element being the identity -- it might
         have been scaled if we orthonormalized the basis.
 
         SETUP::
@@ -103,7 +105,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide
         The identity element acts like the identity over the rationals::
 
             sage: set_random_seed()
-            sage: x = random_eja(field=QQ).random_element()
+            sage: x = random_eja(field=QQ,orthonormalize=False).random_element()
             sage: A = x.subalgebra_generated_by()
             sage: x = A.random_element()
             sage: A.one()*x == x and x*A.one() == x
@@ -123,7 +125,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide
         the rationals::
 
             sage: set_random_seed()
-            sage: x = random_eja(field=QQ).random_element()
+            sage: x = random_eja(field=QQ,orthonormalize=False).random_element()
             sage: A = x.subalgebra_generated_by()
             sage: actual = A.one().operator().matrix()
             sage: expected = matrix.identity(A.base_ring(), A.dimension())
@@ -144,12 +146,6 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide
         """
         if self.dimension() == 0:
             return self.zero()
-        else:
-            sa_one = self.superalgebra().one().to_vector()
-            # The extra hackery is because foo.to_vector() might not
-            # live in foo.parent().vector_space()!
-            coords = sum( a*b for (a,b)
-                          in zip(sa_one,
-                                 self.superalgebra().vector_space().basis()) )
-            return self.from_vector(self.vector_space().coordinate_vector(coords))
+
+        return self(self.superalgebra().one())