Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
Archivo: test.py Proyecto: joyjitc/lab
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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.")
Ejemplo n.º 5
0
Archivo: test.py Proyecto: joyjitc/lab
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
Ejemplo n.º 6
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
Ejemplo n.º 7
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)))
Ejemplo n.º 8
0
#!/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))
Ejemplo n.º 9
0
#!/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):