]> gitweb.michael.orlitzky.com - sage.d.git/log
sage.d.git
5 years agoeja: add a test for the inverse via charpoly.
Michael Orlitzky [Sun, 13 Oct 2019 00:15:09 +0000 (20:15 -0400)]
eja: add a test for the inverse via charpoly.

5 years agoeja: declare a utf-8 encoding and use it to write Korányi.
Michael Orlitzky [Sun, 13 Oct 2019 00:02:23 +0000 (20:02 -0400)]
eja: declare a utf-8 encoding and use it to write Korányi.

5 years agoeja: add another test for element inverses.
Michael Orlitzky [Thu, 10 Oct 2019 13:26:08 +0000 (09:26 -0400)]
eja: add another test for element inverses.

5 years agoeja: add inverse() method for operators.
Michael Orlitzky [Thu, 10 Oct 2019 13:24:17 +0000 (09:24 -0400)]
eja: add inverse() method for operators.

5 years agoeja: add is_invertible() for operators.
Michael Orlitzky [Thu, 10 Oct 2019 13:04:51 +0000 (09:04 -0400)]
eja: add is_invertible() for operators.

5 years agoeja: add more tests for the (now-working) spectral_decomposition().
Michael Orlitzky [Fri, 30 Aug 2019 15:50:57 +0000 (11:50 -0400)]
eja: add more tests for the (now-working) spectral_decomposition().

5 years agoeja: fix one() for subalgebras with orthonormal bases.
Michael Orlitzky [Fri, 30 Aug 2019 15:50:12 +0000 (11:50 -0400)]
eja: fix one() for subalgebras with orthonormal bases.

5 years agoeja: allow random_eja() to take a "field" argument.
Michael Orlitzky [Fri, 30 Aug 2019 15:48:59 +0000 (11:48 -0400)]
eja: allow random_eja() to take a "field" argument.

5 years agoeja: get a rudimentary spectral decomposition for operators working.
Michael Orlitzky [Fri, 30 Aug 2019 02:48:51 +0000 (22:48 -0400)]
eja: get a rudimentary spectral decomposition for operators working.

5 years agoeja: add "check" parameter to check if our field is real.
Michael Orlitzky [Fri, 30 Aug 2019 00:32:55 +0000 (20:32 -0400)]
eja: add "check" parameter to check if our field is real.

5 years agoeja: ensure that we can construct quaternion matrices over AA and RR.
Michael Orlitzky [Fri, 30 Aug 2019 00:17:41 +0000 (20:17 -0400)]
eja: ensure that we can construct quaternion matrices over AA and RR.

5 years agoeja: fix ComplexHermitianEJA over AA and RR.
Michael Orlitzky [Fri, 30 Aug 2019 00:13:36 +0000 (20:13 -0400)]
eja: fix ComplexHermitianEJA over AA and RR.

5 years agoeja: simplify the way we do field extensions.
Michael Orlitzky [Fri, 30 Aug 2019 00:11:25 +0000 (20:11 -0400)]
eja: simplify the way we do field extensions.

5 years agoAdd even more TODO items.
Michael Orlitzky [Thu, 29 Aug 2019 23:08:55 +0000 (19:08 -0400)]
Add even more TODO items.

5 years agoeja: ensure that we can construct RealSymmetricEJA over AA and RR.
Michael Orlitzky [Thu, 29 Aug 2019 23:08:33 +0000 (19:08 -0400)]
eja: ensure that we can construct RealSymmetricEJA over AA and RR.

5 years agoeja: reword a comment.
Michael Orlitzky [Thu, 29 Aug 2019 15:52:25 +0000 (11:52 -0400)]
eja: reword a comment.

5 years agoeja: add some more TODO items.
Michael Orlitzky [Thu, 29 Aug 2019 15:46:47 +0000 (11:46 -0400)]
eja: add some more TODO items.

5 years agoRevert "eja: always use the rationals for denormalized bases."
Michael Orlitzky [Thu, 29 Aug 2019 15:45:52 +0000 (11:45 -0400)]
Revert "eja: always use the rationals for denormalized bases."

This reverts commit 1e3bfabaac18a1118fc4afd632265d91d3d0ec6c.
It broke the tests, and next time I'll do it one step at a time
to keep them working.

5 years agoeja: fix a copy/paste-o.
Michael Orlitzky [Thu, 29 Aug 2019 15:45:31 +0000 (11:45 -0400)]
eja: fix a copy/paste-o.

