python-constraint2


Namepython-constraint2 JSON
Version 2.0.0b8 PyPI version JSON
download
home_pagehttps://github.com/python-constraint/python-constraint
Summarypython-constraint is a module for efficiently solving CSPs (Constraint Solving Problems) over finite domains.
upload_time2024-11-02 09:31:16
maintainerFloris-Jan Willemsen
docs_urlNone
authorGustavo Niemeyer
requires_python<3.14,>=3.9
licenseBSD-2-Clause
keywords csp constraint solving problems problem solver smt satisfiability modulo theory sat
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            |License| |Build Status| |Docs| |Python Versions| |Downloads| |Status| |Code Coverage|

.. image:: https://github.com/python-constraint/python-constraint/raw/main/docs/assets/logo/N-Queens_problem_Python.svg
    :align: center
    :width: 50%

python-constraint
=================

| This software is now back to active development / maintainance status.
| For an overview of recent changes, visit the `Changelog <https://github.com/python-constraint/python-constraint/blob/main/CHANGELOG.md>`_.
| The complete documentation can be found `here <http://python-constraint.github.io/python-constraint/>`_.

.. contents::
    :local:
    :depth: 1

Introduction
------------
The :code:`python-constraint` module offers efficient solvers for `Constraint Satisfaction Problems (CSPs) <https://en.wikipedia.org/wiki/Constraint_satisfaction_problem>`_ over finite domains in an accessible Python package.
CSP is class of problems which may be represented in terms of variables (a, b, ...), domains (a in [1, 2, 3], ...), and constraints (a < b, ...).

Examples
--------

Basics
~~~~~~

This interactive Python session demonstrates basic operations:

.. code-block:: python

    >>> from constraint import *
    >>> problem = Problem()
    >>> problem.addVariable("a", [1,2,3])
    >>> problem.addVariable("b", [4,5,6])
    >>> problem.getSolutions()
    [{'a': 3, 'b': 6}, {'a': 3, 'b': 5}, {'a': 3, 'b': 4},
     {'a': 2, 'b': 6}, {'a': 2, 'b': 5}, {'a': 2, 'b': 4},
     {'a': 1, 'b': 6}, {'a': 1, 'b': 5}, {'a': 1, 'b': 4}]

    >>> problem.addConstraint(lambda a, b: a*2 == b,
                              ("a", "b"))
    >>> problem.getSolutions()
    [{'a': 3, 'b': 6}, {'a': 2, 'b': 4}]

    >>> problem = Problem()
    >>> problem.addVariables(["a", "b"], [1, 2, 3])
    >>> problem.addConstraint(AllDifferentConstraint())
    >>> problem.getSolutions()
    [{'a': 3, 'b': 2}, {'a': 3, 'b': 1}, {'a': 2, 'b': 3},
     {'a': 2, 'b': 1}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3}]

Rooks problem
~~~~~~~~~~~~~

The following example solves the classical Eight Rooks problem:

.. code-block:: python

    >>> problem = Problem()
    >>> numpieces = 8
    >>> cols = range(numpieces)
    >>> rows = range(numpieces)
    >>> problem.addVariables(cols, rows)
    >>> for col1 in cols:
    ...     for col2 in cols:
    ...         if col1 < col2:
    ...             problem.addConstraint(lambda row1, row2: row1 != row2,
    ...                                   (col1, col2))
    >>> solutions = problem.getSolutions()
    >>> solutions
    >>> solutions
    [{0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 1, 7: 0},
     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 0, 7: 1},
     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 2, 7: 0},
     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 0, 7: 2},
     ...
     {0: 7, 1: 5, 2: 3, 3: 6, 4: 2, 5: 1, 6: 4, 7: 0},
     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 0, 7: 4},
     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 4, 7: 0},
     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 2, 7: 0},
     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 0, 7: 2},
     ...]


Magic squares
~~~~~~~~~~~~~

This example solves a 4x4 magic square:

.. code-block:: python

    >>> problem = Problem()
    >>> problem.addVariables(range(0, 16), range(1, 16 + 1))
    >>> problem.addConstraint(AllDifferentConstraint(), range(0, 16))
    >>> problem.addConstraint(ExactSumConstraint(34), [0, 5, 10, 15])
    >>> problem.addConstraint(ExactSumConstraint(34), [3, 6, 9, 12])
    >>> for row in range(4):
    ...     problem.addConstraint(ExactSumConstraint(34),
                                  [row * 4 + i for i in range(4)])
    >>> for col in range(4):
    ...     problem.addConstraint(ExactSumConstraint(34),
                                  [col + 4 * i for i in range(4)])
    >>> solutions = problem.getSolutions()

