66
77from Orange .data import Table , Domain , StringVariable , ContinuousVariable , \
88 DiscreteVariable , TimeVariable
9- from Orange .widgets .utils .state_summary import format_summary_details
9+ from Orange .widgets .utils .state_summary import format_summary_details , \
10+ format_multiple_summaries
1011
1112VarDataPair = namedtuple ('VarDataPair' , ['variable' , 'data' ])
1213
@@ -106,7 +107,8 @@ def test_details(self):
106107 n_features = len (data .domain .variables ) + len (data .domain .metas )
107108 details = f'{ len (data )} instances, ' \
108109 f'{ n_features } variables\n ' \
109- f'Features: { len (data .domain .attributes )} categorical\n ' \
110+ f'Features: { len (data .domain .attributes )} categorical ' \
111+ f'(No missing values)\n ' \
110112 f'Target: categorical\n ' \
111113 f'Metas: string'
112114 self .assertEqual (details , format_summary_details (data ))
@@ -115,7 +117,8 @@ def test_details(self):
115117 n_features = len (data .domain .variables ) + len (data .domain .metas )
116118 details = f'{ len (data )} instances, ' \
117119 f'{ n_features } variables\n ' \
118- f'Features: { len (data .domain .attributes )} numeric\n ' \
120+ f'Features: { len (data .domain .attributes )} numeric ' \
121+ f'(No missing values)\n ' \
119122 f'Target: numeric\n ' \
120123 f'Metas: —'
121124 self .assertEqual (details , format_summary_details (data ))
@@ -125,7 +128,7 @@ def test_details(self):
125128 details = f'{ len (data )} instances, ' \
126129 f'{ n_features } variables\n ' \
127130 f'Features: { len (data .domain .attributes )} ' \
128- f'(7 categorical, 6 numeric)\n ' \
131+ f'(7 categorical, 6 numeric) (0.2% missing values) \n ' \
129132 f'Target: categorical\n ' \
130133 f'Metas: —'
131134 self .assertEqual (details , format_summary_details (data ))
@@ -137,7 +140,8 @@ def test_details(self):
137140 n_features = len (data .domain .variables ) + len (data .domain .metas )
138141 details = f'{ len (data )} instances, ' \
139142 f'{ n_features } variables\n ' \
140- f'Features: { len (data .domain .attributes )} numeric\n ' \
143+ f'Features: { len (data .domain .attributes )} numeric ' \
144+ f'(10.0% missing values)\n ' \
141145 f'Target: { len (data .domain .class_vars )} categorical\n ' \
142146 f'Metas: { len (data .domain .metas )} categorical'
143147 self .assertEqual (details , format_summary_details (data ))
@@ -151,7 +155,7 @@ def test_details(self):
151155 details = f'{ len (data )} instances, ' \
152156 f'{ n_features } variables\n ' \
153157 f'Features: { len (data .domain .attributes )} ' \
154- f'(2 categorical, 1 numeric, 1 time)\n ' \
158+ f'(2 categorical, 1 numeric, 1 time) (5.0% missing values) \n ' \
155159 f'Target: { len (data .domain .class_vars )} ' \
156160 f'(1 categorical, 1 numeric)\n ' \
157161 f'Metas: { len (data .domain .metas )} string'
@@ -161,30 +165,80 @@ def test_details(self):
161165 metas = None )
162166 details = f'{ len (data )} instances, ' \
163167 f'{ len (data .domain .variables )} variables\n ' \
164- f'Features: { len (data .domain .attributes )} time\n ' \
168+ f'Features: { len (data .domain .attributes )} time ' \
169+ f'(10.0% missing values)\n ' \
165170 f'Target: categorical\n ' \
166171 f'Metas: —'
167172 self .assertEqual (details , format_summary_details (data ))
168173
169174 data = make_table ([rgb_full , ints_full ], target = None , metas = None )
170175 details = f'{ len (data )} instances, ' \
171176 f'{ len (data .domain .variables )} variables\n ' \
172- f'Features: { len (data .domain .variables )} categorical\n ' \
177+ f'Features: { len (data .domain .variables )} categorical ' \
178+ f'(No missing values)\n ' \
173179 f'Target: —\n ' \
174180 f'Metas: —'
175181 self .assertEqual (details , format_summary_details (data ))
176182
177183 data = make_table ([rgb_full ], target = None , metas = None )
178184 details = f'{ len (data )} instances, ' \
179185 f'{ len (data .domain .variables )} variable\n ' \
180- f'Features: categorical\n ' \
186+ f'Features: categorical (No missing values) \n ' \
181187 f'Target: —\n ' \
182188 f'Metas: —'
183189 self .assertEqual (details , format_summary_details (data ))
184190
185191 data = None
186192 self .assertEqual ('' , format_summary_details (data ))
187193
194+ def test_multiple_summaries (self ):
195+ data = Table ('zoo' )
196+ extra_data = Table ('zoo' )[20 :]
197+ n_features_data = len (data .domain .variables ) + len (data .domain .metas )
198+ n_features_extra_data = len (extra_data .domain .variables ) + \
199+ len (extra_data .domain .metas )
200+ details = f'Data:<br>{ len (data )} instances, ' \
201+ f'{ n_features_data } variables<br>' \
202+ f'Features: { len (data .domain .attributes )} categorical ' \
203+ f'(No missing values)<br>' \
204+ f'Target: categorical<br>' \
205+ f'Metas: string<hr>' \
206+ f'Extra Data:<br>{ len (extra_data )} instances, ' \
207+ f'{ n_features_extra_data } variables<br>' \
208+ f'Features: { len (extra_data .domain .attributes )} ' \
209+ f'categorical (No missing values)<br>' \
210+ f'Target: categorical<br>' \
211+ f'Metas: string'
212+ inputs = [('Data' , data ), ('Extra Data' , extra_data )]
213+ self .assertEqual (details , format_multiple_summaries (inputs ))
214+
215+ details = f'{ len (data )} instances, ' \
216+ f'{ n_features_data } variables<br>' \
217+ f'Features: { len (data .domain .attributes )} categorical ' \
218+ f'(No missing values)<br>' \
219+ f'Target: categorical<br>' \
220+ f'Metas: string<hr>' \
221+ f'{ len (extra_data )} instances, ' \
222+ f'{ n_features_extra_data } variables<br>' \
223+ f'Features: { len (extra_data .domain .attributes )} ' \
224+ f'categorical (No missing values)<br>' \
225+ f'Target: categorical<br>' \
226+ f'Metas: string'
227+ inputs = [('' , data ), ('' , extra_data )]
228+ self .assertEqual (details , format_multiple_summaries (inputs ))
229+
230+ details = f'No data on output.<hr>' \
231+ f'Extra data:<br>{ len (extra_data )} instances, ' \
232+ f'{ n_features_extra_data } variables<br>' \
233+ f'Features: { len (extra_data .domain .attributes )} ' \
234+ f'categorical (No missing values)<br>' \
235+ f'Target: categorical<br>' \
236+ f'Metas: string<hr>' \
237+ f'No data on output.'
238+ outputs = [('' , None ), ('Extra data' , extra_data ), ('' , None )]
239+ self .assertEqual (details ,
240+ format_multiple_summaries (outputs , type_io = 'output' ))
241+
188242
189243if __name__ == "__main__" :
190244 unittest .main ()
0 commit comments