docs: def split_face(self, face, number=None, ids=None):
          """Split a topological face into a number of small faces.
  
          * ``face``: The face to split. Must be in the topology.
          * ``number``: Number of new faces to create. Optional, can be inferred from ``ids``. Default is 2 new faces.
          * ``ids``: Iterable of new face ids. Optional, default is the maximum integer in the existing topology plus one. ``ids`` don't have to be integers. If ``ids`` is specified, ``number`` is ignored.
  
          Returns the new face ids.
  
          """
          assert face in self.faces
  
          if ids:
              ids = set(ids)
          else:
              max_int = max(x for x in self.faces if isinstance(x, int))
              ids = set(range(max_int + 1, max_int + 1 + (number or 2)))
  
          for obj in self.topology.values():
              if face in obj:
                  obj.discard(face)
                  obj.update(ids)
  
          self.faces.discard(face)
          self.faces.update(ids)
  
          return ids