'Return an array of normal vectors.
By default, the array will be (N, 3) with one entry per unique vertex in the mesh.
If indexed is \'faces\', then the array will contain three normal vectors per face
(and some vertexes may be repeated).'

def vertexNormals(self, indexed=None):

    if (self._vertexNormals is None):
        faceNorms = self.faceNormals()
        vertFaces = self.vertexFaces()
        self._vertexNormals = np.empty(self._vertexes.shape, dtype=float)
        for vindex in xrange(self._vertexes.shape[0]):
            faces = vertFaces[vindex]
            if (len(faces) == 0):
                self._vertexNormals[vindex] = (0, 0, 0)
                continue
            norms = faceNorms[faces]
            norm = norms.sum(axis=0)
            norm /= ((norm ** 2).sum() ** 0.5)
            self._vertexNormals[vindex] = norm
    if (indexed is None):
        return self._vertexNormals
    elif (indexed == 'faces'):
        return self._vertexNormals[self.faces()]
    else:
        raise Exception("Invalid    indexing    mode.    Accepts:    None,    'faces'")
