Documentation | Installation | API reference | Paper
pySigLib brings path signatures, log-signatures, branched signatures, and signature kernels into one accelerated toolkit. It provides NumPy, PyTorch, and JAX support, with automatic differentiation for PyTorch and JAX and multithreaded C++ or native CUDA execution.
pip install pysiglib
# Add CUDA support
pip install "pysiglib[cuda]"The JAX integration is included in the wheel. Install JAX separately with
pip install jax if you want to use it. For source builds and platform-specific
guidance, see the installation guide.
import numpy as np
import pysiglib
path = np.random.default_rng().normal(size=(32, 1000, 10))
signature = pysiglib.sig(path, degree=5)Paths have shape (path length, dimension) or
(batch size, path length, dimension). Computation runs on the device where
the input already lives.
- A unified toolkit for rough path computations - signatures, log-signatures, branched signatures, and signature kernels.
- Accelerated CPU and CUDA implementations for large workloads.
- Native NumPy, PyTorch, and JAX support without moving data between frameworks.
- Automatic differentiation with PyTorch and JAX, including
jitandvmapsupport in JAX. - Cross-platform - Windows, Linux and Mac systems supported.
|
Signatures Truncated signatures and individual coefficients. |
Log-signatures Truncated log signatures in full or compact Lyndon coordinates. |
Signature kernels Kernels and metrics for sequential data. |
|
Branched signatures Branched signatures, branched log signatures and branched signature kernels. |
Signature streams Online updates and constant-time interval queries. |
Backpropagation Manual and automatic backpropagation with PyTorch and JAX support. |
Signatures compose directly with the rest of a PyTorch model:
import torch
from pysiglib.torch_api import sig
path = torch.randn(32, 1000, 10, device="cuda", requires_grad=True)
sig(path, degree=5).sum().backward()The JAX API supports 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)
path = jax.random.normal(jax.random.key(0), (1000, 10))
gradient = jax.grad(signature_norm)(path)See the documentation for complete examples and the full API reference.
If the library supports 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}
}Contributions are welcome. Please open an issue first to discuss a change, then submit a pull request.
If you'd like to support development, please consider sponsoring the project.