| """ |
| ********** |
| Exceptions |
| ********** |
| |
| Base exceptions and errors for NetworkX. |
| """ |
|
|
| __all__ = [ |
| "HasACycle", |
| "NodeNotFound", |
| "PowerIterationFailedConvergence", |
| "ExceededMaxIterations", |
| "AmbiguousSolution", |
| "NetworkXAlgorithmError", |
| "NetworkXException", |
| "NetworkXError", |
| "NetworkXNoCycle", |
| "NetworkXNoPath", |
| "NetworkXNotImplemented", |
| "NetworkXPointlessConcept", |
| "NetworkXUnbounded", |
| "NetworkXUnfeasible", |
| ] |
|
|
|
|
| class NetworkXException(Exception): |
| """Base class for exceptions in NetworkX.""" |
|
|
|
|
| class NetworkXError(NetworkXException): |
| """Exception for a serious error in NetworkX""" |
|
|
|
|
| class NetworkXPointlessConcept(NetworkXException): |
| """Raised when a null graph is provided as input to an algorithm |
| that cannot use it. |
| |
| The null graph is sometimes considered a pointless concept [1]_, |
| thus the name of the exception. |
| |
| Notes |
| ----- |
| Null graphs and empty graphs are often used interchangeably but they |
| are well defined in NetworkX. An ``empty_graph`` is a graph with ``n`` nodes |
| and 0 edges, and a ``null_graph`` is a graph with 0 nodes and 0 edges. |
| |
| References |
| ---------- |
| .. [1] Harary, F. and Read, R. "Is the Null Graph a Pointless |
| Concept?" In Graphs and Combinatorics Conference, George |
| Washington University. New York: Springer-Verlag, 1973. |
| |
| """ |
|
|
|
|
| class NetworkXAlgorithmError(NetworkXException): |
| """Exception for unexpected termination of algorithms.""" |
|
|
|
|
| class NetworkXUnfeasible(NetworkXAlgorithmError): |
| """Exception raised by algorithms trying to solve a problem |
| instance that has no feasible solution.""" |
|
|
|
|
| class NetworkXNoPath(NetworkXUnfeasible): |
| """Exception for algorithms that should return a path when running |
| on graphs where such a path does not exist.""" |
|
|
|
|
| class NetworkXNoCycle(NetworkXUnfeasible): |
| """Exception for algorithms that should return a cycle when running |
| on graphs where such a cycle does not exist.""" |
|
|
|
|
| class HasACycle(NetworkXException): |
| """Raised if a graph has a cycle when an algorithm expects that it |
| will have no cycles. |
| |
| """ |
|
|
|
|
| class NetworkXUnbounded(NetworkXAlgorithmError): |
| """Exception raised by algorithms trying to solve a maximization |
| or a minimization problem instance that is unbounded.""" |
|
|
|
|
| class NetworkXNotImplemented(NetworkXException): |
| """Exception raised by algorithms not implemented for a type of graph.""" |
|
|
|
|
| class NodeNotFound(NetworkXException): |
| """Exception raised if requested node is not present in the graph""" |
|
|
|
|
| class AmbiguousSolution(NetworkXException): |
| """Raised if more than one valid solution exists for an intermediary step |
| of an algorithm. |
| |
| In the face of ambiguity, refuse the temptation to guess. |
| This may occur, for example, when trying to determine the |
| bipartite node sets in a disconnected bipartite graph when |
| computing bipartite matchings. |
| |
| """ |
|
|
|
|
| class ExceededMaxIterations(NetworkXException): |
| """Raised if a loop iterates too many times without breaking. |
| |
| This may occur, for example, in an algorithm that computes |
| progressively better approximations to a value but exceeds an |
| iteration bound specified by the user. |
| |
| """ |
|
|
|
|
| class PowerIterationFailedConvergence(ExceededMaxIterations): |
| """Raised when the power iteration method fails to converge within a |
| specified iteration limit. |
| |
| `num_iterations` is the number of iterations that have been |
| completed when this exception was raised. |
| |
| """ |
|
|
| def __init__(self, num_iterations, *args, **kw): |
| msg = f"power iteration failed to converge within {num_iterations} iterations" |
| exception_message = msg |
| superinit = super().__init__ |
| superinit(self, exception_message, *args, **kw) |
|
|