{ "info": { "author": "Niels Jeppesen", "author_email": "niejep@dtu.dk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License (GPL)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: C++", "Programming Language :: Python", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Image Recognition", "Topic :: Scientific/Engineering :: Mathematics" ], "description": "# Thin wrapper for QPBO\nThin Python wrapper for a modified version of the quadratic pseudo-Boolean optimization (QPBO) algorithm by Vladimir Kolmogorov. The original source code by Vladimir Kolmogorov availbable at http://pub.ist.ac.at/~vnk/software.html. This wrapper uses a modified version with support for larger graphs and slightly lower memory usage. See [submodule repository](https://github.com/Skielex/QPBO) for more details.\n\n## QPBO vs. Maxflow\nWhile the QPBO algorithm performs a *s-t* graph cut similar to [Maxflow](https://github.com/Skielex/thinmaxflow), it allows for non-submodular energy terms, which Maxflow doesn't. Amongst other things, this allows QPBO to solve optimization problems with exclusions terms, which can be very usefull. The graph constructed by the QPBO implementation is twice the size of a Maxflow graph for an equivalent problem. Thus, QPBO uses more memory and is slightly slower than Maxflow.\n\n## Installation\nInstall package using `pip install thinqpbo` or clone this repository (including [submodule](https://github.com/Skielex/QPBO)). Building the package requires Cython.\n\n## Graph types\nCurrently, there are three different types of graphs: `QPBOInt`, `QPBOFloat` and `QPBODouble`. The only difference is the underlying datatypes used for the edge capacities in the graph. For stability, it is recommended to use `QPBOInt` for integer capacities and `QPBODouble` for floating point capacities. However, in some cases, it maybe be favourable to use `QPBOFloat` to reduce memory consumption.\n\n## Advanced features (QPBO-P and QPBO-I)\nThe QPBO implementation has a few advanced extensions known as QPBO-P and QPBO-I. Currently, not all advanced functions have been wrapped. If you need to use features of the QPBO C++ library that are not wrapped by `thinqpbo`, please let me know by creating an issue on GitHub.\n\n## Tiny example\n```python\nimport thinqpbo as tq\n\n# Create graph object.\ngraph = tq.QPBOInt()\n\n# Number of nodes to add.\nnodes_to_add = 2\n\n# Add two nodes.\nfirst_node_id = graph.add_node(nodes_to_add)\n\n# Add edges.\ngraph.add_unary_term(0, 0, 5) # E1(0) = 5, s --5-> n(0)\ngraph.add_unary_term(0, 1, 0) # E0(0) = 1, n(0) --1-> t\ngraph.add_unary_term(1, 5, 0) # E0(1) = 5, n(1) --5-> t\ngraph.add_pairwise_term(0, 1, 0, 7, 0, 4) # E01(0,1) = 7, n(0) --7-> n(1)\n # E11(0,1) = 4, Not possible with standard Maxflow\n\n\n# Find maxflow/cut graph.\ngraph.solve()\ngraph.compute_weak_persistencies()\ntwice_energy = graph.compute_twice_energy()\n\nfor n in range(nodes_to_add):\n segment = graph.get_label(n)\n print('Node %d has label %d.' % (n, segment))\n# Node 0 has label 0.\n# Node 1 has label 0.\n\nprint('Twice energy/flow: %s' % twice_energy)\n# Twice energy/flow: 12\n```\n\n## License\nAs the QPBO implementation is distributed under the GPLv3 license, so is this package.\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/Skielex/thinqpbo", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "thinqpbo", "package_url": "https://pypi.org/project/thinqpbo/", "platform": "", "project_url": "https://pypi.org/project/thinqpbo/", "project_urls": { "Homepage": "https://github.com/Skielex/thinqpbo" }, "release_url": "https://pypi.org/project/thinqpbo/0.1.3/", "requires_dist": null, "requires_python": "", "summary": "A thin QPBO wrapper for Python", "version": "0.1.3" }, "last_serial": 5555083, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "eec88d3dcc79dffe4d3b16fcd12e9e33", "sha256": "6f7042e8bb13a30ba12abf230f08f343a9c1a8dbcf5917b5e4cc0085e3de8205" }, "downloads": -1, "filename": "thinqpbo-0.1.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "eec88d3dcc79dffe4d3b16fcd12e9e33", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 71307, "upload_time": "2018-12-03T08:15:03", "url": "https://files.pythonhosted.org/packages/37/c7/41e26bf9d16df47607674103df646a55ec26be84e12cd26fd6f7a67f8ba3/thinqpbo-0.1.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "f76b74fe19b68a2f7b6957e18bfde7ce", "sha256": "4200008192ecce701007d1d2219d6cd92a5abb177c212457ce8bdd5969d4582a" }, "downloads": -1, "filename": "thinqpbo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f76b74fe19b68a2f7b6957e18bfde7ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64923, "upload_time": "2018-12-03T08:15:06", "url": "https://files.pythonhosted.org/packages/ff/b7/a0bc7fe6fd3cef6297b7583d8d88fd324eb538b95527a35eb2d349eca865/thinqpbo-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0ad2ff14feb99a3acad8dd8fc2c59225", "sha256": "d54dc28e873ae482bf9292a3723dceb7322b3f61177d554a24029a485595c6aa" }, "downloads": -1, "filename": "thinqpbo-0.1.1-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "0ad2ff14feb99a3acad8dd8fc2c59225", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 71341, "upload_time": "2018-12-08T15:44:22", "url": "https://files.pythonhosted.org/packages/37/af/df125cbb7b24cbfbdd91e6ca0edb0c90885dd1b0639c254d88dc0a7e1194/thinqpbo-0.1.1-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "82638af94d204fb6bc3449ea4bf713fe", "sha256": "12df5d7d1ba202e7a2ce36c21a5a1885d33509d9a80db1ceac160d39544fb1e9" }, "downloads": -1, "filename": "thinqpbo-0.1.1.tar.gz", "has_sig": false, "md5_digest": "82638af94d204fb6bc3449ea4bf713fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106608, "upload_time": "2018-12-08T15:44:25", "url": "https://files.pythonhosted.org/packages/ab/56/8f322d0b2241f9d80aee1de1059cf0e75c87c4898054a48e5a74de946722/thinqpbo-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "086f506ed83510e3c05b7ed5d77097a6", "sha256": "28b04bd7623f15254780d45684f08e4b9bd79cb6de846363f4ee53ff4f90d496" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp27-cp27m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "086f506ed83510e3c05b7ed5d77097a6", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 96181, "upload_time": "2018-12-14T15:05:31", "url": "https://files.pythonhosted.org/packages/5d/e8/e7df66f265d242d1d225cc7642e1f27f4359ea425d1c233dd9b3428d6d42/thinqpbo-0.1.2-cp27-cp27m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "e674539794dc8cf194af974b4f172d50", "sha256": "f5ed214c1d0e030557f053ef2eb3dc4e9d327980f70fe23531ea52cddeee0ba0" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp34-cp34m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "e674539794dc8cf194af974b4f172d50", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 99315, "upload_time": "2018-12-14T15:05:33", "url": "https://files.pythonhosted.org/packages/98/e3/5804ef997fb8dd2f43091444a09876067fa34a6b2246a887c4f2c934b741/thinqpbo-0.1.2-cp34-cp34m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4729332d35939f096596a0cfa6a42a41", "sha256": "88f4b04a3195b331d3ec9bacbcd362a8db8f669874bfbb8105a0c31f3019eea4" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp35-cp35m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "4729332d35939f096596a0cfa6a42a41", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 99639, "upload_time": "2018-12-14T15:05:34", "url": "https://files.pythonhosted.org/packages/22/94/2ba44e570c311ae02cad4c38b6ab69877d578af5a3161bb2d506197c8d24/thinqpbo-0.1.2-cp35-cp35m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "ecd7ee05d938172c1f1dd3dc23d6ee32", "sha256": "c1840b7b671f33c4369791eb5be9337ff8ea13c8efb5385d01d2d30a4d8ec300" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "ecd7ee05d938172c1f1dd3dc23d6ee32", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 69649, "upload_time": "2018-12-14T15:05:36", "url": "https://files.pythonhosted.org/packages/2d/95/b9e00aef6c7ceeb7b68c14c029a1b801406cafae6bc8d4509a4649a9658f/thinqpbo-0.1.2-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "c65035f0eee080e69172645d4ae47cbf", "sha256": "b2c5f4d448b0491bd12aed56c906b764a93a728b172068504158feda51674f10" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "c65035f0eee080e69172645d4ae47cbf", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 87630, "upload_time": "2018-12-14T15:05:37", "url": "https://files.pythonhosted.org/packages/64/38/0fdb3ba84dfce792b30f6b71a8cc97dca51feb696ef7a6332b50560a0f97/thinqpbo-0.1.2-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "3de6237c6f365284fc0b4a8a664c0c6c", "sha256": "24b5b873747987d271af5553de7186fc0c8389d0c02d9b45a3edf2dc256aa5a2" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "3de6237c6f365284fc0b4a8a664c0c6c", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 72901, "upload_time": "2018-12-14T15:05:39", "url": "https://files.pythonhosted.org/packages/6a/9e/f56725558b4aa2490bf4f1142eedb3b1600ba6b7b0e46299c65629a8f92c/thinqpbo-0.1.2-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "af489b7bd7a23cfe978d4e99ce4696de", "sha256": "f8ea759c56ebf088384a527b27ed04a9e2536aabbf936aa41b61fe50138041b0" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp37-cp37m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "af489b7bd7a23cfe978d4e99ce4696de", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 99782, "upload_time": "2018-12-14T15:05:41", "url": "https://files.pythonhosted.org/packages/56/da/848733e2264d37575f81e31017972062571228eb175ebd671427ae59db28/thinqpbo-0.1.2-cp37-cp37m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f58689f194a29a861e5cca541ff964a5", "sha256": "4b55a8441d0c93980d8a5c01e831dfbaf0e7ca0e40019b9255da05d1c4f6dfda" }, "downloads": -1, "filename": "thinqpbo-0.1.2-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "f58689f194a29a861e5cca541ff964a5", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 72733, "upload_time": "2018-12-14T15:05:42", "url": "https://files.pythonhosted.org/packages/4c/e4/54893a1865240bfb9d18c3e7494257d5733c3ba11333c6303a1891fe3095/thinqpbo-0.1.2-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "1c8d1933a5d99dc4f18c2497a1c1c05d", "sha256": "880b7266c5dc1c1251e06c04e47e7f05fd50e1bcf9ba97b805f7b1855b64418a" }, "downloads": -1, "filename": "thinqpbo-0.1.2.tar.gz", "has_sig": false, "md5_digest": "1c8d1933a5d99dc4f18c2497a1c1c05d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 109761, "upload_time": "2018-12-14T15:05:44", "url": "https://files.pythonhosted.org/packages/67/b9/74d11fa3936f614cb2e14f830fce509cc3533390390524710c2a200cc41d/thinqpbo-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "479f4dcad04ef08ec63569ab900684a4", "sha256": "0ba39164f08d2e753199c548d017c2db8d9cc871ab4123edec5dd7e5fabd7553" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp27-cp27m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "479f4dcad04ef08ec63569ab900684a4", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 99547, "upload_time": "2019-07-19T08:06:40", "url": "https://files.pythonhosted.org/packages/db/a4/953e39a8876bd4ab8059e5b4b448c371e1c7fcd435d567edff2ced213d74/thinqpbo-0.1.3-cp27-cp27m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4345eef2942636ed88c6f62edd04c926", "sha256": "bdead6b6191fef855fecfc5d26ee3271ee6308462349c2ad722507b381c21c60" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "4345eef2942636ed88c6f62edd04c926", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 103087, "upload_time": "2019-07-19T08:06:42", "url": "https://files.pythonhosted.org/packages/55/3d/e98a0d456fe38943d38f845e3bc97afc9f849d711a807c589f0518a292be/thinqpbo-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4c4d1a75eb562e1ae9ecf8ee22ac7c56", "sha256": "41d4d82102298783f81549885016bb01552bc5219f8562f15b9f09700a452e92" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "4c4d1a75eb562e1ae9ecf8ee22ac7c56", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 85073, "upload_time": "2019-07-19T08:06:43", "url": "https://files.pythonhosted.org/packages/df/c8/d0a7ccf840fb56b21463916e0b0f0b777951805910dcebc52492036ec06a/thinqpbo-0.1.3-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "49d2cb03b4be2a0d0321392b7b0ad267", "sha256": "c09d6e4b4d502572fcb3de4bae799b7caef287e1318598ff63737aa4ae291af7" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp37-cp37m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "49d2cb03b4be2a0d0321392b7b0ad267", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 102977, "upload_time": "2019-07-19T08:06:44", "url": "https://files.pythonhosted.org/packages/f4/07/197d578d5bde7e2306eb8c90fd28cd087f752e5fd335bacc295cda470bb0/thinqpbo-0.1.3-cp37-cp37m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "1e401e8fc9f453ce520df22829c67dfc", "sha256": "7b17204ab33a9e2ccb7c5961a69591c30769db716f27377bfb40df35a2f87885" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "1e401e8fc9f453ce520df22829c67dfc", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 84883, "upload_time": "2019-07-19T08:06:46", "url": "https://files.pythonhosted.org/packages/00/db/b4c087729d08dd0b34f45eeac3e62176c112c3d3b6d966844e57530f4582/thinqpbo-0.1.3-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "b474c203f77592a016ee28dad17e3129", "sha256": "2159bee54b22cb3b482ebdd72ff1a240cc2e252e2e3a80a3b0923edf858b538e" }, "downloads": -1, "filename": "thinqpbo-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b474c203f77592a016ee28dad17e3129", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110920, "upload_time": "2019-07-19T08:06:47", "url": "https://files.pythonhosted.org/packages/81/c9/9e7ff201047c98ec870e982c42565acec45bb5512424107ec64def8ff08c/thinqpbo-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "479f4dcad04ef08ec63569ab900684a4", "sha256": "0ba39164f08d2e753199c548d017c2db8d9cc871ab4123edec5dd7e5fabd7553" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp27-cp27m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "479f4dcad04ef08ec63569ab900684a4", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 99547, "upload_time": "2019-07-19T08:06:40", "url": "https://files.pythonhosted.org/packages/db/a4/953e39a8876bd4ab8059e5b4b448c371e1c7fcd435d567edff2ced213d74/thinqpbo-0.1.3-cp27-cp27m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4345eef2942636ed88c6f62edd04c926", "sha256": "bdead6b6191fef855fecfc5d26ee3271ee6308462349c2ad722507b381c21c60" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "4345eef2942636ed88c6f62edd04c926", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 103087, "upload_time": "2019-07-19T08:06:42", "url": "https://files.pythonhosted.org/packages/55/3d/e98a0d456fe38943d38f845e3bc97afc9f849d711a807c589f0518a292be/thinqpbo-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4c4d1a75eb562e1ae9ecf8ee22ac7c56", "sha256": "41d4d82102298783f81549885016bb01552bc5219f8562f15b9f09700a452e92" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "4c4d1a75eb562e1ae9ecf8ee22ac7c56", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 85073, "upload_time": "2019-07-19T08:06:43", "url": "https://files.pythonhosted.org/packages/df/c8/d0a7ccf840fb56b21463916e0b0f0b777951805910dcebc52492036ec06a/thinqpbo-0.1.3-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "49d2cb03b4be2a0d0321392b7b0ad267", "sha256": "c09d6e4b4d502572fcb3de4bae799b7caef287e1318598ff63737aa4ae291af7" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp37-cp37m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "49d2cb03b4be2a0d0321392b7b0ad267", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 102977, "upload_time": "2019-07-19T08:06:44", "url": "https://files.pythonhosted.org/packages/f4/07/197d578d5bde7e2306eb8c90fd28cd087f752e5fd335bacc295cda470bb0/thinqpbo-0.1.3-cp37-cp37m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "1e401e8fc9f453ce520df22829c67dfc", "sha256": "7b17204ab33a9e2ccb7c5961a69591c30769db716f27377bfb40df35a2f87885" }, "downloads": -1, "filename": "thinqpbo-0.1.3-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "1e401e8fc9f453ce520df22829c67dfc", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 84883, "upload_time": "2019-07-19T08:06:46", "url": "https://files.pythonhosted.org/packages/00/db/b4c087729d08dd0b34f45eeac3e62176c112c3d3b6d966844e57530f4582/thinqpbo-0.1.3-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "b474c203f77592a016ee28dad17e3129", "sha256": "2159bee54b22cb3b482ebdd72ff1a240cc2e252e2e3a80a3b0923edf858b538e" }, "downloads": -1, "filename": "thinqpbo-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b474c203f77592a016ee28dad17e3129", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110920, "upload_time": "2019-07-19T08:06:47", "url": "https://files.pythonhosted.org/packages/81/c9/9e7ff201047c98ec870e982c42565acec45bb5512424107ec64def8ff08c/thinqpbo-0.1.3.tar.gz" } ] }