Skip to content

Commit bc91307

Browse files
committed
fix empty evaluations
1 parent 32f480e commit bc91307

1 file changed

Lines changed: 28 additions & 23 deletions

File tree

openml/evaluations/functions.py

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)