from .conftest import EXAMPLE_DIR_WO_PARAMS, EXAMPLE_DIR_WITH_PARAMS def test_search_measurement_params_file_ok(example_dir): from sensospot_data.parameters import _search_measurement_params_file result = _search_measurement_params_file( example_dir / EXAMPLE_DIR_WITH_PARAMS ) assert result.suffix == ".svexp" def test_search_measurement_params_file_no_parameters_folder(example_dir): from sensospot_data.parameters import _search_measurement_params_file result = _search_measurement_params_file( example_dir / EXAMPLE_DIR_WO_PARAMS ) assert result is None def test_ssearch_measurement_params_file_parameters_file(tmpdir): from sensospot_data.parameters import _search_measurement_params_file params_dir = tmpdir / "Parameters" params_dir.mkdir() result = _search_measurement_params_file(tmpdir) assert result is None def test_parse_channel_info(example_dir): from sensospot_data.parameters import ( _parse_measurement_params, _search_measurement_params_file, ) params = _search_measurement_params_file( example_dir / EXAMPLE_DIR_WITH_PARAMS ) result = _parse_measurement_params(params) assert set(result.keys()) == {1, 2, 3} assert result[1] == ("green", 100) assert result[2] == ("red", 150) assert result[3] == ("red", 15) def test_get_measurement_params_file_found(example_dir): from sensospot_data.parameters import get_measurement_params result = get_measurement_params(example_dir / EXAMPLE_DIR_WITH_PARAMS) assert set(result.keys()) == {1, 2, 3} assert result[1] == ("green", 100) assert result[2] == ("red", 150) assert result[3] == ("red", 15) def test_get_measurement_params_file_not_found(example_dir): from sensospot_data.parameters import get_measurement_params result = get_measurement_params(example_dir / EXAMPLE_DIR_WO_PARAMS) assert result is None def test_add_measurement_params(exposure_df): from sensospot_data.parameters import ExposureInfo, _add_measurement_params params = { 1: ExposureInfo("red", 10), 2: ExposureInfo("green", 20), 3: ExposureInfo("blue", 50), } result = _add_measurement_params(exposure_df, params) assert result["Exposure.Id"][0] == 1 assert result["Parameters.Channel"][0] == "red" assert result["Parameters.Time"][0] == 10 assert result["Exposure.Id"][1] == 2 assert result["Parameters.Channel"][1] == "green" assert result["Parameters.Time"][1] == 20 assert result["Exposure.Id"][2] == 3 assert result["Parameters.Channel"][2] == "blue" assert result["Parameters.Time"][2] == 50 def test_add_optional_measurement_parameters_with_params_file( exposure_df, example_dir ): from sensospot_data.parameters import add_optional_measurement_parameters folder = example_dir / EXAMPLE_DIR_WITH_PARAMS exposure_df = add_optional_measurement_parameters(exposure_df, folder) expected = [(1, "green", 100), (2, "red", 150), (3, "red", 15)] for exposure_id, channel, time in expected: mask = exposure_df["Exposure.Id"] == exposure_id example_row = exposure_df.loc[mask].iloc[0] assert example_row["Parameters.Channel"] == channel assert example_row["Parameters.Time"] == time def test_add_optional_measurement_parameters_without_params_file( exposure_df, example_dir ): from sensospot_data.parameters import add_optional_measurement_parameters folder = example_dir / EXAMPLE_DIR_WO_PARAMS exposure_df = add_optional_measurement_parameters(exposure_df, folder) for exposure_id in range(1, 4): mask = exposure_df["Exposure.Id"] == exposure_id one_exposure_data_frame = exposure_df.loc[mask] assert one_exposure_data_frame["Parameters.Channel"].hasnans assert one_exposure_data_frame["Parameters.Time"].hasnans def test_apply_map(exposure_df): from sensospot_data.parameters import _apply_map map = { 1: {"SomeColumn": "A", "OtherColumn": 9}, 2: {"SomeColumn": "B", "OtherColumn": 8}, 3: {"SomeColumn": "C", "OtherColumn": 7}, } result = _apply_map(exposure_df, map, "Exposure.Id") for key, value in map.items(): mask = result["Exposure.Id"] == key partial = result.loc[mask] assert set(partial["SomeColumn"].unique()) == {value["SomeColumn"]} assert set(partial["OtherColumn"].unique()) == {value["OtherColumn"]} def test_apply_map_keys_not_in_df(exposure_df): from sensospot_data.parameters import _apply_map map = { 1: {"some_col": "A", "other_col": 9}, 2: {"some_col": "B", "other_col": 8}, 3: {"some_col": "C", "other_col": 7}, 4: {"some_col": "D", "other_col": 6}, } result = _apply_map(exposure_df, map, "Exposure.Id") for key in (1, 2, 3): value = map[key] mask = result["Exposure.Id"] == key partial = result.loc[mask] assert set(partial["some_col"].unique()) == {value["some_col"]} assert set(partial["other_col"].unique()) == {value["other_col"]} assert "D" not in set(result["some_col"].unique()) assert "6" not in set(result["other_col"].unique()) def test_apply_map_not_all_keys_map_to_df(exposure_df): from sensospot_data.parameters import _apply_map map = { 1: {"some_col": "A", "other_col": 9}, 3: {"some_col": "C", "other_col": 7}, } result = _apply_map(exposure_df, map, "Exposure.Id") assert not result.iloc[0].hasnans assert result.iloc[1].hasnans assert not result.iloc[2].hasnans assert result["some_col"].hasnans assert result["other_col"].hasnans