Skip to main contentIBM Quantum Documentation
You are viewing the API reference for an old version of Qiskit SDK. Switch to latest version


class qiskit.algorithms.PhaseEstimation(num_evaluation_qubits, quantum_instance=None, sampler=None)

GitHub(opens in a new tab)

Bases: PhaseEstimator

Run the Quantum Phase Estimation (QPE) algorithm.

This runs QPE with a multi-qubit register for reading the phases [1] of input states.

The algorithm takes as input a unitary UU and a state ψ|\psi\rangle, which may be written

ψ=jcjϕj,|\psi\rangle = \sum_j c_j |\phi_j\rangle,

where ϕj|\phi_j\rangle are eigenstates of UU. We prepare the quantum register in the state ψ|\psi\rangle then apply UU leaving the register in the state

Uψ=jexp(iϕj)cjϕj.U|\psi\rangle = \sum_j \exp(i \phi_j) c_j |\phi_j\rangle.

In the ideal case, one then measures the phase ϕj\phi_j with probability cj2|c_j|^2. In practice, many (or all) of the bit strings may be measured due to noise and the possibility that ϕj\phi_j may not be representable exactly by the output register. In the latter case the probability for each eigenphase will be spread across bitstrings, with amplitudes that decrease with distance from the bitstring most closely approximating the eigenphase.

The main input to the constructor is the number of qubits in the phase-reading register. For phase estimation, there are two methods:

first. estimate, which takes a state preparation circuit to prepare an input state, and

a unitary that will act on the input state. In this case, an instance of qiskit.circuit.PhaseEstimation, a QPE circuit, containing the state preparation and input unitary will be constructed.

second. estimate_from_pe_circuit, which takes a quantum-phase-estimation circuit in which

the unitary and state preparation are already embedded.

In both estimation methods, the QPE circuit is run on a backend and the frequencies or counts of the phases represented by bitstrings are recorded. The results are returned as an instance of PhaseEstimationResult.


[1]: Michael A. Nielsen and Isaac L. Chuang. 2011.

Quantum Computation and Quantum Information: 10th Anniversary Edition (10th ed.). Cambridge University Press, New York, NY, USA.

Deprecated since version 0.24.0

qiskit.algorithms.phase_estimators.phase_estimation.PhaseEstimation.__init__()’s argument quantum_instance is deprecated as of qiskit-terra 0.24.0. It will be removed no earlier than 3 months after the release date. Instead, use the sampler argument. See in a new tab) for a migration guide.


  • num_evaluation_qubits (int(opens in a new tab)) – The number of qubits used in estimating the phase. The phase will be estimated as a binary string with this many bits.
  • quantum_instance (QuantumInstance |Backend | None) – Deprecated: The quantum instance on which the circuit will be run.
  • sampler (BaseSampler | None) – The sampler primitive on which the circuit will be sampled.


AlgorithmError – If neither sampler nor quantum instance is provided.



construct_circuit(unitary, state_preparation=None)

Return the circuit to be executed to estimate phases.

This circuit includes as sub-circuits the core phase estimation circuit, with the addition of the state-preparation circuit and possibly measurement instructions.

Return type



estimate(unitary, state_preparation=None)

Build a phase estimation circuit and run the corresponding algorithm.


  • unitary (QuantumCircuit) – The circuit representing the unitary operator whose eigenvalues (via phase) will be measured.
  • state_preparation (QuantumCircuit | None) – The circuit that prepares the state whose eigenphase will be measured. If this parameter is omitted, no preparation circuit will be run and input state will be the all-zero state in the computational basis.


An instance of qiskit.algorithms.phase_estimator_result.PhaseEstimationResult.

Return type



estimate_from_pe_circuit(pe_circuit, num_unitary_qubits)

Run the phase estimation algorithm on a phase estimation circuit



An instance of qiskit.algorithms.phase_estimator_result.PhaseEstimationResult.


AlgorithmError – Primitive job failed.

Return type


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