docs: def match_fields(fields, searches,
                   ignore_case=False, wholename=False, complement=False):
      """Return fields that match searches.
  
      Parameters
      ----------
      fields : iterable
      searches : iterable
      ignore_case, wholename, complement : boolean
      """
      if ignore_case:
          fields = [f.lower() for f in fields]
          searches = [s.lower() for s in searches]
      if wholename:
          match_found = _complete_match
      else:
          match_found = _partial_match
  
      fields = [(i, field) for i, field in enumerate(fields)]
      matched = []
      for search, (idx, field) in itertools.product(searches, fields):
          if not search:  ## don't return all fields for ''
              continue
          if match_found(search, field) and idx not in matched:
              matched.append(idx)
  
      if complement:
          matched = [idx for idx in list(zip(*fields))[0] if idx not in matched]
  
      return matched