code: def learn(self, features, labels):
          
          labels = np.ravel(labels)
          self.__learn_labels(labels)
          if len(labels) == 0:
              return
  
          labels = self.labels.transform(labels)
          if self.feature_length > 0 and hasattr(self.clf, 'partial_fit'):
              # FIXME? check docs, may need to pass class=[...]
              self.clf = self.clf.partial_fit(features, labels)
          else:
              self.clf = self.clf.fit(features, labels)
              self.feature_length = len(features[0])
docs: Fits the classifier
  
          If it's state is empty, the classifier is fitted, if not
          the classifier is partially fitted.
          See sklearn's SGDClassifier fit and partial_fit methods.
  
          Args:
              features (:obj:`list` of :obj:`list` of :obj:`float`)
              labels (:obj:`list` of :obj:`str`): Labels for each set of features.
                  New features are learnt.