class_docstr: Pairwise likelihood using probit function
  
  Given two items v and u with utilities f(v) and f(u), the probability that we
  prefer v over u with probability std_normal_cdf((f(v) - f(u))/sqrt(2)). Note
  that this formulation implicitly assume the noise term is fixed at 1.
code: def negative_log_hessian_sum(
      self, utility: Tensor, D: Tensor
  ) -> Tensor:
      # Original hess should be of dimension m x n x n, as in (7) from
      # [Chu2005preference]_ Sum over the first dimension and return a tensor of
      # shape n x n.
      # The sum over the m dimension of hessian of negative log likelihood
      # with respect to the utility
      DT = D.transpose(-1, -2)
      z = self._calc_z(utility, D)
      _, _, h = self._calc_z_derived(z)
      mul_factor = h * (h + z) / 2
      mul_factor = mul_factor.unsqueeze(-2).expand(*DT.size())
      # multiply the hessian value by preference signs
      # (+1 if preferred or -1 otherwise) and sum over the m dimension
      hess = DT * mul_factor @ D
      return hess
  
imports: from __future__ import annotations
  import math
  from abc import ABC, abstractmethod
  from typing import Any, Tuple
  import torch
  from botorch.utils.probability.utils import log_ndtr, log_phi, standard_normal_log_hazard
  from gpytorch.likelihoods import Likelihood
  from torch import Tensor
  from torch.distributions import Bernoulli
label_desc: Use image node_id 5 for calling the PairwiseProbitLikelihood obj's underlying member method code with example usage: obj.negative_log_hessian_sum(utility, D) and returns: hess