Releases: dwavesystems/dwave-preprocessing
0.6.7
0.6.6
New Features
- Speed up the removal of small biases in presolve.
- Support NumPy 2.0. Also, no longer require NumPy at build-time.
0.6.5
New Features
- Build with dimod 0.12.14. This speeds up the removal of small biases in presolve.
0.6.4
New Features
- Build C++ extensions with Cython 3.
- Build wheels for Python 3.12.
0.6.3
0.6.2
Bug Fixes
- Fix the handling of quadratic constraints in presolve. Previously fixing variables in quadratic constraints would result in memory errors. See dimod#1351.
0.6.1
New Features
- Speed up
PresolverImpl::normalization_remove_invalid_markers()
C++ method. This gives faster presolve normalization times for models with many discrete constraints. - Speed up
PresolverImpl::technique_remove_small_biases()
C++ method. This gives faster presolve times for models with many small biases.
0.6.0
New Features
-
Make
SpinReversalTransformComposite
nonblocking. -
Add a
seed
parameter to the constructor ofSpinReversalTransformComposite
. -
Improve the performance of the
Presolver
constructor by avoiding an unnecessary copy. -
Raise an
InvalidModelError
fromPresolver
when given a model withfloat("nan")
bounds. -
Raise an
InvalidModelError
fromPresolver
when given a model that has a constraint withfloat("nan")
weight or rhs. -
Add C++
Presolver::restore()
method for restoring samples. -
Add domain propagation to
dwave::presolve::Presolver
. -
Add removing small biases to
dwave::presolve::Presolver
. -
Support
Numpy>=1.17.3
, previously requiredNumPy>=1.20.0
. -
Add a presolve normalization step to replace inf biases, bounds, offsets, right-hand-sides, etc with a large finite number.
-
A newly instantiated
Presolver
will now have presolve techniques loaded by default. -
Add
TechniqueFlags
enum to represent different presolve techniques. -
Add C++
dwave::presolve::Presolver::add_techniques()
,dwave::presolve::Presolver::set_techniques()
, anddwave::presolve::Presolver::techniques()
methods for manipulating the presolve techniques that will be used by the presolver. -
Update
Presolver.apply()
,Presolver.normalize()
, andPresolver.presolve()
to release Python's global interpreter lock (GIL). -
Reimplement the C++
Presolver
using the PImpl pattern. This will make it easier to maintain binary compatibility going forward. See #89. -
Add
dwave::presolve::Presolve::normalize()
C++ method. -
Add
dwave::presolve::Presolve::presolve()
C++ method. -
Raise an
InvalidModelError
fromPresolver
when given a model withfloat("nan")
biases. -
Add
Presolver.feasibility()
method to return aFeasibility
enum. This can be used to test the feasibility of presolved models. -
Add
time_limit_s
keyword argument toPresolver.presolve()
. -
Add
time_limit
argument to C++ methoddwave::presolve::Presolver::presolve()
. -
Add
Presolver.normalize()
method. See #78. -
Add
Presolver.presolve()
method. See #78.
Upgrade Notes
-
The wrapped C++
dwave::presolve::Presolver
held bycyPresolver.cpppresolver
is now stored as a pointer. -
Remove C++
PostSolver
class. See #90. -
A newly instantiated
Presolver
will now have presolve techniques loaded by default. Previously it would have no techniques loaded and the user would need to also callPresolver.load_default_presolvers()
. -
Remove the C++
dwave::presolve::Presolver::load_default_presolvers()
method. -
The C++
Presolver
no longer has a header-only implementation. -
Raise an
InvalidModelError
rather than aRuntimeError
when presolving a detached model. -
Change
Presolver
to no longer raise anInfeasibleModelError
error for infeasible models. -
Remove the
InfeasibleModelError
.
Deprecation Notes
-
Drop support for Python 3.7.
-
Deprecate
Presolver.load_default_techniques()
. UsePresolver.set_techniques(TechniqueFlags.Default)
instead.
0.5.4
0.5.3
Features
- Remove interactions and variables with 0 bias in
Presolver
Fixes
- Fix handling of empty soft constraint in
Presolver
.