Skip to content

Commit

Permalink
Merge b24dcb3 into 3541606
Browse files Browse the repository at this point in the history
  • Loading branch information
ernestoarbitrio committed Aug 27, 2020
2 parents 3541606 + b24dcb3 commit 4e83d24
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 24 deletions.
1 change: 0 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ def ascii_bytes_from(path, *paths):
"scipy",
"openslide-wrapper",
"typing_extensions",
"pandas",
]

test_requires = ["pytest", "coverage", "pytest-cov==2.8.1", "coveralls"]
Expand Down
16 changes: 11 additions & 5 deletions src/histolab/tiler.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import csv
import os
from abc import abstractmethod
from typing import List, Tuple

import numpy as np
import pandas as pd

from .exceptions import LevelError
from .scorer import Scorer
Expand Down Expand Up @@ -611,10 +611,16 @@ def _save_report(
List of the tiles' filename
"""

report = pd.DataFrame(
{"filename": filenames, "score": np.array(highest_score_tiles)[:, 0]}
)
report.to_csv(report_path, index=None)
header = ["filename", "score"]
rows = [
dict(zip(header, values))
for values in zip(filenames, np.array(highest_score_tiles)[:, 0])
]

with open(report_path, "w+") as f:
w = csv.DictWriter(f, fieldnames=header, delimiter=";")
w.writeheader()
w.writerows(rows)

def _scores(self, slide: Slide) -> List[Tuple[float, CoordinatePair]]:
"""Calculate the scores for all the tiles extracted from the ``slide``.
Expand Down
28 changes: 10 additions & 18 deletions tests/unit/test_tiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from unittest.mock import call

import numpy as np
import pandas as pd
import pytest

from histolab.exceptions import LevelError
Expand Down Expand Up @@ -366,7 +365,7 @@ class Describe_GridTiler(object):
def it_constructs_from_args(self, request):
_init = initializer_mock(request, GridTiler)

grid_tiler = GridTiler((512, 512), 2, True, 0, "", ".png",)
grid_tiler = GridTiler((512, 512), 2, True, 0, "", ".png")

_init.assert_called_once_with(ANY, (512, 512), 2, True, 0, "", ".png")
assert isinstance(grid_tiler, GridTiler)
Expand Down Expand Up @@ -493,9 +492,7 @@ def it_can_calculate_n_tiles_column(
assert type(n_tiles_column) == int
assert n_tiles_column == expected_n_tiles_column

def it_can_generate_grid_tiles(
self, request, tmpdir, grid_tiles_fixture,
):
def it_can_generate_grid_tiles(self, request, tmpdir, grid_tiles_fixture):
(
coords1,
coords2,
Expand Down Expand Up @@ -707,20 +704,14 @@ def grid_tiles_fixture(self, request):
has_enough_tissue,
expected_n_tiles,
) = request.param
return (
coords1,
coords2,
check_tissue,
has_enough_tissue,
expected_n_tiles,
)
return (coords1, coords2, check_tissue, has_enough_tissue, expected_n_tiles)


class Describe_ScoreTiler(object):
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",)
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")

Expand Down Expand Up @@ -859,15 +850,16 @@ def it_can_save_report(self, request, tmpdir):
filenames = ["tile0.png", "tile1.png"]
random_scorer_ = instance_mock(request, RandomScorer)
score_tiler = ScoreTiler(random_scorer_, (10, 10), 2, 2)
report_ = pd.DataFrame({"filename": filenames, "score": [0.8, 0.7]})
report_ = ["filename;score\n", "tile0.png;0.8\n", "tile1.png;0.7\n"]

score_tiler._save_report(
os.path.join(tmp_path_, "report.csv"), highest_score_tiles, filenames
)

assert os.path.exists(os.path.join(tmp_path_, "report.csv"))
report = pd.read_csv(os.path.join(tmp_path_, "report.csv"))
pd.testing.assert_frame_equal(report, report_)
with open(os.path.join(tmp_path_, "report.csv")) as f:
report = f.readlines()
assert report == report_

def it_can_extract_score_tiles_and_save_report(self, request, tmpdir):
_extract_tile = method_mock(request, Slide, "extract_tile")
Expand Down Expand Up @@ -946,8 +938,8 @@ def it_can_extract_score_tiles_and_save_report(self, request, tmpdir):
(0.5, CoordinatePair(0, 10, 0, 10)),
],
),
),
)
)
def highest_score_tiles_fixture(self, request):
(n_tiles, expected_highest_score_tiles,) = request.param
(n_tiles, expected_highest_score_tiles) = request.param
return (n_tiles, expected_highest_score_tiles)

0 comments on commit 4e83d24

Please sign in to comment.