class_docstr: Class for the n-dimensional Poincare ball.
  
  Class for the n-dimensional Poincaré ball model. For other
  representations of hyperbolic spaces see the `Hyperbolic` class.
  
  Parameters
  ----------
  dim : int
      Dimension of the hyperbolic space.
class_docstr_tok: ["Class","for","the","n-dimensional","Poincare","ball",".","Class","for","the","n-dimensional","Poincar\u00e9","ball","model",".","For","other","representations","of","hyperbolic","spaces","see","the","`","Hyperbolic","`","class",".","Parameters","--","--","--","--","--","dim",":","int","Dimension","of","the","hyperbolic","space","."]
docstr: Project a point on the ball.
  
  Project a point by clipping such that l2
  norm being lower than 1
  
  Parameters
  ----------
  point : array-like, shape=[..., dim]
      Point in embedding Euclidean space.
  
  Returns
  -------
  projected_point : array-like, shape=[..., dim]
      Point projected on the ball.
docstr_tok: ["Project","a","point","on","the","ball",".","Project","a","point","by","clipping","such","that","l2","norm","being","lower","than","1","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","dim","]","Point","in","embedding","Euclidean","space",".","Returns","--","--","--","-","projected_point",":","array-like",",","shape=","[","...",",","dim","]","Point","projected","on","the","ball","."]
code: def projection(self, point):
      """Project a point on the ball.
  
      Project a point by clipping such that l2
      norm being lower than 1
  
      Parameters
      ----------
      point : array-like, shape=[..., dim]
          Point in embedding Euclidean space.
  
      Returns
      -------
      projected_point : array-like, shape=[..., dim]
          Point projected on the ball.
      """
      l2_norm = gs.linalg.norm(point, axis=-1)
      if gs.any(l2_norm >= 1 - gs.atol):
          projected_point = gs.einsum(
              "...j,...->...j", point * (1 - gs.atol), 1.0 / l2_norm
          )
          return -gs.maximum(-projected_point, -point)
  
      return gs.copy(point)
  
imports: import math
  import geomstats.algebra_utils
  import geomstats.backend
  from geomstats.geometry._hyperbolic import _Hyperbolic
  from geomstats.geometry.base import VectorSpaceOpenSet
  from geomstats.geometry.euclidean import Euclidean
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.vectorization import repeat_out
label_desc: Use image node_id 4 for calling the PoincareBall obj's underlying member method code with example usage: obj.projection(point) and returns: gs, unknown