






"""simple docstring"""
import math

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

def        snake_case   (     A__ = 3		):
			if isinstance(A__			,A__		):
						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(A__		) != 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)."		)

			UpperCAmelCase_  :				str      =      QuantumRegister(A__			,"qr"		)
			UpperCAmelCase_  :				Any      =      ClassicalRegister(A__			,"cr"		)

			UpperCAmelCase_  :				Any      =      QuantumCircuit(A__			,A__		)

			UpperCAmelCase_  :				int      =      number_of_qubits

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

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

			# measure all the qubits
			quantum_circuit.measure(A__			,A__		)
			# simulate with 10000 shots
			UpperCAmelCase_  :				str      =      Aer.get_backend("qasm_simulator"		)
			UpperCAmelCase_  :				List[Any]      =      execute(A__			,A__			,shots=1_00_00		)

			return job.result().get_counts(A__		)


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











"""simple docstring"""
from ..utils import DummyObject, requires_backends







class     UpperCamelCase_ (metaclass=__A  ):
	__magic_name__			   =       ['''onnx''']





	def __init__(   self      :				List[Any]			,			*lowerCAmelCase_      :				Dict			,			**lowerCAmelCase_      :				Dict		)		->    Dict:
				requires_backends(self			,			["onnx"]		)





	@classmethod
	def   _SCREAMING_SNAKE_CASE   (   cls      :				Optional[Any]			,			*lowerCAmelCase_      :				Dict			,			**lowerCAmelCase_      :				Union[str, Any]		)		->    int:
				requires_backends(cls			,			["onnx"]		)





	@classmethod
	def   _SCREAMING_SNAKE_CASE   (   cls      :				str			,			*lowerCAmelCase_      :				Optional[Any]			,			**lowerCAmelCase_      :				str		)		->    Optional[Any]:
				requires_backends(cls			,			["onnx"]		)



