Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
 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))