code: def grad_cholesky(L, A):
      # Based on Iain Murray's note http://arxiv.org/abs/1602.07527
      # scipy's dtrtrs wrapper, solve_triangular, doesn't broadcast along leading
      # dimensions, so we just call a generic LU solve instead of directly using
      # backsubstitution (also, we factor twice...)
      solve_trans = lambda a, b: solve(T(a), b)
      phi = lambda X: anp.tril(X) / (1.0 + anp.eye(X.shape[-1]))
  
      def conjugate_solve(L, X):
          # X -> L^{-T} X L^{-1}
          return solve_trans(L, T(solve_trans(L, T(X))))
  
      def vjp(g):
          S = conjugate_solve(
              L, phi(anp.einsum("...ki,...kj->...ij", L, g))
          )
          return (S + T(S)) / 2.0
  
      return vjp
  
file_path: autograd/autograd/numpy/linalg.py
imports: from __future__ import absolute_import
  from functools import partial
  import numpy.linalg
  from .numpy_wrapper import wrap_namespace
  from .None import numpy_wrapper
  from autograd.extend import defvjp, defjvp
label_desc: Use image node_id 11 for calling a global function with example usage: grad_cholesky(L, A) and returns: vjp, solve_trans, unknown