Source code for probnum.filtsmooth.bayesfiltsmooth

"""Interfaces for Bayesian filtering and smoothing."""

from abc import ABC, abstractmethod
from typing import Dict, Optional, Tuple, Union

import numpy as np

from probnum import randvars, statespace
from probnum.filtsmooth.timeseriesposterior import TimeSeriesPosterior
from probnum.type import FloatArgType


[docs]class BayesFiltSmooth(ABC): """Bayesian filtering and smoothing.""" def __init__( self, dynamics_model: statespace.Transition, measurement_model: statespace.Transition, initrv: randvars.RandomVariable, ): self.dynamics_model = dynamics_model self.measurement_model = measurement_model self.initrv = initrv
[docs] @abstractmethod def filter_step( self, start: FloatArgType, stop: FloatArgType, current_rv: randvars.RandomVariable, data: np.ndarray, _linearise_predict_at: Optional[randvars.RandomVariable] = None, _linearise_update_at: Optional[randvars.RandomVariable] = None, _diffusion: Union[FloatArgType, np.ndarray] = 1.0, ) -> Tuple[randvars.RandomVariable, Dict]: """Filter step. For Gaussian filters, this means a prediction step followed by an update step. """ errormsg = ( "filter_step(...) is not implemented for " + "the Bayesian filter {}.".format(type(self).__name__) ) raise NotImplementedError(errormsg)
[docs] def smooth( self, filter_posterior: TimeSeriesPosterior, _previous_posterior: Optional[TimeSeriesPosterior] = None, ) -> TimeSeriesPosterior: """Smoothing.""" errormsg = ( "smoother_step(...) is not implemented for " + "the Bayesian smoother {}.".format(type(self).__name__) ) raise NotImplementedError(errormsg)