Source code for kerch.utils.errors

# coding=utf-8
from abc import ABCMeta, abstractmethod
from ..feature.logger import Logger
from .decorators import extend_docstring

[docs] class KerchError(Exception, metaclass=ABCMeta): r""" :param cls: Optional class throwing the exception. This is helpful to add a context to the error message. :param message: Optional error message. :type cls: Instance of :class:`kerch.feature.Logger` :type message: str """
[docs] @abstractmethod def __init__(self, cls=None, message=""): msg = message if msg == "" and hasattr(self, 'message'): msg = self.message if isinstance(cls, Logger): msg = "[" + cls.__class__.__name__ + "] " + msg super(KerchError, self).__init__(msg)
[docs] @extend_docstring(KerchError) class ImplicitError(KerchError): r""" Error thrown when an implicit representation is requested and mathematically not available. """
[docs] def __init__(self, *args, **kwargs): self.message = "Implicit representation not available." super(ImplicitError, self).__init__(*args, **kwargs)
[docs] @extend_docstring(KerchError) class ExplicitError(KerchError): r""" Error thrown when an explicit representation is requested and mathematically not available. """
[docs] def __init__(self, *args, **kwargs): self.message = "Explicit representation not available.\n" \ "[Example 1]: The explicit representation does not exist as it lies in an infinite " \ "dimensional Hilbert space.\n" \ "[Example 2]: Only the inner product (implicit representation) is known, but not the " \ "original vectors." super(ExplicitError, self).__init__(*args, **kwargs)
[docs] @extend_docstring(KerchError) class RepresentationError(KerchError): r""" Error thrown when the requested representation is invalid. """
[docs] def __init__(self, *args, **kwargs): self.message = "Unrecognized or unspecified representation (must be primal or dual)." super(RepresentationError, self).__init__(*args, **kwargs)
[docs] @extend_docstring(KerchError) class BijectionError(KerchError): r""" Error thrown when an inverse is requested from a non-bijective function. """
[docs] def __init__(self, *args, **kwargs): self.message = "Mathematically undefined operation. A transform is not bijective, thus non invertible." super(BijectionError, self).__init__(*args, **kwargs)
[docs] @extend_docstring(KerchError) class NotInitializedError(KerchError): r""" Error thrown when a model is asked to perform some tasks, but is not yet fully initialized. """
[docs] def __init__(self, *args, **kwargs): self.message = "The model has not been initialized yet." super(NotInitializedError, self).__init__(*args, **kwargs)
[docs] @extend_docstring(KerchError) class MultiViewError(KerchError): r""" Error thrown when some operations are requested, but not defined in a multi-view context. """
[docs] def __init__(self, *args, **kwargs): self.message = "Primal operations are not defined a multi-view context. You must ask them for the different " \ "known separately, if it exists for it." super(MultiViewError, self).__init__(*args, **kwargs)