docs: def manual_uniprot_mapping(self, gene_to_uniprot_dict, outdir=None, set_as_representative=True):
          """Read a manual dictionary of model gene IDs --> UniProt IDs. By default sets them as representative.
  
          This allows for mapping of the missing genes, or overriding of automatic mappings.
  
          Input a dictionary of::
  
              {
                  <gene_id1>: <uniprot_id1>,
                  <gene_id2>: <uniprot_id2>,
              }
  
          Args:
              gene_to_uniprot_dict: Dictionary of mappings as shown above
              outdir (str): Path to output directory of downloaded files, must be set if GEM-PRO directories
                  were not created initially
              set_as_representative (bool): If mapped UniProt IDs should be set as representative sequences
  
          """
          for g, u in tqdm(gene_to_uniprot_dict.items()):
              g = str(g)
              gene = self.genes.get_by_id(g)
  
              try:
                  uniprot_prop = gene.protein.load_uniprot(uniprot_id=u,
                                                           outdir=outdir, download=True,
                                                           set_as_representative=set_as_representative)
              except HTTPError as e:
                  log.error('{}, {}: unable to complete web request'.format(g, u))
                  print(e)
                  continue
  
          log.info('Completed manual ID mapping --> UniProt. See the "df_uniprot_metadata" attribute for a summary dataframe.')