function graph(root) {
let nodes = [];
let edges = [];
for(let i=0; i<root._order.length;i++) {
let node = root._order[i];
let index = root._order.indexOf(node);
nodes.push(`n${index} [shape=record label="val ${node.data} | grad ${node.grad}"]`);
if(node._op !== "") {
nodes.push(`n${index}op [label="${node._op}"]`);
edges.push(`n${index}op -> n${index}`);
node._dependencies.forEach(d => {
edges.push(`n${root._order.indexOf(d)} -> n${index}op`);
})
}
}
return edges.join(";\n") + ";\n" + nodes.join(";\n")
}