user: Explain Keyframe(bpy_struct) in complete detail according to the official Blender documentation.

assistant: # Keyframe(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.Keyframe(*bpy_struct*)
:   Bézier curve point with two handles defining a Keyframe on an F-Curve

    amplitude
    :   Amount to boost elastic bounces for ‘elastic’ easing

        Type:
        :   float in [0, inf], default 0.0

    back
    :   Amount of overshoot for ‘back’ easing

        Type:
        :   float in [-inf, inf], default 0.0

    co
    :   Coordinates of the control point

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf], default (0.0, 0.0)

    co_ui
    :   Coordinates of the control point. Note: Changing this value also updates the handles similar to using the graph editor transform operator

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf], default (0.0, 0.0)

    easing
    :   Which ends of the segment between this and the next keyframe easing interpolation is applied to

        Type:
        :   enum in [Beztriple Interpolation Easing Items](bpy_types_enum_items/beztriple_interpolation_easing_items.html#rna-enum-beztriple-interpolation-easing-items), default `'AUTO'`

    handle_left
    :   Coordinates of the left handle (before the control point)

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf], default (0.0, 0.0)

    handle_left_type
    :   Handle types

        Type:
        :   enum in [Keyframe Handle Type Items](bpy_types_enum_items/keyframe_handle_type_items.html#rna-enum-keyframe-handle-type-items), default `'FREE'`

    handle_right
    :   Coordinates of the right handle (after the control point)

        Type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf], default (0.0, 0.0)

    handle_right_type
    :   Handle types

        Type:
        :   enum in [Keyframe Handle Type Items](bpy_types_enum_items/keyframe_handle_type_items.html#rna-enum-keyframe-handle-type-items), default `'FREE'`

    interpolation
    :   Interpolation method to use for segment of the F-Curve from this Keyframe until the next Keyframe

        Type:
        :   enum in [Beztriple Interpolation Mode Items](bpy_types_enum_items/beztriple_interpolation_mode_items.html#rna-enum-beztriple-interpolation-mode-items), default `'CONSTANT'`

    period
    :   Time between bounces for elastic easing

        Type:
        :   float in [-inf, inf], default 0.0

    select_control_point
    :   Control point selection status

        Type:
        :   boolean, default False

    select_left_handle
    :   Left handle selection status

        Type:
        :   boolean, default False

    select_right_handle
    :   Right handle selection status

        Type:
        :   boolean, default False

    type
    :   Type of keyframe (for visual purposes only)

        Type:
        :   enum in [Beztriple Keyframe Type Items](bpy_types_enum_items/beztriple_keyframe_type_items.html#rna-enum-beztriple-keyframe-type-items), default `'KEYFRAME'`

    *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](#bpy.types.Keyframe.type "bpy.types.Keyframe.type")