user: Show practical ways to work with Graph Operators in a Blender add-on or script – include code.

assistant: with their keys
        - **tweak** (*boolean**,* *(**optional**)*) – Tweak, Operator has been activated using a click-drag event
        - **use_curve_selection** (*boolean**,* *(**optional**)*) – Select Curves, Allow selecting all the keyframes of a curve by selecting the calculated F-curve
        - **xmin** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – X Min
        - **xmax** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – X Max
        - **ymin** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Y Min
        - **ymax** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Y Max
        - **wait_for_input** (*boolean**,* *(**optional**)*) – Wait for Input
        - **mode** (enum in [`'SET'`, `'ADD'`, `'SUB'`], (optional)) –

          Mode

          - `SET`
            Set – Set a new selection.
          - `ADD`
            Extend – Extend existing selection.
          - `SUB`
            Subtract – Subtract existing selection.

bpy.ops.graph.select_circle(*\**, *x=0*, *y=0*, *radius=25*, *wait_for_input=True*, *mode='SET'*, *include_handles=True*, *use_curve_selection=True*)
:   Select keyframe points using circle selection

    Parameters:
    :   - **x** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – X
        - **y** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Y
        - **radius** (*int in* *[**1**,* *inf**]**,* *(**optional**)*) – Radius
        - **wait_for_input** (*boolean**,* *(**optional**)*) – Wait for Input
        - **mode** (enum in [`'SET'`, `'ADD'`, `'SUB'`], (optional)) –

          Mode

          - `SET`
            Set – Set a new selection.
          - `ADD`
            Extend – Extend existing selection.
          - `SUB`
            Subtract – Subtract existing selection.
        - **include_handles** (*boolean**,* *(**optional**)*) – Include Handles, Are handles tested individually against the selection criteria, independently from their keys. When unchecked, handles are (de)selected in unison with their keys
        - **use_curve_selection** (*boolean**,* *(**optional**)*) – Select Curves, Allow selecting all the keyframes of a curve by selecting the curve itself

bpy.ops.graph.select_column(*\**, *mode='KEYS'*)
:   Select all keyframes on the specified frame(s)

    Parameters:
    :   **mode** (enum in [`'KEYS'`, `'CFRA'`, `'MARKERS_COLUMN'`, `'MARKERS_BETWEEN'`], (optional)) – Mode

bpy.ops.graph.select_key_handles(*\**, *left_handle_action='SELECT'*, *right_handle_action='SELECT'*, *key_action='KEEP'*)
:   For selected keyframes, select/deselect any combination of the key itself and its handles

    Parameters:
    :   - **left_handle_action** (enum in [`'SELECT'`, `'DESELECT'`, `'KEEP'`], (optional)) –

          Left Handle, Effect on the left handle

          - `SELECT`
            Select.
          - `DESELECT`
            Deselect.
          - `KEEP`
            Keep – Leave as is.
        - **right_handle_action** (enum in [`'SELECT'`, `'DESELECT'`, `'KEEP'`], (optional)) –

          Right Handle, Effect on the right handle

          - `SELECT`
            Select.
          - `DESELECT`
            Deselect.
          - `KEEP`
            Keep – Leave as is.
        - **key_action** (enum in [`'SELECT'`, `'DESELECT'`, `'KEEP'`], (optional)) –

          Key, Effect on the key itself

          - `SELECT`
            Select.
          - `DESELECT`
            Deselect.
          - `KEEP`
            Keep – Leave as is.

bpy.ops.graph.select_lasso(*\**, *path=None*, *use_smooth_stroke=False*, *smooth_stroke_factor=0.75*, *smooth_stroke_radius=35*, *mode='SET'*, *include_handles=True*, *use_curve_selection=True*)
:   Select keyframe points using lasso selection

    Parameters:
    :   - **path** (`bpy_prop_collection` of `OperatorMousePath`, (optional)) – Path
        - **use_smooth_stroke** (*boolean**,* *(**optional**)*) – Stabilize Stroke, Selection lags behind mouse and follows a smoother path
        - **smooth_stroke_factor** (*float in* *[**0.5**,* *0.99**]**,* *(**optional**)*) – Smooth Stroke Factor, Higher values gives a smoother stroke
        - **smooth_stroke_radius** (*int in* *[**10**,* *200**]**,* *(**optional**)*) – Smooth Stroke Radius, Minimum distance from last point before selection continues
        - **mode** (enum in [`'SET'`, `'ADD'`, `'SUB'`], (optional)) –

          Mode

          - `SET`
            Set – Set a new selection.
          - `ADD`
            Extend – Extend existing selection.
          - `SUB`
            Subtract – Subtract existing selection.
        - **include_handles** (*boolean**,* *(**optional**)*) – Include Handles, Are handles tested individually against the selection criteria, independently from their keys. When unchecked, handles are (de)selected in unison with their keys
        - **use_curve_selection** (*boolean**,* *(**optional**)*) – Select Curves, Allow selecting all the keyframes of a curve by selecting the curve itself