Features
--------

The following solvers are available:

- Backtracking solver
- Optimized backtracking solver
- Recursive backtracking solver
- Minimum conflicts solver

.. role:: python(code)
   :language: python

Predefined constraint types currently available:

- :python:`FunctionConstraint`
- :python:`AllDifferentConstraint`
- :python:`AllEqualConstraint`
- :python:`MaxSumConstraint`
- :python:`ExactSumConstraint`
- :python:`MinSumConstraint`
- :python:`MaxProdConstraint`
- :python:`MinProdConstraint`
- :python:`InSetConstraint`
- :python:`NotInSetConstraint`
- :python:`SomeInSetConstraint`
- :python:`SomeNotInSetConstraint`

API documentation
-----------------
Documentation for the module is available at: http://python-constraint.github.io/python-constraint/.
It can be built locally by running :code:`make clean html` from the `docs` folder.
For viewing RST files locally, `restview <https://pypi.org/project/restview/>`_ is recommended.

Download and install
--------------------

.. code-block:: shell

    $ pip install python-constraint

Testing
-------

Run :code:`nox` (tests for all supported Python versions in own virtual environment).

To test against your local Python version: make sure you have the development dependencies installed.
Run :code:`pytest` (optionally add :code:`--no-cov` if you have the C-extensions enabled).

Contributing
------------

Feel free to contribute by `submitting pull requests <https://github.com/python-constraint/python-constraint/pulls>`_ or `opening issues <https://github.com/python-constraint/python-constraint/issues>`_.
Please refer to the `contribution guidelines <https://github.com/python-constraint/python-constraint/contribute>`_ before doing so.

Roadmap
-------

This GitHub organization and repository is a global effort to help to maintain :code:`python-constraint`, which was written by Gustavo Niemeyer and originaly located at https://labix.org/python-constraint.
For an overview of recent changes, visit the `Changelog <https://github.com/python-constraint/python-constraint/blob/main/CHANGELOG.md>`_.

Planned development:

- Add a string parser for constraints
- Add parallel-capable solver
- Versioned documentation

Contact
-------
- `Gustavo Niemeyer <https://github.com/niemeyer/>`_ <gustavo@niemeyer.net>
- `Sébastien Celles <https://github.com/scls19fr/>`_ <s.celles@gmail.com>
- `Floris-Jan Willemsen <https://github.com/fjwillemsen>`_

But it's probably better to `open an issue <https://github.com/python-constraint/python-constraint/issues>`_.

.. |License| image:: https://img.shields.io/pypi/l/python-constraint2
    :alt: PyPI - License

.. |Build Status| image:: https://github.com/python-constraint/python-constraint/actions/workflows/build-test-python-package.yml/badge.svg
   :target: https://github.com/python-constraint/python-constraint/actions/workflows/build-test-python-package.yml
   :alt: Build Status

.. |Docs| image:: https://img.shields.io/github/actions/workflow/status/python-constraint/python-constraint/publish-documentation.yml?label=Docs
   :target: http://python-constraint.github.io/python-constraint/
   :alt: Documentation Status

.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/python-constraint2
    :alt: PyPI - Python Versions

.. |Downloads| image:: https://img.shields.io/pypi/dm/python-constraint
    :alt: PyPI - Downloads

.. |Status| image:: https://img.shields.io/pypi/status/python-constraint2
    :alt: PyPI - Status

