16
16
from Orange .evaluation import Results , TestOnTestData , scoring
17
17
from Orange .evaluation .scoring import ClassificationScore , RegressionScore , \
18
18
Score
19
- from Orange .base import Learner
19
+ from Orange .base import Learner , Model
20
20
from Orange .modelling import ConstantLearner
21
21
from Orange .regression import MeanLearner
22
22
from Orange .widgets .evaluate .owtestandscore import (
@@ -178,7 +178,7 @@ def test_one_class_value(self):
178
178
table = Table .from_list (
179
179
Domain (
180
180
[ContinuousVariable ("a" ), ContinuousVariable ("b" )],
181
- [DiscreteVariable ("c" , values = ("y" , ))]),
181
+ [DiscreteVariable ("c" , values = ("y" ,))]),
182
182
list (zip (
183
183
[42.48 , 16.84 , 15.23 , 23.8 ],
184
184
[1. , 2. , 3. , 4. ],
@@ -192,6 +192,7 @@ def test_one_class_value(self):
192
192
193
193
def test_data_errors (self ):
194
194
""" Test all data_errors """
195
+
195
196
def assertErrorShown (data , is_shown , message ):
196
197
self .send_signal ("Data" , data )
197
198
self .assertEqual (is_shown , self .widget .Error .train_data_error .is_shown ())
@@ -378,7 +379,7 @@ def test_scores_log_reg_overfitted(self):
378
379
self .assertTupleEqual (self ._test_scores (
379
380
table , table , LogisticRegressionLearner (),
380
381
OWTestAndScore .TestOnTest , None ),
381
- (1 , 1 , 1 , 1 , 1 ))
382
+ (1 , 1 , 1 , 1 , 1 ))
382
383
383
384
def test_scores_log_reg_bad (self ):
384
385
table_train = Table .from_list (
@@ -393,7 +394,7 @@ def test_scores_log_reg_bad(self):
393
394
self .assertTupleEqual (self ._test_scores (
394
395
table_train , table_test , LogisticRegressionLearner (),
395
396
OWTestAndScore .TestOnTest , None ),
396
- (0 , 0 , 0 , 0 , 0 ))
397
+ (0 , 0 , 0 , 0 , 0 ))
397
398
398
399
def test_scores_log_reg_bad2 (self ):
399
400
table_train = Table .from_list (
@@ -724,6 +725,42 @@ def test_copy_to_clipboard(self):
724
725
for i in (0 , 3 , 4 , 5 , 6 , 7 )]) + "\r \n "
725
726
self .assertEqual (clipboard_text , view_text )
726
727
728
+ def test_multi_target_input (self ):
729
+ class NewScorer (Score ):
730
+ class_types = (
731
+ ContinuousVariable ,
732
+ DiscreteVariable ,
733
+ )
734
+
735
+ @staticmethod
736
+ def is_compatible (domain : Domain ) -> bool :
737
+ return True
738
+
739
+ def compute_score (self , results ):
740
+ return [0.75 ]
741
+
742
+ domain = Domain ([ContinuousVariable ('var1' )],
743
+ class_vars = [
744
+ ContinuousVariable ('c1' ),
745
+ DiscreteVariable ('c2' , values = ('no' , 'yes' ))
746
+ ])
747
+ data = Table .from_list (domain , [[1 , 5 , 0 ], [2 , 10 , 1 ], [2 , 10 , 1 ]])
748
+
749
+ mock_model = Mock (spec = Model , return_value = np .asarray ([[0.2 , 0.1 , 0.2 ]]))
750
+ mock_model .name = 'Mockery'
751
+ mock_model .domain = domain
752
+ mock_learner = Mock (spec = Learner , return_value = mock_model )
753
+ mock_learner .name = 'Mockery'
754
+
755
+ self .widget .resampling = OWTestAndScore .TestOnTrain
756
+ self .send_signal (self .widget .Inputs .train_data , data )
757
+ self .send_signal (self .widget .Inputs .learner , MajorityLearner (), 0 )
758
+ self .send_signal (self .widget .Inputs .learner , mock_learner , 1 )
759
+ _ = self .get_output (self .widget .Outputs .evaluations_results , wait = 5000 )
760
+ self .assertTrue (len (self .widget .scorers ) == 1 )
761
+ self .assertTrue (NewScorer in self .widget .scorers )
762
+ self .assertTrue (len (self .widget ._successful_slots ()) == 1 )
763
+
727
764
728
765
class TestHelpers (unittest .TestCase ):
729
766
def test_results_one_vs_rest (self ):
0 commit comments