Source code for qlauncher.routines.qiskit.algorithms.grover

 1from qlauncher.base import Algorithm, Result
 2from qlauncher.base.models import GroverCircuit
 3from qlauncher.routines.qiskit.backends.qiskit_backend import QiskitBackend
 4
 5from qiskit.circuit.library import grover_operator
 6from qiskit import QuantumCircuit
 7
 8
[docs] 9class Grover(Algorithm[GroverCircuit, QiskitBackend]): 10 def __init__(self, n_shots: int, **alg_kwargs): 11 super().__init__(**alg_kwargs) 12 self.n_shots = n_shots 13
[docs] 14 def run(self, problem: GroverCircuit, backend: QiskitBackend) -> Result: 15 grover_op = grover_operator(problem.oracle, problem.state_prep) 16 full_circuit = QuantumCircuit(problem.oracle.num_qubits) 17 18 full_circuit.append(problem.state_prep, range(problem.state_prep.num_qubits)) 19 20 for _ in range(problem.num_iterations): 21 full_circuit.compose(grover_op, inplace=True) 22 full_circuit.measure_all() 23 24 self._circuit = full_circuit 25 26 job = backend.sampler.run([full_circuit], shots=self.n_shots) 27 28 return job.result()[0]
29
[docs] 30 def circuit(self, mode: str = '') -> QuantumCircuit | None: 31 if not self._circuit: 32 print('Run the algorithm to generate circuit') 33 else: 34 return self._circuit