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 in the product space from the product distribution.
  
  The distribution used is the product of the distributions used by the
  random_point methods of each individual factor manifold.
  
  Parameters
  ----------
  n_samples : int, optional
      Number of samples.
  bound : float
      Bound of the interval in which to sample for non compact manifolds.
      Optional, default: 1.
  
  Returns
  -------
  samples : array-like, shape=[..., {dim, embedding_space.dim,             [n_manifolds, dim_each]}]
      Points sampled from the manifold.
docstr_tok: ["Sample","in","the","product","space","from","the","product","distribution",".","The","distribution","used","is","the","product","of","the","distributions","used","by","the","random_point","methods","of","each","individual","factor","manifold",".","Parameters","--","--","--","--","--","n_samples",":","int",",","optional","Number","of","samples",".","bound",":","float","Bound","of","the","interval","in","which","to","sample","for","non","compact","manifolds",".","Optional",",","default",":","1",".","Returns","--","--","--","-","samples",":","array-like",",","shape=","[","...",",","{","dim",",","embedding_space.dim",",","[","n_manifolds",",","dim_each","]","}","]","Points","sampled","from","the","manifold","."]
code: def random_point(self, n_samples=1, bound=1.0):
      """Sample in the product space from the product distribution.
  
          The distribution used is the product of the distributions used by the
          random_point methods of each individual factor manifold.
  
          Parameters
          ----------
          n_samples : int, optional
              Number of samples.
          bound : float
              Bound of the interval in which to sample for non compact manifolds.
              Optional, default: 1.
  
          Returns
          -------
          samples : array-like, shape=[..., {dim, embedding_space.dim, \
              [n_manifolds, dim_each]}]
              Points sampled from the manifold.
          """
      samples = self._iterate_over_factors(
          "random_point", {"n_samples": n_samples, "bound": bound}
      )
      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 6 for calling the ProductManifold obj's underlying member method code with example usage: obj.random_point(n_samples, bound) and returns: samples