code: def _calculate_normals(rr, tris):
      """Efficiently compute vertex normals for triangulated surface"""
      # ensure highest precision for our summation/vectorization "trick"
      rr = rr.astype(np.float64)
      # first, compute triangle normals
      r1 = rr[tris[:, 0], :]
      r2 = rr[tris[:, 1], :]
      r3 = rr[tris[:, 2], :]
      tri_nn = _fast_cross_3d((r2 - r1), (r3 - r1))
  
      #   Triangle normals and areas
      size = np.sqrt(np.sum(tri_nn * tri_nn, axis=1))
      size[size == 0] = 1.0  # prevent ugly divide-by-zero
      tri_nn /= size[:, np.newaxis]
  
      npts = len(rr)
  
      # the following code replaces this, but is faster (vectorized):
      #
      # for p, verts in enumerate(tris):
      #     nn[verts, :] += tri_nn[p, :]
      #
      nn = np.zeros((npts, 3))
      for (
          verts
      ) in tris.T:  # note this only loops 3x (number of verts per tri)
          for idx in range(3):  # x, y, z
              nn[:, idx] += np.bincount(
                  verts.astype(np.int32), tri_nn[:, idx], minlength=npts
              )
      size = np.sqrt(np.sum(nn * nn, axis=1))
      size[size == 0] = 1.0  # prevent ugly divide-by-zero
      nn /= size[:, np.newaxis]
      return nn
  
imports: import numpy
label_desc: Use image node_id 2 for calling a global function with example usage: _calculate_normals(rr, tris) and returns: nn