nodes: 0, module; 1, function_definition; 2, function_name:bleakest_moves; 3, parameters; 4, block; 5, identifier:self; 6, identifier:start_game; 7, identifier:end_game; 8, expression_statement; 9, expression_statement; 10, expression_statement; 11, function_definition; 12, return_statement; 13, comment:"""Given a range of games, return the bleakest moves.
  
          Returns a list of (game, move, q) sorted by q.
          """; 14, assignment; 15, assignment; 16, function_name:parse; 17, parameters; 18, block; 19, call; 20, identifier:bleak; 21, string; 22, identifier:rows; 23, call; 24, identifier:r; 25, expression_statement; 26, expression_statement; 27, expression_statement; 28, return_statement; 29, identifier:sorted; 30, argument_list; 31, string_content:bleakest_q; 32, attribute; 33, argument_list; 34, assignment; 35, assignment; 36, assignment; 37, expression_list; 38, list_comprehension; 39, keyword_argument; 40, attribute; 41, identifier:read_rows; 42, call; 43, call; 44, keyword_argument; 45, identifier:rk; 46, call; 47, pattern_list; 48, call; 49, identifier:q; 50, call; 51, call; 52, call; 53, call; 54, call; 55, for_in_clause; 56, identifier:key; 57, call; 58, identifier:self; 59, identifier:bt_table; 60, attribute; 61, argument_list; 62, attribute; 63, argument_list; 64, identifier:filter_; 65, call; 66, identifier:str; 67, argument_list; 68, identifier:g; 69, identifier:m; 70, attribute; 71, argument_list; 72, attribute; 73, argument_list; 74, identifier:int; 75, argument_list; 76, identifier:int; 77, argument_list; 78, identifier:float; 79, argument_list; 80, identifier:parse; 81, argument_list; 82, identifier:r; 83, identifier:rows; 84, attribute; 85, argument_list; 86, identifier:ROW_PREFIX; 87, identifier:format; 88, identifier:start_game; 89, identifier:ROW_PREFIX; 90, identifier:format; 91, identifier:end_game; 92, attribute; 93, argument_list; 94, attribute; 95, string; 96, call; 97, identifier:groups; 98, identifier:r; 99, identifier:cell_value; 100, identifier:METADATA; 101, identifier:bleak; 102, identifier:g; 103, identifier:m; 104, identifier:q; 105, identifier:r; 106, identifier:operator; 107, identifier:itemgetter; 108, integer:2; 109, identifier:bigtable_row_filters; 110, identifier:ColumnRangeFilter; 111, identifier:METADATA; 112, identifier:bleak; 113, identifier:bleak; 114, identifier:r; 115, identifier:row_key; 116, string_content:utf-8; 117, attribute; 118, argument_list; 119, identifier:_game_row_key; 120, identifier:match; 121, identifier:rk
code: def bleakest_moves(self, start_game, end_game):
          """Given a range of games, return the bleakest moves.
  
          Returns a list of (game, move, q) sorted by q.
          """
          bleak = b'bleakest_q'
          rows = self.bt_table.read_rows(
              ROW_PREFIX.format(start_game),
              ROW_PREFIX.format(end_game),
              filter_=bigtable_row_filters.ColumnRangeFilter(
                  METADATA, bleak, bleak))
  
          def parse(r):
              rk = str(r.row_key, 'utf-8')
              g, m = _game_row_key.match(rk).groups()
              q = r.cell_value(METADATA, bleak)
              return int(g), int(m), float(q)
          return sorted([parse(r) for r in rows], key=operator.itemgetter(2))