



import math

import qiskit


def 	UpperCAmelCase__      (      UpperCAmelCase__ :int = 1 ,					UpperCAmelCase__ :int = 1 ,					UpperCAmelCase__ :int = 1					):






 '''simple docstring'''

 if (
     isinstance(__lowercase ,					__lowercase					)
     or isinstance(__lowercase ,					__lowercase					)
     or isinstance(__lowercase ,					__lowercase					)
 ):
  raise TypeError("inputs must be integers."					)

 if (input_a < 0) or (input_a < 0) or (carry_in < 0):
  raise ValueError("inputs must be positive."					)

 if (
     (math.floor(__lowercase					) != input_a)
     or (math.floor(__lowercase					) != input_a)
     or (math.floor(__lowercase					) != carry_in)
 ):
  raise ValueError("inputs must be exact integers."					)

 if (input_a > 2) or (input_a > 2) or (carry_in > 2):
  raise ValueError("inputs must be less or equal to 2."					)

 # build registers
 a						=		qiskit.QuantumRegister(4 ,					"qr"					)
 a						=		qiskit.ClassicalRegister(2 ,					"cr"					)
 # list the entries
 a						=		[input_a, input_a, carry_in]

 a						=		qiskit.QuantumCircuit(__lowercase ,					__lowercase					)

 for i in range(0 ,					3					):
  if entry[i] == 2:
   quantum_circuit.h(__lowercase					)  # for hadamard entries
  elif entry[i] == 1:
   quantum_circuit.x(__lowercase					)  # for 1 entries
  elif entry[i] == 0:
   quantum_circuit.i(__lowercase					)  # for 0 entries

    # build the circuit
 quantum_circuit.ccx(0 ,					1 ,					3					)  # ccx = toffoli gate
 quantum_circuit.cx(0 ,					1					)
 quantum_circuit.ccx(1 ,					2 ,					3					)
 quantum_circuit.cx(1 ,					2					)
 quantum_circuit.cx(0 ,					1					)

 quantum_circuit.measure([2, 3] ,					__lowercase					)  # measure the last two qbits

 a						=		qiskit.Aer.get_backend("aer_simulator"					)
 a						=		qiskit.execute(__lowercase ,					__lowercase ,					shots=10_00					)

 return job.result().get_counts(__lowercase					)


if __name__ == "__main__":
     print(F"""Total sum count for state is: {quantum_full_adder(1, 1, 1)}""")






def 	UpperCAmelCase__      (      UpperCAmelCase__ :int ,					UpperCAmelCase__ :int					):






 '''simple docstring'''

 if a < 0 or b < 0:
  raise ValueError("the value of both inputs must be positive"					)

 a						=		str(bin(UpperCAmelCase__					)					)[2:]  # remove the leading "0b"
 a						=		str(bin(UpperCAmelCase__					)					)[2:]  # remove the leading "0b"

 a						=		max(len(UpperCAmelCase__					) ,					len(UpperCAmelCase__					)					)

 return "0b" + "".join(
     str(int(char_a == "1" and char_b == "1"					)					)
     for char_a, char_b in zip(a_binary.zfill(UpperCAmelCase__					) ,					b_binary.zfill(UpperCAmelCase__					)					)					)


if __name__ == "__main__":
     import doctest

     doctest.testmod()

