X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element_subalgebra.py;h=a4d7d1f3de4c43347b43451be15cc38b5e1c9556;hb=58c6ee3de5d4ee8f8349011c789132d7800b34e9;hp=c058613e1b650a3c3007ad8700d1c36d0b2567c9;hpb=f9690e43873907af4da7a9ccd6d74c6937b7cdf8;p=sage.d.git diff --git a/mjo/eja/eja_element_subalgebra.py b/mjo/eja/eja_element_subalgebra.py index c058613..a4d7d1f 100644 --- a/mjo/eja/eja_element_subalgebra.py +++ b/mjo/eja/eja_element_subalgebra.py @@ -49,19 +49,19 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide W = V.span_of_basis( V.from_vector(v) for v in basis_vectors ) + fdeja = super(FiniteDimensionalEuclideanJordanElementSubalgebra, self) + fdeja.__init__(self._superalgebra, + superalgebra_basis, + category=category, + check=False) + # The rank is the highest possible degree of a minimal # polynomial, and is bounded above by the dimension. We know # in this case that there's an element whose minimal # polynomial has the same degree as the space's dimension # (remember how we constructed the space?), so that must be # its rank too. - rank = W.dimension() - - fdeja = super(FiniteDimensionalEuclideanJordanElementSubalgebra, self) - return fdeja.__init__(self._superalgebra, - superalgebra_basis, - rank=rank, - category=category) + self.rank.set_cache(W.dimension()) def _a_regular_element(self): @@ -100,12 +100,12 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide SETUP:: - sage: from mjo.eja.eja_algebra import (RealCartesianProductEJA, + sage: from mjo.eja.eja_algebra import (HadamardEJA, ....: random_eja) EXAMPLES:: - sage: J = RealCartesianProductEJA(5) + sage: J = HadamardEJA(5) sage: J.one() e0 + e1 + e2 + e3 + e4 sage: x = sum(J.gens()) @@ -120,7 +120,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide The identity element acts like the identity over the rationals:: sage: set_random_seed() - sage: x = random_eja().random_element() + sage: x = random_eja(field=QQ).random_element() sage: A = x.subalgebra_generated_by() sage: x = A.random_element() sage: A.one()*x == x and x*A.one() == x @@ -130,7 +130,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide reals with an orthonormal basis:: sage: set_random_seed() - sage: x = random_eja(AA).random_element() + sage: x = random_eja().random_element() sage: A = x.subalgebra_generated_by(orthonormalize_basis=True) sage: x = A.random_element() sage: A.one()*x == x and x*A.one() == x @@ -140,7 +140,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide the rationals:: sage: set_random_seed() - sage: x = random_eja().random_element() + sage: x = random_eja(field=QQ).random_element() sage: A = x.subalgebra_generated_by() sage: actual = A.one().operator().matrix() sage: expected = matrix.identity(A.base_ring(), A.dimension()) @@ -151,7 +151,7 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide the algebraic reals with an orthonormal basis:: sage: set_random_seed() - sage: x = random_eja(AA).random_element() + sage: x = random_eja().random_element() sage: A = x.subalgebra_generated_by(orthonormalize_basis=True) sage: actual = A.one().operator().matrix() sage: expected = matrix.identity(A.base_ring(), A.dimension()) @@ -163,5 +163,10 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide return self.zero() else: sa_one = self.superalgebra().one().to_vector() - sa_coords = self.vector_space().coordinate_vector(sa_one) - return self.from_vector(sa_coords) + # 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)) +