docs: def _build_strain_specific_model(self, strain_id, ref_functional_genes, orth_matrix, force_rerun=False):
          """Create strain GEMPRO, set functional genes"""
          gp_noseqs_path = op.join(self.model_dir, '{}_gp.pckl'.format(strain_id))
  
          if ssbio.utils.force_rerun(flag=force_rerun, outfile=gp_noseqs_path):
              logging.disable(logging.WARNING)
  
              strain_gp = GEMPRO(gem_name=strain_id)
  
              # if self.reference_gempro.model:
              #     strain_gp.load_cobra_model(deepcopy(self.reference_gempro.model))
              #     # Reset the GenePro attributes
              #     for x in strain_gp.genes:
              #         x.reset_protein()
              # else:
                  # Otherwise, just copy the list of genes over and rename the IDs
              strain_genes = [x for x in ref_functional_genes]
              strain_gp.add_gene_ids(strain_genes)
  
              logging.disable(logging.NOTSET)
  
              # Get a list of genes which do not have orthology in the strain
              genes_to_remove = orth_matrix[pd.isnull(orth_matrix[strain_id])][strain_id].index.tolist()
  
              # Mark genes non-functional
              strain_genes = [x.id for x in strain_gp.genes]
              genes_to_remove = list(set(genes_to_remove).intersection(set(strain_genes)))
  
              if len(genes_to_remove) > 0:
                  # If a COBRApy model exists, utilize the delete_model_genes method
                  # if strain_gp.model:
                  #     cobra.manipulation.delete_model_genes(strain_gp.model, genes_to_remove)
                  # # Otherwise, just mark the genes as non-functional
                  # else:
                  for g in genes_to_remove:
                      strain_gp.genes.get_by_id(g).functional = False
  
              strain_gp.save_pickle(outfile=gp_noseqs_path)
  
          return strain_id, gp_noseqs_path