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)
+
# 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):
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())
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
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
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())
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())
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))
+