pywhy-graphs is a Python graph library that extends networkx with the notion of a MixedEdgeGraph
to implement a light-weight API for causal graphical structures that contain mixed-edges and contain causal graph traversal algorithms.
Representation of causal graphical models in Python are severely lacking.
PyWhy-Graphs implements a graphical API layer for representing commmon graphs in causal inference: ADMG, CPDAG and PAG. For causal DAGs, we recommend using the networkx.DiGraph
class and
ensuring acylicity via networkx.is_directed_acyclic_graph
function.
Existing packages that aim to represent causal graphs either break from the networkX API, or only implement a subset of the relevant causal graphs. By keeping in-line with the robust NetworkX API, we aim to ensure a consistent user experience and a gentle introduction to causal graphical models. A MixedEdgeGraph
instance is a composition of networkx graphs and has a similar API, with the additional notion of an "edge type", which specifies what edge type subgraph any function should operate over. For example:
# adds a directed edge from x to y
G.add_edge('x', 'y', edge_type='directed')
# adds a bidirected edge from x to y
G.add_edge('x', 'y', edge_type='bidirected')
Moreover, sampling from causal models is non-trivial, but a requirement for benchmarking many causal algorithms in discovery, ID, estimation and more. We aim to provide simulation modules that are easily connected with causal graphs to provide a simple robust API for modeling causal graphs and then simulating data.
See the development version documentation.
Or see stable version documentation
Installation is best done via pip
or conda
. For developers, they can also install from source using pip
. See installation page for full details.
We aim to provide a very light-weight dependency structure. Minimally, pywhy-graphs requires:
* Python (>=3.8)
* numpy
* scipy
* networkx
Additional functionality may be required when running unit-tests and documentation.
If you already have a working installation of numpy, scipy and networkx, the easiest way to install pywhy-graphs is using pip
:
pip install pywhy-graphs
or you can add it via poetry
poetry add pywhy-graphs
To install the package from github, clone the repository and then cd
into the directory. You can then use poetry
to install:
poetry install
# for vizualizing graph functionality
poetry install --extras viz
# if you would like an editable install of dodiscover for dev purposes
pip install -e .
pip install https://api.github.com/repos/py-why/pywhy-graphs/zipball/main
Pywhy-Graphs is always looking for new contributors to help make the package better, whether it is algorithms, documentation, examples of graph usage, and more! Contributing to Pywhy-Graphs will be rewarding because you will contribute to a much needed package for causal inference.
See our contributing guide for more details.
Please refer to the Github Citation to cite the repository.