{"id":18818920,"url":"https://github.com/py-why/dodiscover","last_synced_at":"2025-04-13T23:32:51.427Z","repository":{"id":52490800,"uuid":"520913047","full_name":"py-why/dodiscover","owner":"py-why","description":"[Experimental] Global causal discovery algorithms","archived":false,"fork":false,"pushed_at":"2025-03-03T18:24:11.000Z","size":547737,"stargazers_count":99,"open_issues_count":59,"forks_count":17,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-11T19:50:39.626Z","etag":null,"topics":["causal-inference","causality","graphs","python","structure-learning"],"latest_commit_sha":null,"homepage":"https://www.pywhy.org/dodiscover/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/py-why.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-08-03T14:25:33.000Z","updated_at":"2025-04-06T11:12:37.000Z","dependencies_parsed_at":"2023-10-03T11:36:39.464Z","dependency_job_id":"755003f4-653f-4bd7-a4b0-36b42464625d","html_url":"https://github.com/py-why/dodiscover","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-why%2Fdodiscover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-why%2Fdodiscover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-why%2Fdodiscover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-why%2Fdodiscover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/py-why","download_url":"https://codeload.github.com/py-why/dodiscover/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248796958,"owners_count":21163056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["causal-inference","causality","graphs","python","structure-learning"],"created_at":"2024-11-08T00:19:26.290Z","updated_at":"2025-04-13T23:32:50.383Z","avatar_url":"https://github.com/py-why.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![CircleCI](https://circleci.com/gh/py-why/dodiscover/tree/main.svg?style=svg)](https://circleci.com/gh/py-why/dodiscover/tree/main)\n[![unit-tests](https://github.com/py-why/dodiscover/actions/workflows/main.yml/badge.svg)](https://github.com/py-why/dodiscover/actions/workflows/main.yml)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)\n[![codecov](https://codecov.io/gh/py-why/dodiscover/branch/main/graph/badge.svg?token=H1reh7Qwf4)](https://codecov.io/gh/py-why/dodiscover)\n\n# DoDiscover\n\nDoDiscover is a Python library for causal discovery (causal structure learning). If one does not have access to a causal graph for their modeling problem, they may use DoDiscover to learn causal structure from their data (e.g., in the form of a graph).\n\n# What makes dodiscover different from other causal discovery libraries?\n\nWhy do we need another causal discovery library?\nHere are some design goals that differentiate DoDiscover from other causal discovery libraries.\n\n## Ease of use\n\nAn analyst should be able to get a causal discovery workflow working quickly without intimate knowledge of causal discovery algorithms.\nDoDiscover prioritizes the workflow over the algorithms and provides default arguments to algorithm parameters.\n\n## Democratizing deep causal discovery\n\nMany cutting-edge causal discovery algorithms rely on deep learning frameworks.\nHowever, deep learning-based causal discovery often requires obscure boilerplate code, complex configuration, and management of large artifacts such as embeddings.\nDoDiscover seeks to create abstractions that address these challenges and make deep causal discovery more broadly accessible. Current algorithms are a work-in-progress. We will begin by providing a robust API for the fundamental discovery algorithms.\n\n## Easy interface for articulating causal assumptions\n\nDomain experts bring a large amount of domain knowledge to a problem.\nThat domain knowledge can establish causal assumptions that can constrain causal discovery.\nCausal discovery (indeed, all causal inferences) requires causal assumptions.\n\nHowever, a newly developed causal discovery algorithm has a greater research impact when it can do more with fewer assumptions.\nThis \"do more with less\" orientation tends to deemphasize assumptions in the user interfaces of many causal discovery libraries.\n\nDoDiscover prioritizes the interface for causal assumptions.\nFurther, DoDiscover seeks to help the user feel confident with their assumptions by emphasizing testing assumptions, making inferences under uncertainty, and robustness to model misspecification.\n\n## Unite causal discovery and causal representation learning\n\nDoDiscover is a Python library for causal discovery (causal structure learning).\nOur goal is to provide developers and researchers with guide rails for causal discovery that doesn't require deep knowledge of individual causal discovery algorithms.\n\n## What is the difference between dodiscover and other pywhy packages?\n\nThe goal of dodiscover is to flatten the on-ramp to causal discovery algorithms.\nDoWhy provides a consistent API for various causal tasks that typically require a graph structure.\nSimilarly, DoDiscover aims to provide a cohesive and user-friendly API to apply causal discovery algorithms for inferring a causal graph from data.\n\n[causal-learn](https://github.com/py-why/causal-learn) is an extensive collection of causal discovery algorithms.\nIt continuous to host new cutting-edge algorithms in causal discovery.\nHowever, these algorithms do not have a unified API.\nFurther, the historic focus of causal-learn is increasing the capabilities of discovery algorithms.\nIn contrast, dodiscover's focus is on the discovery API and usability.\n\nWhen possible, dodiscover prefers to provide an API wrapper to discovery algorithms in causal-learn and other libraries.\nPlease consider contributing to [causal-learn](https://github.com/py-why/causal-learn) if you plan to implement an algorithm from scratch, then contributing a wrapper in dodiscover.\n\nIn the future we plan on trying to integrate the two libraries.\n\n## What is the relationship with pywhy-graphs and pywhy-stats?\n\n[pywhy-graphs](https://github.com/py-why/pywhy-graphs) is the home of graph data structures and graph algorithms in PyWhy.\n\n[pywhy-stats](https://github.com/py-why/pywhy-stats) serves as a repository for implementations of (un)conditional independence tests, which can be utilized in various tasks, such as causal discovery.\n\n# Documentation\n\nSee the [development version documentation](https://py-why.github.io/dodiscover/dev/index.html).\n\nOr see [stable version documentation](https://py-why.github.io/dodiscover/stable/index.html)\n\n# Installation\n\nInstallation is best done via `pip` or `conda`. For developers, they can also install from source using `pip`. See [installation page](TBD) for full details.\n\n## Dependencies\n\nMinimally, dodiscover requires:\n\n    * Python (\u003e=3.10)\n    * numpy\n    * scipy\n    * networkx\n    * pandas\n\nWe have removed support for Python 3.8 as we depend explicitly on networkx, which has deprecated Python 3.8 support. For explicit graph functionality for representing various causal graphs, such as ADMG, or CPDAGs, you will also need:\n\n    * pywhy-graphs\n\nFor explicitly representing causal graphs, we recommend using `pywhy-graphs` package, but if you have a graph library that adheres to the graph protocols we require, then you can in principle use those graphs.\n\n## User Installation\n\nIf you already have a working installation of numpy, scipy and networkx, the easiest way to install dodiscover is using `pip`:\n\n    # doesn't work until we make an official release :p\n    pip install -U dodiscover\n\nTo install the package from github, clone the repository and then `cd` into the directory. You can then use `pip` to install:\n\n    pip install -e .\n\n    # for extra functionality for documentation, building, style checking and unit-testing\n    pip install .[doc, build, style, test]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpy-why%2Fdodiscover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpy-why%2Fdodiscover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpy-why%2Fdodiscover/lists"}