]> gitweb.michael.orlitzky.com - sage.d.git/log
sage.d.git
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.

5 years agoeja: add multiplication_table() for EJAs.
Michael Orlitzky [Sun, 4 Aug 2019 19:13:18 +0000 (15:13 -0400)]
eja: add multiplication_table() for EJAs.

5 years agoeja: move away from using matrices as our "multiplication table."
Michael Orlitzky [Sun, 4 Aug 2019 18:34:34 +0000 (14:34 -0400)]
eja: move away from using matrices as our "multiplication table."

Instead of passing around a bunch of matrices that can be applied to
vectors to figure out how multiplication works, it's simpler (and
probably faster) to use a two-dimensional array whose (i,j)th entry
contains the answer to "how do we multiply basis elements i and j?"

When we feed these arrays into the EJA constructor, they must contain
vectors: there's no algebra yet, so it's not like we have any algebra
elements to pass in. However, in the long run, it's much more
convenient to have the multiplication table *stored* in terms of
algebra elements; that way we don't have to convert back and forth
every time we want to multiply two algebra elements. The algebra
constructor now performs this conversion and stores a table containing
algebra elements. This makes product_on_basis() a simple table lookup.

5 years agoeja: remove an unused import.
Michael Orlitzky [Sun, 4 Aug 2019 17:13:01 +0000 (13:13 -0400)]
eja: remove an unused import.

5 years agoeja: fix the multiplication table in subalgebras.
Michael Orlitzky [Fri, 2 Aug 2019 23:44:10 +0000 (19:44 -0400)]
eja: fix the multiplication table in subalgebras.

5 years agoeja: fix some more super/subalgebra back and forth.
Michael Orlitzky [Fri, 2 Aug 2019 23:36:15 +0000 (19:36 -0400)]
eja: fix some more super/subalgebra back and forth.

This fixes all of the outright crashes in the test suite, but the
multiplication table in the subalgebra is still broken (it isn't
associative).

5 years agoeja: move the element constructor into the parent algebra class.
Michael Orlitzky [Fri, 2 Aug 2019 23:18:11 +0000 (19:18 -0400)]
eja: move the element constructor into the parent algebra class.

Instead of using the element's __init__(), we're now using the
algebra's _element_constructor_() method that only gets called
after the parent tries to coerce the argument and fails. This
is somewhat cleaner because we don't have to handle the "usual"
case.

5 years agoeja: update some more test output for the new basis orderings.
Michael Orlitzky [Fri, 2 Aug 2019 20:24:43 +0000 (16:24 -0400)]
eja: update some more test output for the new basis orderings.

5 years agoeja: use from_vector() instead of call magic in two more places.
Michael Orlitzky [Fri, 2 Aug 2019 20:24:19 +0000 (16:24 -0400)]
eja: use from_vector() instead of call magic in two more places.

5 years agoeja: use from_vector() instead of relying on call magic in one spot.
Michael Orlitzky [Fri, 2 Aug 2019 20:23:18 +0000 (16:23 -0400)]
eja: use from_vector() instead of relying on call magic in one spot.

5 years agoeja: fix degree() -> dimension() in a few tests.
Michael Orlitzky [Fri, 2 Aug 2019 20:22:47 +0000 (16:22 -0400)]
eja: fix degree() -> dimension() in a few tests.

5 years agoeja: fix construction of subalgebra elements from superalgebra ones.
Michael Orlitzky [Fri, 2 Aug 2019 20:22:04 +0000 (16:22 -0400)]
eja: fix construction of subalgebra elements from superalgebra ones.

5 years agoeja: adjust some test output for the new basis ordering.
Michael Orlitzky [Fri, 2 Aug 2019 20:20:33 +0000 (16:20 -0400)]
eja: adjust some test output for the new basis ordering.

Now that we're using span_of_basis() everywhere instead of accepting
whatever reordering span() gives us, this output has changed (harmlessly).

5 years agoWIP: switch away from the algebra base class and use CombinatorialFreeModule.
Michael Orlitzky [Tue, 30 Jul 2019 22:17:16 +0000 (18:17 -0400)]
WIP: switch away from the algebra base class and use CombinatorialFreeModule.

