An open API service indexing awesome lists of open source software.

https://github.com/ML-KULeuven/PySDD

Python package for Sentential Decision Diagrams (SDD)
https://github.com/ML-KULeuven/PySDD

cython knowledge-compilation model-counting python sdd weighted-model-counting

Last synced: 12 months ago
JSON representation

Python package for Sentential Decision Diagrams (SDD)

Awesome Lists containing this project

README

          

=====
PySDD
=====

Python wrapper package to interactively use `Sentential Decision Diagrams (SDD) `_.

Full documentation available on http://pysdd.readthedocs.io.

------------
Installation
------------

.. code-block:: shell

$ pip install PySDD

--------------
Python package
--------------

The wrapper can be used as a Python package and allows for interactive use.

The following example builds an SDD for the formula ``a∧b ∨ b∧c ∨ c∧d``.

.. code-block:: python

from pysdd.sdd import SddManager, Vtree, WmcManager
vtree = Vtree(var_count=4, var_order=[2,1,4,3], vtree_type="balanced")
sdd = SddManager.from_vtree(vtree)
a, b, c, d = sdd.vars

# Build SDD for formula
formula = (a & b) | (b & c) | (c & d)

# Model Counting
wmc = formula.wmc(log_mode=False)
print(f"Model Count: {wmc.propagate()}")
wmc.set_literal_weight(a, 0.5)
print(f"Weighted Model Count: {wmc.propagate()}")

# Visualize SDD and Vtree
with open("output/sdd.dot", "w") as out:
print(formula.dot(), file=out)
with open("output/vtree.dot", "w") as out:
print(vtree.dot(), file=out)

The SDD and Vtree are visualized using Graphviz DOT:

.. image:: https://people.cs.kuleuven.be/wannes.meert/pysdd/sdd.png
.. image:: https://people.cs.kuleuven.be/wannes.meert/pysdd/vtree.png

More examples are available in the ``examples`` directory.
An interactive Jupyter notebook is available in
`notebooks/examples.ipynb `_

----------------------
Command Line Interface
----------------------

A Python CLI application is installed if you use pip, ``pysdd``. Or it can be used
directly from the source directory where it is called ``pysdd-cli.py``.
This script mimicks the original sdd binary and adds additional features (e.g. weighted model counting)

.. code-block:: shell

$ pysdd -h
$ ./pysdd-cli.py -h
usage: pysdd-cli.py [-h] [-c FILE | -d FILE | -s FILE] [-v FILE] [-W FILE]
[-V FILE] [-R FILE] [-S FILE] [-m] [-t TYPE] [-r K] [-q]
[-p] [--log_mode]

Sentential Decision Diagram, Compiler

optional arguments:
-h, --help show this help message and exit
-c FILE set input CNF file
-d FILE set input DNF file
-s FILE set input SDD file
-v FILE set input VTREE file
-W FILE set output VTREE file
-V FILE set output VTREE (dot) file
-R FILE set output SDD file
-S FILE set output SDD (dot) file
-m minimize the cardinality of compiled sdd
-t TYPE set initial vtree type (left/right/vertical/balanced/random)
-r K if K>0: invoke vtree search every K clauses. If K=0: disable
vtree search. By default (no -r option), dynamic vtree search is
enabled
-q perform post-compilation vtree search
-p verbose output
--log_mode weights in log

Weighted Model Counting is performed if the NNF file containts a line
formatted as follows: "c weights PW_1 NW_1 ... PW_n NW_n".

-----------------
Memory management
-----------------

Python's memory management is not used for the internal datastructures.
Use the SDD library's garbage collection commands (e.g. ref, deref) to
perform memory management.

-----------------------
Compilation from source
-----------------------

To install from source, make sure to have the correct development tools installed:

* C compiler (see `Installing Cython `_)
* The Python development version that includes Python header files and static library (e.g. libpython3-dev, python-dev, ...)

The build process will download Cython and numpy in an isolated environment.

Then run:

.. code-block:: shell

$ pip install build
$ python -m build

To install the main branch:

.. code-block:: shell

$ pip install git+https://github.com/wannesm/PySDD.git#egg=PySDD

----------
References
----------

This package is inspired by the SDD wrapper used in the probabilistic
programming language `ProbLog `_.

References:

* Wannes Meert & Arthur Choi, PySDD,
in `Recent Trends in Knowledge Compilation
`_,
Report from Dagstuhl Seminar 17381, Sep 2017.
Eds. A. Darwiche, P. Marquis, D. Suciu, S. Szeider.

Other languages:

* C: http://reasoning.cs.ucla.edu/sdd/
* Java: https://github.com/jessa/JSDD

-------
Contact
-------

* Wannes Meert, KU Leuven, https://people.cs.kuleuven.be/wannes.meert
* Arthur Choi, UCLA, http://web.cs.ucla.edu/~aychoi/

-------
License
-------

Python SDD wrapper:

Copyright 2017-2024, KU Leuven and Regents of the University of California.
Licensed under the Apache License, Version 2.0.

SDD package:

Copyright 2013-2018, Regents of the University of California
Licensed under the Apache License, Version 2.0.