Package: python-constraint2
python-constraintThis software is now back to active development / maintainance status.For an overview of recent changes, visit theChangelog.The complete documentation can be foundhere.IntroductionExamplesFeaturesAPI documentationDownload and installTestingContributingRoadmapContactIntroductionThepython-constraintmodule offers efficient solvers forConstraint 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, …).ExamplesBasicsThis interactive Python session demonstrates basic operations:>>>fromconstraintimport*>>>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(lambdaa,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 problemThe following example solves the classical Eight Rooks problem:>>>problem=Problem()>>>numpieces=8>>>cols=range(numpieces)>>>rows=range(numpieces)>>>problem.addVariables(cols,rows)>>>forcol1incols:...forcol2incols:...ifcol1<col2:...problem.addConstraint(lambdarow1,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 squaresThis 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])>>>forrowinrange(4):...problem.addConstraint(ExactSumConstraint(34),[row*4+iforiinrange(4)])>>>forcolinrange(4):...problem.addConstraint(ExactSumConstraint(34),[col+4*iforiinrange(4)])>>>solutions=problem.getSolutions()FeaturesThe following solvers are available:Backtracking solverOptimized backtracking solverRecursive backtracking solverMinimum conflicts solverPredefined constraint types currently available:FunctionConstraintAllDifferentConstraintAllEqualConstraintMaxSumConstraintExactSumConstraintMinSumConstraintMaxProdConstraintMinProdConstraintInSetConstraintNotInSetConstraintSomeInSetConstraintSomeNotInSetConstraintAPI documentationDocumentation for the module is available at:http://python-constraint.github.io/python-constraint/.
It can be built locally by runningmake clean htmlfrom thedocsfolder.
For viewing RST files locally,restviewis recommended.Download and install$pipinstallpython-constraintTestingRunnox(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.
Runpytest(optionally add--no-covif you have the C-extensions enabled).ContributingFeel free to contribute bysubmitting pull requestsoropening issues.
Please refer to thecontribution guidelinesbefore doing so.RoadmapThis GitHub organization and repository is a global effort to help to maintainpython-constraint, which was written by Gustavo Niemeyer and originaly located athttps://labix.org/python-constraint.
For an overview of recent changes, visit theChangelog.Planned development:Add a string parser for constraintsAdd parallel-capable solverVersioned documentationContactGustavo Niemeyer<gustavo@niemeyer.net>Sébastien Celles<s.celles@gmail.com>Floris-Jan WillemsenBut it’s probably better toopen an issue.