galaga_matrix
Matrix representations for galaga Clifford algebras.
Status: published to PyPI alongside galaga. Released as part of the monorepo.
What it does
Every multivector in a Clifford algebra can be represented as a matrix. This package provides to_matrix / from_matrix conversions, spinor-column conversions for supported even subalgebras, quaternion-block output for selected quaternionic signatures, and a MatrixRepr wrapper with LaTeX rendering for use in marimo notebooks and Jupyter.
The canonical spinor-column API is to_spinor_column / from_spinor_column.
to_spinor_matrix / from_spinor_matrix are compatibility aliases.
Two modes
| Mode | Matrix size | Entries | Works for | Roundtrips |
|---|---|---|---|---|
left-regular |
2ⁿ × 2ⁿ | real | any Cl(p,q,r) | always |
compact |
2^⌊n/2⌋ × 2^⌊n/2⌋ | complex | non-degenerate Cl(p,q) | only when the selected representation is injective |
Quick start
from galaga import Algebra
from galaga_matrix import to_matrix, from_matrix, MatrixRepr
# Pauli matrices from Cl(3,0)
cl3 = Algebra(3)
e1, e2, e3 = cl3.basis_vectors()
mat = to_matrix(e1, mode="compact") # returns MatrixRepr (2×2 Pauli σ₁)
mat @ mat # MatrixRepr: σ₁² = I
mat.inv() # MatrixRepr: σ₁⁻¹ = σ₁
mat.trace() # 0 (traceless)
mat.mv # back to Multivector
# Named MV gets automatic ρ(name) symbolic name
R = (e1 * e2).name(latex=r"\hat{B}")
M = to_matrix(R, mode="compact")
M.latex() # "\\rho(\\hat{B}) = \\begin{pmatrix}..."
M.expr.latex() # "\\rho(\\hat{B})"
# from_matrix can infer algebra and mode from MatrixRepr
from_matrix(M) # MV named ρ⁻¹(ρ(B̂))
from_matrix(cl3, M.mat, mode="compact") # unnamed MV (raw array)
# Dirac matrices from Cl(1,3)
sta = Algebra(1, 3)
g0 = sta.basis_vectors()[0]
to_matrix(g0, mode="compact") # 4×4 Dirac γ⁰
# Left-regular works for everything, including PGA
pga = Algebra(2, 0, 1)
v = pga.basis_vectors()[0]
to_matrix(v) # 8×8 real matrix
MatrixRepr
MatrixRepr is a transparent numpy proxy that wraps a matrix with:
- All arithmetic operations —
@,+,-,*,/,**returnMatrixRepr - Linear algebra —
.T,.H,.conj(),.trace(),.det(),.inv() - Numpy interop —
np.add(M, N),np.conj(M)etc. returnMatrixReprvia__array_ufunc__ - Symbolic naming —
.name()gives matrices the same naming and expression-tree behavior as multivectors - Metadata propagation —
algebra,mode,basis, andkindpass through operations - Indexing —
M[i,j]for elements,M[0:2, 0:2]for submatrices - Rendering —
.latex(),._repr_latex_()for notebooks - Escape hatch —
.matgives the raw numpy array - Roundtrip —
.mvconverts back to aMultivector(requiresalgebra=) - Factories —
MatrixRepr.identity(k),MatrixRepr.zeros((m,n)),.kron(other)
Auto-naming
to_matrix(named_mv) names the result as ρ(name) and gives it a symbolic
representation-map expression. from_matrix(named_matrix) can infer the
algebra and mode from MatrixRepr and names the recovered MV as
ρ⁻¹(name-or-expression). Raw arrays still need
from_matrix(alg, array, mode=...). Unnamed inputs pass through without new
names. Quaternion-block mode uses ρ_{\mathbb{H}}(name).
Works in galaga_marimo t-strings:
gm.md(t"""
The Pauli matrix: {to_matrix(e1, mode="compact"):block}
""")
Named special cases
The compact representation produces the standard textbook matrices:
- Cl(3,0): 2×2 Pauli matrices (σ₁, σ₂, σ₃)
- Cl(0,3): 2×2 with iσ₁, iσ₂, iσ₃
- Cl(1,3): 4×4 Dirac matrices (γ⁰, γ¹, γ², γ³) in the Dirac representation
- Cl(3,1): 4×4 Dirac matrices in the mostly-plus convention
All other non-degenerate signatures are handled by the general periodicity recursion.
Limitations
- Degenerate algebras (r > 0): only
left-regularmode works.compactraisesNotImplementedError. - Double algebras (Cl(p,q) where (q−p) mod 8 ∈ {3, 7}):
to_matrixcompact works, butfrom_matrixcompact raises if the selected compact representation is not injective. Useleft-regularfor exact inverse conversion. See Double Clifford Algebras. - Quaternion output:
to_quaternion_matrixand quaternion spinor conversions use explicit quaternion-block bases. They currently support Cl(0,2) and Cl(1,3), and reject double algebras such as Cl(0,3). - Spinor roundtrip: spinor conversions are rank-checked for the actual reference-column map. Signatures whose even subalgebra is not injective under that map raise
TypeError. - No caching: blade matrices are rebuilt on every call. Fine for interactive use, not for hot loops.
Architecture decisions
See docs/adrs/.
Tests
PYTHONPATH=.:packages/galaga_matrix uv run pytest packages/galaga_matrix/tests/
Metadata
Release files for galaga-matrix 1.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| galaga_matrix-1.8.1.tar.gz | 81.3 kB | Without provenance | Details for galaga_matrix-1.8.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| galaga_matrix-1.8.1-py3-none-any.whl | Python 3 | none | any | Details for galaga_matrix-1.8.1-py3-none-any.whl |
Total release size: 103.5 kB
Release files / galaga_matrix-1.8.1.tar.gz
| Download URL | galaga_matrix-1.8.1.tar.gz |
|---|---|
| Size | 81.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8bdd147e0a95c59863e7a021e73ef7c2eed80a2773608af61ac6e98771f53eea
|
|
BLAKE2b-256 checksum How to use checksums |
a3d77a961b7708e48a4468066c7e017632259bc5cb30ddda2470bd663e0578a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / galaga_matrix-1.8.1-py3-none-any.whl
| Download URL | galaga_matrix-1.8.1-py3-none-any.whl |
|---|---|
| Size | 22.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d38b3ac6405bf17ba9a8e93884e698de68c881efa5023535df1b64ce2caa8530
|
|
BLAKE2b-256 checksum How to use checksums |
8f4629933da9ae6cdbf56f36dae9f5211e881bda2f5ae69c141fbfaeed9966e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for galaga-matrix 1.8.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.