docs: def count_de_novos_per_transcript(ensembl, gene_id, de_novos=[]):
      """ count de novos in transcripts for a gene.
      
      Args:
          ensembl: EnsemblRequest object to request data from ensembl
          gene_id: HGNC symbol for gene
          de_novos: list of de novo positions, so we can check they all fit in
              the gene transcript
          
      Returns:
          dictionary of lengths and de novo counts, indexed by transcript IDs.
      """
      
      transcripts = get_transcript_ids(ensembl, gene_id)
      
      # TODO: allow for genes without any coding sequence.
      if len(transcripts) == 0:
          raise IndexError("{0} lacks coding transcripts".format(gene_id))
      
      # count the de novos observed in all transcripts
      counts = {}
      for key in transcripts:
          try:
              gene = construct_gene_object(ensembl, key)
              total = len(get_de_novos_in_transcript(gene, de_novos))
              if total > 0:
                  counts[key] = {}
                  counts[key]["n"] = total
                  counts[key]["len"] = transcripts[key]
          except ValueError:
              pass
      
      return counts