Source code for pygsl.errors

# authors: Achim Gaedke, Pierre Schnizer
# created: May 2001
# modified : August 2017
# file: pygsl/errors.py
# $Id:$
#
# Changes:
#       5. October 2003. Added various exceptions to cover the whole range of
#       error numbers. Needed to translate error numbers to the approbriate
#       exception. See Lib/error_helpers.c
"""Exceptions raised by pygsl

GSL error codes are translated to python exceptions. These exceptions are listed 
here. As far as appropriate the exceptions are derived from python exceptions.

The GSL error codes can be accessed from :mod:`pygsl.errno`
"""
import sys

if sys.version_info[0] < 3:
    import exceptions
    Exception = exceptions.Exception
    Warning = exceptions.Warning
    
import types
from pygsl import errno as errno_m

[docs] class gsl_Error(Exception): """base of all gsl exceptions """ IsA = 'gsl_Error' errno = None pass
[docs] class gsl_Warning(Warning): """base of all gsl warnings """ errno = None pass
[docs] class gsl_ArithmeticError(gsl_Error,ArithmeticError): """base of all common arithmetic exceptions """ pass
[docs] class gsl_RangeError(gsl_ArithmeticError): """output range error, e.g. exp(1e100) """ errno = errno_m.GSL_ERANGE """gsl error number :data:`pygsl.errno.GSL_ERANGE`""" pass
[docs] class gsl_PointerError(gsl_Error): """invalid pointer This error is typically raised if GSL is checking a pointer and that pointer is NULL. """ errno = errno_m.GSL_EFAULT """gsl error number :data:`pygsl.errno.GSL_EFAULT`""" pass
[docs] class gsl_InvalidArgumentError(gsl_Error): """invalid argument supplied by user """ errno = errno_m.GSL_EINVAL """gsl error number :data:`pygsl.errno.GSL_EINVAL`""" pass
[docs] class gsl_GenericError(gsl_Error): """generic failure """ errno = errno_m.GSL_EFAILED """gsl error number :data:`pygsl.errno.GSL_EFAILED`""" pass
[docs] class gsl_FactorizationError(gsl_Error): """factorization failed """ errno = errno_m.GSL_EFACTOR """gsl error number :data:`pygsl.errno.GSL_EFACTOR`""" pass
[docs] class gsl_SanityCheckError(gsl_Error): """sanity check failed - shouldn't happen """ errno = errno_m.GSL_ESANITY """gsl error number :data:`pygsl.errno.GSL_ESANITY`""" pass
[docs] class gsl_BadFuncError(gsl_Error): """problem with user-supplied function """ errno = errno_m.GSL_EBADFUNC """gsl error number :data:`pygsl.errno.GSL_EBADFUNC`""" pass
[docs] class gsl_RunAwayError(gsl_ArithmeticError): """iterative process is out of control """ errno = errno_m.GSL_ERUNAWAY """gsl error number :data:`pygsl.errno.GSL_ERUNAWAY`""" pass
[docs] class gsl_MaximumIterationError(gsl_ArithmeticError): """exceeded max number of iterations """ errno = errno_m.GSL_EMAXITER """gsl error number :data:`pygsl.errno.GSL_EMAXITER`""" pass
[docs] class gsl_ZeroDivisionError(gsl_Error,ZeroDivisionError): """zero Division Error """ errno = errno_m.GSL_EZERODIV """gsl error number :data:`pygsl.errno.GSL_EZERODIV`""" pass
[docs] class gsl_BadToleranceError(gsl_Error): """user specified an invalid tolerance """ errno = errno_m.GSL_EBADTOL """gsl error number :data:`pygsl.errno.GSL_EBADTOL`""" pass
[docs] class gsl_ToleranceError(gsl_ArithmeticError): """failed to reach the specified tolerance """ errno = errno_m.GSL_ETOL """gsl error number :data:`pygsl.errno.GSL_ETOL`""" pass
[docs] class gsl_UnderflowError(gsl_Error,OverflowError): """Underflow error """ errno = errno_m.GSL_EUNDRFLW """gsl error number :data:`pygsl.errno.GSL_EUNDRFLW`""" pass
[docs] class gsl_OverflowError(gsl_Error,OverflowError): """Overflow Error """ errno = errno_m.GSL_EOVRFLW """gsl error number :data:`pygsl.errno.GSL_EOVERFLW`""" pass
[docs] class gsl_AccuracyLossError(gsl_ArithmeticError): """failed to reach the specified tolerance """ errno = errno_m.GSL_ELOSS """gsl error number :data:`pygsl.errno.GSL_ELOSS`""" pass
[docs] class gsl_RoundOffError(gsl_ArithmeticError): """failed because of roundoff error """ errno = errno_m.GSL_EROUND """gsl error number :data:`pygsl.errno.GSL_EFOUND`""" pass
[docs] class gsl_BadLength(gsl_Error): """matrix; vector lengths are not conformant """ errno = errno_m.GSL_EBADLEN """gsl error number :data:`pygsl.errno.GSL_EBADLEN`""" pass
[docs] class gsl_MatrixNotSquare(gsl_Error): """matrix not square """ errno = errno_m.GSL_ENOTSQR """gsl error number :data:`pygsl.errno.GSL_ENOTSQR`""" pass
[docs] class gsl_SingularityError(gsl_ArithmeticError): """apparent singularity detected """ errno = errno_m.GSL_ESING """gsl error number :data:`pygsl.errno.GSL_ESING`""" pass
[docs] class gsl_DivergeError(gsl_ArithmeticError): """integral or series is divergent """ errno = errno_m.GSL_EDIVERGE """gsl error number :data:`pygsl.errno.GSL_EDIVERGE`""" pass
[docs] class gsl_NoHardwareSupportError(gsl_Error): """requested feature is not supported by the hardware """ errno = errno_m.GSL_EUNSUP """gsl error number :data:`pygsl.errno.GSL_EUNSUP`""" pass
[docs] class gsl_NotImplementedError(gsl_Error, NotImplementedError): """requested feature not (yet) implemented """ errno = errno_m.GSL_EUNIMPL """gsl error number :data:`pygsl.errno.GSL_EUNIMPL`""" pass
[docs] class gsl_CacheLimitError(gsl_Error): """cache limit exceeded """ errno = errno_m.GSL_ECACHE """gsl error number :data:`pygsl.errno.GSL_ECACHE`""" pass
[docs] class gsl_TableLimitError(gsl_Error): """Table limit exceeded """ errno = errno_m.GSL_ETABLE """gsl error number :data:`pygsl.errno.GSL_ETABLE`""" pass
[docs] class gsl_NoProgressError(gsl_ArithmeticError): """iteration is not making progress towards solution """ errno = errno_m.GSL_ENOPROG """gsl error number :data:`pygsl.errno.GSL_ENOPROG`""" pass
[docs] class gsl_JacobianEvaluationError(gsl_ArithmeticError): """jacobian evaluations are not improving the solution """ errno = errno_m.GSL_ENOPROGJ """gsl error number :data:`pygsl.errno.GSL_ENOPROGJ`""" pass
[docs] class gsl_ToleranceFError(gsl_ArithmeticError): """cannot reach the specified tolerance in F """ errno = errno_m.GSL_ETOLF """gsl error number :data:`pygsl.errno.GSL_ETOLF`""" pass
[docs] class gsl_ToleranceXError(gsl_ArithmeticError): """cannot reach the specified tolerance in X """ errno = errno_m.GSL_ETOLX """gsl error number :data:`pygsl.errno.GSL_ETOLX`""" pass
[docs] class gsl_ToleranceGradientError(gsl_ArithmeticError): """cannot reach the specified tolerance in gradient """ errno = errno_m.GSL_ETOLG """gsl error number :data:`pygsl.errno.GSL_ETOLG`""" pass
[docs] class gsl_EOFError(gsl_Error, EOFError): """end of file """ errno = errno_m.GSL_EOF """gsl error number :data:`pygsl.errno.GSL_EOF`""" pass
[docs] class gsl_FloatingPointError(gsl_Error,FloatingPointError): """base of all common floating point errors """ pass
[docs] class gsl_DomainWarning(gsl_Warning): """used by pygsl.histogram """ errno = errno_m.GSL_EDOM """error number :data:`pygsl.errno.GSL_EDOM`"""
[docs] class gsl_DomainError(gsl_Error): """Domain Error. e.g. sqrt(-1) """ errno = errno_m.GSL_EDOM """gsl error number :data:`pygsl.errno.GSL_EDOM`""" pass
[docs] class pygsl_StrideError(gsl_SanityCheckError): """Could not recalculate a stride of a python array object to the stride of a gsl_vector or gsl_matrix. """ errno = errno_m.PyGSL_ESTRIDE """pygsl error number :data:`pygsl.errno.PyGSL_ESTRIDE`""" pass
[docs] class pygsl_NotImplementedError(gsl_NotImplementedError): """Base for all Errors, which are known but not implemented yet! """ errno = errno_m.PyGSL_EUNIMPL """pygsl error number :data:`pygsl.errno.PyGSL_EUNIMPL`""" pass
[docs] class pygsl_NotInitalised(gsl_SanityCheckError): """gsl_error calls a c callback, which saves the reason, file name, line number and the GSL errno. This errno is stored when the save state is initalised and flags that gsl_error was not yet called. """ errno = errno_m.PyGSL_EINIT """pygsl error number :data:`pygsl.errno.PyGSL_EINIT`""" pass
_not_exported_exceptions = ( gsl_Error, gsl_Warning, gsl_FloatingPointError, gsl_ArithmeticError, ) def _get_exceptions(subclass): tmp = [] globs = globals() for name in globs: the_exception = globs[name] if the_exception in _not_exported_exceptions: continue try: if not issubclass(the_exception, subclass): continue except TypeError: continue try: t_errno = the_exception.errno except AttributeError: continue assert(t_errno != None) int(t_errno) tmp.append(the_exception) return tmp
[docs] def get_exceptions(): """Returns the exceptions defined within this module Used by the :mod:`pygsl.init` module. This is used by the C helper functions to turn an error reported by gsl by the C error code to the appropriate python exception """ return _get_exceptions(gsl_Error)
[docs] def get_warnings(): """Returns the warnings defined within this module Used by the :mod:`pygsl.init` module. This is used by the C helper functions to turn an error reported by gsl by the C error code to the appropriate python warning """ return _get_exceptions(gsl_Warning)
[docs] class _ErrorSafeState: """Access to the last error stored by gsl If PyGSL does not set gsl_error handler to off, the installed error handler will store the arguments passed by gsl_error_handler to a single static variable in :mod:`pygsl.init`. This variable is exported to python space by this class. If pygsl raises an exception, this state here should be automatically reset. Used gsl functions: * :c:func:`gsl_set_error_handler_off()` * :c:func:`gsl_set_error_handler()` """ def get(self): "Get the currently stored variables" from pygsl import init tmp = init.error_handler_state_get() dic = {'reason' : tmp[0], 'file' : tmp[1], 'line' : tmp[2], 'errno' : tmp[3]} return dic def reset(self): "Reset the state" from pygsl import init return init.error_handler_state_reset()
error_safe_state = _ErrorSafeState() #"""Access to the last error stored by gsl # #If PyGSL does not set gsl_error handler to off, the installed error #handler will store the arguments passed by gsl_error_handler to a single static #variable in :mod:`pygsl.init`. This variable is exported to python space #by this class. # #If pygsl raises an exception, this state here should be automatically reset. # #Used gsl functions: # * :c:func:`gsl_set_error_handler_off()` # * :c:func:`gsl_set_error_handler()` #"""