digraph "Compression steps" {
    node [shape = none];

    orc_dataset [label="ORC Graph\nDataset"];
    nodes_csv [label="graph.nodes.csv.zst"];
    labels_csv [label="graph.labels.csv.zst"];
    graph_mph [label="graph.mph"];

    subgraph {
        node [fontcolor=darkgray];
        graph_base [label="graph-base.graph"]
        graph_bfs_order [label="graph-bfs.order"]
        graph_bfs [label="graph-bfs.graph"]
        graph_bfs_transposed [label="graph-bfs-transposed.graph"]
        graph_bfs_simplified [label="graph-bfs-simplified.graph"]
        graph_llp_order [label="graph-llp.order"]
    }

    graph_llp [label="graph.graph"]
    graph_llp_transposed [label="graph-transposed.graph"]
    graph_order [label="graph.order"]
    graph_obl [label="graph.obl"]
    graph_transposed_obl [label="graph-transposed.obl"]
    stats [label="graph.stats"]
    swhidmap [label="graph.node2swhid.bin"]
    typemap [label="graph.node2type.bin"]
    persons_csv [label="graph.persons.csv.zst"];
    persons_mph [label="graph.persons.mph"];
    node_properties [label="graph.property.*"];
    labels_mph [label="graph.labels.mph"];
    labels_fcl [label="graph.labels.fcl.*"];
    graph_labelled [label="graph-labelled.*"];
    graph_transposed_labelled [label="graph-transposed-labelled.*"];
    graph_labelled_obl [label="graph-labelled.labelobl"];
    graph_transposed_labelled_obl [label="graph-transposed-labelled.labelobl"];

    subgraph {
        node [shape=box, fontname="Courier New"];
        EXTRACT_NODES;
        MPH;
        BV;
        BFS;
        PERMUTE_BFS;
        TRANSPOSE_BFS;
        SIMPLIFY;
        LLP;
        PERMUTE_LLP;
        COMPOSE_ORDERS;
        STATS;
        TRANSPOSE;
        OBL;
        TRANSPOSE_OBL;
        NODE_MAP;
        EXTRACT_PERSONS;
        MPH_PERSONS;
        NODE_PROPERTIES;
        MPH_LABELS;
        FCL_LABELS;
        EDGE_LABELS;
        EDGE_LABELS_OBL;
        EDGE_LABELS_TRANSPOSE_OBL;
    }


    orc_dataset -> EXTRACT_NODES;
    EXTRACT_NODES -> nodes_csv;
    EXTRACT_NODES -> labels_csv;
    nodes_csv -> MPH -> graph_mph;
    graph_mph -> BV;
    orc_dataset -> BV -> graph_base;
    graph_base -> BFS -> graph_bfs_order;
    graph_bfs_order -> PERMUTE_BFS;
    graph_base -> PERMUTE_BFS -> graph_bfs;
    graph_bfs -> TRANSPOSE_BFS -> graph_bfs_transposed;
    graph_bfs_transposed -> SIMPLIFY;
    graph_bfs -> SIMPLIFY -> graph_bfs_simplified;
    graph_bfs_simplified -> LLP -> graph_llp_order;
    graph_llp_order -> PERMUTE_LLP;
    graph_bfs -> PERMUTE_LLP -> graph_llp;
    graph_bfs_order -> COMPOSE_ORDERS;
    graph_llp_order -> COMPOSE_ORDERS -> graph_order;
    graph_llp -> TRANSPOSE -> graph_llp_transposed;
    graph_llp -> OBL -> graph_obl;
    graph_llp_transposed -> TRANSPOSE_OBL -> graph_transposed_obl;
    graph_llp -> STATS -> stats;
    nodes_csv -> NODE_MAP;
    graph_mph -> NODE_MAP;
    graph_order -> NODE_MAP;
    NODE_MAP -> swhidmap;
    NODE_MAP -> typemap;
    orc_dataset -> EXTRACT_PERSONS -> persons_csv;
    persons_csv -> MPH_PERSONS -> persons_mph;
    orc_dataset -> NODE_PROPERTIES;
    persons_mph -> NODE_PROPERTIES;
    graph_mph -> NODE_PROPERTIES;
    graph_order -> NODE_PROPERTIES;
    swhidmap -> NODE_PROPERTIES;
    NODE_PROPERTIES -> node_properties;
    labels_csv -> MPH_LABELS -> labels_mph;
    labels_mph -> FCL_LABELS;
    labels_csv -> FCL_LABELS -> labels_fcl;
    orc_dataset -> EDGE_LABELS;
    labels_mph -> EDGE_LABELS;
    graph_llp -> EDGE_LABELS;
    graph_llp_transposed -> EDGE_LABELS;
    graph_mph -> EDGE_LABELS;
    graph_order -> EDGE_LABELS;
    swhidmap -> EDGE_LABELS;
    EDGE_LABELS -> graph_labelled;
    EDGE_LABELS -> graph_transposed_labelled;
    graph_labelled -> EDGE_LABELS_OBL -> graph_labelled_obl;
    graph_transposed_labelled -> EDGE_LABELS_TRANSPOSE_OBL -> graph_transposed_labelled_obl;
}
