MCPcopy Index your code
hub / github.com/TheAlgorithms/Python / quantum_fourier_transform

Function quantum_fourier_transform

quantum/q_fourier_transform.py:21–89  ·  view source on GitHub ↗

# >>> quantum_fourier_transform(2) # {'00': 2500, '01': 2500, '11': 2500, '10': 2500} # quantum circuit for number_of_qubits = 3: ┌───┐ qr_0: ──────■──────────────────────■───────┤ H ├─X─ │ ┌───┐ │P(π/2) └

(number_of_qubits: int = 3)

Source from the content-addressed store, hash-verified

19
20
21def quantum_fourier_transform(number_of_qubits: int = 3) -> qiskit.result.counts.Counts:
22 """
23 # >>> quantum_fourier_transform(2)
24 # {'00': 2500, '01': 2500, '11': 2500, '10': 2500}
25 # quantum circuit for number_of_qubits = 3:
26 ┌───┐
27 qr_0: ──────■──────────────────────■───────┤ H ├─X─
28 │ ┌───┐ │P(π/2) └───┘ │
29 qr_1: ──────┼────────■───────┤ H ├─■─────────────┼─
30 ┌───┐ │P(π/4) │P(π/2) └───┘ │
31 qr_2: ┤ H ├─■────────■───────────────────────────X─
32 └───┘
33 cr: 3/═════════════════════════════════════════════
34 Args:
35 n : number of qubits
36 Returns:
37 qiskit.result.counts.Counts: distribute counts.
38
39 >>> quantum_fourier_transform(2)
40 {'00': 2500, '01': 2500, '10': 2500, '11': 2500}
41 >>> quantum_fourier_transform(-1)
42 Traceback (most recent call last):
43 ...
44 ValueError: number of qubits must be > 0.
45 >>> quantum_fourier_transform('a')
46 Traceback (most recent call last):
47 ...
48 TypeError: number of qubits must be a integer.
49 >>> quantum_fourier_transform(100)
50 Traceback (most recent call last):
51 ...
52 ValueError: number of qubits too large to simulate(>10).
53 >>> quantum_fourier_transform(0.5)
54 Traceback (most recent call last):
55 ...
56 ValueError: number of qubits must be exact integer.
57 """
58 if isinstance(number_of_qubits, str):
59 raise TypeError("number of qubits must be a integer.")
60 if number_of_qubits <= 0:
61 raise ValueError("number of qubits must be > 0.")
62 if math.floor(number_of_qubits) != number_of_qubits:
63 raise ValueError("number of qubits must be exact integer.")
64 if number_of_qubits > 10:
65 raise ValueError("number of qubits too large to simulate(>10).")
66
67 qr = QuantumRegister(number_of_qubits, "qr")
68 cr = ClassicalRegister(number_of_qubits, "cr")
69
70 quantum_circuit = QuantumCircuit(qr, cr)
71
72 counter = number_of_qubits
73
74 for i in range(counter):
75 quantum_circuit.h(number_of_qubits - i - 1)
76 counter -= 1
77 for j in range(counter):
78 quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter)

Callers 1

Calls 2

floorMethod · 0.80
swapMethod · 0.80

Tested by

no test coverage detected