




'''simple docstring'''







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






def 						_lowercase						(      lowercase_ = np.pi / 2		,				lowercase_ = np.pi / 2		,				lowercase_ = np.pi / 2    ):



		'''simple docstring'''







		_snake_case      			=			QuantumRegister(3		,				"qr"    )  # Define the number of quantum bits
		_snake_case      			=			ClassicalRegister(1		,				"cr"    )  # Define the number of classical bits

		_snake_case      			=			QuantumCircuit(lowercase_		,				lowercase_    )  # Define the quantum circuit.

		# Build the circuit
		quantum_circuit.u(lowercase_		,				lowercase_		,				lowercase_		,				0    )  # Quantum State to teleport
		quantum_circuit.h(1    )  # add hadamard gate
		quantum_circuit.cx(
		    1		,				2    )  # add control gate with qubit 1 as control and 2 as target.
		quantum_circuit.cx(0		,				1    )
		quantum_circuit.h(0    )
		quantum_circuit.cz(0		,				2    )  # add control z gate.
		quantum_circuit.cx(1		,				2    )

		quantum_circuit.measure([2]		,				[0]    )  # measure the qubit.

		# Simulate the circuit using qasm simulator
		_snake_case      			=			Aer.get_backend("aer_simulator"    )
		_snake_case      			=			execute(lowercase_		,				lowercase_		,				shots=1000    )

		return job.result().get_counts(lowercase_    )


if __name__ == "__main__":
						print(
						    'Total count for teleported state is: '
						    F'''{quantum_teleportation(np.pi/2, np.pi/2, np.pi/2)}'''
						)











'''simple docstring'''







import numpy as np






def 						_lowercase						(      lowercase_    ):



		'''simple docstring'''







		_snake_case			,       _snake_case      			=			a.shape
		_snake_case      			=			min(lowercase_		,				lowercase_    )
		_snake_case      			=			np.eye(lowercase_    )
		_snake_case      			=			a.copy()

		for k in range(t - 1    ):
				# select a column of modified matrix A':
				_snake_case      			=			r[k:, [k]]
				# construct first basis vector
				_snake_case      			=			np.zeros_like(lowercase_    )
				_snake_case      			=			1.0
				# determine scaling factor
				_snake_case      			=			np.linalg.norm(lowercase_    )
				# construct vector v for Householder reflection
				_snake_case      			=			x + np.sign(x[0]    ) * alpha * ea
				v /= np.linalg.norm(lowercase_    )

				# construct the Householder matrix
				_snake_case      			=			np.eye(m - k    ) - 2.0 * v @ v.T
				# pad with ones and zeros as necessary
				_snake_case      			=			np.block([[np.eye(lowercase_    ), np.zeros((k, m - k)    )], [np.zeros((m - k, k)    ), q_k]]    )

				_snake_case      			=			q @ q_k.T
				_snake_case      			=			q_k @ r

		return q, r


if __name__ == "__main__":
						import doctest

						doctest.testmod()





