{"adoption": {"forks": 270, "observed_at": "2026-08-28T04:05:20.643328+00:00", "stars": 1677}, "canonical_url": "https://ross.abutalabs.com/products/causal-learn", "card": {"archived": false, "artifact_type": "library", "description": "Causal Discovery in Python. Learning causality from data.", "domain": ["machine-learning", "data-science"], "enriched": true, "function": ["machine-learning", "data-science", "math"], "health_score": 95, "homepage": "https://causal-learn.readthedocs.io/en/latest/", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["py-why/causal-learn"], "name": "py-why/causal-learn", "platform": ["python", "cross-platform"], "pushed_at": "2026-07-11T02:45:31+00:00", "repo": "py-why/causal-learn", "stars": 1677, "tags": ["causal-discovery", "causal-inference", "causality", "graph-structure-learning", "independence-tests", "granger-causality", "tetrad", "algorithms"], "topics": ["causal", "causal-discovery", "causal-inference", "causality", "python", "graph", "structure", "tetrad", "time-series", "hidden-causal", "confounder", "causal-representation-learning", "independence-tests", "statistics", "causal-learning"], "urls": [], "use_cases": ["learn causal structure from observational data", "run PC or GES causal discovery algorithms in Python", "test conditional independence between variables", "perform Granger causality analysis on time series", "discover latent hidden causal representations", "build custom causal discovery methods with score functions and graph utilities"], "what_it_is": "causal-learn is a Python library for causal discovery, implementing classical and state-of-the-art algorithms to recover causal structure from observational data. It includes constraint-based, score-based, and functional causal model methods, plus utilities like independence tests and graph operations.", "when_to_avoid": ["you need causal effect estimation or treatment effect inference rather than structure discovery", "you require interventional/experimental data analysis or a GUI workflow", "you need a production system with real-time inference rather than offline statistical analysis"], "when_to_choose": ["you need a well-maintained Python port of the Java Tetrad causal discovery algorithms", "you want provable correctness guarantees for structure recovery from observational data", "you need a broad toolkit of causal discovery methods plus building blocks like independence tests in one package"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/causal-learn", "repo": "py-why/causal-learn", "role": "main", "score": 89}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:20.643328+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:41:37.756383+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7937de9237ce5507cfc1d939e0440aecee66db581b8592bdfe70fbc15f5c1753", "fetched_at": "2026-08-28T04:05:20.643328+00:00", "kind": "readme", "missing": false, "url": "https://github.com/py-why/causal-learn"}, {"content_hash": "a0803ea905873b360386b8c9826eae6052aae2f0b791da836aa2914e0d46c7e8", "fetched_at": "2026-08-29T11:15:31.544558+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/causal-learn/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 92, "longevity": 100, "rhythm": 80}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2152, "days_push": 53, "days_rel": 53, "gap_med": 52.5, "n_releases_24m": 9}, "score": 89, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}