nodes: 0, module; 1, function_definition; 2, function_name:get_runs_by_id; 3, parameters; 4, block; 5, identifier:self; 6, identifier:config_id; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, for_statement; 11, expression_statement; 12, return_statement; 13, comment:"""
  		returns a list of runs for a given config id
  
  		The runs are sorted by ascending budget, so '-1' will give
  		the longest run for this config.
  		"""; 14, assignment; 15, assignment; 16, identifier:b; 17, call; 18, block; 19, call; 20, parenthesized_expression; 21, identifier:d; 22, subscript; 23, identifier:runs; 24, list; 25, attribute; 26, argument_list; 27, try_statement; 28, attribute; 29, argument_list; 30, identifier:runs; 31, attribute; 32, identifier:config_id; 33, attribute; 34, identifier:keys; 35, block; 36, except_clause; 37, identifier:runs; 38, identifier:sort; 39, keyword_argument; 40, identifier:self; 41, identifier:data; 42, identifier:d; 43, identifier:results; 44, expression_statement; 45, if_statement; 46, expression_statement; 47, block; 48, identifier:key; 49, lambda; 50, assignment; 51, comparison_operator:d.results[b] is None; 52, block; 53, else_clause; 54, call; 55, raise_statement; 56, lambda_parameters; 57, attribute; 58, identifier:err_logs; 59, call; 60, subscript; 61, None; 62, expression_statement; 63, block; 64, attribute; 65, argument_list; 66, identifier:r; 67, identifier:r; 68, identifier:budget; 69, attribute; 70, argument_list; 71, attribute; 72, identifier:b; 73, assignment; 74, expression_statement; 75, identifier:runs; 76, identifier:append; 77, identifier:r; 78, attribute; 79, identifier:get; 80, identifier:b; 81, None; 82, identifier:d; 83, identifier:results; 84, identifier:r; 85, call; 86, assignment; 87, identifier:d; 88, identifier:exceptions; 89, identifier:Run; 90, argument_list; 91, identifier:r; 92, call; 93, identifier:config_id; 94, identifier:b; 95, None; 96, None; 97, subscript; 98, identifier:err_logs; 99, identifier:Run; 100, argument_list; 101, attribute; 102, identifier:b; 103, identifier:config_id; 104, identifier:b; 105, subscript; 106, subscript; 107, subscript; 108, identifier:err_logs; 109, identifier:d; 110, identifier:time_stamps; 111, subscript; 112, string; 113, subscript; 114, string; 115, attribute; 116, identifier:b; 117, attribute; 118, identifier:b; 119, string_content:loss; 120, attribute; 121, identifier:b; 122, string_content:info; 123, identifier:d; 124, identifier:time_stamps; 125, identifier:d; 126, identifier:results; 127, identifier:d; 128, identifier:results
code: def get_runs_by_id(self, config_id):
  		"""
  		returns a list of runs for a given config id
  
  		The runs are sorted by ascending budget, so '-1' will give
  		the longest run for this config.
  		"""
  		d = self.data[config_id]
  
  		runs = []
  		for b in d.results.keys():
  			try:
  				err_logs = d.exceptions.get(b, None)
  
  				if d.results[b] is None:
  					r = Run(config_id, b, None, None , d.time_stamps[b], err_logs)
  				else:
  					r = Run(config_id, b, d.results[b]['loss'], d.results[b]['info'] , d.time_stamps[b], err_logs)
  				runs.append(r)
  			except:
  				raise
  		runs.sort(key=lambda r: r.budget)
  		return(runs)