@property<EOL><INDENT>def woodbury_inv(self):<DEDENT>
if self._woodbury_inv is None:<EOL><INDENT>if self._woodbury_chol is not None:<EOL><INDENT>self._woodbury_inv, _ = dpotri(self._woodbury_chol, lower=<NUM_LIT:1>)<EOL>symmetrify(self._woodbury_inv)<EOL><DEDENT>elif self._covariance is not None:<EOL><INDENT>B = np.atleast_3d(self._K) - np.atleast_3d(self._covariance)<EOL>self._woodbury_inv = np.empty_like(B)<EOL>for i in range(B.shape[-<NUM_LIT:1>]):<EOL><INDENT>tmp, _ = dpotrs(self.K_chol, B[:, :, i])<EOL>self._woodbury_inv[:, :, i], _ = dpotrs(self.K_chol, tmp.T)<EOL><DEDENT><DEDENT><DEDENT>return self._woodbury_inv<EOL>
The inverse of the woodbury matrix, in the gaussian likelihood case it is defined as
$$
(K_{xx} + \Sigma_{xx})^{-1}
\Sigma_{xx} := \texttt{Likelihood.variance / Approximate likelihood covariance}
$$