docs: def run(self, repeat=1, processes=None, use_thread=False):
          """ Runs all experiments using a :py:class:`multiprocessing.Pool`.
  
              :param int repeat: Number of time each experiment will be repeated.
              :param int processes: Number of processes launched in parallel (Default: uses all the availabled CPUs)
              :param bool use_thread: Use a :py:class:`~multiprocessing.pool.ThreadPool` instead of a :py:class:`~multiprocessing.pool.Pool`. By default, tries to guess depending on the environment which one to use.
  
           """
          mega_config = [c for c in self._config for _ in range(repeat)]
  
          env = [environments[s.environment][0] for s in self.settings]
          use_process = array([e.use_process for e in env]).all() and (not use_thread)
  
          pool = Pool(processes) if use_process else ThreadPool(processes)
  
          logs = pool.map(_f, mega_config)
          logs = array(logs).reshape(-1, repeat)
  
          self._add_logs(logs)
  
          return logs