def value(self):
from numpy_sugar.linalg import ddot, sum2diag<EOL>if self._cache["<STR_LIT:value>"] is not None:<EOL><INDENT>return self._cache["<STR_LIT:value>"]<EOL><DEDENT>scale = exp(self.logscale)<EOL>delta = <NUM_LIT:1> / (<NUM_LIT:1> + exp(-self.logitdelta))<EOL>v0 = scale * (<NUM_LIT:1> - delta)<EOL>v1 = scale * delta<EOL>mu = self.eta / self.tau<EOL>n = len(mu)<EOL>if self._QS is None:<EOL><INDENT>K = zeros((n, n))<EOL><DEDENT>else:<EOL><INDENT>Q0 = self._QS[<NUM_LIT:0>][<NUM_LIT:0>]<EOL>S0 = self._QS[<NUM_LIT:1>]<EOL>K = dot(ddot(Q0, S0), Q0.T)<EOL><DEDENT>A = sum2diag(sum2diag(v0 * K, v1), <NUM_LIT:1> / self.tau)<EOL>m = mu - self.mean()<EOL>v = -n * log(<NUM_LIT:2> * pi)<EOL>v -= slogdet(A)[<NUM_LIT:1>]<EOL>v -= dot(m, solve(A, m))<EOL>self._cache["<STR_LIT:value>"] = v / <NUM_LIT:2><EOL>return self._cache["<STR_LIT:value>"]<EOL>
r"""Log of the marginal likelihood.

        Formally,

        .. math::

            - \frac{n}{2}\log{2\pi} - \frac{1}{2} \log{\left|
                v_0 \mathrm K + v_1 \mathrm I + \tilde{\Sigma} \right|}
                    - \frac{1}{2}
                    \left(\tilde{\boldsymbol\mu} -
                    \mathrm X\boldsymbol\beta\right)^{\intercal}
                    \left( v_0 \mathrm K + v_1 \mathrm I +
                    \tilde{\Sigma} \right)^{-1}
                    \left(\tilde{\boldsymbol\mu} -
                    \mathrm X\boldsymbol\beta\right)

        Returns
        -------
        float
            :math:`\log{p(\tilde{\boldsymbol\mu})}`