Skip to main content

python-constraint is a module for efficiently solving CSPs (Constraint Solving Problems) over finite domains.

Project description

Conda - Downloads PyPI - Downloads PyPI - Python Versions PyPI - License Build Status PyPI - Status Documentation Status Code Coverage

https://github.com/python-constraint/python-constraint/raw/main/docs/assets/logo/N-Queens_problem_Python.svg

python-constraint

⚠️ IMPORTANT: this software must be installed with pip install python-constraint2, as the original pip release will not be updated.
A Conda Forge / Mamba version is also available: conda install python-constraint2.

For an overview of recent changes, visit the Changelog.
The complete documentation can be found here.

New: writing constraints in the new string format is preferable over functions and lambdas.
These strings, even as compound statements, are automatically parsed to faster built-in constraints, are more concise, and do not require constraint solving familiarity by the user to be efficient.
For example, problem.addConstraint(["50 <= x * y < 100"]) is parsed to [MinProdConstraint(50, ["x", "y"]), MaxProdConstraint(100, ["x", "y"])].
Similarly, problem.addConstraint(["x / y == z"]) is parsed to [ExactProdConstraint("x", ["z", "y"])].
This feature is in beta and subject to possible change, please provide feedback.

Introduction

The python-constraint module offers efficient solvers for Constraint Satisfaction Problems (CSPs) 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:

