code: def fit(self, X, y=None, sample_weight=None):
          
          if self.normalize:
              X = normalize(X)
  
          random_state = check_random_state(self.random_state)
  
          # TODO: add check that all data is unit-normalized
  
          self.cluster_centers_, self.labels_, self.inertia_, self.n_iter_ = spherical_k_means(
              X,
              n_clusters=self.n_clusters,
              sample_weight=sample_weight,
              init=self.init,
              n_init=self.n_init,
              max_iter=self.max_iter,
              verbose=self.verbose,
              tol=self.tol,
              random_state=random_state,
              copy_x=self.copy_x,
              n_jobs=self.n_jobs,
              return_n_iter=True,
          )
  
          return self
docs: Compute k-means clustering.
  
          Parameters
          ----------
  
          X : array-like or sparse matrix, shape=(n_samples, n_features)
  
          y : Ignored
              not used, present here for API consistency by convention.
  
          sample_weight : array-like, shape (n_samples,), optional
              The weights for each observation in X. If None, all observations
              are assigned equal weight (default: None)