def test_extract_too_many_values(): """Test that user friendly error message is displayed when an error occurs""" data = ["SENTENCE this is a string"] with pytest.raises(ValueError, match="SENTENCE"): design_kw.extract_key_value(data) with pytest.raises(ValueError, match="Too many values found"): design_kw.extract_key_value(data)
def test_single_cell_values(cellvalue, expected_parameters_str, tmpdir): """Test how certain single values go through the Excel input sheets and all the way to parameters.txt""" # pylint: disable=abstract-class-instantiated tmpdir.chdir() designsheet_df = pd.DataFrame(columns=["REAL", "SOMEKEY"], data=[[0, cellvalue]]) defaultssheet_df = pd.DataFrame() writer = pd.ExcelWriter("design_matrix.xlsx") designsheet_df.to_excel(writer, sheet_name="DesignSheet01", index=False) defaultssheet_df.to_excel(writer, sheet_name="DefaultValues", index=False, header=None) writer.save() params_file = "parameters.txt" design2params.run( 0, "design_matrix.xlsx", "DesignSheet01", "DefaultValues", params_file, log_level=logging.DEBUG, ) with open(params_file) as p_file: params_lines = p_file.readlines() key_vals = extract_key_value(params_lines) assert key_vals["SOMEKEY"] == expected_parameters_str
def test_extract_key_value_ok(): data = ["key1 14", "key2 24", "key3 34"] assert design_kw.extract_key_value(data) == { "key1": "14", "key2": "24", "key3": "34", }
def test_pair_cell_values(cellvalues, expected_parameters_strs, tmpdir): """Test how a pair of values, one for each realization, go through the Excel input sheets and all the way to parameters.txt. This is to ensure that differing datatypes in a single Excel columns does not affect individual values.""" # pylint: disable=abstract-class-instantiated tmpdir.chdir() designsheet_df = pd.DataFrame(columns=["REAL", "SOMEKEY"], data=[[0, cellvalues[0]], [1, cellvalues[1]]]) defaultssheet_df = pd.DataFrame() writer = pd.ExcelWriter("design_matrix.xlsx") designsheet_df.to_excel(writer, sheet_name="DesignSheet01", index=False) defaultssheet_df.to_excel(writer, sheet_name="DefaultValues", index=False, header=None) writer.save() params_0 = "parameters0.txt" design2params.run( 0, "design_matrix.xlsx", "DesignSheet01", "DefaultValues", params_0, log_level=logging.DEBUG, ) params_1 = "parameters1.txt" design2params.run( 1, "design_matrix.xlsx", "DesignSheet01", "DefaultValues", params_1, log_level=logging.DEBUG, ) with open(params_0) as p_file: params_lines_0 = p_file.readlines() with open(params_1) as p_file: params_lines_1 = p_file.readlines() key_vals_real0 = extract_key_value(params_lines_0) key_vals_real1 = extract_key_value(params_lines_1) assert key_vals_real0["SOMEKEY"] == expected_parameters_strs[0] assert key_vals_real1["SOMEKEY"] == expected_parameters_strs[1]
def _get_interpolation_values(int_param_wo_name, int_param_go_name, parameters_file_name="parameters.txt"): """ Given parameter names, obtain values to interpolate through from parameters.txt If only WaterOil is supplied, the GasOil interpolation value will be copied from the WaterOil value. Args: int_param_wo_name (string): parameter name (no genkw_prefix) for WaterOil int_param_go_name (string): parameter name (no genkw_prefix) for GasOil parameters_file_name (string): Text file to look for parameters in. Returns: tuple with two values, one for WaterOil and one for GasOil """ # Read all key-value pairs from parameters.txt if not os.path.exists(parameters_file_name): _logger.error("%s does not exists", parameters_file_name) raise IOError with open(parameters_file_name) as parameters_file: parameters = parameters_file.readlines() parameter_dict = extract_key_value(parameters) parameter_dict.update(rm_genkw_prefix(parameter_dict)) # Add some magic parameters: parameter_dict.update(MAGIC_CASES) if int_param_wo_name not in parameter_dict: _logger.error( "Requested parameter name %s not found in %s", int_param_wo_name, parameters_file_name, ) raise ValueError("Parameter name not found") int_param_wo = float(parameter_dict[int_param_wo_name]) _logger.info( "Collected %s from parameter.txt with value %f", int_param_wo_name, int_param_wo, ) int_param_go = int_param_wo if int_param_go_name not in parameter_dict: _logger.error( "Requested parameter name %s not found in %s", int_param_go_name, parameters_file_name, ) raise ValueError("Parameter name not found") int_param_go = float(parameter_dict[int_param_go_name]) if int_param_go_name != int_param_wo_name: _logger.info( "Collected %s from parameter.txt with value %f", int_param_go_name, int_param_go, ) return (int_param_wo, int_param_go)
def test_extract_value_with_space(): data = [ 'key4 "foo bar com"', 'key5 "conserve spaces"', ] assert design_kw.extract_key_value(data) == { "key4": "foo bar com", "key5": "conserve spaces", }
def test_extract_key_value_whitespace_error(): """Test that user friendly error message is displayed when an error occurs""" data = ['"FOO BAR COM " 2'] with pytest.raises(ValueError, match="FOO BAR COM"): design_kw.extract_key_value(data) with pytest.raises(ValueError, match="Quotes"): design_kw.extract_key_value(data) data = ["SENTENCE this is a string"] with pytest.raises(ValueError, match="SENTENCE"): design_kw.extract_key_value(data) with pytest.raises(ValueError, match="Spaces in values are not supported"): design_kw.extract_key_value(data)
def test_pair_cell_values(cellvalues, expected_parameters_strs, tmpdir): """Test how a pair of values, one for each realization, go through the Excel input sheets and all the way to parameters.txt. This is to ensure that differing datatypes in a single Excel columns does not affect individual values.""" tmpdir.chdir() write_design_xlsx( "design_matrix.xlsx", designdf=pd.DataFrame(columns=["REAL", "SOMEKEY"], data=[[0, cellvalues[0]], [1, cellvalues[1]]]), ) params_0 = "parameters0.txt" design2params.run( 0, "design_matrix.xlsx", parametersfilename=params_0, log_level=logging.DEBUG, ) params_1 = "parameters1.txt" design2params.run( 1, "design_matrix.xlsx", parametersfilename=params_1, log_level=logging.DEBUG, ) with open(params_0) as p_file: params_lines_0 = p_file.readlines() with open(params_1) as p_file: params_lines_1 = p_file.readlines() key_vals_real0 = extract_key_value(params_lines_0) key_vals_real1 = extract_key_value(params_lines_1) assert key_vals_real0["SOMEKEY"] == expected_parameters_strs[0] assert key_vals_real1["SOMEKEY"] == expected_parameters_strs[1]
def test_single_cell_values(cellvalue, expected_parameters_str, tmpdir): """Test how certain single values go through the Excel input sheets and all the way to parameters.txt""" tmpdir.chdir() write_design_xlsx( "design_matrix.xlsx", designdf=pd.DataFrame(columns=["REAL", "SOMEKEY"], data=[[0, cellvalue]]), ) params_file = "parameters.txt" design2params.run( 0, "design_matrix.xlsx", parametersfilename=params_file, log_level=logging.DEBUG, ) with open(params_file) as p_file: params_lines = p_file.readlines() key_vals = extract_key_value(params_lines) assert key_vals["SOMEKEY"] == expected_parameters_str
def test_extract_key_value_dup_key(): data = ["key1 14", "key2 24", "key1 34"] with pytest.raises(ValueError, match="multiple times"): design_kw.extract_key_value(data)
def test_extract_missing_value(): data = ["key1"] with pytest.raises(ValueError, match="No value found"): design_kw.extract_key_value(data)
def test_unsupported_quoting(): data = ['Unclosed " quote'] with pytest.raises(ValueError, match="No closing quotation"): design_kw.extract_key_value(data)
def test_extract_key_with_space(): data = ['"key x" "value with space"'] assert design_kw.extract_key_value(data) == {"key x": "value with space"}
def test_extract_key_value_dup_key(): data = ["key1 14", "key2 24", "key1 34"] with pytest.raises(SystemExit): design_kw.extract_key_value(data)