code: def feature_types(self, feature_types):
          
          if feature_types is not None:
              if self._feature_names is None:
                  msg = 'Unable to set feature types before setting names'
                  raise ValueError(msg)
  
              if isinstance(feature_types, STRING_TYPES):
                  # single string will be applied to all columns
                  feature_types = [feature_types] * self.num_col()
  
              try:
                  if not isinstance(feature_types, str):
                      feature_types = [n for n in iter(feature_types)]
                  else:
                      feature_types = [feature_types]
              except TypeError:
                  feature_types = [feature_types]
  
              if len(feature_types) != self.num_col():
                  msg = 'feature_types must have the same length as data'
                  raise ValueError(msg)
  
              valid = ('int', 'float', 'i', 'q')
              if not all(isinstance(f, STRING_TYPES) and f in valid
                         for f in feature_types):
                  raise ValueError('All feature_names must be {int, float, i, q}')
          self._feature_types = feature_types
docs: Set feature types (column types).
  
          This is for displaying the results and unrelated
          to the learning process.
  
          Parameters
          ----------
          feature_types : list or None
              Labels for features. None will reset existing feature names