Skip to content

Releases: dwavesystems/dimod

0.10.7

02 Oct 00:09
e125795
Compare
Choose a tag to compare

New Features

  • Add ConstrainedQuadraticModel.is_equal() and ConstrainedQuadraticModel.is_almost_equal() methods. See #1012
  • Add QuadraticModel.is_almost_equal() method
  • Support equality checks between quadratic models and binary quadratic models in BinaryQuadraticModel.is_equal(), BinaryQuadraticModel.is_almost_equal(), QuadraticModel.is_equal(), and QuadraticModel.is_almost_equal() methods.
  • Add GraphLike type hint to dimod.typing.
  • Add ConstrainedQuadraticModel.iter_constraint_data(), ConstrainedQuadraticModel.iter_violations() and ConstrainedQuadraticModel.violations() methods. See 971.
  • Added from_lp_file classmethod to ConstrainedQuadraticModel that reads input LP file and converts it to CQM instance.
  • ConstrainedQuadraticModel.set_objective now accepts an iterable.
  • Add ConstrainedQuadraticModel.check_feasible method.
  • Add random_bin_packing function with the same functionality as the (now deprecated) bin_packing.
  • Allow BinaryQuadraticModel and QuadraticModel to be divided by a scalar or squared. See #864, #984.
  • Add SampleSet.filter() method that returns a sample set with data rows filtered by a given predicate.
  • Add .to_dict() and .from_dict() methods to the sample inverter returned by the cqm_to_bqm function. The methods return a json serializable representation of the inversion for storage if needed. See 977.
  • Add random_multi_knapsack function with the same functionality as the (now deprecated) multi_knapsack.
  • Add random_knapsack function with the same functionality as the (now deprecated) knapsack.
  • Allow the offset of a BinaryQuadraticModel to be specified as a keyword argument.
  • Add PEP 561 compatibility to allow tools like mypy to auto-detect typing hints. See #980.

Upgrade Notes

  • The cls keyword argument of the chimera_anticluster function now does nothing.

Deprecation Notes

  • Deprecate cls keyword argument of the chimera_anticluster function.
  • Deprecate bin_packing function in favour of random_bin_packing.
  • Deprecate multi_knapsack function in favour of random_multi_knapsack.
  • Deprecate knapsack function in favour of random_knapsack.

Bug Fixes

  • QuadraticModel can now be multiplied by a number in place.
  • Fix energy calculations for integer variables with large values. See #982.
  • Make dimod.BinaryQuadraticModel a virtual subclass of dimod.core.bqm.BQM.

0.9.16

03 Sep 19:30
Compare
Choose a tag to compare

Fixes

  • Backport docs build fix for Sphinx 4. #983
  • Backport Python 3.5 support removal. #985
  • Backport dependence on dwave-preprocessing to fix dwave-system (>1.7.0) support of both dimod 0.9 and 0.10. #981

0.10.6

25 Aug 14:21
74ac365
Compare
Choose a tag to compare

