def get_2_bit_adder_rules_for_bit(self, bit): rules = [[[0, 0, 0, 0], [0, 0, 0]], # 0 + 0 = 0 [[0, 0, 0, 1], [0, 0, 1]], # 0 + 1 = 1 [[0, 0, 1, 0], [0, 1, 0]], # 0 + 2 = 2 [[0, 0, 1, 1], [0, 1, 1]], # 0 + 3 = 3 [[0, 1, 0, 0], [0, 0, 1]], # 1 + 0 = 1 [[0, 1, 0, 1], [0, 1, 0]], # 1 + 1 = 2 [[0, 1, 1, 0], [0, 1, 1]], # 1 + 2 = 3 [[0, 1, 1, 1], [1, 0, 0]], # 1 + 3 = 4 [[1, 0, 0, 0], [0, 1, 0]], # 2 + 0 = 2 [[1, 0, 0, 1], [0, 1, 1]], # 2 + 1 = 3 [[1, 0, 1, 0], [1, 0, 0]], # 2 + 2 = 4 [[1, 0, 1, 1], [1, 0, 1]], # 2 + 3 = 5 [[1, 1, 0, 0], [0, 1, 1]], # 3 + 0 = 3 [[1, 1, 0, 1], [1, 0, 0]], # 3 + 1 = 4 [[1, 1, 1, 0], [1, 0, 1]], # 3 + 2 = 5 [[1, 1, 1, 1], [1, 1, 0]]] # 3 + 3 = 6 bitNRules = [[rule[0], rule[1][2 - bit]] for rule in rules] self.gates.append([circuits.Or, circuits.Or]) self.gates.append([circuits.Xor, circuits.Xor]) self.sources.append( [lambda l, r: circuits.Source('C', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('D', self.inputs), circuits.Source]) return bitNRules
def setUpClass(cls): cls.inputs = dict() cls.gates = [[circuits.And, circuits.And], [lambda i1, i2: circuits.Not(i1), circuits.Not]] cls.sources = [[ lambda i1, i2: circuits.Source('B', cls.inputs), circuits.Source ], [lambda i1, i2: circuits.Source('A', cls.inputs), circuits.Source]]
def test_generate_myCsv(self): rules = pd.read_csv("truth_table.csv") self.gates.append([circuits.Or, circuits.Or]) self.gates.append([circuits.Xor, circuits.Xor]) self.sources.append( [lambda l, r: circuits.Source('C', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('D', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('E', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('F', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('G', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('H', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('I', self.inputs), circuits.Source]) self.sources.append( [lambda l, r: circuits.Source('J', self.inputs), circuits.Source]) self.find_circuit(rules, 12)
def get_2_bit_adder_rules_for_bit(self, bit): rules = [[[0, 0, 0, 0], [0, 0, 0]], [[0, 0, 0, 1], [0, 0, 1]], [[0, 0, 1, 0], [0, 1, 0]], [[0, 0, 1, 1], [0, 1, 1]], [[0, 1, 0, 0], [0, 0, 1]], [[0, 1, 0, 1], [0, 1, 0]], [[0, 1, 1, 0], [0, 1, 1]], [[0, 1, 1, 1], [1, 0, 0]], [[1, 0, 0, 0], [0, 1, 0]], [[1, 0, 0, 1], [0, 1, 1]], [[1, 0, 1, 0], [1, 0, 0]], [[1, 0, 1, 1], [1, 0, 1]], [[1, 1, 0, 0], [0, 1, 1]], [[1, 1, 0, 1], [1, 0, 0]], [[1, 1, 1, 0], [1, 0, 1]], [[1, 1, 1, 1], [1, 1, 0]]] bitNRules = [[rule[0], rule[1][2 - bit]] for rule in rules] if not [circuits.Xor, circuits.Xor] in self.gates: self.gates.append([circuits.Xor, circuits.Xor]) if not [lambda l, r: circuits.Source('D', self.inputs), circuits.Source] \ in self.sources: self.sources.append([lambda l, r: circuits.Source('D', self.inputs), \ circuits.Source]) return bitNRules
def test_generate_2_AxBxC(self): rules = [[[False, False, False], False], [[False, False, True], True], [[False, True, False], True], [[False, True, True], False], [[True, False, False], True], [[True, False, True], False], [[True, True, False], False], [[True, True, True], True]] self.sources.append( [lambda l, r: circuits.Source('C', self.inputs), circuits.Source]) self.gates.append([circuits.Or, circuits.Or]) self.find_circuit(rules, 12)