Skip to main contentIBM Quantum Documentation Mirror

QuadraticForm

class qiskit.circuit.library.QuadraticForm(num_result_qubits=None, quadratic=None, linear=None, offset=None, little_endian=True)

GitHub

Bases: QuantumCircuit

Implements a quadratic form on binary variables encoded in qubit registers.

A quadratic form on binary variables is a quadratic function QQ acting on a binary variable of nn bits, x=x0...xn1x = x_0 ... x_{n-1}. For an integer matrix AA, an integer vector bb and an integer cc the function can be written as

Q(x)=xTAx+xTb+cQ(x) = x^T A x + x^T b + c

If AA, bb or cc contain scalar values, this circuit computes only an approximation of the quadratic form.

Provided with mm qubits to encode the value, this circuit computes Q(x)mod2mQ(x) \mod 2^m in [two’s complement](https://stackoverflow.com/questions/1049722/what-is-2s-complement) representation.

xn0mxn(Q(x)+2m)mod2mm|x\rangle_n |0\rangle_m \mapsto |x\rangle_n |(Q(x) + 2^m) \mod 2^m \rangle_m

Since we use two’s complement e.g. the value of Q(x)=3Q(x) = 3 requires 2 bits to represent the value and 1 bit for the sign: 3 = ‘011’ where the first 0 indicates a positive value. On the other hand, Q(x)=3Q(x) = -3 would be -3 = ‘101’, where the first 1 indicates a negative value and 01 is the two’s complement of 3.

If the value of Q(x)Q(x) is too large to be represented with m qubits, the resulting bitstring is (Q(x)+2m)mod2m)(Q(x) + 2^m) \mod 2^m).

The implementation of this circuit is discussed in [1], Fig. 6.

References

[1]: Gilliam et al., Grover Adaptive Search for Constrained Polynomial Binary Optimization.

arXiv:1912.04088

Deprecated since version 2.1

The class qiskit.circuit.library.arithmetic.quadratic_form.QuadraticForm is deprecated as of Qiskit 2.1. It will be removed Qiskit 3.0. Use the QuadraticFormGate instead.

Parameters

  • num_result_qubits (Optional[int]) – The number of qubits to encode the result. Called mm in the class documentation.
  • quadratic (Optional[Union[np.ndarray, List[List[Union[float, ParameterExpression]]]]]) – A matrix containing the quadratic coefficients, AA.
  • linear (Optional[Union[np.ndarray, List[Union[float, ParameterExpression]]]]) – An array containing the linear coefficients, bb.
  • offset (Optional[Union[float, ParameterExpression]]) – A constant offset, cc.
  • little_endian (bool) – Encode the result in little endianness.

Raises

  • ValueError – If linear and quadratic have mismatching sizes.
  • ValueError – If num_result_qubits is unspecified but cannot be determined because some values of the quadratic form are parameterized.

Attributes

name

Type: str

A human-readable name for the circuit.

Example

from qiskit import QuantumCircuit
 
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

Methods

required_result_qubits

static required_result_qubits(quadratic, linear, offset)

GitHub

Get the number of required result qubits.

Parameters

  • quadratic (ndarray |List[List[float]]) – A matrix containing the quadratic coefficients.
  • linear (ndarray |List[float]) – An array containing the linear coefficients.
  • offset (float) – A constant offset.

Returns

The number of qubits needed to represent the value of the quadratic form in twos complement.

Return type

int