1+ from unittest .mock import patch
2+
13import random
24import unittest
35
46import numpy as np
57
6- from Orange .data import Table , Domain , StringVariable , DiscreteVariable
8+ from Orange .data import Table , Domain , StringVariable , DiscreteVariable , \
9+ ContinuousVariable
710from Orange .data .filter import SameValue
811from Orange .widgets .utils .annotated_data import (
9- create_annotated_table , create_groups_table , ANNOTATED_DATA_FEATURE_NAME
12+ create_annotated_table , create_groups_table , ANNOTATED_DATA_FEATURE_NAME ,
13+ lazy_annotated_table , lazy_groups_table , domain_with_annotation_column
1014)
1115
1216
@@ -15,6 +19,42 @@ def setUp(self):
1519 random .seed (42 )
1620 self .zoo = Table ("zoo" )
1721
22+ def test_domain_with_annotation_column (self ):
23+ a , b , c = (ContinuousVariable (x ) for x in "abc" )
24+
25+ x = [[1 , 2 , 3 ], [4 , 5 , 6 ]]
26+
27+ for data in (dabc := Domain ([a , b , c ]), Table .from_list (dabc , x )):
28+ dom , var = domain_with_annotation_column (data )
29+ self .assertEqual (dom .attributes , (a , b , c ))
30+ self .assertIs (dom .class_var , var )
31+ self .assertEqual (var .name , ANNOTATED_DATA_FEATURE_NAME )
32+ self .assertEqual (var .values , ("No" , "Yes" ))
33+
34+ dom , var = domain_with_annotation_column (
35+ data , values = tuple ("xyz" ), var_name = "d" )
36+ self .assertEqual (dom .attributes , (a , b , c ))
37+ self .assertIs (dom .class_var , var )
38+ self .assertEqual (var .name , "d" )
39+ self .assertEqual (var .values , tuple ("xyz" ))
40+
41+ for data in (dabc := Domain ([a , b ], c ), Table .from_list (dabc , x )):
42+ dom , var = domain_with_annotation_column (
43+ data , values = tuple ("xyz" ), var_name = "d" )
44+ self .assertEqual (dom .attributes , (a , b ))
45+ self .assertIs (dom .class_var , c )
46+ self .assertEqual (dom .metas , (var , ))
47+ self .assertEqual (var .name , "d" )
48+ self .assertEqual (var .values , tuple ("xyz" ))
49+
50+ dom , var = domain_with_annotation_column (
51+ data , values = tuple ("xyz" ), var_name = "c" )
52+ self .assertEqual (dom .attributes , (a , b ))
53+ self .assertIs (dom .class_var , c )
54+ self .assertEqual (dom .metas , (var , ))
55+ self .assertEqual (var .name , "c (1)" )
56+ self .assertEqual (var .values , tuple ("xyz" ))
57+
1858 def test_create_annotated_table (self ):
1959 annotated = create_annotated_table (self .zoo , list (range (10 )))
2060
@@ -129,3 +169,52 @@ def test_create_groups_table_set_values(self):
129169 values = ("this" , "that" , "rest" )
130170 table = create_groups_table (self .zoo , selection , values = values )
131171 self .assertEqual (tuple (table .domain ["Selected" ].values ), values )
172+
173+ @patch ("Orange.widgets.utils.annotated_data.create_annotated_table" )
174+ def test_lazy_annotated_table (self , creator ):
175+ selected_indices = np .array ([1 , 2 , 3 ])
176+ lazy_table = lazy_annotated_table (self .zoo , selected_indices )
177+ self .assertEqual (lazy_table .length , len (self .zoo ))
178+ self .assertEqual (lazy_table .domain .attributes , self .zoo .domain .attributes )
179+ self .assertEqual (lazy_table .domain .class_var , self .zoo .domain .class_var )
180+ self .assertEqual (len (lazy_table .domain .metas ), 2 )
181+ var = lazy_table .domain .metas [1 ]
182+ self .assertIsInstance (var , DiscreteVariable )
183+ self .assertEqual (var .name , ANNOTATED_DATA_FEATURE_NAME )
184+ creator .assert_not_called ()
185+ self .assertIs (lazy_table .get_value (), creator .return_value )
186+
187+ @patch ("Orange.widgets.utils.annotated_data.create_groups_table" )
188+ def test_lazy_groups_table (self , creator ):
189+ group_indices = np .zeros (len (self .zoo ), dtype = int )
190+ group_indices [10 :15 ] = 1
191+
192+ lazy_table = lazy_groups_table (self .zoo , group_indices )
193+ self .assertEqual (lazy_table .length , len (self .zoo ))
194+ self .assertEqual (lazy_table .domain .attributes , self .zoo .domain .attributes )
195+ self .assertEqual (lazy_table .domain .class_var , self .zoo .domain .class_var )
196+ self .assertEqual (len (lazy_table .domain .metas ), 2 )
197+ var = lazy_table .domain .metas [1 ]
198+ self .assertIsInstance (var , DiscreteVariable )
199+ self .assertEqual (var .name , ANNOTATED_DATA_FEATURE_NAME )
200+ creator .assert_not_called ()
201+ self .assertIs (lazy_table .get_value (), creator .return_value )
202+ creator .reset_mock ()
203+
204+ lazy_table = lazy_groups_table (
205+ self .zoo , group_indices , include_unselected = False , var_name = "foo" ,
206+ values = ("bar" , "baz" ))
207+ self .assertEqual (lazy_table .length , 5 )
208+ self .assertEqual (lazy_table .domain .attributes , self .zoo .domain .attributes )
209+ self .assertEqual (lazy_table .domain .class_var , self .zoo .domain .class_var )
210+ self .assertEqual (len (lazy_table .domain .metas ), 2 )
211+ var = lazy_table .domain .metas [1 ]
212+ self .assertIsInstance (var , DiscreteVariable )
213+ self .assertEqual (var .name , "foo" )
214+ self .assertEqual (var .values , ("bar" , "baz" ))
215+ creator .assert_not_called ()
216+ self .assertIs (lazy_table .get_value (), creator .return_value )
217+
218+
219+ if __name__ == "__main__" :
220+ unittest .main ()
0 commit comments