dfir_rs 0.16.0

DFIR runtime for Rust, used by Hydro.
Documentation
---
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
            }
        }
    }
}