docs: def get_keys_charset(keys, bid):
      """ Use set of keys as selector for character superset
  
      Note this isn't optimal, its probabilistic on the keyset char population.
      """
      # use the keys found to sample possible chars
      chars = set()
      for k in keys:
          chars.update(k[:4])
      remainder = chars
  
      # Normalize charsets for matching
      normalized = {}
      for n, sset in [
          ("p", set(string.punctuation)),
          ("w", set(string.whitespace))
      ]:
          m = chars.intersection(sset)
          if m:
              normalized[n] = m
              remainder = remainder.difference(sset)
  
      # Detect character sets
      charset = None
      for candidate in CharSet.charsets():
          if remainder.issubset(candidate):
              charset = candidate
              break
  
      if charset is None:
          raise ValueError(
              "Bucket: %s Failed charset ngram detection %r\n%s" % (
                  bid, "".join(chars)), "\n".join(sorted(keys)))
  
      for n, sset in normalized.items():
          charset = charset.symmetric_difference(sset)
  
      return charset