]>
gitweb.michael.orlitzky.com - sage.d.git/log
Michael Orlitzky [Mon, 26 Jan 2026 02:35:59 +0000 (21:35 -0500)]
mjo/clan: factor out up_hat, down_hat, etc. for matrix clans
Michael Orlitzky [Sat, 24 Jan 2026 16:16:27 +0000 (11:16 -0500)]
mjo/clan: move matrix-clan methods to an intermediate class
Michael Orlitzky [Sat, 24 Jan 2026 16:10:43 +0000 (11:10 -0500)]
mjo/matrix_algebra.py: alllow from_list() to take one long list
This makes its behavior more consistent with that of MatrixSpace.
Michael Orlitzky [Sat, 24 Jan 2026 16:10:34 +0000 (11:10 -0500)]
mjo/matrix_algebra.py: whitespace
Michael Orlitzky [Sat, 24 Jan 2026 15:09:11 +0000 (10:09 -0500)]
mjo/clan: move one() into the NormalDecomposition class
We know this in terms of the idempotents, whatever they are.
Michael Orlitzky [Sat, 24 Jan 2026 02:39:13 +0000 (21:39 -0500)]
mjo/clan: initial implementation of the Hermitian complex matrix clan
Michael Orlitzky [Sat, 24 Jan 2026 02:15:57 +0000 (21:15 -0500)]
mjo/clan: new diag() method for elements, everything now index-agnostic
With idempotent() and diag() helpers, the element code now does not
need to know what the indexing scheme is.
Michael Orlitzky [Sat, 24 Jan 2026 02:14:38 +0000 (21:14 -0500)]
mjo/clan: add idempotent() method for normal decompositions
Just a helper to get the idempotent (diagonal) elements without
having to care what the basis indices are.
Michael Orlitzky [Sat, 24 Jan 2026 01:14:42 +0000 (20:14 -0500)]
mjo/hurwitz.py: add matrix transpose() method
Sometimes you just need to transpose a complex matrix, you know?
Michael Orlitzky [Sat, 24 Jan 2026 01:11:39 +0000 (20:11 -0500)]
mjo/matrix_algebra.py: support the original __getitem__ syntax
To support submodules, we need __getitem__() to support its original
behavior of returning coordinates when given all three indices.
Michael Orlitzky [Fri, 23 Jan 2026 16:50:23 +0000 (11:50 -0500)]
mjo/clan: complete the migration to three coordinates
Three coordinates are needed to identify a basis element in general:
(i,j) to identify the component, and then "k" for the basis within
the (i,j)th component.
This should allow us to define HnClan, which has 2d off-diagonal
components.
Michael Orlitzky [Fri, 23 Jan 2026 14:02:25 +0000 (09:02 -0500)]
mjo/clan: WIP conversion to three coordinates
Michael Orlitzky [Fri, 23 Jan 2026 13:03:54 +0000 (08:03 -0500)]
mjo/clan/unital_clan.py: remove unused local variable
Michael Orlitzky [Sat, 17 Jan 2026 01:58:44 +0000 (20:58 -0500)]
mjo/clan: add x.D(k) and x.chi(k) methods
These are the homogeneous polynomials and diagonals-squared of the
triangular factorization of x, as in the Ishi / Gindikin papers.
Michael Orlitzky [Fri, 16 Jan 2026 13:18:39 +0000 (08:18 -0500)]
mjo/clan: factor out NormalDecomposition to its own class
Some methods require knowledge of the normal decomposition
coordinates.
Michael Orlitzky [Thu, 15 Jan 2026 03:07:38 +0000 (22:07 -0500)]
mjo/clan: get inner products working; implement one() for SnClan
Michael Orlitzky [Thu, 15 Jan 2026 01:40:18 +0000 (20:40 -0500)]
mjo/clan: begin implementing the clan on S^n
Michael Orlitzky [Sat, 3 Jan 2026 00:51:12 +0000 (19:51 -0500)]
clan: eliminate the user basis stuff from the new clan module
I think we'll be able to get away with just using the "real" basis
elements as keys to the CFM. This makes it easy to reconstruct the
"user" coordinates from CFM elements.
Michael Orlitzky [Fri, 2 Jan 2026 17:29:30 +0000 (12:29 -0500)]
mjo: move eja.eja_utils to mjo.misc
These functions are useful outside of Euclidean Jordan algebras.
It's looking in particular like the _all2list() gimmick may be
a useful general construct for algebras with a user basis.
Michael Orlitzky [Fri, 2 Jan 2026 16:39:30 +0000 (11:39 -0500)]
mjo/clan/unital_clan.py: begin clan implementation
Michael Orlitzky [Sun, 30 Nov 2025 21:59:49 +0000 (16:59 -0500)]
mjo/cone/decomposition.py: rearrangement examples for is_reducible()
Michael Orlitzky [Fri, 14 Nov 2025 01:21:10 +0000 (20:21 -0500)]
mjo/cone/decomposition.py: handle trivial cones correctly
Michael Orlitzky [Wed, 12 Nov 2025 00:51:51 +0000 (19:51 -0500)]
mjo/cone/decomposition.py: add new is_reducible() function
Michael Orlitzky [Wed, 12 Nov 2025 00:51:42 +0000 (19:51 -0500)]
mjo/cone/decomposition.py: add missing colon
Michael Orlitzky [Tue, 11 Nov 2025 23:46:20 +0000 (18:46 -0500)]
mjo/cone/decomposition.py: add tests, fix the edges of the edges
A miscellaneous selection:
* The vertex numbering was off because pivots() renumbers them.
* Updated the docs to fix some incorrect claims.
* Added lots of new tests.
* Special case for irreducible cones to return K itself.
* Use subspace_with_basis() instead of span() to preserve
our user basis.
Tests now pass, and the documentation is converging upon the truth.
Michael Orlitzky [Tue, 11 Nov 2025 15:53:38 +0000 (10:53 -0500)]
mjo/cone/decomposition.py: support non-solid cones
Michael Orlitzky [Tue, 11 Nov 2025 13:53:35 +0000 (08:53 -0500)]
mjo/cone/all.py: add mjo/cone/decomposition.py
Michael Orlitzky [Tue, 11 Nov 2025 13:53:04 +0000 (08:53 -0500)]
mjo/cone/decomposition.py: rename "decomposition" to "factors"
Michael Orlitzky [Tue, 11 Nov 2025 13:52:24 +0000 (08:52 -0500)]
mjo/cone: rename irreducible_decomposition.py -> decomposition.py
Michael Orlitzky [Tue, 11 Nov 2025 00:23:43 +0000 (19:23 -0500)]
mjo/cone/irreducible_decomposition.py: get it working, roughly
Michael Orlitzky [Mon, 10 Nov 2025 19:36:54 +0000 (14:36 -0500)]
mjo/cone: begin working on the irreducible decomposition
Michael Orlitzky [Wed, 1 Oct 2025 15:58:08 +0000 (11:58 -0400)]
mjo.eja.eja_operator: fix exponentiation
Using exponentiation was allowing us to skip the domain/codomain check
for operator composition when their dimensions agreed. To fix that, we
reimplement powers directly in terms of multiplication.
This also sheds light on a buggy test that needed to be fixed:
isomorphisms can't necessarily be composed.
Michael Orlitzky [Wed, 24 Sep 2025 20:08:53 +0000 (16:08 -0400)]
mjo/cone/isomorphism.py: delete
A better version of this is pending upstream at,
https://github.com/sagemath/sage/pull/40367
Michael Orlitzky [Wed, 24 Sep 2025 20:07:30 +0000 (16:07 -0400)]
mjo/eja/eja_operator.py: use upstream stuff for random unitary matrices
Michael Orlitzky [Wed, 24 Sep 2025 20:06:59 +0000 (16:06 -0400)]
mjo/random.py: delete, random_unitary_matrix() is upstream
Michael Orlitzky [Tue, 1 Jul 2025 23:15:23 +0000 (19:15 -0400)]
mjo/cone: more linear ismorphism tests
Michael Orlitzky [Tue, 1 Jul 2025 13:54:53 +0000 (09:54 -0400)]
mjo/cone/isomorphism.py: fix RST citation format
Michael Orlitzky [Tue, 1 Jul 2025 13:52:33 +0000 (09:52 -0400)]
mjo/cone/isomorphism.py: cite Gowda/Trott for the l1-cone
Michael Orlitzky [Tue, 1 Jul 2025 13:33:19 +0000 (09:33 -0400)]
mjo/cone: improve isomorphism testing & docs, tests pass now
Michael Orlitzky [Tue, 1 Jul 2025 04:03:45 +0000 (00:03 -0400)]
mjo/cone/isomorphism.py: update docs/names, add is-isomorphic method
Rename the isomorphism generator to linear_isomorphisms(), since
"linear isomorphism" is as good of a distinguishing name as I can
think of. Then add the is_linearly_isomorphic() function to check
that at least one isomorphism exists.
Michael Orlitzky [Tue, 1 Jul 2025 00:32:57 +0000 (20:32 -0400)]
mjo/cone/isomorphism.py: new module for (rational) cone isomorphism
The is_isomorphic() method for convex cones in Sage kind of does what
I want, but the fact that it does is considered a bug by the author
since it does not capture the notion of isomorphism useful for toric
varieties. Some day that method will be fixed and it will be much less
useful for testing isomorphism in the usual linear-algebraic sense,
which is what I usually want to check.
This commit adds a new module with the beginnings of an isomorphism
test over the rationals. It should work for all convex cones (not just
pointed cones) though it isn't very smart or fast and probably has a
lot of bugs in it at the moment.
Michael Orlitzky [Fri, 29 Nov 2024 01:17:25 +0000 (20:17 -0500)]
mjo/eja/eja_operator.py: randomize the permuted factors test
Michael Orlitzky [Fri, 29 Nov 2024 01:17:14 +0000 (20:17 -0500)]
mjo/eja/eja_operator.py: add some "long time" labels
Michael Orlitzky [Fri, 29 Nov 2024 01:16:43 +0000 (20:16 -0500)]
mjo/eja/eja_operator.py: fix test when spin algebra is trivial
Michael Orlitzky [Fri, 29 Nov 2024 00:26:55 +0000 (19:26 -0500)]
mjo/eja/eja_operator.py: permutation test for is_isomorphism()
Michael Orlitzky [Thu, 28 Nov 2024 23:20:17 +0000 (18:20 -0500)]
mjo/eja/eja_operator.py: improved is_isomorphism() tests
For random testing we can use rationals; but only certain small
examples complete fast enough over the algebraics.
Michael Orlitzky [Thu, 28 Nov 2024 18:16:38 +0000 (13:16 -0500)]
mjo/eja/eja_operator.py: add complex hermitian EJA tests for is_isomorphism()
Michael Orlitzky [Thu, 28 Nov 2024 18:15:57 +0000 (13:15 -0500)]
mjo/eja/eja_operator.py: speed up is_isometry() and is_homomorphism()
Both of these are symmetric, so we can skip about half of the checks.
Michael Orlitzky [Thu, 28 Nov 2024 16:43:11 +0000 (11:43 -0500)]
mjo/eja/eja_operator.py: simplify an is_isomorphism() test
Michael Orlitzky [Thu, 28 Nov 2024 14:22:44 +0000 (09:22 -0500)]
mjo/eja/eja_operator.py: is_isomorphism() tests for the two easiest EJAs
Michael Orlitzky [Thu, 28 Nov 2024 13:53:29 +0000 (08:53 -0500)]
mjo/matrix_algebra.py: move a comment
Michael Orlitzky [Wed, 27 Nov 2024 23:32:43 +0000 (18:32 -0500)]
mjo/eja/eja_operator.py: add is_isomorphism() for operators
Michael Orlitzky [Wed, 27 Nov 2024 01:02:56 +0000 (20:02 -0500)]
mjo/eja/eja_operator.py: add is_homomorphism() for operators
Michael Orlitzky [Tue, 26 Nov 2024 18:40:28 +0000 (13:40 -0500)]
mjo/eja/eja_operator.py: add a comment about something non-obvious
Michael Orlitzky [Tue, 26 Nov 2024 18:33:41 +0000 (13:33 -0500)]
mjo/eja/eja_operator.py: add is_isometry() method
Michael Orlitzky [Tue, 26 Nov 2024 18:33:25 +0000 (13:33 -0500)]
makefile: bypass the "sage" script when testing
Michael Orlitzky [Sat, 23 Nov 2024 02:52:08 +0000 (21:52 -0500)]
mjo/hurwitz.py: quaternion gens are a tuple now
Michael Orlitzky [Sat, 23 Nov 2024 02:50:05 +0000 (21:50 -0500)]
mjo/**/*.py: update table rendering
Sage's tables are rendered using unicode characters for the borders
now.
Michael Orlitzky [Fri, 22 Nov 2024 22:22:15 +0000 (17:22 -0500)]
mjo/eja/eja_algebra.py: block-scoped "long time" tags
Michael Orlitzky [Fri, 22 Nov 2024 22:00:14 +0000 (17:00 -0500)]
mjo/eja/eja_subalgebra.py: block-scoped "long time" tags
Michael Orlitzky [Fri, 22 Nov 2024 22:00:03 +0000 (17:00 -0500)]
mjo/eja/eja_element.py: block-scoped "long time" tags
Michael Orlitzky [Fri, 22 Nov 2024 21:38:30 +0000 (16:38 -0500)]
mjo/cone/symmetric_psd.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 21:38:12 +0000 (16:38 -0500)]
mjo/cone/symmetric_pd.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:57:16 +0000 (15:57 -0500)]
mjo/cone/cone.py: remove
I don't feel like documenting these properly, and they aren't used
anywhere else.
Michael Orlitzky [Fri, 22 Nov 2024 20:56:43 +0000 (15:56 -0500)]
mjo/cone/permutation_invariant.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:43:58 +0000 (15:43 -0500)]
mjo/cone/doubly_nonnegative.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:22:33 +0000 (15:22 -0500)]
mjo/cone/cone.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:17:13 +0000 (15:17 -0500)]
mjo/cone/completely_positive.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:15:56 +0000 (15:15 -0500)]
mjo/cone/faces.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:14:15 +0000 (15:14 -0500)]
mjo/symbol_sequence.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:12:00 +0000 (15:12 -0500)]
mjo/polynomial.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 20:08:08 +0000 (15:08 -0500)]
mjo/orthogonal_polynomials.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 19:54:46 +0000 (14:54 -0500)]
mjo/basis_repr.py: don't import from sage.all
Michael Orlitzky [Fri, 22 Nov 2024 19:38:08 +0000 (14:38 -0500)]
mjo/interpolation.py: don't import sage.all in global scope
Michael Orlitzky [Fri, 22 Nov 2024 19:04:24 +0000 (14:04 -0500)]
mjo/misc.py: don't import sage.all
Michael Orlitzky [Fri, 22 Nov 2024 18:57:22 +0000 (13:57 -0500)]
mjo/basis_repr.py: replace deprecated is_MatrixSpace()
Michael Orlitzky [Fri, 22 Nov 2024 18:53:10 +0000 (13:53 -0500)]
mjo/eja/eja_utils.py: replace deprecated is_Matrix()
Michael Orlitzky [Thu, 31 Oct 2024 22:00:07 +0000 (18:00 -0400)]
mjo/cone/faces.py: add another reducibility test
Michael Orlitzky [Sun, 19 May 2024 01:50:53 +0000 (21:50 -0400)]
mjo/cone/faces.py: use simpler dual face formula
Michael Orlitzky [Sun, 19 May 2024 01:47:13 +0000 (21:47 -0400)]
mjo/cone/permutation_invariant.py: use cones.foo() from sage
Michael Orlitzky [Sat, 18 May 2024 21:11:21 +0000 (17:11 -0400)]
README: rewrite it, it was rather out-of-date
Michael Orlitzky [Sat, 18 May 2024 21:11:05 +0000 (17:11 -0400)]
makefile: timeout overrides should no longer be necessary
Michael Orlitzky [Sat, 18 May 2024 20:59:24 +0000 (16:59 -0400)]
mjo/cone/rearrangement.py: bye, use sage's cones.rearrangement() instead
Michael Orlitzky [Sat, 18 May 2024 20:57:39 +0000 (16:57 -0400)]
mjo/cone/trivial_cone.py: bye, use sage's cones.trivial() instead
Michael Orlitzky [Sat, 18 May 2024 20:56:55 +0000 (16:56 -0400)]
mjo/cone/nonnegative_orthant.py: bye, use cones.nonnegative_orthant() instead
Michael Orlitzky [Sat, 18 May 2024 20:55:25 +0000 (16:55 -0400)]
mjo/cone/schur.py: bye, use sage's cones.schur() instead
Michael Orlitzky [Mon, 6 May 2024 18:51:18 +0000 (14:51 -0400)]
COPYING,LICENSE: add (AGPL-3.0+)
Michael Orlitzky [Fri, 24 Feb 2023 13:49:04 +0000 (08:49 -0500)]
eja: rename operator_inner_product -> operator_trace inner_product.
...and add an operator_trace_norm() method, for elements. It would
have been weird to have it called operator_norm(), wouldn't it?
Michael Orlitzky [Tue, 7 Feb 2023 19:12:23 +0000 (14:12 -0500)]
TODO: add another one.
Michael Orlitzky [Sun, 5 Feb 2023 13:09:19 +0000 (08:09 -0500)]
eja: add another test case for the Albert EJA determinant.
Michael Orlitzky [Sat, 4 Feb 2023 17:12:03 +0000 (12:12 -0500)]
eja: drop "FiniteDimensional" prefix everywhere.
Michael Orlitzky [Sat, 4 Feb 2023 16:26:55 +0000 (11:26 -0500)]
eja: special subalgebra handling for Cartesian product EJAs.
The matrix representation of an element in a Cartesian product EJA
will be an ordered tupe of matrices. When we move into a subalgebra,
the same element (considered as an element of the subalgebra) no
longer lives in a "Cartesian product EJA," since we give the
subalgebra its own basis. However, if we ever want to convert back,
then we need to know that the element originally came from a Cartesian
product EJA, because scalar fucking scaling doesn't fucking work on
ordered pairs!
Michael Orlitzky [Sat, 4 Feb 2023 12:13:27 +0000 (07:13 -0500)]
TODO: drop "FiniteDimensional" everywhere.
Michael Orlitzky [Sat, 4 Feb 2023 03:37:34 +0000 (22:37 -0500)]
eja: don't pointlessly orthonormalize in subalgebra_idempotent().
Michael Orlitzky [Thu, 2 Feb 2023 14:19:58 +0000 (09:19 -0500)]
mjo/random.py: new module for random_unitary_matrix().
Michael Orlitzky [Sun, 29 Jan 2023 21:38:45 +0000 (16:38 -0500)]
eja: write the ALGORITHM block for the degree of an element.
Michael Orlitzky [Sun, 29 Jan 2023 20:57:46 +0000 (15:57 -0500)]
eja: add the trace (matrix) operator inner product.
Michael Orlitzky [Sun, 29 Jan 2023 20:57:35 +0000 (15:57 -0500)]
eja: drop a superfluous semicolon.
Michael Orlitzky [Wed, 2 Feb 2022 23:43:47 +0000 (18:43 -0500)]
eja: use QQ for another potentially slow doctest.
Michael Orlitzky [Wed, 2 Feb 2022 18:44:25 +0000 (13:44 -0500)]
eja: remove an "expected algebra failure" that now somehow passes.