




'''simple docstring'''





from dataclasses import dataclass
from typing import Callable, Optional

import datasets




@dataclass
class 				_snake_case	(			datasets.BuilderConfig							):
   lowerCAmelCase_  :   Optional[Callable]		 =					None
   lowerCAmelCase_  :   Optional[dict]		 =					None
   lowerCAmelCase_  :   Optional[datasets.Features]		 =					None




   def      lowerCAmelCase__       (      self							)       ->       List[Any]:

          '''simple docstring'''




          assert self.generator is not None, "generator must be specified"

          if self.gen_kwargs is None:
                 snake_case_			      =   {}




class 				_snake_case	(			datasets.GeneratorBasedBuilder							):
   lowerCAmelCase_  :   Any		 =					GeneratorConfig




   def      lowerCAmelCase__       (      self							)       ->       Union[str, Any]:

          '''simple docstring'''




          return datasets.DatasetInfo(features=self.config.features							)




   def      lowerCAmelCase__       (      self       ,							a__							)       ->       Optional[int]:

          '''simple docstring'''




          return [datasets.SplitGenerator(name=datasets.Split.TRAIN       ,							gen_kwargs=self.config.gen_kwargs							)]




   def      lowerCAmelCase__       (      self       ,							**a__							)       ->       int:

          '''simple docstring'''




          for idx, ex in enumerate(self.config.generator(**a_							)							):
                 yield idx, ex










'''simple docstring'''





import qiskit
from qiskit.providers import Backend


def   UpperCamelCase_(			snake_case							: int							,       snake_case							: int  ):

							'''simple docstring'''






							snake_case_      ,   snake_case_			      =   bin(snake_case  )[2:], bin(snake_case  )[2:]  # Remove leading '0b'

							# Ensure that both strings are of the same length
							if len(snake_case  ) > len(snake_case  ):
														snake_case_			      =   y.zfill(len(snake_case  )  )
							else:
														snake_case_			      =   x.zfill(len(snake_case  )  )

							# We need (3 * number of bits in the larger number)+1 qBits
							# The second parameter is the number of classical registers, to measure the result
							snake_case_			      =   qiskit.QuantumCircuit((len(snake_case  ) * 3) + 1							,       len(snake_case  ) + 1  )

							# We are essentially "not-ing" the bits that are 1
							# Reversed because it's easier to perform ops on more significant bits
							for i in range(len(snake_case  )  ):
														if x[::-1][i] == "1":
																					circuit.x(snake_case  )
							for j in range(len(snake_case  )  ):
														if y[::-1][j] == "1":
																					circuit.x(len(snake_case  ) + j  )

							return circuit, x, y


def   UpperCamelCase_(			snake_case							: qiskit.QuantumCircuit							,       snake_case							: int							,       snake_case							: int							,       snake_case							: int							,       snake_case							: int							,       ):

							'''simple docstring'''






							circuit.ccx(snake_case							,       snake_case							,       snake_case  )
							circuit.cx(snake_case							,       snake_case  )
							circuit.ccx(snake_case							,       snake_case							,       snake_case  )
							circuit.cx(snake_case							,       snake_case  )
							circuit.cx(snake_case							,       snake_case  )


def   UpperCamelCase_(			snake_case							: int							,       snake_case							: int							,       snake_case							: Backend = qiskit.Aer.get_backend("aer_simulator"  )							,       ):

							'''simple docstring'''






							if vala < 0 or vala < 0:
														raise ValueError("Both Integers must be positive!"  )

							# Store the Integers
							snake_case_      ,   snake_case_      ,   snake_case_			      =   store_two_classics(snake_case							,       snake_case  )
							for i in range(len(snake_case  )  ):
														full_adder(snake_case							,       snake_case							,       len(snake_case  ) + i							,       len(snake_case  ) + len(snake_case  ) + i							,       len(snake_case  ) + len(snake_case  ) + i + 1  )
														circuit.barrier()  # Optional, just for aesthetics

							# Measure the resultant qBits
							for i in range(len(snake_case  ) + 1  ):
														circuit.measure([(len(snake_case  ) * 2) + i]							,       [i]  )

							snake_case_			      =   qiskit.execute(snake_case							,       snake_case							,       shots=1  ).result()

							# The result is in binary. Convert it back to int
							return int(list(res.get_counts()  )[0]							,       2  )


if __name__ == "__main__":
		import doctest

		doctest.testmod()




