Graph Traversals#
TODO: Expand this into a more detailed description of graph traversals
See pygrgl.get_bfs_order(), pygrgl.get_dfs_order(), and
pygrgl.get_topo_order(). These methods take as input a list of seed nodes to
start traversing from, and emit a node ordering for all nodes reachable from those seeds.
When the pygrgl.GRG.nodes_are_ordered property is True, the NodeIDs themselves provide
a topological order of the graph. That is, iterating from 0...(grg.num_nodes-1) gives you
a bottom-up topological order of the entire graph, and iterating from (grg.num_nodes-1)...0
gives you the top-down topological order. This property should be True for any GRG that has
been read from disk (until it is modified).
In the Python API, often using pygrgl.dot_product() is significantly faster than performing
a traversal (even if you do not need to traverse the entire graph). See the next section
for details on the dot product and when it is applicable.