# toulbar2
## Exact optimization for cost function networks and additive graphical models
[![Build Status](https://travis-ci.com/toulbar2/toulbar2.svg?branch=master)](https://app.travis-ci.com/github/toulbar2/toulbar2)
[![PyPi version](https://img.shields.io/pypi/v/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)[![PyPi wheel](https://img.shields.io/pypi/wheel/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)[![PyPi python versions](https://img.shields.io/pypi/pyversions/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)
<!-- (_README_1)= -->
## What is toulbar2?
toulbar2 is an open-source black-box C++ optimizer for cost function
networks and discrete additive graphical models. This also covers Max-SAT, Max-Cut, QUBO (and constrained variants), among others. It can read a variety
of formats. The optimized criteria and feasibility should be provided
factorized in local cost functions on discrete variables. Constraints
are represented as functions that produce costs that exceed a
user-provided primal bound. toulbar2 looks for a non-forbidden assignment
of all variables that optimizes the sum of all functions (a decision
NP-complete problem).
toulbar2 won several competitions on deterministic and probabilistic
graphical models:
* Max-CSP 2008 Competition [CPAI08][cpai08] (winner on 2-ARY-EXT and N-ARY-EXT)
* Probabilistic Inference Evaluation [UAI 2008][uai2008] (winner on several MPE tasks, inra entries)
* 2010 UAI APPROXIMATE INFERENCE CHALLENGE [UAI 2010][uai2010] (winner on 1200-second MPE task)
* The Probabilistic Inference Challenge [PIC 2011][pic2011] (second place by ficolofo on 1-hour MAP task)
* UAI 2014 Inference Competition [UAI 2014][uai2014] (winner on all MAP task categories, see Proteus, Robin, and IncTb entries)
* XCSP3 2022 Competition [XCSP3 2022][xcsp2022] (second place on Mini COP and Parallel COP tracks)
* UAI 2022 Inference Competition [UAI 2022][uai2022] (winner on all MPE and MMAP task categories)
[cpai08]: http://www.cril.univ-artois.fr/CPAI08/
[uai2008]: http://graphmod.ics.uci.edu/uai08/Evaluation/Report
[uai2010]: http://www.cs.huji.ac.il/project/UAI10/summary.php
[pic2011]: http://www.cs.huji.ac.il/project/PASCAL/board.php
[uai2014]: http://www.hlt.utdallas.edu/~vgogate/uai14-competition/leaders.html
[xcsp2022]: https://xcsp.org/competitions
[uai2022]: https://uaicompetition.github.io/uci-2022/results/final-leader-board
toulbar2 is now also able to collaborate with ML code that can learn
an additive graphical model (with constraints) from data (see the
associated
[paper](https://miat.inrae.fr/schiex/Export/Pushing_Data_in_your_CP_model.pdf),
[slides](https://miat.inrae.fr/schiex/Export/Pushing_Data_in_your_CP_model-Slides.pdf)
and [video](https://www.youtube.com/watch?v=IpUr6KIEjMs) where it is
shown how it can learn user preferences or how to play the Sudoku
without knowing the rules). The current CFN learning code is available
on [GitHub](https://github.com/toulbar2/CFN-learn).
<!-- (_README_2)= -->
## Installation from binaries
You can install toulbar2 directly using the package manager in Debian
and Debian derived Linux distributions (Ubuntu, Mint,...):
sudo apt-get update
sudo apt-get install toulbar2 toulbar2-doc
For the most recent binary or the Python API, compile from source.
<!-- (_README_3)= -->
## Python interface
An alpha-release Python interface can be tested through pip on Linux and MacOS:
python3 -m pip install --upgrade pip
python3 -m pip install pytoulbar2
The first line is only useful for Linux distributions that ship "old" versions of pip.
Commands for compiling the Python API on Linux/MacOS with cmake (Python module in lib/\*/pytb2.cpython\*.so):
pip3 install pybind11
mkdir build
cd build
cmake -DPYTB2=ON ..
make
Move the cpython library and the experimental [pytoulbar2.py](https://github.com/toulbar2/toulbar2/raw/master/pytoulbar2/pytoulbar2.py) python class wrapper in the folder of the python script that does "import pytoulbar2".
<!-- (_README_4)= -->
## Download
Download the latest release from GitHub
(https://github.com/toulbar2/toulbar2) or similarly use tag versions,
e.g.:
git clone --branch 1.2.0 https://github.com/toulbar2/toulbar2.git
<!-- (_README_5)= -->
## Installation from sources
Compilation requires git, cmake and a C++-11 capable compiler (in C++11 mode).
Required library:
* libgmp-dev
Recommended libraries (default use):
* libboost-graph-dev
* libboost-iostreams-dev
* libboost-serialization-dev
* zlib1g-dev
* liblzma-dev
* libbz2-dev
Optional libraries:
* libjemalloc-dev
* pybind11-dev
* libopenmpi-dev
* libboost-mpi-dev
* libicuuc
* libicui18n
* libicudata
* libxml2-dev
* libxcsp3parser
On MacOS, run ./misc/script/MacOS-requirements-install.sh to install the recommended libraries.
Commands for compiling toulbar2 on Linux/MacOS with cmake (binary in build/bin/\*/toulbar2):
mkdir build
cd build
cmake ..
make
Commands for statically compiling toulbar2 on Linux in directory toulbar2/src without cmake:
bash
cd src
echo '#define Toulbar_VERSION "1.2.0"' > ToulbarVersion.hpp
g++ -o toulbar2 -std=c++17 -O3 -DNDEBUG -static -static-libgcc -static-libstdc++ -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DWCSPFORMATONLY \
-I. -I./pils/src tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \
-lboost_graph -lboost_iostreams -lboost_serialization -lgmp -lz -lbz2 -llzma
Use OPENMPI flag and MPI compiler for a parallel version of toulbar2:
bash
cd src
echo '#define Toulbar_VERSION "1.2.0"' > ToulbarVersion.hpp
mpicxx -o toulbar2 -std=c++17 -O3 -DNDEBUG -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DWCSPFORMATONLY -DOPENMPI \
-I. -I./pils/src tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \
-lboost_graph -lboost_iostreams -lboost_serialization -lboost_mpi -lgmp -lz -lbz2 -llzma
Replace LONGLONG_COST by INT_COST to reduce memory usage by two and reduced cost range (costs must be smaller than 10^8).
Replace WCSPFORMATONLY by XMLFLAG3 and add libxcsp3parser.a from xcsp.org in your current directory for reading XCSP3 files:
bash
cd src
echo '#define Toulbar_VERSION "1.2.0"' > ToulbarVersion.hpp
mpicxx -o toulbar2 -std=c++17 -O3 -DNDEBUG -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DXMLFLAG3 -DOPENMPI \
-I/usr/include/libxml2 -I. -I./pils/src -I./xmlcsp3 tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \
-lboost_graph -lboost_iostreams -lboost_serialization -lboost_mpi -lxml2 -licuuc -licui18n -licudata libxcsp3parser.a -lgmp -lz -lbz2 -llzma -lm -lpthread -ldl
Copyright (C) 2006-2022, toulbar2 team.
toulbar2 is currently maintained by Simon de Givry, INRAE - MIAT, Toulouse, France (simon.de-givry@inrae.fr)
Raw data
{
"_id": null,
"home_page": "http://miat.inrae.fr/toulbar2",
"name": "pytoulbar2",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "optimization graphical-model",
"author": "ToulBar2 team",
"author_email": "thomas.schiex@inrae.fr",
"download_url": "",
"platform": null,
"description": "# toulbar2\n## Exact optimization for cost function networks and additive graphical models \n\n[![Build Status](https://travis-ci.com/toulbar2/toulbar2.svg?branch=master)](https://app.travis-ci.com/github/toulbar2/toulbar2)\n[![PyPi version](https://img.shields.io/pypi/v/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)[![PyPi wheel](https://img.shields.io/pypi/wheel/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)[![PyPi python versions](https://img.shields.io/pypi/pyversions/pytoulbar2.svg)](https://pypi.org/project/pytoulbar2)\n\n<!-- (_README_1)= -->\n## What is toulbar2? \n\ntoulbar2 is an open-source black-box C++ optimizer for cost function\nnetworks and discrete additive graphical models. This also covers Max-SAT, Max-Cut, QUBO (and constrained variants), among others. It can read a variety\nof formats. The optimized criteria and feasibility should be provided\nfactorized in local cost functions on discrete variables. Constraints\nare represented as functions that produce costs that exceed a\nuser-provided primal bound. toulbar2 looks for a non-forbidden assignment \nof all variables that optimizes the sum of all functions (a decision \nNP-complete problem).\n\ntoulbar2 won several competitions on deterministic and probabilistic\ngraphical models:\n\n* Max-CSP 2008 Competition [CPAI08][cpai08] (winner on 2-ARY-EXT and N-ARY-EXT)\n* Probabilistic Inference Evaluation [UAI 2008][uai2008] (winner on several MPE tasks, inra entries)\n* 2010 UAI APPROXIMATE INFERENCE CHALLENGE [UAI 2010][uai2010] (winner on 1200-second MPE task)\n* The Probabilistic Inference Challenge [PIC 2011][pic2011] (second place by ficolofo on 1-hour MAP task)\n* UAI 2014 Inference Competition [UAI 2014][uai2014] (winner on all MAP task categories, see Proteus, Robin, and IncTb entries)\n* XCSP3 2022 Competition [XCSP3 2022][xcsp2022] (second place on Mini COP and Parallel COP tracks)\n* UAI 2022 Inference Competition [UAI 2022][uai2022] (winner on all MPE and MMAP task categories)\n\n[cpai08]: http://www.cril.univ-artois.fr/CPAI08/\n[uai2008]: http://graphmod.ics.uci.edu/uai08/Evaluation/Report\n[uai2010]: http://www.cs.huji.ac.il/project/UAI10/summary.php\n[pic2011]: http://www.cs.huji.ac.il/project/PASCAL/board.php\n[uai2014]: http://www.hlt.utdallas.edu/~vgogate/uai14-competition/leaders.html \n[xcsp2022]: https://xcsp.org/competitions\n[uai2022]: https://uaicompetition.github.io/uci-2022/results/final-leader-board\n\ntoulbar2 is now also able to collaborate with ML code that can learn\nan additive graphical model (with constraints) from data (see the\nassociated\n[paper](https://miat.inrae.fr/schiex/Export/Pushing_Data_in_your_CP_model.pdf),\n[slides](https://miat.inrae.fr/schiex/Export/Pushing_Data_in_your_CP_model-Slides.pdf)\nand [video](https://www.youtube.com/watch?v=IpUr6KIEjMs) where it is\nshown how it can learn user preferences or how to play the Sudoku\nwithout knowing the rules). The current CFN learning code is available\non [GitHub](https://github.com/toulbar2/CFN-learn).\n\n<!-- (_README_2)= -->\n## Installation from binaries\n\nYou can install toulbar2 directly using the package manager in Debian\nand Debian derived Linux distributions (Ubuntu, Mint,...):\n\n sudo apt-get update\n sudo apt-get install toulbar2 toulbar2-doc\n\nFor the most recent binary or the Python API, compile from source.\n\n<!-- (_README_3)= -->\n## Python interface\n\nAn alpha-release Python interface can be tested through pip on Linux and MacOS:\n\n python3 -m pip install --upgrade pip\n python3 -m pip install pytoulbar2\n\nThe first line is only useful for Linux distributions that ship \"old\" versions of pip.\n\nCommands for compiling the Python API on Linux/MacOS with cmake (Python module in lib/\\*/pytb2.cpython\\*.so):\n\n pip3 install pybind11\n mkdir build\n cd build\n cmake -DPYTB2=ON ..\n make\n\nMove the cpython library and the experimental [pytoulbar2.py](https://github.com/toulbar2/toulbar2/raw/master/pytoulbar2/pytoulbar2.py) python class wrapper in the folder of the python script that does \"import pytoulbar2\".\n\n<!-- (_README_4)= -->\n## Download\n\nDownload the latest release from GitHub\n(https://github.com/toulbar2/toulbar2) or similarly use tag versions,\ne.g.:\n\n git clone --branch 1.2.0 https://github.com/toulbar2/toulbar2.git\n\n<!-- (_README_5)= -->\n## Installation from sources\n\nCompilation requires git, cmake and a C++-11 capable compiler (in C++11 mode). \n\nRequired library:\n* libgmp-dev\n\nRecommended libraries (default use):\n* libboost-graph-dev\n* libboost-iostreams-dev\n* libboost-serialization-dev\n* zlib1g-dev\n* liblzma-dev\n* libbz2-dev\n\nOptional libraries:\n* libjemalloc-dev\n* pybind11-dev\n* libopenmpi-dev\n* libboost-mpi-dev\n* libicuuc\n* libicui18n\n* libicudata\n* libxml2-dev\n* libxcsp3parser\n\nOn MacOS, run ./misc/script/MacOS-requirements-install.sh to install the recommended libraries.\n\nCommands for compiling toulbar2 on Linux/MacOS with cmake (binary in build/bin/\\*/toulbar2):\n\n mkdir build\n cd build\n cmake ..\n make\n\nCommands for statically compiling toulbar2 on Linux in directory toulbar2/src without cmake:\n\n bash\n cd src\n echo '#define Toulbar_VERSION \"1.2.0\"' > ToulbarVersion.hpp\n g++ -o toulbar2 -std=c++17 -O3 -DNDEBUG -static -static-libgcc -static-libstdc++ -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DWCSPFORMATONLY \\\n -I. -I./pils/src tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \\\n -lboost_graph -lboost_iostreams -lboost_serialization -lgmp -lz -lbz2 -llzma\n\nUse OPENMPI flag and MPI compiler for a parallel version of toulbar2:\n\n bash\n cd src\n echo '#define Toulbar_VERSION \"1.2.0\"' > ToulbarVersion.hpp\n mpicxx -o toulbar2 -std=c++17 -O3 -DNDEBUG -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DWCSPFORMATONLY -DOPENMPI \\\n -I. -I./pils/src tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \\\n -lboost_graph -lboost_iostreams -lboost_serialization -lboost_mpi -lgmp -lz -lbz2 -llzma\n\nReplace LONGLONG_COST by INT_COST to reduce memory usage by two and reduced cost range (costs must be smaller than 10^8).\n\nReplace WCSPFORMATONLY by XMLFLAG3 and add libxcsp3parser.a from xcsp.org in your current directory for reading XCSP3 files:\n\n bash\n cd src\n echo '#define Toulbar_VERSION \"1.2.0\"' > ToulbarVersion.hpp\n mpicxx -o toulbar2 -std=c++17 -O3 -DNDEBUG -DBOOST -DLONGDOUBLE_PROB -DLONGLONG_COST -DXMLFLAG3 -DOPENMPI \\\n -I/usr/include/libxml2 -I. -I./pils/src -I./xmlcsp3 tb2*.cpp applis/*.cpp core/*.cpp globals/*.cpp incop/*.cpp mcriteria/*.cpp pils/src/exe/*.cpp search/*.cpp utils/*.cpp vns/*.cpp ToulbarVersion.cpp \\\n -lboost_graph -lboost_iostreams -lboost_serialization -lboost_mpi -lxml2 -licuuc -licui18n -licudata libxcsp3parser.a -lgmp -lz -lbz2 -llzma -lm -lpthread -ldl\n\nCopyright (C) 2006-2022, toulbar2 team.\ntoulbar2 is currently maintained by Simon de Givry, INRAE - MIAT, Toulouse, France (simon.de-givry@inrae.fr)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "ToulBar2 Python package",
"version": "0.0.0.4",
"project_urls": {
"Homepage": "http://miat.inrae.fr/toulbar2"
},
"split_keywords": [
"optimization",
"graphical-model"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b04d33094d271bbcdd6c4196a295b691997f4b5017ac1073b82bbbda79832919",
"md5": "54f8ffd77ca22af217135dbe0405ea0c",
"sha256": "6d350f21ed9826821bfdd7bca4d0a7db701659cf86f9b788780fb7eb6ed887c7"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "54f8ffd77ca22af217135dbe0405ea0c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 12807080,
"upload_time": "2023-09-28T15:47:22",
"upload_time_iso_8601": "2023-09-28T15:47:22.464408Z",
"url": "https://files.pythonhosted.org/packages/b0/4d/33094d271bbcdd6c4196a295b691997f4b5017ac1073b82bbbda79832919/pytoulbar2-0.0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e2b65360472df0d883051cd623acca3562e22e2934076fd542454e45239c8461",
"md5": "bed8282898067bb6f5c21b86449dbccf",
"sha256": "fbb1f7724f285bdb274db46f26e8e595d417cb2f5bf6150428a375e37e3c7d7f"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bed8282898067bb6f5c21b86449dbccf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 12808193,
"upload_time": "2023-09-28T15:47:25",
"upload_time_iso_8601": "2023-09-28T15:47:25.240798Z",
"url": "https://files.pythonhosted.org/packages/e2/b6/5360472df0d883051cd623acca3562e22e2934076fd542454e45239c8461/pytoulbar2-0.0.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1e4e7a86af9f291334bb1b70e0f84ea32676d7d76fd6bc7f7fd39396d3d867d4",
"md5": "a91bcfed217a069803540360887bfeab",
"sha256": "0c21a96d28e14f5fd1f702bd2b8c558e92ecf3fa22e56e224b4b70fa6c2fbc28"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a91bcfed217a069803540360887bfeab",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 12808727,
"upload_time": "2023-09-28T15:47:27",
"upload_time_iso_8601": "2023-09-28T15:47:27.767014Z",
"url": "https://files.pythonhosted.org/packages/1e/4e/7a86af9f291334bb1b70e0f84ea32676d7d76fd6bc7f7fd39396d3d867d4/pytoulbar2-0.0.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "85c76071145602bfb5b261afac72ab0eef4a3f93250147adf8c00e7d5e0f9da8",
"md5": "8b47c36f97359e9ca3fc51b58e002765",
"sha256": "b2f9b8ee0a04f85e995dda60b5aca211623846eb01179870194f58a5a504d31d"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "8b47c36f97359e9ca3fc51b58e002765",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": null,
"size": 12812388,
"upload_time": "2023-09-28T15:47:30",
"upload_time_iso_8601": "2023-09-28T15:47:30.279940Z",
"url": "https://files.pythonhosted.org/packages/85/c7/6071145602bfb5b261afac72ab0eef4a3f93250147adf8c00e7d5e0f9da8/pytoulbar2-0.0.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a4c98adc7faa4fc70e852996a6e2c503334bf3d7772bc69981672f0a2e2bf52c",
"md5": "79034a0df8e52c445fda0142d3cfe0fa",
"sha256": "5d4a890edf735e998881c322ebfec543b530a1e6fb697d2744ff552967d88c7f"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "79034a0df8e52c445fda0142d3cfe0fa",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 12811686,
"upload_time": "2023-09-28T15:47:33",
"upload_time_iso_8601": "2023-09-28T15:47:33.039246Z",
"url": "https://files.pythonhosted.org/packages/a4/c9/8adc7faa4fc70e852996a6e2c503334bf3d7772bc69981672f0a2e2bf52c/pytoulbar2-0.0.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56f5162175b3e94c234f14e2a2a2e0db44ea44ad0d2d971f62d9d6db9a5c8777",
"md5": "7a5ac211b64324f1a57797a27e4e582a",
"sha256": "a51506059b78c8cef3be0f1be9209c34957b6e138701dce60baa961a6ad091b7"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7a5ac211b64324f1a57797a27e4e582a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 12806965,
"upload_time": "2023-09-28T15:47:35",
"upload_time_iso_8601": "2023-09-28T15:47:35.798744Z",
"url": "https://files.pythonhosted.org/packages/56/f5/162175b3e94c234f14e2a2a2e0db44ea44ad0d2d971f62d9d6db9a5c8777/pytoulbar2-0.0.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ffba4b911ca9381aeb799a6a6fe749dad517c3ed70357eb5a8469c766be44db8",
"md5": "4ffb248819e211ffc1b979896eea2df7",
"sha256": "85709f376780dd40acde4a10f9662fc6353d2eac25ad622fb46188d95d85c0b0"
},
"downloads": -1,
"filename": "pytoulbar2-0.0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4ffb248819e211ffc1b979896eea2df7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 12807062,
"upload_time": "2023-09-28T15:47:40",
"upload_time_iso_8601": "2023-09-28T15:47:40.024729Z",
"url": "https://files.pythonhosted.org/packages/ff/ba/4b911ca9381aeb799a6a6fe749dad517c3ed70357eb5a8469c766be44db8/pytoulbar2-0.0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-28 15:47:22",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pytoulbar2"
}