>>> from constraint import *
>>> problem = Problem()
>>> problem.addVariable("a", [1,2,3])
>>> problem.addVariable("b", [4,5,6])
>>> problem.getSolutions()  # doctest: +NORMALIZE_WHITESPACE
[{'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("a*2 == b") # string constraints are preferable over the black-box 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()  # doctest: +NORMALIZE_WHITESPACE
[{'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:

>>> 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   # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
[{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:

>>> 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()  # doctest: +SKIP

Features

The following solvers are available:

  • OptimizedBacktrackingSolver (default)

  • BacktrackingSolver

  • RecursiveBacktrackingSolver

  • MinConflictsSolver

  • ParallelSolver

Predefined constraint types currently available (use the parsing for automatic conversion to these types):

  • FunctionConstraint

  • AllDifferentConstraint

  • AllEqualConstraint

  • ExactSumConstraint

  • MinSumConstraint

  • MaxSumConstraint

  • MinProdConstraint

  • ExactProdConstraint

  • MaxProdConstraint

  • VariableExactSumConstraint

  • VariableMinSumConstraint

  • VariableMaxSumConstraint

  • VariableMinProdConstraint

  • VariableExactProdConstraint

  • VariableMaxProdConstraint

  • InSetConstraint

  • NotInSetConstraint

  • SomeInSetConstraint

  • SomeNotInSetConstraint

API documentation

Documentation for the module is available at: http://python-constraint.github.io/python-constraint/. It can be built locally by running make clean html from the docs folder. For viewing RST files locally, restview is recommended.

Download and install

$ pip install python-constraint2

Conda / Mamba:

$ conda config --add channels conda-forge
$ conda config --set channel_priority strict
$ conda install python-constraint2
$ mamba install python-constraint2

Testing

Run 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 pytest (optionally add --no-cov if you have the C-extensions enabled).

Contributing

Feel free to contribute by submitting pull requests or opening issues. Please refer to the contribution guidelines before doing so.

Roadmap

This GitHub organization and repository is a global effort to help to maintain 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.

Planned development:

  • Support constant modifiers on parsed (variable) constraints instead defaulting to FunctionConstraint, e.g. problem.addConstraint("a+2 == b") or problem.addConstraint("x / y == 100")

  • Parse using Abstract Syntax Trees (AST) instead of the current parser to be more robust and support decomposing lambdas

  • Rewrite hotspots in C / Pyx instead of pure python mode

  • Improvements to make the ParallelSolver competitive (experiments reveal the freethreading mode to be promising)

  • Versioned documentation

Contact

But it’s probably better to open an issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_constraint2-2.6.0.tar.gz (823.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

python_constraint2-2.6.0-cp314-cp314-win_amd64.whl (853.2 kB view details)

Uploaded CPython 3.14Windows x86-64

python_constraint2-2.6.0-cp314-cp314-manylinux_2_39_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

python_constraint2-2.6.0-cp314-cp314-manylinux_2_35_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.35+ x86-64

python_constraint2-2.6.0-cp314-cp314-macosx_26_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.14macOS 26.0+ ARM64

python_constraint2-2.6.0-cp313-cp313-win_amd64.whl (843.6 kB view details)

Uploaded CPython 3.13Windows x86-64

python_constraint2-2.6.0-cp313-cp313-manylinux_2_39_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

python_constraint2-2.6.0-cp313-cp313-manylinux_2_35_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ x86-64

python_constraint2-2.6.0-cp313-cp313-macosx_26_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.13macOS 26.0+ ARM64

python_constraint2-2.6.0-cp312-cp312-win_amd64.whl (843.6 kB view details)

Uploaded CPython 3.12Windows x86-64

python_constraint2-2.6.0-cp312-cp312-manylinux_2_39_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

python_constraint2-2.6.0-cp312-cp312-manylinux_2_35_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

python_constraint2-2.6.0-cp312-cp312-macosx_26_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.12macOS 26.0+ ARM64

python_constraint2-2.6.0-cp311-cp311-win_amd64.whl (843.6 kB view details)

Uploaded CPython 3.11Windows x86-64

python_constraint2-2.6.0-cp311-cp311-manylinux_2_39_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

python_constraint2-2.6.0-cp311-cp311-manylinux_2_35_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

python_constraint2-2.6.0-cp311-cp311-macosx_26_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.11macOS 26.0+ ARM64

File details

Details for the file python_constraint2-2.6.0.tar.gz.

File metadata

  • Download URL: python_constraint2-2.6.0.tar.gz
  • Upload date:
  • Size: 823.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for python_constraint2-2.6.0.tar.gz
Algorithm Hash digest
SHA256 e3725aa8d0febacad36bad1b2b881e51a857f4e3b676643b687ea34c1aff8721
MD5 2c9b5665b4e42c48894b3961d2dff896
BLAKE2b-256 d92c8e914e56dc903b1ad5ffedbbae1403713eb3cdf0307e167c11ebd4a907aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0.tar.gz:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8f512a49294c35e0aa501ed9d399d8b38bf66b43f234dc1f5204d5a0058e14c0
MD5 efdc68c761572dd72b15c804e4e47fc1
BLAKE2b-256 3d5d1a5ab77c6d3fe831ca4975f71ba446c948bda0a6a782159e9041c08f234f

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp314-cp314-win_amd64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 abd99a3c3069915a9e798431afffd25f53d01c2d3a1ad9a3df10c486893019b6
MD5 c9376a20ff9189bc22e9859eb8a6ce99
BLAKE2b-256 69ee9425e230943d32a7f41cb246d03da7e43d61ee9694865c3d1c914fb7e467

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp314-cp314-manylinux_2_39_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp314-cp314-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp314-cp314-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 52af8ccc18bfd3205c43c2896977a66fe762239794aa4e2a5047cfc9987841e0
MD5 567967c5a2d70a44adda4309d81318f3
BLAKE2b-256 1d7e9a52d0a13b3fb04ef97d146de9bb49d31731568fb0420404ec78d8ca8253

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp314-cp314-manylinux_2_35_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp314-cp314-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp314-cp314-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 03be6620005919a797d43d14fe4fd761f43b6975a4d89ea523d67dd4d7ed262a
MD5 5fd684382a24fc1950ae4a8f3f95c2df
BLAKE2b-256 ba852df4e108dc5dbfbba406dd40c0b8d3793a083a8fb8b4fef4cd6687de0e6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp314-cp314-macosx_26_0_arm64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4cb96e780973ba949a19bd74b8c3f5f3ff47b40eec5ec3b0bd30b5ee4c56ecb3
MD5 fa0c5eb2908d92957f08bde411d7952b
BLAKE2b-256 5a32d3ab093921d760769135b9d658614bd71ef64c76813319e4382401693039

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp313-cp313-win_amd64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 4e65c238f947ff8420279642fc3b37f497d35fd8c58b69b0ac5165fe2136745b
MD5 98b807a162cedff4067064a462717fe3
BLAKE2b-256 da669f18935d72eee87d6ad804037fd05855ea9034d467018c7a486b57584c92

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp313-cp313-manylinux_2_39_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp313-cp313-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 b603c1e141d2430cad8406491ee99d8e5efb62a671b3e8a59a2e807253a15d7d
MD5 0e3dd3d31011041023a7db20d16a4f70
BLAKE2b-256 839527d86efba46c1065a56e627a85dec95532a36965e54fd790ced3e24b76b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp313-cp313-manylinux_2_35_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp313-cp313-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp313-cp313-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 3407bcaac8bac4a480b6993a607b2632e90c87f6d87fb8cfe90ce7b0cd945cc8
MD5 271c12c5d902849437c7e4750d04027c
BLAKE2b-256 6b7f8080e5548d79dad2af7897f5c20344ce39a82d73ca19dc7b78d333f6104e

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp313-cp313-macosx_26_0_arm64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4084989ecdacd803070cfeda6ce5bd1817a4e996dd78606fba87dd7f28c68c5b
MD5 699eea53934a738730f0fa9ab563fadf
BLAKE2b-256 f8a3c34e4111016beb2b3b7928d3e37368d43e388583d24aac81bfb09fb2b5e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp312-cp312-win_amd64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b1818be327c693bef3faa6d76668f5106bfd65678111d8f62e44562d49410039
MD5 ba7588d2f7b732a3b76e56a67ef24029
BLAKE2b-256 971dbbb48bff30e8dc11d70cf52f5e0c73bc0a906dceaa9bdee82b8ab11c853f

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp312-cp312-manylinux_2_39_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 59e78c2fc61aff4dc2e04798c349ba92de2b8e073494b61db4dd4c3dedf2ca5a
MD5 09de117243965c1e04c3a8442a195ac0
BLAKE2b-256 cf7c453ba5904b2361a5351565720654b41c146ed3633ef88969f37b892c5f62

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp312-cp312-manylinux_2_35_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp312-cp312-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp312-cp312-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 d98e735b43cf5a237fdeff155c0212d9f67f2fe5dea9b57cebb25dd1f4a7caae
MD5 e44243b2a71a1dc110297b4755a9e4e3
BLAKE2b-256 acd52d555ab88c78d7d9e4cf8365ab1a08780191abb8efd20ce8fbf8fbb673c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp312-cp312-macosx_26_0_arm64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ffa8855bf1b0ab177318263592e8b3778bc6845f3cc84bf19c0403167177f603
MD5 fbe993e3f461801b117ca3d1e61f8ed5
BLAKE2b-256 c48808e4f6c78231ffde103769460f682eb4d4bbf4041e4a11ce6b6e26d6e863

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp311-cp311-win_amd64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 baebd2f0cfcad9146a278155578877ebe45c410c53dd4b33a46a183e9b20b2cc
MD5 4bef2f8912575b932919d9589b66e07f
BLAKE2b-256 eae304610d8631cc688d026b7c12c53c464c630134f67e13f90c6781a067ad0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp311-cp311-manylinux_2_39_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp311-cp311-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 5491151b58750e288ddb09a4fc3b062bbc0f947b933b07fae15cac035f9502c7
MD5 ccb4af252aaaf726b18385a8c2ece750
BLAKE2b-256 0de2f4e26928df27cf57203584f5e44031352e88da7c5f6e96ad6b0ca740ed44

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp311-cp311-manylinux_2_35_x86_64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_constraint2-2.6.0-cp311-cp311-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for python_constraint2-2.6.0-cp311-cp311-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 f73390a543bdbae2b6d876f37e931cfdfe563f6ec49896421d109179cc89b680
MD5 b67af7df4c7657ce39bc628bf5b243ab
BLAKE2b-256 55ee5e9da920604984984bbff70f895242e99e19a4a247e14acf669451b91652

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_constraint2-2.6.0-cp311-cp311-macosx_26_0_arm64.whl:

Publisher: publish-package.yml on python-constraint/python-constraint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page