Spaces:
Running
Running
""" | |
********** | |
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. | |
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) | |