5 years agoeja: insist that operator matrix base ring matches its domain's.
Michael Orlitzky [Thu, 29 Aug 2019 15:41:04 +0000 (11:41 -0400)]
eja: insist that operator matrix base ring matches its domain's.

5 years agoeja: fix some tests that broke with the gram-schmidt commit.
Michael Orlitzky [Thu, 29 Aug 2019 15:30:02 +0000 (11:30 -0400)]
eja: fix some tests that broke with the gram-schmidt commit.

5 years agoeja: ensure that we get a polynomial over the right ring in _charpoly_coeff().
Michael Orlitzky [Thu, 29 Aug 2019 14:06:01 +0000 (10:06 -0400)]
eja: ensure that we get a polynomial over the right ring in _charpoly_coeff().

5 years agoeja: convert back the the starting field after quaternion embedding.
Michael Orlitzky [Thu, 29 Aug 2019 13:44:07 +0000 (09:44 -0400)]
eja: convert back the the starting field after quaternion embedding.

We already do this for the complex simple EJA, and this un-breaks using
other fields.

5 years agoeja: always use the rationals for denormalized bases.
Michael Orlitzky [Thu, 29 Aug 2019 13:43:34 +0000 (09:43 -0400)]
eja: always use the rationals for denormalized bases.

5 years agoeja: add a WIP gram-schmidt for EJA elements.
Michael Orlitzky [Thu, 29 Aug 2019 12:56:56 +0000 (08:56 -0400)]
eja: add a WIP gram-schmidt for EJA elements.

This doesn't really work right now because we need a whole bunch of
algebraic numbers that we don't know a priori. I might need to suck
it up and just use AA instead of quadratic number fields.

5 years agoeja: remove an unused is_Matrix import.
Michael Orlitzky [Thu, 29 Aug 2019 12:55:18 +0000 (08:55 -0400)]
eja: remove an unused is_Matrix import.

5 years agoeja: fix incorrect usage of "Jordan axiom" -- I meant "associativity."
Michael Orlitzky [Tue, 27 Aug 2019 14:30:16 +0000 (10:30 -0400)]
eja: fix incorrect usage of "Jordan axiom" -- I meant "associativity."

5 years agoeja: introduce an intermediate class for "concrete" algebras.
Michael Orlitzky [Mon, 26 Aug 2019 04:00:00 +0000 (00:00 -0400)]
eja: introduce an intermediate class for "concrete" algebras.

There were two TODO items that are basically impossible: we can't
construct a "random" EJA from (say) an associative matrix algebra,
mainly because we don't know its rank. For that reason, it doesn't
make sense to have random_instance() defined in the parent class.
Now there's a subclass (KnownRankEJA) with those methods.

5 years agoeja: refactor the matrix EJA hierarchy (mainly constructors) a bit.
Michael Orlitzky [Mon, 26 Aug 2019 03:40:41 +0000 (23:40 -0400)]
eja: refactor the matrix EJA hierarchy (mainly constructors) a bit.

5 years agoeja: simplify two subclass docstrings.
Michael Orlitzky [Mon, 26 Aug 2019 03:35:55 +0000 (23:35 -0400)]
eja: simplify two subclass docstrings.

5 years agoeja: use izip() instead of zip() in a few places.
Michael Orlitzky [Mon, 26 Aug 2019 03:31:56 +0000 (23:31 -0400)]
eja: use izip() instead of zip() in a few places.

5 years agoeja: use keywords to pass keyword args (makes constructor more robust).
Michael Orlitzky [Mon, 26 Aug 2019 02:53:56 +0000 (22:53 -0400)]
eja: use keywords to pass keyword args (makes constructor more robust).

5 years agoeja: simplify "span of powers" computation in subalgebras.
Michael Orlitzky [Mon, 26 Aug 2019 00:13:28 +0000 (20:13 -0400)]
eja: simplify "span of powers" computation in subalgebras.

5 years agoeja: replace range() by xrange() in a few places.
Michael Orlitzky [Sun, 25 Aug 2019 23:09:03 +0000 (19:09 -0400)]
eja: replace range() by xrange() in a few places.

5 years agoeja: use precomputed operator in two tests.
Michael Orlitzky [Sun, 25 Aug 2019 22:45:22 +0000 (18:45 -0400)]
eja: use precomputed operator in two tests.

