bispectrum
An open-source, fully unit-tested PyTorch library that implements selective G-bispectra for seven group actions as differentiable torch.nn.Modules, ready to plug into ML pipelines and deep learning architectures.
The G-bispectrum is a principled complete invariant of a signal — it retains all information up to the group action. Selectivity reduces cost from O(|G|²) to O(|G|) for finite groups, and from O(L³) to Θ(L²) coefficients for SO(3) on S².
Supported Groups
| Module | Group / Domain | Output mode | Complexity (selective) |
|---|---|---|---|
CnonCn |
C_n on C_n | selective + full | O(n) |
SO2onS1 |
SO(2) on S¹ | selective + full | O(n) |
TorusOnTorus |
T^d | selective + full | O(n) |
DnonDn |
D_n on D_n | selective | O(n) |
SO2onDisk |
SO(2) on disk | selective | O(L) |
SO3onS2 |
SO(3) on S² | selective + full | Θ(L²) |
OctaonOcta |
chiral octahedral O (24 elements) | selective | 172 coefficients |
SO2onS1 is the continuous-n limit of CnonCn and shares its implementation.
API
Every module exposes a uniform interface:
forward(f)— selective (default) or full bispectral invariantsfourier(f)— group Fourier coefficientsinvert(beta)— signal reconstruction up to group-action indeterminacy (where available)
Modules default to O(|G|) selective coefficients; pass selective=False for the full O(|G|²) set. CG matrices, DFT kernels, and Bessel roots are precomputed as non-learnable buffers. Dependencies: PyTorch, NumPy, and torch_harmonics (for SO3onS2).
Benchmarks
Median wall-clock on a single NVIDIA H100 80 GB GPU (batch=16, torch.utils.benchmark):
| Module | Group | |G| / L_max | Coefs (sel.) | Coefs (full) | Fwd sel. (ms) | Fwd full (ms) |
|---|---|---|---|---|---|---|
CnonCn |
C_128 | 128 | 128 | 8,256 | 0.14 | 8.53 |
TorusOnTorus |
C_32 × C_32 | 1,024 | 1,024 | 524,800 | 0.07 | 0.31 |
DnonDn |
D_32 | 64 | 245 | — | 0.57 | — |
SO2onDisk |
SO(2) | L=16 | 76 | — | 0.22 | — |
SO3onS2 |
SO(3) | L=16 | 426 | — | 0.48 | — |
OctaonOcta |
O | 24 | 172 | — | 0.68 | — |
Installation
pip install bispectrum
Or with uv:
uv pip install bispectrum
Development
git clone https://github.com/geometric-intelligence/bispectrum.git
cd bispectrum
uv pip install -e ".[dev]"
pre-commit install
Pre-commit Hooks
This project uses pre-commit for code quality checks. After installing dev dependencies, the hooks run automatically on each commit.
# Run hooks on all files (useful for first-time setup or CI)
pre-commit run --all-files
# Run a specific hook
pre-commit run ruff --all-files
# Update hooks to latest versions
pre-commit autoupdate
Usage
Cyclic group on itself
from bispectrum import CnonCn
bsp = CnonCn(n=8)
f = torch.randn(4, 8) # signal on Z/8Z
beta = bsp(f) # shape (4, 8), complex64
f_rec = bsp.invert(beta) # reconstructed up to cyclic shift
SO(3) on the 2-sphere
from bispectrum import SO3onS2
# Selective bispectrum: O(L²) entries with generic completeness
bsp = SO3onS2(lmax=5, nlat=64, nlon=128, selective=True)
f = torch.randn(1, 64, 128) # signal on S²
beta = bsp(f) # shape (1, 35), complex64
# Full bispectrum: O(L³) entries
bsp_full = SO3onS2(lmax=5, nlat=64, nlon=128, selective=False)
beta_full = bsp_full(f) # shape (1, 69), complex64
Octahedral group
from bispectrum import OctaonOcta
bsp = OctaonOcta()
f = torch.randn(4, 24) # signal on O (|O| = 24)
beta = bsp(f) # shape (4, 172), complex64
f_rec = bsp.invert(beta) # reconstructed up to group action
License
MIT
Metadata
Release files for bispectrum 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bispectrum-0.4.0.tar.gz | 54.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bispectrum-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.1 kB
Release files / bispectrum-0.4.0.tar.gz
| Download URL | bispectrum-0.4.0.tar.gz |
|---|---|
| Size | 54.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
438636b82c2cb13d66f4bfe6a649fbde2e7aa48a4852a88a836267d5831654d7
|
|
BLAKE2b-256 checksum How to use checksums |
4e5b7bbaed82a8025c0c6884099ab7476530e88c8051573a8a545cc828e141a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / bispectrum-0.4.0-py3-none-any.whl
| Download URL | bispectrum-0.4.0-py3-none-any.whl |
|---|---|
| Size | 60.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
712865a23ae05bb00961731cb06a97db0e01befc42327edc7c81f4e3eb7cffd2
|
|
BLAKE2b-256 checksum How to use checksums |
b35d9c9f65664dbeb7a4eac37cd53cbed1d95ec7d7e6429b9c68167d8f12ba2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency log