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: Check whether the vector is tangent at base_point.
  
  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.
  atol : float
      Absolute tolerance.
      Optional, default: backend atol.
  
  Returns
  -------
  is_tangent : bool
      Boolean denoting if vector is a tangent vector at the base point.
docstr_tok: ["Check","whether","the","vector","is","tangent","at","base_point",".","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",".","atol",":","float","Absolute","tolerance",".","Optional",",","default",":","backend","atol",".","Returns","--","--","--","-","is_tangent",":","bool","Boolean","denoting","if","vector","is","a","tangent","vector","at","the","base","point","."]
code: def is_tangent(self, vector, base_point, atol=gs.atol):
      """Check whether the vector is tangent at base_point.
  
      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.
      atol : float
          Absolute tolerance.
          Optional, default: backend atol.
  
      Returns
      -------
      is_tangent : bool
          Boolean denoting if vector is a tangent vector at the base point.
      """
      vector_, base_point_ = gs.broadcast_arrays(vector, base_point)
      batch_shape = get_batch_shape(self.point_ndim, vector_)
      base_point_ = gs.reshape(
          base_point_, (-1, *self.base_manifold.shape)
      )
      vector_ = gs.reshape(vector_, (-1, *self.base_manifold.shape))
  
      each_tangent = self.base_manifold.is_tangent(
          vector_, base_point_, atol=atol
      )
  
      reshaped = gs.reshape(
          each_tangent, batch_shape + (self.n_copies,)
      )
      return gs.all(reshaped, axis=-1)
  
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 4 for calling the NFoldManifold obj's underlying member method code with example usage: obj.is_tangent(vector, base_point, atol) and returns: gs