class_docstr: A wrapper for HashingVectorizer which allows to get meaningful
  feature names. Create it with an existing HashingVectorizer
  instance as an argument::
  
      vec = InvertableHashingVectorizer(my_hashing_vectorizer)
  
  Unlike HashingVectorizer it can be fit. During fitting
  :class:`~.InvertableHashingVectorizer` learns which input terms map to
  which feature columns/signs; this allows to provide more meaningful
  :meth:`get_feature_names`. The cost is that it is no longer stateless.
  
  You can fit :class:`~.InvertableHashingVectorizer` on a random sample
  of documents (not necessarily on the whole training and testing data),
  and use it to inspect an existing HashingVectorizer instance.
  
  If several features hash to the same value, they are ordered by
  their frequency in documents that were used to fit the vectorizer.
  
  :meth:`transform` works the same as HashingVectorizer.transform.
code: def _get_terms_iter(self, X):
      analyze = self.vec.build_analyzer()
      return chain.from_iterable(analyze(doc) for doc in X)
  
imports: from __future__ import absolute_import
  from collections import defaultdict, Counter
  from itertools import chain
  from typing import List, Iterable, Any, Dict, Tuple, Union
  import numpy
  import six
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.feature_extraction.text import HashingVectorizer, FeatureHasher
  from sklearn.pipeline import FeatureUnion
  from eli5._feature_names import FeatureNames
label_desc: Use image node_id 6 for calling the InvertableHashingVectorizer obj's underlying member method code with example usage: obj._get_terms_iter(X) and returns: chain