123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- """
- **********
- 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)
|