---
title: QuadraticForm (latest version)
description: API reference for qiskit.circuit.library.QuadraticForm in the latest version of qiskit
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.QuadraticForm
---

# QuadraticForm

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

[GitHub](https://github.com/Qiskit/qiskit/tree/stable/2.5/qiskit/circuit/library/arithmetic/quadratic_form.py#L30-L193)

Bases: [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit "qiskit.circuit.quantumcircuit.QuantumCircuit")

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

A quadratic form on binary variables is a quadratic function $Q$ acting on a binary variable of $n$ bits, $x = x_0 ... x_{n-1}$. For an integer matrix $A$, an integer vector $b$ and an integer $c$ the function can be written as

$$
Q(x) = x^T A x + x^T b + c
$$

If $A$, $b$ or $c$ contain scalar values, this circuit computes only an approximation of the quadratic form.

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

$$
|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) = 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) = -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)$ is too large to be represented with m qubits, the resulting bitstring is $(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](https://arxiv.org/pdf/1912.04088.pdf)

> **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** ([*int*](https://docs.python.org/3/library/functions.html#int) *| None*) – The number of qubits to encode the result. Called $m$ in the class documentation.
- **quadratic** (*np.ndarray |* [*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)  *|*[*ParameterExpression*](/docs/api/qiskit/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression")*]] | None*) – A matrix containing the quadratic coefficients, $A$.
- **linear** (*np.ndarray |* [*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)  *|*[*ParameterExpression*](/docs/api/qiskit/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression")*] | None*) – An array containing the linear coefficients, $b$.
- **offset** ([*float*](https://docs.python.org/3/library/functions.html#float)  *|*[*ParameterExpression*](/docs/api/qiskit/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression") *| None*) – A constant offset, $c$.
- **little\_endian** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – Encode the result in little endianness.

**Raises**

- [**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – If `linear` and `quadratic` have mismatching sizes.
- [**ValueError**](https://docs.python.org/3/library/exceptions.html#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**

```python
from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
```

```text
my_circuit
```

## Methods

### required\_result\_qubits

*static* `required_result_qubits(quadratic, linear, offset)`

[GitHub](https://github.com/Qiskit/qiskit/tree/stable/2.5/qiskit/circuit/library/arithmetic/quadratic_form.py#L176-L193)

Get the number of required result qubits.

**Parameters**

- **quadratic** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray)  *|*[*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)*]]*) – A matrix containing the quadratic coefficients.
- **linear** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray)  *|*[*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)*]*) – An array containing the linear coefficients.
- **offset** ([*float*](https://docs.python.org/3/library/functions.html#float)) – A constant offset.

**Returns**

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

**Return type**

[int](https://docs.python.org/3/library/functions.html#int)
