SETUP::
- sage: from mjo.eja.eja_algebra import JordanSpinEJA
+ sage: from mjo.eja.eja_algebra import (ComplexHermitianEJA,
+ ....: JordanSpinEJA)
TESTS:
sage: J.one().subalgebra_generated_by().gens()
(c0,)
+ Ensure that we can find subalgebras of subalgebras::
+
+ sage: A = ComplexHermitianEJA(3).one().subalgebra_generated_by()
+ sage: B = A.one().subalgebra_generated_by()
+ sage: B.dimension()
+ 1
+
"""
def __init__(self, elt):
superalgebra = elt.parent()
# the given element.
V = superalgebra.vector_space()
superalgebra_basis = [superalgebra.one()]
- basis_vectors = [superalgebra.one().to_vector()]
+ # If our superalgebra is a subalgebra of something else, then
+ # superalgebra.one().to_vector() won't have the right
+ # coordinates unless we use V.from_vector() below.
+ basis_vectors = [V.from_vector(superalgebra.one().to_vector())]
W = V.span_of_basis(basis_vectors)
for exponent in range(1, V.dimension()):
new_power = elt**exponent
- basis_vectors.append( new_power.to_vector() )
+ basis_vectors.append( V.from_vector(new_power.to_vector()) )
try:
W = V.span_of_basis(basis_vectors)
superalgebra_basis.append( new_power )
for i in range(n):
for j in range(n):
product = superalgebra_basis[i]*superalgebra_basis[j]
- mult_table[i][j] = W.coordinate_vector(product.to_vector())
+ # product.to_vector() might live in a vector subspace
+ # if our parent algebra is already a subalgebra. We
+ # use V.from_vector() to make it "the right size" in
+ # that case.
+ product_vector = V.from_vector(product.to_vector())
+ mult_table[i][j] = W.coordinate_vector(product_vector)
# A half-assed attempt to ensure that we don't collide with
# the superalgebra's prefix (ignoring the fact that there