New Features

  • Add Binaries, Spins and Integers functions. See #918.
  • Add DiscreteQuadraticModel.get_cases method to match CaseLabelDQM.get_cases.
  • Implement QuadraticModel.remove_interaction method, previously it raised a NotImplementedError error.
  • Add linear option as a new slack_method for DiscreteQuadraticModel.add_linear_inequality_constraint method. This will add only one discrete variable to an inequality constraint with linear number of cases, according to right hand side value of the constraint.
  • Add quicksum function for faster summation of QuadraticModel and BinaryQuadraticModel. Python's built-in sum continues to work, but quicksum will generally be faster when adding many objects.
  • Add a generator, dimod.generators.binary_encoding, to create a binary quadratic model that encodes an integer.
  • Add methods to construct a constrained quadratic model from other model types:

    • ConstrainedQuadraticModel.from_discrete_quadratic_model with an alias ConstrainedQuadraticModel.from_dqm
    • ConstrainedQuadraticModel.from_quadratic_model with two aliases ConstrainedQuadraticModel.from_qm and ConstrainedQuadraticModel.from_bqm

    See #866.

  • Add QuadraticModel.add_quadratic_from() method.
  • Add QuadraticModel.add_linear_from() method.
  • Add ConstrainedQuadraticModel.lower_bound() and ConstrainedQuadraticModel.upper_bound() methods.
  • Add cqm_to_bqm function.
  • Add ConstrainedQuadraticModel.substitute_self_loops method that replaces integer self-loops by introducing a new variable and adding a constraint.
  • Add copy_always parameter to Initialized.parse_initial_states.
  • Add new binary quadratic model generators for simple logic gates:

    • dimod.generators.and_gate
    • dimod.generators.fulladder_gate
    • dimod.generators.halfadder_gate
    • dimod.generators.or_gate
    • dimod.generators.xor_gate

    See #951.

  • QuadraticModel.energies, QuadraticModel.energy, BinaryQuadraticModel.energies, and BinaryQuadraticModel.energy now all support samples containing a superset of the variables in the model. Any variables not in the model are ignored when calculating the energy.
  • Labels for dimod.Spin, dimod.Binary, and dimod.Integer are no longer required positional arguments. By default, unique labels are applied via the uuid module.

Upgrade Notes

  • ConstrainedQuadraticModel.objective is now always a QuadraticModel. Previously it could either be a BinaryQuadraticModel or a QuadraticModel.
  • ConstrainedQuadraticModel.objective now contains all variables in the constrained quadratic model. Previously it could contain a subset of the variables.

Deprecation Notes

  • Deprecate ConstrainedQuadraticModel.variables.vartypes, ConstrainedQuadraticModel.variables.lower_bounds, and ConstrainedQuadraticModel.variables.upper_bounds attributes.
  • Deprecate ConstrainedQuadraticModel.variables.vartype() method.

Bug Fixes

  • dimod::QuadraticModelBase.remove_interaction now correctly returns true when removing a self-loop.
  • Return bool rather than numpy.bool_ from QuadraticModel.is_equal and BinaryQuadraticModel.is_equal when comparing empty models to numbers.
  • Fix as_samples and Initialized.parse_initial_states by ensuring that the copy argument is not ignored in as_samples and Initialized.parse_initial_states does not modify any input data. See #861.
  • Remove unused ConstrainedQuadraticModel.labels instance variable.
  • Fix adding constraints with integer variables via ConstrainedQuadraticModel.add_constraint_from_iterable when those integer variables have pre-existing lower or upper bounds. See #943.
  • Correctly account for the offset when multiplying binary quadratic models
  • BinaryQuadraticModel.energies now has consistent behaviour accross all data types when given samples containing a superset of the variables in the model. Previously binary quadratic models with object data type would allow a superset of variables, while float64 and float32 would not.

0.10.5

30 Jul 14:38
07c16c2
Compare
Choose a tag to compare

New Features

  • Add QuadraticModel.set_upper_bound and QuadraticModel.set_lower_bound methods.

Upgrade Notes

  • The preprocessing extra install argument has been removed.
  • Remove dimod.meta namespace. Its functionality, SamplerABCMeta and samplemixinmethod, has been migrated to the dimod.core.sampler namespace.

Bug Fixes

  • Fix QuadraticModel.energies when given samples with values greater than the maximum value representable by an 8 bit integer. Previously samples were incorrectly cast to 8 bit integers.
  • When a QuadraticModel already has an integer variable, adding it with QuadraticModel.add_variable with different lower or upper bounds now correctly raises an exception. Likewise, adding or multiplying the same variable symbolically with different bounds will also raise an exception.
  • When a ConstrainedQuadraticModel already has an integer variable, adding it as part of a constraint or objective with different lower or upper bounds now correctly raises an exception.
  • Make dimod.INTEGER correctly deepcopy-able.
  • Fix (deprecated) AdjVectorBQM.to_file and AdjVectorBQM.from_file. See #898.
  • Fix BinaryQuadraticModel.energies for a BQM with dtype=object and a single variable with an integer bias. Previously it would raise a numpy.core._exceptions._UFuncOutputCastingError.
  • Fix energy calculation when the lower bound (lb) equals the upper bound (lb) in DiscreteQuadraticModel.add_linear_inequality_constraint and BinaryQuadraticModel.add_linear_inequality_constraint.
  • Promote dwave-preprocessing to a full dependency of dimod to avoid issues that occur when dimod is a required package but dwave-preprocessing is not.

