def test_2D(self): # square E = np.array([[2, 0], [0, 2]]) L = Lattice(E) PG1 = L.point_group() # centered rectangle E = np.array([[1., -1.], [1.5, 1.5]]) L = Lattice(E) self.assertEqual(L.dimension(), 2) PG_expected = [ [[1, 0], [0, 1]], [[-1, 0], [0, -1]], [[1, 0], [0, -1]], [[-1, 0], [0, 1]] ] PG2 = L.point_group() for Q in PG2.matrices(): self.assertTrue(Q.tolist() in PG_expected) self.assertTrue(PG1.hassubgroup(PG2)) # hexagonal E = [[2., 1.], [0., 1.73205081]] L = Lattice(E) self.assertEqual(L.Laue_group().order(), 6) self.assertEqual(L.point_group().order(), 12) # a random lattice E = 10 * np.random.rand(2, 2) while la.det(E) <= 0: E = 10 * np.random.rand(2, 2) L = Lattice(E) # lattice_group, point_group relationship PG = L.point_group().matrices() LG = L.lattice_group().matrices() LaueG = [m.tolist() for m in L.Laue_group().matrices()] SLG = [m.tolist() for m in L.special_lattice_group().matrices()] for Q in PG: self.assertTrue(L.inpointgroup(Q)) if Q.tolist() in LaueG: self.assertTrue(la.det(Q) == 1) else: self.assertTrue(la.det(Q) == -1) # QE = EM M = np.rint(la.inv(E).dot(Q.dot(E))) self.assertTrue(L.inlatticegroup(M)) for M in LG: self.assertEqual(L, Lattice(L.base().dot(M))) if M.tolist() in SLG: self.assertTrue(la.det(M) == 1) else: self.assertTrue(la.det(M) == -1) # QE = EM Q = E.dot(M).dot(la.inv(E)) self.assertTrue(L.inpointgroup(Q))
def test_2D(self): # square E = np.array([[2, 0], [0, 2]]) L = Lattice(E) PG1 = L.point_group() # centered rectangle E = np.array([[1., -1.], [1.5, 1.5]]) L = Lattice(E) self.assertEqual(L.dimension(), 2) PG_expected = [[[1, 0], [0, 1]], [[-1, 0], [0, -1]], [[1, 0], [0, -1]], [[-1, 0], [0, 1]]] PG2 = L.point_group() for Q in PG2.matrices(): self.assertTrue(Q.tolist() in PG_expected) self.assertTrue(PG1.hassubgroup(PG2)) # hexagonal E = [[2., 1.], [0., 1.73205081]] L = Lattice(E) self.assertEqual(L.Laue_group().order(), 6) self.assertEqual(L.point_group().order(), 12) # a random lattice E = 10 * np.random.rand(2, 2) while la.det(E) <= 0: E = 10 * np.random.rand(2, 2) L = Lattice(E) # lattice_group, point_group relationship PG = L.point_group().matrices() LG = L.lattice_group().matrices() LaueG = [m.tolist() for m in L.Laue_group().matrices()] SLG = [m.tolist() for m in L.special_lattice_group().matrices()] for Q in PG: self.assertTrue(L.inpointgroup(Q)) if Q.tolist() in LaueG: self.assertTrue(la.det(Q) == 1) else: self.assertTrue(la.det(Q) == -1) # QE = EM M = np.rint(la.inv(E).dot(Q.dot(E))) self.assertTrue(L.inlatticegroup(M)) for M in LG: self.assertEqual(L, Lattice(L.base().dot(M))) if M.tolist() in SLG: self.assertTrue(la.det(M) == 1) else: self.assertTrue(la.det(M) == -1) # QE = EM Q = E.dot(M).dot(la.inv(E)) self.assertTrue(L.inpointgroup(Q))
def test_construction(self): E = np.eye(4).tolist() L = Lattice(E) self.assertEqual(L.dimension(), 4) self.assertListEqual(L.base()[:, 0].tolist(), [1, 0, 0, 0]) # not matrix E = "adfda" self.assertRaises(ValueError, Lattice, E) # det E = 0 E = [[1, 0, 0], [0, 0, 0], [0, 0, 1]] self.assertRaises(ValueError, Lattice, E) # 0 dimension E = [] self.assertRaises(ValueError, Lattice, E)