Skip to main content

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 LinOp with forward (A·x) and adjoint (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 poetry (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
# or
y = F * x
# or
y = F(x)

z = F.adjoint(y)        # Fᴴ·y
# or
z = y * F  # (= 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

https://aljabr.readthedocs.io

Status

Pre-Alpha. The API may change. Feedback welcome: francois.orieux@universite-paris-saclay.fr

License

MIT — see LICENSE.

Metadata

Release files for aljabr 0.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aljabr 0.5.2
File Size Uploaded
aljabr-0.5.2.tar.gz 18.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aljabr 0.5.2
File Interpreter ABI Platform
aljabr-0.5.2-py3-none-any.whl Python 3 none any Details

Total release size: 39.5 kB

Release files / aljabr-0.5.2.tar.gz

Download URL aljabr-0.5.2.tar.gz
Size 18.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f49bb45c2750ce05753a29155d81886fd8c836ad4c13097c82ec7072c5cbd1ae
BLAKE2b-256 checksum
How to use checksums
0cbd666c113386d06a2e12ee7caf304daa2a54be5761b2cccd6112a30644fdd6
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / aljabr-0.5.2-py3-none-any.whl

Download URL aljabr-0.5.2-py3-none-any.whl
Size 21.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ae74fc17e3d6a6d1f02d85ad1f521fabe39b0c750ed887ba7e0b7a9aaccfb7b
BLAKE2b-256 checksum
How to use checksums
66ea24034c79c99c726c9b79e8dd459ef23d88fcd122bc0b8da0a0f6967a6697
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

This release

0.5.2 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page