braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation module

braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation.quantum_phase_estimation_circuit(quantum_phase_estimation_circ: Circuit, precision_qubits: Qubit | int | Iterable[Qubit | int], query_qubits: Qubit | int | Iterable[Qubit | int], unitary_apply_func: Callable) Circuit[source]

Adds result type to quantum phase estimation

Parameters:
  • quantum_phase_estimation_circ (Circuit) – Circuit with query bits prepared

  • precision_qubits (QubitSetInput) – Qubits defining the precision register

  • query_qubits (QubitSetInput) – Qubits defining the query register

  • unitary_apply_func (Callable) – Function that applies the desired controlled unitary to a provided circuit using provided control and target qubits

Returns:

Circuit – Implements the Quantum Phase Estimation algorithm with result type

braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation.quantum_phase_estimation(precision_qubits: Qubit | int | Iterable[Qubit | int], query_qubits: Qubit | int | Iterable[Qubit | int], unitary_apply_func: Callable) Circuit[source]

Creates the Quantum Phase Estimation circuit using:

1) The first register for precision. 2)The second register for query qubits which hosts the eigenstate and should already be prepared in its initial state. 3) A function that applies a controlled unitary circuit. This function accepts a control qubit and the target qubits on which to apply the unitary. Quantum Phase Estimation will repeatedly apply this function for the target qubits. This is a necessary input because the controlled unitary needs to be defined in terms of available gates for a given QPU.

Example

>>> def cnot_apply_func(circ, control_qubit, query_qubits):
...    circ.qpe_cnot_unitary(control_qubit, query_qubits)
>>> circ = Circuit().h([2])
>>> circ.quantum_phase_estimation([0, 1], [2], cnot_apply_func)
>>> print(circ)
T  : |0|1| 2  |3|     4      |5|
q0 : -H---SWAP---PHASE(-1.57)-H-
          |      |
q1 : -H-C-SWAP-H-C--------------
        |
q2 : -H-X-----------------------
T  : |0|1| 2  |3|     4      |5|
Parameters:
  • precision_qubits (QubitSetInput) – Qubits defining the precision register

  • query_qubits (QubitSetInput) – Qubits defining the query register

  • unitary_apply_func (Callable) – Function that applies the desired controlled unitary to a provided circuit using provided control and target qubits

Returns:

Circuit – Circuit object that implements the Quantum Phase Estimation algorithm

braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation.run_quantum_phase_estimation(circuit: Circuit, device: Device, shots: int = 1000) QuantumTask[source]

Function to run Quantum Phase Estimation algorithm and return measurement counts.

Parameters:
  • circuit (Circuit) – Quantum Phase Estimation circuit

  • device (Device) – Braket device backend

  • shots (int) – Number of measurement shots (default is 1000).

Returns:

QuantumTask – Task from running Quantum Phase Estimation

braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation.get_quantum_phase_estimation_results(task: QuantumTask, precision_qubits: Qubit | int | Iterable[Qubit | int], query_qubits: Qubit | int | Iterable[Qubit | int], verbose: bool = False) Dict[str, Any][source]

Function to postprocess results returned by run_quantum_phase_estimation and pretty print results.

Parameters:
  • task (QuantumTask) – The task which holds the results for the quantum phase estimation run

  • precision_qubits (QubitSetInput) – Qubits defining the precision register

  • query_qubits (QubitSetInput) – Qubits defining the query register

  • verbose (bool) – If True, prints aggregate results (default is False)

Returns:

Dict[str, Any] – aggregate measurement results

braket.experimental.algorithms.quantum_phase_estimation.quantum_phase_estimation.inverse_qft(qubits: Qubit | int | Iterable[Qubit | int]) Circuit[source]

Construct a circuit object corresponding to the inverse Quantum Fourier Transform (QFT) algorithm, applied to the argument qubits. Does not use recursion to generate the circuit.

Parameters:

qubits (QubitSetInput) – Qubits on which to apply the inverse Quantum Fourier Transform

Returns:

Circuit – Circuit object that implements the inverse Quantum Fourier Transform algorithm