---
source: dfir_rs/tests/surface_loop.rs
expression: df.meta_graph().unwrap().to_dot(cfg)
---
digraph {
node [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace", style=filled];
edge [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace"];
n1v1 [label="(n1v1) source_iter(POINTS)", shape=invhouse, fillcolor="#88aaff"]
n2v1 [label="(n2v1) map(std::clone::Clone::clone)", shape=invhouse, fillcolor="#88aaff"]
n3v1 [label="(n3v1) source_iter(CENTROIDS)", shape=invhouse, fillcolor="#88aaff"]
n4v1 [label="(n4v1) map(std::clone::Clone::clone)", shape=invhouse, fillcolor="#88aaff"]
n5v1 [label="(n5v1) batch()", shape=invhouse, fillcolor="#88aaff"]
n6v1 [label="(n6v1) batch()", shape=invhouse, fillcolor="#88aaff"]
n7v1 [label="(n7v1) repeat_n(10)", shape=invhouse, fillcolor="#88aaff"]
n8v1 [label="(n8v1) all_once()", shape=invhouse, fillcolor="#88aaff"]
n9v1 [label="(n9v1) union()", shape=invhouse, fillcolor="#88aaff"]
n10v1 [label="(n10v1) tee()", shape=house, fillcolor="#ffff88"]
n11v1 [label="(n11v1) cross_join_multiset()", shape=invhouse, fillcolor="#88aaff"]
n12v1 [label="(n12v1) map(|(point, centroid): ([i32; 2], [i32; 2])| {\l let dist2 = (point[0] - centroid[0]).pow(2) + (point[1] - centroid[1]).pow(2);\l (point, (dist2, centroid))\l})\l", shape=invhouse, fillcolor="#88aaff"]
n13v1 [label="(n13v1) reduce_keyed(|(a_dist2, a_centroid), (b_dist2, b_centroid)| {\l if b_dist2 < *a_dist2 {\l *a_dist2 = b_dist2;\l *a_centroid = b_centroid;\l }\l})\l", shape=invhouse, fillcolor="#88aaff"]
n14v1 [label="(n14v1) map(|(point, (_dist2, centroid))| { (centroid, (point, 1)) })", shape=invhouse, fillcolor="#88aaff"]
n15v1 [label="(n15v1) reduce_keyed(|(p1, n1), (p2, n2): ([i32; 2], i32)| {\l p1[0] += p2[0];\l p1[1] += p2[1];\l *n1 += n2;\l})\l", shape=invhouse, fillcolor="#88aaff"]
n16v1 [label="(n16v1) map(|(_centroid, (p, n)): (_, ([i32; 2], i32))| { [p[0] / n, p[1] / n] })", shape=invhouse, fillcolor="#88aaff"]
n17v1 [label="(n17v1) next_iteration()", shape=invhouse, fillcolor="#88aaff"]
n18v1 [label="(n18v1) inspect(|x| println!(\"centroid: {:?}\", x))", shape=invhouse, fillcolor="#88aaff"]
n19v1 [label="(n19v1) all_iterations()", shape=invhouse, fillcolor="#88aaff"]
n20v1 [label="(n20v1) for_each(|x| result_send.send(x).unwrap())", shape=house, fillcolor="#ffff88"]
n21v1 [label="(n21v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n22v1 [label="(n22v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n23v1 [label="(n23v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n24v1 [label="(n24v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n25v1 [label="(n25v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n26v1 [label="(n26v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n27v1 [label="(n27v1) handoff", shape=parallelogram, fillcolor="#ddddff"]
n1v1 -> n2v1
n3v1 -> n4v1
n2v1 -> n21v1
n4v1 -> n22v1
n7v1 -> n11v1 [label="0"]
n5v1 -> n23v1
n8v1 -> n9v1
n6v1 -> n24v1
n9v1 -> n10v1
n10v1 -> n25v1
n18v1 -> n9v1
n17v1 -> n18v1
n16v1 -> n26v1
n15v1 -> n16v1
n14v1 -> n15v1 [color=red]
n13v1 -> n14v1
n12v1 -> n13v1 [color=red]
n11v1 -> n12v1
n19v1 -> n20v1
n10v1 -> n27v1
n21v1 -> n5v1
n22v1 -> n6v1
n23v1 -> n7v1
n24v1 -> n8v1
n25v1 -> n11v1 [label="1"]
n26v1 -> n17v1
n27v1 -> n19v1
subgraph sg_1v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_1v1\nstratum 0"
subgraph sg_1v1_var_init_points {
cluster=true
label="var init_points"
n1v1
n2v1
}
}
subgraph sg_2v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_2v1\nstratum 0"
subgraph sg_2v1_var_init_centroids {
cluster=true
label="var init_centroids"
n3v1
n4v1
}
}
subgraph loop_1v1 {
cluster=true
fillcolor="#ee88ee"
style=filled
label = loop_1v1
subgraph sg_3v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_3v1\nstratum 1"
subgraph sg_3v1_var_batch_points {
cluster=true
label="var batch_points"
n5v1
}
}
subgraph sg_4v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_4v1\nstratum 1"
subgraph sg_4v1_var_batch_centroids {
cluster=true
label="var batch_centroids"
n6v1
}
}
subgraph sg_7v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_7v1\nstratum 3"
n19v1
n20v1
}
}
subgraph loop_2v1 {
cluster=true
fillcolor="#ee88ee"
style=filled
label = loop_2v1
subgraph sg_5v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_5v1\nstratum 2"
n8v1
subgraph sg_5v1_var_centroids {
cluster=true
label="var centroids"
n9v1
n10v1
}
subgraph sg_5v1_var_cj {
cluster=true
label="var cj"
n17v1
n18v1
}
}
subgraph sg_6v1 {
cluster=true
fillcolor="#dddddd"
style=filled
label = "sg_6v1\nstratum 2"
subgraph sg_6v1_var_cj {
cluster=true
label="var cj"
n11v1
n12v1
n13v1
n14v1
n15v1
n16v1
}
subgraph sg_6v1_var_points {
cluster=true
label="var points"
n7v1
}
}
}
}