def test_ZeroTcorr_TDVP(method, evolve_dt, use_rk, rtol):
    # procedure = [[50, 0], [50, 0], [50, 0]]
    procedure = [[20, 0], [20, 0], [20, 0]]
    optimize_config = OptimizeConfig(procedure=procedure)

    mol_list = parameter.mol_list

    evolve_config = EvolveConfig(method, evolve_dt=evolve_dt, adaptive=False)
    evolve_config.tdvp_ps_rk4 = use_rk

    zero_t_corr = SpectraTwoWayPropZeroT(
        mol_list,
        "abs",
        optimize_config,
        evolve_config=evolve_config,
        offset=Quantity(2.28614053, "ev"),
    )
    zero_t_corr.info_interval = 30
    nsteps = 200
    # nsteps = 1200
    zero_t_corr.evolve(evolve_dt, nsteps)
    with open(
            os.path.join(
                cur_dir,
                "zero_t_%s.npy" % str(evolve_config.method).split(".")[1]),
            "rb",
    ) as f:
        ZeroTabs_std = np.load(f)
    assert np.allclose(zero_t_corr.autocorr[:nsteps],
                       ZeroTabs_std[:nsteps],
                       rtol=rtol)
def test_thermal_prop(mol_list, etot_std, occ_std, nsteps, evolve_method,
                      use_rk, rtol):
    init_mps = MpDm.max_entangled_ex(mol_list)
    mpo = Mpo(mol_list)
    beta = Quantity(298, "K").to_beta()
    evolve_time = beta / 2j
    if nsteps is None:
        evolve_config = EvolveConfig(evolve_method,
                                     adaptive=True,
                                     evolve_dt=beta / 100j)
    else:
        evolve_config = EvolveConfig(evolve_method)
    if evolve_method is EvolveMethod.tdvp_ps:
        evolve_config.tdvp_ps_rk4 = use_rk
    tp = ThermalProp(init_mps, mpo, evolve_config=evolve_config)
    tp.evolve(nsteps=nsteps, evolve_time=evolve_time)
    mps = tp.latest_mps
    MPO, HAM, Etot, A_el = mps.construct_hybrid_Ham(mpo, debug=True)

    assert np.allclose(Etot, etot_std, rtol=rtol)
    assert np.allclose(A_el, occ_std, rtol=rtol)
def test_finite_t_spectra_emi_TDVP(method, nsteps, evolve_dt, use_rk, rtol,
                                   interval):
    mol_list = parameter.mol_list
    temperature = Quantity(298, "K")
    offset = Quantity(2.28614053, "ev")
    evolve_config = EvolveConfig(method)
    evolve_config.tdvp_ps_rk4 = use_rk
    finite_t_corr = SpectraFiniteT(mol_list,
                                   "emi",
                                   temperature,
                                   50,
                                   offset,
                                   evolve_config=evolve_config)
    finite_t_corr.evolve(evolve_dt, nsteps)
    with open(
            os.path.join(
                cur_dir,
                "finite_t_%s.npy" % str(evolve_config.method).split(".")[1]),
            "rb",
    ) as fin:
        std = np.load(fin)
    assert np.allclose(finite_t_corr.autocorr[:nsteps],
                       std[:interval * nsteps:interval],
                       rtol=rtol)