Пример #1
0
Файл: np.py Проект: johnyf/dd
def comparing_two_variable_orders():
    n = 6
    # declare variables
    vrs = ['x{i}'.format(i=i) for i in range(2 * n)]
    bdd = _bdd.BDD()
    bdd.declare(*vrs)
    # equality constraints cause difficulties with BDD size
    expr_1 = r' /\ '.join(
        " x{i} <=> x{j} ".format(i=i, j=(i + n + 1) % (2*n)) for i in range(n))
    u = bdd.add_expr(expr_1)
    expr_2 = r' /\ '.join(
        " x{i} <=> x{j} ".format(i=2 * i, j=(2 * i + 1)) for i in range(n))
    v = bdd.add_expr(expr_2)
    bdd.collect_garbage()
    # an order that yields a small BDD for `expr`
    good_order = ['x{i}'.format(i=i - 1) for i in
        [1, 7, 3, 9, 5, 11,
        2, 8, 4, 10, 6, 12]]
    # an order that yields a large BDD for `expr`
    bad_order = list(vrs)
    # plot
    _bdd.reorder(bdd, list_to_dict(good_order))
    bdd.dump('good.pdf')
    _bdd.reorder(bdd, list_to_dict(bad_order))
    bdd.dump('bad.pdf')
Пример #2
0
def comparing_two_variable_orders():
    n = 6
    # declare variables
    vrs = ['x{i}'.format(i=i) for i in range(2 * n)]
    bdd = _bdd.BDD()
    bdd.declare(*vrs)
    # equality constraints cause difficulties with BDD size
    expr_1 = r' /\ '.join(
        " x{i} <=> x{j} ".format(i=i, j=(i + n + 1) % (2*n)) for i in range(n))
    u = bdd.add_expr(expr_1)
    expr_2 = r' /\ '.join(
        " x{i} <=> x{j} ".format(i=2 * i, j=(2 * i + 1)) for i in range(n))
    v = bdd.add_expr(expr_2)
    bdd.collect_garbage()
    # an order that yields a small BDD for `expr`
    good_order = ['x{i}'.format(i=i - 1) for i in
        [1, 7, 3, 9, 5, 11,
        2, 8, 4, 10, 6, 12]]
    # an order that yields a large BDD for `expr`
    bad_order = list(vrs)
    # plot
    _bdd.reorder(bdd, list_to_dict(good_order))
    bdd.dump('good.pdf')
    _bdd.reorder(bdd, list_to_dict(bad_order))
    bdd.dump('bad.pdf')
def dump_bdd_using_autoref(u, fname):
    # copy from `dd.cudd` to `dd.autoref`
    b = autoref.BDD()
    cudd_bdd = u.bdd
    _bdd.copy_vars(cudd_bdd, b)
    r = _bdd.copy_bdd(u, cudd_bdd, b)
    autoref.reorder(b)
    b.dump(fname, [r])
    print('dumped BDD to file "{f}"'.format(f=fname))
Пример #4
0
def demo_static_reordering():
    """How to invoke reordering explicitly."""
    print(
        '\n' + (50 * '-') +
        '\ndemo of static reordering\n' +
        (50 * '-'))
    bdd = _bdd.BDD()
    bdd.declare('z1', 'z2', 'z3', 'y1', 'y2', 'y3')
    expr = '(z1 /\ y1) \/ (z2 /\ y2) \/ (z3 /\ y3)'
    u = bdd.add_expr(expr)
    print_manager_size(bdd)
    # invoke sifting
    _bdd.reorder(bdd)
    print_manager_size(bdd)
Пример #5
0
def demo_specific_var_order():
    """How to permute the variables to a desired order."""
    print(
        '\n' + (50 * '-') +
        '\ndemo of user-defined variable permutation\n' +
        (50 * '-'))
    bdd = _bdd.BDD()
    bdd.declare('a', 'b', 'c')
    u = bdd.add_expr('(a \/ b) /\ ~ c')
    print_var_levels(bdd)
    # reorder
    desired_order = dict(a=2, b=0, c=1)
    _bdd.reorder(bdd, desired_order)
    # confirm
    print_var_levels(bdd)
