user: Explain Lattice(ID) in complete detail according to the official Blender documentation.

assistant: # Lattice(ID)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`ID`](bpy.types.ID.html#bpy.types.ID "bpy.types.ID")

*class* bpy.types.Lattice(*ID*)
:   Lattice data-block defining a grid for deforming other objects

    animation_data
    :   Animation data for this data-block

        Type:
        :   [`AnimData`](bpy.types.AnimData.html#bpy.types.AnimData "bpy.types.AnimData"), (readonly)

    interpolation_type_u
    :   Type:
        :   enum in [`'KEY_LINEAR'`, `'KEY_CARDINAL'`, `'KEY_CATMULL_ROM'`, `'KEY_BSPLINE'`], default `'KEY_BSPLINE'`

    interpolation_type_v
    :   Type:
        :   enum in [`'KEY_LINEAR'`, `'KEY_CARDINAL'`, `'KEY_CATMULL_ROM'`, `'KEY_BSPLINE'`], default `'KEY_BSPLINE'`

    interpolation_type_w
    :   Type:
        :   enum in [`'KEY_LINEAR'`, `'KEY_CARDINAL'`, `'KEY_CATMULL_ROM'`, `'KEY_BSPLINE'`], default `'KEY_BSPLINE'`

    is_editmode
    :   True when used in editmode

        Type:
        :   boolean, default False, (readonly)

    points
    :   Points of the lattice

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`LatticePoint`](bpy.types.LatticePoint.html#bpy.types.LatticePoint "bpy.types.LatticePoint"), (readonly)

    points_u
    :   Points in U direction (cannot be changed when there are shape keys)

        Type:
        :   int in [1, 64], default 0

    points_v
    :   Points in V direction (cannot be changed when there are shape keys)

        Type:
        :   int in [1, 64], default 0

    points_w
    :   Points in W direction (cannot be changed when there are shape keys)

        Type:
        :   int in [1, 64], default 0

    shape_keys
    :   Type:
        :   [`Key`](bpy.types.Key.html#bpy.types.Key "bpy.types.Key"), (readonly)

    use_outside
    :   Only display and take into account the outer vertices

        Type:
        :   boolean, default False

    vertex_group
    :   Vertex group to apply the influence of the lattice

        Type:
        :   string, default “”, (never None)

    transform(*matrix*, *\**, *shape_keys=False*)
    :   Transform lattice by a matrix

        Parameters:
        :   - **matrix** ([`mathutils.Matrix`](mathutils.html#mathutils.Matrix "mathutils.Matrix") of 4 \* 4 items in [-inf, inf]) – Matrix
            - **shape_keys** (*boolean**,* *(**optional**)*) – Transform Shape Keys

    update_gpu_tag()
    :   update_gpu_tag

    unit_test_compare(*\**, *lattice=None*, *threshold=7.1526e-06*)
    :   unit_test_compare

        Parameters:
        :   - **lattice** ([`Lattice`](#bpy.types.Lattice "bpy.types.Lattice"), (optional)) – Lattice to compare to
            - **threshold** (*float in* *[**0**,* *inf**]**,* *(**optional**)*) – Threshold, Comparison tolerance threshold

        Returns:
        :   Return value, String description of result of comparison

        Return type:
        :   string, (never None)

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type