our basis::
sage: set_random_seed()
- sage: x = random_eja(AA).random_element()
+ sage: x = random_eja(field=AA).random_element()
sage: A = x.subalgebra_generated_by(orthonormalize_basis=True)
sage: y = A.random_element()
sage: y.operator()(A.one()) == y
# If our superalgebra is a subalgebra of something else, then
# these vectors won't have the right coordinates for
# V.span_of_basis() unless we use V.from_vector() on them.
- W = V.span_of_basis( V.from_vector(b.to_vector()) for b in basis )
+ W = V.span_of_basis( (V.from_vector(b.to_vector()) for b in basis),
+ check=check_axioms)
n = len(basis)
- mult_table = [[W.zero() for i in range(n)] for j in range(n)]
- ip_table = [ [ self._superalgebra.inner_product(basis[i],basis[j])
- for i in range(n) ]
- for j in range(n) ]
+ if check_axioms:
+ # The tables are square if we're verifying that they
+ # are commutative.
+ mult_table = [[W.zero() for j in range(n)] for i in range(n)]
+ ip_table = [ [ self._superalgebra.inner_product(basis[i],basis[j])
+ for j in range(n) ]
+ for i in range(n) ]
+ else:
+ mult_table = [[W.zero() for j in range(i+1)] for i in range(n)]
+ ip_table = [ [ self._superalgebra.inner_product(basis[i],basis[j])
+ for j in range(i+1) ]
+ for i in range(n) ]
for i in range(n):
- for j in range(n):
+ for j in range(i+1):
product = basis[i]*basis[j]
# product.to_vector() might live in a vector subspace
# if our parent algebra is already a subalgebra. We
# that case.
product_vector = V.from_vector(product.to_vector())
mult_table[i][j] = W.coordinate_vector(product_vector)
+ if check_axioms:
+ mult_table[j][i] = mult_table[i][j]
matrix_basis = tuple( b.to_matrix() for b in basis )