Source code for scikits_odes_sundials
"""
SUNDIALS wrapper
"""
import inspect
from . import _version
__version__ = _version.get_versions()['version']
[docs]
class CVODESolveException(Exception):
"""Base class for exceptions raised by ``CVODE.validate_flags``."""
def __init__(self, soln):
self.soln = soln
self.args = (self._message.format(soln),)
[docs]
class CVODESolveFailed(CVODESolveException):
"""``CVODE.solve`` failed to reach endpoint"""
_message = (
"Solver failed with flag {0.flag} and finished at {0.errors.t}"
"with values {0.errors.y}."
)
[docs]
class CVODESolveFoundRoot(CVODESolveException):
"""``CVODE.solve`` found a root"""
_message = "Solver found a root at {0.roots.t[0]}."
[docs]
class CVODESolveReachedTSTOP(CVODESolveException):
"""``CVODE.solve`` reached the endpoint specified by tstop."""
_message = "Solver reached tstop at {0.tstop.t[0]}."
[docs]
class IDASolveException(Exception):
"""Base class for exceptions raised by ``IDA.validate_flags``."""
def __init__(self, soln):
self.soln = soln
self.args = (self._message.format(soln),)
[docs]
class IDASolveFailed(IDASolveException):
"""``IDA.solve`` failed to reach endpoint"""
_message = (
"Solver failed with flag {0.flag} and finished at {0.errors.t}"
"with values {0.errors.y} and derivatives {0.errors.ydot}."
)
[docs]
class IDASolveFoundRoot(IDASolveException):
"""``IDA.solve`` found a root"""
_message = "Solver found a root at {0.roots.t[0]}."
[docs]
class IDASolveReachedTSTOP(IDASolveException):
"""``IDA.solve`` reached the endpoint specified by tstop."""
_message = "Solver reached tstop at {0.tstop.t[0]}."
def _get_num_args(func):
"""
Python 2/3 compatible method of getting number of args that `func` accepts
"""
if hasattr(inspect, "getfullargspec"):
argspec = inspect.getfullargspec(func)
else:
argspec = inspect.getargspec(func)
arg_cnt = 0
for arg in argspec.args:
if arg not in ("self", "cls"):
arg_cnt += 1
return arg_cnt