Source code for rustworkx.visit

# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.


[docs]class StopSearch(Exception): """Stop graph traversal""" pass
[docs]class PruneSearch(Exception): """Prune part of the search tree while traversing a graph.""" pass
[docs]class BFSVisitor: """A visitor object that is invoked at the event-points inside the :func:`~rustworkx.bfs_search` algorithm. By default, it performs no action, and should be used as a base class in order to be useful. """
[docs] def discover_vertex(self, v): """ This is invoked when a vertex is encountered for the first time. """ return
[docs] def finish_vertex(self, v): """ This is invoked on vertex `v` after all of its out edges have been examined. """ return
[docs] def tree_edge(self, e): """ This is invoked on each edge as it becomes a member of the edges that form the search tree. """ return
[docs] def non_tree_edge(self, e): """ This is invoked on back or cross edges for directed graphs and cross edges for undirected graphs. """ return
[docs] def gray_target_edge(self, e): """ This is invoked on the subset of non-tree edges whose target vertex is colored gray at the time of examination. The color gray indicates that the vertex is currently in the queue. """ return
[docs] def black_target_edge(self, e): """ This is invoked on the subset of non-tree edges whose target vertex is colored black at the time of examination. The color black indicates that the vertex has been removed from the queue. """ return
[docs]class DFSVisitor: """A visitor object that is invoked at the event-points inside the :func:`~rustworkx.dfs_search` algorithm. By default, it performs no action, and should be used as a base class in order to be useful. """
[docs] def discover_vertex(self, v, t): """ This is invoked when a vertex is encountered for the first time. Together we report the discover time of vertex `v`. """ return
[docs] def finish_vertex(self, v, t): """ This is invoked on vertex `v` after `finish_vertex` has been called for all the vertices in the DFS-tree rooted at vertex `v`. If vertex `v` is a leaf in the DFS-tree, then the `finish_vertex` function is called on `v` after all the out-edges of `v` have been examined. Together we report the finish time of vertex `v`. """ return
[docs] def tree_edge(self, e): """ This is invoked on each edge as it becomes a member of the edges that form the search tree. """ return
[docs] def back_edge(self, e): """ This is invoked on the back edges in the graph. For an undirected graph there is some ambiguity between tree edges and back edges since the edge :math:`(u, v)` and :math:`(v, u)` are the same edge, but both the `tree_edge()` and `back_edge()` functions will be invoked. One way to resolve this ambiguity is to record the tree edges, and then disregard the back-edges that are already marked as tree edges. An easy way to record tree edges is to record predecessors at the `tree_edge` event point. """ return
[docs] def forward_or_cross_edge(self, e): """ This is invoked on forward or cross edges in the graph. In an undirected graph this method is never called. """ return
[docs]class DijkstraVisitor: """A visitor object that is invoked at the event-points inside the :func:`~rustworkx.dijkstra_search` algorithm. By default, it performs no action, and should be used as a base class in order to be useful. """
[docs] def discover_vertex(self, v, score): """ This is invoked when a vertex is encountered for the first time and it's popped from the queue. Together with the node, we report the optimal distance of the node. """ return
[docs] def finish_vertex(self, v): """ This is invoked on vertex `v` after all of its out edges have been examined. """ return
[docs] def examine_edge(self, edge): """ This is invoked on every out-edge of each vertex after it is discovered. """ return
[docs] def edge_relaxed(self, edge): """ Upon examination, if the distance of the target of the edge is reduced, this event is emitted. """ return
[docs] def edge_not_relaxed(self, edge): """ Upon examination, if the edge is not relaxed, this event is emitted. """ return