本文整理汇总了Python中dd.bdd.BDD类的典型用法代码示例。如果您正苦于以下问题:Python BDD类的具体用法?Python BDD怎么用?Python BDD使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BDD类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_image_rename_map_checks
def test_image_rename_map_checks():
ordering = {'x': 0, 'xp': 1,
'y': 2, 'yp': 3,
'z': 4, 'zp': 5}
bdd = BDD(ordering)
# non-adjacent
rename = {0: 2, 3: 4}
qvars = set()
r = _bdd.image(1, 1, rename, qvars, bdd)
assert r == 1, r
r = _bdd.preimage(1, 1, rename, qvars, bdd)
assert r == 1, r
# overlapping keys and values
rename = {0: 1, 1: 2}
with nt.assert_raises(AssertionError):
_bdd.image(1, 1, rename, qvars, bdd)
with nt.assert_raises(AssertionError):
_bdd.preimage(1, 1, rename, qvars, bdd)
# may be in support after quantification ?
trans = bdd.add_expr('x -> xp')
source = bdd.add_expr('x & y')
qvars = {0}
rename = {1: 0, 3: 2}
with nt.assert_raises(AssertionError):
_bdd.image(trans, source, rename, qvars, bdd)
# in support of `target` ?
qvars = set()
target = bdd.add_expr('y & yp')
rename = {2: 3}
with nt.assert_raises(AssertionError):
_bdd.preimage(trans, target, rename, qvars, bdd)
示例2: test_level_to_variable
def test_level_to_variable():
ordering = {'x': 0, 'y': 1}
g = BDD(ordering)
assert g.var_at_level(0) == 'x'
assert g.var_at_level(1) == 'y'
with nt.assert_raises(AssertionError):
g.var_at_level(10)
示例3: test_elimination
def test_elimination():
ordering = {'x': 0, 'y': 1}
g = BDD(ordering)
g.roots.add(2)
# high == low, so node 2 is redundant
g._succ[2] = (0, 3, 3)
g._succ[3] = (1, -1, 1)
h = g.reduction()
assert set(h) == {1, 2}
示例4: test_isomorphism
def test_isomorphism():
ordering = {'x': 0}
g = BDD(ordering)
g.roots.update([2, 3])
g._succ[2] = (0, -1, 1)
g._succ[3] = (0, -1, 1)
h = g.reduction()
assert set(h) == {1, 2}, set(h)
assert 0 not in h
assert h._succ[1] == (1, None, None)
assert h._succ[2] == (0, -1, 1)
assert h.roots == {2}
示例5: test_add_expr
def test_add_expr():
ordering = {'x': 0, 'y': 1}
g = BDD(ordering)
# x
ix = ordering['x']
u = g.add_expr('x')
h = ref_var(ix)
compare(u, g, h)
# x and y
u = g.add_expr('x && y')
h = ref_x_and_y()
compare(u, g, h)
示例6: test_collect_garbage
def test_collect_garbage():
# all nodes are garbage
g = BDD({'x': 0, 'y': 1})
u = g.add_expr('x & y')
n = len(g)
assert n == 4, n
uref = g._ref[abs(u)]
assert uref == 0, uref
_, v, w = g._succ[abs(u)]
vref = g._ref[abs(v)]
wref = g._ref[w]
assert vref == 5, vref
assert wref == 1, wref
g.collect_garbage()
n = len(g)
assert n == 1, n
assert u not in g, g._succ
assert w not in g, g._succ
# some nodes not garbage
# projection of x is garbage
g = BDD({'x': 0, 'y': 1})
u = g.add_expr('x & y')
n = len(g)
assert n == 4, n
g._ref[abs(u)] += 1
uref = g._ref[abs(u)]
assert uref == 1, uref
g.collect_garbage()
n = len(g)
assert n == 3, n
示例7: x_and_not_y
def x_and_not_y():
# remember:
# 2 = !(x & !y)
# -2 = x & !y
ordering = {'x': 0, 'y': 1}
g = BDD(ordering)
u = 3
v = -1
w = 1
t = (1, v, w)
g._succ[u] = t
g._pred[t] = u
g._ref[abs(v)] += 1
g._ref[abs(w)] += 1
g._ref[abs(u)] = 0
u = 2
v = 1
w = 3
t = (0, v, w)
g._succ[u] = t
g._pred[t] = u
g._ref[abs(v)] += 1
g._ref[abs(w)] += 1
g._ref[abs(u)] = 0
g._min_free = 4
return g
示例8: test_rename
def test_rename():
ordering = {'x': 0, 'xp': 1}
g = BDD(ordering)
x = g.add_expr('x')
xp = g.add_expr('xp')
dvars = {'x': 'xp'}
xrenamed = _bdd.rename(x, g, dvars)
assert xrenamed == xp, xrenamed
ordering = {'x': 0, 'xp': 1,
'y': 2, 'yp': 3,
'z': 4, 'zp': 5}
g = BDD(ordering)
u = g.add_expr('x && y && ! z')
dvars = {'x': 'xp', 'y': 'yp', 'z': 'zp'}
urenamed = _bdd.rename(u, g, dvars)
up = g.add_expr('xp && yp && ! zp')
assert urenamed == up, urenamed
# assertion violations
# non-neighbors
dvars = {'x': 'yp'}
r = _bdd.rename(u, g, dvars)
r_ = g.add_expr('yp && y && ! z')
assert r == r_, (r, r_)
# u not in bdd
dvars = {'x': 'xp'}
with nt.assert_raises(AssertionError):
_bdd.rename(1000, g, dvars)
# y essential for u
dvars = {'xp': 'y'}
with nt.assert_raises(AssertionError):
_bdd.rename(u, g, dvars)
# old and new vars intersect
dvars = {'x': 'x'}
with nt.assert_raises(AssertionError):
_bdd.rename(u, g, dvars)
示例9: test_reduce_combined
def test_reduce_combined():
"""Fig.5 in 1986 Bryant TOC"""
ordering = {'x': 0, 'y': 1, 'z': 2}
g = BDD(ordering)
g.roots.add(2)
g._succ[2] = (0, 3, 4)
g._succ[3] = (1, -1, 5)
g._succ[4] = (1, 5, 6)
g._succ[5] = (2, -1, 1)
g._succ[6] = (2, -1, 1)
h = g.reduction()
assert 1 in h
assert ordering == h.ordering
r = nx.MultiDiGraph()
r.add_node(1, level=3)
r.add_node(2, level=0)
r.add_node(3, level=1)
r.add_node(4, level=2)
r.add_edge(2, 3, value=False, complement=False)
r.add_edge(2, 4, value=True, complement=False)
r.add_edge(3, 4, value=True, complement=False)
r.add_edge(3, 1, value=False, complement=True)
r.add_edge(4, 1, value=False, complement=True)
r.add_edge(4, 1, value=True, complement=False)
(u, ) = h.roots
compare(u, h, r)
示例10: test_bdd_to_mdd
def test_bdd_to_mdd():
from dd.bdd import BDD
ordering = {'x': 0, 'y': 1}
bdd = BDD(ordering)
u = bdd.add_expr('x & ! y')
bdd.incref(u)
# BDD -> MDD
dvars = dict(
x=dict(level=1, len=2, bitnames=['x']),
y=dict(level=0, len=2, bitnames=['y']))
mdd, umap = dd.mdd.bdd_to_mdd(bdd, dvars)
# pd = dd.mdd.to_pydot(mdd)
# pd.write_pdf('mdd.pdf')
# bdd.dump('bdd.pdf')
v = umap[abs(u)]
if u < 0:
v = -v
print(v)
示例11: test_dump_load_manager
def test_dump_load_manager():
prefix = 'test_dump_load_manager'
g = BDD({'x': 0, 'y': 1})
e = 'x & !y'
u = g.add_expr(e)
g.incref(u)
fname = prefix + '.p'
g._dump_manager(fname)
h = g._load_manager(fname)
assert g.assert_consistent()
u_ = h.add_expr(e)
assert u == u_, (u, u_)
示例12: test_descendants
def test_descendants():
ordering = dict(x=0, y=1)
b = BDD(ordering)
u = b.add_expr('x && y')
v = b.add_expr('x | y')
roots = [u, v]
nodes = b.descendants(roots)
nodes_u = b.descendants([u])
nodes_v = b.descendants([v])
assert u in nodes_u, nodes_u
assert v in nodes_v, nodes_v
assert u in nodes, nodes
assert v in nodes, nodes
assert 1 in nodes_u, nodes_u
assert 1 in nodes_v, nodes_v
assert 1 in nodes, nodes
assert len(nodes_u) == 3, nodes_u
assert len(nodes_v) == 3, nodes_v
assert nodes_u != nodes_v, (nodes_u, nodes_v)
assert len(nodes) == 4, nodes
assert nodes == nodes_u.union(nodes_v), (
nodes, b._succ)
# no roots
roots = []
nodes = b.descendants(roots)
assert len(nodes) == 0, nodes
示例13: test_sat_iter
def test_sat_iter():
# x & y
g = x_and_y()
u = 2
s = [{'x': 1, 'y': 1}]
compare_iter_to_list_of_sets(u, g, s)
# x | y
g = x_or_y()
u = 2
s = [{'x': 1}, {'x': 0, 'y': 1}]
compare_iter_to_list_of_sets(u, g, s)
# x & !y
g = x_and_not_y()
u = -2
s = [{'x': 1, 'y': 0}]
compare_iter_to_list_of_sets(u, g, s)
# gaps in order
order = {'x': 0, 'y': 1, 'z': 2}
bdd = BDD(order)
u = bdd.add_expr('x & z')
(m,) = bdd.sat_iter(u)
assert m == {'x': 1, 'z': 1}, m
示例14: two_vars_xy
def two_vars_xy():
ordering = {'x': 0, 'y': 1}
g = BDD(ordering)
u = 2
t = (0, -1, 1)
g._succ[u] = t
g._pred[t] = u
g._ref[u] = 1
u = 3
t = (1, -1, 1)
g._succ[u] = t
g._pred[t] = u
g._ref[u] = 1
g._min_free = u + 1
return g
示例15: load
def load(fname):
"""Return a `BDD` loaded from DDDMP file `fname`.
If no `.orderedvarnames` appear in the file,
then `.suppvarnames` and `.permids` are used instead.
In the second case, the variable levels contains blanks.
To avoid blanks, the levels are re-indexed here.
This has no effect if `.orderedvarnames` appears in the file.
DDDMP files are dumped by [CUDD](http://vlsi.colorado.edu/~fabio/CUDD/).
"""
parser = Parser()
bdd_succ, n_vars, ordering, roots = parser.parse(fname)
# reindex to ensure no blanks
perm = {k: var for var, k in ordering.iteritems()}
perm = {i: perm[k] for i, k in enumerate(sorted(perm))}
new_ordering = {var: k for k, var in perm.iteritems()}
old2new = {ordering[var]: new_ordering[var] for var in ordering}
# convert
bdd = BDD(new_ordering)
umap = {-1: -1, 1: 1}
for j in xrange(len(new_ordering) - 1, -1, -1):
for u, (k, v, w) in bdd_succ.iteritems():
# terminal ?
if v is None:
assert w is None, w
continue
# non-terminal
i = old2new[k]
if i != j:
continue
p, q = umap[abs(v)], umap[w]
if v < 0:
p = -p
r = bdd.find_or_add(i, p, q)
umap[abs(u)] = r
bdd.roots.update(roots)
return bdd