Chris@87
|
1 """ Test functions for linalg module
|
Chris@87
|
2 """
|
Chris@87
|
3 from __future__ import division, absolute_import, print_function
|
Chris@87
|
4
|
Chris@87
|
5
|
Chris@87
|
6 from numpy.testing import *
|
Chris@87
|
7 import numpy as np
|
Chris@87
|
8 from numpy import linalg, arange, float64, array, dot, transpose
|
Chris@87
|
9
|
Chris@87
|
10 rlevel = 1
|
Chris@87
|
11
|
Chris@87
|
12 class TestRegression(TestCase):
|
Chris@87
|
13 def test_eig_build(self, level = rlevel):
|
Chris@87
|
14 """Ticket #652"""
|
Chris@87
|
15 rva = array([1.03221168e+02 +0.j,
|
Chris@87
|
16 -1.91843603e+01 +0.j,
|
Chris@87
|
17 -6.04004526e-01+15.84422474j,
|
Chris@87
|
18 -6.04004526e-01-15.84422474j,
|
Chris@87
|
19 -1.13692929e+01 +0.j,
|
Chris@87
|
20 -6.57612485e-01+10.41755503j,
|
Chris@87
|
21 -6.57612485e-01-10.41755503j,
|
Chris@87
|
22 1.82126812e+01 +0.j,
|
Chris@87
|
23 1.06011014e+01 +0.j,
|
Chris@87
|
24 7.80732773e+00 +0.j,
|
Chris@87
|
25 -7.65390898e-01 +0.j,
|
Chris@87
|
26 1.51971555e-15 +0.j,
|
Chris@87
|
27 -1.51308713e-15 +0.j])
|
Chris@87
|
28 a = arange(13*13, dtype = float64)
|
Chris@87
|
29 a.shape = (13, 13)
|
Chris@87
|
30 a = a%17
|
Chris@87
|
31 va, ve = linalg.eig(a)
|
Chris@87
|
32 va.sort()
|
Chris@87
|
33 rva.sort()
|
Chris@87
|
34 assert_array_almost_equal(va, rva)
|
Chris@87
|
35
|
Chris@87
|
36 def test_eigh_build(self, level = rlevel):
|
Chris@87
|
37 """Ticket 662."""
|
Chris@87
|
38 rvals = [68.60568999, 89.57756725, 106.67185574]
|
Chris@87
|
39
|
Chris@87
|
40 cov = array([[ 77.70273908, 3.51489954, 15.64602427],
|
Chris@87
|
41 [3.51489954, 88.97013878, -1.07431931],
|
Chris@87
|
42 [15.64602427, -1.07431931, 98.18223512]])
|
Chris@87
|
43
|
Chris@87
|
44 vals, vecs = linalg.eigh(cov)
|
Chris@87
|
45 assert_array_almost_equal(vals, rvals)
|
Chris@87
|
46
|
Chris@87
|
47 def test_svd_build(self, level = rlevel):
|
Chris@87
|
48 """Ticket 627."""
|
Chris@87
|
49 a = array([[ 0., 1.], [ 1., 1.], [ 2., 1.], [ 3., 1.]])
|
Chris@87
|
50 m, n = a.shape
|
Chris@87
|
51 u, s, vh = linalg.svd(a)
|
Chris@87
|
52
|
Chris@87
|
53 b = dot(transpose(u[:, n:]), a)
|
Chris@87
|
54
|
Chris@87
|
55 assert_array_almost_equal(b, np.zeros((2, 2)))
|
Chris@87
|
56
|
Chris@87
|
57 def test_norm_vector_badarg(self):
|
Chris@87
|
58 """Regression for #786: Froebenius norm for vectors raises
|
Chris@87
|
59 TypeError."""
|
Chris@87
|
60 self.assertRaises(ValueError, linalg.norm, array([1., 2., 3.]), 'fro')
|
Chris@87
|
61
|
Chris@87
|
62 def test_lapack_endian(self):
|
Chris@87
|
63 # For bug #1482
|
Chris@87
|
64 a = array([[5.7998084, -2.1825367 ],
|
Chris@87
|
65 [-2.1825367, 9.85910595]], dtype='>f8')
|
Chris@87
|
66 b = array(a, dtype='<f8')
|
Chris@87
|
67
|
Chris@87
|
68 ap = linalg.cholesky(a)
|
Chris@87
|
69 bp = linalg.cholesky(b)
|
Chris@87
|
70 assert_array_equal(ap, bp)
|
Chris@87
|
71
|
Chris@87
|
72 def test_large_svd_32bit(self):
|
Chris@87
|
73 # See gh-4442, 64bit would require very large/slow matrices.
|
Chris@87
|
74 x = np.eye(1000, 66)
|
Chris@87
|
75 np.linalg.svd(x)
|
Chris@87
|
76
|
Chris@87
|
77 def test_svd_no_uv(self):
|
Chris@87
|
78 # gh-4733
|
Chris@87
|
79 for shape in (3, 4), (4, 4), (4, 3):
|
Chris@87
|
80 for t in float, complex:
|
Chris@87
|
81 a = np.ones(shape, dtype=t)
|
Chris@87
|
82 w = linalg.svd(a, compute_uv=False)
|
Chris@87
|
83 c = np.count_nonzero(np.absolute(w) > 0.5)
|
Chris@87
|
84 assert_equal(c, 1)
|
Chris@87
|
85 assert_equal(np.linalg.matrix_rank(a), 1)
|
Chris@87
|
86 assert_array_less(1, np.linalg.norm(a, ord=2))
|
Chris@87
|
87
|
Chris@87
|
88
|
Chris@87
|
89 if __name__ == '__main__':
|
Chris@87
|
90 run_module_suite()
|