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

assistant: # FCurve(bpy_struct)

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

*class* bpy.types.FCurve(*bpy_struct*)
:   F-Curve defining values of a period of time

    array_index
    :   Index to the specific property affected by F-Curve if applicable

        Type:
        :   int in [0, inf], default 0

    auto_smoothing
    :   Algorithm used to compute automatic handles

        Type:
        :   enum in [Fcurve Auto Smoothing Items](bpy_types_enum_items/fcurve_auto_smoothing_items.html#rna-enum-fcurve-auto-smoothing-items), default `'NONE'`

    color
    :   Color of the F-Curve in the Graph Editor

        Type:
        :   [`mathutils.Color`](mathutils.html#mathutils.Color "mathutils.Color") of 3 items in [0, 1], default (0.0, 0.0, 0.0)

    color_mode
    :   Method used to determine color of F-Curve in Graph Editor

        - `AUTO_RAINBOW`
          Auto Rainbow – Cycle through the rainbow, trying to give each curve a unique color.
        - `AUTO_RGB`
          Auto XYZ to RGB – Use axis colors for transform and color properties, and auto-rainbow for the rest.
        - `AUTO_YRGB`
          Auto WXYZ to YRGB – Use WXYZ axis colors for quaternion/axis-angle rotations, XYZ axis colors for other transform and color properties, and auto-rainbow for the rest.
        - `CUSTOM`
          User Defined – Use custom hand-picked color for F-Curve.

        Type:
        :   enum in [`'AUTO_RAINBOW'`, `'AUTO_RGB'`, `'AUTO_YRGB'`, `'CUSTOM'`], default `'AUTO_RAINBOW'`

    data_path
    :   RNA Path to property affected by F-Curve

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

    driver
    :   Channel Driver (only set for Driver F-Curves)

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

    extrapolation
    :   Method used for evaluating value of F-Curve outside first and last keyframes

        - `CONSTANT`
          Constant – Hold values of endpoint keyframes.
        - `LINEAR`
          Linear – Use slope of curve leading in/out of endpoint keyframes.

        Type:
        :   enum in [`'CONSTANT'`, `'LINEAR'`], default `'CONSTANT'`

    group
    :   Action Group that this F-Curve belongs to

        Type:
        :   [`ActionGroup`](bpy.types.ActionGroup.html#bpy.types.ActionGroup "bpy.types.ActionGroup")

    hide
    :   F-Curve and its keyframes are hidden in the Graph Editor graphs

        Type:
        :   boolean, default False

    is_empty
    :   True if the curve contributes no animation due to lack of keyframes or useful modifiers, and should be deleted

        Type:
        :   boolean, default False, (readonly)

    is_valid
    :   False when F-Curve could not be evaluated in past, so should be skipped when evaluating

        Type:
        :   boolean, default False

    keyframe_points
    :   User-editable keyframes

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

    lock
    :   F-Curve’s settings cannot be edited

        Type:
        :   boolean, default False

    modifiers
    :   Modifiers affecting the shape of the F-Curve

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

    mute
    :   Disable F-Curve evaluation

        Type:
        :   boolean, default False

    sampled_points
    :   Sampled animation data

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

    select
    :   F-Curve is selected for editing

        Type:
        :   boolean, default False

    evaluate(*frame*)
    :   Evaluate F-Curve

        Parameters:
        :   **frame** (*float in* *[**-inf**,* *inf**]*) – Frame, Evaluate F-Curve at given frame

        Returns:
        :   Value, Value of F-Curve specific frame

        Return type:
        :   float in [-inf, inf]

    update()
    :   Ensure keyframes are sorted in chronological order and handles are set correctly

    range()
    :   Get the time extents for F-Curve

        Returns:
        :   Range, Min/Max values

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf]

    update_autoflags(*data*)
    :   Update FCurve flags set automatically from affected property (currently, integer/discrete flags set when the property is not a float)

        Parameters:
        :   **data** ([`AnyType`](bpy.types.AnyType.html#bpy.types.AnyType "bpy.types.AnyType"), (never None)) – Data, Data containing the property controlled by given FCurve

    convert_to_samples(*start*, *end*)
    :   Convert current FCurve from keyframes to sample points, if necessary

        Parameters:
        :   - **start** (*int in* *[**-1048574**,* *1048574**]*) – Start Frame
            - **end** (*int in* *[**-1048574**,* *1048574**]*) – End Frame

    convert_to_keyframes(*start*, *end*)
    :   Convert current FCurve from sample points to keyframes (linear interpolation), if necessary

        Parameters:
        :   - **start** (*int in* *[**-1048574**,* *1048574**]*) – Start Frame
            - **end** (*int in* *[**-1048574**,* *1048574**]*) – End Frame

    bake(*start*, *end*, *\**, *step=1.0*, *remove='IN_RANGE'*)
    :   Place keys at even intervals on the existing curve.

        Parameters:
        :   - **start** (*int in* *[**-1048574**,* *1048574**]*) – Start Frame, Frame at which to start baking
            - **end** (*int in* *[**-1048574**,* *1048574**]*) – End Frame, Frame at which to end baking (inclusive)
            - **step** (*float in* *[**0.01**,* *inf**]**,* *(**optional**)*) – Step, At which interval to add keys
            - **remove** (enum in [`'NONE'`, `'IN_RANGE'`, `'OUT_RANGE'`, `'ALL'`], (optional)) –

              Remove Options, Choose which keys should be automatically removed by the bake

              - `NONE`
                None – Keep all keys.
              - `IN_RANGE`
                In Range – Remove all keys within the defined range.
              - `OUT_RANGE`
                Outside Range – Remove all keys outside the defined range.
              - `ALL`
                All – Remove all existing keys.

    *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