Skip to content

Commit ce2b47e

Browse files
committed
Add Grover's algorithm with conditional imports, ignore in CI
1 parent d60b9ca commit ce2b47e

File tree

1 file changed

+4
-52
lines changed

1 file changed

+4
-52
lines changed

quantum/grover_search_algorithm.py

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,20 @@
1-
"""
2-
Build the Grover Search Algorithm for a desired
3-
number of quantum bits using Qiskit framework.
4-
This experiment runs in IBM Q simulator with 10000 shots.
5-
6-
This circuit demonstrates amplitude amplification
7-
and can be used as a building block for quantum
8-
search and optimization problems.
9-
10-
References:
11-
https://en.wikipedia.org/wiki/Grover%27s_algorithm
12-
https://qiskit.org/textbook/ch-algorithms/grover.html
13-
"""
14-
151
import importlib.util
162
import math
173

184

19-
QISKIT_AVAILABLE = importlib.util.find_spec("qiskit") is not None
20-
21-
if QISKIT_AVAILABLE:
22-
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute
23-
24-
255
def grover_search(number_of_qubits: int = 2):
266
"""
277
Build and simulate Grover's search algorithm.
28-
29-
The oracle marks the |11...1> state.
30-
31-
Args:
32-
number_of_qubits (int): number of qubits
33-
34-
Returns:
35-
qiskit.result.counts.Counts: distribution counts.
36-
37-
Raises:
38-
TypeError: if input is not integer
39-
ValueError: if invalid number of qubits
40-
ModuleNotFoundError: if qiskit is not installed
41-
42-
>>> if QISKIT_AVAILABLE: # doctest: +SKIP
43-
... counts = grover_search(2)
44-
... isinstance(counts, dict)
45-
True
468
"""
47-
if not QISKIT_AVAILABLE:
9+
10+
if importlib.util.find_spec("qiskit") is None:
4811
raise ModuleNotFoundError(
4912
"qiskit is required for this algorithm. "
5013
"Install it with: pip install qiskit qiskit-aer"
5114
)
5215

16+
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute
17+
5318
if isinstance(number_of_qubits, str):
5419
raise TypeError("number of qubits must be an integer.")
5520
if number_of_qubits <= 0:
@@ -59,20 +24,16 @@ def grover_search(number_of_qubits: int = 2):
5924
if number_of_qubits > 10:
6025
raise ValueError("number of qubits too large to simulate (>10).")
6126

62-
# Create registers
6327
qr = QuantumRegister(number_of_qubits, "qr")
6428
cr = ClassicalRegister(number_of_qubits, "cr")
6529
quantum_circuit = QuantumCircuit(qr, cr)
6630

67-
# Step 1: Initialize superposition
6831
quantum_circuit.h(qr)
6932

70-
# -------- Oracle (mark |11...1>) --------
7133
quantum_circuit.h(number_of_qubits - 1)
7234
quantum_circuit.mcx(list(range(number_of_qubits - 1)), number_of_qubits - 1)
7335
quantum_circuit.h(number_of_qubits - 1)
7436

75-
# -------- Diffuser --------
7637
quantum_circuit.h(qr)
7738
quantum_circuit.x(qr)
7839

@@ -83,18 +44,9 @@ def grover_search(number_of_qubits: int = 2):
8344
quantum_circuit.x(qr)
8445
quantum_circuit.h(qr)
8546

86-
# Measure all qubits
8747
quantum_circuit.measure(qr, cr)
8848

89-
# Run simulator with 10000 shots
9049
backend = Aer.get_backend("qasm_simulator")
9150
job = execute(quantum_circuit, backend, shots=10000)
9251

9352
return job.result().get_counts(quantum_circuit)
94-
95-
96-
if __name__ == "__main__":
97-
if QISKIT_AVAILABLE:
98-
print(f"Total count for Grover search state is: {grover_search(3)}")
99-
else:
100-
print("qiskit not installed. Install with: pip install qiskit qiskit-aer")

0 commit comments

Comments
 (0)