code: def nonlinear_1d(module, grad_input, grad_output):
      delta_out = (
          module.y[: int(module.y.shape[0] / 2)]
          - module.y[int(module.y.shape[0] / 2) :]
      )
  
      delta_in = (
          module.x[: int(module.x.shape[0] / 2)]
          - module.x[int(module.x.shape[0] / 2) :]
      )
      dup0 = [2] + [1 for i in delta_in.shape[1:]]
      # handles numerical instabilities where delta_in is very small by
      # just taking the gradient in those cases
      grads = [None for _ in grad_input]
      grads[0] = torch.where(
          torch.abs(delta_in.repeat(dup0)) < 1e-6,
          grad_input[0],
          grad_output[0] * (delta_out / delta_in).repeat(dup0),
      )
      return tuple(grads)
  
file_path: shap/shap/explainers/_deep/deep_pytorch.py
imports: import warnings
  import numpy
  from packaging import version
  from .._explainer import Explainer
  from .deep_utils import _check_additivity
label_desc: Use image node_id 7 for calling a global function with example usage: nonlinear_1d(module, grad_input, grad_output) and returns: tuple