def add_simple_poly(p,i): p=Polynomial(p) if p.is_zero(): return res_p=Polynomial(res.get(i, Polynomial(0, p.ring()))) res[i]=res_p+p if res[i].is_zero(): del res[i] inter=BooleSet(res_p).intersect(BooleSet(p)) add_simple_poly(inter, i+1) return
def add_simple_poly(p, i): p = Polynomial(p) if p.is_zero(): return res_p = Polynomial(res.get(i, Polynomial(0, p.ring()))) res[i] = res_p + p if res[i].is_zero(): del res[i] inter = BooleSet(res_p).intersect(BooleSet(p)) add_simple_poly(inter, i + 1) return
def plot(p, filename, colored=True, format="png", highlight_monomial=None, fontsize=14, template_engine='jinja', landscape=False): """plots ZDD structure to <filename> in format <format> EXAMPLES: >>> r=Ring(1000) >>> x = r.variable >>> plot(x(1)+x(0),"/dev/null", colored=True) >>> plot(x(1)+x(0),"/dev/null", colored=False) """ THICK_PEN = 5 highlight_path = dict() if highlight_monomial: highlight_path = monomial_path_in_zdd(highlight_monomial, p) def display_monomial(m): return unicode(m).replace("*", u"⋅") def penwidth_else(n): if n in highlight_path and highlight_path[n] == ELSE: return THICK_PEN return 1 def penwidth_then(n): if n in highlight_path and highlight_path[n] == THEN: return THICK_PEN return 1 if not colored: color_then = "black" color_else = "black" else: color_then = "red" color_else = "blue" def find_navs(nav): if not nav in nodes: nodes.add(nav) if not nav.constant(): find_navs(nav.then_branch()) find_navs(nav.else_branch()) p = Polynomial(p) nodes = set() nav = p.navigation() find_navs(nav) non_constant_nodes = [n for n in nodes if not n.constant()] node_to_int = dict([(n, i) for (i, n) in enumerate(nodes)]) r = p.ring() def identifier(n): return "n" + str(node_to_int[n]) def label(n): if n.constant(): if n.terminal_one(): return "1" else: return "0" else: return str(r.variable(n.value())) def shape(n): if n.constant(): return "box" else: return "ellipse" renderers = dict(genshi=render_genshi, jinja=render_jinja) dot_input = renderers[template_engine](locals()) if isinstance(dot_input, unicode): dot_input = dot_input.encode('utf-8') process = Popen(["dot", "-T" + format, "-o", filename], stdin=PIPE, stdout=PIPE) process.stdin.write(dot_input) process.stdin.close() process.wait()
def plot(p, filename, colored=True, format="png", highlight_monomial=None, fontsize=14, template_engine='jinja', landscape=False ): """plots ZDD structure to <filename> in format <format> EXAMPLES: >>> r=Ring(1000) >>> x = r.variable >>> plot(x(1)+x(0),"/dev/null", colored=True) >>> plot(x(1)+x(0),"/dev/null", colored=False) """ THICK_PEN = 5 highlight_path = dict() if highlight_monomial: highlight_path = monomial_path_in_zdd(highlight_monomial, p) def display_monomial(m): return unicode(m).replace("*", u"⋅") def penwidth_else(n): if n in highlight_path and highlight_path[n] == ELSE: return THICK_PEN return 1 def penwidth_then(n): if n in highlight_path and highlight_path[n] == THEN: return THICK_PEN return 1 if not colored: color_then = "black" color_else = "black" else: color_then = "red" color_else = "blue" def find_navs(nav): if not nav in nodes: nodes.add(nav) if not nav.constant(): find_navs(nav.then_branch()) find_navs(nav.else_branch()) p = Polynomial(p) nodes = set() nav = p.navigation() find_navs(nav) non_constant_nodes = [n for n in nodes if not n.constant()] node_to_int = dict([(n, i) for (i, n) in enumerate(nodes)]) r = p.ring() def identifier(n): return "n" + str(node_to_int[n]) def label(n): if n.constant(): if n.terminal_one(): return "1" else: return "0" else: return str(r.variable(n.value())) def shape(n): if n.constant(): return "box" else: return "ellipse" renderers = dict(genshi=render_genshi, jinja=render_jinja) dot_input = renderers[template_engine](locals()) if isinstance(dot_input, unicode): dot_input = dot_input.encode('utf-8') process = Popen(["dot", "-T" + format, "-o", filename], stdin=PIPE, stdout=PIPE) process.stdin.write(dot_input) process.stdin.close() process.wait()