5 years agoeja: speed up the computation of element powers.
Michael Orlitzky [Sun, 25 Aug 2019 22:39:15 +0000 (18:39 -0400)]
eja: speed up the computation of element powers.

5 years agoeja: fix a bug in the charpoly fast path for complex/quaternion matrices.
Michael Orlitzky [Sat, 24 Aug 2019 04:06:56 +0000 (00:06 -0400)]
eja: fix a bug in the charpoly fast path for complex/quaternion matrices.

5 years agoeja: refactor and fix the fast charpoly stuff that I broke recently.
Michael Orlitzky [Sat, 24 Aug 2019 02:09:08 +0000 (22:09 -0400)]
eja: refactor and fix the fast charpoly stuff that I broke recently.

5 years agoeja: fix computation of the max test case sizes.
Michael Orlitzky [Sat, 24 Aug 2019 02:08:53 +0000 (22:08 -0400)]
eja: fix computation of the max test case sizes.

5 years agoeja: make a test agree with its comment.
Michael Orlitzky [Sat, 24 Aug 2019 02:06:28 +0000 (22:06 -0400)]
eja: make a test agree with its comment.

5 years agoeja: add fast natural_inner_product() overrides for complex/quaternions.
Michael Orlitzky [Sat, 24 Aug 2019 01:44:29 +0000 (21:44 -0400)]
eja: add fast natural_inner_product() overrides for complex/quaternions.

5 years agoeja: add the RealMatrixEuclideanJordanAlgebra class.
Michael Orlitzky [Sat, 24 Aug 2019 01:13:48 +0000 (21:13 -0400)]
eja: add the RealMatrixEuclideanJordanAlgebra class.

We already had analogues for complex and quaternion matrices. The real
one should have been there all along too.

5 years agoeja: drop some very slow and very pointless rank() tests.
Michael Orlitzky [Sat, 24 Aug 2019 00:45:05 +0000 (20:45 -0400)]
eja: drop some very slow and very pointless rank() tests.

5 years agoeja: replace RR with RLF in one test.
Michael Orlitzky [Sat, 24 Aug 2019 00:29:36 +0000 (20:29 -0400)]
eja: replace RR with RLF in one test.

I guess we occasionally get fractions (in QQ) that aren't in RR due
to precision issues? Whatever, they're in RLF.

5 years agoeja: add random_elements() method to get multiple random elements at once.
Michael Orlitzky [Sat, 24 Aug 2019 00:02:28 +0000 (20:02 -0400)]
eja: add random_elements() method to get multiple random elements at once.

5 years agoeja: remove some unused imports from eja_utils.
Michael Orlitzky [Fri, 23 Aug 2019 23:53:02 +0000 (19:53 -0400)]
eja: remove some unused imports from eja_utils.

5 years agoeja: delete redundant Jordan axiom tests.
Michael Orlitzky [Fri, 23 Aug 2019 23:26:45 +0000 (19:26 -0400)]
eja: delete redundant Jordan axiom tests.

5 years agoeja: refactor the class hierarchy to separate the matrix EJAs.
Michael Orlitzky [Fri, 23 Aug 2019 20:14:18 +0000 (16:14 -0400)]
eja: refactor the class hierarchy to separate the matrix EJAs.

5 years agoeja: delete unused vec2mat() function.
Michael Orlitzky [Fri, 23 Aug 2019 19:22:56 +0000 (15:22 -0400)]
eja: delete unused vec2mat() function.

5 years agoeja: drop unused _matrix_ip function.
Michael Orlitzky [Fri, 23 Aug 2019 17:25:33 +0000 (13:25 -0400)]
eja: drop unused _matrix_ip function.

5 years agoeja: add random_instance() method for algebras.
Michael Orlitzky [Fri, 23 Aug 2019 17:19:27 +0000 (13:19 -0400)]
eja: add random_instance() method for algebras.

5 years agoeja: move the max test case sizes into their respective classes.
Michael Orlitzky [Fri, 23 Aug 2019 15:52:46 +0000 (11:52 -0400)]
eja: move the max test case sizes into their respective classes.

5 years agoeja: fix a comment to match its test case.
Michael Orlitzky [Fri, 23 Aug 2019 15:27:33 +0000 (11:27 -0400)]
eja: fix a comment to match its test case.

