user: Give a detailed overview of Sequence Accessors: syntax, arguments, return values, common patterns.

assistant: *class* bmesh.types.BMElemSeq
:   General sequence type used for accessing any sequence of
    [`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert"), [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge"), [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace"), [`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.types.BMLoop").

    When accessed via [`bmesh.types.BMesh.verts`](#bmesh.types.bmesh.types.BMesh.verts "bmesh.types.bmesh.types.BMesh.verts"), [`bmesh.types.BMesh.edges`](#bmesh.types.bmesh.types.BMesh.edges "bmesh.types.bmesh.types.BMesh.edges"), [`bmesh.types.BMesh.faces`](#bmesh.types.bmesh.types.BMesh.faces "bmesh.types.bmesh.types.BMesh.faces")
    there are also functions to create/remove items.

    index_update()
    :   Initialize the index values of this sequence.

        This is the equivalent of looping over all elements and assigning the index values.

        ```
        for index, ele in enumerate(sequence):
            ele.index = index
        ```

*class* bmesh.types.BMVertSeq
:   ensure_lookup_table()
    :   Ensure internal data needed for int subscription is initialized with verts/edges/faces, eg `bm.verts[index]`.

        This needs to be called again after adding/removing data in this sequence.

    index_update()
    :   Initialize the index values of this sequence.

        This is the equivalent of looping over all elements and assigning the index values.

        ```
        for index, ele in enumerate(sequence):
            ele.index = index
        ```

    new(*co=(0.0, 0.0, 0.0)*, *example=None*)
    :   Create a new vertex.

        Parameters:
        :   - **co** (*float triplet*) – The initial location of the vertex (optional argument).
            - **example** ([`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")) – Existing vert to initialize settings.

        Returns:
        :   The newly created vertex.

        Return type:
        :   [`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")

    remove(*vert*)
    :   Remove a vert.

    sort(*\**, *key=None*, *reverse=False*)
    :   Sort the elements of this sequence, using an optional custom sort key.
        Indices of elements are not changed, [`bmesh.types.BMElemSeq.index_update`](#bmesh.types.bmesh.types.BMElemSeq.index_update "bmesh.types.bmesh.types.BMElemSeq.index_update") can be used for that.

        Parameters:
        :   - **key** (Callable[[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert") | [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge") | [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")], int] | None) – The key that sets the ordering of the elements.
            - **reverse** (*bool*) – Reverse the order of the elements

    layers
    :   custom-data layers (read-only).

        Type:
        :   [`bmesh.types.BMLayerAccessVert`](#bmesh.types.bmesh.types.BMLayerAccessVert "bmesh.types.bmesh.types.BMLayerAccessVert")

*class* bmesh.types.BMEdgeSeq
:   ensure_lookup_table()
    :   Ensure internal data needed for int subscription is initialized with verts/edges/faces, eg `bm.verts[index]`.

        This needs to be called again after adding/removing data in this sequence.

    get(*verts*, *fallback=None*)
    :   Return an edge which uses the **verts** passed.

        Parameters:
        :   - **verts** (Sequence[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")]) – Sequence of verts.
            - **fallback** – Return this value if nothing is found.

        Returns:
        :   The edge found or None

        Return type:
        :   [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge")

    index_update()
    :   Initialize the index values of this sequence.

        This is the equivalent of looping over all elements and assigning the index values.

        ```
        for index, ele in enumerate(sequence):
            ele.index = index
        ```

    new(*verts*, *example=None*)
    :   Create a new edge from a given pair of verts.

        Parameters:
        :   - **verts** (Sequence[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")]) – Vertex pair.
            - **example** ([`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge")) – Existing edge to initialize settings (optional argument).

        Returns:
        :   The newly created edge.

        Return type:
        :   [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge")

    remove(*edge*)
    :   Remove an edge.

    sort(*\**, *key=None*, *reverse=False*)
    :   Sort the elements of this sequence, using an optional custom sort key.
        Indices of elements are not changed, [`bmesh.types.BMElemSeq.index_update`](#bmesh.types.bmesh.types.BMElemSeq.index_update "bmesh.types.bmesh.types.BMElemSeq.index_update") can be used for that.

        Parameters:
        :   - **key** (Callable[[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert") | [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge") | [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")], int] | None) – The key that sets the ordering of the elements.
            - **reverse** (*bool*) – Reverse the order of the elements

    layers
    :   custom-data layers (read-only).

        Type:
        :   [`bmesh.types.BMLayerAccessEdge`](#bmesh.types.bmesh.types.BMLayerAccessEdge "bmesh.types.bmesh.types.BMLayerAccessEdge")

*class* bmesh.types.BMFaceSeq
:   ensure_lookup_table()
    :   Ensure internal data needed for int subscription is initialized with verts/edges/faces, eg `bm.verts[index]`.

        This needs to be called again after adding/removing data in this sequence.

    get(*verts*, *fallback=None*)
    :   Return a face which uses the **verts** passed.

        Parameters:
        :   - **verts** (Sequence[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")]) – Sequence of verts.
            - **fallback** – Return this value if nothing is found.

        Returns:
        :   The face found or None

        Return type:
        :   [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")

    index_update()
    :   Initialize the index values of this sequence.

        This is the equivalent of looping over all elements and assigning the index values.

        ```
        for index, ele in enumerate(sequence):
            ele.index = index
        ```

    new(*verts*, *example=None*)
    :   Create a new face from a given set of verts.

        Parameters:
        :   - **verts** (Sequence[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")]) – Sequence of 3 or more verts.
            - **example** ([`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")) – Existing face to initialize settings (optional argument).

        Returns:
        :   The newly created face.

        Return type:
        :   [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")

    remove(*face*)
    :   Remove a face.

    sort(*\**, *key=None*, *reverse=False*)
    :   Sort the elements of this sequence, using an optional custom sort key.
        Indices of elements are not changed, [`bmesh.types.BMElemSeq.index_update`](#bmesh.types.bmesh.types.BMElemSeq.index_update "bmesh.types.bmesh.types.BMElemSeq.index_update") can be used for that.

        Parameters:
        :   - **key** (Callable[[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert") | [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge") | [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")], int] | None) – The key that sets the ordering of the elements.
            - **reverse** (*bool*) – Reverse the order of the elements

    active
    :   active face.

        Type:
        :   [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace") | None

    layers
    :   custom-data layers (read-only).

        Type:
        :   [`bmesh.types.BMLayerAccessFace`](#bmesh.types.bmesh.types.BMLayerAccessFace "bmesh.types.bmesh.types.BMLayerAccessFace")

*class* bmesh.types.BMLoopSeq
:   layers
    :   custom-data layers (read-only).

        Type:
        :   [`bmesh.types.BMLayerAccessLoop`](#bmesh.types.bmesh.types.BMLayerAccessLoop "bmesh.types.bmesh.types.BMLayerAccessLoop")

*class* bmesh.types.BMIter
:   Internal BMesh type for looping over verts/faces/edges,
    used for iterating over [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") types.