docs: def download_pisa_multimers_xml(pdb_ids, save_single_xml_files=True, outdir=None, force_rerun=False):
      """Download the PISA XML file for multimers.
  
      See: http://www.ebi.ac.uk/pdbe/pisa/pi_download.html for more info
  
      XML description of macromolecular assemblies:
          http://www.ebi.ac.uk/pdbe/pisa/cgi-bin/multimers.pisa?pdbcodelist
          where "pdbcodelist" is a comma-separated (strictly no spaces) list of PDB codes. The resulting file contain XML
          output of assembly data, equivalent to that displayed in PISA assembly pages, for each of the specified PDB
          entries.   NOTE: If a mass-download is intended, please minimize the number of retrievals by specifying as many
          PDB codes in the URL as feasible (20-50 is a good range), and never send another URL request until the previous
          one has been completed (meaning that the multimers.pisa file has been downloaded). Excessive requests will
          silently die in the server queue.
  
      Args:
          pdb_ids (str, list): PDB ID or list of IDs
          save_single_xml_files (bool): If single XML files should be saved per PDB ID. If False, if multiple PDB IDs are
              provided, then a single, combined XML output file is downloaded
          outdir (str): Directory to output PISA XML files
          force_rerun (bool): Redownload files if they already exist
  
      Returns:
          list: of files downloaded
  
      """
      if not outdir:
          outdir = os.getcwd()
  
      files = {}
      pdb_ids = ssbio.utils.force_lower_list(sorted(pdb_ids))
  
      # If we want to save single PISA XML files per PDB ID...
      if save_single_xml_files:
          # Check for existing PISA XML files
          if not force_rerun:
              existing_files = [op.basename(x) for x in glob.glob(op.join(outdir, '*_multimers.pisa.xml'))]
              # Store the paths to these files to return
              files = {v.split('_')[0]: op.join(outdir, v) for v in existing_files}
              log.debug('Already downloaded PISA files for {}'.format(list(files.keys())))
          else:
              existing_files = []
  
          # Filter PDB IDs based on existing file
          pdb_ids = [x for x in pdb_ids if '{}_multimers.pisa.xml'.format(x) not in existing_files]
  
          # Split the list into 50 to limit requests
          split_list = ssbio.utils.split_list_by_n(pdb_ids, 40)
  
          # Download PISA files
          for l in split_list:
              pdbs = ','.join(l)
              all_pisa_link = 'http://www.ebi.ac.uk/pdbe/pisa/cgi-bin/multimers.pisa?{}'.format(pdbs)
              r = requests.get(all_pisa_link)
  
              # Parse PISA file and save individual XML files
              parser = etree.XMLParser(ns_clean=True)
              tree = etree.fromstring(r.text, parser)
              for pdb in tree.findall('pdb_entry'):
                  filename = op.join(outdir, '{}_multimers.pisa.xml'.format(pdb.find('pdb_code').text))
                  add_root = etree.Element('pisa_multimers')
                  add_root.append(pdb)
                  with open(filename, 'wb') as f:
                      f.write(etree.tostring(add_root))
                  files[pdb.find('pdb_code').text] = filename
                  log.debug('{}: downloaded PISA results'.format(pdb))
  
      else:
          split_list = ssbio.utils.split_list_by_n(pdb_ids, 40)
  
          for l in split_list:
              pdbs = ','.join(l)
              all_pisa_link = 'http://www.ebi.ac.uk/pdbe/pisa/cgi-bin/multimers.pisa?{}'.format(pdbs)
  
              filename = op.join(outdir, '{}_multimers.pisa.xml'.format(pdbs))
  
              if ssbio.utils.force_rerun(flag=force_rerun, outfile=filename):
                  r = requests.get(all_pisa_link)
                  with open(filename, 'w') as f:
                      f.write(r.text)
                  log.debug('Downloaded PISA results')
              else:
                  log.debug('PISA results already downloaded')
  
              for x in l:
                  files[x] = filename
  
      return files