code: def fit_transform(self, X, y=None):
          
          # X = check_array(X)
          U, S, V = self._fit(X)
          U = U[:, : self.n_components_]
  
          if self.whiten:
              # X_new = X * V / S * sqrt(n_samples) = U * sqrt(n_samples)
              U *= np.sqrt(X.shape[0] - 1)
          else:
              # X_new = X * V = U * S * V^T * V = U * S
              U *= S[: self.n_components_]
  
          return U
docs: Fit the model with X and apply the dimensionality reduction on X.
  
          Parameters
          ----------
          X : array-like, shape (n_samples, n_features)
              New data, where n_samples in the number of samples
              and n_features is the number of features.
  
          y : Ignored
  
          Returns
          -------
          X_new : array-like, shape (n_samples, n_components)