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]
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]
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)
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)
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]
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]