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/
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file galaga_matrix-1.8.1.tar.gz.
File metadata
- Download URL: galaga_matrix-1.8.1.tar.gz
- Upload date:
- Size: 81.3 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bdd147e0a95c59863e7a021e73ef7c2eed80a2773608af61ac6e98771f53eea
|
|
| MD5 |
f4bc15a15d6929bb6c275f6298df9907
|
|
| BLAKE2b-256 |
a3d77a961b7708e48a4468066c7e017632259bc5cb30ddda2470bd663e0578a7
|
File details
Details for the file galaga_matrix-1.8.1-py3-none-any.whl.
File metadata
- Download URL: galaga_matrix-1.8.1-py3-none-any.whl
- Upload date:
- Size: 22.2 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d38b3ac6405bf17ba9a8e93884e698de68c881efa5023535df1b64ce2caa8530
|
|
| MD5 |
ced4e9ef759145d13f886b7d0c719500
|
|
| BLAKE2b-256 |
8f4629933da9ae6cdbf56f36dae9f5211e881bda2f5ae69c141fbfaeed9966e1
|