<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)