Skip to main content

Causal-TS

Release Documentation OpenSSF Scorecard Lint Tests Contributor-Covenant

About the Project

📚 Full documentation is on Read the Docs — algorithm deep-dives, CI test guide, CLI reference, and worked example notebooks.

Causal-TS is a Python framework for causal discovery in time series data. It implements four discovery algorithms and a suite of GPU-accelerated conditional independence tests, both linear and nonlinear, along with built-in visualization and evaluation tools.

Algorithms:

  • CDNOTS — Constraint-based discovery handling nonstationarity via a time-index node.
  • CDNOTS+ — PCMCI+-style two-phase skeleton (MCI conditioning) for improved precision on dense graphs.
  • CEDAR — Scalable pairwise discovery using minimum-lag selection. O(d²) complexity.
  • GRACE — Hybrid: CDNOTS skeleton + neural gated refinement with L0 regularization for high-dimensional data.

CI Tests: Run causal-ts ci-test-info for a full selection guide.

Test Type Speed
parcorr-gpu Linear instant
gcmi Monotone nonlinear instant
splitkci Nonlinear (kernel) fast
rcot Nonlinear (RFF) fast
sigkci Path-space (signature) moderate
kci Nonlinear (kernel) slow
dfcit Distribution-free moderate
cmiknn-gpu Nonparametric (k-NN) slow

Getting Started

Installation

Install the latest release from PyPI with pip or uv:

# Option 1: pip
pip install causalts

# Option 2 (recommended): uv
uv venv  # create a virtual env
uv pip install causalts

For development, clone the repository:

git clone https://github.com/bloomberg/causal-ts.git
cd causal-ts
# Option 1: pip
pip install -e ".[dev,dowhy,tigramite]"

# Option 2 (recommended): uv
uv venv  # create a virtual env
uv pip install -e ".[dev,dowhy,tigramite]"

PyTorch is installed automatically. CUDA and Apple MPS are auto-detected at runtime; CPU is the fallback.

To let a coding agent drive causal-ts, run causal-ts install-skill — see the CLI reference.

Quick Start

import numpy as np
from causalts.synthetic_data.synthetic_datasets import load_dataset
from causalts.ci_tests import SplitKCIGPU
from causalts import run_cdnots
from causalts.utils import evaluate_graph
from causalts.plotting import compare_graphs

# 1. Load a built-in dataset (ex1: 5-var nonlinear)
data = load_dataset("ex1", seed=42, T=500)
df, ground_truth = data["df"], data["ground_truth"]

# 2. Run CDNOTS causal discovery
ci_test = SplitKCIGPU(np.zeros((2, 2)), device="cpu")
res = run_cdnots(
    df=df, indep_test=ci_test, num_lags=data["max_lag"],
    include_C=True, alpha=0.05, stable=True,
)

# 3. Evaluate (exclude C dimension for shape match with ground truth)
d = ground_truth.shape[0]
metrics = evaluate_graph(res.cg_tig[:d, :d, :], ground_truth)
print(f"F1={metrics['F1']:.3f}, SHD={metrics['SHD']}")

# 4. Visualize
res.plot()
compare_graphs(ground_truth, res.cg_tig[:d, :d, :], var_names=list(df.columns))

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. For detailed contributing guidelines, please see CONTRIBUTING.md.

License

Distributed under the GPL-3.0-or-later License. See LICENSE for more information.

This project includes modified code from third-party packages. See NOTICE for details on original authorship and licensing.

Contact

Mohammad Fesanghary - @fesanghary

Project Link: https://github.com/bloomberg/causal-ts

Acknowledgements

We thank the open source contributors to Tigramite and causal-learn whose implementations informed parts of Causal-TS’s design. This template was adapted from Best-README-Template.

Citations

If you use causal-ts in your research, please cite the following papers:

  1. Causal-TS: A Python Library for Causal Discovery in High-Dimensional and Nonstationary Time Series Mohammad Fesanghary arXiv preprint arXiv:2607.24673, 2026.

  2. CEDAR: Causal Edge Discovery for Autoregressive Processes Mohammad Fesanghary arXiv preprint arXiv:2607.20696, 2026.

  3. GRACE: Gated Refinement for Accurate Causal Edge Discovery in High-Dimensional Time Series Mohammad Fesanghary, Abhinav Havaldar arXiv preprint arXiv:2606.23880, 2026.

  4. Causal Discovery from Nonstationary Time Series Agathe Sadeghi, Achintya Gopal, Mohammad Fesanghary International Journal of Data Science and Analytics, 19, pp. 33–59, 2025. doi:10.1007/s41060-024-00679-7

BibTeX entries
@article{fesanghary2026causalts,
  title={Causal-TS: A Python Library for Causal Discovery in High-Dimensional and Nonstationary Time Series},
  author={Fesanghary, Mohammad},
  journal={arXiv preprint arXiv:2607.24673},
  year={2026}
}

@article{fesanghary2026cedar,
  title={CEDAR: Causal Edge Discovery for Autoregressive Processes},
  author={Fesanghary, Mohammad},
  journal={arXiv preprint arXiv:2607.20696},
  year={2026}
}

@article{fesanghary2026grace,
  title={GRACE: Gated Refinement for Accurate Causal Edge Discovery in High-Dimensional Time Series},
  author={Fesanghary, Mohammad and Havaldar, Abhinav},
  journal={arXiv preprint arXiv:2606.23880},
  year={2026}
}

@article{sadeghi2025cdnots,
  title={Causal Discovery from Nonstationary Time Series},
  author={Sadeghi, Agathe and Gopal, Achintya and Fesanghary, Mohammad},
  journal={International Journal of Data Science and Analytics},
  volume={19},
  pages={33--59},
  year={2025},
  publisher={Springer},
  doi={10.1007/s41060-024-00679-7}
}

Metadata

Release files for causalts 0.27.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for causalts 0.27.0
File Size Uploaded
causalts-0.27.0.tar.gz 478.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for causalts 0.27.0
File Interpreter ABI Platform
causalts-0.27.0-py3-none-any.whl Python 3 none any Details

Total release size: 939.9 kB

Release files / causalts-0.27.0.tar.gz

Download URL causalts-0.27.0.tar.gz
Size 478.1 kB
Tags Source
SHA-256 checksum
How to use checksums
2e1e96fc23e5dafa329682f1e6992572948b9eef188a32c099c0642e006bbadb
BLAKE2b-256 checksum
How to use checksums
e4fa97f5ba5e4857399c1b05d100ceee11241607ef932df8395a1cc6a8c17443
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / causalts-0.27.0-py3-none-any.whl

Download URL causalts-0.27.0-py3-none-any.whl
Size 461.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a51c5bf7fd69e968d4f4333073596cad814187f16bd60d7f0333da71db99bb23
BLAKE2b-256 checksum
How to use checksums
ed6b9fa1c9f6a1985a1f81d7116097e15a0766ec1bf4f4ec0832b211931ea23e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.27.0 This release

2 release files

0.26.0

2 release files

0.25.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page