Linear operators interfaces
Project description
aljabr — Implicit linear operators
aljabr is a small Python library providing an interface for implicit linear
operators: linear maps defined by forward and adjoint callables rather than
an explicit matrix. It is useful when an explicit matrix representation is not
adequate — for instance when the dimension is large, when a more efficient
algorithm exists, or when the operator is naturally expressed as a function.
A typical example is the Discrete Fourier Transform, which is a linear operator
available through fft and ifft functions. aljabr lets you treat it — and
compose it with others — as if it were a matrix.
The foundation is the LinOp type. Everything else — concrete operators,
utilities, algebraic composition — is built on top of it and optional. I made
this library for my own use.
Key differences from similar tools
vs. scipy.sparse.linalg.LinearOperator — input and output arrays can have
any shape, not just vectors. A 2D FFT operator maps an image to an image. Shapes
are fixed at construction: a DFT on a 512² image is a different object than
one on a 256² image. This is intentional.
vs. PyLops — aljabr is deliberately minimal. It does not provide solvers or
choose algorithms for you. There is no x = A / y. It stays out of your way,
offering only readability and convenience.
Features
- Abstract base class
LinOpwithforward(A·x) andadjoint(Aᴴ·y) - Algebraic composition:
A + B,A - B,A @ B,scalar * A,A.H,A.S - Array-API compatible — works with NumPy, PyTorch, JAX, and others via array-api-compat
- Compatible with
scipy.sparse.linalg.LinearOperator— can also be passed directly as argument - Concrete operators:
Identity,Diag,DFT,RealDFT,Conv,DirectConv,CircConv,FreqFilter,Diff,Sampling,Slice, wavelet, … - Utilities:
dottest,fwadjtest,is_sym,is_pos_def,cond, …
Installation
# with uv (or uv)
poetry add aljabr
# with pip
pip install aljabr
Optional dependencies:
poetry add aljabr[wavelet] # PyWavelets — required for DWT, Analysis2, Synthesis2
poetry add aljabr[scipy] # SciPy — required for DirectConv and fcond
Quick example
import numpy as np
import aljabr
# Wrap the FFT as a linear operator
F = aljabr.DFT(shape=(256, 256), ndim=2)
x = np.random.randn(256, 256)
y = F.forward(x) # F·x
z = F.adjoint(y) # Fᴴ·y
# Algebraic composition
A = aljabr.Diff(axis=0, ishape=(256, 256))
B = A.H @ A # AᴴA as a Symmetric operator
# Validate with the dot test
from aljabr import dottest
assert dottest(A, num=5)
Documentation
Status
Pre-Alpha. The API may change. Feedback welcome: francois.orieux@universite-paris-saclay.fr
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 aljabr-0.5.1.tar.gz.
File metadata
- Download URL: aljabr-0.5.1.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","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 |
1893490d01a7d37835aa672bf7f0b7754b8b2d3c2879d597527bdcd6613ef23f
|
|
| MD5 |
1f372d0de31f452eaddeae995914d4e7
|
|
| BLAKE2b-256 |
8f44ff30730fc5067fc6c7a9d7d1f2289b63508675085d1531a2ef8d2accb1cb
|
File details
Details for the file aljabr-0.5.1-py3-none-any.whl.
File metadata
- Download URL: aljabr-0.5.1-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","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 |
a76e3193678323187f717229317f305e353745dafbe3494b100593fe79405252
|
|
| MD5 |
36bb387daeef56184934745138bb2f09
|
|
| BLAKE2b-256 |
27968f94506fe65ad40422a2e4c38a2491ea09e855e160b7c9cdab1458f9034a
|