Skip to main content

CI

compwa-python-constraint

[!NOTE] This is a packaging fork of python-constraint 1.4.0, maintained by the ComPWA project. It is published as compwa-python-constraint, but preserves the public constraint import package and the behavior of the upstream 1.4.0 solver.

Why this fork exists

The upstream 1.4.0 release on PyPI provides only a .tar.bz2 source distribution. PEP 625 standardized source distributions as gzip-compressed .tar.gz archives. In version 0.12.0, uv stopped accepting legacy source-distribution formats, including .tar.bz2, and recommends rebuilding affected packages as .tar.gz archives.

This fork makes that packaging-only update so projects can continue using the 1.4.0 implementation with current Python packaging tools. Its declarative pyproject.toml build produces:

  • a pure-Python py3-none-any wheel, which installers can use without a local build step; and
  • a standards-compliant .tar.gz source distribution as a fallback.

The distribution is versioned as 1.4.0.post1 to identify it as a downstream packaging revision. Solver changes continue to belong in the upstream project.

Introduction

The Python constraint module offers solvers for Constraint Satisfaction Problems (CSPs) over finite domains in simple and pure Python. A CSP can be represented in terms of variables, their possible domains, and constraints between them.

Examples

Basics

>>> 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

>>> 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()

Magic squares

>>> problem = Problem()
>>> problem.addVariables(range(16), range(1, 17))
>>> problem.addConstraint(AllDifferentConstraint(), range(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
  • Recursive backtracking solver
  • Minimum conflicts solver

Predefined constraint types include:

  • FunctionConstraint
  • AllDifferentConstraint
  • AllEqualConstraint
  • ExactSumConstraint
  • MaxSumConstraint
  • MinSumConstraint
  • InSetConstraint
  • NotInSetConstraint
  • SomeInSetConstraint
  • SomeNotInSetConstraint

Installation

python -m pip install compwa-python-constraint

The distribution name is compwa-python-constraint, while the import remains unchanged:

from constraint import Problem

Upstream project

python-constraint was written by Gustavo Niemeyer and is maintained at python-constraint/python-constraint. Please report solver bugs and propose behavioral changes upstream.

For packaging issues specific to this fork, use the ComPWA issue tracker.

Release files for compwa-python-constraint 1.4.0.post1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for compwa-python-constraint 1.4.0.post1
File Size Uploaded
compwa_python_constraint-1.4.0.post1.tar.gz 21.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for compwa-python-constraint 1.4.0.post1
File Interpreter ABI Platform
compwa_python_constraint-1.4.0.post1-py3-none-any.whl Python 3 none any Details

Total release size: 46.6 kB

Release files / compwa_python_constraint-1.4.0.post1.tar.gz

Download URL compwa_python_constraint-1.4.0.post1.tar.gz
Size 21.3 kB
Tags Source
SHA-256 checksum
How to use checksums
dea00720a05debce39f6e4f384ad04b6b9235c316d1b984a4ee543e8c6952f45
BLAKE2b-256 checksum
How to use checksums
3f0b773cd834c82d7822167983de32a070f9099c091980818e8327722a067eff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release files / compwa_python_constraint-1.4.0.post1-py3-none-any.whl

Download URL compwa_python_constraint-1.4.0.post1-py3-none-any.whl
Size 25.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
adddd14897a0da511b7eb89be9a7081ac2ecfb41867a3d78e16f89a6eac2b5f9
BLAKE2b-256 checksum
How to use checksums
b8b2257f9852d18fdaccdced2ff741efb82bf9ac18aecdad75696d5910eec5f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0.post1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page