def observation_model(self, f, r, hyp=None):
        """
        The implicit observation model is:
            h(fₙ,rₙ) = E[yₙ|fₙ] + √Var[yₙ|fₙ] rₙ
        """
        conditional_expectation, conditional_variance = self.conditional_moments(f, hyp)
        obs_model = conditional_expectation + cholesky(conditional_variance) * r
        return np.squeeze(obs_model)