code: def fit(self, X, y=None, **kwargs):
          
  
          # first check the type
          X = util.convert_input(X)
  
          self._dim = X.shape[1]
  
          # if columns aren't passed, just use every string column
          if self.cols is None:
              self.cols = util.get_obj_cols(X)
          else:
              self.cols = util.convert_cols_to_list(self.cols)
  
          X_temp = self.transform(X, override_return_df=True)
          self.feature_names = X_temp.columns.tolist()
  
          # drop all output columns with 0 variance.
          if self.drop_invariant:
              self.drop_cols = []
              generated_cols = util.get_generated_cols(X, X_temp, self.cols)
              self.drop_cols = [x for x in generated_cols if X_temp[x].var() <= 10e-5]
              try:
                  [self.feature_names.remove(x) for x in self.drop_cols]
              except KeyError as e:
                  if self.verbose > 0:
                      print("Could not remove column from feature names."
                            "Not found in generated cols.\n{}".format(e))
  
          return self
docs: Fit encoder according to X and y.
  
          Parameters
          ----------
  
          X : array-like, shape = [n_samples, n_features]
              Training vectors, where n_samples is the number of samples
              and n_features is the number of features.
          y : array-like, shape = [n_samples]
              Target values.
  
          Returns
          -------
  
          self : encoder
              Returns self.