Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/ma/timer_comparison.py @ 87:2a2c65a20a8b
Add Python libs and headers
author | Chris Cannam |
---|---|
date | Wed, 25 Feb 2015 14:05:22 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
86:413a9d26189e | 87:2a2c65a20a8b |
---|---|
1 from __future__ import division, absolute_import, print_function | |
2 | |
3 import timeit | |
4 from functools import reduce | |
5 | |
6 import numpy as np | |
7 from numpy import float_ | |
8 import np.core.fromnumeric as fromnumeric | |
9 | |
10 from np.testing.utils import build_err_msg | |
11 | |
12 # Fixme: this does not look right. | |
13 np.seterr(all='ignore') | |
14 | |
15 pi = np.pi | |
16 | |
17 | |
18 class moduletester(object): | |
19 def __init__(self, module): | |
20 self.module = module | |
21 self.allequal = module.allequal | |
22 self.arange = module.arange | |
23 self.array = module.array | |
24 # self.average = module.average | |
25 self.concatenate = module.concatenate | |
26 self.count = module.count | |
27 self.equal = module.equal | |
28 self.filled = module.filled | |
29 self.getmask = module.getmask | |
30 self.getmaskarray = module.getmaskarray | |
31 self.id = id | |
32 self.inner = module.inner | |
33 self.make_mask = module.make_mask | |
34 self.masked = module.masked | |
35 self.masked_array = module.masked_array | |
36 self.masked_values = module.masked_values | |
37 self.mask_or = module.mask_or | |
38 self.nomask = module.nomask | |
39 self.ones = module.ones | |
40 self.outer = module.outer | |
41 self.repeat = module.repeat | |
42 self.resize = module.resize | |
43 self.sort = module.sort | |
44 self.take = module.take | |
45 self.transpose = module.transpose | |
46 self.zeros = module.zeros | |
47 self.MaskType = module.MaskType | |
48 try: | |
49 self.umath = module.umath | |
50 except AttributeError: | |
51 self.umath = module.core.umath | |
52 self.testnames = [] | |
53 | |
54 def assert_array_compare(self, comparison, x, y, err_msg='', header='', | |
55 fill_value=True): | |
56 """Asserts that a comparison relation between two masked arrays is satisfied | |
57 elementwise.""" | |
58 xf = self.filled(x) | |
59 yf = self.filled(y) | |
60 m = self.mask_or(self.getmask(x), self.getmask(y)) | |
61 | |
62 x = self.filled(self.masked_array(xf, mask=m), fill_value) | |
63 y = self.filled(self.masked_array(yf, mask=m), fill_value) | |
64 if (x.dtype.char != "O"): | |
65 x = x.astype(float_) | |
66 if isinstance(x, np.ndarray) and x.size > 1: | |
67 x[np.isnan(x)] = 0 | |
68 elif np.isnan(x): | |
69 x = 0 | |
70 if (y.dtype.char != "O"): | |
71 y = y.astype(float_) | |
72 if isinstance(y, np.ndarray) and y.size > 1: | |
73 y[np.isnan(y)] = 0 | |
74 elif np.isnan(y): | |
75 y = 0 | |
76 try: | |
77 cond = (x.shape==() or y.shape==()) or x.shape == y.shape | |
78 if not cond: | |
79 msg = build_err_msg([x, y], | |
80 err_msg | |
81 + '\n(shapes %s, %s mismatch)' % (x.shape, | |
82 y.shape), | |
83 header=header, | |
84 names=('x', 'y')) | |
85 assert cond, msg | |
86 val = comparison(x, y) | |
87 if m is not self.nomask and fill_value: | |
88 val = self.masked_array(val, mask=m) | |
89 if isinstance(val, bool): | |
90 cond = val | |
91 reduced = [0] | |
92 else: | |
93 reduced = val.ravel() | |
94 cond = reduced.all() | |
95 reduced = reduced.tolist() | |
96 if not cond: | |
97 match = 100-100.0*reduced.count(1)/len(reduced) | |
98 msg = build_err_msg([x, y], | |
99 err_msg | |
100 + '\n(mismatch %s%%)' % (match,), | |
101 header=header, | |
102 names=('x', 'y')) | |
103 assert cond, msg | |
104 except ValueError: | |
105 msg = build_err_msg([x, y], err_msg, header=header, names=('x', 'y')) | |
106 raise ValueError(msg) | |
107 | |
108 def assert_array_equal(self, x, y, err_msg=''): | |
109 """Checks the elementwise equality of two masked arrays.""" | |
110 self.assert_array_compare(self.equal, x, y, err_msg=err_msg, | |
111 header='Arrays are not equal') | |
112 | |
113 def test_0(self): | |
114 "Tests creation" | |
115 x = np.array([1., 1., 1., -2., pi/2.0, 4., 5., -10., 10., 1., 2., 3.]) | |
116 m = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0] | |
117 xm = self.masked_array(x, mask=m) | |
118 xm[0] | |
119 | |
120 def test_1(self): | |
121 "Tests creation" | |
122 x = np.array([1., 1., 1., -2., pi/2.0, 4., 5., -10., 10., 1., 2., 3.]) | |
123 y = np.array([5., 0., 3., 2., -1., -4., 0., -10., 10., 1., 0., 3.]) | |
124 a10 = 10. | |
125 m1 = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0] | |
126 m2 = [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1] | |
127 xm = self.masked_array(x, mask=m1) | |
128 ym = self.masked_array(y, mask=m2) | |
129 z = np.array([-.5, 0., .5, .8]) | |
130 zm = self.masked_array(z, mask=[0, 1, 0, 0]) | |
131 xf = np.where(m1, 1.e+20, x) | |
132 xm.set_fill_value(1.e+20) | |
133 | |
134 assert((xm-ym).filled(0).any()) | |
135 #fail_if_equal(xm.mask.astype(int_), ym.mask.astype(int_)) | |
136 s = x.shape | |
137 assert(xm.size == reduce(lambda x, y:x*y, s)) | |
138 assert(self.count(xm) == len(m1) - reduce(lambda x, y:x+y, m1)) | |
139 | |
140 for s in [(4, 3), (6, 2)]: | |
141 x.shape = s | |
142 y.shape = s | |
143 xm.shape = s | |
144 ym.shape = s | |
145 xf.shape = s | |
146 | |
147 assert(self.count(xm) == len(m1) - reduce(lambda x, y:x+y, m1)) | |
148 | |
149 def test_2(self): | |
150 "Tests conversions and indexing" | |
151 x1 = np.array([1, 2, 4, 3]) | |
152 x2 = self.array(x1, mask=[1, 0, 0, 0]) | |
153 x3 = self.array(x1, mask=[0, 1, 0, 1]) | |
154 x4 = self.array(x1) | |
155 # test conversion to strings | |
156 junk, garbage = str(x2), repr(x2) | |
157 # assert_equal(np.sort(x1), self.sort(x2, fill_value=0)) | |
158 # tests of indexing | |
159 assert type(x2[1]) is type(x1[1]) | |
160 assert x1[1] == x2[1] | |
161 # assert self.allequal(x1[2],x2[2]) | |
162 # assert self.allequal(x1[2:5],x2[2:5]) | |
163 # assert self.allequal(x1[:],x2[:]) | |
164 # assert self.allequal(x1[1:], x3[1:]) | |
165 x1[2] = 9 | |
166 x2[2] = 9 | |
167 self.assert_array_equal(x1, x2) | |
168 x1[1:3] = 99 | |
169 x2[1:3] = 99 | |
170 # assert self.allequal(x1,x2) | |
171 x2[1] = self.masked | |
172 # assert self.allequal(x1,x2) | |
173 x2[1:3] = self.masked | |
174 # assert self.allequal(x1,x2) | |
175 x2[:] = x1 | |
176 x2[1] = self.masked | |
177 # assert self.allequal(self.getmask(x2),self.array([0,1,0,0])) | |
178 x3[:] = self.masked_array([1, 2, 3, 4], [0, 1, 1, 0]) | |
179 # assert self.allequal(self.getmask(x3), self.array([0,1,1,0])) | |
180 x4[:] = self.masked_array([1, 2, 3, 4], [0, 1, 1, 0]) | |
181 # assert self.allequal(self.getmask(x4), self.array([0,1,1,0])) | |
182 # assert self.allequal(x4, self.array([1,2,3,4])) | |
183 x1 = np.arange(5)*1.0 | |
184 x2 = self.masked_values(x1, 3.0) | |
185 # assert self.allequal(x1,x2) | |
186 # assert self.allequal(self.array([0,0,0,1,0], self.MaskType), x2.mask) | |
187 x1 = self.array([1, 'hello', 2, 3], object) | |
188 x2 = np.array([1, 'hello', 2, 3], object) | |
189 s1 = x1[1] | |
190 s2 = x2[1] | |
191 assert x1[1:1].shape == (0,) | |
192 # Tests copy-size | |
193 n = [0, 0, 1, 0, 0] | |
194 m = self.make_mask(n) | |
195 m2 = self.make_mask(m) | |
196 assert(m is m2) | |
197 m3 = self.make_mask(m, copy=1) | |
198 assert(m is not m3) | |
199 | |
200 | |
201 def test_3(self): | |
202 "Tests resize/repeat" | |
203 x4 = self.arange(4) | |
204 x4[2] = self.masked | |
205 y4 = self.resize(x4, (8,)) | |
206 assert self.allequal(self.concatenate([x4, x4]), y4) | |
207 assert self.allequal(self.getmask(y4), [0, 0, 1, 0, 0, 0, 1, 0]) | |
208 y5 = self.repeat(x4, (2, 2, 2, 2), axis=0) | |
209 self.assert_array_equal(y5, [0, 0, 1, 1, 2, 2, 3, 3]) | |
210 y6 = self.repeat(x4, 2, axis=0) | |
211 assert self.allequal(y5, y6) | |
212 y7 = x4.repeat((2, 2, 2, 2), axis=0) | |
213 assert self.allequal(y5, y7) | |
214 y8 = x4.repeat(2, 0) | |
215 assert self.allequal(y5, y8) | |
216 | |
217 #---------------------------------- | |
218 def test_4(self): | |
219 "Test of take, transpose, inner, outer products" | |
220 x = self.arange(24) | |
221 y = np.arange(24) | |
222 x[5:6] = self.masked | |
223 x = x.reshape(2, 3, 4) | |
224 y = y.reshape(2, 3, 4) | |
225 assert self.allequal(np.transpose(y, (2, 0, 1)), self.transpose(x, (2, 0, 1))) | |
226 assert self.allequal(np.take(y, (2, 0, 1), 1), self.take(x, (2, 0, 1), 1)) | |
227 assert self.allequal(np.inner(self.filled(x, 0), self.filled(y, 0)), | |
228 self.inner(x, y)) | |
229 assert self.allequal(np.outer(self.filled(x, 0), self.filled(y, 0)), | |
230 self.outer(x, y)) | |
231 y = self.array(['abc', 1, 'def', 2, 3], object) | |
232 y[2] = self.masked | |
233 t = self.take(y, [0, 3, 4]) | |
234 assert t[0] == 'abc' | |
235 assert t[1] == 2 | |
236 assert t[2] == 3 | |
237 #---------------------------------- | |
238 def test_5(self): | |
239 "Tests inplace w/ scalar" | |
240 | |
241 x = self.arange(10) | |
242 y = self.arange(10) | |
243 xm = self.arange(10) | |
244 xm[2] = self.masked | |
245 x += 1 | |
246 assert self.allequal(x, y+1) | |
247 xm += 1 | |
248 assert self.allequal(xm, y+1) | |
249 | |
250 x = self.arange(10) | |
251 xm = self.arange(10) | |
252 xm[2] = self.masked | |
253 x -= 1 | |
254 assert self.allequal(x, y-1) | |
255 xm -= 1 | |
256 assert self.allequal(xm, y-1) | |
257 | |
258 x = self.arange(10)*1.0 | |
259 xm = self.arange(10)*1.0 | |
260 xm[2] = self.masked | |
261 x *= 2.0 | |
262 assert self.allequal(x, y*2) | |
263 xm *= 2.0 | |
264 assert self.allequal(xm, y*2) | |
265 | |
266 x = self.arange(10)*2 | |
267 xm = self.arange(10)*2 | |
268 xm[2] = self.masked | |
269 x /= 2 | |
270 assert self.allequal(x, y) | |
271 xm /= 2 | |
272 assert self.allequal(xm, y) | |
273 | |
274 x = self.arange(10)*1.0 | |
275 xm = self.arange(10)*1.0 | |
276 xm[2] = self.masked | |
277 x /= 2.0 | |
278 assert self.allequal(x, y/2.0) | |
279 xm /= self.arange(10) | |
280 self.assert_array_equal(xm, self.ones((10,))) | |
281 | |
282 x = self.arange(10).astype(float_) | |
283 xm = self.arange(10) | |
284 xm[2] = self.masked | |
285 id1 = self.id(x.raw_data()) | |
286 x += 1. | |
287 #assert id1 == self.id(x.raw_data()) | |
288 assert self.allequal(x, y+1.) | |
289 | |
290 | |
291 def test_6(self): | |
292 "Tests inplace w/ array" | |
293 | |
294 x = self.arange(10, dtype=float_) | |
295 y = self.arange(10) | |
296 xm = self.arange(10, dtype=float_) | |
297 xm[2] = self.masked | |
298 m = xm.mask | |
299 a = self.arange(10, dtype=float_) | |
300 a[-1] = self.masked | |
301 x += a | |
302 xm += a | |
303 assert self.allequal(x, y+a) | |
304 assert self.allequal(xm, y+a) | |
305 assert self.allequal(xm.mask, self.mask_or(m, a.mask)) | |
306 | |
307 x = self.arange(10, dtype=float_) | |
308 xm = self.arange(10, dtype=float_) | |
309 xm[2] = self.masked | |
310 m = xm.mask | |
311 a = self.arange(10, dtype=float_) | |
312 a[-1] = self.masked | |
313 x -= a | |
314 xm -= a | |
315 assert self.allequal(x, y-a) | |
316 assert self.allequal(xm, y-a) | |
317 assert self.allequal(xm.mask, self.mask_or(m, a.mask)) | |
318 | |
319 x = self.arange(10, dtype=float_) | |
320 xm = self.arange(10, dtype=float_) | |
321 xm[2] = self.masked | |
322 m = xm.mask | |
323 a = self.arange(10, dtype=float_) | |
324 a[-1] = self.masked | |
325 x *= a | |
326 xm *= a | |
327 assert self.allequal(x, y*a) | |
328 assert self.allequal(xm, y*a) | |
329 assert self.allequal(xm.mask, self.mask_or(m, a.mask)) | |
330 | |
331 x = self.arange(10, dtype=float_) | |
332 xm = self.arange(10, dtype=float_) | |
333 xm[2] = self.masked | |
334 m = xm.mask | |
335 a = self.arange(10, dtype=float_) | |
336 a[-1] = self.masked | |
337 x /= a | |
338 xm /= a | |
339 | |
340 #---------------------------------- | |
341 def test_7(self): | |
342 "Tests ufunc" | |
343 d = (self.array([1.0, 0, -1, pi/2]*2, mask=[0, 1]+[0]*6), | |
344 self.array([1.0, 0, -1, pi/2]*2, mask=[1, 0]+[0]*6),) | |
345 for f in ['sqrt', 'log', 'log10', 'exp', 'conjugate', | |
346 # 'sin', 'cos', 'tan', | |
347 # 'arcsin', 'arccos', 'arctan', | |
348 # 'sinh', 'cosh', 'tanh', | |
349 # 'arcsinh', | |
350 # 'arccosh', | |
351 # 'arctanh', | |
352 # 'absolute', 'fabs', 'negative', | |
353 # # 'nonzero', 'around', | |
354 # 'floor', 'ceil', | |
355 # # 'sometrue', 'alltrue', | |
356 # 'logical_not', | |
357 # 'add', 'subtract', 'multiply', | |
358 # 'divide', 'true_divide', 'floor_divide', | |
359 # 'remainder', 'fmod', 'hypot', 'arctan2', | |
360 # 'equal', 'not_equal', 'less_equal', 'greater_equal', | |
361 # 'less', 'greater', | |
362 # 'logical_and', 'logical_or', 'logical_xor', | |
363 ]: | |
364 #print f | |
365 try: | |
366 uf = getattr(self.umath, f) | |
367 except AttributeError: | |
368 uf = getattr(fromnumeric, f) | |
369 mf = getattr(self.module, f) | |
370 args = d[:uf.nin] | |
371 ur = uf(*args) | |
372 mr = mf(*args) | |
373 self.assert_array_equal(ur.filled(0), mr.filled(0), f) | |
374 self.assert_array_equal(ur._mask, mr._mask) | |
375 | |
376 #---------------------------------- | |
377 def test_99(self): | |
378 # test average | |
379 ott = self.array([0., 1., 2., 3.], mask=[1, 0, 0, 0]) | |
380 self.assert_array_equal(2.0, self.average(ott, axis=0)) | |
381 self.assert_array_equal(2.0, self.average(ott, weights=[1., 1., 2., 1.])) | |
382 result, wts = self.average(ott, weights=[1., 1., 2., 1.], returned=1) | |
383 self.assert_array_equal(2.0, result) | |
384 assert(wts == 4.0) | |
385 ott[:] = self.masked | |
386 assert(self.average(ott, axis=0) is self.masked) | |
387 ott = self.array([0., 1., 2., 3.], mask=[1, 0, 0, 0]) | |
388 ott = ott.reshape(2, 2) | |
389 ott[:, 1] = self.masked | |
390 self.assert_array_equal(self.average(ott, axis=0), [2.0, 0.0]) | |
391 assert(self.average(ott, axis=1)[0] is self.masked) | |
392 self.assert_array_equal([2., 0.], self.average(ott, axis=0)) | |
393 result, wts = self.average(ott, axis=0, returned=1) | |
394 self.assert_array_equal(wts, [1., 0.]) | |
395 w1 = [0, 1, 1, 1, 1, 0] | |
396 w2 = [[0, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 1]] | |
397 x = self.arange(6) | |
398 self.assert_array_equal(self.average(x, axis=0), 2.5) | |
399 self.assert_array_equal(self.average(x, axis=0, weights=w1), 2.5) | |
400 y = self.array([self.arange(6), 2.0*self.arange(6)]) | |
401 self.assert_array_equal(self.average(y, None), np.add.reduce(np.arange(6))*3./12.) | |
402 self.assert_array_equal(self.average(y, axis=0), np.arange(6) * 3./2.) | |
403 self.assert_array_equal(self.average(y, axis=1), [self.average(x, axis=0), self.average(x, axis=0) * 2.0]) | |
404 self.assert_array_equal(self.average(y, None, weights=w2), 20./6.) | |
405 self.assert_array_equal(self.average(y, axis=0, weights=w2), [0., 1., 2., 3., 4., 10.]) | |
406 self.assert_array_equal(self.average(y, axis=1), [self.average(x, axis=0), self.average(x, axis=0) * 2.0]) | |
407 m1 = self.zeros(6) | |
408 m2 = [0, 0, 1, 1, 0, 0] | |
409 m3 = [[0, 0, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0]] | |
410 m4 = self.ones(6) | |
411 m5 = [0, 1, 1, 1, 1, 1] | |
412 self.assert_array_equal(self.average(self.masked_array(x, m1), axis=0), 2.5) | |
413 self.assert_array_equal(self.average(self.masked_array(x, m2), axis=0), 2.5) | |
414 # assert(self.average(masked_array(x, m4),axis=0) is masked) | |
415 self.assert_array_equal(self.average(self.masked_array(x, m5), axis=0), 0.0) | |
416 self.assert_array_equal(self.count(self.average(self.masked_array(x, m4), axis=0)), 0) | |
417 z = self.masked_array(y, m3) | |
418 self.assert_array_equal(self.average(z, None), 20./6.) | |
419 self.assert_array_equal(self.average(z, axis=0), [0., 1., 99., 99., 4.0, 7.5]) | |
420 self.assert_array_equal(self.average(z, axis=1), [2.5, 5.0]) | |
421 self.assert_array_equal(self.average(z, axis=0, weights=w2), [0., 1., 99., 99., 4.0, 10.0]) | |
422 #------------------------ | |
423 def test_A(self): | |
424 x = self.arange(24) | |
425 y = np.arange(24) | |
426 x[5:6] = self.masked | |
427 x = x.reshape(2, 3, 4) | |
428 | |
429 | |
430 ################################################################################ | |
431 if __name__ == '__main__': | |
432 | |
433 setup_base = "from __main__ import moduletester \n"\ | |
434 "import numpy\n" \ | |
435 "tester = moduletester(module)\n" | |
436 # setup_new = "import np.ma.core_ini as module\n"+setup_base | |
437 setup_cur = "import np.ma.core as module\n"+setup_base | |
438 # setup_alt = "import np.ma.core_alt as module\n"+setup_base | |
439 # setup_tmp = "import np.ma.core_tmp as module\n"+setup_base | |
440 | |
441 (nrepeat, nloop) = (10, 10) | |
442 | |
443 if 1: | |
444 for i in range(1, 8): | |
445 func = 'tester.test_%i()' % i | |
446 # new = timeit.Timer(func, setup_new).repeat(nrepeat, nloop*10) | |
447 cur = timeit.Timer(func, setup_cur).repeat(nrepeat, nloop*10) | |
448 # alt = timeit.Timer(func, setup_alt).repeat(nrepeat, nloop*10) | |
449 # tmp = timeit.Timer(func, setup_tmp).repeat(nrepeat, nloop*10) | |
450 # new = np.sort(new) | |
451 cur = np.sort(cur) | |
452 # alt = np.sort(alt) | |
453 # tmp = np.sort(tmp) | |
454 print("#%i" % i +50*'.') | |
455 print(eval("moduletester.test_%i.__doc__" % i)) | |
456 # print "core_ini : %.3f - %.3f" % (new[0], new[1]) | |
457 print("core_current : %.3f - %.3f" % (cur[0], cur[1])) | |
458 # print "core_alt : %.3f - %.3f" % (alt[0], alt[1]) | |
459 # print "core_tmp : %.3f - %.3f" % (tmp[0], tmp[1]) |