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","."]
code: def __init__(
      self,
      space,
      n_components=None,
      copy=True,
      whiten=False,
      tol=0.0,
      iterated_power="auto",
      random_state=None,
  ):
      self.space = space
      self.n_components = n_components
      self.copy = copy
      self.whiten = whiten
      self.tol = tol
      self.iterated_power = iterated_power
      self.random_state = random_state
  
      if hasattr(self.space, "metric"):
          self.mean_estimator = FrechetMean(space)
      else:
          self.mean_estimator = ExponentialBarycenter(space)
  
      self.base_point_ = None
  
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 1 to create a new TangentPCA object from inherited base classes: _BasePCA with example: obj = TangentPCA(space, n_components, copy, whiten, tol, iterated_power, random_state)