docs: def _column_type(values, has_invisible=True):
      """The least generic type all column values are convertible to.
  
      >>> _column_type(["1", "2"]) is _int_type
      True
      >>> _column_type(["1", "2.3"]) is _float_type
      True
      >>> _column_type(["1", "2.3", "four"]) is _text_type
      True
      >>> _column_type(["four", '\u043f\u044f\u0442\u044c']) is _text_type
      True
      >>> _column_type([None, "brux"]) is _text_type
      True
      >>> _column_type([1, 2, None]) is _int_type
      True
      >>> import datetime as dt
      >>> _column_type([dt.datetime(1991,2,19), dt.time(17,35)]) is _text_type
      True
  
      """
      return reduce(_more_generic, [type(v) for v in values], int)