Skip to content

Commit 8cbc81b

Browse files
committed
Version bump + black + inference test
1 parent 2aff627 commit 8cbc81b

File tree

9 files changed

+93
-34
lines changed

9 files changed

+93
-34
lines changed

napari_cellseg3d/_tests/test_dock_widget.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66

77

88
def test_prepare(make_napari_viewer):
9-
path_image = str(
10-
Path(__file__).resolve().parent / "res/test.tif"
11-
)
9+
path_image = str(Path(__file__).resolve().parent / "res/test.tif")
1210
image = imread(str(path_image))
1311
viewer = make_napari_viewer()
1412
viewer.add_image(image)
@@ -18,4 +16,6 @@ def test_prepare(make_napari_viewer):
1816

1917
assert widget.filetype == ".tif"
2018
assert widget.as_folder == False
21-
assert Path(widget.csv_path) == (Path(__file__).resolve().parent / "res/_train0.csv")
19+
assert Path(widget.csv_path) == (
20+
Path(__file__).resolve().parent / "res/_train0.csv"
21+
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from tifffile import imread
2+
from pathlib import Path
3+
import warnings
4+
5+
from qtpy.QtWidgets import QTextEdit
6+
7+
from napari_cellseg3d.code_plugins.plugin_model_inference import Inferer
8+
9+
10+
class LogFixture(QTextEdit):
11+
def __init__(self):
12+
super(LogFixture, self).__init__()
13+
14+
def print_and_log(self, text, printing=None):
15+
print(text)
16+
17+
def warn(self, warning):
18+
warnings.warn(warning)
19+
20+
21+
def test_inference(make_napari_viewer, qtbot):
22+
23+
im_path = str(Path(__file__).resolve().parent / "res/test.tif")
24+
image = imread(im_path)
25+
26+
assert image.shape == (6, 6, 6)
27+
28+
viewer = make_napari_viewer()
29+
widget = Inferer(viewer)
30+
widget.log = LogFixture()
31+
viewer.window.add_dock_widget(widget)
32+
viewer.add_image(image)
33+
34+
assert len(viewer.layers) == 1
35+
36+
widget.window_infer_box.setChecked(True)
37+
widget.window_overlap_slider.setValue(0.0)
38+
widget.keep_data_on_cpu_box.setChecked(True)
39+
40+
assert widget.check_ready()
41+
42+
widget.start()
43+
assert widget.worker is not None
44+
45+
with qtbot.waitSignal(signal=widget.worker.finished) as blocker:
46+
blocker.connect(widget.worker.errored)
47+
48+
assert len(viewer.layers) == 2
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from napari_cellseg3d.code_plugins.plugin_utilities import Utilities
22
from napari_cellseg3d.code_plugins.plugin_utilities import UTILITIES_WIDGETS
33

4+
45
def test_utils_plugin(make_napari_viewer):
56
view = make_napari_viewer()
67
widget = Utilities(view)
78

89
view.window.add_dock_widget(widget)
910
for i, utils_name in enumerate(UTILITIES_WIDGETS.keys()):
1011
widget.utils_choice.setCurrentIndex(i)
11-
assert isinstance(widget.utils_widgets[i], UTILITIES_WIDGETS[utils_name])
12-
12+
assert isinstance(
13+
widget.utils_widgets[i], UTILITIES_WIDGETS[utils_name]
14+
)

napari_cellseg3d/_tests/test_review.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ def test_launch_review(make_napari_viewer):
1515
widget.folder_choice.setChecked(True)
1616
widget.image_filewidget.text_field = im_path
1717
widget.labels_filewidget.text_field = im_path
18-
widget.results_filewidget.text_field = str(Path(__file__).resolve().parent / "res")
18+
widget.results_filewidget.text_field = str(
19+
Path(__file__).resolve().parent / "res"
20+
)
1921

2022
widget.run_review()
2123
widget._viewer.close()
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from napari_cellseg3d.code_models.model_workers import WeightsDownloader, WEIGHTS_DIR
1+
from napari_cellseg3d.code_models.model_workers import (
2+
WeightsDownloader,
3+
WEIGHTS_DIR,
4+
)
25
from napari_cellseg3d.config import ModelInfo
36

47

@@ -8,12 +11,7 @@ def test_weight_download():
811

912
downloader = WeightsDownloader()
1013

11-
downloader.download_weights(
12-
info.name,
13-
info.get_model().get_weights_file()
14-
)
14+
downloader.download_weights(info.name, info.get_model().get_weights_file())
1515
result_path = WEIGHTS_DIR / str(info.get_model().get_weights_file())
1616

1717
assert result_path.is_file()
18-
19-

napari_cellseg3d/code_models/model_framework.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -119,25 +119,29 @@ def __init__(
119119

120120
def send_log(self, text):
121121
"""Emit a signal to print in a Log"""
122-
self.log.print_and_log(text)
122+
if self.log is not None:
123+
self.log.print_and_log(text)
123124

124125
def save_log(self):
125126
"""Saves the worker's log to disk at self.results_path when called"""
126-
log = self.log.toPlainText()
127-
128-
path = self.results_path
129-
130-
if len(log) != 0:
131-
with open(
132-
path + f"/Log_report_{utils.get_date_time()}.txt",
133-
"x",
134-
) as f:
135-
f.write(log)
136-
f.close()
127+
if self.log is not None:
128+
log = self.log.toPlainText()
129+
130+
path = self.results_path
131+
132+
if len(log) != 0:
133+
with open(
134+
path + f"/Log_report_{utils.get_date_time()}.txt",
135+
"x",
136+
) as f:
137+
f.write(log)
138+
f.close()
139+
else:
140+
warnings.warn(
141+
"No job has been completed yet, please start one or re-open the log window."
142+
)
137143
else:
138-
warnings.warn(
139-
"No job has been completed yet, please start one or re-open the log window."
140-
)
144+
warnings.warn(f"No logger defined : Log is {self.log}")
141145

142146
def save_log_to_path(self, path):
143147
"""Saves the worker log to a specific path. Cannot be used with connect.

napari_cellseg3d/code_models/model_workers.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def show_progress(count, block_size, total_size):
137137
url, reporthook=show_progress
138138
)
139139
with tarfile.open(filename, mode="r:gz") as tar:
140+
140141
def is_within_directory(directory, target):
141142

142143
abs_directory = Path(directory).resolve()
@@ -148,12 +149,16 @@ def is_within_directory(directory, target):
148149

149150
return abs_directory in abs_target.parents
150151

151-
def safe_extract(tar, path=".", members=None, *, numeric_owner=False):
152+
def safe_extract(
153+
tar, path=".", members=None, *, numeric_owner=False
154+
):
152155

153156
for member in tar.getmembers():
154157
member_path = str(Path(path) / member.name)
155158
if not is_within_directory(path, member_path):
156-
raise Exception("Attempted Path Traversal in Tar File")
159+
raise Exception(
160+
"Attempted Path Traversal in Tar File"
161+
)
157162

158163
tar.extractall(path, members, numeric_owner=numeric_owner)
159164

napari_cellseg3d/code_plugins/plugin_crop.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ def _start(self):
308308
else:
309309
self.image_layer1.opacity = 0.7
310310
self.image_layer1.colormap = "inferno"
311-
self.image_layer1.contrast_limits = [200, 1000] # TODO generalize
311+
self.image_layer1.contrast_limits = [200, 1000] # TODO generalize
312312

313313
self.image_layer1.refresh()
314314

@@ -334,7 +334,7 @@ def add_isotropic_layer(
334334
self,
335335
layer,
336336
colormap="inferno",
337-
contrast_lim= [200, 1000], # TODO generalize ?
337+
contrast_lim=[200, 1000], # TODO generalize ?
338338
opacity=0.7,
339339
visible=True,
340340
):

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = napari-cellseg3d
3-
version = 0.0.1rc4
3+
version = 0.0.2rc1
44
author = Cyril Achard, Maxime Vidal, Jessy Lauer, Mackenzie Mathis
55
66

0 commit comments

Comments
 (0)