5 years agoeja: remove pointless __class__ from static method invocations.
Michael Orlitzky [Fri, 23 Aug 2019 15:25:21 +0000 (11:25 -0400)]
eja: remove pointless __class__ from static method invocations.

5 years agoeja: combine several slow trace_inner_product() tests.
Michael Orlitzky [Fri, 23 Aug 2019 15:17:52 +0000 (11:17 -0400)]
eja: combine several slow trace_inner_product() tests.

5 years agoeja: enable normalization of the natural quaternion basis.
Michael Orlitzky [Fri, 23 Aug 2019 15:17:33 +0000 (11:17 -0400)]
eja: enable normalization of the natural quaternion basis.

5 years agoAdd another TODO for later.
Michael Orlitzky [Fri, 23 Aug 2019 15:16:59 +0000 (11:16 -0400)]
Add another TODO for later.

5 years agoeja: don't change base rings when we don't have to.
Michael Orlitzky [Fri, 23 Aug 2019 14:44:21 +0000 (10:44 -0400)]
eja: don't change base rings when we don't have to.

5 years agoeja: reword two existing tests.
Michael Orlitzky [Fri, 23 Aug 2019 14:42:54 +0000 (10:42 -0400)]
eja: reword two existing tests.

5 years agoeja: remove unused argument to _quaternion_hermitian_basis().
Michael Orlitzky [Fri, 23 Aug 2019 14:40:55 +0000 (10:40 -0400)]
eja: remove unused argument to _quaternion_hermitian_basis().

5 years agoeja: add an ungodly hack to get fast charpolys back.
Michael Orlitzky [Wed, 21 Aug 2019 21:39:46 +0000 (17:39 -0400)]
eja: add an ungodly hack to get fast charpolys back.

5 years agoeja: refactor some of the basis and inner-product stuff.
Michael Orlitzky [Wed, 21 Aug 2019 20:10:14 +0000 (16:10 -0400)]
eja: refactor some of the basis and inner-product stuff.

This is movement towards eventually cheating on the charpoly
coefficients, which we should be able to compute in the "nice" basis
and then scale to the normalized one. The coefficients are polynomials
in "the coordinates of x", and those coordinates change only by a
scalar multiple when we normalize the basis.

5 years agoeja: update a half-completed TODO.
Michael Orlitzky [Wed, 21 Aug 2019 20:01:07 +0000 (16:01 -0400)]
eja: update a half-completed TODO.

5 years agoeja: remove a redundant abs() on a nonnegative integer.
Michael Orlitzky [Wed, 21 Aug 2019 20:00:02 +0000 (16:00 -0400)]
eja: remove a redundant abs() on a nonnegative integer.

5 years agoeja: add an optimization to the TODO.
Michael Orlitzky [Wed, 21 Aug 2019 15:09:25 +0000 (11:09 -0400)]
eja: add an optimization to the TODO.

5 years agoeja: don't adjoin roots to the field if we're not normalizing the basis.
Michael Orlitzky [Wed, 21 Aug 2019 15:02:29 +0000 (11:02 -0400)]
eja: don't adjoin roots to the field if we're not normalizing the basis.

5 years agoeja: add a test for basis-invariance of minimal polynomial.
Michael Orlitzky [Wed, 21 Aug 2019 15:00:58 +0000 (11:00 -0400)]
eja: add a test for basis-invariance of minimal polynomial.

5 years agoeja: add "normalize" argument to matrix algebra constructors.
Michael Orlitzky [Wed, 21 Aug 2019 14:50:55 +0000 (10:50 -0400)]
eja: add "normalize" argument to matrix algebra constructors.

This is useful for two reasons:

  1. It's nice to be able to test that some things are invariant
     under changes of basis.

  2. The min/charpoly computations will be a lot faster if we
     can use the basis over QQ (i.e. if the properties that we're
     testing in the first item hold).

5 years agoeja: use QuadraticField selectively to simplify tests.
Michael Orlitzky [Wed, 21 Aug 2019 13:57:40 +0000 (09:57 -0400)]
eja: use QuadraticField selectively to simplify tests.

5 years agoeja: don't adjoin sqrt(2) to the field if it's already there.
Michael Orlitzky [Tue, 20 Aug 2019 23:30:45 +0000 (19:30 -0400)]
eja: don't adjoin sqrt(2) to the field if it's already there.

5 years agoeja: normalize the complex hermitian matrix basis, too.
Michael Orlitzky [Tue, 20 Aug 2019 23:16:54 +0000 (19:16 -0400)]
eja: normalize the complex hermitian matrix basis, too.

