Fast Signature Computations on CPU and GPU
Project description
A high-performance library for path signatures and rough path methods on CPU and GPU
pySigLib computes path signatures and related rough path objects on CPU and GPU, with native PyTorch and JAX integrations so every operation is differentiable, jittable, and runs on the device your data already lives on.
Features
| Signatures | Log‑signatures | Signature kernels |
| Branched signatures | Signature streams | Signature coefficients |
Every operation is available from NumPy, PyTorch (with full autograd),
and JAX (with jit, vmap, and grad), running on CPU via a
multi-threaded C++ backend or on GPU via CUDA. Additional utilities cover
path transforms
(time augmentation, lead-lag) and
words / Lyndon words.
Installation
pip install pysiglib # CPU only
pip install pysiglib[cuda] # with CUDA GPU support
The JAX integration is built into the wheel - install JAX separately
(pip install jax) if you want to use it.
For detailed and up-to-date installation instructions, including how to build from source, see the installation guide.
Quick start
import numpy as np
import pysiglib
path = np.random.randn(32, 1000, 10) # (batch, length, dimension)
sig = pysiglib.sig(path, degree=5)
Documentation
Full documentation is available at https://pysiglib.readthedocs.io
Examples
Throughout the examples below, paths are arrays of shape
(path length, dimension) or (batch size, path length, dimension). Inputs can
be NumPy arrays, PyTorch tensors, or JAX arrays; the computation runs on
whichever device the input lives on.
Signatures
import numpy as np
import pysiglib
X = np.random.uniform(size=(32, 1000, 10))
s = pysiglib.sig(X, degree=5)
Signature coefficients
path = np.random.uniform(size=(32, 1000, 5))
words = [(0,), (1, 0), (1, 2, 4)]
coefs = pysiglib.sig_coef(path, words)
Log-signatures
pysiglib.prepare_log_sig(dimension=10, degree=5, method=1)
X = np.random.uniform(size=(32, 1000, 10))
ls = pysiglib.log_sig(X, degree=5, method=1)
Branched signatures
pysiglib.prepare_branched_sig(dimension=5, degree=4)
X = np.random.randn(32, 1000, 5)
bsig = pysiglib.branched_sig(X, degree=4)
Signature kernels
X = np.random.uniform(size=(32, 1000, 10))
Y = np.random.uniform(size=(32, 1000, 10))
k = pysiglib.sig_kernel(X, Y, dyadic_order=1)
# Different dyadic refinement per input when the paths have very different lengths:
X = np.random.uniform(size=(32, 100, 10))
Y = np.random.uniform(size=(32, 5000, 10))
k = pysiglib.sig_kernel(X, Y, dyadic_order=(3, 0))
PyTorch autograd
Every forward op has a backward implementation, so signatures compose cleanly with the rest of your PyTorch model.
import torch
from pysiglib.torch_api import sig
X = torch.randn(32, 1000, 10, requires_grad=True, device="cuda")
s = sig(X, degree=5)
loss = s.sum()
loss.backward() # X.grad populated
JAX
The JAX API integrates via the XLA FFI, so every op works under jit, vmap,
and grad.
import jax
import jax.numpy as jnp
from pysiglib.jax_api import sig
@jax.jit
def signature_norm(path):
return jnp.sum(sig(path, degree=5) ** 2)
X = jnp.array(np.random.randn(32, 1000, 10))
grad = jax.grad(signature_norm)(X)
Online signature streams
Incrementally update a signature as new points arrive, and query any interval in O(1) via Chen's identity - useful for real-time data or sliding-window features.
stream = pysiglib.SigStream(dimension=10, degree=5)
for point in incoming_points:
stream.push(point)
full = stream.sig_all() # signature of the entire path so far
interval = stream.sig(100, 200) # signature on [t=100, t=200]
Citation
If you found this library useful in your research, please consider citing the paper:
@article{shmelev2025pysiglib,
title={pySigLib-Fast Signature-Based Computations on CPU and GPU},
author={Shmelev, Daniil and Salvi, Cristopher},
journal={arXiv preprint arXiv:2509.10613},
year={2025}
}
Contributing
Contributions are welcome! Please open an issue first to discuss what you'd like to change, then submit a pull request.
Sponsors
If you'd like to support development, please consider sponsoring the project.
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 Distributions
Built Distributions
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 pysiglib-3.0.2-py3-none-win_amd64.whl.
File metadata
- Download URL: pysiglib-3.0.2-py3-none-win_amd64.whl
- Upload date:
- Size: 743.8 kB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5e34eea078c4874405de53ede6370a17cd1d84fe7967b086ad6ec3ff692ff59
|
|
| MD5 |
9253b83dbf9ba856b02ed9c4f9e74c15
|
|
| BLAKE2b-256 |
d3ee13a94c7e5074f7504fb2f3d1b40c772095a2366d038729ef10b7b2f22667
|
Provenance
The following attestation bundles were made for pysiglib-3.0.2-py3-none-win_amd64.whl:
Publisher:
release.yml on daniil-shmelev/pySigLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pysiglib-3.0.2-py3-none-win_amd64.whl -
Subject digest:
f5e34eea078c4874405de53ede6370a17cd1d84fe7967b086ad6ec3ff692ff59 - Sigstore transparency entry: 1525056886
- Sigstore integration time:
-
Permalink:
daniil-shmelev/pySigLib@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/daniil-shmelev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pysiglib-3.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pysiglib-3.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 790.7 kB
- Tags: Python 3, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
896d781a81f40f52f5087e82065073e50f53b5ef8fd24347eb92ff80b5878ec8
|
|
| MD5 |
bf4f58c2f357f24db1be7844ef25d40c
|
|
| BLAKE2b-256 |
e116e83ad2919d0c72e81a8a6c655737a21f98bf81a9f4e1ce84051b42da6254
|
Provenance
The following attestation bundles were made for pysiglib-3.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on daniil-shmelev/pySigLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pysiglib-3.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
896d781a81f40f52f5087e82065073e50f53b5ef8fd24347eb92ff80b5878ec8 - Sigstore transparency entry: 1525056870
- Sigstore integration time:
-
Permalink:
daniil-shmelev/pySigLib@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/daniil-shmelev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pysiglib-3.0.2-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: pysiglib-3.0.2-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 494.2 kB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79374cc6cc7c7462be1f33e94cf8d8ad54b997348ec09b238640502aa968e0e7
|
|
| MD5 |
32bbf857d01a2afdc56230404e800f57
|
|
| BLAKE2b-256 |
db486d101ff417e934bc1d9fdbf984d32ed8969080d9ab5b7e3ffff72ea28720
|
Provenance
The following attestation bundles were made for pysiglib-3.0.2-py3-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on daniil-shmelev/pySigLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pysiglib-3.0.2-py3-none-macosx_11_0_arm64.whl -
Subject digest:
79374cc6cc7c7462be1f33e94cf8d8ad54b997348ec09b238640502aa968e0e7 - Sigstore transparency entry: 1525056860
- Sigstore integration time:
-
Permalink:
daniil-shmelev/pySigLib@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/daniil-shmelev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a5ab9eb6505f11cd8dfed65460bdc86cf50c9c6e -
Trigger Event:
workflow_dispatch
-
Statement type: