code: def fit(self, X, y=None, input_type='data'):
          
          X = self._validate_input(X, input_type)
          self.fit_geometry(X, input_type)
          random_state = check_random_state(self.random_state)
          self.embedding_, self.eigenvalues_, self.eigenvectors_ = spectral_embedding(self.geom_,
                                               n_components = self.n_components,
                                               eigen_solver = self.eigen_solver,
                                               random_state = random_state,
                                               drop_first = self.drop_first,
                                               diffusion_maps = self.diffusion_maps,
                                               diffusion_time = self.diffusion_time,
                                               solver_kwds = self.solver_kwds)
          self.affinity_matrix_ = self.geom_.affinity_matrix
          self.laplacian_matrix_ = self.geom_.laplacian_matrix
          self.laplacian_matrix_type_ = self.geom_.laplacian_method
          return self
docs: Fit the model from data in X.
  
          Parameters
          ----------
          input_type : string, one of: 'data', 'distance' or 'affinity'.
              The values of input data X. (default = 'data')
          X : array-like, shape (n_samples, n_features)
              Training vector, where n_samples in the number of samples
              and n_features is the number of features.
  
          If self.input_type is distance, or affinity:
  
          X : array-like, shape (n_samples, n_samples),
              Interpret X as precomputed distance or adjacency graph
              computed from samples.
  
          Returns
          -------
          self : object
                 Returns the instance itself.