1. Add CartesianProductEJA. 2. Check the axioms in the constructor when check != False? 3. Add references and start citing them. 4. Implement the octonion simple EJA. 5. Factor out the Jordan axiom and norm tests once all of the algebras pass. 6. Create Element subclasses for the matrix EJAs, and then override their characteristic_polynomial() method to create a new algebra over the rationals (with a non-normalized basis). We can then compute the charpoly quickly by passing the natural representation of the given element into the new algebra and computing its charpoly there. (Relies on the theory to ensure that the charpolys are equal.)