code: def run_serial(target, jobs, n=1, **kwargs):
      
      return [[target(copy.copy(job), i + 1, j + 1) for j in range(n)] for i, job in enumerate(jobs)]
docs: Evaluate the given function with each set of arguments, and return a list of results.
      This function does in series.
  
      Parameters
      ----------
      target : function
          A function to be evaluated. The function must accepts three arguments,
          which are a list of arguments given as `jobs`, a job and task id (int).
      jobs : list
          A list of arguments passed to the function.
      n : int, optional
          A number of tasks. Repeat the evaluation `n` times for each job.
          1 for default.
  
      Returns
      -------
      results : list
          A list of results. Each element is a list containing `n` results.
  
      Examples
      --------
      >>> jobs = ((1, 'spam'), (2, 'ham'), (3, 'eggs'))
  
      >>> target = lambda args, job_id, task_id: (args[1] * args[0])
      >>> run_serial(target, jobs)
      [['spam'], ['hamham'], ['eggseggseggs']]
  
      >>> target = lambda args, job_id, task_id: "{:d} {}".format(task_id, args[1] * args[0])
      >>> run_serial(target, jobs, n=2)
      [['1 spam', '2 spam'], ['1 hamham', '2 hamham'], ['1 eggseggseggs', '2 eggseggseggs']]
  
      >>> seeds = genseeds(3)
      >>> def target(arg, job_id, task_id):
      ...     from ecell4.extra.ensemble import getseed
      ...     return getseed(arg, task_id)
      >>> run_serial(target, (seeds, ), n=3)  # doctest: +SKIP
      [[127152315, 2028054913, 253611282]]
  
      See Also
      --------
      ecell4.extra.ensemble.run_serial
      ecell4.extra.ensemble.run_sge
      ecell4.extra.ensemble.run_slurm
      ecell4.extra.ensemble.run_multiprocessing
      ecell4.extra.ensemble.run_azure