5 years agoeja: compute the unit element of the algebra ourselves.
Michael Orlitzky [Tue, 30 Jul 2019 15:11:49 +0000 (11:11 -0400)]
eja: compute the unit element of the algebra ourselves.

This brings us one step closer to eliminating the dependency
on the FiniteDimensionalAlgebra class.

5 years agoeja: compute a natural basis for subalgebras.
Michael Orlitzky [Tue, 30 Jul 2019 04:32:27 +0000 (00:32 -0400)]
eja: compute a natural basis for subalgebras.

5 years agoeja: use non-clashing generator names in subalgebras.
Michael Orlitzky [Tue, 30 Jul 2019 04:32:06 +0000 (00:32 -0400)]
eja: use non-clashing generator names in subalgebras.

5 years agoeja: implement subalgebra_generated_by() in terms of the new class.
Michael Orlitzky [Tue, 30 Jul 2019 03:26:49 +0000 (23:26 -0400)]
eja: implement subalgebra_generated_by() in terms of the new class.

5 years agoeja: begin moving the associative subalgebra stuff into its own class.
Michael Orlitzky [Tue, 30 Jul 2019 01:12:05 +0000 (21:12 -0400)]
eja: begin moving the associative subalgebra stuff into its own class.

5 years agoeja: fix the test for regularity of the zero element.
Michael Orlitzky [Tue, 30 Jul 2019 01:10:48 +0000 (21:10 -0400)]
eja: fix the test for regularity of the zero element.

5 years agoeja: factor out the EJA element class into its own module.
Michael Orlitzky [Tue, 30 Jul 2019 00:31:33 +0000 (20:31 -0400)]
eja: factor out the EJA element class into its own module.

5 years agoeja: add more regularity and degree tests.
Michael Orlitzky [Mon, 29 Jul 2019 05:03:20 +0000 (01:03 -0400)]
eja: add more regularity and degree tests.

5 years agoeja: simplify and justify the implementation of is_nilpotent() for elements.
Michael Orlitzky [Mon, 29 Jul 2019 04:36:33 +0000 (00:36 -0400)]
eja: simplify and justify the implementation of is_nilpotent() for elements.

5 years agoeja: add and update a few docstrings and tests.
Michael Orlitzky [Mon, 29 Jul 2019 04:11:56 +0000 (00:11 -0400)]
eja: add and update a few docstrings and tests.

5 years agoeja: require the rank argument for an EJA, because we can't compute it.
Michael Orlitzky [Mon, 29 Jul 2019 04:11:08 +0000 (00:11 -0400)]
eja: require the rank argument for an EJA, because we can't compute it.

5 years agoeja: update some docstrings.
Michael Orlitzky [Mon, 29 Jul 2019 03:40:56 +0000 (23:40 -0400)]
eja: update some docstrings.

5 years agoeja: clean up imports.
Michael Orlitzky [Sun, 28 Jul 2019 17:26:57 +0000 (13:26 -0400)]
eja: clean up imports.

5 years agoeja: update changed module name in all.py.
Michael Orlitzky [Sun, 28 Jul 2019 16:58:41 +0000 (12:58 -0400)]
eja: update changed module name in all.py.

5 years agoeja: separate out the operator class and rename both files.
Michael Orlitzky [Sun, 28 Jul 2019 16:56:46 +0000 (12:56 -0400)]
eja: separate out the operator class and rename both files.

Let's start organizing. It's also time to get the test suite
working. I've added stupid SETUP blocks to each docstring to load the
stuff being tested.

5 years agoeja: add algebra constructors to the global namespace.
Michael Orlitzky [Sun, 28 Jul 2019 16:37:06 +0000 (12:37 -0400)]
eja: add algebra constructors to the global namespace.

5 years agoeja: whitespace fix.
Michael Orlitzky [Sun, 28 Jul 2019 15:41:23 +0000 (11:41 -0400)]
eja: whitespace fix.

