code: def reads_generator_to_protein_sequences_generator(
          variant_and_overlapping_reads_generator,
          transcript_id_whitelist=None,
          protein_sequence_length=PROTEIN_SEQUENCE_LENGTH,
          min_alt_rna_reads=MIN_ALT_RNA_READS,
          min_variant_sequence_coverage=MIN_VARIANT_SEQUENCE_COVERAGE,
          min_transcript_prefix_length=MIN_TRANSCRIPT_PREFIX_LENGTH,
          max_transcript_mismatches=MAX_REFERENCE_TRANSCRIPT_MISMATCHES,
          include_mismatches_after_variant=INCLUDE_MISMATCHES_AFTER_VARIANT,
          max_protein_sequences_per_variant=MAX_PROTEIN_SEQUENCES_PER_VARIANT,
          variant_sequence_assembly=VARIANT_SEQUENCE_ASSEMBLY):
      for (variant, overlapping_reads) in variant_and_overlapping_reads_generator:
          overlapping_transcript_ids = [
              t.id
              for t in variant.transcripts
              if t.is_protein_coding
          ]
          _, ref, alt = trim_variant(variant)
          overlapping_reads = list(overlapping_reads)
          reads_grouped_by_allele = group_reads_by_allele(overlapping_reads)
          ref_reads = reads_grouped_by_allele.get(ref, [])
          alt_reads = reads_grouped_by_allele.get(alt, [])
          translations = translate_variant_reads(
              variant=variant,
              variant_reads=alt_reads,
              transcript_id_whitelist=transcript_id_whitelist,
              protein_sequence_length=protein_sequence_length,
              min_alt_rna_reads=min_alt_rna_reads,
              min_variant_sequence_coverage=min_variant_sequence_coverage,
              min_transcript_prefix_length=min_transcript_prefix_length,
              max_transcript_mismatches=max_transcript_mismatches,
              include_mismatches_after_variant=include_mismatches_after_variant,
              variant_sequence_assembly=variant_sequence_assembly)
          protein_sequences = []
          for (key, equivalent_translations) in groupby(
                  translations, key_fn=Translation.as_translation_key).items():
              alt_reads_supporting_protein_sequence, group_transcript_ids, group_gene_names = \
                  ProteinSequence._summarize_translations(equivalent_translations)
              logger.info(
                  "%s: %s alt reads supporting protein sequence (gene names = %s)",
                  key,
                  len(alt_reads_supporting_protein_sequence),
                  group_gene_names)
              protein_sequence = ProteinSequence.from_translation_key(
                  translation_key=key,
                  translations=equivalent_translations,
                  overlapping_reads=overlapping_reads,
                  alt_reads=alt_reads,
                  ref_reads=ref_reads,
                  alt_reads_supporting_protein_sequence=alt_reads_supporting_protein_sequence,
                  transcripts_supporting_protein_sequence=group_transcript_ids,
                  transcripts_overlapping_variant=overlapping_transcript_ids,
                  gene=list(group_gene_names))
              logger.info("%s: protein sequence = %s" % (key, protein_sequence.amino_acids))
              protein_sequences.append(protein_sequence)
          protein_sequences = sort_protein_sequences(protein_sequences)
          yield variant, protein_sequences[:max_protein_sequences_per_variant]