meshed.viz
Visualization utilities for the meshed package.
- meshed.viz.add_new_line_if_none(s: str)[source]
Since graphviz 0.18, need to have a newline in body lines. This util is there to address that, adding newlines to body lines when missing.
- meshed.viz.dot_lines_of_func_nodes(objs: Iterable, start_lines=(), end_lines=(), **kwargs)
Get lines generator for the graphviz.DiGraph(body=list(…))
>>> from meshed.base import FuncNode >>> def add(a, b=1): ... return a + b >>> def mult(x, y=3): ... return x * y >>> def exp(mult, a): ... return mult ** a >>> func_nodes = [ ... FuncNode(add, out='x'), ... FuncNode(mult, name='the_product'), ... FuncNode(exp) ... ] >>> lines = list(dot_lines_of_objs(func_nodes)) >>> assert lines == [ ... 'x [label="x" shape="none"]', ... '_add [label="_add" shape="box"]', ... '_add -> x', ... 'a [label="a" shape="none"]', ... 'b [label="b=" shape="none"]', ... 'a -> _add', ... 'b -> _add', ... 'mult [label="mult" shape="none"]', ... 'the_product [label="the_product" shape="box"]', ... 'the_product -> mult', ... 'x [label="x" shape="none"]', ... 'y [label="y=" shape="none"]', ... 'x -> the_product', ... 'y -> the_product', ... 'exp [label="exp" shape="none"]', ... '_exp [label="_exp" shape="box"]', ... '_exp -> exp', ... 'mult [label="mult" shape="none"]', ... 'a [label="a" shape="none"]', ... 'mult -> _exp', ... 'a -> _exp' ... ]
>>> from meshed.util import dot_to_ascii >>> >>> print(dot_to_ascii('\n'.join(lines))) a ─┐ │ │ │ │ │ ▼ │ ┌─────────────┐ │ b= ──▶ │ _add │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ x │ │ │ │ │ │ ▼ │ ┌─────────────┐ │ y= ──▶ │ the_product │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ mult │ │ │ │ │ │ ▼ │ ┌─────────────┐ │ │ _exp │ ◀┘ └─────────────┘ │ │ ▼ exp
- meshed.viz.dot_lines_of_objs(objs: Iterable, start_lines=(), end_lines=(), **kwargs)[source]
Get lines generator for the graphviz.DiGraph(body=list(…))
>>> from meshed.base import FuncNode >>> def add(a, b=1): ... return a + b >>> def mult(x, y=3): ... return x * y >>> def exp(mult, a): ... return mult ** a >>> func_nodes = [ ... FuncNode(add, out='x'), ... FuncNode(mult, name='the_product'), ... FuncNode(exp) ... ] >>> lines = list(dot_lines_of_objs(func_nodes)) >>> assert lines == [ ... 'x [label="x" shape="none"]', ... '_add [label="_add" shape="box"]', ... '_add -> x', ... 'a [label="a" shape="none"]', ... 'b [label="b=" shape="none"]', ... 'a -> _add', ... 'b -> _add', ... 'mult [label="mult" shape="none"]', ... 'the_product [label="the_product" shape="box"]', ... 'the_product -> mult', ... 'x [label="x" shape="none"]', ... 'y [label="y=" shape="none"]', ... 'x -> the_product', ... 'y -> the_product', ... 'exp [label="exp" shape="none"]', ... '_exp [label="_exp" shape="box"]', ... '_exp -> exp', ... 'mult [label="mult" shape="none"]', ... 'a [label="a" shape="none"]', ... 'mult -> _exp', ... 'a -> _exp' ... ]
>>> from meshed.util import dot_to_ascii >>> >>> print(dot_to_ascii('\n'.join(lines))) a ─┐ │ │ │ │ │ ▼ │ ┌─────────────┐ │ b= ──▶ │ _add │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ x │ │ │ │ │ │ ▼ │ ┌─────────────┐ │ y= ──▶ │ the_product │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ mult │ │ │ │ │ │ ▼ │ ┌─────────────┐ │ │ _exp │ ◀┘ └─────────────┘ │ │ ▼ exp