33import os
44import sys
55import unittest
6+ import unittest .mock
67
78import numpy as np
89import scipy .optimize
1920import sklearn .preprocessing
2021import sklearn .tree
2122
23+ import openml
2224from openml .flows import OpenMLFlow , sklearn_to_flow , flow_to_sklearn
23- from openml .flows .sklearn_converter import _format_external_version
25+ from openml .flows .sklearn_converter import _format_external_version , _check_dependencies
2426
2527this_directory = os .path .dirname (os .path .abspath (__file__ ))
2628sys .path .append (this_directory )
@@ -47,13 +49,15 @@ def setUp(self):
4749 self .X = iris .data
4850 self .y = iris .target
4951
50- def test_serialize_model (self ):
52+ @unittest .mock .patch ('openml.flows.sklearn_converter._check_dependencies' )
53+ def test_serialize_model (self , check_dependencies_mock ):
5154 model = sklearn .tree .DecisionTreeClassifier (criterion = 'entropy' ,
5255 max_features = 'auto' ,
5356 max_leaf_nodes = 2000 )
5457
5558 fixture_name = 'sklearn.tree.tree.DecisionTreeClassifier'
5659 fixture_description = 'Automatically created sub-component.'
60+ version_fixture = 'sklearn==%s\n numpy>=1.6.1\n scipy>=0.9' % sklearn .__version__
5761 fixture_parameters = \
5862 OrderedDict ((('class_weight' , 'null' ),
5963 ('criterion' , '"entropy"' ),
@@ -74,6 +78,7 @@ def test_serialize_model(self):
7478 self .assertEqual (serialization .class_name , fixture_name )
7579 self .assertEqual (serialization .description , fixture_description )
7680 self .assertEqual (serialization .parameters , fixture_parameters )
81+ self .assertEqual (serialization .dependencies , version_fixture )
7782
7883 new_model = flow_to_sklearn (serialization )
7984
@@ -83,6 +88,8 @@ def test_serialize_model(self):
8388 self .assertEqual (new_model .get_params (), model .get_params ())
8489 new_model .fit (self .X , self .y )
8590
91+ self .assertEqual (check_dependencies_mock .call_count , 1 )
92+
8693 def test_serialize_model_with_subcomponent (self ):
8794 model = sklearn .ensemble .AdaBoostClassifier (
8895 n_estimators = 100 , base_estimator = sklearn .tree .DecisionTreeClassifier ())
@@ -508,3 +515,8 @@ def test_subflow_version_propagated(self):
508515 self .assertEqual (flow .external_version , '%s,%s' % (
509516 _format_external_version ('sklearn' , sklearn .__version__ ),
510517 _format_external_version ('tests' , '0.1' )))
518+
519+ def test_check_dependencies (self ):
520+ dependencies = ['sklearn==0.1' , 'sklearn>=99.99.99' , 'sklearn>99.99.99' ]
521+ for dependency in dependencies :
522+ self .assertRaises (ValueError , _check_dependencies , dependency )
0 commit comments