def METHOD_NAME(network, breakpoints=None):
    """Find the faces of a network.
    Parameters
    ----------
    network : :class:`~compas.datastructures.Network`
        The network object.
    breakpoints : list, optional
        The vertices at which to break the found faces.
    Notes
    -----
    Breakpoints are primarily used to break up the outside face in between
    specific vertices. For example, in structural applications involving dual
    diagrams, any vertices where external forces are applied (loads or reactions)
    should be input as breakpoints.
    Warnings
    --------
    This algorithms is essentially a wall follower (a type of maze-solving algorithm).
    It relies on the geometry of the network to be repesented as a planar,
    straight-line embedding. It determines an ordering of the neighboring vertices
    around each vertex, and then follows the *walls* of the network, always
    taking turns in the same direction.
    """
    if not breakpoints:
        breakpoints = []
    for u, v in network.edges():
        network.adjacency[u][v] = None
        network.adjacency[v][u] = None
    network_sort_neighbors(network)
    leaves = list(network.leaves())
    if leaves:
        key_xy = list(zip(leaves, network.nodes_attributes("xy", keys=leaves)))
    else:
        key_xy = list(zip(network.nodes(), network.nodes_attributes("xy")))
    u = sorted(key_xy, key=lambda x: (x[1][1], x[1][0]))[0][0]
    cycles = {}
    found = {}
    ckey = 0
    v = network_node_find_first_neighbor(network, u)
    cycle = network_find_edge_cycle(network, (u, v))
    frozen = frozenset(cycle)
    found[frozen] = ckey
    cycles[ckey] = cycle
    for a, b in pairwise(cycle + cycle[:1]):
        network.adjacency[a][b] = ckey
    ckey += 1
    for u, v in network.edges():
        if network.adjacency[u][v] is None:
            cycle = network_find_edge_cycle(network, (u, v))
            frozen = frozenset(cycle)
            if frozen not in found:
                found[frozen] = ckey
                cycles[ckey] = cycle
                ckey += 1
            for a, b in pairwise(cycle + cycle[:1]):
                network.adjacency[a][b] = found[frozen]
        if network.adjacency[v][u] is None:
            cycle = network_find_edge_cycle(network, (v, u))
            frozen = frozenset(cycle)
            if frozen not in found:
                found[frozen] = ckey
                cycles[ckey] = cycle
                ckey += 1
            for a, b in pairwise(cycle + cycle[:1]):
                network.adjacency[a][b] = found[frozen]
    cycles = _break_cycles(cycles, breakpoints)
    return cycles