docs: def from_settings_product(cls, environments, babblings,
                                interest_models, sensorimotor_models,
                                evaluate_at,
                                testcases=None, same_testcases=False):
          """ Creates a ExperimentPool with the product of all the given settings.
  
              :param environments: e.g. [('simple_arm', 'default'), ('simple_arm', 'high_dimensional')]
              :type environments: list of (environment name, config name)
              :param babblings: e.g. ['motor', 'goal']
              :type bablings: list of babbling modes
              :param interest_models: e.g. [('random', 'default')]
              :type interest_models: list of (interest model name, config name)
              :param sensorimotor_models: e.g. [('non_parametric', 'default')]
              :type sensorimotor_models: list of (sensorimotor model name, config name)
              :param evaluate_at: indices defining when to evaluate
              :type evaluate_at: list of int
              :param bool same_testcases: whether to use the same testcases for all experiments
  
          """
          l = itertools.product(environments, babblings,
                                interest_models, sensorimotor_models)
  
          settings = [make_settings(env, bab, im, sm, env_conf, im_conf, sm_conf)
                      for ((env, env_conf), bab, (im, im_conf), (sm, sm_conf)) in l]
  
          return cls(settings, evaluate_at, testcases, same_testcases)