From 3a2fdf48008537355ec381cbd77bf08e6971b8df Mon Sep 17 00:00:00 2001
From: Christoph Groth <christoph.groth@cea.fr>
Date: Mon, 17 Sep 2012 15:55:20 +0200
Subject: [PATCH] replace np.matrix with np.array in tests

np.matrix is not only slow, but it is an ill-behaved sequence:
m[0].ndim == m.ndim == 2

This causes problems when converting a numpy matrix to a tinyarray.
---
 kwant/solvers/tests/test_sparse.py | 54 +++++++++++++++---------------
 kwant/tests/test_system.py         | 18 +++++-----
 2 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/kwant/solvers/tests/test_sparse.py b/kwant/solvers/tests/test_sparse.py
index 174538e2..586fafac 100644
--- a/kwant/solvers/tests/test_sparse.py
+++ b/kwant/solvers/tests/test_sparse.py
@@ -22,8 +22,8 @@ def test_output():
     right_lead = kwant.Builder(kwant.TranslationalSymmetry([(1,)]))
     for b, site in [(system, chain(0)), (system, chain(1)),
                  (left_lead, chain(0)), (right_lead, chain(0))]:
-        h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-        h += h.H
+        h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+        h += h.conjugate().transpose()
         b[site] = h
     for b, hopp in [(system, (chain(0), chain(1))),
                     (left_lead, (chain(0), chain(1))),
@@ -36,11 +36,11 @@ def test_output():
     result1 = solve(fsys)
     s, modes1 = result1
     assert s.shape == 2 * (sum(i[2] for i in modes1),)
-    s1 = np.asmatrix(result1.submatrix(1, 0))
+    s1 = result1.submatrix(1, 0)
     s2, modes2 = solve(fsys, 0, [1], [0])
     assert s2.shape == (modes2[1][2], modes2[0][2])
     assert_almost_equal(s1, s2)
-    assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+    assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
     assert_raises(ValueError, solve, fsys, 0, [])
     modes = solve(fsys)[1]
     h = fsys.leads[0].slice_hamiltonian()
@@ -60,8 +60,8 @@ def test_one_lead():
     lead = kwant.Builder(kwant.TranslationalSymmetry([(-1,)]))
     for b, site in [(system, chain(0)), (system, chain(1)), (system, chain(2)),
                     (lead, chain(0))]:
-        h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-        h += h.H
+        h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+        h += h.conjugate().transpose()
         b[site] = h
     for b, hopp in [(system, (chain(0), chain(1))),
                     (system, (chain(1), chain(2))),
@@ -70,8 +70,8 @@ def test_one_lead():
     system.attach_lead(lead)
     fsys = system.finalized()
 
-    s = np.asmatrix(solve(fsys)[0])
-    assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+    s = solve(fsys)[0]
+    assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
 
 
 # Test that a translationally invariant system with two leads has only
@@ -79,7 +79,7 @@ def test_one_lead():
 def test_two_equal_leads():
     def check_fsys():
         s, leads = solve(fsys)[: 2]
-        assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+        assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
         n_modes = leads[0][2]
         assert leads[1][2] == n_modes
         assert_almost_equal(s[: n_modes, : n_modes], 0)
@@ -91,10 +91,10 @@ def test_two_equal_leads():
     np.random.seed(11)
     system = kwant.Builder()
     lead = kwant.Builder(kwant.TranslationalSymmetry([(1,)]))
-    h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-    h += h.H
+    h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+    h += h.conjugate().transpose()
     h *= 0.8
-    t = 4 * np.asmatrix(np.random.rand(n, n) + 4j * np.random.rand(n, n))
+    t = 4 * np.random.rand(n, n) + 4j * np.random.rand(n, n)
     lead[chain(0)] = system[chain(0)] = h
     lead[chain(0), chain(1)] = t
     system.attach_lead(lead)
@@ -119,11 +119,11 @@ def test_graph_system():
     lead = kwant.Builder(kwant.TranslationalSymmetry([(-1, 0)]))
     lead.default_site_group = system.default_site_group = square
 
-    h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-    h += h.H
+    h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+    h += h.conjugate().transpose()
     h *= 0.8
-    t = 4 * np.asmatrix(np.random.rand(n, n) + 4j * np.random.rand(n, n))
-    t1 = 4 * np.asmatrix(np.random.rand(n, n) + 4j * np.random.rand(n, n))
+    t = 4 * np.random.rand(n, n) + 4j * np.random.rand(n, n)
+    t1 = 4 * np.random.rand(n, n) + 4j * np.random.rand(n, n)
     lead[0, 0] = system[[(0, 0), (1, 0)]] = h
     lead[0, 1] = system[[(0, 1), (1, 1)]] = 4 * h
     for builder in [system, lead]:
@@ -135,7 +135,7 @@ def test_graph_system():
     fsys = system.finalized()
 
     s, leads = solve(fsys)[: 2]
-    assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+    assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
     n_modes = leads[0][2]
     assert_equal(leads[1][2], n_modes)
     assert_almost_equal(s[: n_modes, : n_modes], 0)
@@ -152,11 +152,11 @@ def test_singular_graph_system():
     system = kwant.Builder()
     lead = kwant.Builder(kwant.TranslationalSymmetry([(-1, 0)]))
     lead.default_site_group = system.default_site_group = square
-    h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-    h += h.H
+    h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+    h += h.conjugate().transpose()
     h *= 0.8
-    t = 4 * np.asmatrix(np.random.rand(n, n) + 4j * np.random.rand(n, n))
-    t1 = 4 * np.asmatrix(np.random.rand(n, n) + 4j * np.random.rand(n, n))
+    t = 4 * np.random.rand(n, n) + 4j * np.random.rand(n, n)
+    t1 = 4 * np.random.rand(n, n) + 4j * np.random.rand(n, n)
     lead[0, 0] = system[[(0, 0), (1, 0)]] = h
     lead[0, 1] = system[[(0, 1), (1, 1)]] = 4 * h
     for builder in [system, lead]:
@@ -167,7 +167,7 @@ def test_singular_graph_system():
     fsys = system.finalized()
 
     s, leads = solve(fsys)[: 2]
-    assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+    assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
     n_modes = leads[0][2]
     assert leads[1][2] == n_modes
     assert_almost_equal(s[: n_modes, : n_modes], 0)
@@ -205,8 +205,8 @@ def test_tricky_singular_hopping():
     system.leads.append(kwant.builder.BuilderLead(lead, neighbors))
     fsys = system.finalized()
 
-    s = np.asmatrix(solve(fsys, -1.3)[0])
-    assert_almost_equal(s.H * s, np.identity(s.shape[0]))
+    s = solve(fsys, -1.3)[0]
+    assert_almost_equal(s.conjugate().transpose() * s, np.identity(s.shape[0]))
 
 
 # Test equivalence between self-energy and scattering matrix representations.
@@ -226,8 +226,8 @@ def test_self_energy():
     right_lead = kwant.Builder(kwant.TranslationalSymmetry([(1,)]))
     for b, site in [(system, chain(0)), (system, chain(1)),
                  (left_lead, chain(0)), (right_lead, chain(0))]:
-        h = np.asmatrix(np.random.rand(n, n) + 1j * np.random.rand(n, n))
-        h += h.H
+        h = np.random.rand(n, n) + 1j * np.random.rand(n, n)
+        h += h.conjugate().transpose()
         b[site] = h
     for b, hopp in [(system, (chain(0), chain(1))),
                     (left_lead, (chain(0), chain(1))),
@@ -238,7 +238,7 @@ def test_self_energy():
     fsys = system.finalized()
 
     t = solve(fsys, 0, [1], [0]).data
-    eig_should_be = np.linalg.eigvals(t * t.H)
+    eig_should_be = np.linalg.eigvals(t * t.conjugate().transpose())
     n_eig = len(eig_should_be)
 
     fsys.leads[1] = LeadWithOnlySelfEnergy(fsys.leads[1])
diff --git a/kwant/tests/test_system.py b/kwant/tests/test_system.py
index 893b4637..b2bb7fc4 100644
--- a/kwant/tests/test_system.py
+++ b/kwant/tests/test_system.py
@@ -16,7 +16,7 @@ def test_hamiltonian_submatrix():
     assert mat.shape == (3, 3)
     # Sorting is required due to unknown compression order of builder.
     perm = np.argsort(sys2.onsite_hamiltonians)
-    mat_should_be = np.mat('0 1j 0; -1j 0.5 2j; 0 -2j 1')
+    mat_should_be = np.array([[0, 1j, 0], [-1j, 0.5, 2j], [0, -2j, 1]])
 
     mat = mat[perm, :]
     mat = mat[:, perm]
@@ -30,27 +30,27 @@ def test_hamiltonian_submatrix():
     np.testing.assert_array_equal(mat, mat_should_be)
 
     mat = sys2.hamiltonian_submatrix(perm[[0, 1]], perm[[2]])[0]
-    np.testing.assert_array_equal(mat, mat_should_be[: 2, 2])
+    np.testing.assert_array_equal(mat, mat_should_be[:2, 2:3])
 
     mat = sys2.hamiltonian_submatrix(perm[[0, 1]], perm[[2]], sparse=True)[0]
     mat = mat.todense()
-    np.testing.assert_array_equal(mat, mat_should_be[: 2, 2])
+    np.testing.assert_array_equal(mat, mat_should_be[:2, 2:3])
 
     # Test for correct treatment of matrix input.
     sys = kwant.Builder()
     sys.default_site_group = kwant.lattice.Chain()
-    sys[(0,)] = np.mat('0 1j; -1j 0')
-    sys[(1,)] = np.mat('1')
-    sys[(2,)] = np.mat('2')
-    sys[(1,), (0,)] = np.mat('1 2j')
-    sys[(2,), (1,)] = np.mat('3j')
+    sys[(0,)] = np.array([[0, 1j], [-1j, 0]])
+    sys[(1,)] = np.array([[1]])
+    sys[(2,)] = np.array([[2]])
+    sys[(1,), (0,)] = np.array([[1, 2j]])
+    sys[(2,), (1,)] = np.array([[3j]])
     sys2 = sys.finalized()
     mat_dense = sys2.hamiltonian_submatrix()[0]
     mat_sp = sys2.hamiltonian_submatrix(sparse=True)[0].todense()
     np.testing.assert_array_equal(mat_sp, mat_dense)
 
     # Test for shape errors.
-    sys[(0,), (2,)] = np.mat('1 2')
+    sys[(0,), (2,)] = np.array([[1, 2]])
     sys2 = sys.finalized()
     assert_raises(ValueError, sys2.hamiltonian_submatrix)
     assert_raises(ValueError, sys2.hamiltonian_submatrix, None, None, True)
-- 
GitLab