class TestSymmetrySort(TestCase): def setUp(self): point_group = MagicMock(rotation_symmetry=[], reflection_symmetry=[], inversion_symmetry=[], label='C_{1}') molecule = MagicMock(nuclei_array=None, point_group=point_group) self.symmetry = Symmetry(molecule, []) def test_sort_indices_1(self): out = self.symmetry.sort_index(6, 2, 1, 0) testing.assert_array_equal(out, (0, 1, 2, 6)) def test_sort_indices_2(self): out = self.symmetry.sort_index(0, 0, 1, 0) testing.assert_array_equal(out, (0, 0, 0, 1)) def test_sort_indices_3(self): out = self.symmetry.sort_index(1, 0, 0, 0) testing.assert_array_equal(out, (0, 0, 0, 1)) def test_sort_indices_4(self): out = self.symmetry.sort_index(1, 0, 1, 0) testing.assert_array_equal(out, (0, 1, 0, 1)) def test_sort_indices_5(self): out = self.symmetry.sort_index(2, 2, 1, 0) testing.assert_array_equal(out, (0, 1, 2, 2)) def test_sort_indices_6(self): out = self.symmetry.sort_index(2, 1, 1, 0) testing.assert_array_equal(out, (0, 1, 1, 2)) def test_sort_indices_7(self): out = self.symmetry.sort_index(1, 1, 1, 0) testing.assert_array_equal(out, (0, 1, 1, 1)) def test_sort_indices_8(self): out = self.symmetry.sort_index(2, 1, 2, 0) testing.assert_array_equal(out, (0, 2, 1, 2)) def test_sort_indices_9(self): out = self.symmetry.sort_index(1, 1, 0, 2) testing.assert_array_equal(out, (0, 2, 1, 1))
def store_parallel(self, processes): keys = [] for a in range(self.matrix_size): for b in range(self.matrix_size): for c in range(self.matrix_size): for d in range(self.matrix_size): if not (a > b or c > d or a > c or (a == c and b > d)): keys.append((a, b, c, d)) pool = Pool(processes) values = pool.starmap(self.calculate, keys) repulsion_dict = dict(zip(keys, values)) repulsion_matrix = np.zeros((self.matrix_size, self.matrix_size, self.matrix_size, self.matrix_size)) for a in range(self.matrix_size): for b in range(self.matrix_size): for c in range(self.matrix_size): for d in range(self.matrix_size): repulsion_matrix.itemset((a, b, c, d), repulsion_dict[Symmetry.sort(a, b, c, d)]) return repulsion_matrix
def calculate(self, i, j, k, l): if Symmetry.check_sym(self.basis_set_array[i], self.basis_set_array[j], self.basis_set_array[k], self.basis_set_array[l]): f_mn = 0 primitive_array_i = self.basis_set_array[i].primitive_gaussian_array primitive_array_j = self.basis_set_array[j].primitive_gaussian_array primitive_array_k = self.basis_set_array[k].primitive_gaussian_array primitive_array_l = self.basis_set_array[l].primitive_gaussian_array for primitive_a in primitive_array_i: for primitive_b in primitive_array_j: for primitive_c in primitive_array_k: for primitive_d in primitive_array_l: c_1 = primitive_a.contraction c_2 = primitive_b.contraction c_3 = primitive_c.contraction c_4 = primitive_d.contraction n_1 = primitive_a.normalisation n_2 = primitive_b.normalisation n_3 = primitive_c.normalisation n_4 = primitive_d.normalisation integral = self.integral(primitive_a, primitive_b, primitive_c, primitive_d) f_mn += c_1 * c_2 * c_3 * c_4 * n_1 * n_2 * n_3 * n_4 * integral return f_mn else: return 0
def test_sort_indices_1(self): out = Symmetry.sort(6, 2, 1, 0) testing.assert_array_equal(out, (0, 1, 2, 6))
def test_sort_indices_9(self): out = Symmetry.sort(1, 1, 0, 2) testing.assert_array_equal(out, (0, 2, 1, 1))
def test_sort_indices_8(self): out = Symmetry.sort(2, 1, 2, 0) testing.assert_array_equal(out, (0, 2, 1, 2))
def test_sort_indices_2(self): out = Symmetry.sort(0, 0, 1, 0) testing.assert_array_equal(out, (0, 0, 0, 1))
def setUp(self): point_group = MagicMock(rotation_symmetry=[], reflection_symmetry=[], inversion_symmetry=[], label='C_{1}') molecule = MagicMock(nuclei_array=None, point_group=point_group) self.symmetry = Symmetry(molecule, [])