def test_decrease_difference_cluster(self):
     S1, S2 = read_vasp('POSCAR1',
                        iscluster=True), read_vasp('POSCAR2',
                                                   iscluster=True)
     SD = StructureDifference(S1, S2)
     A, B = SD.get_structure_decdistance_diff(2)
     self.assertEqual(np.shape(B)[0], 60)
 def test_decrease_difference_periodic(self):
     S1 = read_vasp('POSCAR_BN_2')
     S2 = read_vasp('POSCAR_BN_12.vasp')
     SD = StructureDifference(S1, S2)
     A, B = SD.get_structure_decdistance_diff(Rcut=2)
     self.assertLessEqual(A, 1e-4)
 def test_graphene(self):
     S = read_vasp('primitive_cell_cart.vasp')
     self.assertEqual(len(S.get_equivalent_atoms()), 1)
 def test_eigen_spectral(self):
     S = read_vasp('POSCAR_BN_12.vasp')
     S.draw_eig_spectra(atom_seq=range(12))
 def test_direct(self):
     S = read_vasp('primitive_cell_direct.vasp')
     self.assertEqual(np.shape(S.positions)[0], 8)
    def get_structure_decdistance_diff(self, Rcut=5):
        d1 = self._structure1.get_decrease_distance_matrix(Rcut=Rcut)
        d2 = self._structure2.get_decrease_distance_matrix(Rcut=Rcut)
        d = np.zeros((len(d1), len(d2)))
        for I in range(len(d1)):
            for J in range(len(d2)):
                eigval1, eigvec1 = ftk.get_EPA(d1[I])
                eigval2, eigvec2 = ftk.get_EPA(d2[J])
                n1, n2 = np.shape(eigvec1)[0], np.shape(eigvec2)[0]
                dd = np.zeros((n1, n2))
                for ii in range(n1):
                    for jj in range(n2):
                        dd[ii, jj] = ftk.d_EPF_atom(eigval1, eigval2,
                                                    eigvec1[ii], eigvec2[jj])
                row_ind, col_ind = linear_sum_assignment(dd)
                d[I, J] = dd[row_ind, col_ind].sum()
        row_ind, col_ind = linear_sum_assignment(d)
        corresponding_sequence = np.array(list(zip(row_ind, col_ind)))
        return d[row_ind, col_ind].sum(), corresponding_sequence[np.argsort(
            corresponding_sequence[:, 0])]


if __name__ == "__main__":
    from eigprofuc.io.vasp import read_vasp
    s = read_vasp('/home/hecc/Desktop/POSCAR14.vasp')
    import time
    a = time.time()
    for i in range(10):
        d1 = s.get_atomsdistance_decdistance(Rcut=3, isparallel=True)
    print(time.time() - a)