source: sasview/test/sasguiframe/test/utest_manipulations.py @ fd5d6eac

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since fd5d6eac was fd5d6eac, checked in by Ricardo Ferraz Leal <ricleal@…>, 7 years ago

better code. Remove warnings

  • Property mode set to 100644
File size: 12.3 KB
Line 
1"""
2    Unit tests for data manipulations
3"""
4# TODO: what happens if you add a Data1D to a Data2D?
5
6import math
7import os.path
8import unittest
9
10import numpy as np
11
12from sas.sascalc.dataloader.loader import Loader
13from sas.sasgui.guiframe.dataFitting import Data1D as Theory1D
14from sas.sasgui.guiframe.dataFitting import Data2D
15
16
17class data_info_tests(unittest.TestCase):
18
19    def setUp(self):
20        data = Loader().load("cansas1d.xml")
21        self.data = data[0]
22
23    def test_clone1D(self):
24        """
25            Test basic cloning
26        """
27        clone = self.data.clone_without_data()
28
29        for i in range(len(self.data.detector)):
30            self.assertEqual(
31                self.data.detector[i].distance, clone.detector[i].distance)
32
33
34class theory1d_tests(unittest.TestCase):
35
36    def setUp(self):
37        data = Loader().load("cansas1d.xml")
38        self.data = data[0]
39
40    def test_clone_theory1D(self):
41        """
42            Test basic cloning
43        """
44        theory = Theory1D(x=[], y=[], dy=None)
45        theory.clone_without_data(clone=self.data)
46        theory.copy_from_datainfo(data1d=self.data)
47        for i in range(len(self.data.detector)):
48            self.assertEqual(
49                self.data.detector[i].distance, theory.detector[i].distance)
50
51        for i in range(len(self.data.x)):
52            self.assertEqual(self.data.x[i], theory.x[i])
53            self.assertEqual(self.data.y[i], theory.y[i])
54            self.assertEqual(self.data.dy[i], theory.dy[i])
55
56
57class manip_tests(unittest.TestCase):
58
59    def setUp(self):
60        # Create two data sets to play with
61        x_0 = np.ones(5)
62        for i in range(5):
63            x_0[i] = x_0[i] * (i + 1.0)
64
65        y_0 = 2.0 * np.ones(5)
66        dy_0 = 0.5 * np.ones(5)
67        self.data = Data1D(x_0, y_0, dy=dy_0)
68
69        x = self.data.x
70        y = np.ones(5)
71        dy = np.ones(5)
72        self.data2 = Data1D(x, y, dy=dy)
73
74    def test_load(self):
75        """
76            Test whether the test file was loaded properly
77        """
78        # There should be 5 entries in the file
79        self.assertEqual(len(self.data.x), 5)
80
81        for i in range(5):
82            # The x values should be from 1 to 5
83            self.assertEqual(self.data.x[i], float(i + 1))
84
85            # All y-error values should be 0.5
86            self.assertEqual(self.data.dy[i], 0.5)
87
88            # All y values should be 2.0
89            self.assertEqual(self.data.y[i], 2.0)
90
91    def test_add(self):
92        result = self.data2 + self.data
93        for i in range(5):
94            self.assertEqual(result.y[i], 3.0)
95            self.assertEqual(result.dy[i], math.sqrt(0.5**2 + 1.0))
96
97    def test_sub(self):
98        result = self.data2 - self.data
99        for i in range(5):
100            self.assertEqual(result.y[i], -1.0)
101            self.assertEqual(result.dy[i], math.sqrt(0.5**2 + 1.0))
102
103    def test_mul(self):
104        result = self.data2 * self.data
105        for i in range(5):
106            self.assertEqual(result.y[i], 2.0)
107            self.assertEqual(result.dy[i], math.sqrt(
108                (0.5 * 1.0)**2 + (1.0 * 2.0)**2))
109
110    def test_div(self):
111        result = self.data2 / self.data
112        for i in range(5):
113            self.assertEqual(result.y[i], 0.5)
114            self.assertEqual(result.dy[i], math.sqrt(
115                (1.0 / 2.0)**2 + (0.5 * 1.0 / 4.0)**2))
116
117    def test_radd(self):
118        result = self.data + 3.0
119        for i in range(5):
120            self.assertEqual(result.y[i], 5.0)
121            self.assertEqual(result.dy[i], 0.5)
122
123        result = 3.0 + self.data
124        for i in range(5):
125            self.assertEqual(result.y[i], 5.0)
126            self.assertEqual(result.dy[i], 0.5)
127
128    def test_rsub(self):
129        result = self.data - 3.0
130        for i in range(5):
131            self.assertEqual(result.y[i], -1.0)
132            self.assertEqual(result.dy[i], 0.5)
133
134        result = 3.0 - self.data
135        for i in range(5):
136            self.assertEqual(result.y[i], 1.0)
137            self.assertEqual(result.dy[i], 0.5)
138
139    def test_rmul(self):
140        result = self.data * 3.0
141        for i in range(5):
142            self.assertEqual(result.y[i], 6.0)
143            self.assertEqual(result.dy[i], 1.5)
144
145        result = 3.0 * self.data
146        for i in range(5):
147            self.assertEqual(result.y[i], 6.0)
148            self.assertEqual(result.dy[i], 1.5)
149
150    def test_rdiv(self):
151        result = self.data / 4.0
152        for i in range(5):
153            self.assertEqual(result.y[i], 0.5)
154            self.assertEqual(result.dy[i], 0.125)
155
156        result = 6.0 / self.data
157        for i in range(5):
158            self.assertEqual(result.y[i], 3.0)
159            self.assertEqual(result.dy[i], 6.0 * 0.5 / 4.0)
160
161
162class manip_2D(unittest.TestCase):
163
164    def setUp(self):
165        # Create two data sets to play with
166        x_0 = 2.0 * np.ones(25)
167        dx_0 = 0.5 * np.ones(25)
168        qx_0 = np.arange(25)
169        qy_0 = np.arange(25)
170        mask_0 = np.zeros(25)
171        dqx_0 = np.arange(25) / 100
172        dqy_0 = np.arange(25) / 100
173        q_0 = np.sqrt(qx_0 * qx_0 + qy_0 * qy_0)
174        self.data = Data2D(image=x_0, err_image=dx_0, qx_data=qx_0,
175                           qy_data=qy_0, q_data=q_0, mask=mask_0,
176                           dqx_data=dqx_0, dqy_data=dqy_0)
177
178        y = np.ones(25)
179        dy = np.ones(25)
180        qx = np.arange(25)
181        qy = np.arange(25)
182        mask = np.zeros(25)
183        q = np.sqrt(qx * qx + qy * qy)
184        self.data2 = Data2D(image=y, err_image=dy, qx_data=qx, qy_data=qy,
185                            q_data=q, mask=mask)
186
187    def test_load(self):
188        """
189            Test whether the test file was loaded properly
190        """
191        # There should be 5 entries in the file
192        self.assertEqual(np.size(self.data.data), 25)
193
194        for i in range(25):
195            # All y-error values should be 0.5
196            self.assertEqual(self.data.err_data[i], 0.5)
197
198            # All y values should be 2.0
199            self.assertEqual(self.data.data[i], 2.0)
200
201    def test_add(self):
202        result = self.data2 + self.data
203        for i in range(25):
204            self.assertEqual(result.data[i], 3.0)
205            self.assertEqual(result.err_data[i], math.sqrt(0.5**2 + 1.0))
206
207    def test_sub(self):
208        result = self.data2 - self.data
209        for i in range(25):
210            self.assertEqual(result.data[i], -1.0)
211            self.assertEqual(result.err_data[i], math.sqrt(0.5**2 + 1.0))
212
213    def test_mul(self):
214        result = self.data2 * self.data
215        for i in range(25):
216            self.assertEqual(result.data[i], 2.0)
217            self.assertEqual(result.err_data[i], math.sqrt(
218                (0.5 * 1.0)**2 + (1.0 * 2.0)**2))
219
220    def test_div(self):
221        result = self.data2 / self.data
222        for i in range(25):
223            self.assertEqual(result.data[i], 0.5)
224            self.assertEqual(result.err_data[i], math.sqrt(
225                (1.0 / 2.0)**2 + (0.5 * 1.0 / 4.0)**2))
226
227    def test_radd(self):
228        result = self.data + 3.0
229        for i in range(25):
230            self.assertEqual(result.data[i], 5.0)
231            self.assertEqual(result.err_data[i], 0.5)
232
233        result = 3.0 + self.data
234        for i in range(25):
235            self.assertEqual(result.data[i], 5.0)
236            self.assertEqual(result.err_data[i], 0.5)
237
238    def test_rsub(self):
239        result = self.data - 3.0
240        for i in range(25):
241            self.assertEqual(result.data[i], -1.0)
242            self.assertEqual(result.err_data[i], 0.5)
243
244        result = 3.0 - self.data
245        for i in range(25):
246            self.assertEqual(result.data[i], 1.0)
247            self.assertEqual(result.err_data[i], 0.5)
248
249    def test_rmul(self):
250        result = self.data * 3.0
251        for i in range(25):
252            self.assertEqual(result.data[i], 6.0)
253            self.assertEqual(result.err_data[i], 1.5)
254
255        result = 3.0 * self.data
256        for i in range(25):
257            self.assertEqual(result.data[i], 6.0)
258            self.assertEqual(result.err_data[i], 1.5)
259
260    def test_rdiv(self):
261        result = self.data / 4.0
262        for i in range(25):
263            self.assertEqual(result.data[i], 0.5)
264            self.assertEqual(result.err_data[i], 0.125)
265
266        result = 6.0 / self.data
267        for i in range(25):
268            self.assertEqual(result.data[i], 3.0)
269            self.assertEqual(result.err_data[i], 6.0 * 0.5 / 4.0)
270
271
272class extra_manip_2D(unittest.TestCase):
273
274    def setUp(self):
275        # Create two data sets to play with
276        x_0 = 2.0 * np.ones(25)
277        dx_0 = 0.5 * np.ones(25)
278        qx_0 = np.arange(25)
279        qy_0 = np.arange(25)
280        mask_0 = np.zeros(25)
281        dqx_0 = np.arange(25) / 100
282        dqy_0 = np.arange(25) / 100
283        q_0 = np.sqrt(qx_0 * qx_0 + qy_0 * qy_0)
284        self.data = Data2D(image=x_0, err_image=dx_0, qx_data=qx_0,
285                           qy_data=qy_0, q_data=q_0, mask=mask_0,
286                           dqx_data=dqx_0, dqy_data=dqy_0)
287
288        y = np.ones(25)
289        dy = np.ones(25)
290        qx = np.arange(25)
291        qy = np.arange(25)
292        mask = np.zeros(25)
293        q = np.sqrt(qx * qx + qy * qy)
294        self.data2 = Data2D(image=y, err_image=dy, qx_data=qx, qy_data=qy,
295                            q_data=q, mask=mask)
296
297    def test_load(self):
298        """
299            Test whether the test file was loaded properly
300        """
301        # There should be 5 entries in the file
302        self.assertEqual(np.size(self.data.data), 25)
303
304        for i in range(25):
305            # All y-error values should be 0.5
306            self.assertEqual(self.data.err_data[i], 0.5)
307
308            # All y values should be 2.0
309            self.assertEqual(self.data.data[i], 2.0)
310
311    def test_add(self):
312        result = self.data2 + self.data
313        for i in range(25):
314            self.assertEqual(result.data[i], 3.0)
315            self.assertEqual(result.err_data[i], math.sqrt(0.5**2 + 1.0))
316
317    def test_sub(self):
318        result = self.data2 - self.data
319        for i in range(25):
320            self.assertEqual(result.data[i], -1.0)
321            self.assertEqual(result.err_data[i], math.sqrt(0.5**2 + 1.0))
322
323    def test_mul(self):
324        result = self.data2 * self.data
325        for i in range(25):
326            self.assertEqual(result.data[i], 2.0)
327            self.assertEqual(result.err_data[i], math.sqrt(
328                (0.5 * 1.0)**2 + (1.0 * 2.0)**2))
329
330    def test_div(self):
331        result = self.data2 / self.data
332        for i in range(25):
333            self.assertEqual(result.data[i], 0.5)
334            self.assertEqual(result.err_data[i], math.sqrt(
335                (1.0 / 2.0)**2 + (0.5 * 1.0 / 4.0)**2))
336
337    def test_radd(self):
338        result = self.data + 3.0
339        for i in range(25):
340            self.assertEqual(result.data[i], 5.0)
341            self.assertEqual(result.err_data[i], 0.5)
342
343        result = 3.0 + self.data
344        for i in range(25):
345            self.assertEqual(result.data[i], 5.0)
346            self.assertEqual(result.err_data[i], 0.5)
347
348    def test_rsub(self):
349        result = self.data - 3.0
350        for i in range(25):
351            self.assertEqual(result.data[i], -1.0)
352            self.assertEqual(result.err_data[i], 0.5)
353
354        result = 3.0 - self.data
355        for i in range(25):
356            self.assertEqual(result.data[i], 1.0)
357            self.assertEqual(result.err_data[i], 0.5)
358
359    def test_rmul(self):
360        result = self.data * 3.0
361        for i in range(25):
362            self.assertEqual(result.data[i], 6.0)
363            self.assertEqual(result.err_data[i], 1.5)
364
365        result = 3.0 * self.data
366        for i in range(25):
367            self.assertEqual(result.data[i], 6.0)
368            self.assertEqual(result.err_data[i], 1.5)
369
370    def test_rdiv(self):
371        result = self.data / 4.0
372        for i in range(25):
373            self.assertEqual(result.data[i], 0.5)
374            self.assertEqual(result.err_data[i], 0.125)
375
376        result = 6.0 / self.data
377        for i in range(25):
378            self.assertEqual(result.data[i], 3.0)
379            self.assertEqual(result.err_data[i], 6.0 * 0.5 / 4.0)
380
381
382if __name__ == '__main__':
383    unittest.main()
Note: See TracBrowser for help on using the repository browser.