.. |Code Coverage| image:: https://coveralls.io/repos/github/python-constraint/python-constraint/badge.svg
   :target: https://coveralls.io/github/python-constraint/python-constraint
   :alt: Code Coverage


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/python-constraint/python-constraint",
    "name": "python-constraint2",
    "maintainer": "Floris-Jan Willemsen",
    "docs_url": null,
    "requires_python": "<3.14,>=3.9",
    "maintainer_email": "fjwillemsen97@gmail.com",
    "keywords": "CSP, constraint solving problems, problem solver, SMT, satisfiability modulo theory, SAT",
    "author": "Gustavo Niemeyer",
    "author_email": "gustavo@niemeyer.net",
    "download_url": "https://files.pythonhosted.org/packages/03/09/c9f80fb1acb536150546f6694fbc214c76660959646218d05a94f7f66407/python_constraint2-2.0.0b8.tar.gz",
    "platform": null,
    "description": "|License| |Build Status| |Docs| |Python Versions| |Downloads| |Status| |Code Coverage|\n\n.. image:: https://github.com/python-constraint/python-constraint/raw/main/docs/assets/logo/N-Queens_problem_Python.svg\n    :align: center\n    :width: 50%\n\npython-constraint\n=================\n\n| This software is now back to active development / maintainance status.\n| For an overview of recent changes, visit the `Changelog <https://github.com/python-constraint/python-constraint/blob/main/CHANGELOG.md>`_.\n| The complete documentation can be found `here <http://python-constraint.github.io/python-constraint/>`_.\n\n.. contents::\n    :local:\n    :depth: 1\n\nIntroduction\n------------\nThe :code:`python-constraint` module offers efficient solvers for `Constraint Satisfaction Problems (CSPs) <https://en.wikipedia.org/wiki/Constraint_satisfaction_problem>`_ over finite domains in an accessible Python package.\nCSP is class of problems which may be represented in terms of variables (a, b, ...), domains (a in [1, 2, 3], ...), and constraints (a < b, ...).\n\nExamples\n--------\n\nBasics\n~~~~~~\n\nThis interactive Python session demonstrates basic operations:\n\n.. code-block:: python\n\n    >>> from constraint import *\n    >>> problem = Problem()\n    >>> problem.addVariable(\"a\", [1,2,3])\n    >>> problem.addVariable(\"b\", [4,5,6])\n    >>> problem.getSolutions()\n    [{'a': 3, 'b': 6}, {'a': 3, 'b': 5}, {'a': 3, 'b': 4},\n     {'a': 2, 'b': 6}, {'a': 2, 'b': 5}, {'a': 2, 'b': 4},\n     {'a': 1, 'b': 6}, {'a': 1, 'b': 5}, {'a': 1, 'b': 4}]\n\n    >>> problem.addConstraint(lambda a, b: a*2 == b,\n                              (\"a\", \"b\"))\n    >>> problem.getSolutions()\n    [{'a': 3, 'b': 6}, {'a': 2, 'b': 4}]\n\n    >>> problem = Problem()\n    >>> problem.addVariables([\"a\", \"b\"], [1, 2, 3])\n    >>> problem.addConstraint(AllDifferentConstraint())\n    >>> problem.getSolutions()\n    [{'a': 3, 'b': 2}, {'a': 3, 'b': 1}, {'a': 2, 'b': 3},\n     {'a': 2, 'b': 1}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3}]\n\nRooks problem\n~~~~~~~~~~~~~\n\nThe following example solves the classical Eight Rooks problem:\n\n.. code-block:: python\n\n    >>> problem = Problem()\n    >>> numpieces = 8\n    >>> cols = range(numpieces)\n    >>> rows = range(numpieces)\n    >>> problem.addVariables(cols, rows)\n    >>> for col1 in cols:\n    ...     for col2 in cols:\n    ...         if col1 < col2:\n    ...             problem.addConstraint(lambda row1, row2: row1 != row2,\n    ...                                   (col1, col2))\n    >>> solutions = problem.getSolutions()\n    >>> solutions\n    >>> solutions\n    [{0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 1, 7: 0},\n     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 0, 7: 1},\n     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 2, 7: 0},\n     {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 0, 7: 2},\n     ...\n     {0: 7, 1: 5, 2: 3, 3: 6, 4: 2, 5: 1, 6: 4, 7: 0},\n     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 0, 7: 4},\n     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 4, 7: 0},\n     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 2, 7: 0},\n     {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 0, 7: 2},\n     ...]\n\n\nMagic squares\n~~~~~~~~~~~~~\n\nThis example solves a 4x4 magic square:\n\n.. code-block:: python\n\n    >>> problem = Problem()\n    >>> problem.addVariables(range(0, 16), range(1, 16 + 1))\n    >>> problem.addConstraint(AllDifferentConstraint(), range(0, 16))\n    >>> problem.addConstraint(ExactSumConstraint(34), [0, 5, 10, 15])\n    >>> problem.addConstraint(ExactSumConstraint(34), [3, 6, 9, 12])\n    >>> for row in range(4):\n    ...     problem.addConstraint(ExactSumConstraint(34),\n                                  [row * 4 + i for i in range(4)])\n    >>> for col in range(4):\n    ...     problem.addConstraint(ExactSumConstraint(34),\n                                  [col + 4 * i for i in range(4)])\n    >>> solutions = problem.getSolutions()\n\nFeatures\n--------\n\nThe following solvers are available:\n\n- Backtracking solver\n- Optimized backtracking solver\n- Recursive backtracking solver\n- Minimum conflicts solver\n\n.. role:: python(code)\n   :language: python\n\nPredefined constraint types currently available:\n\n- :python:`FunctionConstraint`\n- :python:`AllDifferentConstraint`\n- :python:`AllEqualConstraint`\n- :python:`MaxSumConstraint`\n- :python:`ExactSumConstraint`\n- :python:`MinSumConstraint`\n- :python:`MaxProdConstraint`\n- :python:`MinProdConstraint`\n- :python:`InSetConstraint`\n- :python:`NotInSetConstraint`\n- :python:`SomeInSetConstraint`\n- :python:`SomeNotInSetConstraint`\n\nAPI documentation\n-----------------\nDocumentation for the module is available at: http://python-constraint.github.io/python-constraint/.\nIt can be built locally by running :code:`make clean html` from the `docs` folder.\nFor viewing RST files locally, `restview <https://pypi.org/project/restview/>`_ is recommended.\n\nDownload and install\n--------------------\n\n.. code-block:: shell\n\n    $ pip install python-constraint\n\nTesting\n-------\n\nRun :code:`nox` (tests for all supported Python versions in own virtual environment).\n\nTo test against your local Python version: make sure you have the development dependencies installed.\nRun :code:`pytest` (optionally add :code:`--no-cov` if you have the C-extensions enabled).\n\nContributing\n------------\n\nFeel free to contribute by `submitting pull requests <https://github.com/python-constraint/python-constraint/pulls>`_ or `opening issues <https://github.com/python-constraint/python-constraint/issues>`_.\nPlease refer to the `contribution guidelines <https://github.com/python-constraint/python-constraint/contribute>`_ before doing so.\n\nRoadmap\n-------\n\nThis GitHub organization and repository is a global effort to help to maintain :code:`python-constraint`, which was written by Gustavo Niemeyer and originaly located at https://labix.org/python-constraint.\nFor an overview of recent changes, visit the `Changelog <https://github.com/python-constraint/python-constraint/blob/main/CHANGELOG.md>`_.\n\nPlanned development:\n\n- Add a string parser for constraints\n- Add parallel-capable solver\n- Versioned documentation\n\nContact\n-------\n- `Gustavo Niemeyer <https://github.com/niemeyer/>`_ <gustavo@niemeyer.net>\n- `S\u00e9bastien Celles <https://github.com/scls19fr/>`_ <s.celles@gmail.com>\n- `Floris-Jan Willemsen <https://github.com/fjwillemsen>`_\n\nBut it's probably better to `open an issue <https://github.com/python-constraint/python-constraint/issues>`_.\n\n.. |License| image:: https://img.shields.io/pypi/l/python-constraint2\n    :alt: PyPI - License\n\n.. |Build Status| image:: https://github.com/python-constraint/python-constraint/actions/workflows/build-test-python-package.yml/badge.svg\n   :target: https://github.com/python-constraint/python-constraint/actions/workflows/build-test-python-package.yml\n   :alt: Build Status\n\n.. |Docs| image:: https://img.shields.io/github/actions/workflow/status/python-constraint/python-constraint/publish-documentation.yml?label=Docs\n   :target: http://python-constraint.github.io/python-constraint/\n   :alt: Documentation Status\n\n.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/python-constraint2\n    :alt: PyPI - Python Versions\n\n.. |Downloads| image:: https://img.shields.io/pypi/dm/python-constraint\n    :alt: PyPI - Downloads\n\n.. |Status| image:: https://img.shields.io/pypi/status/python-constraint2\n    :alt: PyPI - Status\n\n.. |Code Coverage| image:: https://coveralls.io/repos/github/python-constraint/python-constraint/badge.svg\n   :target: https://coveralls.io/github/python-constraint/python-constraint\n   :alt: Code Coverage\n\n",
    "bugtrack_url": null,
    "license": "BSD-2-Clause",
    "summary": "python-constraint is a module for efficiently solving CSPs (Constraint Solving Problems) over finite domains.",
    "version": "2.0.0b8",
    "project_urls": {
        "Documentation": "http://python-constraint.github.io/python-constraint/",
        "Homepage": "https://github.com/python-constraint/python-constraint",
        "Repository": "https://github.com/python-constraint/python-constraint"
    },
    "split_keywords": [
        "csp",
        " constraint solving problems",
        " problem solver",
        " smt",
        " satisfiability modulo theory",
        " sat"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "165f1b04229385d33373d347a455ed3a7f36ca76f84adbb3f97ec5e3a00192e8",
                "md5": "35f6d1bb2f461bdb57aee375e6f530de",
                "sha256": "3f1bbb1808739ca400b520cdb0f45c281bf205c1a8b41fc473d993fe1e0316bf"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp310-cp310-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "35f6d1bb2f461bdb57aee375e6f530de",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.14,>=3.9",
            "size": 453501,
            "upload_time": "2024-11-02T09:30:47",
            "upload_time_iso_8601": "2024-11-02T09:30:47.697556Z",
            "url": "https://files.pythonhosted.org/packages/16/5f/1b04229385d33373d347a455ed3a7f36ca76f84adbb3f97ec5e3a00192e8/python_constraint2-2.0.0b8-cp310-cp310-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "555f14ef91a8e6430739cc7b6faa021841bef293b07c0bf25aa86e19c163b104",
                "md5": "365db18aee823517f6ef3d3b379e0622",
                "sha256": "7c2c4a786205776ee2863e1255505194ee4a9549dd39f6475064080e536a045e"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp310-cp310-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "365db18aee823517f6ef3d3b379e0622",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.14,>=3.9",
            "size": 453503,
            "upload_time": "2024-11-02T09:30:49",
            "upload_time_iso_8601": "2024-11-02T09:30:49.867688Z",
            "url": "https://files.pythonhosted.org/packages/55/5f/14ef91a8e6430739cc7b6faa021841bef293b07c0bf25aa86e19c163b104/python_constraint2-2.0.0b8-cp310-cp310-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2f5ef26a022ff1ca312e1fff9de174cf69eb386948b857918eb097c1a6d94789",
                "md5": "d11974ebf5e11018ad811dc1d8ca29f2",
                "sha256": "b074f004651117da4bedab26101a22c6db042e55dc88c88e051833237db9eff0"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d11974ebf5e11018ad811dc1d8ca29f2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<3.14,>=3.9",
            "size": 453676,
            "upload_time": "2024-11-02T09:30:51",
            "upload_time_iso_8601": "2024-11-02T09:30:51.263407Z",
            "url": "https://files.pythonhosted.org/packages/2f/5e/f26a022ff1ca312e1fff9de174cf69eb386948b857918eb097c1a6d94789/python_constraint2-2.0.0b8-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dab4ed706efe63a82aa99bb1e0cc4454fe36e1ad2b8614ddc9c347a2b3768c72",
                "md5": "753341aba070e5ef0956d189c4b14fc1",
                "sha256": "42afe3c7b516f4edb4c4983431c371fe7912db27aa8658e37e283bbd1cfd8098"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp311-cp311-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "753341aba070e5ef0956d189c4b14fc1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.14,>=3.9",
            "size": 453501,
            "upload_time": "2024-11-02T09:30:53",
            "upload_time_iso_8601": "2024-11-02T09:30:53.450694Z",
            "url": "https://files.pythonhosted.org/packages/da/b4/ed706efe63a82aa99bb1e0cc4454fe36e1ad2b8614ddc9c347a2b3768c72/python_constraint2-2.0.0b8-cp311-cp311-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2720bf47ff0c5896c5f58d04c3da8ede348f80836ddd039f74416df13862101c",
                "md5": "12280f2b06c3ccc3b619149cdb476f12",
                "sha256": "a7644e7a13cc3661720a3011478c89e978baf8388ec88429c0697fc4526f1ae7"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp311-cp311-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "12280f2b06c3ccc3b619149cdb476f12",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.14,>=3.9",
            "size": 453504,
            "upload_time": "2024-11-02T09:30:54",
            "upload_time_iso_8601": "2024-11-02T09:30:54.989895Z",
            "url": "https://files.pythonhosted.org/packages/27/20/bf47ff0c5896c5f58d04c3da8ede348f80836ddd039f74416df13862101c/python_constraint2-2.0.0b8-cp311-cp311-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "42504e98ee24f16bd2d7fc5876f3aea1ed7add3d158b2f4d93f66d465ce0841c",
                "md5": "3e7804bf3eea04fa9b079438959455b7",
                "sha256": "4cd0483dbe17bbb157996d81e655ffbf248a0e54b8f42e830dc569aa84a23626"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3e7804bf3eea04fa9b079438959455b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<3.14,>=3.9",
            "size": 453675,
            "upload_time": "2024-11-02T09:30:56",
            "upload_time_iso_8601": "2024-11-02T09:30:56.565573Z",
            "url": "https://files.pythonhosted.org/packages/42/50/4e98ee24f16bd2d7fc5876f3aea1ed7add3d158b2f4d93f66d465ce0841c/python_constraint2-2.0.0b8-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bf5d713b7fe9edb3a8af814c5cefb290fe35b738e2fa838c15bda2a21990ebcc",
                "md5": "0aa5b785fdce5b8b0993379b820d049a",
                "sha256": "a3190d2015b6e931681bd9b7f2c52a44042ad2c9f384f1e779b6f5365d84e20a"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp312-cp312-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "0aa5b785fdce5b8b0993379b820d049a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<3.14,>=3.9",
            "size": 453501,
            "upload_time": "2024-11-02T09:30:58",
            "upload_time_iso_8601": "2024-11-02T09:30:58.744957Z",
            "url": "https://files.pythonhosted.org/packages/bf/5d/713b7fe9edb3a8af814c5cefb290fe35b738e2fa838c15bda2a21990ebcc/python_constraint2-2.0.0b8-cp312-cp312-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a0cd3b8d676d740abe5108f1b1b8185e292d100ed0ab70d4160c65c2817a5742",
                "md5": "edc5c1a6b89b312509fe497444037c82",
                "sha256": "8547ef9ffa4771bf2aaecabab550c9be45c645807b998755597493a1f9c6beab"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp312-cp312-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "edc5c1a6b89b312509fe497444037c82",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<3.14,>=3.9",
            "size": 453502,
            "upload_time": "2024-11-02T09:31:00",
            "upload_time_iso_8601": "2024-11-02T09:31:00.909673Z",
            "url": "https://files.pythonhosted.org/packages/a0/cd/3b8d676d740abe5108f1b1b8185e292d100ed0ab70d4160c65c2817a5742/python_constraint2-2.0.0b8-cp312-cp312-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4ad3d13f65446b0f56019544c13a071fddcc64afd134c334f854bd745ed95b16",
                "md5": "b1b57a6171683dde3a308f0df242382d",
                "sha256": "4a8bb2108c87214d90f9ba2cd6cb19800f8a6a1fbc1ad75661d375c83c39d7ae"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b1b57a6171683dde3a308f0df242382d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<3.14,>=3.9",
            "size": 453675,
            "upload_time": "2024-11-02T09:31:03",
            "upload_time_iso_8601": "2024-11-02T09:31:03.274667Z",
            "url": "https://files.pythonhosted.org/packages/4a/d3/d13f65446b0f56019544c13a071fddcc64afd134c334f854bd745ed95b16/python_constraint2-2.0.0b8-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "758fac13980913dad5404396de6bee979e2ec34da1431754f65e81c799b6042a",
                "md5": "198a96f48c0ebcab0f074cdb5e82ad0e",
                "sha256": "ed2bd9a34a5f6c4d4dd883400a426f2c97e639b8e285497523dd21d61c4ec342"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp313-cp313-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "198a96f48c0ebcab0f074cdb5e82ad0e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<3.14,>=3.9",
            "size": 453499,
            "upload_time": "2024-11-02T09:31:06",
            "upload_time_iso_8601": "2024-11-02T09:31:06.111120Z",
            "url": "https://files.pythonhosted.org/packages/75/8f/ac13980913dad5404396de6bee979e2ec34da1431754f65e81c799b6042a/python_constraint2-2.0.0b8-cp313-cp313-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9ad0fd194a534febfb890324ba5f76f525b2d95e0837c9aac4ad67357149e42a",
                "md5": "100deb57bea22432eaf4358aa58bb775",
                "sha256": "008ee682ab4f85d0a1a5ee0a869ffbb1addb98c872a30de94a85248fd5a0373f"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp313-cp313-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "100deb57bea22432eaf4358aa58bb775",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<3.14,>=3.9",
            "size": 453503,
            "upload_time": "2024-11-02T09:31:08",
            "upload_time_iso_8601": "2024-11-02T09:31:08.211347Z",
            "url": "https://files.pythonhosted.org/packages/9a/d0/fd194a534febfb890324ba5f76f525b2d95e0837c9aac4ad67357149e42a/python_constraint2-2.0.0b8-cp313-cp313-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5105d9be011f2c82c769fad931a205cc3a9043c8fd3dc6b55a1c47b839ca849b",
                "md5": "5f55cb584988d8fb6b726f94a16cb497",
                "sha256": "7d136dc7dbd2a6b33b79ecd889979ecacd724473c312202bb2470bb07100cc8c"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5f55cb584988d8fb6b726f94a16cb497",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<3.14,>=3.9",
            "size": 453676,
            "upload_time": "2024-11-02T09:31:10",
            "upload_time_iso_8601": "2024-11-02T09:31:10.411086Z",
            "url": "https://files.pythonhosted.org/packages/51/05/d9be011f2c82c769fad931a205cc3a9043c8fd3dc6b55a1c47b839ca849b/python_constraint2-2.0.0b8-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c26fb9d6cb0c89d5ca50ffddb5d8014f07d6824f43cd518d55b510f6a5d29d96",
                "md5": "c4cde8984db8e464a25329a6f6616371",
                "sha256": "24e15e37835068320f23d43b28874620bd5b92cbc6404906f74c3f0a3ba2eeb7"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp39-cp39-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c4cde8984db8e464a25329a6f6616371",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.14,>=3.9",
            "size": 453498,
            "upload_time": "2024-11-02T09:31:11",
            "upload_time_iso_8601": "2024-11-02T09:31:11.855838Z",
            "url": "https://files.pythonhosted.org/packages/c2/6f/b9d6cb0c89d5ca50ffddb5d8014f07d6824f43cd518d55b510f6a5d29d96/python_constraint2-2.0.0b8-cp39-cp39-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "141dd79f3281f01812f97cd4e2856e44e9e81b606725b7dc93e91134a26558cb",
                "md5": "94a061593c16e6ff765efcf03ce7f227",
                "sha256": "fc2197879b43d8a2e53f476f2c31c21ea323843d7ea90c10b7c0e2f67771c4f1"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp39-cp39-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "94a061593c16e6ff765efcf03ce7f227",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.14,>=3.9",
            "size": 453503,
            "upload_time": "2024-11-02T09:31:13",
            "upload_time_iso_8601": "2024-11-02T09:31:13.358621Z",
            "url": "https://files.pythonhosted.org/packages/14/1d/d79f3281f01812f97cd4e2856e44e9e81b606725b7dc93e91134a26558cb/python_constraint2-2.0.0b8-cp39-cp39-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0efa9adc939f9fadd8f68cf2e77181ac501bb0eeba9cd079ddc6b56c69752dbb",
                "md5": "7cb73b3291ddb59dfdbdf38209094ba0",
                "sha256": "c0cc5d81b47ea56dd7e561d0967315beee8739a7c102fb948d1421c361044105"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7cb73b3291ddb59dfdbdf38209094ba0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<3.14,>=3.9",
            "size": 453675,
            "upload_time": "2024-11-02T09:31:14",
            "upload_time_iso_8601": "2024-11-02T09:31:14.904290Z",
            "url": "https://files.pythonhosted.org/packages/0e/fa/9adc939f9fadd8f68cf2e77181ac501bb0eeba9cd079ddc6b56c69752dbb/python_constraint2-2.0.0b8-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0309c9f80fb1acb536150546f6694fbc214c76660959646218d05a94f7f66407",
                "md5": "70f9e6fd382c08acf9ca0dd93a1e9206",
                "sha256": "5bb7948c54a75c8b73b3484c3c58fbd347b65d9e12072d54b832ac12cdce35bb"
            },
            "downloads": -1,
            "filename": "python_constraint2-2.0.0b8.tar.gz",
            "has_sig": false,
            "md5_digest": "70f9e6fd382c08acf9ca0dd93a1e9206",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.14,>=3.9",
            "size": 440814,
            "upload_time": "2024-11-02T09:31:16",
            "upload_time_iso_8601": "2024-11-02T09:31:16.304763Z",
            "url": "https://files.pythonhosted.org/packages/03/09/c9f80fb1acb536150546f6694fbc214c76660959646218d05a94f7f66407/python_constraint2-2.0.0b8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-02 09:31:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "python-constraint",
    "github_project": "python-constraint",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "lcname": "python-constraint2"
}
        
Elapsed time: 0.45556s