bpy.ops.graph.select_leftright(*\**, *mode='CHECK'*, *extend=False*)
:   Select keyframes to the left or the right of the current frame

    Parameters:
    :   - **mode** (enum in [`'CHECK'`, `'LEFT'`, `'RIGHT'`], (optional)) – Mode
        - **extend** (*boolean**,* *(**optional**)*) – Extend Select

bpy.ops.graph.select_less()
:   Deselect keyframes on ends of selection islands

bpy.ops.graph.select_linked()
:   Select keyframes occurring in the same F-Curves as selected ones

bpy.ops.graph.select_more()
:   Select keyframes beside already selected ones

bpy.ops.graph.shear(*\**, *factor=0.0*, *direction='FROM_LEFT'*)
:   Affect the value of the keys linearly, keeping the same relationship between them using either the left or the right key as reference

    Parameters:
    :   - **factor** (*float in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Shear Factor, The amount of shear to apply
        - **direction** (enum in [`'FROM_LEFT'`, `'FROM_RIGHT'`], (optional)) –

          Direction, Which end of the segment to use as a reference to shear from

          - `FROM_LEFT`
            From Left – Shear the keys using the left key as reference.
          - `FROM_RIGHT`
            From Right – Shear the keys using the right key as reference.

bpy.ops.graph.smooth()
:   Apply weighted moving means to make selected F-Curves less bumpy

bpy.ops.graph.snap(*\**, *type='CFRA'*)
:   Snap selected keyframes to the chosen times/values

    Parameters:
    :   **type** (enum in [`'CFRA'`, `'VALUE'`, `'NEAREST_FRAME'`, `'NEAREST_SECOND'`, `'NEAREST_MARKER'`, `'HORIZONTAL'`], (optional)) –

        Type

        - `CFRA`
          Selection to Current Frame – Snap selected keyframes to the current frame.
        - `VALUE`
          Selection to Cursor Value – Set values of selected keyframes to the cursor value (Y/Horizontal component).
        - `NEAREST_FRAME`
          Selection to Nearest Frame – Snap selected keyframes to the nearest (whole) frame (use to fix accidental subframe offsets).
        - `NEAREST_SECOND`
          Selection to Nearest Second – Snap selected keyframes to the nearest second.
        - `NEAREST_MARKER`
          Selection to Nearest Marker – Snap selected keyframes to the nearest marker.
        - `HORIZONTAL`
          Flatten Handles – Flatten handles for a smoother transition.

bpy.ops.graph.snap_cursor_value()
:   Place the cursor value on the average value of selected keyframes

bpy.ops.graph.sound_to_samples(*\**, *filepath=''*, *check_existing=False*, *filter_blender=False*, *filter_backup=False*, *filter_image=False*, *filter_movie=True*, *filter_python=False*, *filter_font=False*, *filter_sound=True*, *filter_text=False*, *filter_archive=False*, *filter_btx=False*, *filter_alembic=False*, *filter_usd=False*, *filter_obj=False*, *filter_volume=False*, *filter_folder=True*, *filter_blenlib=False*, *filemode=9*, *show_multiview=False*, *use_multiview=False*, *display_type='DEFAULT'*, *sort_method=''*, *low=0.0*, *high=100000.0*, *attack=0.005*, *release=0.2*, *threshold=0.0*, *use_accumulate=False*, *use_additive=False*, *use_square=False*, *sthreshold=0.1*)
:   Bakes a sound wave to samples on selected channels

    Parameters:
    :   - **filepath** (*string**,* *(**optional**,* *never None**)*) – File Path, Path to file
        - **check_existing** (*boolean**,* *(**optional**)*) – Check Existing, Check and warn on overwriting existing files
        - **filter_blender** (*boolean**,* *(**optional**)*) – Filter .blend files
        - **filter_backup** (*boolean**,* *(**optional**)*) – Filter .blend files
        - **filter_image** (*boolean**,* *(**optional**)*) – Filter image files
        - **filter_movie** (*boolean**,* *(**optional**)*) – Filter movie files
        - **filter_python** (*boolean**,* *(**optional**)*) – Filter Python files
        - **filter_font** (*boolean**,* *(**optional**)*) – Filter font files
        - **filter_sound** (*boolean**,* *(**optional**)*) – Filter sound files
        - **filter_text** (*boolean**,* *(**optional**)*) – Filter text files
        - **filter_archive** (*boolean**,* *(**optional**)*) – Filter archive files
        - **filter_btx** (*boolean**,* *(**optional**)*) – Filter btx files
        - **filter_alembic** (*boolean**,* *(**optional**)*) – Filter Alembic files
        - **filter_usd** (*boolean**,* *(**optional**)*) – Filter USD files
        - **filter_obj** (*boolean**,* *(**optional**)*) – Filter OBJ files
        - **filter_volume** (*boolean**,* *(**optional**)*) – Filter OpenVDB volume files
        - **filter_folder** (*boolean**,* *(**optional**)*) – Filter folders
        - **filter_blenlib** (*boolean**,* *(**optional**)*) – Filter Blender IDs
        - **filemode** (*int in* *[**1**,* *9**]**,* *(**optional**)*) – File Browser Mode, The setting for the file browser mode to load a .blend file, a library or a special file
        - **show_multiview** (*boolean**,* *(**optional**)*) – Enable Multi-View
        - **use_multiview** (*boolean**,* *(**optional**)*) – Use Multi-View
        - **display_type** (enum in [`'DEFAULT'`, `'LIST_VERTICAL'`, `'LIST_HORIZONTAL'`, `'THUMBNAIL'`], (optional)) –

          Display Type

          - `DEFAULT`
            Default – Automatically determine display type for files.
          - `LIST_VERTICAL`
            Short List – Display files as short list.
          - `LIST_HORIZONTAL`
            Long List – Display files as a detailed list.
          - `THUMBNAIL`
            Thumbnails – Display files as thumbnails.
        - **sort_method** (*enum in* *[**]**,* *(**optional**)*) – File sorting mode
        - **low** (*float in* *[**0**,* *100000**]**,* *(**optional**)*) – Lowest Frequency, Cutoff frequency of a high-pass filter that is applied to the audio data
        - **high** (*float in* *[**0**,* *100000**]**,* *(**optional**)*) – Highest Frequency, Cutoff frequency of a low-pass filter that is applied to the audio data
        - **attack** (*float in* *[**0**,* *2**]**,* *(**optional**)*) – Attack Time, Value for the envelope calculation that tells how fast the envelope can rise (the lower the value the steeper it can rise)
        - **release** (*float in* *[**0**,* *5**]**,* *(**optional**)*) – Release Time, Value for the envelope calculation that tells how fast the envelope can fall (the lower the value the steeper it can fall)
        - **threshold** (*float in* *[**0**,* *1**]**,* *(**optional**)*) – Threshold, Minimum amplitude value needed to influence the envelope
        - **use_accumulate** (*boolean**,* *(**optional**)*) – Accumulate, Only the positive differences of the envelope amplitudes are summarized to produce the output
        - **use_additive** (*boolean**,* *(**optional**)*) – Additive, The amplitudes of the envelope are summarized (or, when Accumulate is enabled, both positive and negative differences are accumulated)
        - **use_square** (*boolean**,* *(**optional**)*) – Square, The output is a square curve (negative values always result in -1, and positive ones in 1)
        - **sthreshold** (*float in* *[**0**,* *1**]**,* *(**optional**)*) – Square Threshold, Square only: all values with an absolute amplitude lower than that result in 0

bpy.ops.graph.time_offset(*\**, *frame_offset=0.0*)
:   Shifts the value of selected keys in time

    Parameters:
    :   **frame_offset** (*float in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Frame Offset, How far in frames to offset the animation

bpy.ops.graph.view_all(*\**, *include_handles=True*)
:   Reset viewable area to show full keyframe range

    Parameters:
    :   **include_handles** (*boolean**,* *(**optional**)*) – Include Handles, Include handles of keyframes when calculating extents

bpy.ops.graph.view_frame()
:   Move the view to the current frame

bpy.ops.graph.view_selected(*\**, *include_handles=True*)
:   Reset viewable area to show selected keyframe range

    Parameters:
    :   **include_handles** (*boolean**,* *(**optional**)*) – Include Handles, Include handles of keyframes when calculating extents