import warnings as custom_warnings
import inspect
import functools
# Monkeypatch the print of warning so we can customize them
custom_warnings.formatwarning = my_format_warning
[docs]
class NegativeBackground(RuntimeError):
pass
[docs]
class TriggerDoesNotExist(RuntimeError):
pass
[docs]
class ForbiddenRegionOfParameterSpace(RuntimeWarning):
pass
[docs]
class CppInterfaceNotAvailable(ImportWarning):
pass
[docs]
class CannotImportPlugin(ImportWarning):
pass
[docs]
class LikelihoodIsInfinite(RuntimeWarning):
pass
[docs]
class FitFailed(RuntimeError):
pass
[docs]
class ConfigurationFileCorrupt(RuntimeWarning):
pass
[docs]
class BadCovariance(RuntimeError):
pass
[docs]
class MinLargerMax(RuntimeError):
pass
[docs]
class NoFitYet(RuntimeError):
pass
[docs]
class DetDoesNotExist(RuntimeError):
pass
[docs]
class MinimizerNotAvailable(RuntimeError):
pass
[docs]
class TimeTypeNotKnown(RuntimeError):
pass
[docs]
class deprecated(object):
def __init__(self, reason):
if inspect.isclass(reason) or inspect.isfunction(reason):
raise TypeError("Reason for deprecation must be supplied")
self.reason = reason
def __call__(self, cls_or_func):
if inspect.isfunction(cls_or_func):
if hasattr(cls_or_func, "func_code"):
_code = cls_or_func.func_code
else:
_code = cls_or_func.__code__
fmt = "Call to deprecated function or method {name} ({reason})."
filename = _code.co_filename
lineno = _code.co_firstlineno + 1
elif inspect.isclass(cls_or_func):
fmt = "Call to deprecated class {name} ({reason})."
filename = cls_or_func.__module__
lineno = 1
else:
raise TypeError(type(cls_or_func))
msg = fmt.format(name=cls_or_func.__name__, reason=self.reason)
@functools.wraps(cls_or_func)
def new_func(*args, **kwargs):
custom_warnings.simplefilter(
"always", DeprecationWarning
) # turn off filter
custom_warnings.warn_explicit(
msg, category=DeprecationWarning, filename=filename, lineno=lineno
)
custom_warnings.simplefilter("default", DeprecationWarning) # reset filter
return cls_or_func(*args, **kwargs)
return new_func