class_docstr: Class for storing and operating on 3D mesh data.
  
  Parameters
  ----------
  vertices : ndarray, shape (Nv, 3)
      Vertex coordinates. If faces is not specified, then this will
      instead be interpreted as (Nf, 3, 3) array of coordinates.
  faces : ndarray, shape (Nf, 3)
      Indices into the vertex array.
  edges : None
      [not available yet]
  vertex_colors : ndarray, shape (Nv, 4)
      Vertex colors. If faces is not specified, this will be
      interpreted as (Nf, 3, 4) array of colors.
  face_colors : ndarray, shape (Nf, 4)
      Face colors.
  vertex_values : ndarray, shape (Nv,)
      Vertex values.
  
  Notes
  -----
  All arguments are optional.
  
  The object may contain:
  
  - list of vertex locations
  - list of edges
  - list of triangles
  - colors per vertex, edge, or tri
  - normals per vertex or tri
  
  This class handles conversion between the standard
  [list of vertices, list of faces] format (suitable for use with
  glDrawElements) and 'indexed' [list of vertices] format (suitable
  for use with glDrawArrays). It will automatically compute face normal
  vectors as well as averaged vertex normal vectors.
  
  The class attempts to be as efficient as possible in caching conversion
  results and avoiding unnecessary conversions.
docstr: Get face normals
  
  Parameters
  ----------
  indexed : str | None
      If None, return an array (Nf, 3) of normal vectors for each face.
      If 'faces', then instead return an indexed array (Nf, 3, 3)
      (this is just the same array with each vector copied three times).
  
  Returns
  -------
  normals : ndarray
      The normals.
docstr_tok: ["Get","face","normals","Parameters","--","--","--","--","--","indexed",":","str","|","None","If","None",",","return","an","array","(","Nf",",","3",")","of","normal","vectors","for","each","face",".","If","'faces","'",",","then","instead","return","an","indexed","array","(","Nf",",","3",",","3",")","(","this","is","just","the","same","array","with","each","vector","copied","three","times",")",".","Returns","--","--","--","-","normals",":","ndarray","The","normals","."]
code: def get_face_normals(self, indexed=None):
      """Get face normals
  
      Parameters
      ----------
      indexed : str | None
          If None, return an array (Nf, 3) of normal vectors for each face.
          If 'faces', then instead return an indexed array (Nf, 3, 3)
          (this is just the same array with each vector copied three times).
  
      Returns
      -------
      normals : ndarray
          The normals.
      """
      if indexed not in (None, "faces"):
          raise ValueError(
              "Invalid indexing mode. Accepts: None, 'faces'"
          )
  
      if self._face_normals is None:
          vertices = self.get_vertices(indexed="faces")
          self._face_normals = _compute_face_normals(vertices)
  
      if (
          indexed == "faces"
          and self._face_normals_indexed_by_faces is None
      ):
          self._face_normals_indexed_by_faces = (
              _repeat_face_normals_on_corners(self._face_normals)
          )
  
      return (
          self._face_normals
          if indexed is None
          else self._face_normals_indexed_by_faces
      )
  
imports: import numpy
label_desc: Use image node_id 14 for calling the MeshData obj's underlying member method code with example usage: obj.get_face_normals(indexed) and returns: unknown