@blockify_hessian<EOL><INDENT>def d2logpdf_df2(self, f, y, Y_metadata=None):<DEDENT>
if isinstance(self.gp_link, link_functions.Identity):<EOL><INDENT>d2logpdf_df2 = self.d2logpdf_dlink2(f, y, Y_metadata=Y_metadata)<EOL><DEDENT>else:<EOL><INDENT>inv_link_f = self.gp_link.transf(f)<EOL>d2logpdf_dlink2 = self.d2logpdf_dlink2(inv_link_f, y, Y_metadata=Y_metadata)<EOL>dlink_df = self.gp_link.dtransf_df(f)<EOL>dlogpdf_dlink = self.dlogpdf_dlink(inv_link_f, y, Y_metadata=Y_metadata)<EOL>d2link_df2 = self.gp_link.d2transf_df2(f)<EOL>d2logpdf_df2 = chain_2(d2logpdf_dlink2, dlink_df, dlogpdf_dlink, d2link_df2)<EOL><DEDENT>return d2logpdf_df2<EOL>
Evaluates the link function link(f) then computes the second derivative of log likelihood using it
Uses the Faa di Bruno's formula for the chain rule

.. math::
    \\frac{d^{2}\\log p(y|\\lambda(f))}{df^{2}} = \\frac{d^{2}\\log p(y|\\lambda(f))}{d^{2}\\lambda(f)}\\left(\\frac{d\\lambda(f)}{df}\\right)^{2} + \\frac{d\\log p(y|\\lambda(f))}{d\\lambda(f)}\\frac{d^{2}\\lambda(f)}{df^{2}}

:param f: latent variables f
:type f: Nx1 array
:param y: data
:type y: Nx1 array
:param Y_metadata: Y_metadata which is not used in student t distribution - not used
:returns: second derivative of log likelihood evaluated for this point (diagonal only)
:rtype: 1xN array