Skip to main content
IBM Quantum Platform
This page is from an old version of Qiskit SDK Go to the latest version

QFT

class qiskit.circuit.library.QFT(num_qubits=None, approximation_degree=0, do_swaps=True, inverse=False, insert_barriers=False, name=None)

GitHub

Bases: BlueprintCircuit

Quantum Fourier Transform Circuit.

The Quantum Fourier Transform (QFT) on nn qubits is the operation

j12n/2k=02n1e2πijk/2nk|j\rangle \mapsto \frac{1}{2^{n/2}} \sum_{k=0}^{2^n - 1} e^{2\pi ijk / 2^n} |k\rangle

The circuit that implements this transformation can be implemented using Hadamard gates on each qubit, a series of controlled-U1 (or Z, depending on the phase) gates and a layer of Swap gates. The layer of Swap gates can in principle be dropped if the QFT appears at the end of the circuit, since then the re-ordering can be done classically. They can be turned off using the do_swaps attribute.

For 4 qubits, the circuit that implements this transformation is:

Diagram illustrating the previously described circuit.

The inverse QFT can be obtained by calling the inverse method on this class. The respective circuit diagram is:

Diagram illustrating the previously described circuit.

One method to reduce circuit depth is to implement the QFT approximately by ignoring controlled-phase rotations where the angle is beneath a threshold. This is discussed in more detail in https://arxiv.org/abs/quant-ph/9601018 or https://arxiv.org/abs/quant-ph/0403071.

Here, this can be adjusted using the approximation_degree attribute: the smallest approximation_degree rotation angles are dropped from the QFT. For instance, a QFT on 5 qubits with approximation degree 2 yields (the barriers are dropped in this example):

Diagram illustrating the previously described circuit.

Construct a new QFT circuit.

Deprecated since version 2.1

The class qiskit.circuit.library.basis_change.qft.QFT is deprecated as of Qiskit 2.1. It will be removed in Qiskit 3.0. (‘Use qiskit.circuit.library.QFTGate or qiskit.synthesis.qft.synth_qft_full instead, for access to all previous arguments.’,)

Parameters

  • num_qubits (int | None) – The number of qubits on which the QFT acts.
  • approximation_degree (int) – The degree of approximation (0 for no approximation).
  • do_swaps (bool) – Whether to include the final swaps in the QFT.
  • inverse (bool) – If True, the inverse Fourier transform is constructed.
  • insert_barriers (bool) – If True, barriers are inserted as visualization improvement.
  • name (str | None) – The name of the circuit.

Attributes

approximation_degree

The approximation degree of the QFT.

Returns

The currently set approximation degree.

do_swaps

Whether the final swaps of the QFT are applied or not.

Returns

True, if the final swaps are applied, False if not.

insert_barriers

Whether barriers are inserted for better visualization or not.

Returns

True, if barriers are inserted, False if not.

num_qubits

The number of qubits in the QFT circuit.

Returns

The number of qubits in the circuit.

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

inverse

inverse(annotated=False)

GitHub

Invert this circuit.

Parameters

annotated (bool) – indicates whether the inverse gate can be implemented as an annotated gate. The value of this argument is ignored as the inverse of a QFT is an IQFT which is just another instance of QFT.

Returns

The inverted circuit.

Return type

QFT

is_inverse

is_inverse()

GitHub

Whether the inverse Fourier transform is implemented.

Returns

True, if the inverse Fourier transform is implemented, False otherwise.

Return type

bool

Was this page helpful?
Report a bug, typo, or request content on GitHub.