]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/TODO
eja: update a TODO with a better idea.
[sage.d.git] / mjo / eja / TODO
index db363ac3facd6c3c7475bf9b426664320c19951b..427a9539bb69aa4ab25e0687f0336a09377d57e0 100644 (file)
@@ -1,35 +1,24 @@
-1. Add CartesianProductEJA.
+1. Finish DirectSumEJA: add to_matrix(), random_instance(),
+   one()... methods. Make it subclass RationalBasisEuclideanJordanAlgebra.
+   This is not a general direct sum / cartesian product implementation,
+   it's used only with the other rationalbasis algebras (to make non-
+   simple EJAs out of the simple ones).
 
 2. Add references and start citing them.
 
 3. Implement the octonion simple EJA.
 
 
 2. Add references and start citing them.
 
 3. Implement the octonion simple EJA.
 
-4. Override random_instance(), one(), et cetera in DirectSumEJA.
+4. Pre-cache charpoly for some small algebras?
 
 
-5. Switch to QQ in *all* algebras for _charpoly_coefficients().
-   This only works when we know that the basis can be rationalized...
-   which is the case at least for the concrete EJAs we provide,
-   but not in general.
+RealSymmetricEJA(4):
 
 
-6. Pass already_echelonized (default: False) and echelon_basis
-   (default: None) into the subalgebra constructor. The value of
-   already_echelonized can be passed to V.span_of_basis() to save
-   some time, and usinf e.g. FreeModule_submodule_with_basis_field
-   we may somehow be able to pass the echelon basis straight in to
-   save time.
+sage: F = J.base_ring()
+sage: a0 = (1/4)*X[4]**2*X[6]**2 - (1/2)*X[2]*X[5]*X[6]**2 - (1/2)*X[3]*X[4]*X[6]*X[7] + (F(2).sqrt()/2)*X[1]*X[5]*X[6]*X[7] + (1/4)*X[3]**2*X[7]**2 - (1/2)*X[0]*X[5]*X[7]**2 + (F(2).sqrt()/2)*X[2]*X[3]*X[6]*X[8] - (1/2)*X[1]*X[4]*X[6*X[8] - (1/2)*X[1]*X[3]*X[7]*X[8] + (F(2).sqrt()/2)*X[0]*X[4]*X[7]*X[8] + (1/4)*X[1]**2*X[8]**2 - (1/2)*X[0]*X[2]*X[8]**2 - (1/2)*X[2]*X[3]**2*X[9] + (F(2).sqrt()/2)*X[1]*X[3]*X[4]*X[9] - (1/2)*X[0]*X[4]**2*X[9] - (1/2)*X[1]**2*X[5]*X[9] + X[0]*X[2]*X[5]*X[9]
 
 
-   This may require supporting "basis" as a list of basis vectors
-   (as opposed to superalgebra elements) in the subalgebra constructor.
+5. Compute the scalar in the general natural_inner_product() for
+   matrices, so no overrides are necessary. Actually, this is
+   probably better implemented as a dimension_over_reals() method
+   that returns 1, 2, or 4.
 
 
-7. The inner product should be an *argument* to the main EJA
-   constructor.  Afterwards, the basis normalization step should be
-   optional (and enabled by default) for ALL algebras, since any
-   algebra can have a nonstandard inner-product and its basis can be
-   normalized with respect to that inner- product. For example, the
-   HadamardEJA could be equipped with an inner- product that is twice
-   the usual one. Then for the basis to be orthonormal, we would need
-   to divide e.g. (1,0,0) by <(1,0,0),(1,0,0)> = 2 to normalize it.
-
-8. Use charpoly for inverse itself?
-
-9. Pre-cache charpoly for some small algebras?
+6. The main EJA element constructor is happy to convert between
+   e.g. HadamardEJA(3) and JordanSpinEJA(3).