docstr: Apply a function to each factor of the product.
  
  func is called on each factor of the product.
  
  Array-type arguments are separated out to be passed to func for each factor,
  but other arguments are passed unchanged.
  
  Parameters
  ----------
  func : str
      The name of a method which is defined for each factor of the product
      The method must return an array of shape (..., factor.shape) or a boolean
      array of shape (...,).
  args : dict
      Dict of arguments.
      Array-type arguments must be of type (..., shape)
      Other arguments are passed to each factor unchanged
  
  Returns
  -------
  out : array-like, shape = [..., {(), shape}]
docstr_tok: ["Apply","a","function","to","each","factor","of","the","product",".","func","is","called","on","each","factor","of","the","product",".","Array-type","arguments","are","separated","out","to","be","passed","to","func","for","each","factor",",","but","other","arguments","are","passed","unchanged",".","Parameters","--","--","--","--","--","func",":","str","The","name","of","a","method","which","is","defined","for","each","factor","of","the","product","The","method","must","return","an","array","of","shape","(","...",",","factor.shape",")","or","a","boolean","array","of","shape","(","...",",",")",".","args",":","dict","Dict","of","arguments",".","Array-type","arguments","must","be","of","type","(","...",",","shape",")","Other","arguments","are","passed","to","each","factor","unchanged","Returns","--","--","--","-","out",":","array-like",",","shape","=","[","...",",","{","(",")",",","shape","}","]"]
code: def _iterate_over_factors(self, func, args):
      """Apply a function to each factor of the product.
  
      func is called on each factor of the product.
  
      Array-type arguments are separated out to be passed to func for each factor,
      but other arguments are passed unchanged.
  
      Parameters
      ----------
      func : str
          The name of a method which is defined for each factor of the product
          The method must return an array of shape (..., factor.shape) or a boolean
          array of shape (...,).
      args : dict
          Dict of arguments.
          Array-type arguments must be of type (..., shape)
          Other arguments are passed to each factor unchanged
  
      Returns
      -------
      out : array-like, shape = [..., {(), shape}]
      """
      # TODO The user may prefer to provide the arguments as lists and receive them as
      # TODO lists, as this may be the form in which they are available. This should
      # TODO be allowed, rather than packing and unpacking them repeatedly.
      (
          args_list,
          numerical_args,
      ) = self._validate_and_prepare_args_for_iteration(args)
  
      out = [
          self._get_method(
              self.factors[i], func, args_list[i], numerical_args
          )
          for i in range(len(self.factors))
      ]
      if self._pool_outputs:
          return self._pool_outputs_from_function(out)
      return out
  
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 5 for calling the _IterateOverFactorsMixins obj's underlying member method code with example usage: obj._iterate_over_factors(func, args) and returns: out, self