From 712a1f534a7bfd6e013cd445e4c07fd816ac9f5c Mon Sep 17 00:00:00 2001 From: foefl Date: Fri, 24 Oct 2025 10:46:08 +0200 Subject: [PATCH] add C# interface module, closes #4 --- .../_csharp_interface.py | 14 ++++ .../csharp_interface/window_19_fail_model.csv | 1 + .../window_19_fail_model_Heatmap.png | Bin 0 -> 89918 bytes tests/test_csharp_interface.py | 64 ++++++++++++++++++ tests/test_detection.py | 15 ++-- 5 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 src/dopt_sensor_anomalies/_csharp_interface.py create mode 100644 tests/_results/csharp_interface/window_19_fail_model.csv create mode 100644 tests/_results/csharp_interface/window_19_fail_model_Heatmap.png create mode 100644 tests/test_csharp_interface.py diff --git a/src/dopt_sensor_anomalies/_csharp_interface.py b/src/dopt_sensor_anomalies/_csharp_interface.py new file mode 100644 index 0000000..3602143 --- /dev/null +++ b/src/dopt_sensor_anomalies/_csharp_interface.py @@ -0,0 +1,14 @@ +from dopt_sensor_anomalies import detection + + +def sensor_anomalies_detection( + user_img_path: str, + pixels_per_metric_X: float, + pixels_per_metric_Y: float, +) -> None: + res = detection.pipeline( + user_img_path=user_img_path, + pixels_per_metric_X=pixels_per_metric_X, + pixels_per_metric_Y=pixels_per_metric_Y, + ) + res.unwrap() diff --git a/tests/_results/csharp_interface/window_19_fail_model.csv b/tests/_results/csharp_interface/window_19_fail_model.csv new file mode 100644 index 0000000..6d73f41 --- /dev/null +++ b/tests/_results/csharp_interface/window_19_fail_model.csv @@ -0,0 +1 @@ +1177,318;804,803;947509,0;876,575;808,853;709020,9;952,191;804,781;766305,3;944,223;792,829;748607,2;838,797;804,902;675148,9;1203,187;792,829;953921,4;0;0 diff --git a/tests/_results/csharp_interface/window_19_fail_model_Heatmap.png b/tests/_results/csharp_interface/window_19_fail_model_Heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4f4300eeb74873b09037ad5aa7d66a63848403 GIT binary patch literal 89918 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 literal 0 HcmV?d00001 diff --git a/tests/test_csharp_interface.py b/tests/test_csharp_interface.py new file mode 100644 index 0000000..7f16b7c --- /dev/null +++ b/tests/test_csharp_interface.py @@ -0,0 +1,64 @@ +import shutil +from unittest.mock import patch + +import pytest + +from dopt_sensor_anomalies import _csharp_interface, constants, errors + + +@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib") +def test_sensor_anomalies_detection_FailImagePath(setup_temp_dir): + img_path = str(setup_temp_dir / "not-existing.bmp") + pixels_per_metric_X: float = 0.251 + pixels_per_metric_Y: float = 0.251 + + MESSAGE = "The provided path seems not to exist" + + with pytest.raises(FileNotFoundError, match=MESSAGE): + _csharp_interface.sensor_anomalies_detection( + img_path, pixels_per_metric_X, pixels_per_metric_Y + ) + + +@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib") +def test_sensor_anomalies_detection_FailElectrodeCount(path_img_with_failure_ElectrodeCount): + img_path = str(path_img_with_failure_ElectrodeCount) + pixels_per_metric_X: float = 0.251 + pixels_per_metric_Y: float = 0.251 + + MESSAGE = "Number of counted electrodes does not match the" + + with pytest.raises(errors.InvalidElectrodeCount, match=MESSAGE): + _csharp_interface.sensor_anomalies_detection( + img_path, pixels_per_metric_X, pixels_per_metric_Y + ) + + +@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib") +def test_sensor_anomalies_detection_Success( + results_folder, path_img_with_failure_TrainedModel +): + # paths: check files for existence and delete because of other tests + root_img = path_img_with_failure_TrainedModel.parent + file_stem = path_img_with_failure_TrainedModel.stem + csv_file = root_img / f"{file_stem}.csv" + heatmap_file = root_img / f"{file_stem}{constants.HEATMAP_FILENAME_SUFFIX}.png" + if csv_file.exists(): + csv_file.unlink() + if heatmap_file.exists(): + heatmap_file.unlink() + + img_path = str(path_img_with_failure_TrainedModel) + pixels_per_metric_X: float = 0.251 + pixels_per_metric_Y: float = 0.251 + + _csharp_interface.sensor_anomalies_detection( + img_path, pixels_per_metric_X, pixels_per_metric_Y + ) + + assert csv_file.exists() + assert heatmap_file.exists() + target_folder = results_folder / "csharp_interface" + target_folder.mkdir(exist_ok=True) + shutil.copy(csv_file, (target_folder / csv_file.name)) + shutil.copy(heatmap_file, (target_folder / heatmap_file.name)) diff --git a/tests/test_detection.py b/tests/test_detection.py index 18874cd..9481fe4 100644 --- a/tests/test_detection.py +++ b/tests/test_detection.py @@ -150,6 +150,16 @@ def test_full_pipeline_wrapped_FailElectrodeCount(path_img_with_failure_Electrod @patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib") def test_full_pipeline_wrapped_Success(results_folder, path_img_with_failure_TrainedModel): + # paths: check files for existence and delete because of other tests + root_img = path_img_with_failure_TrainedModel.parent + file_stem = path_img_with_failure_TrainedModel.stem + csv_file = root_img / f"{file_stem}.csv" + heatmap_file = root_img / f"{file_stem}{constants.HEATMAP_FILENAME_SUFFIX}.png" + if csv_file.exists(): + csv_file.unlink() + if heatmap_file.exists(): + heatmap_file.unlink() + img_path = str(path_img_with_failure_TrainedModel) pixels_per_metric_X: float = 0.251 pixels_per_metric_Y: float = 0.251 @@ -159,11 +169,6 @@ def test_full_pipeline_wrapped_Success(results_folder, path_img_with_failure_Tra assert ret.status.code == 0 assert ret.status.ExceptionType is None - # check files for existence - root_img = path_img_with_failure_TrainedModel.parent - file_stem = path_img_with_failure_TrainedModel.stem - csv_file = root_img / f"{file_stem}.csv" - heatmap_file = root_img / f"{file_stem}{constants.HEATMAP_FILENAME_SUFFIX}.png" assert csv_file.exists() assert heatmap_file.exists() shutil.copy(csv_file, (results_folder / csv_file.name))