pybnesian


Namepybnesian JSON
Version 0.5.0 PyPI version JSON
download
home_pagehttps://github.com/davenza/PyBNesian
SummaryPyBNesian is a Python package that implements Bayesian networks.
upload_time2024-05-19 12:19:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseCopyright 2020 David Atienza Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords
VCS
bugtrack_url
requirements numpy pyarrow pybind11
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![build](https://img.shields.io/github/actions/workflow/status/davenza/PyBNesian/release.yml?branch=master)
[![Documentation Status](https://readthedocs.org/projects/pybnesian/badge/?version=latest)](https://pybnesian.readthedocs.io/en/latest/?badge=latest)
![PyPI](https://img.shields.io/pypi/v/pybnesian?color=blue)

# PyBNesian

- `PyBNesian` is a Python package that implements Bayesian networks. Currently, it is mainly dedicated to learning Bayesian networks.

- `PyBNesian` is implemented in C++, to achieve significant performance gains. It uses [Apache Arrow](https://arrow.apache.org/) to enable fast interoperability between Python and C++. In addition, some parts are implemented in OpenCL to achieve GPU acceleration.

- `PyBNesian` allows extending its functionality using Python code, so new research can be easily developed.


Implementation
=====================

Currently `PyBNesian` implements the following features:

Models
-----------

- [x] Bayesian networks.

- [x] Conditional Bayesian networks (see section 5.6 of [1]).

- [x] Dynamic Bayesian networks.

which can have different types of CPDs:

- [x] Multinomial.

- [x] Linear Gaussian.

- [x] Conditional kernel density estimation (ratio of two kernel density estimation models). Accelerated with OpenCL.

with this combinations of CPDs, we implement the following types of networks (which can also be Conditional or Dynamic):

- [x] Discrete networks.

- [x] Gaussian networks.

- [x] Semiparametric networks.

- [x] Hybrid networks (conditional linear Gaussian networks and semiparametric networks).

Graphs
-----------------

- [x] DAGs.

- [x] Directed graphs.

- [x] Undirected graphs.

- [x] Partially directed graphs.

Graph classes implement useful functionalities for probabilistic graphical models, such as moving between DAG-PDAG representation or fast access to root and leaves.

Learning
---------------

It implements different structure learning algorithms:

- [x] Greedy hill-climbing (for Bayesian networks and Conditional Bayesian networks).

- [x] PC-stable (for Bayesian networks and Conditional Bayesian networks).

- [x] MMPC (for Bayesian networks and Conditional Bayesian networks).

- [x] MMHC (for Bayesian networks and conditional Bayesian networks).

- [x] DMMHC (for dynamic Bayesian networks).

The score and search algorithms can be used with the following scores:

- [x] BIC.

- [x] BGe.

- [x] BDe.

- [x] Cross-validation likelihood.

- [x] Holdout likelihood.

- [x] Cross-validated likelihood with validation dataset. This score combines the cross-validation likelihood with a validation dataset to control the overfitting.

and the following the following learning operators:

- [x] Arc operations: add arc, remove arc, flip arc.

- [x] Change Node Type (for semiparametric Bayesian networks).

The following independence tests are implemented for the constraint-based algorithms:

- [x] Chi-square test.

- [x] partial correlation test t-test.

- [x] A likelihood-ratio test based on mutual information assuming a Gaussian distribution for the continuous data.

- [x] CMIknn [2].

- [x] RCoT [3].

It also implements the parameter learning:

- [x] Maximum Likelihood Estimator.

Inference
-----------------------

Not implemented right now, as the priority is the learning algorithms. However, all the CPDs and models have a `sample()` method, which can be used to create easily an approximate inference engine based on sampling.

Serialization
-----------------------

All relevant objects (graphs, CPDs, Bayesian networks, etc) can be saved/loaded using the pickle format.

Other implementations
-----------------

`PyBNesian` exposes the implementation of other models or techniques used within the library.

- [x] Apply cross-validation to a dataset.

- [x] Apply holdout to a dataset.

- [x] Kernel Density Estimation. Accelerated with OpenCL.

- [ ] K-d Tree. (implemented but not exposed yet).

Weighted sums of chi-squared random variables:

- [ ] Hall-Buckley-Eagleson approximation. (implemented but not exposed yet).

- [ ] Lindsay-Pilla-Basak approximation. (implemented but not exposed yet).

Usage example
===========================

```python
>>> from pybnesian import GaussianNetwork, LinearGaussianCPD
>>> # Create a GaussianNetwork with 4 nodes and no arcs.
>>> gbn = GaussianNetwork(['a', 'b', 'c', 'd'])
>>> # Create a GaussianNetwork with 4 nodes and 3 arcs.
>>> gbn = GaussianNetwork(['a', 'b', 'c', 'd'], [('a', 'c'), ('b', 'c'), ('c', 'd')])

>>> # Return the nodes of the network.
>>> print("Nodes: " + str(gbn.nodes()))
Nodes: ['a', 'b', 'c', 'd']
>>> # Return the arcs of the network.
>>> print("Arcs: " + str(gbn.nodes()))
Arcs: ['a', 'b', 'c', 'd']
>>> # Return the parents of c.
>>> print("Parents of c: " + str(gbn.parents('c')))
Parents of c: ['b', 'a']
>>> # Return the children of c.
>>> print("Children of c: " + str(gbn.children('c')))
Children of c: ['d']

>>> # You can access to the graph of the network.
>>> graph = gbn.graph()
>>> # Return the roots of the graph.
>>> print("Roots: " + str(sorted(graph.roots())))
Roots: ['a', 'b']
>>> # Return the leaves of the graph.
>>> print("Leaves: " + str(sorted(graph.leaves())))
Leaves: ['d']
>>> # Return the topological sort.
>>> print("Topological sort: " + str(graph.topological_sort()))
Topological sort: ['a', 'b', 'c', 'd']

>>> # Add an arc.
>>> gbn.add_arc('a', 'b')
>>> # Flip (reverse) an arc.
>>> gbn.flip_arc('a', 'b')
>>> # Remove an arc.
>>> gbn.remove_arc('b', 'a')

>>> # We can also add nodes.
>>> gbn.add_node('e')
4
>>> # We can get the number of nodes
>>> assert gbn.num_nodes() == 5
>>> # ... and the number of arcs
>>> assert gbn.num_arcs() == 3
>>> # Remove a node.
>>> gbn.remove_node('b')

>>> # Each node has an unique index to identify it
>>> print("Indices: " + str(gbn.indices()))
Indices: {'e': 4, 'c': 2, 'd': 3, 'a': 0}
>>> idx_a = gbn.index('a')

>>> # And we can get the node name from the index
>>> print("Node 2: " + str(gbn.name(2)))
Node 2: c

>>> # The model is not fitted right now.
>>> assert gbn.fitted() == False

>>> # Create a LinearGaussianCPD (variable, parents, betas, variance)
>>> d_cpd = LinearGaussianCPD("d", ["c"], [3, 1.2], 0.5)

>>> # Add the CPD to the GaussianNetwork
>>> gbn.add_cpds([d_cpd])

>>> # The CPD is still not fitted because there are 3 nodes without CPD.
>>> assert gbn.fitted() == False

>>> # Let's generate some random data to fit the model.
>>> import numpy as np
>>> np.random.seed(1)
>>> import pandas as pd
>>> DATA_SIZE = 100
>>> a_array = np.random.normal(3, np.sqrt(0.5), size=DATA_SIZE)
>>> c_array = -4.2 - 1.2*a_array + np.random.normal(0, np.sqrt(0.75), size=DATA_SIZE)
>>> d_array = 3 + 1.2 * c_array + np.random.normal(0, np.sqrt(0.5), size=DATA_SIZE)
>>> e_array = np.random.normal(0, 1, size=DATA_SIZE)
>>> df = pd.DataFrame({'a': a_array,
...                    'c': c_array,
...                    'd': d_array,
...                    'e': e_array
...                })

>>> # Fit the model. You can pass a pandas.DataFrame or a pyarrow.RecordBatch as argument.
>>> # This fits the remaining CPDs
>>> gbn.fit(df)
>>> assert gbn.fitted() == True

>>> # Check the learned CPDs.
>>> print(gbn.cpd('a'))
[LinearGaussianCPD] P(a) = N(3.043, 0.396)
>>> print(gbn.cpd('c'))
[LinearGaussianCPD] P(c | a) = N(-4.423 + -1.083*a, 0.659)
>>> print(gbn.cpd('d'))
[LinearGaussianCPD] P(d | c) = N(3.000 + 1.200*c, 0.500)
>>> print(gbn.cpd('e'))
[LinearGaussianCPD] P(e) = N(-0.020, 1.144)

>>> # You can sample some data
>>> sample = gbn.sample(50)

>>> # Compute the log-likelihood of each instance
>>> ll = gbn.logl(sample)
>>> # or the sum of log-likelihoods.
>>> sll = gbn.slogl(sample)
>>> assert np.isclose(ll.sum(), sll)

>>> # Save the model, include the CPDs in the file.
>>> gbn.save('test', include_cpd=True)

>>> # Load the model
>>> from pybnesian import load
>>> loaded_gbn = load('test.pickle')

>>> # Learn the structure using greedy hill-climbing.
>>> from pybnesian import hc, GaussianNetworkType
>>> # Learn a Gaussian network.
>>> learned = hc(df, bn_type=GaussianNetworkType())
>>> learned.num_arcs()
2
```

Dependencies
============

- Python 3.8, 3.9, 3.10, 3.11 and 3.12.

The library has been tested on Ubuntu 16.04/20.04/22.04 and Windows 10/11, but should be compatible with other operating systems.

Libraries
---------

The library depends on [NumPy](https://numpy.org/), [Apache Arrow](https://arrow.apache.org/), [pybind11](https://github.com/pybind/pybind11), [NLopt](https://nlopt.readthedocs.io/en/latest/), [libfort](https://github.com/seleznevae/libfort) and [Boost](https://www.boost.org/).


Installation
============

PyBNesian can be installed with pip:

```
pip install pybnesian
```
Build from Source
=================

Prerequisites
-------------

- Python 3.8, 3.9, 3.10, 3.11 or 3.12.
- C++17 compatible compiler.
- CMake.
- Git.
- OpenCL drivers installed.


Building
--------

Clone the repository:

```
git clone https://github.com/davenza/PyBNesian.git
cd PyBNesian
git checkout v0.5.0 # You can checkout a specific version if you want
pip install .
```

Testing
=========================

The library contains tests that can be executed using `pytest`. They also require `scipy` and `pandas` installed.

``
pip install pytest scipy pandas
``

Run the tests with:

``
pytest
``

## References
<a id="1">[1]</a> 
D. Koller and N. Friedman, 
Probabilistic Graphical Models: Principles and Techniques,
The MIT Press, 2009.

<a id="2">[2]</a> 
J. Runge, 
Conditional independence testing based on a nearest-neighbor estimator of conditional mutual information. International Conference on Artificial Intelligence and Statistics, AISTATS 2018, 84, 2018, pp. 938–947.

<a id="3">[3]</a> 
E. V. Strobl and K. Zhang and S., Visweswaran. Approximate kernel-based conditional independence tests for fast non-parametric causal discovery. Journal of Causal Inference, 7(1), 2019, pp 1-24.
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/davenza/PyBNesian",
    "name": "pybnesian",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "David Atienza <datienza@fi.upm.es>",
    "download_url": "https://files.pythonhosted.org/packages/a4/7d/0847abc7a927e1f5b09829d27d1f584c12dd2a6a947d781fe8a1e2a330e2/pybnesian-0.5.0.tar.gz",
    "platform": null,
    "description": "![build](https://img.shields.io/github/actions/workflow/status/davenza/PyBNesian/release.yml?branch=master)\n[![Documentation Status](https://readthedocs.org/projects/pybnesian/badge/?version=latest)](https://pybnesian.readthedocs.io/en/latest/?badge=latest)\n![PyPI](https://img.shields.io/pypi/v/pybnesian?color=blue)\n\n# PyBNesian\n\n- `PyBNesian` is a Python package that implements Bayesian networks. Currently, it is mainly dedicated to learning Bayesian networks.\n\n- `PyBNesian` is implemented in C++, to achieve significant performance gains. It uses [Apache Arrow](https://arrow.apache.org/) to enable fast interoperability between Python and C++. In addition, some parts are implemented in OpenCL to achieve GPU acceleration.\n\n- `PyBNesian` allows extending its functionality using Python code, so new research can be easily developed.\n\n\nImplementation\n=====================\n\nCurrently `PyBNesian` implements the following features:\n\nModels\n-----------\n\n- [x] Bayesian networks.\n\n- [x] Conditional Bayesian networks (see section 5.6 of [1]).\n\n- [x] Dynamic Bayesian networks.\n\nwhich can have different types of CPDs:\n\n- [x] Multinomial.\n\n- [x] Linear Gaussian.\n\n- [x] Conditional kernel density estimation (ratio of two kernel density estimation models). Accelerated with OpenCL.\n\nwith this combinations of CPDs, we implement the following types of networks (which can also be Conditional or Dynamic):\n\n- [x] Discrete networks.\n\n- [x] Gaussian networks.\n\n- [x] Semiparametric networks.\n\n- [x] Hybrid networks (conditional linear Gaussian networks and semiparametric networks).\n\nGraphs\n-----------------\n\n- [x] DAGs.\n\n- [x] Directed graphs.\n\n- [x] Undirected graphs.\n\n- [x] Partially directed graphs.\n\nGraph classes implement useful functionalities for probabilistic graphical models, such as moving between DAG-PDAG representation or fast access to root and leaves.\n\nLearning\n---------------\n\nIt implements different structure learning algorithms:\n\n- [x] Greedy hill-climbing (for Bayesian networks and Conditional Bayesian networks).\n\n- [x] PC-stable (for Bayesian networks and Conditional Bayesian networks).\n\n- [x] MMPC (for Bayesian networks and Conditional Bayesian networks).\n\n- [x] MMHC (for Bayesian networks and conditional Bayesian networks).\n\n- [x] DMMHC (for dynamic Bayesian networks).\n\nThe score and search algorithms can be used with the following scores:\n\n- [x] BIC.\n\n- [x] BGe.\n\n- [x] BDe.\n\n- [x] Cross-validation likelihood.\n\n- [x] Holdout likelihood.\n\n- [x] Cross-validated likelihood with validation dataset. This score combines the cross-validation likelihood with a validation dataset to control the overfitting.\n\nand the following the following learning operators:\n\n- [x] Arc operations: add arc, remove arc, flip arc.\n\n- [x] Change Node Type (for semiparametric Bayesian networks).\n\nThe following independence tests are implemented for the constraint-based algorithms:\n\n- [x] Chi-square test.\n\n- [x] partial correlation test t-test.\n\n- [x] A likelihood-ratio test based on mutual information assuming a Gaussian distribution for the continuous data.\n\n- [x] CMIknn [2].\n\n- [x] RCoT [3].\n\nIt also implements the parameter learning:\n\n- [x] Maximum Likelihood Estimator.\n\nInference\n-----------------------\n\nNot implemented right now, as the priority is the learning algorithms. However, all the CPDs and models have a `sample()` method, which can be used to create easily an approximate inference engine based on sampling.\n\nSerialization\n-----------------------\n\nAll relevant objects (graphs, CPDs, Bayesian networks, etc) can be saved/loaded using the pickle format.\n\nOther implementations\n-----------------\n\n`PyBNesian` exposes the implementation of other models or techniques used within the library.\n\n- [x] Apply cross-validation to a dataset.\n\n- [x] Apply holdout to a dataset.\n\n- [x] Kernel Density Estimation. Accelerated with OpenCL.\n\n- [ ] K-d Tree. (implemented but not exposed yet).\n\nWeighted sums of chi-squared random variables:\n\n- [ ] Hall-Buckley-Eagleson approximation. (implemented but not exposed yet).\n\n- [ ] Lindsay-Pilla-Basak approximation. (implemented but not exposed yet).\n\nUsage example\n===========================\n\n```python\n>>> from pybnesian import GaussianNetwork, LinearGaussianCPD\n>>> # Create a GaussianNetwork with 4 nodes and no arcs.\n>>> gbn = GaussianNetwork(['a', 'b', 'c', 'd'])\n>>> # Create a GaussianNetwork with 4 nodes and 3 arcs.\n>>> gbn = GaussianNetwork(['a', 'b', 'c', 'd'], [('a', 'c'), ('b', 'c'), ('c', 'd')])\n\n>>> # Return the nodes of the network.\n>>> print(\"Nodes: \" + str(gbn.nodes()))\nNodes: ['a', 'b', 'c', 'd']\n>>> # Return the arcs of the network.\n>>> print(\"Arcs: \" + str(gbn.nodes()))\nArcs: ['a', 'b', 'c', 'd']\n>>> # Return the parents of c.\n>>> print(\"Parents of c: \" + str(gbn.parents('c')))\nParents of c: ['b', 'a']\n>>> # Return the children of c.\n>>> print(\"Children of c: \" + str(gbn.children('c')))\nChildren of c: ['d']\n\n>>> # You can access to the graph of the network.\n>>> graph = gbn.graph()\n>>> # Return the roots of the graph.\n>>> print(\"Roots: \" + str(sorted(graph.roots())))\nRoots: ['a', 'b']\n>>> # Return the leaves of the graph.\n>>> print(\"Leaves: \" + str(sorted(graph.leaves())))\nLeaves: ['d']\n>>> # Return the topological sort.\n>>> print(\"Topological sort: \" + str(graph.topological_sort()))\nTopological sort: ['a', 'b', 'c', 'd']\n\n>>> # Add an arc.\n>>> gbn.add_arc('a', 'b')\n>>> # Flip (reverse) an arc.\n>>> gbn.flip_arc('a', 'b')\n>>> # Remove an arc.\n>>> gbn.remove_arc('b', 'a')\n\n>>> # We can also add nodes.\n>>> gbn.add_node('e')\n4\n>>> # We can get the number of nodes\n>>> assert gbn.num_nodes() == 5\n>>> # ... and the number of arcs\n>>> assert gbn.num_arcs() == 3\n>>> # Remove a node.\n>>> gbn.remove_node('b')\n\n>>> # Each node has an unique index to identify it\n>>> print(\"Indices: \" + str(gbn.indices()))\nIndices: {'e': 4, 'c': 2, 'd': 3, 'a': 0}\n>>> idx_a = gbn.index('a')\n\n>>> # And we can get the node name from the index\n>>> print(\"Node 2: \" + str(gbn.name(2)))\nNode 2: c\n\n>>> # The model is not fitted right now.\n>>> assert gbn.fitted() == False\n\n>>> # Create a LinearGaussianCPD (variable, parents, betas, variance)\n>>> d_cpd = LinearGaussianCPD(\"d\", [\"c\"], [3, 1.2], 0.5)\n\n>>> # Add the CPD to the GaussianNetwork\n>>> gbn.add_cpds([d_cpd])\n\n>>> # The CPD is still not fitted because there are 3 nodes without CPD.\n>>> assert gbn.fitted() == False\n\n>>> # Let's generate some random data to fit the model.\n>>> import numpy as np\n>>> np.random.seed(1)\n>>> import pandas as pd\n>>> DATA_SIZE = 100\n>>> a_array = np.random.normal(3, np.sqrt(0.5), size=DATA_SIZE)\n>>> c_array = -4.2 - 1.2*a_array + np.random.normal(0, np.sqrt(0.75), size=DATA_SIZE)\n>>> d_array = 3 + 1.2 * c_array + np.random.normal(0, np.sqrt(0.5), size=DATA_SIZE)\n>>> e_array = np.random.normal(0, 1, size=DATA_SIZE)\n>>> df = pd.DataFrame({'a': a_array,\n...                    'c': c_array,\n...                    'd': d_array,\n...                    'e': e_array\n...                })\n\n>>> # Fit the model. You can pass a pandas.DataFrame or a pyarrow.RecordBatch as argument.\n>>> # This fits the remaining CPDs\n>>> gbn.fit(df)\n>>> assert gbn.fitted() == True\n\n>>> # Check the learned CPDs.\n>>> print(gbn.cpd('a'))\n[LinearGaussianCPD] P(a) = N(3.043, 0.396)\n>>> print(gbn.cpd('c'))\n[LinearGaussianCPD] P(c | a) = N(-4.423 + -1.083*a, 0.659)\n>>> print(gbn.cpd('d'))\n[LinearGaussianCPD] P(d | c) = N(3.000 + 1.200*c, 0.500)\n>>> print(gbn.cpd('e'))\n[LinearGaussianCPD] P(e) = N(-0.020, 1.144)\n\n>>> # You can sample some data\n>>> sample = gbn.sample(50)\n\n>>> # Compute the log-likelihood of each instance\n>>> ll = gbn.logl(sample)\n>>> # or the sum of log-likelihoods.\n>>> sll = gbn.slogl(sample)\n>>> assert np.isclose(ll.sum(), sll)\n\n>>> # Save the model, include the CPDs in the file.\n>>> gbn.save('test', include_cpd=True)\n\n>>> # Load the model\n>>> from pybnesian import load\n>>> loaded_gbn = load('test.pickle')\n\n>>> # Learn the structure using greedy hill-climbing.\n>>> from pybnesian import hc, GaussianNetworkType\n>>> # Learn a Gaussian network.\n>>> learned = hc(df, bn_type=GaussianNetworkType())\n>>> learned.num_arcs()\n2\n```\n\nDependencies\n============\n\n- Python 3.8, 3.9, 3.10, 3.11 and 3.12.\n\nThe library has been tested on Ubuntu 16.04/20.04/22.04 and Windows 10/11, but should be compatible with other operating systems.\n\nLibraries\n---------\n\nThe library depends on [NumPy](https://numpy.org/), [Apache Arrow](https://arrow.apache.org/), [pybind11](https://github.com/pybind/pybind11), [NLopt](https://nlopt.readthedocs.io/en/latest/), [libfort](https://github.com/seleznevae/libfort) and [Boost](https://www.boost.org/).\n\n\nInstallation\n============\n\nPyBNesian can be installed with pip:\n\n```\npip install pybnesian\n```\nBuild from Source\n=================\n\nPrerequisites\n-------------\n\n- Python 3.8, 3.9, 3.10, 3.11 or 3.12.\n- C++17 compatible compiler.\n- CMake.\n- Git.\n- OpenCL drivers installed.\n\n\nBuilding\n--------\n\nClone the repository:\n\n```\ngit clone https://github.com/davenza/PyBNesian.git\ncd PyBNesian\ngit checkout v0.5.0 # You can checkout a specific version if you want\npip install .\n```\n\nTesting\n=========================\n\nThe library contains tests that can be executed using `pytest`. They also require `scipy` and `pandas` installed.\n\n``\npip install pytest scipy pandas\n``\n\nRun the tests with:\n\n``\npytest\n``\n\n## References\n<a id=\"1\">[1]</a> \nD. Koller and N. Friedman, \nProbabilistic Graphical Models: Principles and Techniques,\nThe MIT Press, 2009.\n\n<a id=\"2\">[2]</a> \nJ. Runge, \nConditional independence testing based on a nearest-neighbor estimator of conditional mutual information. International Conference on Artificial Intelligence and Statistics, AISTATS 2018, 84, 2018, pp. 938\u2013947.\n\n<a id=\"3\">[3]</a> \nE. V. Strobl and K. Zhang and S., Visweswaran. Approximate kernel-based conditional independence tests for fast non-parametric causal discovery. Journal of Causal Inference, 7(1), 2019, pp 1-24.",
    "bugtrack_url": null,
    "license": "Copyright 2020 David Atienza  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "PyBNesian is a Python package that implements Bayesian networks.",
    "version": "0.5.0",
    "project_urls": {
        "Changelog": "https://pybnesian.readthedocs.io/en/latest/changelog.html",
        "Documentation": "https://pybnesian.readthedocs.io/en/latest/?badge=latest",
        "Homepage": "https://github.com/davenza/PyBNesian"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1e9f7d41a10c25c4d5aadf0ffd37553fadd456f508ba76748dc8e85077c184f8",
                "md5": "fa26322cfe92dc2933a11bc8efa797ce",
                "sha256": "e58e25e45297cc8b3f18c62a9c2d5d58c032e2ef44e274847357fc2f8708de0e"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp310-cp310-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fa26322cfe92dc2933a11bc8efa797ce",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 4760140,
            "upload_time": "2024-05-19T12:19:13",
            "upload_time_iso_8601": "2024-05-19T12:19:13.625289Z",
            "url": "https://files.pythonhosted.org/packages/1e/9f/7d41a10c25c4d5aadf0ffd37553fadd456f508ba76748dc8e85077c184f8/pybnesian-0.5.0-cp310-cp310-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "269ecad8c40c25ad89cf9a49b1299dcef03a3c7cce0b5d0b6c16ef34d35394af",
                "md5": "cf4b94cba7aa1e68fde9e6152bf94b74",
                "sha256": "5f5406eba27a6143e57c0b27882fe7d8737c797de2cee4c3718b155e8ab3c599"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "cf4b94cba7aa1e68fde9e6152bf94b74",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 4081406,
            "upload_time": "2024-05-19T12:19:15",
            "upload_time_iso_8601": "2024-05-19T12:19:15.840393Z",
            "url": "https://files.pythonhosted.org/packages/26/9e/cad8c40c25ad89cf9a49b1299dcef03a3c7cce0b5d0b6c16ef34d35394af/pybnesian-0.5.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4e68738d307bc322e42cddecedd7c37ea1665edcbbbb4b971ce9641eb7a29c2b",
                "md5": "2b2b90e34491439dce49f1db334040cb",
                "sha256": "f81a800e887cbdf73869c23727bdb9e01e0da6c9de043a48a95820c8dc174aed"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2b2b90e34491439dce49f1db334040cb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 5313541,
            "upload_time": "2024-05-19T12:19:18",
            "upload_time_iso_8601": "2024-05-19T12:19:18.080226Z",
            "url": "https://files.pythonhosted.org/packages/4e/68/738d307bc322e42cddecedd7c37ea1665edcbbbb4b971ce9641eb7a29c2b/pybnesian-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7c0209b36e055aad9bbecc61fb71966516724be378eccd8093f66ef3a7883ad2",
                "md5": "9e3f64fb6deb4f501b1f5851d005fc1f",
                "sha256": "31da7852b179e7f4363b34c9d25ea0d99edfc6cbc260e5297527cecd323d1bf0"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9e3f64fb6deb4f501b1f5851d005fc1f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 3540140,
            "upload_time": "2024-05-19T12:19:19",
            "upload_time_iso_8601": "2024-05-19T12:19:19.576087Z",
            "url": "https://files.pythonhosted.org/packages/7c/02/09b36e055aad9bbecc61fb71966516724be378eccd8093f66ef3a7883ad2/pybnesian-0.5.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7b0961cc55959fdc113ed466a94e3d83aad0e6c1afac71c4926eacb659dc60f3",
                "md5": "af5685148b35496e25954ffa3fc65c63",
                "sha256": "e685c028092a7d3c07b685752c7d79cb982ea29e1e07def55f06b47c867e6e59"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp311-cp311-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "af5685148b35496e25954ffa3fc65c63",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 4761669,
            "upload_time": "2024-05-19T12:19:21",
            "upload_time_iso_8601": "2024-05-19T12:19:21.791468Z",
            "url": "https://files.pythonhosted.org/packages/7b/09/61cc55959fdc113ed466a94e3d83aad0e6c1afac71c4926eacb659dc60f3/pybnesian-0.5.0-cp311-cp311-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "99ae4975fce59cbde7ac110b73df360a099fada6b2e14945c608ad0aa566be35",
                "md5": "e1c7c57b06a36e8e8117bca4d148711c",
                "sha256": "d8aa72001501f46d21332e47823b1eb85c2278a172da7f1967f3d9c12082b258"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e1c7c57b06a36e8e8117bca4d148711c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 4083178,
            "upload_time": "2024-05-19T12:19:23",
            "upload_time_iso_8601": "2024-05-19T12:19:23.386859Z",
            "url": "https://files.pythonhosted.org/packages/99/ae/4975fce59cbde7ac110b73df360a099fada6b2e14945c608ad0aa566be35/pybnesian-0.5.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4a3823d56111442d6e4727f7d7e28fdb022e8d6c17cabae2455f8281953d6e08",
                "md5": "fd500f0ecdb3c3fdaaf6adbdd004c05f",
                "sha256": "abd5da01a8abd1f477512a6e77ef955061c238fefa6793f0363bb626eb011c8a"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fd500f0ecdb3c3fdaaf6adbdd004c05f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 5312493,
            "upload_time": "2024-05-19T12:19:25",
            "upload_time_iso_8601": "2024-05-19T12:19:25.474927Z",
            "url": "https://files.pythonhosted.org/packages/4a/38/23d56111442d6e4727f7d7e28fdb022e8d6c17cabae2455f8281953d6e08/pybnesian-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "89787c3e4bea0d6a8b55dc26443cbae474bb75003e921d39ebdca6b2a5a4e422",
                "md5": "cb43df46859dc2bf99e96d713ea1dd96",
                "sha256": "385dd75bd3843e9964b0e87528a88657329329833f19e0bb719e868c0e3a2f1e"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "cb43df46859dc2bf99e96d713ea1dd96",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 3540931,
            "upload_time": "2024-05-19T12:19:27",
            "upload_time_iso_8601": "2024-05-19T12:19:27.525523Z",
            "url": "https://files.pythonhosted.org/packages/89/78/7c3e4bea0d6a8b55dc26443cbae474bb75003e921d39ebdca6b2a5a4e422/pybnesian-0.5.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "236a80885f7d52a78692838b04b51a2d2db0b59b6b935a837f4f5a592901c00c",
                "md5": "a20e3b519818292962443fcdffd81c28",
                "sha256": "ac6c430e1088f63669ea977f11af3a84af7c8da2a83b843d584df0a150dc1c74"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp312-cp312-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a20e3b519818292962443fcdffd81c28",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 4778951,
            "upload_time": "2024-05-19T12:19:29",
            "upload_time_iso_8601": "2024-05-19T12:19:29.246527Z",
            "url": "https://files.pythonhosted.org/packages/23/6a/80885f7d52a78692838b04b51a2d2db0b59b6b935a837f4f5a592901c00c/pybnesian-0.5.0-cp312-cp312-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0cf2c1d7e880f561d8f4d84fdd6ea68bcfaff54d4c99548587c6fbdf94b87a99",
                "md5": "4b60d50642e33ad9fc74ec44c1ef5ddc",
                "sha256": "91d52cc61a09163f1a2919549a9ba8adbd7bd23312d5a3283f5757407331c85f"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4b60d50642e33ad9fc74ec44c1ef5ddc",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 4088842,
            "upload_time": "2024-05-19T12:19:30",
            "upload_time_iso_8601": "2024-05-19T12:19:30.825998Z",
            "url": "https://files.pythonhosted.org/packages/0c/f2/c1d7e880f561d8f4d84fdd6ea68bcfaff54d4c99548587c6fbdf94b87a99/pybnesian-0.5.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b4efbfb9066229597229e9053e95c88c93a73758b6ad1523e0fdaaa1262e9249",
                "md5": "793d1e0bf679985e9dcf2c4d71bba9fe",
                "sha256": "4879ba0380566984a74ae215bcd53b14497655ccd890258578072929100367e4"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "793d1e0bf679985e9dcf2c4d71bba9fe",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 5315701,
            "upload_time": "2024-05-19T12:19:33",
            "upload_time_iso_8601": "2024-05-19T12:19:33.039785Z",
            "url": "https://files.pythonhosted.org/packages/b4/ef/bfb9066229597229e9053e95c88c93a73758b6ad1523e0fdaaa1262e9249/pybnesian-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "daa0ee9b60cad5a0fbd072e570aa1c0506cb915c0f9a6f8026d2883f2984344f",
                "md5": "05f7cb607fba41e17e362cc1a03ae3bf",
                "sha256": "612b06121d5e82cc99f8082c9f18c30eb2d2e2a417c682a299666c1e9a16e70e"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "05f7cb607fba41e17e362cc1a03ae3bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 3548385,
            "upload_time": "2024-05-19T12:19:34",
            "upload_time_iso_8601": "2024-05-19T12:19:34.678528Z",
            "url": "https://files.pythonhosted.org/packages/da/a0/ee9b60cad5a0fbd072e570aa1c0506cb915c0f9a6f8026d2883f2984344f/pybnesian-0.5.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b40ccd3146069a0dcfb0f12b1b11fae3d3dbd44baab1e5fa5a6e713510e66066",
                "md5": "f6ea9e9edee691bde005fc1fcfa76a0d",
                "sha256": "624b8f7cd6acbc328cad1432f98664bfa4677e9cb1672ce31d5d932dd83c8c85"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp38-cp38-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f6ea9e9edee691bde005fc1fcfa76a0d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 4759625,
            "upload_time": "2024-05-19T12:19:36",
            "upload_time_iso_8601": "2024-05-19T12:19:36.098515Z",
            "url": "https://files.pythonhosted.org/packages/b4/0c/cd3146069a0dcfb0f12b1b11fae3d3dbd44baab1e5fa5a6e713510e66066/pybnesian-0.5.0-cp38-cp38-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2422cb1860b74e6287a960a8c7b49adfe7f1b5e71447db5e4b76f20ba02c9334",
                "md5": "69b44fc5726065349a7dd19cacbbc352",
                "sha256": "c75eddb427daa656ee96c75d6c8f326342d87b67c8be0aee73f12051888327d9"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "69b44fc5726065349a7dd19cacbbc352",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 4081258,
            "upload_time": "2024-05-19T12:19:38",
            "upload_time_iso_8601": "2024-05-19T12:19:38.279128Z",
            "url": "https://files.pythonhosted.org/packages/24/22/cb1860b74e6287a960a8c7b49adfe7f1b5e71447db5e4b76f20ba02c9334/pybnesian-0.5.0-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "37cae7ed599b0a721514c8c1db2dac868ed18cfa2c70632a969b1d4113acb23f",
                "md5": "f217d52fa1c33fe1d3e32b8fb84fcb51",
                "sha256": "df700a34f3a9b71d0f6f893faf969de926471f1fbe4554c4eecdeee946cb4def"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f217d52fa1c33fe1d3e32b8fb84fcb51",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 5312828,
            "upload_time": "2024-05-19T12:19:40",
            "upload_time_iso_8601": "2024-05-19T12:19:40.367303Z",
            "url": "https://files.pythonhosted.org/packages/37/ca/e7ed599b0a721514c8c1db2dac868ed18cfa2c70632a969b1d4113acb23f/pybnesian-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aff3e40b7041f635ebbb40fbe8948bbbc05b3575a2937bb193d6c07b5dd80964",
                "md5": "61980906220636004a25b9e40e5eb48d",
                "sha256": "a1f896a47148899e607f9a30e59570c4998315dc4c87451a495b12fa9c785b0a"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "61980906220636004a25b9e40e5eb48d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3540001,
            "upload_time": "2024-05-19T12:19:42",
            "upload_time_iso_8601": "2024-05-19T12:19:42.610427Z",
            "url": "https://files.pythonhosted.org/packages/af/f3/e40b7041f635ebbb40fbe8948bbbc05b3575a2937bb193d6c07b5dd80964/pybnesian-0.5.0-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9dccf825e95a5fd767fe327696b2782be519f1861f45c84595fd882b7a9deadf",
                "md5": "dc03ff8767d921f85a08b7abe43193de",
                "sha256": "92b229e096faa64afdfaa9e8bbdbf135690ca56d6f70e787450b26987e8d5d2e"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp39-cp39-macosx_10_14_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dc03ff8767d921f85a08b7abe43193de",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 4760215,
            "upload_time": "2024-05-19T12:19:44",
            "upload_time_iso_8601": "2024-05-19T12:19:44.490139Z",
            "url": "https://files.pythonhosted.org/packages/9d/cc/f825e95a5fd767fe327696b2782be519f1861f45c84595fd882b7a9deadf/pybnesian-0.5.0-cp39-cp39-macosx_10_14_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e04da8e13b7fd577fdd72705de3b9ee2cc981cb801be48f35c2d7f267a28f043",
                "md5": "0604a5e65bf9ea33d554c9eae38145f4",
                "sha256": "2f16ffc680cbce4dcbca91e1b4b1a807669b2745f718c434bd56e31ec389fa3b"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "0604a5e65bf9ea33d554c9eae38145f4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 4081554,
            "upload_time": "2024-05-19T12:19:46",
            "upload_time_iso_8601": "2024-05-19T12:19:46.690552Z",
            "url": "https://files.pythonhosted.org/packages/e0/4d/a8e13b7fd577fdd72705de3b9ee2cc981cb801be48f35c2d7f267a28f043/pybnesian-0.5.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "41583e58edb12dd261337b25226dade8c177555e3d85cd8d9a3e911c0c11a5e5",
                "md5": "75298c913861b32f89e27cfe3cda690c",
                "sha256": "42c74c82c1968c2b15e45701c6a5af283e4b4e010c88b9a66aa73cfb6a70b4c1"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "75298c913861b32f89e27cfe3cda690c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 5313867,
            "upload_time": "2024-05-19T12:19:48",
            "upload_time_iso_8601": "2024-05-19T12:19:48.325406Z",
            "url": "https://files.pythonhosted.org/packages/41/58/3e58edb12dd261337b25226dade8c177555e3d85cd8d9a3e911c0c11a5e5/pybnesian-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3aad3fb0bcb801902e07bfb0e224ea213d7b6f4acf1470cad309557bba07512f",
                "md5": "2cfaa4e61aea1316eecf01c03492a9ea",
                "sha256": "0f0fe7d27522f44dc91eb8fc1876fcc4ffa7dc5bd85e4ec8dac53196fc4195f2"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2cfaa4e61aea1316eecf01c03492a9ea",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 3645759,
            "upload_time": "2024-05-19T12:19:50",
            "upload_time_iso_8601": "2024-05-19T12:19:50.456257Z",
            "url": "https://files.pythonhosted.org/packages/3a/ad/3fb0bcb801902e07bfb0e224ea213d7b6f4acf1470cad309557bba07512f/pybnesian-0.5.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a47d0847abc7a927e1f5b09829d27d1f584c12dd2a6a947d781fe8a1e2a330e2",
                "md5": "7b271c7b2dd4e510dad0fea950129151",
                "sha256": "8bb119da0591fd1139ceb6fac3f5a7a547ce60fe501ac5af502550fe6d2a08e6"
            },
            "downloads": -1,
            "filename": "pybnesian-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7b271c7b2dd4e510dad0fea950129151",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 2438633,
            "upload_time": "2024-05-19T12:19:51",
            "upload_time_iso_8601": "2024-05-19T12:19:51.908895Z",
            "url": "https://files.pythonhosted.org/packages/a4/7d/0847abc7a927e1f5b09829d27d1f584c12dd2a6a947d781fe8a1e2a330e2/pybnesian-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-19 12:19:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "davenza",
    "github_project": "PyBNesian",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": []
        },
        {
            "name": "pyarrow",
            "specs": [
                [
                    ">=",
                    "3.0"
                ]
            ]
        },
        {
            "name": "pybind11",
            "specs": [
                [
                    ">=",
                    "2.6"
                ]
            ]
        }
    ],
    "lcname": "pybnesian"
}
        
Elapsed time: 0.37027s