code: def build_group_inputs_filter(df, group_inputs):
      dtypes = get_dtypes(df)
  
      def _group_filter(group_val):
          for gc, gv in group_val.items():
              classifier = classify_type(dtypes[gc])
              yield group_filter_handler(gc, gv, classifier)
  
      def _full_filter():
          for group_val in group_inputs:
              filter_vals, label_vals = [], []
              for fv, lv in _group_filter(group_val):
                  filter_vals.append(fv)
                  label_vals.append(lv)
              yield " and ".join(filter_vals), ", ".join(label_vals)
  
      full_filters, full_labels = [], []
      for ff, fl in _full_filter():
          full_filters.append(ff)
          full_labels.append(fl)
      return (
          "({})".format(") or (".join(full_filters)),
          ", ".join(full_labels),
      )
  
imports: import copy
  import numpy
  import pandas
  import dtale.global_state
  import dtale.pandas_util
  from dtale.column_analysis import handle_cleaners
  from dtale.constants import CHART_JOINER_CHAR
  from dtale.query import build_col_key, run_query
  from dtale.utils import ChartBuildingError, build_formatters, classify_type, find_dtype, find_dtype_formatter, flatten_lists, get_dtypes, json_int, make_list, triple_quote
label_desc: Use image node_id 7 for calling a global function with example usage: build_group_inputs_filter(df, group_inputs) and returns: str,  str