A serial implementation of the "partially-pickling map" function returned
    by the :meth:`ParallelHelper.get_ppmap` interface. Its arguments are:

    *func*
      A callable taking three arguments and returning a Pickle-able value.
    *fixed_arg*
      Any value, even one that is not pickle-able.
    *var_arg_iter*
      An iterable that generates Pickle-able values.

    The functionality is::

        def serial_ppmap(func, fixed_arg, var_arg_iter):
            return [func(i, fixed_arg, x) for i, x in enumerate(var_arg_iter)]

    Therefore the arguments to your ``func`` function, which actually does the
    interesting computations, are:

    *index*
      The 0-based index number of the item being processed; often this can
      be ignored.
    *fixed_arg*
      The same *fixed_arg* that was passed to ``ppmap``.
    *var_arg*
      The *index*'th item in the *var_arg_iter* iterable passed to
      ``ppmap``.

def serial_ppmap(func, fixed_arg, var_arg_iter):
    """A serial implementation of the "partially-pickling map" function returned
    by the :meth:`ParallelHelper.get_ppmap` interface. Its arguments are:

    *func*
      A callable taking three arguments and returning a Pickle-able value.
    *fixed_arg*
      Any value, even one that is not pickle-able.
    *var_arg_iter*
      An iterable that generates Pickle-able values.

    The functionality is::

        def serial_ppmap(func, fixed_arg, var_arg_iter):
            return [func(i, fixed_arg, x) for i, x in enumerate(var_arg_iter)]

    Therefore the arguments to your ``func`` function, which actually does the
    interesting computations, are:

    *index*
      The 0-based index number of the item being processed; often this can
      be ignored.
    *fixed_arg*
      The same *fixed_arg* that was passed to ``ppmap``.
    *var_arg*
      The *index*'th item in the *var_arg_iter* iterable passed to
      ``ppmap``.

    """
    return [func(i, fixed_arg, x) for i, x in enumerate(var_arg_iter)]