Skip to content

Commit

Permalink
Handle exception in case of no tiles are extracted
Browse files Browse the repository at this point in the history
  • Loading branch information
alessiamarcolini committed Sep 5, 2020
1 parent 5c03206 commit fcde4e8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
6 changes: 5 additions & 1 deletion src/histolab/tiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -644,8 +644,12 @@ def _scores(self, slide: Slide) -> List[Tuple[float, CoordinatePair]]:
List of tuples containing the score and the extraction coordinates for each
tile. Each tuple represents a tile.
"""
grid_tiles = self._grid_tiles_generator(slide)
if next(self._grid_tiles_generator(slide), None) is None:
raise RuntimeError(
"No tiles have been generated. This could happen if `check_tissue=True`"
)

grid_tiles = self._grid_tiles_generator(slide)
scores = []

for tile, tile_wsi_coords in grid_tiles:
Expand Down
27 changes: 25 additions & 2 deletions tests/unit/test_tiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -745,21 +745,44 @@ def it_can_calculate_scores(self, request):
_grid_tiles_generator = method_mock(
request, ScoreTiler, "_grid_tiles_generator"
)
_grid_tiles_generator.return_value = [(tile, coords), (tile, coords)]
# it needs to be a generator
_grid_tiles_generator.return_value = ((tile, coords) for i in range(3))
_scorer = instance_mock(request, RandomScorer)
_scorer.side_effect = [0.5, 0.7]
score_tiler = ScoreTiler(_scorer, (10, 10), 2, 0)

scores = score_tiler._scores(slide)

_grid_tiles_generator.assert_called_once_with(score_tiler, slide)
assert _grid_tiles_generator.call_args_list == [
call(score_tiler, slide),
call(score_tiler, slide),
]
assert _scorer.call_args_list == [call(tile), call(tile)]
assert type(scores) == list
assert type(scores[0]) == tuple
assert type(scores[0][0]) == float
assert type(scores[0][1]) == CoordinatePair
assert scores == [(0.5, coords), (0.7, coords)]

def but_it_raises_runtimeerror_if_no_tiles_are_extracted(self, request):
slide = instance_mock(request, Slide)
_grid_tiles_generator = method_mock(
request, ScoreTiler, "_grid_tiles_generator"
)
# it needs to be an empty generator
_grid_tiles_generator.return_value = (n for n in [])
score_tiler = ScoreTiler(None, (10, 10), 2, 0)

with pytest.raises(RuntimeError) as err:
score_tiler._scores(slide)

_grid_tiles_generator.assert_called_once_with(score_tiler, slide)
assert isinstance(err.value, RuntimeError)
assert (
str(err.value)
== "No tiles have been generated. This could happen if `check_tissue=True`"
)

def it_can_calculate_highest_score_tiles(
self, request, highest_score_tiles_fixture
):
Expand Down

0 comments on commit fcde4e8

Please sign in to comment.