






"""simple docstring"""

import math

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






def _lowerCAmelCase	(  __lowerCamelCase:int = 3   ):

						'''simple docstring'''






						if isinstance(__lowerCamelCase ,						__lowerCamelCase   ):
												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(__lowerCamelCase   ) != number_of_qubits:
												raise ValueError("number of qubits must be exact integer."   )
						if number_of_qubits > 1_0:
												raise ValueError("number of qubits too large to simulate(>10)."   )

						__magic_name__            =     QuantumRegister(__lowerCamelCase ,						"qr"   )
						__magic_name__            =     ClassicalRegister(__lowerCamelCase ,						"cr"   )

						__magic_name__            =     QuantumCircuit(__lowerCamelCase ,						__lowerCamelCase   )

						__magic_name__            =     number_of_qubits

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

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

						# measure all the qubits
						quantum_circuit.measure(__lowerCamelCase ,						__lowerCamelCase   )
						# simulate with 10000 shots
						__magic_name__            =     Aer.get_backend("qasm_simulator"   )
						__magic_name__            =     execute(__lowerCamelCase ,						__lowerCamelCase ,						shots=1_0_0_0_0   )

						return job.result().get_counts(__lowerCamelCase   )


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











"""simple docstring"""

def _lowerCAmelCase	(  __lowerCamelCase:str   ):

						'''simple docstring'''






						return "".join(chr(ord(__lowerCamelCase   ) - 3_2   ) if "a" <= char <= "z" else char for char in word   )


if __name__ == "__main__":
			from doctest import testmod

			testmod()



