def test_misfit_preprocessor_state_uneven_size(state_size): num_polynomials = len(state_size) poly_states = [range(1, size + 1) for size in state_size] observations, simulated = generate_measurements( num_polynomials, poly_states=poly_states, ensemble_size=30000, ) measured_data = MockedMeasuredData(observations, simulated) config = { "clustering": { "spearman_correlation": { "fcluster": { "t": num_polynomials + 1, "criterion": "maxclust" } } } } reporter_mock = Mock() configs = misfit_preprocessor.run(config, measured_data, reporter_mock) assert num_polynomials == len(configs), configs assert_homogen_clusters(configs)
def test_misfit_preprocessor_configuration_errors(): observations, simulated = generate_measurements(1) measured_data = MockedMeasuredData(observations, simulated) config = { "unknown_key": [], "clustering": {"spearman_correlation": {"fcluster": {"threshold": 1.0}}}, } reporter_mock = Mock() with pytest.raises(misfit_preprocessor.ValidationError) as ve: misfit_preprocessor.run(config, measured_data, reporter_mock) expected_err_msg = ( "Invalid configuration of misfit preprocessor\n" " - Unknown key: unknown_key (root level)\n" " - Unknown key: threshold (clustering.spearman_correlation.fcluster)\n" ) assert expected_err_msg == str(ve.value)
def test_misfit_preprocessor_state_size(state_size): num_polynomials = 5 poly_states = [range(1, size + 1) for size in state_size] observations, simulated = generate_measurements( num_polynomials, poly_states=poly_states, ensemble_size=30000, ) measured_data = MockedMeasuredData(observations, simulated) config = {} reporter_mock = Mock() configs = misfit_preprocessor.run(config, measured_data, reporter_mock) assert_homogen_clusters(configs) assert num_polynomials == len(configs), configs
def run(self, *args): config_record = _fetch_config_record(args) measured_record = _load_measured_record(self.ert()) scaling_configs = misfit_preprocessor.run( **{ "misfit_preprocessor_config": config_record, "measured_data": measured_record, "reporter": self.reporter, }) # The execution of COS should be moved into # misfit_preprocessor.run when COS no longer depend on self.ert # to run. scaling_params = _fetch_scaling_parameters(config_record, measured_record) for scaling_config in scaling_configs: scaling_config["CALCULATE_KEYS"].update(scaling_params) try: CorrelatedObservationsScalingJob(self.ert()).run(scaling_configs) except EmptyDatasetException: pass