code: def common_filters(fn):
      """### Filter by Operation
  
      Runs may be filtered by operation using `--operation`.  A run is
      only included if any part of its full operation name, including
      the package and model name, matches the value.
  
      Use `--operation` multiple times to include more runs.
  
      ### Filter by Label
  
      Use `--label` to only include runs with labels containing a
      specified value. To select runs that do not contain a label,
      specify a dash '-' for `VAL`.
  
      Use `--label` multiple times to include more runs.
  
      ### Filter by Tag
  
      Use `--tag` to only include runs with a specified tag. Tags must
      match completely and are case sensitive.
  
      Use `--tag` multiple times to include more runs.
  
      ### Filter by Marked and Unmarked
  
      Use `--marked` to only include marked runs.
  
      Use `--unmarked` to only include unmarked runs. This option may
      not be used with `--marked`.
  
      ### Filter by Expression
  
      Use `--filter` to limit runs that match a filter
      expressions. Filter expressions compare run attributes, flag
      values, or scalars to target values. They may include multiple
      expressions with logical operators.
  
      For example, to match runs with flag `batch-size` equal to 100
      that have `loss` less than 0.8, use:
  
          --filter 'batch-size = 10 and loss < 0.8'
  
      **IMPORTANT:** You must quote EXPR if it contains spaces or
      characters that the shell uses (e.g. '<' or '>').
  
      Target values may be numbers, strings or lists containing numbers
      and strings. Strings that contain spaces must be quoted, otherwise
      a target string values does not require quotes. Lists are defined
      using square braces where each item is separated by a comma.
  
      Comparisons may use the following operators: '=', '!=' (or '<>'),
      '<', '<=', '>', '>='. Text comparisons may use 'contains' to test
      for case-insensitive string membership. A value may be tested for
      membership or not in a list using 'in' or 'not in'
      respectively. An value may be tested for undefined using 'is
      undefined' or defined using 'is not undefined'.
  
      Logical operators include 'or' and 'and'. An expression may be
      negated by preceding it with 'not'. Parentheses may be used to
      control the order of precedence when expressions are evaluated.
  
      If a value reference matches more than one type of run information
      (e.g. a flag is named 'label', which is also a run attribute), the
      value is read in order of run attribute, then flag value, then
      scalar. To disambiguate the reference, use a prefix `attr:`,
      `flag:`, or `scalar:` as needed. For example, to filter using a
      flag value named 'label', use 'flag:label'.
  
      Other examples:
  
        \b
        `operation = train and acc > 0.9`
        `operation = train and (acc > 0.9 or loss < 0.3)`
        `batch-size = 100 or batch-size = 200`
        `batch-size in [100,200]`
        `batch-size not in [400,800]`
        `batch-size is undefined`
        `batch-size is not undefined`
        `label contains best and operation not in [test,deploy]`
        `status in [error,terminated]`
  
      **NOTE:** Comments and tags are not supported in filter
      expressions at this time. Use `--comment` and `--tag` options
      along with filter expressions to further refine a selection.
  
      ### Filter by Run Start Time
  
      Use `--started` to limit runs to those that have started within a
      specified time range.
  
      **IMPORTANT:** You must quote RANGE values that contain
      spaces. For example, to filter runs started within the last hour,
      use the option:
  
          --started 'last hour'
  
      You can specify a time range using several different forms:
  
        \b
        `after DATETIME`
        `before DATETIME`
        `between DATETIME and DATETIME`
        `last N minutes|hours|days`
        `today|yesterday`
        `this week|month|year`
        `last week|month|year`
        `N days|weeks|months|years ago`
  
      `DATETIME` may be specified as a date in the format ``YY-MM-DD``
      (the leading ``YY-`` may be omitted) or as a time in the format
      ``HH:MM`` (24 hour clock). A date and time may be specified
      together as `DATE TIME`.
  
      When using ``between DATETIME and DATETIME``, values for
      `DATETIME` may be specified in either order.
  
      When specifying values like ``minutes`` and ``hours`` the trailing
      ``s`` may be omitted to improve readability. You may also use
      ``min`` instead of ``minutes`` and ``hr`` instead of ``hours``.
  
      Examples:
  
        \b
        `after 7-1`
        `after 9:00`
        `between 1-1 and 4-30`
        `between 10:00 and 15:00`
        `last 30 min`
        `last 6 hours`
        `today`
        `this week`
        `last month`
        `3 weeks ago`
  
      ### Filter by Source Code Digest
  
      To show runs for a specific source code digest, use `-g` or
      `--digest` with a complete or partial digest value.
  
      """
      click_util.append_params(
          fn,
          [
              click.Option(
                  ("-F", "--filter", "filter_expr"),
                  metavar="EXPR",
                  help=(
                      "Filter runs using a filter expression. See Filter by "
                      "Expression above for details."
                  ),
              ),
              click.Option(
                  ("-Fo", "--operation", "filter_ops"),
                  metavar="VAL",
                  help="Filter runs with operations matching `VAL`.",
                  multiple=True,
                  shell_complete=ac_operation,
              ),
              click.Option(
                  ("-Fl", "--label", "filter_labels"),
                  metavar="VAL",
                  help=(
                      "Filter runs with labels matching VAL. To show unlabeled "
                      "runs, use --unlabeled."
                  ),
                  multiple=True,
                  shell_complete=ac_label,
              ),
              click.Option(
                  ("-Fu", "--unlabeled", "filter_unlabeled"),
                  help="Filter runs without labels.",
                  is_flag=True,
              ),
              click.Option(
                  ("-Ft", "--tag", "filter_tags"),
                  metavar="TAG",
                  help="Filter runs with TAG.",
                  multiple=True,
                  shell_complete=ac_tag,
              ),
              click.Option(
                  ("-Fc", "--comment", "filter_comments"),
                  metavar="VAL",
                  help="Filter runs with comments matching VAL.",
                  multiple=True,
              ),
              click.Option(
                  ("-Fm", "--marked", "filter_marked"),
                  help="Filter marked runs.",
                  is_flag=True,
              ),
              click.Option(
                  ("-Fn", "--unmarked", "filter_unmarked"),
                  help="Filter unmarked runs.",
                  is_flag=True,
              ),
              click.Option(
                  ("-Fs", "--started", "filter_started"),
                  metavar="RANGE",
                  help=(
                      "Filter runs started within RANGE. See above "
                      "for valid time ranges."
                  ),
              ),
              click.Option(
                  ("-Fd", "--digest", "filter_digest"),
                  metavar="VAL",
                  help=(
                      "Filter runs with a matching source code digest."
                  ),
                  shell_complete=ac_digest,
              ),
          ],
      )
      return fn
  
imports: import logging
  import click
  from guild import click_util
  from .None import ac_support
label_desc: Use image node_id 16 for calling a global function with example usage: common_filters(fn) and returns: fn