class_docstr: Class for an n-fold product manifold :math:`M^n`.
  
  Define a manifold as the product manifold of n copies of a given base
  manifold M.
  
  Parameters
  ----------
  base_manifold : Manifold
      Base manifold.
  n_copies : int
      Number of replication of the base manifold.
  default_coords_type : str, {\'intrinsic\', \'extrinsic\', etc}
      Coordinate type.
      Optional, default: 'intrinsic'.
docstr: Project a point from product embedding manifold to the product manifold.
  
  Parameters
  ----------
  point : array-like, shape=[..., n_copies, *base_shape]
      Point in embedding manifold.
  
  Returns
  -------
  projected : array-like, shape=[..., n_copies, *base_shape]
      Projected point.
docstr_tok: ["Project","a","point","from","product","embedding","manifold","to","the","product","manifold",".","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","n_copies",",","*","base_shape","]","Point","in","embedding","manifold",".","Returns","--","--","--","-","projected",":","array-like",",","shape=","[","...",",","n_copies",",","*","base_shape","]","Projected","point","."]
code: def projection(self, point):
      """Project a point from product embedding manifold to the product manifold.
  
      Parameters
      ----------
      point : array-like, shape=[..., n_copies, *base_shape]
          Point in embedding manifold.
  
      Returns
      -------
      projected : array-like, shape=[..., n_copies, *base_shape]
          Projected point.
      """
      if hasattr(self.base_manifold, "projection"):
          batch_shape = get_batch_shape(self.point_ndim, point)
          point_ = gs.reshape(point, (-1, *self.base_manifold.shape))
          projected = self.base_manifold.projection(point_)
          return gs.reshape(projected, batch_shape + self.shape)
      raise NotImplementedError(
          "The base manifold does not implement a projection method."
      )
  
imports: import geomstats.backend
  import geomstats.errors
  from geomstats.geometry.manifold import Manifold
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.vectorization import get_batch_shape
label_desc: Use image node_id 7 for calling the NFoldManifold obj's underlying member method code with example usage: obj.projection(point) and returns: gs