5 years agoeja: use NumberField instead of QuadraticField everywhere.
Michael Orlitzky [Tue, 20 Aug 2019 21:28:06 +0000 (17:28 -0400)]
eja: use NumberField instead of QuadraticField everywhere.

This will be more extensible when we need a field containing both
sqrt(2) and sqrt(-1). QuadraticField can't handle that, so we have to
use NumberField anyway at that point. Might as well get it out of the
way.

5 years agoeja: normalize the real symmetric matrix basis.
Michael Orlitzky [Tue, 20 Aug 2019 20:46:16 +0000 (16:46 -0400)]
eja: normalize the real symmetric matrix basis.

This is necessary to ensure that the default basis representation is
an isometry. When it is not, the left-multiplication operator is
self-adjoint (by the Jordan axiom), but its matrix with respect to
that basis is not. The other two matrix algebras need similar fixing.

5 years agoeja: fix doctests for matrix basis functions.
Michael Orlitzky [Tue, 20 Aug 2019 20:44:18 +0000 (16:44 -0400)]
eja: fix doctests for matrix basis functions.

I broke these a bit ago when I made a parameter non-optional. Oops.

5 years agoeja: add a TODO about factoring out the Jordan axiom / norm tests.
Michael Orlitzky [Tue, 20 Aug 2019 15:50:45 +0000 (11:50 -0400)]
eja: add a TODO about factoring out the Jordan axiom / norm tests.

5 years agoeja: use the basis space ring instead of the element's during construction.
Michael Orlitzky [Tue, 20 Aug 2019 15:11:32 +0000 (11:11 -0400)]
eja: use the basis space ring instead of the element's during construction.

Basically, when we're constructing an element, we're trying to fit
some given representation into a pre-existing space. Thus it makes
sense to build that space out of the pre-existing stuff, and not from
the element's base ring. This makes sense in general.

5 years agoeja: add a test for the symmetry of the _real_symmetric_basis().
Michael Orlitzky [Tue, 20 Aug 2019 15:10:05 +0000 (11:10 -0400)]
eja: add a test for the symmetry of the _real_symmetric_basis().

5 years agoeja: require "field" argument for matrix basis functions.
Michael Orlitzky [Tue, 20 Aug 2019 14:12:04 +0000 (10:12 -0400)]
eja: require "field" argument for matrix basis functions.

5 years agoeja: add norm() and trace_norm() methods for elements.
Michael Orlitzky [Tue, 20 Aug 2019 14:05:39 +0000 (10:05 -0400)]
eja: add norm() and trace_norm() methods for elements.

5 years agoeja: add tests to ensure the Jordan axiom for inner products is satisfied.
Michael Orlitzky [Tue, 20 Aug 2019 13:01:50 +0000 (09:01 -0400)]
eja: add tests to ensure the Jordan axiom for inner products is satisfied.

5 years agoeja: mention the octonions in the TODO.
Michael Orlitzky [Tue, 20 Aug 2019 13:01:38 +0000 (09:01 -0400)]
eja: mention the octonions in the TODO.

5 years agoeja: update the TODO list.
Michael Orlitzky [Mon, 19 Aug 2019 22:30:48 +0000 (18:30 -0400)]
eja: update the TODO list.

5 years agoeja: add a new TODO list.
Michael Orlitzky [Mon, 19 Aug 2019 17:30:33 +0000 (13:30 -0400)]
eja: add a new TODO list.

5 years agoeja: fix the natural representation in trivial subalgebras.
Michael Orlitzky [Sat, 10 Aug 2019 00:00:04 +0000 (20:00 -0400)]
eja: fix the natural representation in trivial subalgebras.

The natural representation relies on knowing a matrix space, and in a
trivial subalgebra there ain't no matrices to have no spaces. To work
around that, the space is now computed/stored separately, in a new
natural_basis_space() method. This is then overridden in the subalgebra
class to do the right thing.

5 years agoeja: fix the characteristic polynomial in subalgebras.
Michael Orlitzky [Fri, 9 Aug 2019 23:39:15 +0000 (19:39 -0400)]
eja: fix the characteristic polynomial in subalgebras.

5 years agoeja: add is_trivial() method and special cases for trivial algebras.
Michael Orlitzky [Fri, 9 Aug 2019 19:22:14 +0000 (15:22 -0400)]
eja: add is_trivial() method and special cases for trivial algebras.

