docs: def _get_variant_effect(cls, variants, ref_sequence):
          '''variants = list of variants in the same codon.
             returns type of variant (cannot handle more than one indel in the same codon).'''
          assert len(variants) != 0
  
          var_types = [x.var_type for x in variants]
          if len(set(var_types)) != 1:
              return 'MULTIPLE', '.', '.'
  
          var_type = var_types[0]
  
          assert set([x.ref_name for x in variants]) == set([ref_sequence.id])
          codon_starts = [AssemblyVariants._get_codon_start(0, x.ref_start) for x in variants]
          assert len(set(codon_starts)) == 1
          codon_start = codon_starts[0]
          aa_start = codon_start // 3
          ref_codon = pyfastaq.sequences.Fasta('codon', ref_sequence[codon_start:codon_start+3])
          ref_aa = ref_codon.translate()
  
          if var_type == pymummer.variant.SNP:
              new_codon = list(ref_codon.seq)
              for v in variants:
                  new_codon[v.ref_start - codon_start] = v.qry_base
              new_codon = pyfastaq.sequences.Fasta('new', ''.join(new_codon))
              qry_aa = new_codon.translate()
  
              if ref_aa.seq == qry_aa.seq:
                  return ('SYN', '.', aa_start)
              elif qry_aa.seq == '*':
                  return ('TRUNC', ref_aa.seq + str(aa_start + 1) + 'trunc', aa_start)
              else:
                  return ('NONSYN', ref_aa.seq + str(aa_start + 1) + qry_aa.seq, aa_start)
          elif var_type in [pymummer.variant.INS, pymummer.variant.DEL]:
              if len(variants) > 1:
                  return 'INDELS', '.', aa_start
  
              var = variants[0]
  
              if var_type == pymummer.variant.INS:
                  new_seq = pyfastaq.sequences.Fasta('seq', var.qry_base)
              else:
                  new_seq = pyfastaq.sequences.Fasta('seq', var.ref_base)
  
              if len(new_seq) % 3 != 0:
                  return ('FSHIFT', ref_aa.seq + str(aa_start + 1) + 'fs', aa_start)
  
              new_seq_aa = new_seq.translate()
              if '*' in new_seq_aa.seq:
                  return ('TRUNC', ref_aa.seq + str(aa_start + 1) + 'trunc', aa_start)
              elif var_type == pymummer.variant.INS:
                  ref_codon_after_ins = pyfastaq.sequences.Fasta('codon', ref_sequence[codon_start+3:codon_start+6])
                  aa_after_ins = ref_codon_after_ins.translate()
                  return ('INS', ref_aa.seq + str(aa_start + 1) + '_' + aa_after_ins.seq + str(aa_start + 2) + 'ins' + new_seq_aa.seq , aa_start)
              else:
                  if len(new_seq) == 3:
                      return ('DEL', ref_aa.seq + str(aa_start + 1) + 'del', aa_start)
                  else:
                      assert len(new_seq) % 3 == 0
                      ref_codon_after_ins = pyfastaq.sequences.Fasta('codon', ref_sequence[codon_start+3:codon_start+6])
                      aa_after_ins = ref_codon_after_ins.translate()
                      return ('DEL', ref_aa.seq + str(aa_start + 1)+ '_' + aa_after_ins.seq + str(aa_start + 2) + 'del', aa_start)
  
          else:
              return ('UNKNOWN', '.', aa_start)