def face_division(sheet, mother, vert_a, vert_b):
    """
    Divides the face associated with edges
    indexed by `edge_a` and `edge_b`, splitting it
    in the middle of those edes.
    """
    face_cols = sheet.face_df.loc[mother:mother]
    sheet.face_df = sheet.face_df.append(face_cols, ignore_index=True)
    sheet.face_df.index.name = 'face'
    daughter = int(sheet.face_df.index[-1])
    edge_cols = sheet.edge_df[sheet.edge_df['face'] == mother].iloc[0:1]
    sheet.edge_df = sheet.edge_df.append(edge_cols, ignore_index=True)
    new_edge_m = sheet.edge_df.index[-1]
    sheet.edge_df.loc[new_edge_m, 'srce'] = vert_b
    sheet.edge_df.loc[new_edge_m, 'trgt'] = vert_a
    sheet.edge_df = sheet.edge_df.append(edge_cols, ignore_index=True)
    new_edge_d = sheet.edge_df.index[-1]
    sheet.edge_df.loc[new_edge_d, 'srce'] = vert_a
    sheet.edge_df.loc[new_edge_d, 'trgt'] = vert_b
    m_data = sheet.edge_df[sheet.edge_df['face'] == mother]
    daughter_edges = [new_edge_d]
    srce, trgt = vert_a, vert_b
    srces, trgts = m_data[['srce', 'trgt']].values.T
    while trgt != vert_a:
        srce, trgt = trgt, trgts[srces == trgt][0]
        daughter_edges.append(m_data[(m_data['srce'] == srce) & (m_data[
            'trgt'] == trgt)].index[0])
    sheet.edge_df.loc[daughter_edges, 'face'] = daughter
    sheet.edge_df.index.name = 'edge'
    sheet.reset_topo()
    return daughter
