docs: def align_orthologous_genes_pairwise(self, sc=None, joblib=False, cores=1, gapopen=10, gapextend=0.5,
                                           engine='needle', parse=True, force_rerun=False):
          """Wrapper for _align_orthologous_gene_pairwise"""
          log.info('Aligning sequences to reference GEM-PRO...')
          from random import shuffle
          g_ids = [g.id for g in self.reference_gempro.functional_genes]
          shuffle(g_ids)
  
          def _align_orthologous_gene_pairwise_sc(g_id, g_to_pickle=self.gene_protein_pickles,
                                                  gapopen=gapopen, gapextend=gapextend, engine=engine, parse=parse,
                                                  outdir=self.sequences_by_gene_dir,
                                                  force_rerun=force_rerun):
              """Align orthologous strain sequences to representative Protein sequence, save as new pickle"""
              import ssbio.utils
              import ssbio.io
              import os.path as op
  
              protein_seqs_aln_pickle_path = op.join(outdir, '{}_protein_withseqs_dis_aln.pckl'.format(g_id))
  
              if ssbio.utils.force_rerun(flag=force_rerun, outfile=protein_seqs_aln_pickle_path):
                  protein_seqs_pickle_path = g_to_pickle[g_id]
                  protein_pickle = ssbio.io.load_pickle(protein_seqs_pickle_path)
  
                  if not protein_pickle.representative_sequence:
                      return
  
                  if len(protein_pickle.sequences) < 1:
                      return
  
                  alignment_dir = op.join(outdir, g_id)
                  ssbio.utils.make_dir(alignment_dir)
                  protein_pickle.pairwise_align_sequences_to_representative(gapopen=gapopen, gapextend=gapextend,
                                                                            engine=engine, outdir=alignment_dir,
                                                                            parse=parse, force_rerun=force_rerun)
                  protein_pickle.save_pickle(outfile=protein_seqs_aln_pickle_path)
  
              return g_id, protein_seqs_aln_pickle_path
  
          if sc:
              genes_rdd = sc.parallelize(g_ids)
              result_raw = genes_rdd.map(_align_orthologous_gene_pairwise_sc).collect()
          else:
              result_raw = []
              for g in tqdm(g_ids):
                  result_raw.append(self._align_orthologous_gene_pairwise(g, gapopen=gapopen, gapextend=gapextend,
                                                                      engine=engine, parse=parse,
                                                                      force_rerun=force_rerun))
  
          result = [x for x in result_raw if x is not None]
          log.info('Storing paths to new Protein objects in self.gene_protein_pickles...')
          for g_id, protein_pickle in result:
              self.gene_protein_pickles[g_id] = protein_pickle