def test_get_methods_of_factories(): """Tests the get methods of a factory""" x_values = [0, 0, 1] y_values = [-1, 1, 0] fac = LinearFactory(x_values) fac._instack = [ { "scale_factor": 0 }, { "scale_factor": 0 }, { "scale_factor": 1 }, ] fac._outstack = y_values zne_reduce = fac.reduce() assert np.allclose(fac.get_expectation_values(), y_values) assert np.allclose(fac.get_extrapolation_curve()(0.0), zne_reduce) assert np.allclose(fac.get_optimal_parameters(), [0.0, 0.0]) assert np.allclose(fac.get_parameters_covariance(), [[3.0, -1.0], [-1.0, 1.0]]) assert np.allclose(fac.get_scale_factors(), x_values) assert np.allclose(fac.get_zero_noise_limit(), zne_reduce) assert np.allclose(fac.get_zero_noise_limit_error(), 1.0)
def test_push_after_already_reduced_warning(): """Tests a warning is raised if new data is pushed in a factory which was already reduced.""" fac = LinearFactory([1, 2]) fac.push({"scale_factor": 1.0}, 1.0) fac.push({"scale_factor": 2.0}, 2.0) fac.reduce() with warns( ExtrapolationWarning, match=r"You are pushing new data into a factory object", ): fac.push({"scale_factor": 3.0}, 3.0) # Assert no warning is raised when .reset() is used fac.reset() fac.push({"scale_factor": 1.0}, 2.0) fac.push({"scale_factor": 2.0}, 1.0) assert np.isclose(3.0, fac.reduce())
def test_linear_extr(): """Tests extrapolation with a LinearFactory.""" seeded_f = apply_seed_to_func(f_lin, SEED) fac = LinearFactory(X_VALS) assert not fac._opt_params fac.run_classical(seeded_f) assert np.isclose(fac.reduce(), seeded_f(0, err=0), atol=CLOSE_TOL) assert np.allclose(fac._opt_params, [B, A], atol=CLOSE_TOL)
def test_linear_extr(): """Tests extrapolation with a LinearFactory.""" seeded_f = apply_seed_to_func(f_lin, SEED) fac = LinearFactory(X_VALS) assert not fac._opt_params fac.run_classical(seeded_f) zne_value = fac.reduce() assert np.isclose(zne_value, seeded_f(0, err=0), atol=CLOSE_TOL) assert np.allclose(fac._opt_params, [B, A], atol=CLOSE_TOL) exp_vals = fac.get_expectation_values() assert np.isclose(fac.extrapolate(X_VALS, exp_vals), zne_value) assert np.isclose( fac.extrapolate(X_VALS, exp_vals, full_output=True)[0], zne_value, )