also the left multiplication matrix and must be symmetric::
sage: set_random_seed()
+ sage: n = ZZ.random_element(1,10).abs()
+ sage: J = eja_rn(5)
+ sage: J.random_element().matrix().is_symmetric()
+ True
sage: J = eja_ln(5)
sage: J.random_element().matrix().is_symmetric()
True
def subalgebra_generated_by(self):
"""
- Return the subalgebra of the parent EJA generated by this element.
+ Return the associative subalgebra of the parent EJA generated
+ by this element.
+
+ TESTS::
+
+ sage: set_random_seed()
+ sage: n = ZZ.random_element(1,10).abs()
+ sage: J = eja_rn(n)
+ sage: x = J.random_element()
+ sage: x.subalgebra_generated_by().is_associative()
+ True
+ sage: J = eja_ln(n)
+ sage: x = J.random_element()
+ sage: x.subalgebra_generated_by().is_associative()
+ True
+
"""
# First get the subspace spanned by the powers of myself...
V = self.span_of_powers()
b_right_matrix = matrix(F, b_right_rows)
mats.append(b_right_matrix)
- return FiniteDimensionalEuclideanJordanAlgebra(F, mats)
+ # It's an algebra of polynomials in one element, and EJAs
+ # are power-associative.
+ return FiniteDimensionalEuclideanJordanAlgebra(F, mats, assume_associative=True)
def minimal_polynomial(self):
True
"""
+ if self.parent().is_associative():
+ return self.matrix().minimal_polynomial()
+
V = self.span_of_powers()
assoc_subalg = self.subalgebra_generated_by()
# Mis-design warning: the basis used for span_of_powers()
# and subalgebra_generated_by() must be the same, and in
# the same order!
subalg_self = assoc_subalg(V.coordinates(self.vector()))
- return subalg_self.matrix().minimal_polynomial()
+ # Recursive call, but should work since the subalgebra is
+ # associative.
+ return subalg_self.minimal_polynomial()
def characteristic_polynomial(self):