def main1(): print('--------------------main1') np.random.seed(123) dm = DenMat(8, (2, 2, 2)) exact_evas = np.array([.1, .3, .3, .1, .2, .1, .6, .7]) exact_evas /= np.sum(exact_evas) print('evas of dm\n', np.sort(exact_evas)) dm.set_arr_to_rand_den_mat(exact_evas) pert = DenMatPertTheory.new_with_separable_dm0(dm, verbose=True) # print('evas of dm to 2nd order (after 1 step)\n', # np.sort(pert.evas_of_dm_to_2nd_order), # 'sum=', np.sum(pert.evas_of_dm_to_2nd_order)) # print('evas of dm\n', np.sort(evas)) # print('evas_of_dm0\n', pert.dm0_eigen_sys[0]) # # print('diag of del_dm in sbasis\n', # np.diag(pert.del_dm_in_sbasis.arr.real)) # print('del_dm\n', pert.del_dm) # dm0 = pert.get_dm0() # print('dm0\n', dm0) num_steps = 40 # print('evas_of_dm\n', evas) main_test(dm, exact_evas, pert, num_steps)
def main2(): print('--------------------main2') np.random.seed(123) dm1 = DenMat(3, (3,)) evas1 = np.array([.1, .1, .4]) evas1 /= np.sum(evas1) dm1.set_arr_to_rand_den_mat(evas1) # print('dm1\n', dm1) dm2 = DenMat(2, (2,)) evas2 = np.array([.8, .3]) evas2 /= np.sum(evas2) dm2.set_arr_to_rand_den_mat(evas2) # print('dm2\n', dm2) dm = DenMat.get_kron_prod_of_den_mats([dm1, dm2]) const = 0 # const = 1 dm.add_const_to_diag_of_arr(const) dm.normalize_diag_of_arr() print('kron evas\n', np.sort(ut.kron_prod([evas1, evas2]))) exact_evas = np.linalg.eigvalsh(dm.arr) print('evas_of_dm\n', exact_evas) pert = DenMatPertTheory.new_with_separable_dm0(dm, verbose=True) # print('evas of dm to 2nd order (after 1 step)\n', # np.sort(pert.evas_of_dm_to_2nd_order), # 'sum=', np.sum(pert.evas_of_dm_to_2nd_order)) num_steps = 10 main_test(dm, exact_evas, pert, num_steps)
def main1(): print('4 Bell Basis states**********************') for key in TwoQubitState.bell_key_set(): st_vec = TwoQubitState.get_bell_basis_st_vec(key) dm = DenMat(4, (2, 2)) dm.set_arr_from_st_vec(st_vec) ecase = PureStEnt(dm) pf = ecase.get_entang_profile() print('----------key:', key) print("st_vec=\n", st_vec) ecase.print_entang_profiles([pf], dm.row_shape) print("*******************************") dm1 = TwoQubitState.get_bell_basis_diag_dm(fid=.7) # print('arr=\n', dm1.arr) np.random.seed(123) dm2 = DenMat(4, (2, 2)) dm2.set_arr_to_rand_den_mat(np.array([.1, .2, .3, .4])) dm3 = DenMat(4, (2, 2)) dm3.set_arr_to_rand_den_mat(np.array([.1, .1, .1, .7])) for dm in [dm1, dm2, dm3]: print("----------new dm") print("formation_entang=", TwoQubitState.get_known_formation_entang(dm))