code: def backward(self, indexes, grad_outputs):
      (gy,) = grad_outputs
      xp = chainer.backend.get_array_module(gy)
      (y,) = self.get_retained_outputs()
      n = y.shape[0]
      dtype = y.dtype
  
      F = chainer.functions
      y_inv = F.inv(y)
      mask = xp.tri(n, dtype=dtype) - 0.5 * xp.eye(n, dtype=dtype)
      phi = mask * F.matmul(y, gy, transa=True)
      s = F.matmul(F.matmul(y_inv, phi, transa=True), y_inv)
      gx = 0.5 * (s + s.T)
      return (gx,)
  
file_path: chainer/chainer/functions/math/cholesky.py
imports: import chainer
  from chainer import function_node
  from chainer.utils import type_check
  import chainerx
label_desc: Use image node_id 5 for calling the Cholesky obj's underlying member method code with example usage: obj.backward(indexes, grad_outputs) and returns: gx