build the quantum fourier transform qft for a desire number of quantum bits using qiskit framework this experiment run in ibm q simulator with 10000 shots this circuit can be use as a building block to design the shor s algorithm in quantum computing as well as quantum phase estimation among others references https en wikipedia orgwikiquantumfouriertransform https qiskit orgtextbookchalgorithmsquantumfouriertransform html quantumfouriertransform2 00 2500 01 2500 11 2500 10 2500 quantum circuit for numberofqubits 3 qr0 h x p2 qr1 h p4 p2 qr2 h x cr 3 args n number of qubits returns qiskit result counts counts distribute counts quantumfouriertransform2 00 2500 01 2500 10 2500 11 2500 quantumfouriertransform1 traceback most recent call last valueerror number of qubits must be 0 quantumfouriertransform a traceback most recent call last typeerror number of qubits must be a integer quantumfouriertransform100 traceback most recent call last valueerror number of qubits too large to simulate10 quantumfouriertransform0 5 traceback most recent call last valueerror number of qubits must be exact integer measure all the qubits simulate with 10000 shots 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 qr_1 h p π 4 p π 2 qr_2 h x cr 3 args n number of qubits returns qiskit result counts counts distribute counts quantum_fourier_transform 2 00 2500 01 2500 10 2500 11 2500 quantum_fourier_transform 1 traceback most recent call last valueerror number of qubits must be 0 quantum_fourier_transform a traceback most recent call last typeerror number of qubits must be a integer quantum_fourier_transform 100 traceback most recent call last valueerror number of qubits too large to simulate 10 quantum_fourier_transform 0 5 traceback most recent call last valueerror number of qubits must be exact integer measure all the qubits simulate with 10000 shots
import math

import numpy as np
import qiskit
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute


def quantum_fourier_transform(number_of_qubits: int = 3) -> qiskit.result.counts.Counts:
    
    if isinstance(number_of_qubits, str):
        raise TypeError("number of qubits must be a integer.")
    if number_of_qubits <= 0:
        raise ValueError("number of qubits must be > 0.")
    if math.floor(number_of_qubits) != number_of_qubits:
        raise ValueError("number of qubits must be exact integer.")
    if number_of_qubits > 10:
        raise ValueError("number of qubits too large to simulate(>10).")

    qr = QuantumRegister(number_of_qubits, "qr")
    cr = ClassicalRegister(number_of_qubits, "cr")

    quantum_circuit = QuantumCircuit(qr, cr)

    counter = number_of_qubits

    for i in range(counter):
        quantum_circuit.h(number_of_qubits - i - 1)
        counter -= 1
        for j in range(counter):
            quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter)

    for k in range(number_of_qubits // 2):
        quantum_circuit.swap(k, number_of_qubits - k - 1)

    
    quantum_circuit.measure(qr, cr)
    
    backend = Aer.get_backend("qasm_simulator")
    job = execute(quantum_circuit, backend, shots=10000)

    return job.result().get_counts(quantum_circuit)


if __name__ == "__main__":
    print(
        f"Total count for quantum fourier transform state is: \
    {quantum_fourier_transform(3)}"
    )