X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=926f2bf57a612c71eab53b693daa1e3f559ad6bc;hb=823fb2a587e26436f46854fe44be0e8df46a6715;hp=b7061bfdcf27167715eb91cf1518942dbfab9db9;hpb=c4203897950b84665ea41ed103f87f68aee0852e;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index b7061bf..926f2bf 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -96,7 +96,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: - sage: from mjo.eja.eja_algebra import (RealCartesianProductEJA, + sage: from mjo.eja.eja_algebra import (HadamardEJA, ....: random_eja) EXAMPLES:: @@ -104,7 +104,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: R = PolynomialRing(QQ, 't') sage: t = R.gen(0) sage: p = t^4 - t^3 + 5*t - 2 - sage: J = RealCartesianProductEJA(5) + sage: J = HadamardEJA(5) sage: J.one().apply_univariate_polynomial(p) == 3*J.one() True @@ -113,7 +113,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): We should always get back an element of the algebra:: sage: set_random_seed() - sage: p = PolynomialRing(QQ, 't').random_element() + sage: p = PolynomialRing(AA, 't').random_element() sage: J = random_eja() sage: x = J.random_element() sage: x.apply_univariate_polynomial(p) in J @@ -137,7 +137,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: - sage: from mjo.eja.eja_algebra import RealCartesianProductEJA + sage: from mjo.eja.eja_algebra import HadamardEJA EXAMPLES: @@ -145,14 +145,14 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): the identity element is `(t-1)` from which it follows that the characteristic polynomial should be `(t-1)^3`:: - sage: J = RealCartesianProductEJA(3) + sage: J = HadamardEJA(3) sage: J.one().characteristic_polynomial() t^3 - 3*t^2 + 3*t - 1 Likewise, the characteristic of the zero element in the rank-three algebra `R^{n}` should be `t^{3}`:: - sage: J = RealCartesianProductEJA(3) + sage: J = HadamardEJA(3) sage: J.zero().characteristic_polynomial() t^3 @@ -162,7 +162,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): to zero on that element:: sage: set_random_seed() - sage: x = RealCartesianProductEJA(3).random_element() + sage: x = HadamardEJA(3).random_element() sage: p = x.characteristic_polynomial() sage: x.apply_univariate_polynomial(p) 0 @@ -170,7 +170,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): The characteristic polynomials of the zero and unit elements should be what we think they are in a subalgebra, too:: - sage: J = RealCartesianProductEJA(3) + sage: J = HadamardEJA(3) sage: p1 = J.one().characteristic_polynomial() sage: q1 = J.zero().characteristic_polynomial() sage: e0,e1,e2 = J.gens() @@ -386,11 +386,11 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): """ P = self.parent() r = P.rank() - p = P._charpoly_coeff(0) - # The _charpoly_coeff function already adds the factor of - # -1 to ensure that _charpoly_coeff(0) is really what - # appears in front of t^{0} in the charpoly. However, - # we want (-1)^r times THAT for the determinant. + p = P._charpoly_coefficients()[0] + # The _charpoly_coeff function already adds the factor of -1 + # to ensure that _charpoly_coefficients()[0] is really what + # appears in front of t^{0} in the charpoly. However, we want + # (-1)^r times THAT for the determinant. return ((-1)**r)*p(*self.to_vector()) @@ -575,7 +575,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): The spectral decomposition of a non-regular element should always contain at least one non-minimal idempotent:: - sage: J = RealSymmetricEJA(3, AA) + sage: J = RealSymmetricEJA(3) sage: x = sum(J.gens()) sage: x.is_regular() False @@ -586,7 +586,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): On the other hand, the spectral decomposition of a regular element should always be in terms of minimal idempotents:: - sage: J = JordanSpinEJA(4, AA) + sage: J = JordanSpinEJA(4) sage: x = sum( i*J.gens()[i] for i in range(len(J.gens())) ) sage: x.is_regular() True @@ -909,9 +909,9 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: set_random_seed() sage: n_max = RealSymmetricEJA._max_test_case_size() sage: n = ZZ.random_element(1, n_max) - sage: J1 = RealSymmetricEJA(n,QQ) - sage: J2 = RealSymmetricEJA(n,QQ,normalize_basis=False) - sage: X = random_matrix(QQ,n) + sage: J1 = RealSymmetricEJA(n) + sage: J2 = RealSymmetricEJA(n,normalize_basis=False) + sage: X = random_matrix(AA,n) sage: X = X*X.transpose() sage: x1 = J1(X) sage: x2 = J2(X) @@ -996,14 +996,14 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: sage: from mjo.eja.eja_algebra import (JordanSpinEJA, - ....: RealCartesianProductEJA) + ....: HadamardEJA) EXAMPLES:: - sage: J = RealCartesianProductEJA(2) + sage: J = HadamardEJA(2) sage: x = sum(J.gens()) sage: x.norm() - sqrt(2) + 1.414213562373095? :: @@ -1065,10 +1065,10 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: n = x_vec.degree() sage: x0 = x_vec[0] sage: x_bar = x_vec[1:] - sage: A = matrix(QQ, 1, [x_vec.inner_product(x_vec)]) + sage: A = matrix(AA, 1, [x_vec.inner_product(x_vec)]) sage: B = 2*x0*x_bar.row() sage: C = 2*x0*x_bar.column() - sage: D = matrix.identity(QQ, n-1) + sage: D = matrix.identity(AA, n-1) sage: D = (x0^2 - x_bar.inner_product(x_bar))*D sage: D = D + 2*x_bar.tensor_product(x_bar) sage: Q = matrix.block(2,2,[A,B,C,D]) @@ -1192,7 +1192,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): The spectral decomposition of the identity is ``1`` times itself, and the spectral decomposition of zero is ``0`` times the identity:: - sage: J = RealSymmetricEJA(3,AA) + sage: J = RealSymmetricEJA(3) sage: J.one() e0 + e2 + e5 sage: J.one().spectral_decomposition() @@ -1202,7 +1202,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): TESTS:: - sage: J = RealSymmetricEJA(4,AA) + sage: J = RealSymmetricEJA(4) sage: x = sum(J.gens()) sage: sd = x.spectral_decomposition() sage: l0 = sd[0][0] @@ -1220,8 +1220,18 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: l0*c0 + l1*c1 == x True + The spectral decomposition should work in subalgebras, too:: + + sage: J = RealSymmetricEJA(4) + sage: (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) = J.gens() + sage: A = 2*e5 - 2*e8 + sage: (lambda1, c1) = A.spectral_decomposition()[1] + sage: (J0, J5, J1) = J.peirce_decomposition(c1) + sage: (f0, f1, f2) = J1.gens() + sage: f0.spectral_decomposition() + [(0, 1.000000000000000?*f2), (1, 1.000000000000000?*f0)] + """ - P = self.parent() A = self.subalgebra_generated_by(orthonormalize_basis=True) result = [] for (evalue, proj) in A(self).operator().spectral_decomposition(): @@ -1315,7 +1325,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): # will be minimal for some natural number s... s = 0 minimal_dim = J.dimension() - for i in xrange(1, minimal_dim): + for i in range(1, minimal_dim): this_dim = (u**i).operator().matrix().image().dimension() if this_dim < minimal_dim: minimal_dim = this_dim @@ -1350,7 +1360,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: sage: from mjo.eja.eja_algebra import (JordanSpinEJA, - ....: RealCartesianProductEJA, + ....: HadamardEJA, ....: TrivialEJA, ....: random_eja) @@ -1368,7 +1378,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): :: - sage: J = RealCartesianProductEJA(5) + sage: J = HadamardEJA(5) sage: J.one().trace() 5 @@ -1390,7 +1400,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): # the trace is an empty sum. return P.base_ring().zero() - p = P._charpoly_coeff(r-1) + p = P._charpoly_coefficients()[r-1] # The _charpoly_coeff function already adds the factor of # -1 to ensure that _charpoly_coeff(r-1) is really what # appears in front of t^{r-1} in the charpoly. However, @@ -1446,21 +1456,21 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: sage: from mjo.eja.eja_algebra import (JordanSpinEJA, - ....: RealCartesianProductEJA) + ....: HadamardEJA) EXAMPLES:: - sage: J = RealCartesianProductEJA(2) + sage: J = HadamardEJA(2) sage: x = sum(J.gens()) sage: x.trace_norm() - sqrt(2) + 1.414213562373095? :: sage: J = JordanSpinEJA(4) sage: x = sum(J.gens()) sage: x.trace_norm() - 2*sqrt(2) + 2.828427124746190? """ return self.trace_inner_product(self).sqrt()