3
from numpy.core.ma import *
4
from numpy.core.numerictypes import float32
5
from numpy.testing import ScipyTestCase, ScipyTest
13
%s"""% (msg, str(v), str(w))
16
class test_ma(ScipyTestCase):
17
def __init__(self, *args, **kwds):
18
ScipyTestCase.__init__(self, *args, **kwds)
22
x=numpy.array([1.,1.,1.,-2., pi/2.0, 4., 5., -10., 10., 1., 2., 3.])
23
y=numpy.array([5.,0.,3., 2., -1., -4., 0., -10., 10., 1., 0., 3.])
25
m1 = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
26
m2 = [0, 0, 1, 0, 0, 1, 1, 0, 0, 0 ,0, 1]
27
xm = array(x, mask=m1)
28
ym = array(y, mask=m2)
29
z = numpy.array([-.5, 0., .5, .8])
30
zm = array(z, mask=[0,1,0,0])
31
xf = numpy.where(m1, 1.e+20, x)
33
xm.set_fill_value(1.e+20)
34
self.d = (x, y, a10, m1, m2, xm, ym, z, zm, xf, s)
36
def check_testBasic1d(self):
37
"Test of basic array creation and properties in 1 dimension."
38
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
39
self.failIf(isMaskedArray(x))
40
self.failUnless(isMaskedArray(xm))
41
self.assertEqual(shape(xm), s)
42
self.assertEqual(xm.shape, s)
43
self.assertEqual(xm.dtype, x.dtype)
44
self.assertEqual( xm.size , reduce(lambda x,y:x*y, s))
45
self.assertEqual(count(xm) , len(m1) - reduce(lambda x,y:x+y, m1))
46
self.failUnless(eq(xm, xf))
47
self.failUnless(eq(filled(xm, 1.e20), xf))
48
self.failUnless(eq(x, xm))
50
def check_testBasic2d(self):
51
"Test of basic array creation and properties in 2 dimensions."
52
for s in [(4,3), (6,2)]:
53
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
60
self.failIf(isMaskedArray(x))
61
self.failUnless(isMaskedArray(xm))
62
self.assertEqual(shape(xm), s)
63
self.assertEqual(xm.shape, s)
64
self.assertEqual( xm.size , reduce(lambda x,y:x*y, s))
65
self.assertEqual( count(xm) , len(m1) - reduce(lambda x,y:x+y, m1))
66
self.failUnless(eq(xm, xf))
67
self.failUnless(eq(filled(xm, 1.e20), xf))
68
self.failUnless(eq(x, xm))
71
def check_testArithmetic (self):
72
"Test of basic arithmetic."
73
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
74
a2d = array([[1,2],[0,4]])
75
a2dm = masked_array(a2d, [[0,0],[1,0]])
76
self.failUnless(eq (a2d * a2d, a2d * a2dm))
77
self.failUnless(eq (a2d + a2d, a2d + a2dm))
78
self.failUnless(eq (a2d - a2d, a2d - a2dm))
79
for s in [(12,), (4,3), (2,6)]:
85
self.failUnless(eq(-x, -xm))
86
self.failUnless(eq(x + y, xm + ym))
87
self.failUnless(eq(x - y, xm - ym))
88
self.failUnless(eq(x * y, xm * ym))
89
self.failUnless(eq(x / y, xm / ym))
90
self.failUnless(eq(a10 + y, a10 + ym))
91
self.failUnless(eq(a10 - y, a10 - ym))
92
self.failUnless(eq(a10 * y, a10 * ym))
93
self.failUnless(eq(a10 / y, a10 / ym))
94
self.failUnless(eq(x + a10, xm + a10))
95
self.failUnless(eq(x - a10, xm - a10))
96
self.failUnless(eq(x * a10, xm * a10))
97
self.failUnless(eq(x / a10, xm / a10))
98
self.failUnless(eq(x**2, xm**2))
99
self.failUnless(eq(abs(x)**2.5, abs(xm) **2.5))
100
self.failUnless(eq(x**y, xm**ym))
101
self.failUnless(eq(numpy.add(x,y), add(xm, ym)))
102
self.failUnless(eq(numpy.subtract(x,y), subtract(xm, ym)))
103
self.failUnless(eq(numpy.multiply(x,y), multiply(xm, ym)))
104
self.failUnless(eq(numpy.divide(x,y), divide(xm, ym)))
107
def check_testMixedArithmetic(self):
108
na = numpy.array([1])
110
self.failUnless(isinstance(na + ma, MaskedArray))
111
self.failUnless(isinstance(ma + na, MaskedArray))
113
def check_testUfuncs1 (self):
114
"Test various functions such as sin, cos."
115
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
116
self.failUnless (eq(numpy.cos(x), cos(xm)))
117
self.failUnless (eq(numpy.cosh(x), cosh(xm)))
118
self.failUnless (eq(numpy.sin(x), sin(xm)))
119
self.failUnless (eq(numpy.sinh(x), sinh(xm)))
120
self.failUnless (eq(numpy.tan(x), tan(xm)))
121
self.failUnless (eq(numpy.tanh(x), tanh(xm)))
122
self.failUnless (eq(numpy.sqrt(abs(x)), sqrt(xm)))
123
self.failUnless (eq(numpy.log(abs(x)), log(xm)))
124
self.failUnless (eq(numpy.log10(abs(x)), log10(xm)))
125
self.failUnless (eq(numpy.exp(x), exp(xm)))
126
self.failUnless (eq(numpy.arcsin(z), arcsin(zm)))
127
self.failUnless (eq(numpy.arccos(z), arccos(zm)))
128
self.failUnless (eq(numpy.arctan(z), arctan(zm)))
129
self.failUnless (eq(numpy.arctan2(x, y), arctan2(xm, ym)))
130
self.failUnless (eq(numpy.absolute(x), absolute(xm)))
131
self.failUnless (eq(numpy.equal(x,y), equal(xm, ym)))
132
self.failUnless (eq(numpy.not_equal(x,y), not_equal(xm, ym)))
133
self.failUnless (eq(numpy.less(x,y), less(xm, ym)))
134
self.failUnless (eq(numpy.greater(x,y), greater(xm, ym)))
135
self.failUnless (eq(numpy.less_equal(x,y), less_equal(xm, ym)))
136
self.failUnless (eq(numpy.greater_equal(x,y), greater_equal(xm, ym)))
137
self.failUnless (eq(numpy.conjugate(x), conjugate(xm)))
138
self.failUnless (eq(numpy.concatenate((x,y)), concatenate((xm,ym))))
139
self.failUnless (eq(numpy.concatenate((x,y)), concatenate((x,y))))
140
self.failUnless (eq(numpy.concatenate((x,y)), concatenate((xm,y))))
141
self.failUnless (eq(numpy.concatenate((x,y,x)), concatenate((x,ym,x))))
143
def check_xtestCount (self):
145
ott = array([0.,1.,2.,3.], mask=[1,0,0,0])
146
self.failUnless( isinstance(count(ott), types.IntType))
147
self.assertEqual(3, count(ott))
148
self.assertEqual(1, count(1))
149
self.failUnless (eq(0, array(1,mask=[1])))
150
ott=ott.reshape((2,2))
151
assert isMaskedArray(count(ott,0))
152
assert isinstance(count(ott), types.IntType)
153
self.failUnless (eq(3, count(ott)))
154
assert getmask(count(ott,0)) is nomask
155
self.failUnless (eq([1,2],count(ott,0)))
157
def check_testMinMax (self):
158
"Test minimum and maximum."
159
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
160
xr = numpy.ravel(x) #max doesn't work if shaped
162
self.failUnless (eq(max(xr), maximum(xmr))) #true because of careful selection of data
163
self.failUnless (eq(min(xr), minimum(xmr))) #true because of careful selection of data
165
def check_testAddSumProd (self):
166
"Test add, sum, product."
167
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
168
self.failUnless (eq(numpy.add.reduce(x), add.reduce(x)))
169
self.failUnless (eq(numpy.add.accumulate(x), add.accumulate(x)))
170
self.failUnless (eq(4, sum(array(4))))
171
self.failUnless (eq(4, sum(array(4), axis=0)))
172
self.failUnless (eq(numpy.sum(x), sum(x)))
173
self.failUnless (eq(numpy.sum(filled(xm,0)), sum(xm)))
174
self.failUnless (eq(numpy.sum(x,0), sum(x,0)))
175
self.failUnless (eq(numpy.product(x), product(x)))
176
self.failUnless (eq(numpy.product(x,0), product(x,0)))
177
self.failUnless (eq(numpy.product(filled(xm,1)), product(xm)))
179
self.failUnless (eq(numpy.concatenate((x,y),1), concatenate((xm,ym),1)))
180
self.failUnless (eq(numpy.add.reduce(x,1), add.reduce(x,1)))
181
self.failUnless (eq(numpy.sum(x,1), sum(x,1)))
182
self.failUnless (eq(numpy.product(x,1), product(x,1)))
185
def check_testCI(self):
186
"Test of conversions and indexing"
187
x1 = numpy.array([1,2,4,3])
188
x2 = array(x1, mask = [1,0,0,0])
189
x3 = array(x1, mask = [0,1,0,1])
191
# test conversion to strings
192
junk, garbage = str(x2), repr(x2)
193
assert eq(numpy.sort(x1),sort(x2, fill_value=0))
195
assert type(x2[1]) is type(x1[1])
196
assert x1[1] == x2[1]
197
assert x2[0] is masked
198
assert eq(x1[2],x2[2])
199
assert eq(x1[2:5],x2[2:5])
200
assert eq(x1[:],x2[:])
201
assert eq(x1[1:], x3[1:])
214
assert allequal(getmask(x2),array([0,1,0,0]))
215
x3[:] = masked_array([1,2,3,4],[0,1,1,0])
216
assert allequal(getmask(x3), array([0,1,1,0]))
217
x4[:] = masked_array([1,2,3,4],[0,1,1,0])
218
assert allequal(getmask(x4), array([0,1,1,0]))
219
assert allequal(x4, array([1,2,3,4]))
220
x1 = numpy.arange(5)*1.0
221
x2 = masked_values(x1, 3.0)
223
assert allequal(array([0,0,0,1,0],MaskType), x2.mask)
224
assert eq(3.0, x2.fill_value())
225
x1 = array([1,'hello',2,3],object)
226
x2 = numpy.array([1,'hello',2,3],object)
229
self.assertEqual(type(s2), str)
230
self.assertEqual(type(s1), str)
231
self.assertEqual(s1, s2)
232
assert x1[1:1].shape == (0,)
234
def check_testCopySize(self):
235
"Tests of some subtle points of copying and sizing."
239
self.failUnless(m is m2)
240
m3 = make_mask(m, copy=1)
241
self.failUnless(m is not m3)
244
y1 = array(x1, mask=m)
245
self.failUnless( y1.raw_data() is not x1)
246
self.failUnless( allequal(x1,y1.raw_data()))
247
self.failUnless( y1.mask is m)
249
y1a = array(y1, copy=0)
250
self.failUnless( y1a.raw_data() is y1.raw_data())
251
self.failUnless( y1a.mask is y1.mask)
253
y2 = array(x1, mask=m, copy=0)
254
self.failUnless( y2.raw_data() is x1)
255
self.failUnless( y2.mask is m)
256
self.failUnless( y2[2] is masked)
258
self.failUnless( y2[2] is not masked)
259
self.failUnless( y2.mask is not m)
260
self.failUnless( allequal(y2.mask, 0))
262
y3 = array(x1*1.0, mask=m)
263
self.failUnless(filled(y3).dtype is (x1*1.0).dtype)
267
y4 = resize(x4, (8,))
268
self.failUnless( eq(concatenate([x4,x4]), y4))
269
self.failUnless( eq(getmask(y4),[0,0,1,0,0,0,1,0]))
270
y5 = repeat(x4, (2,2,2,2))
271
self.failUnless( eq(y5, [0,0,1,1,2,2,3,3]))
273
self.failUnless( eq(y5, y6))
275
def check_testPut(self):
280
x = array(d, mask = m)
281
self.failUnless( x[3] is masked)
282
self.failUnless( x[4] is masked)
284
self.failUnless( x.mask is not m)
285
self.failUnless( x[3] is masked)
286
self.failUnless( x[4] is not masked)
287
self.failUnless( eq(x, [0,10,2,-1,40]))
289
x = array(d, mask = m)
291
self.failUnless( eq(x, [-1,100,200,0,0]))
292
self.failUnless( x[3] is masked)
293
self.failUnless( x[4] is masked)
295
x = array(d, mask = m)
297
self.failUnless( eq(x, [0,1,2,30,40]))
298
self.failUnless( x.mask is nomask)
300
x = array(d, mask = m)
302
z = array(x, mask = m)
306
def check_testMaPut(self):
307
(x, y, a10, m1, m2, xm, ym, z, zm, xf, s) = self.d
308
m = [1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1]
311
assert take(xm, i) == z
313
assert take(ym, i) == zm
315
def check_testOddFeatures(self):
316
"Test of other odd features"
317
x = arange(20); x=x.reshape(4,5)
322
assert eq(z.imag, 10*x)
323
assert eq((z*conjugate(z)).real, 101*x*x)
328
assert str(x[3]) == str(masked)
330
assert count(where(c,masked,masked)) == 0
331
assert shape(where(c,masked,masked)) == c.shape
332
z = where(c , x, masked)
333
assert z.dtype is x.dtype
334
assert z[3] is masked
335
assert z[4] is masked
336
assert z[7] is masked
337
assert z[8] is not masked
338
assert z[9] is not masked
340
z = where(c , masked, x)
341
assert z.dtype is x.dtype
342
assert z[3] is masked
343
assert z[4] is not masked
344
assert z[7] is not masked
345
assert z[8] is masked
346
assert z[9] is masked
347
z = masked_where(c, x)
348
assert z.dtype is x.dtype
349
assert z[3] is masked
350
assert z[4] is not masked
351
assert z[7] is not masked
352
assert z[8] is masked
353
assert z[9] is masked
355
x = array([1.,2.,3.,4.,5.])
356
c = array([1,1,1,0,0])
359
assert eq(z, [1.,2.,0., -4., -5])
362
assert eq(z, [1.,2.,0., -4., -5])
363
assert z[0] is masked
364
assert z[1] is not masked
365
assert z[2] is masked
366
assert eq(masked_where(greater(x, 2), x), masked_greater(x,2))
367
assert eq(masked_where(greater_equal(x, 2), x), masked_greater_equal(x,2))
368
assert eq(masked_where(less(x, 2), x), masked_less(x,2))
369
assert eq(masked_where(less_equal(x, 2), x), masked_less_equal(x,2))
370
assert eq(masked_where(not_equal(x, 2), x), masked_not_equal(x,2))
371
assert eq(masked_where(equal(x, 2), x), masked_equal(x,2))
372
assert eq(masked_where(not_equal(x,2), x), masked_not_equal(x,2))
373
assert eq(masked_inside(range(5), 1, 3), [0, 199, 199, 199, 4])
374
assert eq(masked_outside(range(5), 1, 3),[199,1,2,3,199])
375
assert eq(masked_inside(array(range(5), mask=[1,0,0,0,0]), 1, 3).mask, [1,1,1,1,0])
376
assert eq(masked_outside(array(range(5), mask=[0,1,0,0,0]), 1, 3).mask, [1,1,0,0,1])
377
assert eq(masked_equal(array(range(5), mask=[1,0,0,0,0]), 2).mask, [1,0,1,0,0])
378
assert eq(masked_not_equal(array([2,2,1,2,1], mask=[1,0,0,0,0]), 2).mask, [1,0,1,0,1])
379
assert eq(masked_where([1,1,0,0,0], [1,2,3,4,5]), [99,99,3,4,5])
380
atest = ones((10,10,10), dtype=float32)
381
btest = zeros(atest.shape, MaskType)
382
ctest = masked_where(btest,atest)
383
assert eq(atest,ctest)
384
z = choose(c, (-x, x))
385
assert eq(z, [1.,2.,0., -4., -5])
386
assert z[0] is masked
387
assert z[1] is not masked
388
assert z[2] is masked
393
c = array([1,1,1,0,0,0], mask=[1,0,0,0,0,0])
398
assert getmask(zm) is nomask
399
assert eq(zm, [0,1,2,30,40,50])
400
z = where(c, masked, 1)
401
assert eq(z, [99,99,99,1,1,1])
402
z = where(c, 1, masked)
403
assert eq(z, [99, 1, 1, 99, 99, 99])
405
def check_testMinMax(self):
406
"Test of minumum, maximum."
407
assert eq(minimum([1,2,3],[4,0,9]), [1,0,3])
408
assert eq(maximum([1,2,3],[4,0,9]), [4,2,9])
413
assert eq(minimum(x,y), where(less(x,y), x, y))
414
assert eq(maximum(x,y), where(greater(x,y), x, y))
415
assert minimum(x) == 0
416
assert maximum(x) == 4
418
def check_testTakeTransposeInnerOuter(self):
419
"Test of take, transpose, inner, outer products"
425
assert eq(numpy.transpose(y,(2,0,1)), transpose(x,(2,0,1)))
426
assert eq(numpy.take(y, (2,0,1), 1), take(x, (2,0,1), 1))
427
assert eq(numpy.innerproduct(filled(x,0),filled(y,0)),
429
assert eq(numpy.outerproduct(filled(x,0),filled(y,0)),
431
y = array(['abc', 1, 'def', 2, 3], object)
438
def check_testInplace(self):
439
"""Test of inplace operations and rich comparisons"""
480
assert eq(xm, ones((10,)))
482
x = arange(10).astype(float32)
485
id1 = id(x.raw_data())
487
assert id1 == id(x.raw_data())
490
def check_testPickle(self):
500
def check_testMasked(self):
501
"Test of masked element"
504
self.failUnless(str(masked) == '--')
505
self.failUnless(xx[1] is masked)
506
self.failUnlessEqual(filled(xx[1], 0), 0)
507
# don't know why these should raise an exception...
508
#self.failUnlessRaises(Exception, lambda x,y: x+y, masked, masked)
509
#self.failUnlessRaises(Exception, lambda x,y: x+y, masked, 2)
510
#self.failUnlessRaises(Exception, lambda x,y: x+y, masked, xx)
511
#self.failUnlessRaises(Exception, lambda x,y: x+y, xx, masked)
513
def check_testAverage1(self):
515
ott = array([0.,1.,2.,3.], mask=[1,0,0,0])
516
self.failUnless(eq(2.0, average(ott)))
517
self.failUnless(eq(2.0, average(ott, weights=[1., 1., 2., 1.])))
518
result, wts = average(ott, weights=[1.,1.,2.,1.], returned=1)
519
self.failUnless(eq(2.0, result))
520
self.failUnless(wts == 4.0)
522
self.failUnless(average(ott) is masked)
523
ott = array([0.,1.,2.,3.], mask=[1,0,0,0])
526
self.failUnless(eq(average(ott), [2.0, 0.0]))
527
self.failUnless(average(ott,axis=1)[0] is masked)
528
self.failUnless(eq([2.,0.], average(ott)))
529
result, wts = average(ott, returned=1)
530
self.failUnless(eq(wts, [1., 0.]))
532
def check_testAverage2(self):
533
"More tests of average."
535
w2 = [[0,1,1,1,1,0],[1,0,0,0,0,1]]
537
self.failUnless(allclose(average(x), 2.5))
538
self.failUnless(allclose(average(x, weights=w1), 2.5))
539
y=array([arange(6), 2.0*arange(6)])
540
self.failUnless(allclose(average(y, None), numpy.add.reduce(numpy.arange(6))*3./12.))
541
self.failUnless(allclose(average(y, axis=0), numpy.arange(6) * 3./2.))
542
self.failUnless(allclose(average(y, axis=1), [average(x), average(x) * 2.0]))
543
self.failUnless(allclose(average(y, None, weights=w2), 20./6.))
544
self.failUnless(allclose(average(y, axis=0, weights=w2), [0.,1.,2.,3.,4.,10.]))
545
self.failUnless(allclose(average(y, axis=1), [average(x), average(x) * 2.0]))
548
m3 = [[0,0,1,1,0,0],[0,1,1,1,1,0]]
550
m5 = [0, 1, 1, 1, 1, 1]
551
self.failUnless(allclose(average(masked_array(x, m1)), 2.5))
552
self.failUnless(allclose(average(masked_array(x, m2)), 2.5))
553
self.failUnless(average(masked_array(x, m4)) is masked)
554
self.assertEqual(average(masked_array(x, m5)), 0.0)
555
self.assertEqual(count(average(masked_array(x, m4))), 0)
556
z = masked_array(y, m3)
557
self.failUnless(allclose(average(z, None), 20./6.))
558
self.failUnless(allclose(average(z, axis=0), [0.,1.,99.,99.,4.0, 7.5]))
559
self.failUnless(allclose(average(z, axis=1), [2.5, 5.0]))
560
self.failUnless(allclose( average(z,weights=w2), [0.,1., 99., 99., 4.0, 10.0]))
564
r1, w1 = average([[a,b],[b,a]], axis=1, returned=1)
565
self.assertEqual(shape(r1) , shape(w1))
566
self.assertEqual(r1.shape , w1.shape)
567
r2, w2 = average(ones((2,2,3)), axis=0, weights=[3,1], returned=1)
568
self.assertEqual(shape(w2) , shape(r2))
569
r2, w2 = average(ones((2,2,3)), returned=1)
570
self.assertEqual(shape(w2) , shape(r2))
571
r2, w2 = average(ones((2,2,3)), weights=ones((2,2,3)), returned=1)
572
self.failUnless(shape(w2) == shape(r2))
573
a2d = array([[1,2],[0,4]], float)
574
a2dm = masked_array(a2d, [[0,0],[1,0]])
576
self.failUnless(eq (a2da, [0.5, 3.0]))
577
a2dma = average(a2dm)
578
self.failUnless(eq( a2dma, [1.0, 3.0]))
579
a2dma = average(a2dm, axis=None)
580
self.failUnless(eq(a2dma, 7./3.))
581
a2dma = average(a2dm, axis=1)
582
self.failUnless(eq(a2dma, [1.5, 4.0]))
584
def check_testToPython(self):
585
self.assertEqual(1, int(array(1)))
586
self.assertEqual(1.0, float(array(1)))
587
self.assertEqual(1, int(array([[[1]]])))
588
self.assertEqual(1.0, float(array([[1]])))
589
self.failUnlessRaises(ValueError, float, array([1,1]))
590
self.failUnlessRaises(MAError, float, array([1],mask=[1]))
591
self.failUnless(bool(array([0,1])))
592
self.failUnless(bool(array([0,0],mask=[0,1])))
593
self.failIf(bool(array([0,0])))
594
self.failIf(bool(array([0,0],mask=[0,0])))
596
def check_testScalarArithmetic(self):
597
xm = array(0, mask=1)
598
self.failUnless((1/array(0)).mask)
599
self.failUnless((1 + xm).mask)
600
self.failUnless((-xm).mask)
601
self.failUnless((-xm).mask)
602
self.failUnless(maximum(xm, xm).mask)
603
self.failUnless(minimum(xm, xm).mask)
604
self.failUnless(xm.filled().dtype is xm.data.dtype)
606
self.failUnless(x.filled() is x.data)
607
self.failUnlessEqual(str(xm), str(masked_print_option))
609
def check_testArrayMethods(self):
611
b = array([1,3,2], mask=[1,0,1])
612
self.failUnless(eq(a.any(), a.data.any()))
613
self.failUnless(eq(a.all(), a.data.all()))
614
self.failUnless(eq(a.argmax(), a.data.argmax()))
615
self.failUnless(eq(a.argmin(), a.data.argmin()))
616
self.failUnless(eq(a.choose(0,1,2,3,4), a.data.choose(0,1,2,3,4)))
617
self.failUnless(eq(a.compress([1,0,1]), a.data.compress([1,0,1])))
618
self.failUnless(eq(a.conj(), a.data.conj()))
619
self.failUnless(eq(a.conjugate(), a.data.conjugate()))
620
m = array([[1,2],[3,4]])
621
self.failUnless(eq(m.diagonal(), m.data.diagonal()))
622
self.failUnless(eq(a.sum(), a.data.sum()))
623
self.failUnless(eq(a.take([1,2]), a.data.take([1,2])))
624
self.failUnless(eq(m.transpose(), m.data.transpose()))
626
def check_testArrayAttributes(self):
628
b = array([1,3,2], mask=[1,0,1])
629
self.failUnlessEqual(a.ndim, 1)
631
def check_testAPI(self):
632
self.failIf([m for m in dir(numpy.ndarray)
633
if m not in dir(array) and not m.startswith('_')])
635
def check_testSingleElementSubscript(self):
637
b = array([1,3,2], mask=[1,0,1])
638
self.failUnlessEqual(a[0].shape, ())
639
self.failUnlessEqual(b[0].shape, ())
640
self.failUnlessEqual(b[1].shape, ())
642
class test_ufuncs(ScipyTestCase):
644
self.d = (array([1.0, 0, -1, pi/2]*2, mask=[0,1]+[0]*6),
645
array([1.0, 0, -1, pi/2]*2, mask=[1,0]+[0]*6),)
648
def check_testUfuncRegression(self):
649
for f in ['sqrt', 'log', 'log10', 'exp', 'conjugate',
651
'arcsin', 'arccos', 'arctan',
652
'sinh', 'cosh', 'tanh',
656
'absolute', 'fabs', 'negative',
657
# 'nonzero', 'around',
659
# 'sometrue', 'alltrue',
661
'add', 'subtract', 'multiply',
662
'divide', 'true_divide', 'floor_divide',
663
'remainder', 'fmod', 'hypot', 'arctan2',
664
'equal', 'not_equal', 'less_equal', 'greater_equal',
666
'logical_and', 'logical_or', 'logical_xor',
669
uf = getattr(umath, f)
670
except AttributeError:
671
uf = getattr(oldnumeric, f)
672
mf = getattr(numpy.ma, f)
673
args = self.d[:uf.nin]
676
self.failUnless(eq(ur.filled(0), mr.filled(0), f))
677
self.failUnless(eqmask(ur.mask, mr.mask))
679
def test_reduce(self):
681
self.failIf(alltrue(a))
682
self.failUnless(sometrue(a))
683
self.failUnlessEqual(sum(a[:3]), 0)
684
self.failUnlessEqual(product(a), 0)
686
def test_minmax(self):
687
a = arange(1,13).reshape(3,4)
688
amask = masked_where(a < 5,a)
689
self.failUnlessEqual(amask.max(), a.max())
690
self.failUnlessEqual(amask.min(), 5)
691
self.failUnless((amask.max(0) == a.max(0)).all())
692
self.failUnless((amask.min(0) == [5,6,7,8]).all())
693
self.failUnless(amask.max(1)[0].mask)
694
self.failUnless(amask.min(1)[0].mask)
696
def test_nonzero(self):
697
for t in "?bhilqpBHILQPfdgFDGO":
698
x = array([1,0,2,0], mask=[0,0,1,1])
699
self.failUnless(eq(nonzero(x), [0]))
702
class test_array_methods(ScipyTestCase):
705
x = numpy.array([ 8.375, 7.545, 8.828, 8.5 , 1.757, 5.928,
706
8.43 , 7.78 , 9.865, 5.878, 8.979, 4.732,
707
3.012, 6.022, 5.095, 3.116, 5.238, 3.957,
708
6.04 , 9.63 , 7.712, 3.382, 4.489, 6.479,
709
7.189, 9.645, 5.395, 4.961, 9.894, 2.893,
710
7.357, 9.828, 6.272, 3.758, 6.693, 0.993])
712
XX = x.reshape(3,2,2,3)
714
m = numpy.array([0, 1, 0, 1, 0, 0,
720
mx = array(data=x,mask=m)
721
mX = array(data=X,mask=m.reshape(X.shape))
722
mXX = array(data=XX,mask=m.reshape(XX.shape))
724
m2 = numpy.array([1, 1, 0, 1, 0, 0,
730
m2x = array(data=x,mask=m2)
731
m2X = array(data=X,mask=m2.reshape(X.shape))
732
m2XX = array(data=XX,mask=m2.reshape(XX.shape))
733
self.d = (x,X,XX,m,mx,mX,mXX)
735
#------------------------------------------------------
736
def test_trace(self):
737
(x,X,XX,m,mx,mX,mXX,) = self.d
738
mXdiag = mX.diagonal()
739
self.assertEqual(mX.trace(), mX.diagonal().compressed().sum())
740
self.failUnless(eq(mX.trace(),
741
X.trace() - sum(mXdiag.mask*X.diagonal())))
744
(x,X,XX,m,mx,mX,mXX,) = self.d
745
clipped = mx.clip(2,8)
746
self.failUnless(eq(clipped.mask,mx.mask))
747
self.failUnless(eq(clipped.data,x.clip(2,8)))
748
self.failUnless(eq(clipped.data,mx.data.clip(2,8)))
751
(x,X,XX,m,mx,mX,mXX,) = self.d
753
self.assertEqual(mx.ptp(),mx.compressed().ptp())
754
rows = numpy.zeros(n,numpy.float_)
755
cols = numpy.zeros(m,numpy.float_)
757
cols[k] = mX[:,k].compressed().ptp()
759
rows[k] = mX[k].compressed().ptp()
760
self.failUnless(eq(mX.ptp(0),cols))
761
self.failUnless(eq(mX.ptp(1),rows))
763
def test_swapaxes(self):
764
(x,X,XX,m,mx,mX,mXX,) = self.d
765
mXswapped = mX.swapaxes(0,1)
766
self.failUnless(eq(mXswapped[-1],mX[:,-1]))
767
mXXswapped = mXX.swapaxes(0,2)
768
self.assertEqual(mXXswapped.shape,(2,2,3,3))
771
def test_cumprod(self):
772
(x,X,XX,m,mx,mX,mXX,) = self.d
774
self.failUnless(eq(mXcp.data,mX.filled(1).cumprod(0)))
776
self.failUnless(eq(mXcp.data,mX.filled(1).cumprod(1)))
778
def test_cumsum(self):
779
(x,X,XX,m,mx,mX,mXX,) = self.d
781
self.failUnless(eq(mXcp.data,mX.filled(0).cumsum(0)))
783
self.failUnless(eq(mXcp.data,mX.filled(0).cumsum(1)))
785
def test_varstd(self):
786
(x,X,XX,m,mx,mX,mXX,) = self.d
787
self.failUnless(eq(mX.var(axis=None),mX.compressed().var()))
788
self.failUnless(eq(mX.std(axis=None),mX.compressed().std()))
789
self.failUnless(eq(mXX.var(axis=3).shape,XX.var(axis=3).shape))
790
self.failUnless(eq(mX.var().shape,X.var().shape))
791
(mXvar0,mXvar1) = (mX.var(axis=0), mX.var(axis=1))
793
self.failUnless(eq(mXvar1[k],mX[k].compressed().var()))
794
self.failUnless(eq(mXvar0[k],mX[:,k].compressed().var()))
795
self.failUnless(eq(numpy.sqrt(mXvar0[k]),
796
mX[:,k].compressed().std()))
804
return (m1 == m2).all()
807
for f in [testf, testinplace]:
808
for n in [1000,10000,50000]:
815
numpy time (ms) %6.1f
816
MA maskless ratio %6.1f
817
MA masked ratio %6.1f
818
""" % (n, t*1000.0, t1/t, t2/t)
821
x=numpy.arange(n) + 1.0
824
return time.time() - tn0
830
return time.time() - tn0
837
return time.time() - tn0
841
y = x **2 + 2.0 * x - 1.0
845
testf.test_name = 'Simple arithmetic'
854
testinplace.test_name = 'Inplace operations'
856
if __name__ == "__main__":
857
ScipyTest('numpy.core.ma').run()