Exemple #1
0
    def it_knows_its_n_tiles(self):
        n_tiles = 4
        score_tiler = ScoreTiler(RandomScorer(), (512, 512), n_tiles, 0)

        n_tiles_ = score_tiler.n_tiles

        assert type(n_tiles_) == int
        assert n_tiles_ == n_tiles
Exemple #2
0
    def it_knows_its_scorer(self):
        random_scorer = RandomScorer()
        score_tiler = ScoreTiler(random_scorer, (512, 512), 4, 0)

        scorer_ = score_tiler.scorer

        assert callable(scorer_)
        assert isinstance(scorer_, RandomScorer)
Exemple #3
0
    def it_knows_if_it_has_valid_tile_size(self, tmpdir, tile_size,
                                           expected_result):
        slide, _ = base_test_slide(tmpdir,
                                   PILIMG.RGBA_COLOR_500X500_155_249_240)
        score_tiler = ScoreTiler(RandomScorer(), tile_size, 2, 0)

        result = score_tiler._has_valid_tile_size(slide)

        assert type(result) == bool
        assert result == expected_result
Exemple #4
0
    def it_constructs_from_args(self, request):
        _init = initializer_mock(request, ScoreTiler)
        rs = RandomScorer()
        grid_tiler = ScoreTiler(rs, (512, 512), 4, 2, True, 0, "", ".png")

        _init.assert_called_once_with(ANY, rs, (512, 512), 4, 2, True, 0, "", ".png")

        assert isinstance(grid_tiler, ScoreTiler)
        assert isinstance(grid_tiler, GridTiler)
        assert isinstance(grid_tiler, Tiler)
Exemple #5
0
    def it_can_extract_score_tiles_and_save_report(self, request, tmpdir):
        _extract_tile = method_mock(request, Slide, "extract_tile")
        tmp_path_ = tmpdir.mkdir("myslide")
        image = PILIMG.RGBA_COLOR_500X500_155_249_240
        image.save(os.path.join(tmp_path_, "mywsi.png"), "PNG")
        slide_path = os.path.join(tmp_path_, "mywsi.png")
        slide = Slide(slide_path, os.path.join(tmp_path_, "processed"))
        coords = CP(0, 10, 0, 10)
        _tiles_generator = method_mock(
            request,
            ScoreTiler,
            "_tiles_generator",
        )
        tile = Tile(image, coords)
        _extract_tile.return_value = tile
        _tiles_generator.return_value = (
            [(0.8, coords), (0.7, coords)],
            [(0.8, coords), (0.7, coords)],
        )
        _tile_filename = method_mock(request, GridTiler, "_tile_filename")
        _tile_filename.side_effect = [
            f"tile_{i}_level2_0-10-0-10.png" for i in range(2)
        ]
        _save_report = method_mock(request,
                                   ScoreTiler,
                                   "_save_report",
                                   autospec=False)
        random_scorer = RandomScorer()
        score_tiler = ScoreTiler(random_scorer, (10, 10), 2, 0)
        binary_mask = BiggestTissueBoxMask()

        score_tiler.extract(slide, binary_mask, "report.csv")

        assert _extract_tile.call_args_list == [
            call(slide, coords, 0, (10, 10)),
            call(slide, coords, 0, (10, 10)),
        ]
        _tiles_generator.assert_called_with(score_tiler, slide, binary_mask)
        assert _tile_filename.call_args_list == [
            call(score_tiler, coords, 0),
            call(score_tiler, coords, 1),
        ]
        assert os.path.exists(
            os.path.join(tmp_path_, "processed",
                         "tile_0_level2_0-10-0-10.png"))
        assert os.path.exists(
            os.path.join(tmp_path_, "processed",
                         "tile_1_level2_0-10-0-10.png"))
        _save_report.assert_called_once_with(
            "report.csv",
            [(0.8, coords), (0.7, coords)],
            [(0.8, coords), (0.7, coords)],
            [f"tile_{i}_level2_0-10-0-10.png" for i in range(2)],
        )
Exemple #6
0
    def it_can_extract_score_tiles(self, request, tmpdir):
        _extract_tile = method_mock(request, Slide, "extract_tile")
        tmp_path_ = tmpdir.mkdir("myslide")
        image = PILIMG.RGBA_COLOR_500X500_155_249_240
        image.save(os.path.join(tmp_path_, "mywsi.png"), "PNG")
        slide_path = os.path.join(tmp_path_, "mywsi.png")
        slide = Slide(slide_path, os.path.join(tmp_path_, "processed"))
        _highest_score_tiles = method_mock(request, ScoreTiler, "_highest_score_tiles")
        coords = CP(0, 10, 0, 10)
        tile = Tile(image, coords)
        _extract_tile.return_value = tile
        _highest_score_tiles.return_value = (
            [(0.8, coords), (0.7, coords)],
            [(0.8, coords), (0.7, coords)],
        )
        _tile_filename = method_mock(request, GridTiler, "_tile_filename")
        _tile_filename.side_effect = [
            f"tile_{i}_level2_0-10-0-10.png" for i in range(2)
        ]
        _save_report = method_mock(request, ScoreTiler, "_save_report")
        random_scorer = RandomScorer()
        score_tiler = ScoreTiler(random_scorer, (10, 10), 2, 2)

        score_tiler.extract(slide)

        assert _extract_tile.call_args_list == [
            call(slide, coords, 2),
            call(slide, coords, 2),
        ]
        _highest_score_tiles.assert_called_once_with(score_tiler, slide)
        assert _tile_filename.call_args_list == [
            call(score_tiler, coords, 0),
            call(score_tiler, coords, 1),
        ]
        assert os.path.exists(
            os.path.join(tmp_path_, "processed", "tiles", "tile_0_level2_0-10-0-10.png")
        )
        assert os.path.exists(
            os.path.join(tmp_path_, "processed", "tiles", "tile_1_level2_0-10-0-10.png")
        )
        _save_report.assert_not_called()