@@ -212,7 +212,7 @@ def __list_evaluations(api_call, output_format='object'):
212212
213213 if output_format == 'dataframe' :
214214 rows = [value for key , value in evals .items ()]
215- evals = ( pd .DataFrame .from_records (rows , columns = rows [0 ].keys () ))
215+ evals = pd .DataFrame .from_records (rows , columns = rows [0 ].keys ())
216216 return evals
217217
218218
@@ -257,8 +257,8 @@ def list_evaluations_setups(
257257 output_format : str = 'dataframe'
258258) -> Union [Dict , pd .DataFrame ]:
259259 """
260- List all run-evaluation pairs matching all of the given filters.
261- (Supports large amount of results)
260+ List all run-evaluation pairs matching all of the given filters
261+ and their hyperparameter settings.
262262
263263 Parameters
264264 ----------
@@ -295,33 +295,38 @@ def list_evaluations_setups(
295295
296296 Returns
297297 -------
298- dict or dataframe
298+ dict or dataframe with hyperparameter settings as a list of tuples.
299299 """
300300 # List evaluations
301301 evals = list_evaluations (function = function , offset = offset , size = size , id = id , task = task ,
302302 setup = setup , flow = flow , uploader = uploader , tag = tag ,
303303 per_fold = per_fold , sort_order = sort_order , output_format = 'dataframe' )
304304
305305 # List setups
306- # Split setups in evals into chunks of N setups as list_setups does not support long lists
307- N = 100
308- setup_chunks = np .split (evals ['setup_id' ].unique (),
309- ((len (evals ['setup_id' ].unique ()) - 1 ) // N ) + 1 )
310- setups = pd .DataFrame ()
311- for setup in setup_chunks :
312- result = pd .DataFrame (openml .setups .list_setups (setup = setup , output_format = 'dataframe' ))
313- result .drop ('flow_id' , axis = 1 , inplace = True )
314- setups = pd .concat ([setups , result ], ignore_index = True )
315- parameters = []
316- for parameter_dict in setups ['parameters' ]:
317- if parameter_dict is not None :
318- parameters .append ([tuple ([param ['parameter_name' ], param ['value' ]])
319- for param in parameter_dict .values ()])
320- else :
321- parameters .append ([])
322- setups ['parameters' ] = parameters
323- # Merge setups with evaluations
324- df = pd .merge (evals , setups , on = 'setup_id' , how = 'left' )
306+ # Split setups in evals into chunks of N setups as list_setups does not support large size
307+ df = pd .DataFrame ()
308+ if not evals .empty :
309+ N = 100
310+ setup_chunks = np .split (evals ['setup_id' ].unique (),
311+ ((len (evals ['setup_id' ].unique ()) - 1 ) // N ) + 1 )
312+ setups = pd .DataFrame ()
313+ for setup in setup_chunks :
314+ result = pd .DataFrame (openml .setups .list_setups (setup = setup , output_format = 'dataframe' ))
315+ result .drop ('flow_id' , axis = 1 , inplace = True )
316+ # concat resulting setup chunks into single datframe
317+ setups = pd .concat ([setups , result ], ignore_index = True )
318+ parameters = []
319+ # Convert parameters of setup into list of tuples of (hyperparameter, value)
320+ for parameter_dict in setups ['parameters' ]:
321+ if parameter_dict is not None :
322+ parameters .append ([tuple ([param ['parameter_name' ], param ['value' ]])
323+ for param in parameter_dict .values ()])
324+ else :
325+ parameters .append ([])
326+ setups ['parameters' ] = parameters
327+ # Merge setups with evaluations
328+ df = pd .merge (evals , setups , on = 'setup_id' , how = 'left' )
329+
325330 if output_format == 'dataframe' :
326331 return df
327332 else :
0 commit comments