code: def compute_normal_2(E, cuda=False):
      if torch.sum(torch.isnan(E)) != 0:
          print("nans found here")
          # import ipdb;
          # ipdb.set_trace()
      E_ = convTri(E, 4, cuda)
      Ox, Oy = numerical_gradients_2d(E_, cuda)
      Oxx, _ = numerical_gradients_2d(Ox, cuda)
      Oxy, Oyy = numerical_gradients_2d(Oy, cuda)
  
      aa = Oyy * torch.sign(-(Oxy + 1e-5)) / (Oxx + 1e-5)
      t = torch.atan(aa)
      O = torch.remainder(t, np.pi)
  
      if torch.sum(torch.isnan(O)) != 0:
          print("nans found here")
          # import ipdb;
          # ipdb.set_trace()
  
      return O, (Oyy, Oxx)
  
file_path: pywick/pywick/models/segmentation/testnets/gscnn/my_functionals/custom_functional.py
imports: import torch
  import torch.nn.functional
  from torchvision.transforms.functional import pad
  import numpy
label_desc: Use image node_id 8 for calling a global function with example usage: compute_normal_2(E, cuda) and returns: O,  Oyy,  Oxx