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: Sample on the tangent space from the product distribution.
  
  The distribution used is the product of the distributions used by the
  random_tangent_vec methods of each individual factor manifold.
  
  Parameters
  ----------
  base_point : array-like, shape=[..., n, n]
      Base point of the tangent space.
      Optional, default: None.
  n_samples : int
      Number of samples.
      Optional, default: 1.
  
  Returns
  -------
  samples : array-like, shape=[..., {dim, embedding_space.dim,             [n_manifolds, dim_each]}]
      Points sampled in the tangent space of the product manifold at base_point.
docstr_tok: ["Sample","on","the","tangent","space","from","the","product","distribution",".","The","distribution","used","is","the","product","of","the","distributions","used","by","the","random_tangent_vec","methods","of","each","individual","factor","manifold",".","Parameters","--","--","--","--","--","base_point",":","array-like",",","shape=","[","...",",","n",",","n","]","Base","point","of","the","tangent","space",".","Optional",",","default",":","None",".","n_samples",":","int","Number","of","samples",".","Optional",",","default",":","1",".","Returns","--","--","--","-","samples",":","array-like",",","shape=","[","...",",","{","dim",",","embedding_space.dim",",","[","n_manifolds",",","dim_each","]","}","]","Points","sampled","in","the","tangent","space","of","the","product","manifold","at","base_point","."]
code: def random_tangent_vec(self, base_point, n_samples=1):
      """Sample on the tangent space from the product distribution.
  
          The distribution used is the product of the distributions used by the
          random_tangent_vec methods of each individual factor manifold.
  
          Parameters
          ----------
          base_point : array-like, shape=[..., n, n]
              Base point of the tangent space.
              Optional, default: None.
          n_samples : int
              Number of samples.
              Optional, default: 1.
  
          Returns
          -------
          samples : array-like, shape=[..., {dim, embedding_space.dim, \
              [n_manifolds, dim_each]}]
              Points sampled in the tangent space of the product manifold at base_point.
          """
      samples = self._iterate_over_factors(
          "random_tangent_vec",
          {"base_point": base_point, "n_samples": n_samples},
      )
      return samples
  
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 7 for calling the ProductManifold obj's underlying member method code with example usage: obj.random_tangent_vec(base_point, n_samples) and returns: samples