nodes: 0, module; 1, function_definition; 2, function_name:intersectingIntervalIterator; 3, parameters; 4, block; 5, identifier:self; 6, identifier:start; 7, identifier:end; 8, expression_statement; 9, expression_statement; 10, expression_statement; 11, for_statement; 12, comment:"""
      Get an iterator which will iterate over those objects in the tree which
      intersect the given interval - sorted in order of start index
  
      :param start: find intervals in the tree that intersect an interval with
                    with this start index (inclusive)
      :param end:   find intervals in the tree that intersect an interval with
                    with this end index (exclusive)
      :return: an iterator that will yield intersected intervals
      """; 13, assignment; 14, call; 15, identifier:item; 16, identifier:items; 17, block; 18, identifier:items; 19, call; 20, attribute; 21, argument_list; 22, expression_statement; 23, attribute; 24, argument_list; 25, identifier:items; 26, identifier:sort; 27, keyword_argument; 28, yield; 29, identifier:self; 30, identifier:intersectingInterval; 31, identifier:start; 32, identifier:end; 33, identifier:key; 34, lambda; 35, identifier:item; 36, lambda_parameters; 37, attribute; 38, identifier:x; 39, identifier:x; 40, identifier:start
code: def intersectingIntervalIterator(self, start, end):
      """
      Get an iterator which will iterate over those objects in the tree which
      intersect the given interval - sorted in order of start index
  
      :param start: find intervals in the tree that intersect an interval with
                    with this start index (inclusive)
      :param end:   find intervals in the tree that intersect an interval with
                    with this end index (exclusive)
      :return: an iterator that will yield intersected intervals
      """
      items = self.intersectingInterval(start, end)
      items.sort(key=lambda x: x.start)
      for item in items:
        yield item