from qiskit import *
from qiskit.visualization import plot_bloch_multivector, plot_histogram
from math import pi
import matplotlib.pyplot as plt

def qft(circuit, n):
    qft_rotations(circuit, n)
    qft_swap(circuit, n)

def qft_rotations(circuit, n):
    if n == 0:
        return

    n -= 1
    circuit.h(n)

    for qubit in range(n):
        circuit.cu1(pi / 2 ** (n - qubit), qubit, n)
    qft_rotations(circuit, n)

def qft_swap(circuit, n):
    for qubit in range(n // 2):
        circuit.swap(qubit, n - qubit - 1)

n = 2
qc = QuantumCircuit(n)

qc.x(0)
qft(qc, n)

qc.draw('mpl')

backend = Aer.get_backend('statevector_simulator')
final_state = execute(qc, backend).result()

plot_bloch_multivector(final_state.get_statevector())

plt.show()