Skip to main content

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 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 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

https://aljabr.readthedocs.io

Status

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

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aljabr-0.5.1.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aljabr-0.5.1-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

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

Hashes for aljabr-0.5.1.tar.gz
Algorithm Hash digest
SHA256 1893490d01a7d37835aa672bf7f0b7754b8b2d3c2879d597527bdcd6613ef23f
MD5 1f372d0de31f452eaddeae995914d4e7
BLAKE2b-256 8f44ff30730fc5067fc6c7a9d7d1f2289b63508675085d1531a2ef8d2accb1cb

See more details on using hashes here.

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

Hashes for aljabr-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a76e3193678323187f717229317f305e353745dafbe3494b100593fe79405252
MD5 36bb387daeef56184934745138bb2f09
BLAKE2b-256 27968f94506fe65ad40422a2e4c38a2491ea09e855e160b7c9cdab1458f9034a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page