Release Notes#


New Features#

  • Build with dimod 0.12.14. This speeds up the removal of small biases in presolve.


New Features#

  • Build C++ extensions with Cython 3.

  • Build wheels for Python 3.12.


Bug Fixes#

  • Fix ImportError being raised on Windows when other dwave namespace packages are installed after dwave-preprocessing. See #130.


Bug Fixes#

  • Fix the handling of quadratic constraints in presolve. Previously fixing variables in quadratic constraints would result in memory errors. See dimod#1351.


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.


New Features#

  • Make SpinReversalTransformComposite nonblocking.

  • Add a seed parameter to the constructor of SpinReversalTransformComposite.

  • Improve the performance of the Presolver constructor by avoiding an unnecessary copy.

  • Raise an InvalidModelError from Presolver when given a model with float("nan") bounds.

  • Raise an InvalidModelError from Presolver when given a model that has a constraint with float("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 required NumPy>=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(), and dwave::presolve::Presolver::techniques() methods for manipulating the presolve techniques that will be used by the presolver.

  • Update Presolver.apply(), Presolver.normalize(), and Presolver.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 from Presolver when given a model with float("nan") biases.

  • Add Presolver.feasibility() method to return a Feasibility enum. This can be used to test the feasibility of presolved models.

  • Add time_limit_s keyword argument to Presolver.presolve().

  • Add time_limit argument to C++ method dwave::presolve::Presolver::presolve().

  • Add Presolver.normalize() method. See #78.

  • Add Presolver.presolve() method. See #78.

Upgrade Notes#

  • The wrapped C++ dwave::presolve::Presolver held by cyPresolver.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 call Presolver.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 a RuntimeError when presolving a detached model.

  • Change Presolver to no longer raise an InfeasibleModelError error for infeasible models.

  • Remove the InfeasibleModelError.

Deprecation Notes#

  • Drop support for Python 3.7.

  • Deprecate Presolver.load_default_techniques(). Use Presolver.set_techniques(TechniqueFlags.Default) instead.



Begin using Reno changelog tool.

New Features#

  • Release wheels for Python 3.11