Skip to content

Commit baf6e93

Browse files
authored
Merge pull request #280 from openml/setuplist
Setuplist
2 parents ae2362b + 5424120 commit baf6e93

5 files changed

Lines changed: 48 additions & 24 deletions

File tree

openml/flows/sklearn_converter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ def _serialize_cross_validator(o):
533533
for key in args:
534534
# We need deprecation warnings to always be on in order to
535535
# catch deprecated param values.
536-
# This is set in utils/__init__.py.py.py but it gets overwritten
536+
# This is set in utils/__init__.py but it gets overwritten
537537
# when running under python3 somehow.
538538
warnings.simplefilter("always", DeprecationWarning)
539539
try:

openml/setups/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
from .setup import OpenMLSetup
2-
from .functions import get_setup, setup_list, setup_exists, initialize_model
2+
from .functions import get_setup, list_setups, setup_exists, initialize_model
33

4-
__all__ = ['get_setup', 'setup_list', 'setup_exists', 'initialize_model']
4+
__all__ = ['get_setup', 'list_setups', 'setup_exists', 'initialize_model']

openml/setups/functions.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import xmltodict
55

66
from .setup import OpenMLSetup, OpenMLParameter
7-
from openml.flows import sklearn_to_flow, flow_exists
7+
from openml.flows import flow_exists
88

99

1010
def setup_exists(flow, model=None):
@@ -74,7 +74,7 @@ def get_setup(setup_id):
7474
return _create_setup_from_xml(result_dict)
7575

7676

77-
def setup_list(flow=None, tag=None, offset=None, size=None):
77+
def list_setups(flow=None, tag=None, setup=None, offset=None, size=None):
7878
"""List all setups matching all of the given filters.
7979
8080
Perform API call `/setup/list/{filters}
@@ -85,6 +85,8 @@ def setup_list(flow=None, tag=None, offset=None, size=None):
8585
8686
tag : str, optional
8787
88+
setup : list(int), optional
89+
8890
offset : int, optional
8991
9092
size : int, optional
@@ -100,6 +102,8 @@ def setup_list(flow=None, tag=None, offset=None, size=None):
100102
api_call += "/offset/%d" % int(offset)
101103
if size is not None:
102104
api_call += "/limit/%d" % int(size)
105+
if size is not None:
106+
api_call += "/setup/%s" % ','.join([str(int(i)) for i in setup])
103107
if flow is not None:
104108
api_call += "/flow/%s" % flow
105109
if tag is not None:
@@ -120,11 +124,11 @@ def _list_setups(api_call):
120124
% str(setups_dict))
121125
elif '@xmlns:oml' not in setups_dict['oml:setups']:
122126
raise ValueError('Error in return XML, does not contain '
123-
'"oml:runs"/@xmlns:oml: %s'
127+
'"oml:setups"/@xmlns:oml: %s'
124128
% str(setups_dict))
125129
elif setups_dict['oml:setups']['@xmlns:oml'] != 'http://openml.org/openml':
126130
raise ValueError('Error in return XML, value of '
127-
'"oml:runs"/@xmlns:oml is not '
131+
'"oml:seyups"/@xmlns:oml is not '
128132
'"http://openml.org/openml": %s'
129133
% str(setups_dict))
130134

tests/test_flows/test_flow.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -239,17 +239,26 @@ def get_sentinel():
239239
def test_existing_flow_exists(self):
240240
# create a flow
241241
nb = sklearn.naive_bayes.GaussianNB()
242-
flow = openml.flows.sklearn_to_flow(nb)
243-
flow, _ = self._add_sentinel_to_flow_name(flow, None)
244-
#publish the flow
245-
flow = flow.publish()
246-
#redownload the flow
247-
flow = openml.flows.get_flow(flow.flow_id)
248-
249-
# check if flow exists can find it
250-
flow = openml.flows.get_flow(flow.flow_id)
251-
downloaded_flow_id = openml.flows.flow_exists(flow.name, flow.external_version)
252-
self.assertEquals(downloaded_flow_id, flow.flow_id)
242+
243+
steps = [('imputation', sklearn.preprocessing.Imputer(strategy='median')),
244+
('hotencoding', sklearn.preprocessing.OneHotEncoder(sparse=False,
245+
handle_unknown='ignore')),
246+
('variencethreshold', sklearn.feature_selection.VarianceThreshold()),
247+
('classifier', sklearn.tree.DecisionTreeClassifier())]
248+
complicated = sklearn.pipeline.Pipeline(steps=steps)
249+
250+
for classifier in [nb, complicated]:
251+
flow = openml.flows.sklearn_to_flow(classifier)
252+
flow, _ = self._add_sentinel_to_flow_name(flow, None)
253+
#publish the flow
254+
flow = flow.publish()
255+
#redownload the flow
256+
flow = openml.flows.get_flow(flow.flow_id)
257+
258+
# check if flow exists can find it
259+
flow = openml.flows.get_flow(flow.flow_id)
260+
downloaded_flow_id = openml.flows.flow_exists(flow.name, flow.external_version)
261+
self.assertEquals(downloaded_flow_id, flow.flow_id)
253262

254263
def test_sklearn_to_upload_to_flow(self):
255264
iris = sklearn.datasets.load_iris()

tests/test_setups/test_setup_functions.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def get_params(self, deep=True):
4747
return {}
4848

4949

50-
5150
class TestRun(TestBase):
5251

5352
def test_nonexisting_setup_exists(self):
@@ -118,15 +117,27 @@ def test_get_setup(self):
118117
else:
119118
self.assertEquals(len(current.parameters), num_params[idx])
120119

121-
122120
def test_setup_list_filter_flow(self):
123-
# TODO: please remove for better test
124-
# openml.config.server = self.production_server
121+
openml.config.server = self.production_server
125122

126-
flow_id = 31 # TODO please change
123+
flow_id = 5873
127124

128-
setups = openml.setups.setup_list(flow=31)
125+
setups = openml.setups.list_setups(flow=flow_id)
129126

130127
self.assertGreater(len(setups), 0) # TODO: please adjust 0
131128
for setup_id in setups.keys():
132129
self.assertEquals(setups[setup_id].flow_id, flow_id)
130+
131+
def test_setuplist_offset(self):
132+
# TODO: remove after pull on live for better testing
133+
# openml.config.server = self.production_server
134+
135+
size = 100
136+
setups = openml.setups.list_setups(offset=0, size=size)
137+
self.assertEquals(len(setups), size)
138+
setups2 = openml.setups.list_setups(offset=size, size=size)
139+
self.assertEquals(len(setups), size)
140+
141+
all = set(setups.keys()).union(setups2.keys())
142+
143+
self.assertEqual(len(all), size * 2)

0 commit comments

Comments
 (0)