def split_face(self, face, number=None, ids=None):
assert face in self.faces<EOL>if ids:<EOL><INDENT>ids = set(ids)<EOL><DEDENT>else:<EOL><INDENT>max_int = max(x for x in self.faces if isinstance(x, int))<EOL>ids = set(range(max_int + <NUM_LIT:1>, max_int + <NUM_LIT:1> + (number or <NUM_LIT:2>)))<EOL><DEDENT>for obj in self.topology.values():<EOL><INDENT>if face in obj:<EOL><INDENT>obj.discard(face)<EOL>obj.update(ids)<EOL><DEDENT><DEDENT>self.faces.discard(face)<EOL>self.faces.update(ids)<EOL>return ids<EOL>
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.