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 eight GPU-accelerated conditional independence tests, 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:

pip install causalts

For development, install from a clone:

git clone https://github.com/bloomberg/causal-ts.git
cd causal-ts
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, Achintya Gopal 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 and Gopal, Achintya},
  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}
}

Download files

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

Source Distribution

causalts-0.26.0.tar.gz (366.0 kB view details)

Uploaded Source

Built Distribution

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

causalts-0.26.0-py3-none-any.whl (386.3 kB view details)

Uploaded Python 3

File details

Details for the file causalts-0.26.0.tar.gz.

File metadata

  • Download URL: causalts-0.26.0.tar.gz
  • Upload date:
  • Size: 366.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for causalts-0.26.0.tar.gz
Algorithm Hash digest
SHA256 de08baa39ff17c9a108e912b7a1e2bb5827a46d42e15e3dbb4464c3a903c77b9
MD5 d9002c7230e641b302f4fc2b90075929
BLAKE2b-256 8493d510c7eee44a2af07fec0f5a470c164dd0c492d274611f7a3c87f2f367de

See more details on using hashes here.

Provenance

The following attestation bundles were made for causalts-0.26.0.tar.gz:

Publisher: release.yml on bloomberg/causal-ts

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

File details

Details for the file causalts-0.26.0-py3-none-any.whl.

File metadata

  • Download URL: causalts-0.26.0-py3-none-any.whl
  • Upload date:
  • Size: 386.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for causalts-0.26.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0774c96b1282a6d91365a0712cdd2297e3cde2ba6a09e97a46fe8589b1abb480
MD5 6eae79cfe4d65ecc240f85b5256da3cc
BLAKE2b-256 a8a688d0f01d8350d0cbb58a1d83e8e0bbb86171620e858d8436c00d67996905

See more details on using hashes here.

Provenance

The following attestation bundles were made for causalts-0.26.0-py3-none-any.whl:

Publisher: release.yml on bloomberg/causal-ts

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 Sentry Error logging StatusPage Status page