dimod.higherorder.utils.reduce_binary_polynomial

reduce_binary_polynomial(poly: dimod.higherorder.polynomial.BinaryPolynomial) Tuple[List[Tuple[FrozenSet[Hashable], numbers.Number]], List[Tuple[FrozenSet[Hashable], Hashable]]][source]

Reduce a binary polynomial to linear and quadratic terms, plus constraints.

Introduces auxillary variables and constraints to reduce the polynomial to linear and quadratic terms.

Parameters

poly – a binary polynomial that might have higher order terms.

Returns

Two-tuple of a list of terms and their biases, as tuples, and a list of the original and auxiliary variables, as a tuple.

Example

>>> poly = dimod.BinaryPolynomial({(0,): -1, (1,): 1, (2,): 1.5, (0, 1): -1, (0, 1, 2): -2}, dimod.BINARY)
>>> dimod.reduce_binary_polynomial(poly)           
([(frozenset({0}), -1),
  (frozenset({1}), 1),
  (frozenset({2}), 1.5),
  (frozenset({0, 1}), -1),
  (frozenset({'0*1', 2}), -2)],
 [(frozenset({0, 1}), '0*1')])