{ "info": { "author": "Jan Verbeek", "author_email": "jan.verbeek@posteo.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: ISC License (ISCL)", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Mathematics" ], "description": "[![Build Status](https://travis-ci.org/blyxxyz/python-nnf.svg?branch=master)](https://travis-ci.org/blyxxyz/python-nnf)\n[![Readthedocs](https://readthedocs.org/projects/python-nnf/badge/)](https://python-nnf.readthedocs.io)\n![Python Versions](https://img.shields.io/pypi/pyversions/nnf.svg)\n[![PyPI](https://img.shields.io/pypi/v/nnf.svg)](https://pypi.org/project/nnf/)\n![License](https://img.shields.io/pypi/l/nnf.svg)\n\n`nnf` is a Python package for creating and manipulating logical sentences\nwritten in the\n[negation normal form](https://en.wikipedia.org/wiki/Negation_normal_form)\n(NNF).\n\nNNF sentences make statements about any number of variables. Here's an example:\n\n```pycon\n>>> from nnf import Var\n>>> a, b = Var('a'), Var('b')\n>>> sentence = (a & b) | (a & ~b)\n>>> sentence\nOr({And({a, b}), And({a, ~b})})\n```\n\nThis sentence says that either a is true and b is true, or a is true and b\nis false.\n\nYou can do a number of things with such a sentence. For example, you can ask\n whether a particular set of values for the variables makes the sentence true:\n\n```pycon\n>>> sentence.satisfied_by({'a': True, 'b': False})\nTrue\n>>> sentence.satisfied_by({'a': False, 'b': False})\nFalse\n```\n\nYou can also fill in a value for some of the variables:\n\n```pycon\n>>> sentence.condition({'b': True})\nOr({And({a, true}), And({a, false})})\n```\n\nAnd then reduce the sentence:\n\n```pycon\n>>> _.simplify()\na\n```\n\nThis package takes much of its data model and terminology from\n[*A Knowledge Compilation Map*](https://jair.org/index.php/jair/article/view/10311).\n\nComplete documentation can be found at [readthedocs](https://python-nnf.readthedocs.io).\n\n# Installing\n\n```sh\npip install nnf\n```\n\nAt least Python 3.4 is required.\n\n# Serialization\n\nA parser and serializer for the\n[DIMACS sat format](https://www.cs.ubc.ca/~hoos/SATLIB/benchm.html) are\nimplemented in `nnf.dimacs`, with a standard `load`/`loads`/`dump`/`dumps`\ninterface.\n\n# DSHARP interoperability\n\n[DSHARP](https://bitbucket.org/haz/dsharp) is a program that compiles CNF\nsentences to (s)d-DNNF sentences. The `nnf.dsharp` module contains tools for\nparsing its output format and for invoking the compiler.\n\n# Algebraic Model Counting\n\n`nnf.amc` has a basic implementation of\n[Algebraic Model Counting](https://arxiv.org/abs/1211.4475).\n\n# Command line interface\n\nSome functionality is available through a command line tool, `pynnf`, including a\n(slow) SAT solver and a sentence visualizer. For more information, see\n[the documentation](https://python-nnf.readthedocs.io/en/stable/cli.html).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/blyxxyz/python-nnf", "keywords": "logic nnf dimacs dsharp", "license": "ISC", "maintainer": "", "maintainer_email": "", "name": "nnf", "package_url": "https://pypi.org/project/nnf/", "platform": "", "project_url": "https://pypi.org/project/nnf/", "project_urls": { "Documentation": "https://python-nnf.readthedocs.io/", "Homepage": "https://github.com/blyxxyz/python-nnf", "Source": "https://github.com/blyxxyz/python-nnf" }, "release_url": "https://pypi.org/project/nnf/0.2.1/", "requires_dist": [ "typing ; python_version < \"3.5\"" ], "requires_python": ">=3.4", "summary": "Manipulate NNF (Negation Normal Form) logical sentences", "version": "0.2.1" }, "last_serial": 5659549, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "086dcc310ac099bd46a46b5702ce8a3e", "sha256": "40e9fca3a6280ba01df85fb25ef0c97f5c90432ac7bbd123a78269222a687738" }, "downloads": -1, "filename": "nnf-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "086dcc310ac099bd46a46b5702ce8a3e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8875, "upload_time": "2019-04-17T18:29:29", "url": "https://files.pythonhosted.org/packages/72/83/1a78b0502111147488852a605e6719d8e9b2cfc4fc66522d4a0ef2012b45/nnf-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7de004fb5857d86504ff17e39f76461", "sha256": "57ea249057ee32a2ffc6b6aca6f7e62ce9d9370e560a45909ee55a95da45df11" }, "downloads": -1, "filename": "nnf-0.0.1.tar.gz", "has_sig": false, "md5_digest": "b7de004fb5857d86504ff17e39f76461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7494, "upload_time": "2019-04-17T18:29:31", "url": "https://files.pythonhosted.org/packages/62/e1/e9174667160e2652906ffe47f424fab85d0fecb919e69203ef1d9e6a8ef3/nnf-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0db13b5e9380708d16eaa13beaf3069a", "sha256": "28e8f8e70ed762a709464acae02c3a0aa25c88b31aa20f134e6f7e5f62433662" }, "downloads": -1, "filename": "nnf-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0db13b5e9380708d16eaa13beaf3069a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13088, "upload_time": "2019-06-10T22:29:37", "url": "https://files.pythonhosted.org/packages/39/1c/43ffba3260e5311561274d822fb5ea1ae673ffa7ab1597b3d4bc30958e4f/nnf-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c71c577e24af020df83263913fc18f4d", "sha256": "11481c5d1bffe92d3d95f38361696f1b2a2e9896819fc4bce0ba1c50005db2b4" }, "downloads": -1, "filename": "nnf-0.0.2.tar.gz", "has_sig": false, "md5_digest": "c71c577e24af020df83263913fc18f4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12218, "upload_time": "2019-06-10T22:29:39", "url": "https://files.pythonhosted.org/packages/07/c0/3083d812d279b8e1478da7c917d1c3427b3419060d9c60e4cc61dc115397/nnf-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "bc78987146b039c99e82033804b25eab", "sha256": "857e83f03b3413b27b2dbc4ed1b3dc8ca2365b1f5c5085c1bd768944c4f2e76e" }, "downloads": -1, "filename": "nnf-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bc78987146b039c99e82033804b25eab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14315, "upload_time": "2019-06-11T20:00:38", "url": "https://files.pythonhosted.org/packages/a6/d9/6202b888140775f3d0e906dd29cc3dbf08cec2c34444ef912e3efa370177/nnf-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a04749c2c9643191560d654187ac123", "sha256": "56f158e2cdfae834f8532f1405e53520073fbec4562f4daea290f89449d82f73" }, "downloads": -1, "filename": "nnf-0.0.3.tar.gz", "has_sig": false, "md5_digest": "9a04749c2c9643191560d654187ac123", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13519, "upload_time": "2019-06-11T20:00:39", "url": "https://files.pythonhosted.org/packages/e3/74/de7d9dca724ea9a3d607b1dad6fe0a6e8f5c1b8a4e8dd4debfbaeee04716/nnf-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "fbf9d1ef9ece53964e7a6490df340881", "sha256": "68dcf13820f513cc80a791d56b05a41461749574ad317d2c426ae65747f4d833" }, "downloads": -1, "filename": "nnf-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fbf9d1ef9ece53964e7a6490df340881", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16368, "upload_time": "2019-06-16T20:15:49", "url": "https://files.pythonhosted.org/packages/98/73/4512f78c0ce6ba57b662869af58d4b71f282bd16faf60ac7106f54ad789f/nnf-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd60a186982589a755c83ebba2f7976c", "sha256": "62f1d12d2df4141358ef67c9c6199a0b509e29df88dfc2f43cda853ee1cdaeb9" }, "downloads": -1, "filename": "nnf-0.1.0.tar.gz", "has_sig": false, "md5_digest": "cd60a186982589a755c83ebba2f7976c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15485, "upload_time": "2019-06-16T20:15:51", "url": "https://files.pythonhosted.org/packages/c0/d5/b0eb95e9d4bfb86d9a0b3a816af4d1305ced13f8a04af3b6a66faeecf83f/nnf-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0bbabe14d793fd7cf2e506bcdc7728ee", "sha256": "4da97330043d32d8e152ab4695a0d50a8022222bc5fe5095889b2b51d25bb136" }, "downloads": -1, "filename": "nnf-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0bbabe14d793fd7cf2e506bcdc7728ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 16707, "upload_time": "2019-07-01T21:33:06", "url": "https://files.pythonhosted.org/packages/7a/8b/cba180923f4ec771d1ba844b92dbb29ce029e58e51699eea87323ee96fad/nnf-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a68f0bd7d38f968efd371081810e5193", "sha256": "c78015179d4247db77c22e4c5f38516407f092ceba3299642ac211589748fcb3" }, "downloads": -1, "filename": "nnf-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a68f0bd7d38f968efd371081810e5193", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 15905, "upload_time": "2019-07-01T21:33:08", "url": "https://files.pythonhosted.org/packages/39/37/2c08de0407de4c49a67448f2a41deff3ff41e655c4d9d9272d2688e6ed5b/nnf-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "8b6eb3ea57ad120c3ee04e06f146aa52", "sha256": "0e65f033f18f8b3b0984cc6a3f10ab4c785d5e9ce80ca8b29339daf71ac3161c" }, "downloads": -1, "filename": "nnf-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8b6eb3ea57ad120c3ee04e06f146aa52", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17561, "upload_time": "2019-07-04T13:27:27", "url": "https://files.pythonhosted.org/packages/26/79/016211a39f8c0d18d7d672bdac3d0bed05d1079a4877380f6c03a2b44e24/nnf-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16d3c8e21d1ff5c9774afcaff6c63dec", "sha256": "2e9d89c0f2ed579fd8fe87e84597ebbf03b66dff21469506120bc00571e90566" }, "downloads": -1, "filename": "nnf-0.1.2.tar.gz", "has_sig": false, "md5_digest": "16d3c8e21d1ff5c9774afcaff6c63dec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 16676, "upload_time": "2019-07-04T13:27:29", "url": "https://files.pythonhosted.org/packages/15/6e/f91a2c9f53c8f5054ecc2b08b4a364410a41108baa915d5ee574b8f4a8f8/nnf-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "05392f09fc9c7ded88e39c05a8db19e4", "sha256": "634e912a0c5f6cabbfd44e55553267f25ee33db46cd04a6e4bcac9f70832bf76" }, "downloads": -1, "filename": "nnf-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "05392f09fc9c7ded88e39c05a8db19e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 26684, "upload_time": "2019-07-10T18:00:48", "url": "https://files.pythonhosted.org/packages/20/aa/0480a2ccde0800c5c111be765aa0d737557a551af27659a6850bcd78c84d/nnf-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa6bb5534ab96a7ee31f5946b2e244aa", "sha256": "98901aee63810f6880c0e4594e9934b76b51263b11870e8d1392a0ceca2dfc92" }, "downloads": -1, "filename": "nnf-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fa6bb5534ab96a7ee31f5946b2e244aa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 24959, "upload_time": "2019-07-10T18:00:49", "url": "https://files.pythonhosted.org/packages/5a/fb/927793f623ed12b08d0efe66a1d85a18e4d003b7126f4daadec5ee353ebc/nnf-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b8a2db8eb0869cb98cc2b4b1a74cd1c5", "sha256": "ebf4c51d49974b77e08c94c3666555a4f78642f358afa7f20171c0bda2ebfa6a" }, "downloads": -1, "filename": "nnf-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b8a2db8eb0869cb98cc2b4b1a74cd1c5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 26826, "upload_time": "2019-08-10T14:13:28", "url": "https://files.pythonhosted.org/packages/84/20/aa48fe7bc0fb05f01137a9925c8ade1cb83bae11572d32250c9bf6ec8f11/nnf-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a08fe38d37a911b53826cdbb7d7ddfd9", "sha256": "fc3b1721cf86701a57169f78a183a10c0e374717080d0bacf5119446a33b752d" }, "downloads": -1, "filename": "nnf-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a08fe38d37a911b53826cdbb7d7ddfd9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 25065, "upload_time": "2019-08-10T14:13:30", "url": "https://files.pythonhosted.org/packages/e5/4f/4d70cb1dab172871c912abd2bb8af336da2060e0c7d5fb32a8eaf41731d2/nnf-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b8a2db8eb0869cb98cc2b4b1a74cd1c5", "sha256": "ebf4c51d49974b77e08c94c3666555a4f78642f358afa7f20171c0bda2ebfa6a" }, "downloads": -1, "filename": "nnf-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b8a2db8eb0869cb98cc2b4b1a74cd1c5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 26826, "upload_time": "2019-08-10T14:13:28", "url": "https://files.pythonhosted.org/packages/84/20/aa48fe7bc0fb05f01137a9925c8ade1cb83bae11572d32250c9bf6ec8f11/nnf-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a08fe38d37a911b53826cdbb7d7ddfd9", "sha256": "fc3b1721cf86701a57169f78a183a10c0e374717080d0bacf5119446a33b752d" }, "downloads": -1, "filename": "nnf-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a08fe38d37a911b53826cdbb7d7ddfd9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 25065, "upload_time": "2019-08-10T14:13:30", "url": "https://files.pythonhosted.org/packages/e5/4f/4d70cb1dab172871c912abd2bb8af336da2060e0c7d5fb32a8eaf41731d2/nnf-0.2.1.tar.gz" } ] }