docs: def fit(self, X, y=None, **kwargs):
          """
          The fit method is the primary drawing input for the dispersion
          visualization.
  
          Parameters
          ----------
          X : list or generator
              Should be provided as a list of documents or a generator
              that yields a list of documents that contain a list of 
              words in the order they appear in the document.
  
          y : ndarray or Series of length n
              An optional array or series of target or class values for
              instances. If this is specified, then the points will be colored
              according to their class.
  
          kwargs : dict
              Pass generic arguments to the drawing method
  
          Returns
          -------
          self : instance
              Returns the instance of the transformer/visualizer
          """
  
          if y is not None:
              self.classes_ = np.unique(y)
          elif y is None and self.labels is not None:
              self.classes_ = np.array([self.labels[0]])
          else:
              self.classes_ = np.array([self.NULL_CLASS])
  
          # Create an index (e.g. the y position) for the target words
          self.indexed_words_ = np.flip(self.target_words, axis=0)
          if self.ignore_case:
              self.indexed_words_ = np.array([w.lower() for w in self.indexed_words_])
  
          # Stack is used to create a 2D array from the generator
          try:
              points_target = np.stack(self._compute_dispersion(X, y))
          except ValueError:
              raise YellowbrickValueError((
                  "No indexed words were found in the corpus"
                  ))
          points = np.stack(zip(points_target[:,0].astype(int),
                                points_target[:,1].astype(int)))
  
          self.target = points_target[:,2]
  
          self._check_missing_words(points)
  
          self.draw(points, self.target)
          return self