# pip install qiskit pylatexenc
from qiskit import QuantumCircuit
from qiskit.aqua.algorithms import Grover, QPE
from qiskit import Aer, execute
from qiskit.aqua import QuantumInstance
import numpy as np
nqubit = 3
# the state we desire to find is '011'
good_state = ['011']
# specify the oracle that marks the state '011' as a good solution
oracle = QuantumCircuit(nqubit)
oracle.z(0)
state_preparation = QuantumCircuit(nqubit, name='State preparation')
state_preparation.h([1,2])
state_preparation.x(2)
state_preparation.ccx(2,1,0)
state_preparation.x(2)
# define Grover's algorithm
grover = Grover(oracle=oracle, good_state=good_state, state_preparation=state_preparation)
from qiskit.aqua.algorithms import AmplitudeEstimation
num_eval_qubits = 3
QAE = AmplitudeEstimation(num_eval_qubits, state_preparation=state_preparation, grover_operator=grover.grover_operator, quantum_instance=Aer.get_backend('qasm_simulator'))