5 years agoeja: add minimal_polynomial() for operators.
Michael Orlitzky [Sun, 28 Jul 2019 15:35:08 +0000 (11:35 -0400)]
eja: add minimal_polynomial() for operators.

5 years agoeja: replace element operator_matrix() entirely.
Michael Orlitzky [Sun, 28 Jul 2019 15:24:49 +0000 (11:24 -0400)]
eja: replace element operator_matrix() entirely.

5 years agoeja: use FreeModules() category for operators instead of VectorSpaces().
Michael Orlitzky [Sun, 28 Jul 2019 15:21:00 +0000 (11:21 -0400)]
eja: use FreeModules() category for operators instead of VectorSpaces().

This allows our characteristic polynomial algorithm to use real
operators and not matrices.

5 years agoeja: convert another operator_matrix() test to operator().
Michael Orlitzky [Sun, 28 Jul 2019 15:15:48 +0000 (11:15 -0400)]
eja: convert another operator_matrix() test to operator().

5 years agoeja: suggest operator().matrix() to replace element matrix().
Michael Orlitzky [Sun, 28 Jul 2019 15:15:12 +0000 (11:15 -0400)]
eja: suggest operator().matrix() to replace element matrix().

5 years agoeja: move a bunch of operator_matrix() tests to operator().
Michael Orlitzky [Sun, 28 Jul 2019 15:05:40 +0000 (11:05 -0400)]
eja: move a bunch of operator_matrix() tests to operator().

5 years agoeja: implement element powers in terms of operator().
Michael Orlitzky [Sun, 28 Jul 2019 15:03:51 +0000 (11:03 -0400)]
eja: implement element powers in terms of operator().

5 years agoeja: implement operator_commutes_with() in terms of operator().
Michael Orlitzky [Sun, 28 Jul 2019 14:53:15 +0000 (10:53 -0400)]
eja: implement operator_commutes_with() in terms of operator().

5 years agoeja: rewrite the operator class again to eliminate VectorSpaceMorphisms.
Michael Orlitzky [Sun, 28 Jul 2019 04:36:43 +0000 (00:36 -0400)]
eja: rewrite the operator class again to eliminate VectorSpaceMorphisms.

Wherever possible, I'd like to eliminate row-vector APIs from sneaking
into userland. There's no reason for us to subclass VectorSpaceMorphism,
because left-multiplication by a scalar doesn't work anyway. So, just
drop it, and keep our own matrix variable around instead.

5 years agoeja: replace the Hom stuff with a custom EJA operator class.
Michael Orlitzky [Sat, 27 Jul 2019 15:05:42 +0000 (11:05 -0400)]
eja: replace the Hom stuff with a custom EJA operator class.

Implementing homsets as linear operators was always a hack, since
linear operators will in general not be algebra homomorphisms. We
wound up re-implementing addition, subtraction, etc. of operators
anyway, so in hindsight, there is no extra difficulty in creating our
own EJA operator class as a subclass of VectorSpaceMorphism.

This commit throws out the EJA morphism stuff, and replaces it with
an equivalent EJA operator class to remain mathematically sound.

5 years agoeja: add vector_space() method for EJAs to get the ambient space.
Michael Orlitzky [Sat, 27 Jul 2019 13:30:08 +0000 (09:30 -0400)]
eja: add vector_space() method for EJAs to get the ambient space.

5 years agoeja: fix a busted operator inverse test.
Michael Orlitzky [Sat, 27 Jul 2019 12:54:31 +0000 (08:54 -0400)]
eja: fix a busted operator inverse test.

5 years agoeja: fix an erroneous test case.
Michael Orlitzky [Sat, 27 Jul 2019 00:46:25 +0000 (20:46 -0400)]
eja: fix an erroneous test case.

5 years agoeja: fix powers of zero for operators.
Michael Orlitzky [Sat, 27 Jul 2019 00:44:42 +0000 (20:44 -0400)]
eja: fix powers of zero for operators.

When you raise a morphism to the power of zero, it returns an object
(the identity morphism) in a much more general and useless space. We
need to be able to add/subtract these things. So now we have our own
one() method for the Homset, and our own __pow__ for morphisms.

