<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def download_supplementary_files(self, directory='series', download_sra=True, email=None, sra_kwargs=None, nproc=1):
 """Download supplementary data. .. warning:: Do not use parallel option (nproc > 1) in the interactive shell. For more details see `this issue <https://stackoverflow.com/questions/23641475/multiprocessing-working-in-python-but-not-in-ipython/23641560#23641560>`_ on SO. Args: directory (:obj:`str`, optional):
 Directory to download the data (in this directory function will create new directory with the files), by default this will be named with the series name + _Supp. download_sra (:obj:`bool`, optional):
 Indicates whether to download SRA raw data too. Defaults to True. email (:obj:`str`, optional):
 E-mail that will be provided to the Entrez. Defaults to None. sra_kwargs (:obj:`dict`, optional):
 Kwargs passed to the GSM.download_SRA method. Defaults to None. nproc (:obj:`int`, optional):
 Number of processes for SRA download (default is 1, no parallelization). Returns: :obj:`dict`: Downloaded data for each of the GSM """

        if sra_kwargs is None:
            sra_kwargs = dict()
        if directory == 'series':
            dirpath = os.path.abspath(self.get_accession() + "_Supp")
            utils.mkdir_p(dirpath)
        else:
            dirpath = os.path.abspath(directory)
            utils.mkdir_p(dirpath)
        downloaded_paths = dict()
        if nproc == 1:
            # No need to parallelize, running ordinary download in loop
            downloaded_paths = dict()
            for gsm in itervalues(self.gsms):
                logger.info(
                    "Downloading SRA files for %s series\n" % gsm.name)
                paths = gsm.download_supplementary_files(email=email,
                                                         download_sra=download_sra,
                                                         directory=dirpath,
                                                         sra_kwargs=sra_kwargs)
                downloaded_paths[gsm.name] = paths
        elif nproc > 1:
            # Parallelization enabled
            downloaders = list()
            # Collecting params for Pool.map in a loop
            for gsm in itervalues(self.gsms):
                downloaders.append([
                    gsm,
                    download_sra,
                    email,
                    dirpath,
                    sra_kwargs])
            p = Pool(nproc)
            results = p.map(_supplementary_files_download_worker, downloaders)
            downloaded_paths = dict(results)
        else:
            raise ValueError("Nproc should be non-negative: %s" % str(nproc))

        return downloaded_paths