Published October 2, 2026
| Version v1.1.0
Software
Open
CPMpy/cpmpy: v1.1.0
Authors/Creators
- Tias Guns
- Ignace Bleukx
- Emilio Gamba1
- Wout
- Thomas Sergeys
- Henk Bierlee
- Dimos Tsouros2
- Maxime Mulamba Ke Tchomba
- vbucarey
- OrestisLomis
- Ahmed Kareem A Abdullah
- Jayanta Mandi3
- Jo Devriendt4
- Nide-44
- Verhaeghe Hélène
- RocsCanoy
- WoutPiessens
- Senne Berden3
- Kostis Michailidis
- Brad Ediger5
- CharlezXue
- Ciaran McCreesh6
- HelgeS
- Kenny Van de Velde
- Marco Foschini
- Nandor Sieben7
- Vaibhav Srivastava
- Jeremy
- 1. Flanders Make VZW
- 2. University of Western Macedonia
- 3. KU Leuven
- 4. Nonfiction Software
- 5. @8thlight
- 6. University of Glasgow
- 7. Northern Arizona University
Description
Release notes
Added
- New Dataset Sudoku #1067
- Native MUS for CPO #987
- Native MUS for CPLEX #986
- Unified prooflogging #862
- PySCIPOpt's native
cumulative#998 - Typing of
absandmult#1075
Breaking changes
Model.solve(time_limit=...)now includes transformation time; returnsFalse(ExitStatus.UNKNOWN) if the limit runs out before solving.model.status().runtimenow includes transformation time, separate solver time is in the newstatus().solve_time. Custom solver interfaces should setcpm_status.solve_timeinstead ofruntime#803NDVarArrayuses NumPy's__array_ufunc__:np.equal(x, y)etc. now return constraints instead of Booleans. Ufuncs without a Python operator equivalent (np.square,np.maximum,np.matmul/@, ...), ufunc methods (np.add.reduce,np.mean, ...) andout=/dtype=/keepdims=arguments raise an error; use Python operators,np.dotorcp.*functions instead #1062InDomainhas expression name"indomain"instead of"InDomain"#1087- Proof logging is standardised across solvers: the proof file is passed to the constructor (
SolverLookup.get(solver, model, proof="path/to/proof")) and checked withs.verify(). For GCS, theprove=,proof_name=,proof_location=,verify=, ... arguments ofsolve()/solveAll()are removed,verify()now returnsTrueif valid (previously VeriPB's exit code) andGCSVerificationExceptionis removed #862 - Zero-duration tasks never overlap in
NoOverlap(Optional)#1105 and consume no resources inCumulative(Optional)#1102 - OR-Tools lower version increased to 9.12 #1074
- Models pickled with an earlier version are not guaranteed to work correctly (e.g.
InDomainkeeps its old name making it always decompose,model.status()lackssolve_time); regenerate your pickle files with v1.1.0
Changed
- Switch to
model.add()in README #1113 - Account for transformation time in
Model.solve()#803 - Following modern Numpy ndarray subclassing with ufunc #1062
Account for transformation time in
model.solve()#803 - Increase OR-Tools lower bound to 9.12 #1074
- Modernise hyperparameter search example #960
Fixed
- Flatten multidimension args to globals #1112
- Analyzing XCSP3 benchmark csvs with empty time metrics #923
- Typos in docstrings, comments and error messages #1097
- NoOverlap non-strict semantics for zero duration tasks #1105
- Cumulative no demand when duration is zero #1102
- Logo image link for PyPI #1104
- Fix MUS tests #1095
- Fix linearize when trivially unsat comparison #1101
- Support trivial arities of
AndandOr#1080 - Docs: small typo #1092
- Small fixes to Hexaly #983
- Rename
InDomaintoindomain#1087 - Typo csemap OR-Tools #1088
- Fixes to XCSP3 tools #1068
- Marker inheritance and non-parametrised tests with solver dependency #961
Full Changelog: https://github.com/CPMpy/cpmpy/compare/v1.0.0...v1.1.0
Files
CPMpy/cpmpy-v1.1.0.zip
Additional details
Related works
- Is supplement to
- Software: https://github.com/CPMpy/cpmpy/tree/v1.1.0 (URL)
Software
- Repository URL
- https://github.com/CPMpy/cpmpy