1616from Orange .evaluation import Results , TestOnTestData , scoring
1717from Orange .evaluation .scoring import ClassificationScore , RegressionScore , \
1818 Score
19- from Orange .base import Learner
19+ from Orange .base import Learner , Model
2020from Orange .modelling import ConstantLearner
2121from Orange .regression import MeanLearner
2222from Orange .widgets .evaluate .owtestandscore import (
@@ -178,7 +178,7 @@ def test_one_class_value(self):
178178 table = Table .from_list (
179179 Domain (
180180 [ContinuousVariable ("a" ), ContinuousVariable ("b" )],
181- [DiscreteVariable ("c" , values = ("y" , ))]),
181+ [DiscreteVariable ("c" , values = ("y" ,))]),
182182 list (zip (
183183 [42.48 , 16.84 , 15.23 , 23.8 ],
184184 [1. , 2. , 3. , 4. ],
@@ -192,6 +192,7 @@ def test_one_class_value(self):
192192
193193 def test_data_errors (self ):
194194 """ Test all data_errors """
195+
195196 def assertErrorShown (data , is_shown , message ):
196197 self .send_signal ("Data" , data )
197198 self .assertEqual (is_shown , self .widget .Error .train_data_error .is_shown ())
@@ -378,7 +379,7 @@ def test_scores_log_reg_overfitted(self):
378379 self .assertTupleEqual (self ._test_scores (
379380 table , table , LogisticRegressionLearner (),
380381 OWTestAndScore .TestOnTest , None ),
381- (1 , 1 , 1 , 1 , 1 ))
382+ (1 , 1 , 1 , 1 , 1 ))
382383
383384 def test_scores_log_reg_bad (self ):
384385 table_train = Table .from_list (
@@ -393,7 +394,7 @@ def test_scores_log_reg_bad(self):
393394 self .assertTupleEqual (self ._test_scores (
394395 table_train , table_test , LogisticRegressionLearner (),
395396 OWTestAndScore .TestOnTest , None ),
396- (0 , 0 , 0 , 0 , 0 ))
397+ (0 , 0 , 0 , 0 , 0 ))
397398
398399 def test_scores_log_reg_bad2 (self ):
399400 table_train = Table .from_list (
@@ -724,6 +725,42 @@ def test_copy_to_clipboard(self):
724725 for i in (0 , 3 , 4 , 5 , 6 , 7 )]) + "\r \n "
725726 self .assertEqual (clipboard_text , view_text )
726727
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+
727764
728765class TestHelpers (unittest .TestCase ):
729766 def test_results_one_vs_rest (self ):
0 commit comments