code: def _inverse_lower_triangular(M):
      
      if M.get_shape().ndims != 3:  # pragma: no cover
          raise ValueError("Number of dimensions for input is required to be 3.")
      D, N = tf.shape(M)[0], tf.shape(M)[1]
      I_DNN = tf.eye(N, dtype=M.dtype)[None, :, :] * tf.ones((D, 1, 1), dtype=M.dtype)
      return tf.matrix_triangular_solve(M, I_DNN)
docs: Take inverse of lower triangular (e.g. Cholesky) matrix. This function
      broadcasts over the first index.
  
      :param M: Tensor with lower triangular structure of shape DxNxN
      :return: The inverse of the Cholesky decomposition. Same shape as input.