nodes: 0, module; 1, function_definition; 2, function_name:date_sorted_sources; 3, parameters; 4, block; 5, list_splat_pattern; 6, expression_statement; 7, expression_statement; 8, comment:# Strip out key decoration; 9, for_statement; 10, identifier:sources; 11, comment:"""
      Takes an iterable of sources, generating namestrings and
      piping their output into date_sort.
      """; 12, assignment; 13, pattern_list; 14, identifier:sorted_stream; 15, block; 16, identifier:sorted_stream; 17, call; 18, identifier:_; 19, identifier:message; 20, expression_statement; 21, attribute; 22, argument_list; 23, yield; 24, identifier:heapq; 25, identifier:merge; 26, list_splat; 27, identifier:message; 28, generator_expression; 29, call; 30, for_in_clause; 31, identifier:_decorate_source; 32, argument_list; 33, identifier:s; 34, identifier:sources; 35, identifier:s
code: def date_sorted_sources(*sources):
      """
      Takes an iterable of sources, generating namestrings and
      piping their output into date_sort.
      """
      sorted_stream = heapq.merge(*(_decorate_source(s) for s in sources))
  
      # Strip out key decoration
      for _, message in sorted_stream:
          yield message