Source code for benderslib.errors
# coding:utf-8
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2021-2026 Peng-Hui Guo <[email protected]>
from . import __url__
[docs]
class BendersError(Exception):
"""Base class for exceptions in benderslib."""
code = None
description = "A generic error in the BendersLib library."
def __init__(self, message=None, **kwargs):
if message is None:
message = self.description
self.message = message
self.context = kwargs
super().__init__(self.message)
def __str__(self):
code_str = f"[{self.code}] " if self.code else ""
context_str = ""
if self.context:
context_str = " Context: " + ", ".join(f"{k}={v}" for k, v in self.context.items())
return f"{code_str}{self.message}{context_str}\nSee {self._help_url}"
@property
def _help_url(self):
"""URL to the documentation for this error type.
For example:
https://benders.dev/api/errors.html#benderslib.errors.BendersError
"""
return __url__ + "/api/errors.html#benderslib.errors." + self.__class__.__name__
# Benders Solver Errors
# Solver Backends Errors
[docs]
class BendersBackendError(BendersError):
"""Exception raised for errors in the backend solver."""
code = 2000
description = "An error occurred in the backend solver."
[docs]
class BendersNotImplementedError(BendersBackendError, NotImplementedError):
"""Exception raised for unimplemented features or when the underlying solver does not support the functionality.
This can be caused by:
- Using a Constraint Programming (CP) solver for master problems.
- Using CP solver for subproblems in dual-based Benders methods.
- The underlying solvers lacking certain features required by BendersLib.
"""
code = 2001
description = "This is not yet implemented in BendersLib."
# Master Problem Errors
[docs]
class BendersMasterError(BendersError):
"""Exception raised for errors in the master problem."""
code = 3000
description = "An error occurred in the master problem."
[docs]
class UnexpectedMasterStatusError(BendersMasterError):
"""Exception raised when the master problem solver returns an unexpected status."""
code = 3001
description = "The master problem solver returned an unexpected status."
[docs]
class MismatchedProbabilityError(BendersMasterError):
"""Exception raised when the number of estimator variables does not match the number of scenarios."""
code = 3002
description = "The number of estimator variables does not match the number of scenarios."
# Subproblem Errors
[docs]
class UnexpectedSubStatusError(BendersSubError):
"""Exception raised when the subproblem solver returns an unexpected status."""
code = 4001
description = "The subproblem solver returned an unexpected status."
# Benders Cut Errors
[docs]
class BendersCutError(BendersError):
"""Exception raised for errors in the cut generation."""
code = 5000
description = "An error occurred during cut generation."
[docs]
class UnsupportedCutError(BendersCutError):
"""Exception raised when an unsupported cut type is used."""
code = 5001
description = "The specified cut type is not supported."
# Callback Errors
[docs]
class BendersCallbackError(BendersError):
"""Exception raised for errors in the callback functions."""
code = 6000
description = "An error occurred in a callback function."