class_docstr: Class for the Kendall pre-shape space.
  
  The pre-shape space is the sphere of the space of centered k-ad of
  landmarks in :math:`R^m` (for the Frobenius norm). It is endowed with the
  spherical Procrustes metric d(x, y):= arccos(tr(xy^t)).
  
  Points are represented by :math:`k \times m` centred matrices as in
  [Nava]_. Beware that this is not the usual convention from the literature.
  
  Parameters
  ----------
  k_landmarks : int
      Number of landmarks
  m_ambient : int
      Number of coordinates of each landmark.
  
  References
  ----------
  .. [Nava]  Nava-Yazdani, E., H.-C. Hege, T. J.Sullivan, and C. von Tycowicz.
            “Geodesic Analysis in Kendall’s Shape Space with Epidemiological
            Applications.”
            Journal of Mathematical Imaging and Vision 62, no. 4 549–59.
            https://doi.org/10.1007/s10851-020-00945-w.
class_docstr_tok: ["Class","for","the","Kendall","pre-shape","space",".","The","pre-shape","space","is","the","sphere","of","the","space","of","centered","k-ad","of","landmarks","in",":","math",":","`","R^m","`","(","for","the","Frobenius","norm",")",".","It","is","endowed","with","the","spherical","Procrustes","metric","d","(","x",",","y",")",":","=","arccos","(","tr","(","xy^t",")",")",".","Points","are","represented","by",":","math",":","`","k","\\times","m","`","centred","matrices","as","in","[","Nava","]","_.","Beware","that","this","is","not","the","usual","convention","from","the","literature",".","Parameters","--","--","--","--","--","k_landmarks",":","int","Number","of","landmarks","m_ambient",":","int","Number","of","coordinates","of","each","landmark",".","References","--","--","--","--","--","..","[","Nava","]","Nava-Yazdani",",","E.",",","H.-C.","Hege",",","T.","J.Sullivan",",","and","C.","von","Tycowicz",".","\u201c","Geodesic","Analysis","in","Kendall","\u2019","s","Shape","Space","with","Epidemiological","Applications.","\u201d","Journal","of","Mathematical","Imaging","and","Vision","62",",","no",".","4","549\u201359",".","https",":","\/\/doi.org\/10.1007\/s10851-020-00945-w","."]
docstr: Project a point on the pre-shape space.
  
  Parameters
  ----------
  point : array-like, shape=[..., k_landmarks, m_ambient]
      Point in Matrices space.
  
  Returns
  -------
  projected_point : array-like, shape=[..., k_landmarks, m_ambient]
      Point projected on the pre-shape space.
  
  Notes
  -----
  * Requires space to be equipped.
docstr_tok: ["Project","a","point","on","the","pre-shape","space",".","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","in","Matrices","space",".","Returns","--","--","--","-","projected_point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","projected","on","the","pre-shape","space",".","Notes","--","--","-","*","Requires","space","to","be","equipped","."]
code: def projection(self, point):
      """Project a point on the pre-shape space.
  
      Parameters
      ----------
      point : array-like, shape=[..., k_landmarks, m_ambient]
          Point in Matrices space.
  
      Returns
      -------
      projected_point : array-like, shape=[..., k_landmarks, m_ambient]
          Point projected on the pre-shape space.
  
      Notes
      -----
      * Requires space to be equipped.
      """
      total_space_metric = self._get_total_space_metric()
  
      centered_point = self.center(point)
      frob_norm = total_space_metric.norm(centered_point)
      return gs.einsum(
          "...,...ij->...ij", 1.0 / frob_norm, centered_point
      )
  
imports: import geomstats.backend
  from geomstats.geometry.base import LevelSet
  from geomstats.geometry.fiber_bundle import FiberBundle
  from geomstats.geometry.hypersphere import Hypersphere
  from geomstats.geometry.matrices import Matrices
  from geomstats.geometry.quotient_metric import QuotientMetric
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.integrator import integrate
  from geomstats.vectorization import get_batch_shape, repeat_out
label_desc: Use image node_id 8 for calling the PreShapeSpace obj's underlying member method code with example usage: obj.projection(point) and returns: gs