From 4400d00dd85dac958f5cf30d93d5e8d0d3afe68f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?T=C3=B3mas=20Rosdahl?= <torosdahl@gmail.com>
Date: Mon, 30 Jan 2017 17:18:14 +0000
Subject: [PATCH] test commutator in validate

---
 kwant/physics/tests/test_symmetry.py | 39 ++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/kwant/physics/tests/test_symmetry.py b/kwant/physics/tests/test_symmetry.py
index 4bb85a75..a2c97f56 100644
--- a/kwant/physics/tests/test_symmetry.py
+++ b/kwant/physics/tests/test_symmetry.py
@@ -10,9 +10,11 @@
 import numpy as np
 import scipy.linalg as la
 from scipy import sparse
+from scipy.sparse import csr_matrix as csr
 from pytest import raises
 from kwant.physics import DiscreteSymmetry
 import kwant
+from kwant._common import ensure_rng
 
 def test_projectors():
     """Test setting projectors"""
@@ -165,3 +167,40 @@ def test_validate():
     sym = DiscreteSymmetry(chiral=csr(np.diag((1, -1))))
     assert sym.validate(np.eye(2)) == 'Chiral'
     assert sym.validate(1 - np.eye(2)) is None
+
+
+def random_onsite_hop(n, rng=0):
+    rng = ensure_rng(rng)
+    onsite = rng.randn(n, n) + 1j * rng.randn(n, n)
+    onsite = onsite + onsite.T.conj()
+    hop = rng.rand(n, n) + 1j * rng.rand(n, n)
+    return onsite, hop
+
+
+def test_validate_commutator():
+    symm_class = ['AI', 'AII', 'D', 'C', 'AIII']
+    n = 10
+    rng = 10
+    for sym in symm_class:
+        # Random matrix in symmetry class
+        h = kwant.rmt.gaussian(n, sym, rng=rng)
+        if kwant.rmt.p(sym):
+            p_mat = np.array(kwant.rmt.h_p_matrix[sym])
+            p_mat = csr(np.kron(np.identity(n // len(p_mat)), p_mat))
+        else:
+            p_mat = None
+        if kwant.rmt.t(sym):
+            t_mat = np.array(kwant.rmt.h_t_matrix[sym])
+            t_mat = csr(np.kron(np.identity(n // len(t_mat)), t_mat))
+        else:
+            t_mat = None
+        if kwant.rmt.c(sym):
+            c_mat = csr(np.kron(np.identity(n // 2), np.diag([1, -1])))
+        else:
+            c_mat = None
+        disc_symm = DiscreteSymmetry(particle_hole=p_mat,
+                                     time_reversal=t_mat,
+                                     chiral=c_mat)
+        assert disc_symm.validate(h) == None
+        a = random_onsite_hop(n, rng=rng)[1]
+        assert disc_symm.validate(a) in ['Time reversal', 'Particle-hole', 'Chiral']
-- 
GitLab