From caa3e3072b9d7f03ac1e10f42b6ece3bf7e21cf5 Mon Sep 17 00:00:00 2001 From: Charles Harris Date: Sun, 21 Feb 2010 18:32:03 +0000 Subject: BUG: Fix possibly unbalanced seterr calls. Fixes change of divide state after running np.test(). --- numpy/ma/tests/test_old_ma.py | 87 ++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 39 deletions(-) (limited to 'numpy/ma') diff --git a/numpy/ma/tests/test_old_ma.py b/numpy/ma/tests/test_old_ma.py index cf971b32c..f0a8dff90 100644 --- a/numpy/ma/tests/test_old_ma.py +++ b/numpy/ma/tests/test_old_ma.py @@ -89,14 +89,18 @@ class TestMa(TestCase): self.assertTrue(eq(x - y, xm - ym)) self.assertTrue(eq(x * y, xm * ym)) olderr = numpy.seterr(divide='ignore', invalid='ignore') - self.assertTrue(eq(x / y, xm / ym)) - numpy.seterr(**olderr) + try: + self.assertTrue(eq(x / y, xm / ym)) + finally: + numpy.seterr(**olderr) self.assertTrue(eq(a10 + y, a10 + ym)) self.assertTrue(eq(a10 - y, a10 - ym)) self.assertTrue(eq(a10 * y, a10 * ym)) olderr = numpy.seterr(divide='ignore', invalid='ignore') - self.assertTrue(eq(a10 / y, a10 / ym)) - numpy.seterr(**olderr) + try: + self.assertTrue(eq(a10 / y, a10 / ym)) + finally: + numpy.seterr(**olderr) self.assertTrue(eq(x + a10, xm + a10)) self.assertTrue(eq(x - a10, xm - a10)) self.assertTrue(eq(x * a10, xm * a10)) @@ -108,8 +112,10 @@ class TestMa(TestCase): self.assertTrue(eq(numpy.subtract(x,y), subtract(xm, ym))) self.assertTrue(eq(numpy.multiply(x,y), multiply(xm, ym))) olderr = numpy.seterr(divide='ignore', invalid='ignore') - self.assertTrue(eq(numpy.divide(x,y), divide(xm, ym))) - numpy.seterr(**olderr) + try: + self.assertTrue(eq(numpy.divide(x,y), divide(xm, ym))) + finally: + numpy.seterr(**olderr) def test_testMixedArithmetic(self): @@ -128,10 +134,12 @@ class TestMa(TestCase): self.assertTrue (eq(numpy.tan(x), tan(xm))) self.assertTrue (eq(numpy.tanh(x), tanh(xm))) olderr = numpy.seterr(divide='ignore', invalid='ignore') - self.assertTrue (eq(numpy.sqrt(abs(x)), sqrt(xm))) - self.assertTrue (eq(numpy.log(abs(x)), log(xm))) - self.assertTrue (eq(numpy.log10(abs(x)), log10(xm))) - numpy.seterr(**olderr) + try: + self.assertTrue (eq(numpy.sqrt(abs(x)), sqrt(xm))) + self.assertTrue (eq(numpy.log(abs(x)), log(xm))) + self.assertTrue (eq(numpy.log10(abs(x)), log10(xm))) + finally: + numpy.seterr(**olderr) self.assertTrue (eq(numpy.exp(x), exp(xm))) self.assertTrue (eq(numpy.arcsin(z), arcsin(zm))) self.assertTrue (eq(numpy.arccos(z), arccos(zm))) @@ -658,25 +666,28 @@ class TestUfuncs(TestCase): def test_testUfuncRegression(self): + f_invalid_ignore = ['sqrt', 'arctanh', 'arcsin', 'arccos', + 'arccosh', 'arctanh', 'log', 'log10','divide', + 'true_divide', 'floor_divide', 'remainder', 'fmod'] for f in ['sqrt', 'log', 'log10', 'exp', 'conjugate', - 'sin', 'cos', 'tan', - 'arcsin', 'arccos', 'arctan', - 'sinh', 'cosh', 'tanh', - 'arcsinh', - 'arccosh', - 'arctanh', - 'absolute', 'fabs', 'negative', - # 'nonzero', 'around', - 'floor', 'ceil', - # 'sometrue', 'alltrue', - 'logical_not', - 'add', 'subtract', 'multiply', - 'divide', 'true_divide', 'floor_divide', - 'remainder', 'fmod', 'hypot', 'arctan2', - 'equal', 'not_equal', 'less_equal', 'greater_equal', - 'less', 'greater', - 'logical_and', 'logical_or', 'logical_xor', - ]: + 'sin', 'cos', 'tan', + 'arcsin', 'arccos', 'arctan', + 'sinh', 'cosh', 'tanh', + 'arcsinh', + 'arccosh', + 'arctanh', + 'absolute', 'fabs', 'negative', + # 'nonzero', 'around', + 'floor', 'ceil', + # 'sometrue', 'alltrue', + 'logical_not', + 'add', 'subtract', 'multiply', + 'divide', 'true_divide', 'floor_divide', + 'remainder', 'fmod', 'hypot', 'arctan2', + 'equal', 'not_equal', 'less_equal', 'greater_equal', + 'less', 'greater', + 'logical_and', 'logical_or', 'logical_xor', + ]: try: uf = getattr(umath, f) except AttributeError: @@ -684,17 +695,15 @@ class TestUfuncs(TestCase): mf = getattr(numpy.ma, f) args = self.d[:uf.nin] olderr = numpy.geterr() - f_invalid_ignore = ['sqrt', 'arctanh', 'arcsin', 'arccos', - 'arccosh', 'arctanh', 'log', 'log10','divide', - 'true_divide', 'floor_divide', 'remainder', - 'fmod'] - if f in f_invalid_ignore: - numpy.seterr(invalid='ignore') - if f in ['arctanh', 'log', 'log10']: - numpy.seterr(divide='ignore') - ur = uf(*args) - mr = mf(*args) - numpy.seterr(**olderr) + try: + if f in f_invalid_ignore: + numpy.seterr(invalid='ignore') + if f in ['arctanh', 'log', 'log10']: + numpy.seterr(divide='ignore') + ur = uf(*args) + mr = mf(*args) + finally: + numpy.seterr(**olderr) self.assertTrue(eq(ur.filled(0), mr.filled(0), f)) self.assertTrue(eqmask(ur.mask, mr.mask)) -- cgit v1.2.1