5 years agoeja: fix the element inverse() implementation and some failing tests.
Michael Orlitzky [Fri, 26 Jul 2019 23:57:30 +0000 (19:57 -0400)]
eja: fix the element inverse() implementation and some failing tests.

5 years agoeja: finally get scalar-morphism multiplication working with the new homsets.
Michael Orlitzky [Fri, 26 Jul 2019 23:57:04 +0000 (19:57 -0400)]
eja: finally get scalar-morphism multiplication working with the new homsets.

5 years agoeja: create our own Homset class for EJAs (ugh).
Michael Orlitzky [Fri, 26 Jul 2019 23:56:33 +0000 (19:56 -0400)]
eja: create our own Homset class for EJAs (ugh).

5 years agoeja: use single-underscore method names for morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 20:58:23 +0000 (16:58 -0400)]
eja: use single-underscore method names for morphisms.

5 years agoeja: use sexier FiniteDimensionalAlgebrasWithBasis category.
Michael Orlitzky [Fri, 26 Jul 2019 20:58:01 +0000 (16:58 -0400)]
eja: use sexier FiniteDimensionalAlgebrasWithBasis category.

5 years agoeja: rework the quadratic representation tests in terms of morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 17:41:38 +0000 (13:41 -0400)]
eja: rework the quadratic representation tests in terms of morphisms.

Just saving this WIP, because I'm starting to suspect that my
implementation of morphisms might be stupid.

5 years agoeja: add negation/subtraction for morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 17:41:25 +0000 (13:41 -0400)]
eja: add negation/subtraction for morphisms.

5 years agoeja: add composition (multiplication) for morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 17:03:37 +0000 (13:03 -0400)]
eja: add composition (multiplication) for morphisms.

The whatever-superclass composition of morphisms returned a formal
composition, which can't be treated like a morphism itself. Since all
of our morphisms are represented by matrices, we can simply perform
the composition ourself via matrix multiplication to return something
useful.

5 years agoeja: add __invert__ method for morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 16:45:19 +0000 (12:45 -0400)]
eja: add __invert__ method for morphisms.

5 years agoeja: improve tests for morphism addition.
Michael Orlitzky [Fri, 26 Jul 2019 16:44:15 +0000 (12:44 -0400)]
eja: improve tests for morphism addition.

5 years agoeja: allow addition of EJA morphisms.
Michael Orlitzky [Fri, 26 Jul 2019 16:31:01 +0000 (12:31 -0400)]
eja: allow addition of EJA morphisms.

5 years agoeja: add new operator() method for elements that returns a morphism.
Michael Orlitzky [Fri, 26 Jul 2019 16:13:14 +0000 (12:13 -0400)]
eja: add new operator() method for elements that returns a morphism.

5 years agoeja: new class FiniteDimensionalEuclideanJordanAlgebraMorphism.
Michael Orlitzky [Fri, 26 Jul 2019 16:12:41 +0000 (12:12 -0400)]
eja: new class FiniteDimensionalEuclideanJordanAlgebraMorphism.

This is the first step towards implementing left-multiplication
operators and quadratic-representations properly.

5 years agoeja: improve a comment.
Michael Orlitzky [Fri, 26 Jul 2019 16:11:32 +0000 (12:11 -0400)]
eja: improve a comment.

5 years agoeja: use an insane hack to hide the (left_)matrix methods for elements.
Michael Orlitzky [Fri, 26 Jul 2019 16:10:48 +0000 (12:10 -0400)]
eja: use an insane hack to hide the (left_)matrix methods for elements.

5 years agoeja: use the quadratic representation for the element inverse.
Michael Orlitzky [Fri, 26 Jul 2019 14:05:45 +0000 (10:05 -0400)]
eja: use the quadratic representation for the element inverse.

5 years agoeja: add tests for more quadratic representation properties.
Michael Orlitzky [Fri, 26 Jul 2019 00:41:40 +0000 (20:41 -0400)]
eja: add tests for more quadratic representation properties.