code: def fit(self, X):
          
          X, n_pca, precomputed, update_graph = self._parse_input(X)
  
          if precomputed is None:
              tasklogger.log_info(
                  "Running PHATE on {} cells and {} genes.".format(
                      X.shape[0], X.shape[1]))
          else:
              tasklogger.log_info(
                  "Running PHATE on precomputed {} matrix with {} cells.".format(
                      precomputed, X.shape[0]))
  
          if self.n_landmark is None or X.shape[0] <= self.n_landmark:
              n_landmark = None
          else:
              n_landmark = self.n_landmark
  
          if self.graph is not None and update_graph:
              self._update_graph(X, precomputed, n_pca, n_landmark)
  
          self.X = X
  
          if self.graph is None:
              tasklogger.log_start("graph and diffusion operator")
              self.graph = graphtools.Graph(
                  X,
                  n_pca=n_pca,
                  n_landmark=n_landmark,
                  distance=self.knn_dist,
                  precomputed=precomputed,
                  knn=self.knn,
                  decay=self.decay,
                  thresh=1e-4,
                  n_jobs=self.n_jobs,
                  verbose=self.verbose,
                  random_state=self.random_state,
                  **(self.kwargs))
              tasklogger.log_complete("graph and diffusion operator")
  
          # landmark op doesn't build unless forced
          self.diff_op
          return self
docs: Computes the diffusion operator
  
          Parameters
          ----------
          X : array, shape=[n_samples, n_features]
              input data with `n_samples` samples and `n_dimensions`
              dimensions. Accepted data types: `numpy.ndarray`,
              `scipy.sparse.spmatrix`, `pd.DataFrame`, `anndata.AnnData`. If
              `knn_dist` is 'precomputed', `data` should be a n_samples x
              n_samples distance or affinity matrix
  
          Returns
          -------
          phate_operator : PHATE
          The estimator object