code: def _t_normals(self):
          r
          verts = self['throat.vertices']
          value = sp.zeros([len(verts), 3])
          for i in range(len(verts)):
              if len(sp.unique(verts[i][:, 0])) == 1:
                  verts_2d = sp.vstack((verts[i][:, 1], verts[i][:, 2])).T
              elif len(sp.unique(verts[i][:, 1])) == 1:
                  verts_2d = sp.vstack((verts[i][:, 0], verts[i][:, 2])).T
              else:
                  verts_2d = sp.vstack((verts[i][:, 0], verts[i][:, 1])).T
              hull = sptl.ConvexHull(verts_2d, qhull_options='QJ Pp')
              sorted_verts = verts[i][hull.vertices].astype(float)
              v1 = sorted_verts[-1]-sorted_verts[0]
              v2 = sorted_verts[1]-sorted_verts[0]
              value[i] = tr.unit_vector(sp.cross(v1, v2))
          return value
docs: r"""
          Update the throat normals from the voronoi vertices