class_docstr: Class for the Siegel space.
  
  Parameters
  ----------
  n : int
      Integer representing the shape of the matrices: n x n.
  symmetric : bool
      If symmetric is True, add a symmetry condition
      on the matrices to belong to the Siegel space.
      Optional, default: False.
class_docstr_tok: ["Class","for","the","Siegel","space",".","Parameters","--","--","--","--","--","n",":","int","Integer","representing","the","shape","of","the","matrices",":","n","x","n.","symmetric",":","bool","If","symmetric","is","True",",","add","a","symmetry","condition","on","the","matrices","to","belong","to","the","Siegel","space",".","Optional",",","default",":","False","."]
docstr: Project a matrix to the Siegel space.
  
  Parameters
  ----------
  point : array-like, shape=[..., n, n]
      Matrix to project.
  atol : float
      Tolerance.
      Optional, default: backend atol.
  
  Returns
  -------
  projected: array-like, shape=[..., n, n]
      Matrix in the Siegel space.
docstr_tok: ["Project","a","matrix","to","the","Siegel","space",".","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","n",",","n","]","Matrix","to","project",".","atol",":","float","Tolerance",".","Optional",",","default",":","backend","atol",".","Returns","--","--","--","-","projected",":","array-like",",","shape=","[","...",",","n",",","n","]","Matrix","in","the","Siegel","space","."]
code: def projection(self, point, atol=gs.atol):
      """Project a matrix to the Siegel space.
  
      Parameters
      ----------
      point : array-like, shape=[..., n, n]
          Matrix to project.
      atol : float
          Tolerance.
          Optional, default: backend atol.
  
      Returns
      -------
      projected: array-like, shape=[..., n, n]
          Matrix in the Siegel space.
      """
      if self.symmetric:
          point = Matrices.to_symmetric(point)
  
      point_transconj = ComplexMatrices.transconjugate(point)
      aux = gs.matmul(point, point_transconj)
  
      eigenvalues = gs.linalg.eigvalsh(aux)
      max_eigenvalues = gs.amax(eigenvalues, axis=-1) ** 0.5
  
      scalars = gs.where(
          (max_eigenvalues > 1.0 - gs.atol),
          (1 - atol) / max_eigenvalues,
          1.0,
      )
      return gs.einsum("...,...ij->...ij", scalars, point)
  
imports: import geomstats.backend
  from geomstats.geometry.base import ComplexVectorSpaceOpenSet
  from geomstats.geometry.complex_matrices import ComplexMatrices
  from geomstats.geometry.complex_riemannian_metric import ComplexRiemannianMetric
  from geomstats.geometry.hermitian_matrices import expmh, powermh
  from geomstats.geometry.matrices import Matrices
label_desc: Use image node_id 4 for calling the Siegel obj's underlying member method code with example usage: obj.projection(point, atol) and returns: gs