]>
gitweb.michael.orlitzky.com - sage.d.git/log
Michael Orlitzky [Wed, 25 Feb 2026 02:19:07 +0000 (21:19 -0500)]
README.rst: add "export" to PYTHONPATH example
Michael Orlitzky [Wed, 25 Feb 2026 02:00:38 +0000 (21:00 -0500)]
README: convert to reStructuredText, and rewrite
This will look nice on Codeberg, and in any case it's nice to have
some meaningful information in here.
Michael Orlitzky [Wed, 25 Feb 2026 01:57:34 +0000 (20:57 -0500)]
makefile: remove PYTHONPATH hack from check target
Having eliminated the sitedir trickery from init.sage, one must now
have PYTHONPATH properly configured before anything will work.
Michael Orlitzky [Wed, 25 Feb 2026 01:53:03 +0000 (20:53 -0500)]
init.sage: remove hard-coded repository paths
You'll just have to specify where the repository lives, as with all
other rogue python libraries.
Michael Orlitzky [Sun, 22 Feb 2026 17:44:48 +0000 (12:44 -0500)]
mjo/clan: eliminate UnitalClan
We can add Unital() in NormalDecomposition anyway, because following
Vinberg we assume that they have one. But even if they didn't, the
unit element would be a property of each individual clan.
Michael Orlitzky [Sun, 22 Feb 2026 17:32:43 +0000 (12:32 -0500)]
mjo/clan: more class hierarchy refactoring
Renamed MatrixAlgebra to TAlgebraClan, since in theory the up-hat and
down-hat work for any T-algebra. Separated that out along with the
NormalDecomposition class.
Michael Orlitzky [Sun, 22 Feb 2026 16:59:11 +0000 (11:59 -0500)]
mjo/clan: factor out mjo.clan.normal_decomposition_element
Michael Orlitzky [Sun, 22 Feb 2026 16:53:08 +0000 (11:53 -0500)]
mjo/clan/clan.py: fix the scalar field for NormalDecomposition
Michael Orlitzky [Sun, 22 Feb 2026 16:42:50 +0000 (11:42 -0500)]
mjo/clan: factor out mjo.clan.vinberg_clan
Michael Orlitzky [Sun, 22 Feb 2026 16:34:24 +0000 (11:34 -0500)]
mjo/clan: rename SnClan and HnClan for consistency with EJA names
Michael Orlitzky [Sat, 21 Feb 2026 15:25:52 +0000 (10:25 -0500)]
mjo/clan/clan_operator.py: undo _is_clan() hack
And just like that, it starts working for no reason.
Michael Orlitzky [Sat, 21 Feb 2026 15:01:09 +0000 (10:01 -0500)]
mjo/clan/clan_operator.py: de-alias FreeModules -> ModulesWithBasis
Michael Orlitzky [Sat, 21 Feb 2026 14:57:29 +0000 (09:57 -0500)]
mjo/clan/clan.py: add SETUP:: blocks
These are now(?) necessary with the new all.py exports.
Michael Orlitzky [Sat, 21 Feb 2026 14:31:13 +0000 (09:31 -0500)]
mjo/all.py,mjo/clan/all.py: export user-facing clan bits
Michael Orlitzky [Sat, 21 Feb 2026 14:30:04 +0000 (09:30 -0500)]
mjo/clan/clan_operator.py: god-awful hack for category check
Michael Orlitzky [Sat, 21 Feb 2026 14:18:36 +0000 (09:18 -0500)]
mjo/clan/clan.py: whitespace
Michael Orlitzky [Sat, 21 Feb 2026 14:14:59 +0000 (09:14 -0500)]
mjo/clan/clan_operator.py: swap isinstance() for category check
Amazingly, this also fails, still ONLY while doctesting.
Michael Orlitzky [Sat, 21 Feb 2026 14:11:42 +0000 (09:11 -0500)]
mjo/clan/clan.py: add a category for Clans
Michael Orlitzky [Fri, 20 Feb 2026 20:33:55 +0000 (15:33 -0500)]
mjo/clan/clan.py: Vinberg cone automorphisms (WIP)
This proof-of-concept is mostly working, but the tests are crashing
for some reason.
Michael Orlitzky [Fri, 20 Feb 2026 20:00:23 +0000 (15:00 -0500)]
mjo/clan/clan_operator.py: fix copy/pasted docstring
Michael Orlitzky [Fri, 20 Feb 2026 20:00:04 +0000 (15:00 -0500)]
mjo/clan/clan_operator.py: prefer "C" for clan variables
Michael Orlitzky [Fri, 20 Feb 2026 19:08:26 +0000 (14:08 -0500)]
mjo/clan/clan_operator.py: implement composition and related methods
Michael Orlitzky [Tue, 17 Feb 2026 02:51:59 +0000 (21:51 -0500)]
mjo/clan: refactor the type hierarchy
Put the clan stuff in a top-level Clan class, and make UnitalClan a
wrapper around that. This complicates everything a bit, but makes me
feel better.
Michael Orlitzky [Tue, 17 Feb 2026 02:37:11 +0000 (21:37 -0500)]
mjo/clan/clan_element.py: add the Vinberg inner product
Michael Orlitzky [Tue, 17 Feb 2026 02:03:12 +0000 (21:03 -0500)]
mjo/clan/clan_operator.py: public matrix() method
This will be useful for the Vinberg inner product.
Michael Orlitzky [Mon, 16 Feb 2026 23:36:24 +0000 (18:36 -0500)]
mjo/clan/unital_clan.py: add hand computations for the Vinberg clan
Michael Orlitzky [Mon, 16 Feb 2026 14:17:50 +0000 (09:17 -0500)]
mjo/clan: start implementing clan operators
This is a moral prerequisite for the Vinberg inner product.
Michael Orlitzky [Sun, 15 Feb 2026 16:50:39 +0000 (11:50 -0500)]
mjo/clan/clan_element.py: composite det example for the Vinberg clan
Michael Orlitzky [Sun, 15 Feb 2026 16:42:40 +0000 (11:42 -0500)]
mjo/clan/unital_clan.py: fix VinbergClan element classes
When building elements from lists/matrices, be sure to construct
them in the clan and not just in the underlying vector space.
Michael Orlitzky [Sun, 15 Feb 2026 16:33:43 +0000 (11:33 -0500)]
mjo/clan/unital_clan.py: add convenience constructors for Vinberg clans
Add the following methods to build an element of the Vinberg clan:
* from_matrices
* from_list
* from_lists
Michael Orlitzky [Sun, 15 Feb 2026 15:29:40 +0000 (10:29 -0500)]
mjo/clan/unital_clan.py: factor out (un)lift for the Vinberg clan
Michael Orlitzky [Sun, 15 Feb 2026 02:42:04 +0000 (21:42 -0500)]
mjo/clan/unital_clan.py: VinbergClan inits and passes tests
Michael Orlitzky [Sat, 14 Feb 2026 20:17:54 +0000 (15:17 -0500)]
mjo/clan/unital_clan.py: begin sorting out the Vinberg clan init
Michael Orlitzky [Sat, 14 Feb 2026 18:31:07 +0000 (13:31 -0500)]
mjo/cone/decomposition.py: delete reducibility stuff
This will go upstream soon, and is only slowing the tests down.
Michael Orlitzky [Sat, 14 Feb 2026 18:27:44 +0000 (13:27 -0500)]
mjo/clan/unital_clan.py: start working on the Vinberg clan
Just sketch the constructor. Nothing works, but I don't want to forget
about it.
Michael Orlitzky [Mon, 9 Feb 2026 01:03:25 +0000 (20:03 -0500)]
mjo/cone/decomposition.py: add more nonlineal_part() tests
Michael Orlitzky [Mon, 9 Feb 2026 00:42:41 +0000 (19:42 -0500)]
mjo/cone/decomposition.py: pointed/linspace -> nonlineal_part
Rework the pointed_linspace_decomposition() as nonlineal_part(),
returning only the pointed component. The lineality space is easy to
obtain, even as a cone, though generally that will be overkill.
We drop _orthogonalize() for now, since it appears that Sage/PPL
will implicitly orthogonalize the cone's lines().
Michael Orlitzky [Thu, 5 Feb 2026 23:44:23 +0000 (18:44 -0500)]
mjo/cone/decomposition.py: add orthogonalization example over ZZ
Michael Orlitzky [Tue, 3 Feb 2026 00:20:18 +0000 (19:20 -0500)]
mjo/cone/decomposition.py: remove that NOTE
I found an example where PPL does not remove the lineal components of
the remaining generators. It is now included as a doctest.
Michael Orlitzky [Mon, 2 Feb 2026 21:20:18 +0000 (16:20 -0500)]
mjo/cone/decomposition.py: add a NOTE
I'm becoming more and more convinced that PPL will do the
lineality-space decomposition on its own.
Michael Orlitzky [Sun, 1 Feb 2026 18:55:15 +0000 (13:55 -0500)]
mjo/cone/decomposition.py: new pointed-linspace decomposition
Begin a new experiment with the pointed-linspace decomposition. We
know how to do this with orthogonal projections, but in Sage we must
work over the rationals (and arithmetic is much faster there anyway).
I sketched a quick proof of concept showing that this can be done, and
it's very likely that PPL does exactly the same thing when it
minimizes the generators in Cone().
But just in case, here's an implementation that definitely does what I
think it does.
Michael Orlitzky [Sun, 1 Feb 2026 18:10:19 +0000 (13:10 -0500)]
mjo/cone/decomposition.py: fix the vertices in irreducible_factors()
This bug is fixed in the upstream SageMath branch (with additional
tests), but let's fix it here too until it hits "develop".
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.