def test_poly_exp_factory_no_asympt(test_f: Callable[[float], float]): """Test of (almost) exponential extrapolator.""" seeded_f = apply_seed_to_func(test_f, SEED) # test that, for a non-linear exponent, # order=1 is bad while order=2 is better. fac = PolyExpFactory(X_VALS, order=1, asymptote=None) fac.run_classical(seeded_f) assert not np.isclose(fac.reduce(), seeded_f(0, err=0), atol=NOT_CLOSE_TOL) seeded_f = apply_seed_to_func(test_f, SEED) fac = PolyExpFactory(X_VALS, order=2, asymptote=None) fac.run_classical(seeded_f) assert np.isclose(fac.reduce(), seeded_f(0, err=0), atol=POLYEXP_TOL)
def test_poly_exp_factory_with_asympt(test_f: Callable[[float], float], avoid_log: bool): """Test of (almost) exponential extrapolator.""" # test that, for a non-linear exponent, # order=1 is bad while order=2 is better. seeded_f = apply_seed_to_func(test_f, SEED) fac = PolyExpFactory(X_VALS, order=1, asymptote=A, avoid_log=avoid_log) fac.run_classical(seeded_f) assert not np.isclose(fac.reduce(), seeded_f(0, err=0), atol=NOT_CLOSE_TOL) seeded_f = apply_seed_to_func(test_f, SEED) fac = PolyExpFactory(X_VALS, order=2, asymptote=A, avoid_log=avoid_log) fac.run_classical(seeded_f) assert not fac._opt_params assert np.isclose(fac.reduce(), seeded_f(0, err=0), atol=POLYEXP_TOL) # There are four parameters to fit for the PolyExpFactory of order 1 assert len(fac._opt_params) == 4
def test_extrapolate_raises_error_on_complex_expectation_values(): with raises(ValueError, match="non-zero imaginary"): PolyExpFactory.extrapolate(scale_factors=[1, 2, 3], exp_values=[1, 0.5 + 1e-5j, 6], order=1)