# -*- coding: utf-8 -*-
-from itertools import izip
-
from sage.matrix.constructor import matrix
from sage.modules.free_module import VectorSpace
from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement
SETUP::
- sage: from mjo.eja.eja_algebra import (RealCartesianProductEJA,
+ sage: from mjo.eja.eja_algebra import (HadamardEJA,
....: random_eja)
EXAMPLES::
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
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
SETUP::
- sage: from mjo.eja.eja_algebra import RealCartesianProductEJA
+ sage: from mjo.eja.eja_algebra import HadamardEJA
EXAMPLES:
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
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
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()
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
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
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)
"""
B = self.parent().natural_basis()
W = self.parent().natural_basis_space()
- return W.linear_combination(izip(B,self.to_vector()))
+ return W.linear_combination(zip(B,self.to_vector()))
def norm(self):
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?
::
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])
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()
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]
# 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
SETUP::
sage: from mjo.eja.eja_algebra import (JordanSpinEJA,
- ....: RealCartesianProductEJA,
+ ....: HadamardEJA,
....: TrivialEJA,
....: random_eja)
::
- sage: J = RealCartesianProductEJA(5)
+ sage: J = HadamardEJA(5)
sage: J.one().trace()
5
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()