def _simplify(expr): name, entries = expr _logger.debug("Simplifying %s...", entries) if entries == [0]: _tt_simplified = "0" else: qm = QuineMcCluskey() _tt_simplified = qm.simplify(entries) _logger.debug("%s: %s", name, _tt_simplified) return _tt_simplified
def generate_input(s_terms): """ generate input for a desired result """ qm = QuineMcCluskey() res = set() if len(s_terms) == 0: return res for term in s_terms: res = res | set([i for i in qm.permutations(term)]) return res
def run(test_vector, use_xor): """ Run function """ qm = QuineMcCluskey(use_xor=use_xor) for test in test_vector: s_out = test['res'] if 'ons' in test or 'dnc' in test: if 'ons' in test: ones = test['ons'] else: ones = [] if 'dnc' in test: dontcares = test['dnc'] else: dontcares = [] pretty_ones = "%s" % ones pretty_dontcares = "%s" % dontcares t1 = time.time() s_res = qm.simplify(ones, dontcares) t2 = time.time() else: s_ones = generate_input(s_out) s_dontcares = set() pretty_ones = "[%s]" % format_set(s_ones) pretty_dontcares = "[%s]" % format_set(s_dontcares) t1 = time.time() s_res = qm.simplify_los(s_ones, s_dontcares) t2 = time.time() print() print("ones: %s" % pretty_ones) print("dontcares: %s" % pretty_dontcares) print("res: [%s]" % format_set(s_res)) print( 'time: %0.3f ms, %d comparisons, %d XOR and %d XNOR comparisons' % ((t2 - t1) * 1000.0, qm.profile_cmp, qm.profile_xor, qm.profile_xnor)) if s_res != s_out: print("Error: test failed") print("expected: [%s]" % format_set(s_out)) print("got: [%s]" % format_set(s_res)) raise TestFailure print("\nTest OK.")
def main(): """ Main function """ qm = QuineMcCluskey(use_xor = True) test_vector = [ { 'res': set(['--^^']) }, { 'res': set(['1--^^']) }, { 'res': set(['--1--11-', '00000001', '10001000']) }, { 'res': set(['----']), 'ons': [], 'dnc': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'dnc': [10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [1, 3, 5, 7, 9, 11, 13, 15], 'dnc': [0, 2, 4, 6, 8, 10, 12, 14] }, { 'res': set(['--^^']), 'ons': [1, 2, 5, 6, 9, 10, 13, 14] }, { 'res': set(['-------1']) }, { 'res': set(['------^^']) }, { 'res': set(['-----^^^']) }, { 'res': set(['0^^^']) }, { 'res': set(['0~~~']) }, { 'res': set(['^^^^^^^^']) }, { 'res': set(['^^^0', '100-']) }, { 'res': set(['00^-0^^0', '01000001', '10001000']) }, { 'res': set(['^^^00', '111^^']) }, { 'res': set(['---00000^^^^^^^']) }, ] for test in test_vector: s_out = test['res'] if 'ons' in test or 'dnc' in test: if 'ons' in test: ones = test['ons'] else: ones = [] if 'dnc' in test: dontcares = test['dnc'] else: dontcares = [] pretty_ones = "%s" % ones pretty_dontcares = "%s" % dontcares t1 = time.time() s_res = qm.simplify(ones, dontcares) t2 = time.time() else: s_ones = generate_input(s_out) s_dontcares = set() pretty_ones = "[%s]" % format_set(s_ones) pretty_dontcares = "[%s]" % format_set(s_dontcares) t1 = time.time() s_res = qm.simplify_los(s_ones, s_dontcares) t2 = time.time() print() print("ones: %s" % pretty_ones) print("dontcares: %s" % pretty_dontcares) print("res: [%s]" % format_set(s_res)) print('time: %0.3f ms, %d comparisons, %d XOR and %d XNOR comparisons' % ((t2-t1)*1000.0, qm.profile_cmp, qm.profile_xor, qm.profile_xnor)) if s_res != s_out: print("Error: test failed") print("expected: [%s]" % format_set(s_out)) print("got: [%s]" % format_set(s_res)) return 1 print("\nTest OK.") return 0
def main(): """ Main function """ qm = QuineMcCluskey(use_xor=True) test_vector = [ { 'res': set(['--^^']) }, { 'res': set(['1--^^']) }, { 'res': set(['-10']), 'ons': [2], 'dnc': [4, 5, 6, 7] }, { 'res': set(['--1--11-', '00000001', '10001000']) }, { 'res': set(['----']), 'ons': [], 'dnc': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'dnc': [10, 11, 12, 13, 14, 15] }, { 'res': set(['----']), 'ons': [1, 3, 5, 7, 9, 11, 13, 15], 'dnc': [0, 2, 4, 6, 8, 10, 12, 14] }, { 'res': set(['--^^']), 'ons': [1, 2, 5, 6, 9, 10, 13, 14] }, { 'res': set(['-------1']) }, { 'res': set(['------^^']) }, { 'res': set(['-----^^^']) }, { 'res': set(['0^^^']) }, { 'res': set(['0~~~']) }, { 'res': set(['^^^^^^^^']) }, { 'res': set(['^^^0', '100-']) }, { 'res': set(['00^-0^^0', '01000001', '10001000']) }, { 'res': set(['^^^00', '111^^']) }, { 'res': set(['---00000^^^^^^^']) }, ] for test in test_vector: s_out = test['res'] if 'ons' in test or 'dnc' in test: if 'ons' in test: ones = test['ons'] else: ones = [] if 'dnc' in test: dontcares = test['dnc'] else: dontcares = [] pretty_ones = "%s" % ones pretty_dontcares = "%s" % dontcares t1 = time.time() s_res = qm.simplify(ones, dontcares) t2 = time.time() else: s_ones = generate_input(s_out) s_dontcares = set() pretty_ones = "[%s]" % format_set(s_ones) pretty_dontcares = "[%s]" % format_set(s_dontcares) t1 = time.time() s_res = qm.simplify_los(s_ones, s_dontcares) t2 = time.time() print() print("ones: %s" % pretty_ones) print("dontcares: %s" % pretty_dontcares) print("res: [%s]" % format_set(s_res)) print( 'time: %0.3f ms, %d comparisons, %d XOR and %d XNOR comparisons' % ((t2 - t1) * 1000.0, qm.profile_cmp, qm.profile_xor, qm.profile_xnor)) if s_res != s_out: print("Error: test failed") print("expected: [%s]" % format_set(s_out)) print("got: [%s]" % format_set(s_res)) return 1 print("\nTest OK.") return 0
POP_Terms = [0xc1, 0xd1, 0xe1, 0xf1] ADD_Terms = [0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87] INC_Terms = [0x04, 0x14, 0x24, 0x34, 0x0C, 0x1C, 0x2C, 0x3C] DEC_Terms = [0x05, 0x15, 0x25, 0x35, 0x0D, 0x1D, 0x2D, 0x3D] DINC_T = [0x03, 0x13, 0x23, 0x33] DADD_T = [0x09, 0x19, 0x29, 0x39] DDEC_T = [0x0B, 0x1B, 0x2B, 0x3B] list_of_reductions = { "Arith_Min_Terms ": Arith_Min_Terms, "Flow_Min_Terms ": Flow_Min_Terms, "Load_Min_Terms ": Load_Min_Terms, "Logical_Min_Terms ": Logical_Min_Terms, "Misc_Min_Terms ": Misc_Min_Terms, "Load_IR_Terms ": Load_IR_Terms, "Load_RR_Terms ": Load_RR_Terms, "POP_Terms ": POP_Terms, "ADD_Terms ": ADD_Terms, "INC_TERMS ": INC_Terms, "DEC_TERMS ": DEC_Terms, "DINC_T ": DINC_T, "DADD_T ": DADD_T, "DDEC_T ": DDEC_T } qm = QuineMcCluskey(use_xor=False) for name in list_of_reductions: res = qm.simplify(list_of_reductions[name], []) print("%25s: [%s]" % (name, format_set(res)))
#!/usr/bin/env/python3 # -*- coding: iso-8859-15 -*- from quine_mccluskey.qm import QuineMcCluskey from random import randint from timer import Timer qm = QuineMcCluskey() def mkquine(numb): twos = set() while len(twos) < numb: x = randint(0, 15) twos.add(x) for n in twos: print("{0:04b}".format(n)) if input() == "": print(qm.simplify(list(twos), [])) if __name__ == "__main__": sentinels = ("-") while True: user_input = input("Number of variables..") if user_input in sentinels: break t = Timer() mkquine(int(user_input))
#!/usr/bin/env python3 # vim:set ts=2 sts=2 sw=2 et ai fdm:marker from quine_mccluskey.qm import QuineMcCluskey import itertools as it import sys #qm = QuineMcCluskey() qm = QuineMcCluskey(use_xor=True) #for o in list( filter( lambda s: len(s) == 2, [qm.simplify(list(_), []) for _ in it.combinations(range(8), 3)])): #for o in list( filter( lambda s: len(s) == 2, [qm.simplify(list(_), []) for _ in it.combinations(range(8), 3)])): seen_expr = set() for o in list( filter(lambda s: len(s) < 4, [ qm.simplify(list(_), []) for _ in it.chain( it.combinations(range(8), 2), it.combinations(range(8), 3), it.combinations(range(8), 4)) ])): s = "" seen_terms = set() for f in sorted(o): #c = it.cycle(('Q[i]', 'Q[j]', 'c')) c = it.cycle('xyc') #c = it.cycle('cyx') op_cnt = 0 op = '&' xors = [] ands = [] for (t, v) in zip(reversed(f), c):