1+ from collections import OrderedDict
2+ import copy
13import unittest
24
35import openml
@@ -39,4 +41,68 @@ def test_list_flows_paginate(self):
3941 flows = openml .flows .list_flows (offset = i , size = size )
4042 self .assertGreaterEqual (size , len (flows ))
4143 for did in flows :
42- self ._check_flow (flows [did ])
44+ self ._check_flow (flows [did ])
45+
46+ def test_are_flows_equal (self ):
47+ flow = openml .flows .OpenMLFlow (name = 'Test' ,
48+ description = 'Test flow' ,
49+ model = None ,
50+ components = OrderedDict (),
51+ parameters = OrderedDict (),
52+ parameters_meta_info = OrderedDict (),
53+ external_version = '1' ,
54+ tags = ['abc' , 'def' ],
55+ language = 'English' ,
56+ dependencies = 'abc' ,
57+ class_name = 'Test' ,
58+ custom_name = 'Test' )
59+
60+ # Test most important values that can be set by a user
61+ self .assertTrue (openml .flows .functions .are_flows_equal (flow , flow ))
62+ for attribute , new_value in [('name' , 'Tes' ),
63+ ('description' , 'Test flo' ),
64+ ('external_version' , '2' ),
65+ ('tags' , ['abc' , 'de' ]),
66+ ('language' , 'english' ),
67+ ('dependencies' , 'ab' ),
68+ ('class_name' , 'Tes' ),
69+ ('custom_name' , 'Tes' )]:
70+ new_flow = copy .deepcopy (flow )
71+ setattr (new_flow , attribute , new_value )
72+ self .assertNotEqual (getattr (flow , attribute ), getattr (new_flow , attribute ))
73+ self .assertFalse (openml .flows .functions .are_flows_equal (flow , new_flow ),
74+ msg = attribute )
75+
76+ # Test that the API ignores several keys when comparing flows
77+ self .assertTrue (openml .flows .functions .are_flows_equal (flow , flow ))
78+ for attribute , new_value in [('flow_id' , 1 ),
79+ ('uploader' , 1 ),
80+ ('version' , 1 ),
81+ ('upload_date' , '18.12.1988' ),
82+ ('binary_url' , 'openml.org' ),
83+ ('binary_format' , 'gzip' ),
84+ ('binary_md5' , '12345' ),
85+ ('model' , [])]:
86+ new_flow = copy .deepcopy (flow )
87+ setattr (new_flow , attribute , new_value )
88+ self .assertNotEqual (getattr (flow , attribute ), getattr (new_flow , attribute ))
89+ self .assertTrue (openml .flows .functions .are_flows_equal (flow , new_flow ),
90+ msg = attribute )
91+
92+ # Now test for parameters
93+ flow .parameters ['abc' ] = 1.0
94+ flow .parameters ['def' ] = 2.0
95+ self .assertTrue (openml .flows .functions .are_flows_equal (flow , flow ))
96+ new_flow = copy .deepcopy (flow )
97+ new_flow .parameters ['abc' ] = 2.0
98+ self .assertFalse (openml .flows .functions .are_flows_equal (flow , new_flow ))
99+
100+ # Now test for components (subflows)
101+ parent_flow = copy .deepcopy (flow )
102+ subflow = copy .deepcopy (flow )
103+ parent_flow .components ['subflow' ] = subflow
104+ self .assertTrue (openml .flows .functions .are_flows_equal (parent_flow , parent_flow ))
105+ self .assertFalse (openml .flows .functions .are_flows_equal (parent_flow , subflow ))
106+ new_flow = copy .deepcopy (parent_flow )
107+ new_flow .components ['subflow' ].name = 'Subflow name'
108+ self .assertFalse (openml .flows .functions .are_flows_equal (parent_flow , new_flow ))
0 commit comments