user: What is Mesh Elements and how is it used in Blender Python scripting?

assistant: *class* bmesh.types.BMVert
:   The BMesh vertex type

    calc_edge_angle(*fallback=None*)
    :   Return the angle between this vert’s two connected edges.

        Parameters:
        :   **fallback** (*Any*) – return this when the vert doesn’t have 2 edges
            (instead of raising a `ValueError`).

        Returns:
        :   Angle between edges in radians.

        Return type:
        :   float

    calc_shell_factor()
    :   Return a multiplier calculated based on the sharpness of the vertex.
        Where a flat surface gives 1.0, and higher values sharper edges.
        This is used to maintain shell thickness when offsetting verts along their normals.

        Returns:
        :   offset multiplier

        Return type:
        :   float

    copy_from(*other*)
    :   Copy values from another element of matching type.

    copy_from_face_interp(*face*)
    :   Interpolate the customdata from a face onto this loop (the loops vert should overlap the face).

        Parameters:
        :   **face** ([`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")) – The face to interpolate data from.

    copy_from_vert_interp(*vert_pair*, *fac*)
    :   Interpolate the customdata from a vert between 2 other verts.

        Parameters:
        :   **vert_pair** (Sequence[[`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")]) – The verts between which to interpolate data from.

    hide_set(*hide*)
    :   Set the hide state.
        This is different from the *hide* attribute because it updates the selection and hide state of associated geometry.

        Parameters:
        :   **hide** (*bool*) – Hidden or visible.

    normal_update()
    :   Update vertex normal.
        This does not update the normals of adjoining faces.

    select_set(*select*)
    :   Set the selection.
        This is different from the *select* attribute because it updates the selection state of associated geometry.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    co
    :   The coordinates for this vertex as a 3D, wrapped vector.

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    hide
    :   Hidden state of this element.

        Type:
        :   bool

    index
    :   Index of this element.

        Type:
        :   int

    is_boundary
    :   True when this vertex is connected to boundary edges (read-only).

        Type:
        :   bool

    is_manifold
    :   True when this vertex is manifold (read-only).

        Type:
        :   bool

    is_valid
    :   True when this element is valid (hasn’t been removed).

        Type:
        :   bool

    is_wire
    :   True when this vertex is not connected to any faces (read-only).

        Type:
        :   bool

    link_edges
    :   Edges connected to this vertex (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge")

    link_faces
    :   Faces connected to this vertex (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")

    link_loops
    :   Loops that use this vertex (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.types.BMLoop")

    normal
    :   The normal for this vertex as a 3D, wrapped vector.

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    select
    :   Selected state of this element.

        Type:
        :   bool

    tag
    :   Generic attribute scripts can use for own logic

        Type:
        :   bool

*class* bmesh.types.BMEdge
:   The BMesh edge connecting 2 verts

    calc_face_angle(*fallback=None*)
    :   Parameters:
        :   **fallback** (*Any*) – return this when the edge doesn’t have 2 faces
            (instead of raising a `ValueError`).

        Returns:
        :   The angle between 2 connected faces in radians.

        Return type:
        :   float

    calc_face_angle_signed(*fallback=None*)
    :   Parameters:
        :   **fallback** (*Any*) – return this when the edge doesn’t have 2 faces
            (instead of raising a `ValueError`).

        Returns:
        :   The angle between 2 connected faces in radians (negative for concave join).

        Return type:
        :   float

    calc_length()
    :   Returns:
        :   The length between both verts.

        Return type:
        :   float

    calc_tangent(*loop*)
    :   Return the tangent at this edge relative to a face (pointing inward into the face).
        This uses the face normal for calculation.

        Parameters:
        :   **loop** ([`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.types.BMLoop")) – The loop used for tangent calculation.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    copy_from(*other*)
    :   Copy values from another element of matching type.

    hide_set(*hide*)
    :   Set the hide state.
        This is different from the *hide* attribute because it updates the selection and hide state of associated geometry.

        Parameters:
        :   **hide** (*bool*) – Hidden or visible.

    normal_update()
    :   Update normals of all connected faces and the edge verts.

    other_vert(*vert*)
    :   Return the other vertex on this edge or None if the vertex is not used by this edge.

        Parameters:
        :   **vert** ([`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")) – a vert in this edge.

        Returns:
        :   The edges other vert.

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

    select_set(*select*)
    :   Set the selection.
        This is different from the *select* attribute because it updates the selection state of associated geometry.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    hide
    :   Hidden state of this element.

        Type:
        :   bool

    index
    :   Index of this element.

        Type:
        :   int

    is_boundary
    :   True when this edge is at the boundary of a face (read-only).

        Type:
        :   bool

    is_contiguous
    :   True when this edge is manifold, between two faces with the same winding (read-only).

        Type:
        :   bool

    is_convex
    :   True when this edge joins two convex faces, depends on a valid face normal (read-only).

        Type:
        :   bool

    is_manifold
    :   True when this edge is manifold (read-only).

        Type:
        :   bool

    is_valid
    :   True when this element is valid (hasn’t been removed).

        Type:
        :   bool

    is_wire
    :   True when this edge is not connected to any faces (read-only).

        Type:
        :   bool

    link_faces
    :   Faces connected to this edge, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")

    link_loops
    :   Loops connected to this edge, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.types.BMLoop")

    seam
    :   Seam for UV unwrapping.

        Type:
        :   bool

    select
    :   Selected state of this element.

        Type:
        :   bool

    smooth
    :   Smooth state of this element.

        Type:
        :   bool

    tag
    :   Generic attribute scripts can use for own logic

        Type:
        :   bool

    verts
    :   Verts this edge uses (always 2), (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")

*class* bmesh.types.BMFace
:   The BMesh face with 3 or more sides

    calc_area()
    :   Return the area of the face.

        Returns:
        :   Return the area of the face.

        Return type:
        :   float

    calc_center_bounds()
    :   Return bounds center of the face.

        Returns:
        :   a 3D vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_center_median()
    :   Return median center of the face.

        Returns:
        :   a 3D vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_center_median_weighted()
    :   Return median center of the face weighted by edge lengths.

        Returns:
        :   a 3D vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_perimeter()
    :   Return the perimeter of the face.

        Returns:
        :   Return the perimeter of the face.

        Return type:
        :   float

    calc_tangent_edge()
    :   Return face tangent based on longest edge.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_tangent_edge_diagonal()
    :   Return face tangent based on the edge farthest from any vertex.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_tangent_edge_pair()
    :   Return face tangent based on the two longest disconnected edges.

        - Tris: Use the edge pair with the most similar lengths.
        - Quads: Use the longest edge pair.
        - NGons: Use the two longest disconnected edges.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_tangent_vert_diagonal()
    :   Return face tangent based on the two most distant vertices.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    copy(*\**, *verts=True*, *edges=True*)
    :   Make a copy of this face.

        Parameters:
        :   - **verts** (*bool*) – When set, the faces verts will be duplicated too.
            - **edges** (*bool*) – When set, the faces edges will be duplicated too.

        Returns:
        :   The newly created face.

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

    copy_from(*other*)
    :   Copy values from another element of matching type.

    copy_from_face_interp(*face*, *vert=True*)
    :   Interpolate the customdata from another face onto this one (faces should overlap).

        Parameters:
        :   - **face** ([`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")) – The face to interpolate data from.
            - **vert** (*bool*) – When True, also copy vertex data.

    hide_set(*hide*)
    :   Set the hide state.
        This is different from the *hide* attribute because it updates the selection and hide state of associated geometry.

        Parameters:
        :   **hide** (*bool*) – Hidden or visible.

    normal_flip()
    :   Reverses winding of a face, which flips its normal.

    normal_update()
    :   Update face normal based on the positions of the face verts.
        This does not update the normals of face verts.

    select_set(*select*)
    :   Set the selection.
        This is different from the *select* attribute because it updates the selection state of associated geometry.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    uv_select_set(*select*)
    :   Select the face.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    edges
    :   Edges of this face, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMEdge`](#bmesh.types.bmesh.types.BMEdge "bmesh.types.bmesh.types.BMEdge")

    hide
    :   Hidden state of this element.

        Type:
        :   bool

    index
    :   Index of this element.

        Type:
        :   int

    is_valid
    :   True when this element is valid (hasn’t been removed).

        Type:
        :   bool

    loops
    :   Loops of this face, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.types.BMLoop")

    material_index
    :   The face’s material index.

        Type:
        :   int

    normal
    :   The normal for this face as a 3D, wrapped vector.

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    select
    :   Selected state of this element.

        Type:
        :   bool

    smooth
    :   Smooth state of this element.

        Type:
        :   bool

    tag
    :   Generic attribute scripts can use for own logic

        Type:
        :   bool

    uv_select
    :   UV selected state of this element.

        Type:
        :   bool

    verts
    :   Verts of this face, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMVert`](#bmesh.types.bmesh.types.BMVert "bmesh.types.bmesh.types.BMVert")

*class* bmesh.types.BMLoop
:   This is normally accessed from [`bmesh.types.BMFace.loops`](#bmesh.types.bmesh.types.BMFace.loops "bmesh.types.bmesh.types.BMFace.loops") where each face loop represents a corner of the face.

    calc_angle()
    :   Return the angle at this loops corner of the face.
        This is calculated so sharper corners give lower angles.

        Returns:
        :   The angle in radians.

        Return type:
        :   float

    calc_normal()
    :   Return normal at this loops corner of the face.
        Falls back to the face normal for straight lines.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    calc_tangent()
    :   Return the tangent at this loops corner of the face (pointing inward into the face).
        Falls back to the face normal for straight lines.

        Returns:
        :   a normalized vector.

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    copy_from(*other*)
    :   Copy values from another element of matching type.

    copy_from_face_interp(*face*, *vert=True*, *multires=True*)
    :   Interpolate the customdata from a face onto this loop (the loops vert should overlap the face).

        Parameters:
        :   - **face** ([`bmesh.types.BMFace`](#bmesh.types.bmesh.types.BMFace "bmesh.types.bmesh.types.BMFace")) – The face to interpolate data from.
            - **vert** (*bool*) – When enabled, interpolate the loops vertex data (optional).
            - **multires** (*bool*) – When enabled, interpolate the loops multires data (optional).

    uv_select_edge_set(*select*)
    :   Set the UV edge selection state.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    uv_select_vert_set(*select*)
    :   Select the UV vertex.

        Parameters:
        :   **select** (*bool*) – Select or de-select.

    edge
    :   The loop’s edge (between this loop and the next), (read-only).

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

    face
    :   The face this loop makes (read-only).

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

    index
    :   Index of this element.

        Type:
        :   int

    is_convex
    :   True when this loop is at the convex corner of a face, depends on a valid face normal (read-only).

        Type:
        :   bool

    is_valid
    :   True when this element is valid (hasn’t been removed).

        Type:
        :   bool

    link_loop_next
    :   The next face corner (read-only).

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

    link_loop_prev
    :   The previous face corner (read-only).

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

    link_loop_radial_next
    :   The next loop around the edge (read-only).

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

    link_loop_radial_prev
    :   The previous loop around the edge (read-only).

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

    link_loops
    :   Loops connected to this loop, (read-only).

        Type:
        :   [`bmesh.types.BMElemSeq`](#bmesh.types.bmesh.types.BMElemSeq "bmesh.types.bmesh.types.BMElemSeq") of [`bmesh.types.BMLoop`](#bmesh.types.bmesh.types.BMLoop "bmesh.types.bmesh.ty