Skip to content

Commit b99ce66

Browse files
committed
change option to check for parameter names instead of not checking
1 parent 247f180 commit b99ce66

4 files changed

Lines changed: 59 additions & 6 deletions

File tree

openml/flows/flow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__(self, name, description, model, components, parameters,
105105
keys_parameters = set(parameters.keys())
106106
keys_parameters_meta_info = set(parameters_meta_info.keys())
107107
if len(keys_parameters.difference(keys_parameters_meta_info)) > 0:
108-
raise ValueError('Parameter %s only in parameters, but not in'
108+
raise ValueError('Parameter %s only in parameters, but not in '
109109
'parameters_meta_info.' %
110110
str(keys_parameters.difference(
111111
keys_parameters_meta_info)))

openml/flows/functions.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def _check_flow_for_server_id(flow):
146146

147147

148148
def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
149-
ignore_parameters=False):
149+
ignore_parameter_values=False):
150150
"""Check equality of two flows.
151151
152152
Two flows are equal if their all keys which are not set by the server
@@ -162,7 +162,7 @@ def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
162162
If set to ``OpenMLFlow.upload_date``, ignores parameters in a child
163163
flow if it's upload date predates the upload date of the parent flow.
164164
165-
ignore_parameters : bool
165+
ignore_parameter_values : bool
166166
Whether to ignore parameter values when comparing flows.
167167
"""
168168
if not isinstance(flow1, OpenMLFlow):
@@ -197,7 +197,7 @@ def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
197197
'argument2, but not in argument1.' % name)
198198
assert_flows_equal(attr1[name], attr2[name],
199199
ignore_parameters_on_older_children,
200-
ignore_parameters)
200+
ignore_parameter_values)
201201

202202
else:
203203
if key == 'parameters':
@@ -208,7 +208,14 @@ def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
208208
ignore_parameters_on_older_children)
209209
if upload_date_current_flow < upload_date_parent_flow:
210210
continue
211-
elif ignore_parameters:
211+
elif ignore_parameter_values:
212+
parameters_flow_1 = set(flow1.parameters.keys())
213+
parameters_flow_2 = set(flow2.parameters.keys())
214+
symmetric_difference = parameters_flow_1 ^ parameters_flow_2
215+
if len(symmetric_difference) > 0:
216+
raise ValueError('Flow %s: parameter set of flow '
217+
'differs from the parameters stored '
218+
'on the server.' % flow1.name)
212219
continue
213220

214221
if attr1 != attr2:

openml/runs/functions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def _publish_flow_if_necessary(flow):
127127
server_flow = get_flow(flow_id)
128128
openml.flows.flow._copy_server_fields(server_flow, flow)
129129
openml.flows.assert_flows_equal(flow, server_flow,
130-
ignore_parameters=True)
130+
ignore_parameter_values=True)
131131
else:
132132
raise e
133133

tests/test_flows/test_flow_functions.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,49 @@ def test_are_flows_equal(self):
111111
self.assertRaises(ValueError,
112112
openml.flows.functions.assert_flows_equal,
113113
parent_flow, new_flow)
114+
115+
def test_are_flows_equal_ignore_parameters(self):
116+
paramaters = OrderedDict((('a', 5), ('b', 6)))
117+
parameters_meta_info = OrderedDict((('a', None), ('b', None)))
118+
119+
flow = openml.flows.OpenMLFlow(name='Test',
120+
description='Test flow',
121+
model=None,
122+
components=OrderedDict(),
123+
parameters=paramaters,
124+
parameters_meta_info=parameters_meta_info,
125+
external_version='1',
126+
tags=['abc', 'def'],
127+
language='English',
128+
dependencies='abc',
129+
class_name='Test',
130+
custom_name='Test')
131+
132+
openml.flows.functions.assert_flows_equal(flow, flow)
133+
openml.flows.functions.assert_flows_equal(flow, flow,
134+
ignore_parameter_values=True)
135+
136+
new_flow = copy.deepcopy(flow)
137+
new_flow.parameters['a'] = 7
138+
self.assertRaisesRegexp(ValueError, "values for attribute 'parameters' "
139+
"differ: 'OrderedDict\(\[\('a', "
140+
"5\), \('b', 6\)\]\)' vs "
141+
"'OrderedDict\(\[\('a', 7\), "
142+
"\('b', 6\)\]\)'",
143+
openml.flows.functions.assert_flows_equal,
144+
flow, new_flow)
145+
openml.flows.functions.assert_flows_equal(flow, new_flow,
146+
ignore_parameter_values=True)
147+
148+
del new_flow.parameters['a']
149+
self.assertRaisesRegexp(ValueError, "values for attribute 'parameters' "
150+
"differ: 'OrderedDict\(\[\('a', "
151+
"5\), \('b', 6\)\]\)' vs "
152+
"'OrderedDict\(\[\('b', 6\)\]\)'",
153+
openml.flows.functions.assert_flows_equal,
154+
flow, new_flow)
155+
self.assertRaisesRegexp(ValueError, "Flow Test: parameter set of flow "
156+
"differs from the parameters stored "
157+
"on the server.",
158+
openml.flows.functions.assert_flows_equal,
159+
flow, new_flow, ignore_parameter_values=True)

0 commit comments

Comments
 (0)