Source code for pysip.statespace.gaussian_process.gp_sum

from copy import deepcopy
from dataclasses import dataclass

from ..base import GPModel, Par


[docs]@dataclass class GPSum(GPModel): """Sum of two Gaussian Process model Parameters ---------- gp1 : GPModel GPModel instance gp2 : GPModel GPModel instance Notes ----- The MEASURE_DEVIATION of the `gp2` is fixed because it is already defined in `gp1`. """ def __init__(self, gp1: GPModel, gp2: GPModel): if not isinstance(gp1, GPModel): raise TypeError("`gp1` must be an GPModel instance") if not isinstance(gp2, GPModel): raise TypeError("`gp2` must be an GPModel instance") self._gp1 = deepcopy(gp1) self._gp2 = deepcopy(gp2) for node in self._gp2.params: if node.category == Par.MEASURE_DEVIATION: self._gp2.parameters.set_parameter( node.name, value=0.0, transform="fixed" ) break self.parameters = self._gp1.parameters + self._gp2.parameters _states = self._gp1.states + self._gp2.states self.states = [] for s in _states: self.states.append(s.unpack()) self.params = [] for node in self._gp1.params: node.name = self._gp1.name + "__" + node.name self.params.append(node.unpack()) for node in self._gp2.params: node.name = self._gp2.name + "__" + node.name self.params.append(node.unpack()) self.inputs = [] self.outputs = [("ANY", "sum(f(t))", "sum of stochastic processes")] self.name = self._gp1.name + "__+__" + self._gp2.name super().__post_init__() def set_constant_continuous_ssm(self): self._gp1.set_constant_continuous_ssm() self._gp2.set_constant_continuous_ssm() def update_continuous_ssm(self): self._gp1.update_continuous_ssm() self._gp2.update_continuous_ssm() self.A[: self._gp1.nx, : self._gp1.nx] = self._gp1.A self.A[self._gp1.nx :, self._gp1.nx :] = self._gp2.A self.C[:, : self._gp1.nx] = self._gp1.C self.C[:, self._gp1.nx :] = self._gp2.C self.Q[: self._gp1.nx, : self._gp1.nx] = self._gp1.Q self.Q[self._gp1.nx :, self._gp1.nx :] = self._gp2.Q self.R = self._gp1.R self.P0[: self._gp1.nx, : self._gp1.nx] = self._gp1.P0 self.P0[self._gp1.nx :, self._gp1.nx :] = self._gp2.P0