1. Add references and start citing them. 2. Profile (and fix?) any remaining slow operations. 3. Every once in a long while, the test sage: set_random_seed() sage: x = random_eja().random_element() sage: x.is_invertible() == (x.det() != 0) in eja_element.py returns False. Example: sage: J1 = ComplexHermitianEJA(2) sage: J2 = TrivialEJA() sage: J = cartesian_product([J1,J2]) sage: x = J.from_vector(vector(QQ, [-1, -1/2, -1/2, -1/2])) sage: x.is_invertible() True sage: x.det() 0 4. When we take a Cartesian product involving a trivial algebra, we could easily cache the identity and charpoly coefficients using the nontrivial factor. On the other hand, it's nice that we can test out some alternate code paths...