summaryrefslogtreecommitdiff
path: root/numpy/linalg/tests
diff options
context:
space:
mode:
authorLars Buitinck <larsmans@gmail.com>2013-12-26 14:12:53 +0100
committerLars Buitinck <larsmans@gmail.com>2013-12-26 14:12:53 +0100
commitdff072619643c6d668446b229d44b7e4d45e6ec0 (patch)
tree81150b775318a245c5c85aa4b41e615eb39c70ae /numpy/linalg/tests
parent61998c22df08e7ec0938bedef931ac824cfb634a (diff)
downloadnumpy-dff072619643c6d668446b229d44b7e4d45e6ec0.tar.gz
BUG: linalg: norm fails on longdouble, signed int
This fixes the following bug with longdouble: >>> x = np.arange(10, dtype=np.longdouble) >>> np.linalg.norm(x, ord=3) Traceback (most recent call last): File "<ipython-input-5-7ee53a8ac142>", line 1, in <module> np.linalg.norm(x, ord=3) File "/tmp/v/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 2090, in norm return add.reduce(absx**ord, axis=axis)**(1.0/ord) UnboundLocalError: local variable 'absx' referenced before assignment As well as the handling of minimal values for signed integers: >>> x = np.array([-2**31], dtype=np.int32) >>> np.linalg.norm(x, ord=3) /tmp/v/lib/python2.7/site-packages/numpy/linalg/linalg.py:2090: RuntimeWarning: invalid value encountered in double_scalars return add.reduce(absx**ord, axis=axis)**(1.0/ord) nan
Diffstat (limited to 'numpy/linalg/tests')
-rw-r--r--numpy/linalg/tests/test_linalg.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/numpy/linalg/tests/test_linalg.py b/numpy/linalg/tests/test_linalg.py
index dd4cbcc4f..feb4c8224 100644
--- a/numpy/linalg/tests/test_linalg.py
+++ b/numpy/linalg/tests/test_linalg.py
@@ -909,6 +909,18 @@ class _TestNorm(object):
assert_raises(ValueError, norm, B, None, (2, 3))
assert_raises(ValueError, norm, B, None, (0, 1, 2))
+ def test_longdouble_norm(self):
+ # Non-regression test: p-norm of longdouble would previously raise
+ # UnboundLocalError.
+ x = np.arange(10, dtype=np.longdouble)
+ old_assert_almost_equal(norm(x, ord=3), 12.65, decimal=2)
+
+ def test_intmin(self):
+ # Non-regression test: p-norm of signed integer would previously do
+ # float cast and abs in the wrong order.
+ x = np.array([-2 ** 31], dtype=np.int32)
+ old_assert_almost_equal(norm(x, ord=3), 2 ** 31, decimal=5)
+
class TestNormDouble(_TestNorm):
dt = np.double