def test_control_separation(request, setup_deps, temp_model): """Check that mdl.alpha and slvr.alpha are distinct functions""" setup_deps.set_case_dependency( request, ["test_init_model", "test_initialize_fields"]) work_dir = temp_model["work_dir"] toml_file = temp_model["toml_filename"] mdl = init_model(work_dir, toml_file) initialize_fields(mdl) initialize_vel_obs(mdl) slvr = solver.ssa_solver(mdl) slvr.alpha.vector()[:] = 1e3 slvr.alpha.vector().apply("insert") function_update_state(slvr.alpha) slvr.beta.vector()[:] = 1e3 slvr.beta.vector().apply("insert") function_update_state(slvr.beta) with pytest.raises(AttributeError): slvr.beta = 1.0 with pytest.raises(AttributeError): slvr.alpha = 1.0 norm_as = norm(slvr.alpha) norm_bs = norm(slvr.beta) norm_am = norm(mdl.alpha) norm_bm = norm(mdl.beta) assert norm_as != norm_am assert norm_bs != norm_bm
def test_run_inversion(persistent_temp_model, monkeypatch): work_dir = persistent_temp_model["work_dir"] toml_file = persistent_temp_model["toml_filename"] # Switch to the working directory monkeypatch.chdir(work_dir) # Get expected values from the toml file params = config.ConfigParser(toml_file, top_dir=work_dir) expected_cntrl_norm = params.testing.expected_cntrl_norm expected_J_inv = params.testing.expected_J_inv EQReset() # Run the thing mdl_out = run_inv.run_inv(toml_file) cntrl = mdl_out.solvers[0].get_control()[0] cntrl_norm = norm(cntrl.vector()) J_inv = mdl_out.solvers[0].J_inv.value() pytest.check_float_result(cntrl_norm, expected_cntrl_norm, work_dir, 'expected_cntrl_norm') pytest.check_float_result(J_inv, expected_J_inv, work_dir, 'expected_J_inv')
def test_run_eigendec(existing_temp_model, monkeypatch, setup_deps): work_dir = existing_temp_model["work_dir"] toml_file = existing_temp_model["toml_filename"] # Switch to the working directory monkeypatch.chdir(work_dir) # Get expected values from the toml file params = config.ConfigParser(toml_file, top_dir=work_dir) expected_evals_sum = params.testing.expected_evals_sum expected_evec0_norm = params.testing.expected_evec0_norm EQReset() mdl_out = run_eigendec.run_eigendec(toml_file) slvr = mdl_out.solvers[0] evals_sum = np.sum(slvr.eigenvals) evec0_norm = norm(slvr.eigenfuncs[0]) tol = 1e-5 pytest.check_float_result(evals_sum, expected_evals_sum, work_dir, 'expected_evals_sum', tol=tol) pytest.check_float_result(evec0_norm, expected_evec0_norm, work_dir, 'expected_evec0_norm', tol=tol)
def test_run_forward(existing_temp_model, monkeypatch, setup_deps): work_dir = existing_temp_model["work_dir"] toml_file = existing_temp_model["toml_filename"] # Switch to the working directory monkeypatch.chdir(work_dir) # Get expected values from the toml file params = config.ConfigParser(toml_file, top_dir=work_dir) expected_delta_qoi = params.testing.expected_delta_qoi expected_u_norm = params.testing.expected_u_norm EQReset() mdl_out = run_forward.run_forward(toml_file) slvr = mdl_out.solvers[0] delta_qoi = slvr.Qval_ts[-1] - slvr.Qval_ts[0] u_norm = norm(slvr.U) pytest.check_float_result(delta_qoi, expected_delta_qoi, work_dir, 'expected_delta_qoi', tol=1.0e-5) pytest.check_float_result(u_norm, expected_u_norm, work_dir, 'expected_u_norm', tol=1.0e-5)
def test_run_invsigma(existing_temp_model, monkeypatch, setup_deps): work_dir = existing_temp_model["work_dir"] toml_file = existing_temp_model["toml_filename"] # Switch to the working directory monkeypatch.chdir(work_dir) # Get expected values from the toml file params = config.ConfigParser(toml_file, top_dir=work_dir) expected_cntrl_sigma_norm = params.testing.expected_cntrl_sigma_norm expected_cntrl_sigma_prior_norm = params.testing.expected_cntrl_sigma_prior_norm EQReset() mdl_out = run_invsigma.run_invsigma(toml_file) cntrl_sigma_norm = sum([norm(sig) for sig in mdl_out.cntrl_sigma]) cntrl_sigma_prior_norm = sum( [norm(sig) for sig in mdl_out.cntrl_sigma_prior]) if pytest.parallel: tol = 1e-5 else: tol = 1e-5 pytest.check_float_result(cntrl_sigma_norm, expected_cntrl_sigma_norm, work_dir, "expected_cntrl_sigma_norm", tol=tol) pytest.check_float_result(cntrl_sigma_prior_norm, expected_cntrl_sigma_prior_norm, work_dir, "expected_cntrl_sigma_prior_norm", tol=tol)
def test_gen_init_alpha(request, setup_deps, temp_model): """Attempt to generate initial guess for alpha""" setup_deps.set_case_dependency( request, ["test_init_model", "test_initialize_fields"]) work_dir = temp_model["work_dir"] toml_file = temp_model["toml_filename"] mdl = init_model(work_dir, toml_file) initialize_fields(mdl) initialize_vel_obs(mdl) expected_init_alpha = mdl.params.testing.expected_init_alpha # Generate initial guess for alpha mdl.gen_alpha() alpha_norm = norm(mdl.alpha.vector()) # TODO - won't properly set expected value when --remake, because # pytest.active_cases doesn't exist yet pytest.check_float_result(alpha_norm, expected_init_alpha, work_dir, 'expected_init_alpha')