class_docstr: Class for a product of manifolds M_1 x ... x M_n.
  
  In contrast to the classes NFoldManifold, Landmarks, or DiscretizedCurves,
  the manifolds M_1, ..., M_n need not be the same, nor of
  same dimension, but the list of manifolds needs to be provided.
  
  Parameters
  ----------
  factors : list
      List of manifolds in the product.
  default_point_type : {'auto', 'vector', 'matrix', 'other'}
      Optional. Default value is 'auto', which will implement as 'vector' unless all
      factors have the same shape. Vector representation gives the point as a 1-d
      array. Matrix representation allows for a point to be represented by an array of
      shape (n, dim), if each manifold has default_point_type 'vector' with shape
      (dim,). 'other' will behave as `matrix` but for higher dimensions.
class_docstr_tok: ["Class","for","a","product","of","manifolds","M_1","x","...","x","M_n",".","In","contrast","to","the","classes","NFoldManifold",",","Landmarks",",","or","DiscretizedCurves",",","the","manifolds","M_1",",","...",",","M_n","need","not","be","the","same",",","nor","of","same","dimension",",","but","the","list","of","manifolds","needs","to","be","provided",".","Parameters","--","--","--","--","--","factors",":","list","List","of","manifolds","in","the","product",".","default_point_type",":","{","'auto","'",",","'vector","'",",","'matrix","'",",","'other","'","}","Optional",".","Default","value","is","'auto","'",",","which","will","implement","as","'vector","'","unless","all","factors","have","the","same","shape",".","Vector","representation","gives","the","point","as","a","1-d","array",".","Matrix","representation","allows","for","a","point","to","be","represented","by","an","array","of","shape","(","n",",","dim",")",",","if","each","manifold","has","default_point_type","'vector","'","with","shape","(","dim",",",")",".","'other","'","will","behave","as","`","matrix","`","but","for","higher","dimensions","."]
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=[..., dim]
      Vector.
  base_point : array-like, shape=[..., dim]
      Point on the manifold.
      Optional, default: None
  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=","[","...",",","dim","]","Vector",".","base_point",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",".","Optional",",","default",":","None","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=None, 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=[..., dim]
          Vector.
      base_point : array-like, shape=[..., dim]
          Point on the manifold.
          Optional, default: None
      atol : float
          Absolute tolerance.
          Optional, default: backend atol.
  
      Returns
      -------
      is_tangent : bool
          Boolean denoting if vector is a tangent vector at the base point.
      """
      is_tangent = self._iterate_over_factors(
          "is_tangent",
          {"base_point": base_point, "vector": vector, "atol": atol},
      )
      return is_tangent
  
imports: import math
  import geomstats.backend
  import geomstats.errors
  from geomstats.geometry.complex_manifold import ComplexManifold
  from geomstats.geometry.complex_riemannian_metric import ComplexRiemannianMetric
  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 10 for calling the ProductManifold obj's underlying member method code with example usage: obj.is_tangent(vector, base_point, atol) and returns: is_tangent