docs: def print_model(self,sep='\n'):
          """prints model contained in best inds, if ml has a coefficient property.
          otherwise, prints the features generated by FEW."""
          model = ''
          # print('ml type:',self.ml_type)
          # print('ml:',self._best_estimator)
  
          if self._best_inds:
  
              if self.ml_type == 'GridSearchCV':
                  ml = self._best_estimator.named_steps['ml'].best_estimator_
              else:
                  ml = self._best_estimator.named_steps['ml']
  
              if self.ml_type != 'SVC' and self.ml_type != 'SVR':
              # this is need because svm has a bug that throws valueerror on
              # attribute check
                  
                  if hasattr(ml,'coef_'):
                      if len(ml.coef_.shape)==1:
                          s = np.argsort(np.abs(ml.coef_))[::-1]
                          scoef = ml.coef_[s]
                          bi = [self._best_inds[k] for k in s]
                          model = (' +' + sep).join(
                              [str(round(c,3))+'*'+self.stack_2_eqn(f)
                               for i,(f,c) in enumerate(zip(bi,scoef))
                               if round(scoef[i],3) != 0])
                      else:
                          # more than one decision function is fit. print all.
                          for j,coef in enumerate(ml.coef_):
                              s = np.argsort(np.abs(coef))[::-1]
                              scoef = coef[s]
                              bi =[self._best_inds[k] for k in s]
                              model += sep + 'class'+str(j)+' :'+' + '.join(
                                  [str(round(c,3))+'*'+self.stack_2_eqn(f)
                                   for i,(f,c) in enumerate(zip(bi,coef))
                                   if coef[i] != 0])
                  elif hasattr(ml,'feature_importances_'):
                      s = np.argsort(ml.feature_importances_)[::-1]
                      sfi = ml.feature_importances_[s]
                      bi = [self._best_inds[k] for k in s]
                      # model = 'importance:feature'+sep
  
                      model += sep.join(
                          [str(round(c,3))+':'+self.stack_2_eqn(f)
                           for i,(f,c) in enumerate(zip(bi,sfi))
                           if round(sfi[i],3) != 0])
                  else:
                      return sep.join(self.stacks_2_eqns(self._best_inds))
              else:
                  return sep.join(self.stacks_2_eqns(self._best_inds))
          else:
              return 'original features'
  
          return model