X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;ds=sidebyside;f=mjo%2Feja%2Feja_algebra.py;h=725cd7132343ee6f3ba5769d8053aaff32501560;hb=73ba2d67c0850074e655b4da61aa021e6d9b6816;hp=658957556cf382a62d0d252359ce735019996973;hpb=08aba469c5f8d8947a543f8882fa676ed165e7ee;p=sage.d.git diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 6589575..725cd71 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -251,7 +251,10 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): """ (A_of_x, x, xr, detA) = self._charpoly_matrix_system() R = A_of_x.base_ring() - if i >= self.rank(): + + if i == self.rank(): + return R.one() + if i > self.rank(): # Guaranteed by theory return R.zero() @@ -378,8 +381,8 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): r = self.rank() n = self.dimension() - # The list of coefficient polynomials a_1, a_2, ..., a_n. - a = [ self._charpoly_coeff(i) for i in range(n) ] + # The list of coefficient polynomials a_0, a_1, a_2, ..., a_n. + a = [ self._charpoly_coeff(i) for i in range(r+1) ] # We go to a bit of trouble here to reorder the # indeterminates, so that it's easier to evaluate the @@ -391,17 +394,6 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): S = PolynomialRing(S, R.variable_names()) t = S(t) - # Note: all entries past the rth should be zero. The - # coefficient of the highest power (x^r) is 1, but it doesn't - # appear in the solution vector which contains coefficients - # for the other powers (to make them sum to x^r). - if (r < n): - a[r] = 1 # corresponds to x^r - else: - # When the rank is equal to the dimension, trying to - # assign a[r] goes out-of-bounds. - a.append(1) # corresponds to x^r - return sum( a[k]*(t**k) for k in xrange(len(a)) ) @@ -686,11 +678,15 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): TESTS: Ensure that every EJA that we know how to construct has a - positive integer rank:: + positive integer rank, unless the algebra is trivial in + which case its rank will be zero:: sage: set_random_seed() - sage: r = random_eja().rank() - sage: r in ZZ and r > 0 + sage: J = random_eja() + sage: r = J.rank() + sage: r in ZZ + True + sage: r > 0 or (r == 0 and J.is_trivial()) True """