5 years agoeja: override _a_regular_element() in subalgebras, since we know one.
Michael Orlitzky [Fri, 9 Aug 2019 17:18:54 +0000 (13:18 -0400)]
eja: override _a_regular_element() in subalgebras, since we know one.

5 years agoeja: fix the subalgebra generated by zero.
Michael Orlitzky [Fri, 9 Aug 2019 17:17:55 +0000 (13:17 -0400)]
eja: fix the subalgebra generated by zero.

5 years agoeja: fix construction of subalgebra-subalgebras.
Michael Orlitzky [Fri, 9 Aug 2019 16:58:54 +0000 (12:58 -0400)]
eja: fix construction of subalgebra-subalgebras.

5 years agoeja: choose subalgebra generator prefix smarter.
Michael Orlitzky [Wed, 7 Aug 2019 19:16:04 +0000 (15:16 -0400)]
eja: choose subalgebra generator prefix smarter.

5 years agoeja: pass keyword arguments through simple EJA constructors.
Michael Orlitzky [Wed, 7 Aug 2019 19:04:20 +0000 (15:04 -0400)]
eja: pass keyword arguments through simple EJA constructors.

5 years agoeja: rewrite the hacky process used for characteristic polynomials.
Michael Orlitzky [Wed, 7 Aug 2019 00:09:09 +0000 (20:09 -0400)]
eja: rewrite the hacky process used for characteristic polynomials.

5 years agoeja: use "dimension" instead of "degree" in EJA string representation.
Michael Orlitzky [Tue, 6 Aug 2019 23:00:57 +0000 (19:00 -0400)]
eja: use "dimension" instead of "degree" in EJA string representation.

5 years agoeja: ensure that Sage doesn't think EJAs are associative.
Michael Orlitzky [Mon, 5 Aug 2019 18:06:24 +0000 (14:06 -0400)]
eja: ensure that Sage doesn't think EJAs are associative.

It turns out that the FiniteDimensionalAlgebrasWithBasis category
somehow has both the legacy Algebras() category and the newer
MagmaticAlgebras() category as super-categories. Problem is, the
legacy one is associative! To fix that, we now use MagmaticAlgebras
directly.

Of course, we have to reimplement some of the stuff that was done for
us before... and we have to add a bunch of hacks for parts of Sage
that break when you don't have a ring.... and we can't use a matrix
for our multiplication table any more. But it was all doable.

5 years agoRevert "eja: store the multiplication table as a matrix."
Michael Orlitzky [Mon, 5 Aug 2019 17:08:18 +0000 (13:08 -0400)]
Revert "eja: store the multiplication table as a matrix."

This reverts commit 98c3ab3a9df8c634a0fbb05ed6ad22abf41118f3. Will be
needed if we want to un-make our algebra a ring.

5 years agoeja: don't waste time computing the unit element in subalgebras.
Michael Orlitzky [Mon, 5 Aug 2019 14:28:06 +0000 (10:28 -0400)]
eja: don't waste time computing the unit element in subalgebras.

5 years agoeja: use V.gen(i) instead of V.basis()[i] in a few places.
Michael Orlitzky [Mon, 5 Aug 2019 14:27:47 +0000 (10:27 -0400)]
eja: use V.gen(i) instead of V.basis()[i] in a few places.

5 years agoeja: store the multiplication table as a matrix.
Michael Orlitzky [Mon, 5 Aug 2019 01:07:23 +0000 (21:07 -0400)]
eja: store the multiplication table as a matrix.

This way, we don't need to either regenerate it when someone calls
multiplication_table(), or cache a second copy of it. Besides,
matrices are efficient and indexing one is probably faster than
indexing a list of lists.

5 years agoeja: switch some index orderings to agree with row-then-column semantics.
Michael Orlitzky [Mon, 5 Aug 2019 01:06:13 +0000 (21:06 -0400)]
eja: switch some index orderings to agree with row-then-column semantics.

This doesn't actually affect anything in these cases, but the row "i"
indices should be on the outside whenever we loop through a
two-dimensional array that corresponds to a matrix.

5 years agoeja: add a SETUP block to fix an existing doctest.
Michael Orlitzky [Mon, 5 Aug 2019 01:05:51 +0000 (21:05 -0400)]
eja: add a SETUP block to fix an existing doctest.