Running Custom Graph Algorithms

This section explains the API’s ability to compile and run custom algorithms. The APIs for built-in algorithms can be found in our Analyst API section.

Compiling Custom Algorithms

PGX allows users to implement custom graph algorithms with the Green-Marl DSL. PGX then compiles the given graph algorithm, so that it may be executed. The following are the PgxSession methods used to compile custom algorithms:

1session.compile_program(path, overwrite=False)
2program = session.compile_program_code(code, overwrite=False)

The Green-Marl code to compile can either be assigned directly (code) or via a file path. This method returns a CompiledProgram instance that contains a method to run the compiled algorithm as well as signature information.

Running Algorithms

The following generic method in CompiledProgram is used to run compiled algorithms:

1program.run(*argv)

Fundamentally, the method invokes the compiled algorithm with the given arguments (args).

Note

The given args must match the signature of the graph algorithm. Otherwise, PGX throws a type mismatch exception to the client.

The above method returns a Dict object, which contains not only the return value of the algorithm, but also other information such as exception status and execution time.

 1code = "proc program1(graph g; map<vertex, vertex> m) {" \
 2    + "  for(v: g.nodes) {" \
 3    + "    m[v] = v;" \
 4    + "  }" \
 5    + "}"
 6path = self.pgx_test_resources + "/graph_diameter.gm"
 7# label_end: example
 8# The following are the PgxSession methods used to compile custom algorithms:
 9# label_start: compiling_custom_algorithms
10session.compile_program(path, overwrite=False)
11program = session.compile_program_code(code, overwrite=False)
12# label_end: compiling_custom_algorithms
13# Running algorithms
14graph = session.read_graph_with_properties(self.cfg_tiny_het_graph)
15map = graph.create_map("vertex", "vertex")
16program.run(graph, map)