# >>> 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)
| 19 | |
| 20 | |
| 21 | def 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) |
no test coverage detected