]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: implement JordanSpinEJA with BilinearFormEJA.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 9 Jun 2020 11:56:07 +0000 (07:56 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 9 Jun 2020 11:56:07 +0000 (07:56 -0400)
mjo/eja/eja_algebra.py

index 374af5498160180ff449d84c0d59d9f2f1db5f42..8bee7297fa170c0faf47610dc0ac435a881531fb 100644 (file)
@@ -2017,7 +2017,7 @@ class BilinearFormEJA(FiniteDimensionalEuclideanJordanAlgebra, KnownRankEJA):
         return x[0]*y[0] + (self._B*xbar).inner_product(ybar)
 
 
-class JordanSpinEJA(FiniteDimensionalEuclideanJordanAlgebra, KnownRankEJA):
+class JordanSpinEJA(BilinearFormEJA):
     """
     The rank-2 simple EJA consisting of real vectors ``x=(x0, x_bar)``
     with the usual inner product and jordan product ``x*y =
@@ -2054,42 +2054,9 @@ class JordanSpinEJA(FiniteDimensionalEuclideanJordanAlgebra, KnownRankEJA):
         sage: JordanSpinEJA(2, prefix='B').gens()
         (B0, B1)
 
-    """
-    def __init__(self, n, field=QQ, **kwargs):
-        V = VectorSpace(field, n)
-        mult_table = [[V.zero() for j in range(n)] for i in range(n)]
-        for i in range(n):
-            for j in range(n):
-                x = V.gen(i)
-                y = V.gen(j)
-                x0 = x[0]
-                xbar = x[1:]
-                y0 = y[0]
-                ybar = y[1:]
-                # z = x*y
-                z0 = x.inner_product(y)
-                zbar = y0*xbar + x0*ybar
-                z = V([z0] + zbar.list())
-                mult_table[i][j] = z
-
-        # The rank of the spin algebra is two, unless we're in a
-        # one-dimensional ambient space (because the rank is bounded by
-        # the ambient dimension).
-        fdeja = super(JordanSpinEJA, self)
-        return fdeja.__init__(field, mult_table, rank=min(n,2), **kwargs)
-
-    def inner_product(self, x, y):
-        """
-        Faster to reimplement than to use natural representations.
-
-        SETUP::
-
-            sage: from mjo.eja.eja_algebra import JordanSpinEJA
-
-        TESTS:
+    TESTS:
 
-        Ensure that this is the usual inner product for the algebras
-        over `R^n`::
+        Ensure that we have the usual inner product on `R^n`::
 
             sage: set_random_seed()
             sage: J = JordanSpinEJA.random_instance()
@@ -2099,8 +2066,11 @@ class JordanSpinEJA(FiniteDimensionalEuclideanJordanAlgebra, KnownRankEJA):
             sage: x.inner_product(y) == J.natural_inner_product(X,Y)
             True
 
-        """
-        return x.to_vector().inner_product(y.to_vector())
+    """
+    def __init__(self, n, field=QQ, **kwargs):
+        # This is a special case of the BilinearFormEJA with the identity
+        # matrix as its bilinear form.
+        return super(JordanSpinEJA, self).__init__(n, field, **kwargs)
 
 
 class TrivialEJA(FiniteDimensionalEuclideanJordanAlgebra, KnownRankEJA):