Пример #6
0
def bdd_img_special_order(exp, order):
	bdd = _bdd.BDD()
	bdd.configure(reordering = True)	
	order_dict = dict((k.strip(), int(v.strip())) for k,v in 
              (item.split(':') for item in order.split(',')))
	for key, value in order_dict.items():
		bdd.add_var(key)
	u = bdd.add_expr(exp)
	# print(order_dict)
	# print(bdd.vars)
	_bdd.reorder(bdd, order_dict)
	# print(bdd.vars)
	bdd.collect_garbage()
	rand = str(randrange(0, 100))
	bdd.dump('../images/bdd_reorder_special' + rand + '.png')
	global filename_reorder_special
	filename_reorder_special = '../images/bdd_reorder_special' + rand + '.png'
Пример #7
0
def test_reorder_2():
    bdd = _bdd.BDD()
    vrs = [
        'x', 'y', 'z', 'a', 'b', 'c', 'e', 'z1', 'z2', 'z3', 'y1', 'y2', 'y3'
    ]
    bdd = _bdd.BDD()
    bdd.declare(*vrs)
    expr_1 = '(~ z \/ (c /\ b)) /\ e /\ (a /\ (~ x \/ y))'
    # Figs. 6.24, 6.25 Baier 2008
    expr_2 = '(z1 /\ y1) \/ (z2 /\ y2) \/ (z3 /\ y3)'
    u = bdd.add_expr(expr_1)
    v = bdd.add_expr(expr_2)
    bdd.collect_garbage()
    n = len(bdd)
    assert n == 23, n
    _bdd.reorder(bdd)
    n_ = len(bdd)
    assert n > n_, (n, n_)
    bdd.assert_consistent()
Пример #8
0
def test_function_properties():
    bdd = _bdd.BDD()
    bdd.declare('x', 'y')
    order = dict(x=0, y=1)
    _bdd.reorder(bdd, order)
    u = bdd.add_expr('x \/ y')
    y = bdd.add_expr('y')
    # Assigned first because in presence of a bug
    # different property calls could yield
    # different values.
    level = u.level
    assert level == 0, level
    var = u.var
    assert var == 'x', var
    low = u.low
    assert low == y, low
    high = u.high
    assert high == bdd.true, high
    ref = u.ref
    assert ref == 1, ref
    assert not u.negated
    support = u.support
    assert support == {'x', 'y'}, support
Пример #9
0
def comparing_two_variable_orders():
    n = 6
    # declare variables
    vrs = ['x{i}'.format(i=i) for i in range(n)]
    primed_vars = [prime(var) for var in vrs]
    bdd = _bdd.BDD()
    bdd.declare(*(vrs + primed_vars))
    # equality constraints cause difficulties with BDD size
    expr = r' /\ '.join(
        " {var} <=> {var}' ".format(var=var) for var in vrs)
    u = bdd.add_expr(expr)
    bdd.collect_garbage()
    # an order that yields a small BDD for `expr`
    good_order = list()
    for var in vrs:
        good_order.extend([var, prime(var)])
    # an order that yields a large BDD for `expr`
    bad_order = list(vrs)
    bad_order.extend(prime(var) for var in vrs)
    # plot
    _bdd.reorder(bdd, list_to_dict(good_order))
    bdd.dump('good.pdf')
    _bdd.reorder(bdd, list_to_dict(bad_order))
    bdd.dump('bad.pdf')
Пример #10
0
def test_reorder():
    bdd = _bdd.BDD()
    bdd.declare('x', 'y', 'z')
    u = bdd.add_expr('(x /\ y) \/ z')
    _bdd.reorder(bdd)
    assert u in bdd