Signal Processing Extensions to the Python Array API
Project description
array-api-signal
Signal processing primitives (windows, filters, integration) for the Python Array API Standard.
array-api-signal is a lightweight extension library that brings scientific computing capabilities—similar to
scipy.signal and scipy.integrate—to the Python Array API ecosystem.
It allows you to write signal processing code that runs unmodified on NumPy, PyTorch, CuPy, JAX, and * Dask*.
Why?
The Python Array API Standard unifies basic array operations (sin, matmul, reshape), and array-api-extra
provides common utilities (pad, kron).
However, scientific domains often need higher-level primitives like Simpson's rule integration, **window generation
**, or smoothing filters. array-api-signal fills this gap, providing a single namespace that:
- Implements missing primitives (like
xp.simpson) using backend-agnostic operations. - Re-exports
array-api-extrafunctions (likexp.pad). - Dispatches standard API calls (like
xp.sin) to the underlying backend.
This library is designed to be the "SciPy" companion to array-api-compat's "NumPy".
Installation
pip install array-api-signal
Quick Start: The Unified Namespace
The core philosophy is the Unified Namespace. You rarely need to import numpy or torch directly for your processing logic.
import array_api_signal as aps
import numpy as np
import torch
# 1. Start with any array (NumPy or Torch)
x_np = np.linspace(0, 10, 100)
x_torch = torch.linspace(0, 10, 100, device='cuda')
# 2. Get the unified 'xp' namespace
# This object has EVERYTHING: standard API + signal extensions + extra utils
xp = aps.array_namespace(x_torch)
# 3. Write backend-agnostic code
y = xp.sin(x_torch) # Calls torch.sin (Standard API)
y = xp.pad(y, (2, 2)) # Calls array_api_extra.pad (Extra API)
area = xp.simpson(y, dx=0.1) # Calls array_api_signal.simpson (Signal API)
print(f"Area on GPU: {area}") # Returns a Torch tensor
API Reference
1. Integration (xp.integrate)
Robust numerical integration with support for native backend optimizations (e.g., torch.trapezoid).
xp.trapezoid(y, x=None, dx=1.0, axis=-1): Composite trapezoidal rule.xp.simpson(y, x=None, dx=1.0, axis=-1): Composite Simpson's rule. Matchesscipy.integrate.simpsonbehavior (using the trapezoidal rule for the last interval if samples are even).
2. Signal Processing (xp.signal)
Filtering and convolution tools. Dispatches to scipy.ndimage (NumPy) or torch.nn.functional (Torch) for maximum performance.
xp.gaussian_filter1d(input, sigma, ...): 1D Gaussian smoothing.xp.convolve(in1, in2, mode='full'): General 1D convolution (via FFT).
3. Window Functions (xp.windows)
Backend-agnostic window generation. If you use the unified xp object, these functions automatically return arrays on the correct backend.
xp.hann(M, sym=True): Hann window.xp.hamming(M, sym=True): Hamming window.xp.tukey(M, alpha=0.5, sym=True): Tukey (tapered cosine) window.
4. Extensions from array-api-extra
We re-export widely used extensions so you only need one import.
xp.padxp.sincxp.covxp.kron
Contributing
We welcome contributions! If you have implemented a scipy function (like a specific filter, window, or transform) using only standard Array API primitives, please submit a PR.
Running Tests
We use pytest to verify correctness against scipy (Gold Standard) across all installed backends.
# Run tests
pytest tests/
# Test specific backend
pytest tests/ --backend=torch
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 array_api_signal-0.1.1.tar.gz.
File metadata
- Download URL: array_api_signal-0.1.1.tar.gz
- Upload date:
- Size: 23.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","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 |
ee78e166dd6e57ea05498a4bf0d505cb0790d879ba4d84622048fc04e2fac2b8
|
|
| MD5 |
c0087258e94ec62ff220bab8cd6994ae
|
|
| BLAKE2b-256 |
618fb998be88e2d720f3c30ba8bbffd979ebef1929cfff7e215484efc1d68b52
|
File details
Details for the file array_api_signal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: array_api_signal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","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 |
f28a1833ad76c6f0d66a92719d7abdbfeb507b23862ee5fa15c19ab0888d339a
|
|
| MD5 |
3e6661439c275d4237308f5b0bf380ce
|
|
| BLAKE2b-256 |
bf7ce593fabe2c64aac38aded5dcc7f21bff31dac6a8d1a4847bab2bbba388e6
|