Source code for probnum.diffeq.odefilter.init_routines._interface

"""Interface for initialization routines."""


import abc

from probnum import problems, randprocs, randvars


# Public because it is used as a type
[docs]class InitializationRoutine(abc.ABC): """Initialization routines for a filtering-based ODE solver. One crucial factor for stable implementation of probabilistic ODE solvers is starting with a good approximation of the derivatives of the initial condition [1]_. (This is common in all Nordsieck-like ODE solvers.) For this reason, efficient methods of initialization need to be devised. All initialization routines in ProbNum implement the interface :class:`InitializationRoutine`. References ---------- .. [1] Krämer, N. and Hennig, P., Stable implementation of probabilistic ODE solvers, *arXiv:2012.10106*, 2020. """ def __init__(self, *, is_exact: bool, requires_jax: bool): self._is_exact = is_exact self._requires_jax = requires_jax
[docs] @abc.abstractmethod def __call__( self, *, ivp: problems.InitialValueProblem, prior_process: randprocs.markov.MarkovProcess, ) -> randvars.RandomVariable: raise NotImplementedError
@property def is_exact(self) -> bool: """Exactness of the computed initial values. Some initialization routines yield the exact initial derivatives, some others only yield approximations. """ return self._is_exact @property def requires_jax(self) -> bool: """Whether the implementation of the routine relies on JAX.""" return self._requires_jax