def compile_cpp_pie_app()

in k8s/utils/precompile.py [0:0]


def compile_cpp_pie_app():
    targets = []
    vertex_map_templates = [
        "vineyard::ArrowVertexMap<{},{}>",
        "vineyard::ArrowLocalVertexMap<{},{}>",
    ]

    lv = vertex_map_templates[0].format(internal_type("int64_t"), "uint64_t")
    sv = vertex_map_templates[0].format(internal_type("std::string"), "uint64_t")

    # 1. arrow fragment
    property_template = "vineyard::ArrowFragment<{},{},{},false>"

    lu = property_template.format("int64_t", "uint64_t", lv)
    su = property_template.format("std::string", "uint64_t", sv)
    # no builtin app can run on the arrow property graph

    # 2. projected arrow fragment
    project_template = "gs::ArrowProjectedFragment<{},{},{},{},{},false>"
    psuee = project_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "grape::EmptyType", sv
    )
    psuel = project_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "int64_t", sv
    )
    psued = project_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "double", sv
    )
    psull = project_template.format("std::string", "uint64_t", "int64_t", "int64_t", sv)
    psusl = project_template.format(
        "std::string", "uint64_t", "std::string", "int64_t", sv
    )
    psusu = project_template.format(
        "std::string", "uint64_t", "std::string", "uint64_t", sv
    )

    plull = project_template.format("int64_t", "uint64_t", "int64_t", "int64_t", lv)
    pluee = project_template.format(
        "int64_t", "uint64_t", "grape::EmptyType", "grape::EmptyType", lv
    )
    pluel = project_template.format(
        "int64_t", "uint64_t", "grape::EmptyType", "int64_t", lv
    )
    plued = project_template.format(
        "int64_t", "uint64_t", "grape::EmptyType", "double", lv
    )
    targets.extend(
        [
            ("pagerank", psuee),
            ("pagerank", pluee),
            ("pagerank", plull),
            ("wcc", psuee, ["-DWCC_USE_GID=ON"]),
            ("wcc", psuel, ["-DWCC_USE_GID=ON"]),
            ("wcc", psued, ["-DWCC_USE_GID=ON"]),
            ("wcc", psull, ["-DWCC_USE_GID=ON"]),
            ("wcc", psusl, ["-DWCC_USE_GID=ON"]),
            ("wcc", psusu, ["-DWCC_USE_GID=ON"]),
            ("wcc", plull),
            ("wcc", pluee),
            ("wcc", pluel),
            ("wcc", plued),
            ("sssp", psuel),
            ("sssp", psued),
            ("sssp", pluel),
            ("sssp", plued),
            ("sssp", plull),
            ("sssp", psull),
            ("cdlp", psuee),
            ("cdlp", pluee),
            ("cdlp", plull),
            ("bfs", psuee),
            ("bfs", pluee),
            ("bfs", plull),
            ("kcore", psuee),
            ("kcore", pluee),
            ("kshell", plull),
            ("kshell", pluee),
            ("kshell", psuee),
            ("hits", psuee),
            ("hits", pluee),
            ("hits", plull),
            ("triangles", psuee),
            ("triangles", pluee),
            ("triangles", plull),
            ("clustering", psuee),
            ("clustering", pluee),
            ("clustering", plull),
            ("degree_centrality", psuee),
            ("degree_centrality", pluee),
            ("degree_centrality", plull),
            ("eigenvector_centrality", plull),
            ("eigenvector_centrality", psued),
            ("eigenvector_centrality", psuel),
            ("eigenvector_centrality", plued),
            ("eigenvector_centrality", pluel),
            ("katz_centrality", psuee),
            ("katz_centrality", pluee),
            ("katz_centrality", plull),
            ("is_simple_path", plull),
            ("louvain", plull),
            ("sssp_has_path", plull),
        ]
    )

    # 3. flatten fragment
    flatten_template = "gs::ArrowFlattenedFragment<{},{},{},{}>"
    fsuee = flatten_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "grape::EmptyType"
    )
    fsuel = flatten_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "int64_t"
    )
    fsued = flatten_template.format(
        "std::string", "uint64_t", "grape::EmptyType", "double"
    )
    fluee = flatten_template.format(
        "int64_t", "uint64_t", "grape::EmptyType", "grape::EmptyType"
    )
    fluel = flatten_template.format(
        "int64_t", "uint64_t", "grape::EmptyType", "int64_t"
    )
    flued = flatten_template.format("int64_t", "uint64_t", "grape::EmptyType", "double")
    targets.extend(
        [
            # ("pagerank", fsuee), pagerank cannot run on flatten fragment
            # ("pagerank", fluee),
            ("sssp", fsuel),
            ("sssp", fsued),
            ("sssp", fluel),
            ("sssp", flued),
            ("cdlp", fsuee),
            ("cdlp", fluee),
            ("kcore", fsuee),
            ("kcore", fluee),
            ("triangles", fsuee),
            ("triangles", fluee),
            ("sssp_projected", fsuee),
            ("sssp_projected", fsued),
            ("sssp_projected", fluee),
            ("sssp_projected", flued),
            ("sssp_path", fsuee),
            ("sssp_path", fluee),
            ("sssp_has_path", fsuee),
            ("sssp_has_path", fluee),
            ("sssp_average_length", fsuee),
            ("sssp_average_length", fsued),
            ("sssp_average_length", fluee),
            ("sssp_average_length", flued),
            ("hits", fsuee),
            ("hits", fluee),
            ("degree_centrality", fsuee),
            ("degree_centrality", fluee),
            ("eigenvector_centrality", fsuee),
            ("eigenvector_centrality", fsued),
            ("eigenvector_centrality", fluee),
            ("eigenvector_centrality", flued),
            ("katz_centrality", fsuee),
            ("katz_centrality", fsued),
            ("katz_centrality", fluee),
            ("katz_centrality", flued),
            ("bfs_generic", fsuee),
            ("bfs_generic", fluee),
            ("clustering", fsuee),
            ("clustering", fluee),
            ("transitivity", fsuee),
            ("transitivity", fluee),
            ("avg_clustering", fsuee),
            ("avg_clustering", fluee),
        ]
    )

    # 4. dynamic fragment
    dynamic_template = "gs::DynamicProjectedFragment<{},{}>"
    dee = dynamic_template.format("grape::EmptyType", "grape::EmptyType")
    ded = dynamic_template.format("grape::EmptyType", "double")
    dle = dynamic_template.format("int64_t", "grape::EmptyType")
    dde = dynamic_template.format("double", "grape::EmptyType")
    targets.extend(
        [
            ("sssp_projected", dee),
            ("sssp_projected", ded),
            ("sssp_path", dee),
            ("sssp_has_path", dee),
            ("sssp_average_length", dee),
            ("sssp_average_length", ded),
            ("hits", dee),
            ("degree_centrality", dee),
            ("eigenvector_centrality", dee),
            ("eigenvector_centrality", ded),
            ("katz_centrality", dee),
            ("katz_centrality", ded),
            ("bfs_generic", dee),
            ("kcore", dee),
            ("lcc", dee),
            ("clustering", dee),
            ("triangles", dee),
            ("transitivity", dee),
            ("avg_clustering", dee),
            ("pagerank_nx", dee),
            ("pagerank_nx", ded),
            ("degree_assortativity_coefficient", dee),
            ("node_boundary", dee),
            ("edge_boundary", dee),
            ("average_degree_connectivity", dee),
            ("average_degree_connectivity", ded),
            ("attribute_assortativity_coefficient", dle),
            ("attribute_assortativity_coefficient", dde),
        ]
    )

    with multiprocessing.Pool() as pool:
        pool.map(cmake_app, targets)