Skip to content

Commit 11089bd

Browse files
committed
extend test
1 parent f8018ce commit 11089bd

3 files changed

Lines changed: 60 additions & 16 deletions

File tree

openml/flows/functions.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ def _check_flow_for_server_id(flow):
145145
stack.append(component)
146146

147147

148-
def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
148+
def assert_flows_equal(flow1, flow2,
149+
ignore_parameter_values_on_older_children=None,
149150
ignore_parameter_values=False):
150151
"""Check equality of two flows.
151152
@@ -158,7 +159,7 @@ def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
158159
159160
flow2 : OpenMLFlow
160161
161-
ignore_parameters_on_older_children : str
162+
ignore_parameter_values_on_older_children : str
162163
If set to ``OpenMLFlow.upload_date``, ignores parameters in a child
163164
flow if it's upload date predates the upload date of the parent flow.
164165
@@ -196,29 +197,35 @@ def assert_flows_equal(flow1, flow2, ignore_parameters_on_older_children=None,
196197
raise ValueError('Component %s only available in '
197198
'argument2, but not in argument1.' % name)
198199
assert_flows_equal(attr1[name], attr2[name],
199-
ignore_parameters_on_older_children,
200+
ignore_parameter_values_on_older_children,
200201
ignore_parameter_values)
201202

202203
else:
203204
if key == 'parameters':
204-
if ignore_parameters_on_older_children:
205-
upload_date_current_flow = dateutil.parser.parse(
206-
flow1.upload_date)
207-
upload_date_parent_flow = dateutil.parser.parse(
208-
ignore_parameters_on_older_children)
209-
if upload_date_current_flow < upload_date_parent_flow:
210-
continue
211-
elif ignore_parameter_values:
205+
if ignore_parameter_values or \
206+
ignore_parameter_values_on_older_children:
212207
parameters_flow_1 = set(flow1.parameters.keys())
213208
parameters_flow_2 = set(flow2.parameters.keys())
214209
symmetric_difference = parameters_flow_1 ^ parameters_flow_2
215210
if len(symmetric_difference) > 0:
216211
raise ValueError('Flow %s: parameter set of flow '
217212
'differs from the parameters stored '
218213
'on the server.' % flow1.name)
214+
215+
if ignore_parameter_values_on_older_children:
216+
upload_date_current_flow = dateutil.parser.parse(
217+
flow1.upload_date)
218+
upload_date_parent_flow = dateutil.parser.parse(
219+
ignore_parameter_values_on_older_children)
220+
if upload_date_current_flow < upload_date_parent_flow:
221+
continue
222+
223+
if ignore_parameter_values:
224+
# Continue needs to be done here as the first if
225+
# statement triggers in both special cases
219226
continue
220227

221228
if attr1 != attr2:
222229
raise ValueError("Flow %s: values for attribute '%s' differ: "
223-
"'%s' vs '%s'." %
230+
"'%s'\nvs\n'%s'." %
224231
(str(flow1.name), str(key), str(attr1), str(attr2)))

tests/test_flows/test_flow.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ def test_publish_error(self, api_call_mock, get_flow_mock):
205205
"New flow ID is 1. Please check manually and remove " \
206206
"the flow if necessary! Error is:\n" \
207207
"'Flow sklearn.ensemble.forest.RandomForestClassifier: values for attribute 'name' differ: " \
208-
"'sklearn.ensemble.forest.RandomForestClassifier' vs 'sklearn.ensemble.forest.RandomForestClassifie'.'"
208+
"'sklearn.ensemble.forest.RandomForestClassifier'" \
209+
"\nvs\n'sklearn.ensemble.forest.RandomForestClassifie'.'"
209210

210211
self.assertEqual(context_manager.exception.args[0], fixture)
211212
self.assertEqual(api_call_mock.call_count, 2)

tests/test_flows/test_flow_functions.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def test_are_flows_equal(self):
112112
openml.flows.functions.assert_flows_equal,
113113
parent_flow, new_flow)
114114

115-
def test_are_flows_equal_ignore_parameters(self):
115+
def test_are_flows_equal_ignore_parameter_values(self):
116116
paramaters = OrderedDict((('a', 5), ('b', 6)))
117117
parameters_meta_info = OrderedDict((('a', None), ('b', None)))
118118

@@ -137,7 +137,7 @@ def test_are_flows_equal_ignore_parameters(self):
137137
new_flow.parameters['a'] = 7
138138
self.assertRaisesRegexp(ValueError, "values for attribute 'parameters' "
139139
"differ: 'OrderedDict\(\[\('a', "
140-
"5\), \('b', 6\)\]\)' vs "
140+
"5\), \('b', 6\)\]\)'\nvs\n"
141141
"'OrderedDict\(\[\('a', 7\), "
142142
"\('b', 6\)\]\)'",
143143
openml.flows.functions.assert_flows_equal,
@@ -148,7 +148,7 @@ def test_are_flows_equal_ignore_parameters(self):
148148
del new_flow.parameters['a']
149149
self.assertRaisesRegexp(ValueError, "values for attribute 'parameters' "
150150
"differ: 'OrderedDict\(\[\('a', "
151-
"5\), \('b', 6\)\]\)' vs "
151+
"5\), \('b', 6\)\]\)'\nvs\n"
152152
"'OrderedDict\(\[\('b', 6\)\]\)'",
153153
openml.flows.functions.assert_flows_equal,
154154
flow, new_flow)
@@ -157,3 +157,39 @@ def test_are_flows_equal_ignore_parameters(self):
157157
"on the server.",
158158
openml.flows.functions.assert_flows_equal,
159159
flow, new_flow, ignore_parameter_values=True)
160+
161+
def test_are_flows_equal_ignore_if_older(self):
162+
paramaters = OrderedDict((('a', 5), ('b', 6)))
163+
parameters_meta_info = OrderedDict((('a', None), ('b', None)))
164+
165+
flow = openml.flows.OpenMLFlow(name='Test',
166+
description='Test flow',
167+
model=None,
168+
components=OrderedDict(),
169+
parameters=paramaters,
170+
parameters_meta_info=parameters_meta_info,
171+
external_version='1',
172+
tags=['abc', 'def'],
173+
language='English',
174+
dependencies='abc',
175+
class_name='Test',
176+
custom_name='Test',
177+
upload_date='2017-01-31T12-01-01')
178+
179+
openml.flows.functions.assert_flows_equal(flow, flow,
180+
ignore_parameter_values_on_older_children='2017-01-31T12-01-01')
181+
openml.flows.functions.assert_flows_equal(flow, flow,
182+
ignore_parameter_values_on_older_children=None)
183+
new_flow = copy.deepcopy(flow)
184+
new_flow.parameters['a'] = 7
185+
self.assertRaises(ValueError, openml.flows.functions.assert_flows_equal,
186+
flow, new_flow, ignore_parameter_values_on_older_children='2017-01-31T12-01-01')
187+
self.assertRaises(ValueError, openml.flows.functions.assert_flows_equal,
188+
flow, new_flow, ignore_parameter_values_on_older_children=None)
189+
190+
new_flow.upload_date = '2016-01-31T12-01-01'
191+
self.assertRaises(ValueError, openml.flows.functions.assert_flows_equal,
192+
flow, new_flow,
193+
ignore_parameter_values_on_older_children='2017-01-31T12-01-01')
194+
openml.flows.functions.assert_flows_equal(flow, flow,
195+
ignore_parameter_values_on_older_children=None)

0 commit comments

Comments
 (0)