0.10.4

23 Jul 18:27
a4cc471
Compare
Choose a tag to compare

Bug Fixes

  • Fix QuadraticModel.energies when given samples with values greater than the maximum value representable by an 8 bit integer. Previously samples were incorrectly cast to 8 bit integers.
  • Fix energy calculation when the lower bound (lb) equals the upper bound (lb) in DiscreteQuadraticModel.add_linear_inequality_constraint and BinaryQuadraticModel.add_linear_inequality_constraint.

0.10.3

20 Jul 01:12
Compare
Choose a tag to compare

New Features

  • Add QuadraticModel.change_vartype() method.
  • Add C++ dimod::QuadraticModel::change_vartype() method. Also add non-const versions of dimod::QuadraticModel::vartype(), dimod::QuadraticModel::lower_bound(), and dimod::QuadraticModel::upper_bound().

Bug Fixes

  • Fix QuadraticModel.spin_to_binary not correctly updating the variable type of the changed variables.

0.10.2

17 Jul 19:24
acf8322
Compare
Choose a tag to compare

Bug Fixes

  • Fix case where adding linear and quadratic biases whose class requires arguments on construction to a BinaryQuadraticModel with object dtype could fail.

0.10.1

17 Jul 07:45
92cb108
Compare
Choose a tag to compare

New Features

  • Add an optional label keyword argument to ConstrainedQuadraticModel.add_discrete. The method also now returns the assigned label, whether supplied or generated. This is consistent with ConstrainedQuadraticModel.add_constraint.
  • cyBQM and cyQM fused types can now be cimported from the dimod namespace.
  • Add .data() method to cyQM_template and cyBQM_template that returns a const pointer to the underlying C++ QuadraticModel and BinaryQuadraticModel respectively.

Upgrade Notes

  • BinaryQuadraticModel.data.vartype() is now accessed as a method rather than as an attribute. This is consistent with QuadraticModel.data.vartype(). BinaryQuadraticModel.vartype is still an attribute.
  • from dimod cimport cyBQM now is a fused type containing cyBQM_float32 and cyBQM_float64. You can use the cyBQM containing cyAdjVectorBQM with from dimod.bqm cimport cyBQM.

Bug Fixes

  • Fix wrong behaviour when the lower bound (lb) equals the upper bound (lb) in add_linear_equality_constraint. Correct behaviour is to add constraint as eqaulity when lb is equal ub.

0.10.0

10 Jul 19:21
a5c9a86
Compare
Choose a tag to compare
Update version 0.10.0rc1 -> 0.10.0

0.10.0rc1

10 Jul 17:54
Compare
Choose a tag to compare
0.10.0rc1 Pre-release
Pre-release

Release Notes

0.10.0rc1

New Features

  • Add num_quadratic_variables to the header of the file created by ConstrainedQuadraticModel.to_file. This increments the version to 1.1.
  • You can now install preprocessing as part of the dimod install with pip install dimod[preprocessing]

Deprecation Notes

  • Some composites have been migrated to dwave-preprocessing. The affected composites:

    • ClipComposite
    • ConnectedComponentsComposite
    • FixedVariableComposite
    • RoofDualityComposite
    • ScaleComposite
    • SpinReversalTransformComposite

    you no longer can use the composites without having dwave-preprocessing installed. Using them with it installed results in a deprecation warning.