class_docstr: Encapsulate features, labels, and metadata for a given dataset.
  
  Parameters
  ----------
  name : str
      The name of this feature set.
  
  ids : Union[List[str], numpy.ndarray]
      Example IDs for this set.
  
  labels : Optional[Union[List[str], numpy.ndarray], default=None
      Labels for this set.
  
  features : Optional[Union[:class:`skll.types.FeatureDictList`, :class:`numpy.ndarray`]], default=None
      The features for each instance represented as either a
      list of dictionaries or a numpy array (if ``vectorizer`` is
      also specified).
  
  vectorizer : Optional[Union[:class:`sklearn.feature_extraction.DictVectorizer`, :class:`sklearn.feature_extraction.FeatureHasher`], default=None
      Vectorizer which will be used to generate the feature matrix.
  
  Warnings
  --------
  FeatureSets can only be equal if the order of the instances is
  identical because these are stored as lists/arrays. Since scikit-learn's
  ``DictVectorizer`` automatically sorts the underlying feature matrix
  if it is sparse, we do not do any sorting before checking for equality.
  This is not a problem because we _always_ use sparse matrices with
  ``DictVectorizer`` when creating FeatureSets.
  
  Notes
  -----
  If ids, labels, and/or features are not None, the number of rows in
  each array must be equal.
docstr: Check whether two featuresets are the same.
  
  Parameters
  ----------
  other : :class:`skll.data.featureset.FeatureSet`
      The other ``FeatureSet`` to check equivalence with.
  
  Returns
  -------
  bool
      ``True`` if they are the same, ``False`` otherwise.
  
  Notes
  -----
  We consider feature values to be equal if any differences are in the
  sixth decimal place or higher.
docstr_tok: ["Check","whether","two","featuresets","are","the","same",".","Parameters","--","--","--","--","--","other",":",":","class",":","`","skll.data.featureset.FeatureSet","`","The","other","``","FeatureSet","``","to","check","equivalence","with",".","Returns","--","--","--","-","bool","``","True","``","if","they","are","the","same",",","``","False","``","otherwise",".","Notes","--","--","-","We","consider","feature","values","to","be","equal","if","any","differences","are","in","the","sixth","decimal","place","or","higher","."]
code: def __eq__(self, other):
      """
      Check whether two featuresets are the same.
  
      Parameters
      ----------
      other : :class:`skll.data.featureset.FeatureSet`
          The other ``FeatureSet`` to check equivalence with.
  
      Returns
      -------
      bool
          ``True`` if they are the same, ``False`` otherwise.
  
      Notes
      -----
      We consider feature values to be equal if any differences are in the
      sixth decimal place or higher.
      """
      return (
          self.ids.shape == other.ids.shape
          and self.labels.shape == other.labels.shape
          and self.features.shape == other.features.shape
          and (self.ids == other.ids).all()
          and (self.labels == other.labels).all()
          and np.allclose(
              self.features.data, other.features.data, rtol=1e-6
          )
          and (self.features.indices == other.features.indices).all()
          and (self.features.indptr == other.features.indptr).all()
          and self.vectorizer == other.vectorizer
      )
  
imports: from copy import deepcopy
  from typing import Collection, List, Optional, Tuple, Union
  import numpy
  import scipy.sparse
  from pandas import DataFrame
  from sklearn.feature_extraction import DictVectorizer, FeatureHasher
  from skll.data.dict_vectorizer import DictVectorizer
  from skll.types import FeatGenerator, FeatureDictList, IdType, LabelType, SparseFeatureMatrix
label_desc: Use image node_id 3 for calling the FeatureSet obj's underlying member method code with example usage: obj.__eq__(other) and returns: unknown