Exemple #1
0
    def it_can_generate_random_tiles_with_no_check_tissue(
        self,
        request,
        tmpdir,
        tile1,
        tile2,
        has_enough_tissue,
        max_iter,
        expected_value,
        _random_tile_coordinates,
    ):
        slide, _ = base_test_slide(tmpdir,
                                   PILIMG.RGBA_COLOR_500X500_155_249_240)
        _extract_tile = method_mock(request, Slide, "extract_tile")
        _has_enough_tissue = method_mock(request, Tile, "has_enough_tissue")
        _has_enough_tissue.side_effect = has_enough_tissue * (max_iter // 2)
        tiles = [tile1, tile2]
        _extract_tile.side_effect = tiles * (max_iter // 2)
        random_tiler = RandomTiler(
            (10, 10),
            2,
            level=0,
            max_iter=max_iter,
            check_tissue=False,
        )

        generated_tiles = list(random_tiler._tiles_generator(slide))

        _random_tile_coordinates.assert_called_with(random_tiler, slide)
        _has_enough_tissue.assert_not_called()
        assert _random_tile_coordinates.call_count <= random_tiler.max_iter
        assert len(generated_tiles) == expected_value
        for i, tile in enumerate(generated_tiles):
            assert tile[0] == tiles[i]
Exemple #2
0
    def it_can_generate_random_tiles(
        self,
        request,
        tmpdir,
        tile1,
        tile2,
        check_tissue,
        has_enough_tissue,
        max_iter,
        expected_value,
        _random_tile_coordinates,
    ):
        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, "processed")
        _extract_tile = method_mock(request, Slide, "extract_tile")
        _has_enough_tissue = method_mock(request, Tile, "has_enough_tissue")
        _has_enough_tissue.side_effect = has_enough_tissue * (max_iter // 2)
        tiles = [tile1, tile2]
        _extract_tile.side_effect = tiles * (max_iter // 2)
        random_tiler = RandomTiler(
            (10, 10), 2, level=0, max_iter=max_iter, check_tissue=check_tissue
        )

        generated_tiles = list(random_tiler._tiles_generator(slide))

        _random_tile_coordinates.assert_called_with(random_tiler, slide)
        assert _random_tile_coordinates.call_count <= random_tiler.max_iter
        assert len(generated_tiles) == expected_value
        for i, tile in enumerate(generated_tiles):
            assert tile[0] == tiles[i]
Exemple #3
0
    def it_can_generate_random_tiles_even_when_coords_are_not_valid(
        self, tmpdir, _random_tile_coordinates
    ):
        random_tiler = RandomTiler((10, 10), 1, level=0, max_iter=1, check_tissue=False)
        _random_tile_coordinates.side_effect = [CP(-1, -1, -1, -1), CP(0, 10, 0, 10)]
        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, "processed")

        generated_tiles = list(random_tiler._tiles_generator(slide))

        assert generated_tiles[0][1] == CP(0, 10, 0, 10)
        assert isinstance(generated_tiles[0][0], Tile)
Exemple #4
0
    def it_can_generate_random_tiles_even_when_coords_are_not_valid(
            self, tmpdir, _random_tile_coordinates):
        random_tiler = RandomTiler((10, 10),
                                   1,
                                   level=0,
                                   max_iter=1,
                                   check_tissue=False)
        _random_tile_coordinates.side_effect = [
            CP(-1, -1, -1, -1), CP(0, 10, 0, 10)
        ]
        slide, _ = base_test_slide(tmpdir,
                                   PILIMG.RGBA_COLOR_500X500_155_249_240)

        generated_tiles = list(random_tiler._tiles_generator(slide))

        assert generated_tiles[0][1] == CP(0, 10, 0, 10)
        assert isinstance(generated_tiles[0][0], Tile)
Exemple #5
0
    def it_can_generate_random_tiles_with_check_tissue(
        self,
        request,
        tmpdir,
        tile1,
        tile2,
        has_enough_tissue,
        max_iter,
        expected_value,
        _random_tile_coordinates,
    ):
        slide, _ = base_test_slide(tmpdir,
                                   PILIMG.RGBA_COLOR_500X500_155_249_240)
        _extract_tile = method_mock(request, Slide, "extract_tile")
        _has_enough_tissue = method_mock(request, Tile, "has_enough_tissue")
        _has_enough_tissue.side_effect = has_enough_tissue * (max_iter // 2)
        binary_mask = BiggestTissueBoxMask()
        tiles = [tile1, tile2]
        _extract_tile.side_effect = tiles * (max_iter // 2)
        random_tiler = RandomTiler(
            (10, 10),
            2,
            level=0,
            max_iter=max_iter,
            check_tissue=True,
            tissue_percent=60,
        )

        generated_tiles = list(
            random_tiler._tiles_generator(slide, binary_mask))

        _random_tile_coordinates.assert_called_with(random_tiler, slide,
                                                    binary_mask)
        assert _has_enough_tissue.call_args_list == [
            call(tile1, 60), call(tile2, 60)
        ]
        assert _random_tile_coordinates.call_count <= random_tiler.max_iter
        assert len(generated_tiles) == expected_value
        for i, tile in enumerate(generated_tiles):
            assert tile[0] == tiles[i]
Exemple #6
0
    def it_can_generate_random_tiles_with_check_tissue_but_tiles_without_tissue(
        self,
        request,
        tmpdir,
        _random_tile_coordinates,
    ):
        slide, _ = base_test_slide(tmpdir,
                                   PILIMG.RGBA_COLOR_500X500_155_249_240)
        _extract_tile = method_mock(request, Slide, "extract_tile")
        _has_enough_tissue = method_mock(request, Tile, "has_enough_tissue")
        _has_enough_tissue.side_effect = [False, False] * 5
        binary_mask = BiggestTissueBoxMask()
        tiles = [
            Tile(PILIMG.RGBA_COLOR_500X500_155_249_240, CP(0, 10, 0, 10)),
            Tile(PILIMG.RGBA_COLOR_500X500_155_249_240, CP(0, 10, 0, 10)),
        ]
        _extract_tile.side_effect = tiles * 5
        random_tiler = RandomTiler(
            (10, 10),
            2,
            level=0,
            max_iter=10,
            check_tissue=True,
            tissue_percent=60,
        )

        generated_tiles = list(
            random_tiler._tiles_generator(slide, binary_mask))

        _random_tile_coordinates.assert_called_with(random_tiler, slide,
                                                    binary_mask)
        assert (_has_enough_tissue.call_args_list == [
            call(tiles[0], 60),
            call(tiles[1], 60),
        ] * 5)
        assert _random_tile_coordinates.call_count <= random_tiler.max_iter
        assert len(generated_tiles) == 0
        for i, tile in enumerate(generated_tiles):
            assert tile[0] == tiles[i]