code: def update_vertices(self, mask, inverse=None):
          
          # if the mesh is already empty we can't remove anything
          if self.is_empty:
              return
  
          # make sure mask is a numpy array
          mask = np.asanyarray(mask)
  
          if ((mask.dtype.name == 'bool' and mask.all()) or
                  len(mask) == 0 or self.is_empty):
              # mask doesn't remove any vertices so exit early
              return
  
          # create the inverse mask if not passed
          if inverse is None:
              inverse = np.zeros(len(self.vertices), dtype=np.int64)
              if mask.dtype.kind == 'b':
                  inverse[mask] = np.arange(mask.sum())
              elif mask.dtype.kind == 'i':
                  inverse[mask] = np.arange(len(mask))
              else:
                  inverse = None
  
          # re- index faces from inverse
          if inverse is not None and util.is_shape(self.faces, (-1, 3)):
              self.faces = inverse[self.faces.reshape(-1)].reshape((-1, 3))
  
          # update the visual object with our mask
          self.visual.update_vertices(mask)
          # get the normals from cache before dumping
          cached_normals = self._cache['vertex_normals']
  
          # actually apply the mask
          self.vertices = self.vertices[mask]
  
          # if we had passed vertex normals try to save them
          if util.is_shape(cached_normals, (-1, 3)):
              try:
                  self.vertex_normals = cached_normals[mask]
              except BaseException:
                  pass
docs: Update vertices with a mask.
  
          Parameters
          ----------
          vertex_mask : (len(self.vertices)) bool
            Array of which vertices to keep
          inverse : (len(self.vertices)) int
            Array to reconstruct vertex references
            such as output by np.unique