From 0ac5b5a3c8eb960b0f3c20a28c4d4bc0e33e5294 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 9 Aug 2019 12:58:54 -0400 Subject: [PATCH] eja: fix construction of subalgebra-subalgebras. --- mjo/eja/eja_subalgebra.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index c43e53f..9e5b010 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -74,7 +74,8 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide SETUP:: - sage: from mjo.eja.eja_algebra import JordanSpinEJA + sage: from mjo.eja.eja_algebra import (ComplexHermitianEJA, + ....: JordanSpinEJA) TESTS: @@ -90,6 +91,13 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide 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() @@ -98,11 +106,14 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide # 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 ) @@ -123,7 +134,12 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide 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 -- 2.44.2