ChenSignatures.jl is a high-performance Julia library for computing path signatures and log-signatures—core tools in Rough Path Theory, stochastic analysis, and modern deep-learning architectures such as Neural CDEs.
It provides state-of-the-art speed, sparse algebra support, and a clean API for both research and production use.
Path signatures are sequences of iterated integrals that encode the geometric structure of a path. They form a powerful, coordinate-free representation used in:
- financial time series and derivatives pricing
- machine learning (Neural CDEs, feature engineering)
- stochastic analysis and rough path theory
ChenSignatures.jl computes both signatures and log-signatures efficiently and accurately, with full support for dense and sparse tensor algebras.
- Signatures: Compute truncated path signatures up to any depth.
- Log-Signatures: Lyndon-projected log-signatures for minimal bases.
- Tensor Algebra: Dense and sparse tensor algebra (
SparseTensor). - Algebraic Operations: Shuffle product, tensor exp/log, resolvent operators.
- Highly optimized kernels using:
StaticArrays.jl- Native Julia SIMD vectorization
- Designed to scale across:
- long paths (large
N) - high dimensions (
d) - large truncation levels (
m)
- long paths (large
Benchmarked and numerically cross-validated against:
- iisignature
- pysiglib
Full benchmarking and correctness tooling is included (see below).
ChenSignatures.jl powers the Python package:
📦 PyPI: https://pypi.org/project/chen-signatures/
📁 Source: python/
pip install chen-signaturesFeatures:
- Same API as Julia (
sig,logsig) - Works on Python 3.9–3.13
- Automatically installs a lightweight Julia runtime via
juliacall - Faster than
iisignatureand comparable topysiglib
For comprehensive performance comparisons against iisignature and pysiglib, see the dedicated benchmark repository:
This external suite provides:
- Isolated environment testing (Python vs Julia)
- Multiple library comparisons
- Detailed performance profiles and visualizations
- Methodologically fair benchmarking
For quick development regression testing, see:
Run Julia-only benchmarks:
julia --project=benchmark benchmark/benchmark.jlChenSignatures.jl uses a minimal, high-performance stack:
StaticArrays.jlLinearAlgebraChainRulesCore.jlfor AD supportEnzyme.jlfor automatic differentiation
using ChenSignatures
path = randn(1000, 5)
sig_result = sig(path, 4)
# For logsig, need to prepare basis first
basis = prepare(5, 4) # dimension=5, level=4
logsig_result = logsig(path, basis)For detailed API documentation, mathematical background, and usage examples, see:
👉 ChenSignatures.jl Documentation
The repository includes:
- Full Julia test suite (run with
julia --project -e 'using Pkg; Pkg.test()') - Cross-language validation fixtures at
test/validation/ - Automatic fixture generation via
test/validation/generate_fixtures.py
@software{chen_signatures,
author = {Combi, Alessandro},
title = {ChenSignatures.jl: High-performance signatures and log-signatures},
year = {2025},
url = {https://github.com/aleCombi/ChenSignatures.jl}
}Issues and feedback are welcome! However, pull requests are not being accepted at this time.
👉 https://github.com/aleCombi/ChenSignatures.jl/issues
For Maintainers:
Version is managed in Project.toml only. Python package reads it automatically.
To release a new version:
- Edit
Project.toml:version = "0.3.0" - Commit:
git commit -am "Bump version to 0.3.0" - Register with Julia General (comment
@JuliaRegistrator registeron PR/commit) - TagBot creates
v0.3.0tag automatically - Tag triggers PyPI publish automatically
Never edit version in python/pyproject.toml - it's computed dynamically.