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 vector to a tangent space of the manifold.
  
  The tangent space of the product manifold is the direct sum of
  tangent spaces.
  
  Parameters
  ----------
  vector : array-like, shape=[..., n_copies, *base_shape]
      Vector.
  base_point : array-like, shape=[..., n_copies, *base_shape]
      Point on the manifold.
  
  Returns
  -------
  tangent_vec : array-like, shape=[..., n_copies, *base_shape]
      Tangent vector at base point.
docstr_tok: ["Project","a","vector","to","a","tangent","space","of","the","manifold",".","The","tangent","space","of","the","product","manifold","is","the","direct","sum","of","tangent","spaces",".","Parameters","--","--","--","--","--","vector",":","array-like",",","shape=","[","...",",","n_copies",",","*","base_shape","]","Vector",".","base_point",":","array-like",",","shape=","[","...",",","n_copies",",","*","base_shape","]","Point","on","the","manifold",".","Returns","--","--","--","-","tangent_vec",":","array-like",",","shape=","[","...",",","n_copies",",","*","base_shape","]","Tangent","vector","at","base","point","."]
code: def to_tangent(self, vector, base_point):
      """Project a vector to a tangent space of the manifold.
  
      The tangent space of the product manifold is the direct sum of
      tangent spaces.
  
      Parameters
      ----------
      vector : array-like, shape=[..., n_copies, *base_shape]
          Vector.
      base_point : array-like, shape=[..., n_copies, *base_shape]
          Point on the manifold.
  
      Returns
      -------
      tangent_vec : array-like, shape=[..., n_copies, *base_shape]
          Tangent vector at base point.
      """
      vector_, base_point_ = gs.broadcast_arrays(vector, base_point)
      base_point_ = gs.reshape(
          base_point_, (-1, *self.base_manifold.shape)
      )
      batch_shape = get_batch_shape(self.point_ndim, vector_)
      vector_ = gs.reshape(vector_, (-1, *self.base_manifold.shape))
  
      each_tangent = self.base_manifold.to_tangent(vector_, base_point_)
  
      return gs.reshape(each_tangent, batch_shape + self.shape)
  
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 5 for calling the NFoldManifold obj's underlying member method code with example usage: obj.to_tangent(vector, base_point) and returns: gs