user: Give a detailed overview of Custom-Data Layer Access: syntax, arguments, return values, common patterns.

assistant: *class* bmesh.types.BMLayerAccessVert
:   Exposes custom-data layer attributes.

    bool
    :   Generic boolean custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of boolean

    color
    :   Generic RGBA color with 8-bit precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    deform
    :   Vertex deform weight [`bmesh.types.BMDeformVert`](#bmesh.types.bmesh.types.BMDeformVert "bmesh.types.bmesh.types.BMDeformVert") (TODO).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`bmesh.types.BMDeformVert`](#bmesh.types.bmesh.types.BMDeformVert "bmesh.types.bmesh.types.BMDeformVert")

    float
    :   Generic float custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of float

    float_color
    :   Generic RGBA color with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float_vector
    :   Generic 3D vector with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    int
    :   Generic int custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of int

    shape
    :   Vertex shape-key absolute location (as a 3D Vector).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    skin
    :   Accessor for skin layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of `bmesh.types.BMVertSkin`

    string
    :   Generic string custom-data layer (exposed as bytes, 255 max length).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of bytes

*class* bmesh.types.BMLayerAccessEdge
:   Exposes custom-data layer attributes.

    bool
    :   Generic boolean custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of boolean

    color
    :   Generic RGBA color with 8-bit precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float
    :   Generic float custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of float

    float_color
    :   Generic RGBA color with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float_vector
    :   Generic 3D vector with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    int
    :   Generic int custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of int

    string
    :   Generic string custom-data layer (exposed as bytes, 255 max length).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of bytes

*class* bmesh.types.BMLayerAccessFace
:   Exposes custom-data layer attributes.

    bool
    :   Generic boolean custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of boolean

    color
    :   Generic RGBA color with 8-bit precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float
    :   Generic float custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of float

    float_color
    :   Generic RGBA color with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float_vector
    :   Generic 3D vector with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    int
    :   Generic int custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of int

    string
    :   Generic string custom-data layer (exposed as bytes, 255 max length).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of bytes

*class* bmesh.types.BMLayerAccessLoop
:   Exposes custom-data layer attributes.

    bool
    :   Generic boolean custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of boolean

    color
    :   Generic RGBA color with 8-bit precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float
    :   Generic float custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of float

    float_color
    :   Generic RGBA color with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    float_vector
    :   Generic 3D vector with float precision custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector")

    int
    :   Generic int custom-data layer.

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of int

    string
    :   Generic string custom-data layer (exposed as bytes, 255 max length).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of bytes

    uv
    :   Accessor for [`bmesh.types.BMLoopUV`](#bmesh.types.bmesh.types.BMLoopUV "bmesh.types.bmesh.types.BMLoopUV") UV (as a 2D Vector).

        Type:
        :   [`bmesh.types.BMLayerCollection`](#bmesh.types.bmesh.types.BMLayerCollection "bmesh.types.bmesh.types.BMLayerCollection") of [`bmesh.types.BMLoopUV`](#bmesh.types.bmesh.types.BMLoopUV "bmesh.types.bmesh.types.BMLoopUV")

*class* bmesh.types.BMLayerCollection
:   Gives access to a collection of custom-data layers of the same type and behaves like Python dictionaries, except for the ability to do list like index access.

    get(*key*, *default=None*)
    :   Returns the value of the layer matching the key or default
        when not found (matches Python’s dictionary function of the same name).

        Parameters:
        :   - **key** (*str*) – The key associated with the layer.
            - **default** (*Any*) – Optional argument for the value to return if
              *key* is not found.

    items()
    :   Return the identifiers of collection members
        (matching Python’s dict.items() functionality).

        Returns:
        :   (key, value) pairs for each member of this collection.

        Return type:
        :   list[tuple[str, [`bmesh.types.BMLayerItem`](#bmesh.types.bmesh.types.BMLayerItem "bmesh.types.bmesh.types.BMLayerItem")]]

    keys()
    :   Return the identifiers of collection members
        (matching Python’s dict.keys() functionality).

        Returns:
        :   the identifiers for each member of this collection.

        Return type:
        :   list[str]

    new(*name*)
    :   Create a new layer

        Parameters:
        :   **name** (*str*) – Optional name argument (will be made unique).

        Returns:
        :   The newly created layer.

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

    remove(*layer*)
    :   Remove a layer

        Parameters:
        :   **layer** ([`bmesh.types.BMLayerItem`](#bmesh.types.bmesh.types.BMLayerItem "bmesh.types.bmesh.types.BMLayerItem")) – The layer to remove.

    values()
    :   Return the values of collection
        (matching Python’s dict.values() functionality).

        Returns:
        :   the members of this collection.

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

    verify()
    :   Create a new layer or return an existing active layer

        Returns:
        :   The newly verified layer.

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

    active
    :   The active layer of this type (read-only).

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

    is_singleton
    :   True if there can exists only one layer of this type (read-only).

        Type:
        :   bool

*class* bmesh.types.BMLayerItem
:   Exposes a single custom data layer, their main purpose is for use as item accessors to custom-data when used with vert/edge/face/loop data.

    copy_from(*other*)
    :   Return a copy of the layer

        Parameters:
        :   **other** ([`bmesh.types.BMLayerItem`](#bmesh.types.bmesh.types.BMLayerItem "bmesh.types.bmesh.types.BMLayerItem")) – Another layer to copy from.

    name
    :   The layers unique name (read-only).

        Type:
        :   str