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