generated from dopt-python/py311
add full pipeline including tests
This commit is contained in:
@@ -1,36 +1,36 @@
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
from dopt_basics import result_pattern
|
||||
|
||||
import dopt_sensor_anomalies._find_paths
|
||||
import dopt_sensor_anomalies.detection as detect
|
||||
import dopt_sensor_anomalies.types as t
|
||||
from dopt_sensor_anomalies import constants
|
||||
from dopt_sensor_anomalies import constants, errors
|
||||
|
||||
# TODO remove
|
||||
# @pytest.fixture(scope="module")
|
||||
# def img_paths() -> tuple[Path, ...]:
|
||||
# img_folder = Path(__file__).parent / "_img"
|
||||
# if not img_folder.exists():
|
||||
# raise FileNotFoundError("Img path not existing")
|
||||
# img_paths = tuple(img_folder.glob("*.bmp"))
|
||||
# if not img_paths:
|
||||
# raise ValueError("No images found")
|
||||
# return img_paths
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def img_paths() -> tuple[Path, ...]:
|
||||
img_folder = Path(__file__).parent / "_img"
|
||||
if not img_folder.exists():
|
||||
raise FileNotFoundError("Img path not existing")
|
||||
img_paths = tuple(img_folder.glob("*.bmp"))
|
||||
if not img_paths:
|
||||
raise ValueError("No images found")
|
||||
return img_paths
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def single_img_path() -> Path:
|
||||
img_folder = Path(__file__).parent / "_img"
|
||||
if not img_folder.exists():
|
||||
raise FileNotFoundError("Img path not existing")
|
||||
img_paths = tuple(img_folder.glob("*_12.bmp"))
|
||||
if not img_paths:
|
||||
raise ValueError("No images found")
|
||||
return img_paths[0]
|
||||
# @pytest.fixture(scope="module")
|
||||
# def single_img_path() -> Path:
|
||||
# img_folder = Path(__file__).parent / "_img"
|
||||
# if not img_folder.exists():
|
||||
# raise FileNotFoundError("Img path not existing")
|
||||
# img_paths = tuple(img_folder.glob("*_12.bmp"))
|
||||
# if not img_paths:
|
||||
# raise ValueError("No images found")
|
||||
# return img_paths[0]
|
||||
|
||||
|
||||
def test_midpoint():
|
||||
@@ -90,7 +90,6 @@ def test_measure_length(single_img_path):
|
||||
assert img_right.shape[2] == 3
|
||||
|
||||
|
||||
@pytest.mark.new
|
||||
@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib")
|
||||
def test_isolated_pipeline(results_folder, path_img_with_failure_TrainedModel):
|
||||
pixels_per_metric_X: float = 0.251
|
||||
@@ -111,7 +110,7 @@ def test_isolated_pipeline(results_folder, path_img_with_failure_TrainedModel):
|
||||
assert sensor_images["left"] is not None
|
||||
assert sensor_images["right"] is not None
|
||||
detect.anomaly_detection(
|
||||
file_path=path_img_with_failure_TrainedModel,
|
||||
img_path=path_img_with_failure_TrainedModel,
|
||||
detection_models=DETECTION_MODELS,
|
||||
data_csv=data_csv,
|
||||
sensor_images=sensor_images,
|
||||
@@ -125,3 +124,57 @@ def test_isolated_pipeline(results_folder, path_img_with_failure_TrainedModel):
|
||||
assert heatmap_file.exists()
|
||||
shutil.copy(csv_file, (results_folder / csv_file.name))
|
||||
shutil.copy(heatmap_file, (results_folder / heatmap_file.name))
|
||||
|
||||
|
||||
@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib")
|
||||
def test_full_pipeline_wrapped_FailImagePath(setup_temp_dir):
|
||||
img_path = str(setup_temp_dir / "not-existing.bmp")
|
||||
MESSAGE = "The provided path seems not to exist"
|
||||
|
||||
pixels_per_metric_X: float = 0.251
|
||||
pixels_per_metric_Y: float = 0.251
|
||||
|
||||
ret = detect.pipeline(img_path, pixels_per_metric_X, pixels_per_metric_Y)
|
||||
assert ret.status != result_pattern.STATUS_HANDLER.SUCCESS
|
||||
assert ret.status.ExceptionType is FileNotFoundError
|
||||
assert ret.status.message == MESSAGE
|
||||
with pytest.raises(FileNotFoundError, match=MESSAGE):
|
||||
_ = ret.unwrap()
|
||||
|
||||
|
||||
@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib")
|
||||
def test_full_pipeline_wrapped_FailElectrodeCount(path_img_with_failure_ElectrodeCount):
|
||||
img_path = str(path_img_with_failure_ElectrodeCount)
|
||||
MESSAGE = "Number of counted electrodes does not match the"
|
||||
|
||||
pixels_per_metric_X: float = 0.251
|
||||
pixels_per_metric_Y: float = 0.251
|
||||
|
||||
ret = detect.pipeline(img_path, pixels_per_metric_X, pixels_per_metric_Y)
|
||||
assert ret.status != result_pattern.STATUS_HANDLER.SUCCESS
|
||||
assert ret.status.ExceptionType is errors.InvalidElectrodeCount
|
||||
assert MESSAGE in ret.status.message
|
||||
with pytest.raises(errors.InvalidElectrodeCount, match=MESSAGE):
|
||||
_ = ret.unwrap()
|
||||
|
||||
|
||||
@patch("dopt_sensor_anomalies._find_paths.STOP_FOLDER_NAME", "lib")
|
||||
def test_full_pipeline_wrapped_Success(results_folder, path_img_with_failure_TrainedModel):
|
||||
img_path = str(path_img_with_failure_TrainedModel)
|
||||
pixels_per_metric_X: float = 0.251
|
||||
pixels_per_metric_Y: float = 0.251
|
||||
|
||||
ret = detect.pipeline(img_path, pixels_per_metric_X, pixels_per_metric_Y)
|
||||
assert ret.status == result_pattern.STATUS_HANDLER.SUCCESS
|
||||
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))
|
||||
shutil.copy(heatmap_file, (results_folder / heatmap_file.name))
|
||||
|
||||
Reference in New Issue
Block a user