Skip to content

Commit e4e6f22

Browse files
committed
✅ Add test for objective power.
Signed-off-by: Shan E Ahmed Raza <[email protected]>
1 parent 94c2969 commit e4e6f22

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

tests/engines/test_patch_predictor.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,46 @@ def test_engine_run_wsi_annotation_store(
446446
shutil.rmtree(save_dir)
447447

448448

449+
def test_engine_run_wsi_annotation_store_power(
450+
sample_wsi_dict: dict,
451+
tmp_path: Path,
452+
) -> None:
453+
"""Test the engine run for Whole slide images."""
454+
# convert to pathlib Path to prevent wsireader complaint
455+
mini_wsi_svs = Path(sample_wsi_dict["wsi2_4k_4k_svs"])
456+
mini_wsi_msk = Path(sample_wsi_dict["wsi2_4k_4k_msk"])
457+
458+
eng = PatchPredictor(model="alexnet-kather100k")
459+
460+
patch_size = np.array([224, 224])
461+
save_dir = f"{tmp_path}/model_wsi_output"
462+
463+
kwargs = {
464+
"patch_input_shape": patch_size,
465+
"stride_shape": patch_size,
466+
"resolution": 20,
467+
"save_dir": save_dir,
468+
"units": "power",
469+
}
470+
471+
output = eng.run(
472+
images=[mini_wsi_svs],
473+
masks=[mini_wsi_msk],
474+
patch_mode=False,
475+
output_type="AnnotationStore",
476+
**kwargs,
477+
)
478+
479+
output_ = output[mini_wsi_svs]
480+
481+
assert output_.exists()
482+
assert output_.suffix == ".db"
483+
predictions = _extract_probabilities_from_annotation_store(output_)
484+
assert _validate_probabilities(predictions)
485+
486+
shutil.rmtree(save_dir)
487+
488+
449489
# -------------------------------------------------------------------------------------
450490
# Command Line Interface
451491
# -------------------------------------------------------------------------------------

tiatoolbox/models/engine/engine_abc.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,7 @@ def _calculate_scale_factor(dataloader: DataLoader) -> float | tuple[float, floa
10531053
# in this case dataloader resolution / slide resolution will be
10541054
# equal to dataloader resolution.
10551055

1056-
if dataloader_units in ["mpp", "level", "objective_power"]:
1056+
if dataloader_units in ["mpp", "level", "power"]:
10571057
wsimeta_dict = dataloader.dataset.reader.info.as_dict()
10581058

10591059
if dataloader_units == "mpp":
@@ -1065,8 +1065,8 @@ def _calculate_scale_factor(dataloader: DataLoader) -> float | tuple[float, floa
10651065
downsample_ratio = wsimeta_dict["level_downsamples"][dataloader_resolution]
10661066
return 1.0 / downsample_ratio, 1.0 / downsample_ratio
10671067

1068-
if dataloader_resolution == "objective_power":
1069-
slide_objective_power = wsimeta_dict["power"]
1068+
if dataloader_units == "power":
1069+
slide_objective_power = wsimeta_dict["objective_power"]
10701070
return (
10711071
dataloader_resolution / slide_objective_power,
10721072
dataloader_resolution / slide_objective_power,

0 commit comments

Comments
 (0)