class_docstr: Tangent Principal component analysis (tPCA).
  
  Linear dimensionality reduction using
  Singular Value Decomposition of the
  Riemannian Log of the data at the tangent space
  of the Frechet mean.
  
  Parameters
  ----------
  space : Manifold
      Equipped manifold.
  n_components : int
      Number of principal components.
      Optional, default: None.
  
  Notes
  -----
  * Required geometry methods: `exp`, `log`.
  * If `base_point=None`, also requires `FrechetMean` required methods.
  * Lie groups can be used without a metric, but `base_point` or `mean_estimator`
    need to be specified.
class_docstr_tok: ["Tangent","Principal","component","analysis","(","tPCA",")",".","Linear","dimensionality","reduction","using","Singular","Value","Decomposition","of","the","Riemannian","Log","of","the","data","at","the","tangent","space","of","the","Frechet","mean",".","Parameters","--","--","--","--","--","space",":","Manifold","Equipped","manifold",".","n_components",":","int","Number","of","principal","components",".","Optional",",","default",":","None",".","Notes","--","--","-","*","Required","geometry","methods",":","`","exp","`",",","`","log","`",".","*","If","`","base_point=None","`",",","also","requires","`","FrechetMean","`","required","methods",".","*","Lie","groups","can","be","used","without","a","metric",",","but","`","base_point","`","or","`","mean_estimator","`","need","to","be","specified","."]
docstr: Fit the model with X and apply the dimensionality reduction on X.
  
  Parameters
  ----------
  X : array-like, shape=[..., n_features]
      Training data, where n_samples is the number of samples
      and n_features is the number of features.
  y : Ignored (Compliance with scikit-learn interface)
  base_point : array-like, shape=[..., n_features]
      Point at which to perform the tangent PCA
      Optional, default to Frechet mean if None.
  
  Returns
  -------
  X_new : array-like, shape=[..., n_components]
      Projected data.
docstr_tok: ["Fit","the","model","with","X","and","apply","the","dimensionality","reduction","on","X.","Parameters","--","--","--","--","--","X",":","array-like",",","shape=","[","...",",","n_features","]","Training","data",",","where","n_samples","is","the","number","of","samples","and","n_features","is","the","number","of","features",".","y",":","Ignored","(","Compliance","with","scikit-learn","interface",")","base_point",":","array-like",",","shape=","[","...",",","n_features","]","Point","at","which","to","perform","the","tangent","PCA","Optional",",","default","to","Frechet","mean","if","None",".","Returns","--","--","--","-","X_new",":","array-like",",","shape=","[","...",",","n_components","]","Projected","data","."]
code: def fit_transform(self, X, y=None, base_point=None):
      """Fit the model with X and apply the dimensionality reduction on X.
  
      Parameters
      ----------
      X : array-like, shape=[..., n_features]
          Training data, where n_samples is the number of samples
          and n_features is the number of features.
      y : Ignored (Compliance with scikit-learn interface)
      base_point : array-like, shape=[..., n_features]
          Point at which to perform the tangent PCA
          Optional, default to Frechet mean if None.
  
      Returns
      -------
      X_new : array-like, shape=[..., n_components]
          Projected data.
      """
      U, S, _ = self._fit(X, base_point=base_point)
  
      U = U[:, : self.n_components_]
  
      U *= S[: self.n_components_]
      return U
  
imports: import numbers
  from math import log
  from scipy.special import gammaln
  from sklearn.decomposition._base import _BasePCA
  from sklearn.utils.extmath import stable_cumsum, svd_flip
  import geomstats.backend
  from geomstats.geometry.matrices import Matrices
  from geomstats.geometry.symmetric_matrices import SymmetricMatrices
  from geomstats.learning.exponential_barycenter import ExponentialBarycenter
  from geomstats.learning.frechet_mean import FrechetMean
label_desc: Use image node_id 4 for calling the TangentPCA obj's underlying member method code with example usage: obj.fit_transform(X, y, base_point) and returns: U