Skip to main content

Fast Signature Computations on CPU and GPU

Project description

Logo

A high-performance library for path signatures and rough path methods on CPU and GPU

PyPI - Version PyPI - Downloads Python Versions CI - Test codecov CodSpeed Read the Docs License

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

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


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pysiglib-3.0.1-py3-none-win_amd64.whl (743.7 kB view details)

Uploaded Python 3Windows x86-64

pysiglib-3.0.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (790.7 kB view details)

Uploaded Python 3manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pysiglib-3.0.1-py3-none-macosx_11_0_arm64.whl (494.2 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file pysiglib-3.0.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: pysiglib-3.0.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 743.7 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pysiglib-3.0.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e563186bf8b4932e9ed78f3c14bec03d4ed120a94ed9a611770aab6c97b0c9ed
MD5 49c33b3e04b6cb062dd0a47d4d31fdab
BLAKE2b-256 c569e0df258feffc96f305e419cd821b6c44c2fe68d337635f32a9b821b0018f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysiglib-3.0.1-py3-none-win_amd64.whl:

Publisher: release.yml on daniil-shmelev/pySigLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pysiglib-3.0.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pysiglib-3.0.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fcee1803c3266bf63d89c8785233d6b1c0f9d3a1259e794bab9b6a0b9ea82bad
MD5 5cab98c82e93857a5ba144af50e2aff6
BLAKE2b-256 8b93df6475991209a04612874093762ffeb2d56d23124fbe6d9e88d311959299

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysiglib-3.0.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on daniil-shmelev/pySigLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pysiglib-3.0.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pysiglib-3.0.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fdeee406579d7e8bb7d6336f4d1fb8277a4d8603ec47dee3a95a926bd74f4e91
MD5 579a6e86a0e7fe1ad0382d94a684e05f
BLAKE2b-256 5866d8840bf9c8ae3e4b4eb8b171568e5dfef22ed3d8bef224d8a58588a50637

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysiglib-3.0.1-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on daniil-shmelev/pySigLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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