Skip to content

Commit 7c631f6

Browse files
authored
Fix failing tox tests (#87)
* Disable the tutorial * Clean up tutorial after completion * Hide tutorial during testing * Break down tests into smaller units * Run black
1 parent 5e72106 commit 7c631f6

File tree

6 files changed

+132
-85
lines changed

6 files changed

+132
-85
lines changed

src/napari_deeplabcut/_tests/conftest.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import cv2
22
import numpy as np
3+
import os
4+
5+
os.environ["hide_tutorial"] = "True"
36
import pandas as pd
47
import pytest
58
from napari_deeplabcut import keypoints, _writer
69
from skimage.io import imsave
710

811

9-
@pytest.fixture # TODO Hack to make this fixture session-scoped
12+
@pytest.fixture
1013
def viewer(make_napari_viewer):
1114
viewer = make_napari_viewer()
1215
for action in viewer.window.plugins_menu.actions():
@@ -22,12 +25,15 @@ def fake_keypoints():
2225
n_animals = 2
2326
n_kpts = 3
2427
data = np.random.rand(n_rows, n_animals * n_kpts * 2)
25-
cols = pd.MultiIndex.from_product([
26-
["me"],
27-
[f"animal_{i}" for i in range(n_animals)],
28-
[f"kpt_{i}" for i in range(n_kpts)],
29-
["x", "y"]
30-
], names=["scorer", "individuals", "bodyparts", "coords"])
28+
cols = pd.MultiIndex.from_product(
29+
[
30+
["me"],
31+
[f"animal_{i}" for i in range(n_animals)],
32+
[f"kpt_{i}" for i in range(n_kpts)],
33+
["x", "y"],
34+
],
35+
names=["scorer", "individuals", "bodyparts", "coords"],
36+
)
3137
df = pd.DataFrame(data, columns=cols, index=range(n_rows))
3238
return df
3339

@@ -68,11 +74,12 @@ def config_path(tmp_path_factory):
6874
"colormap": "viridis",
6975
"video_sets": {
7076
"fake_video": [],
71-
}
77+
},
7278
}
7379
path = str(tmp_path_factory.mktemp("configs") / "config.yaml")
7480
_writer._write_config(
75-
path, params=cfg,
81+
path,
82+
params=cfg,
7683
)
7784
return path
7885

@@ -83,7 +90,7 @@ def video_path(tmp_path_factory):
8390
h = w = 50
8491
writer = cv2.VideoWriter(
8592
output_path,
86-
cv2.VideoWriter_fourcc(*'MJPG'),
93+
cv2.VideoWriter_fourcc(*"MJPG"),
8794
2,
8895
(w, h),
8996
)

src/napari_deeplabcut/_tests/test_keypoints.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,31 @@
22
from napari_deeplabcut import keypoints
33

44

5-
def test_store(store, fake_keypoints):
5+
def test_store_advance_step(store):
66
assert store.current_step == 0
77
store._advance_step(event=None)
88
assert store.current_step == 1
99

10+
11+
def test_store_labels(store, fake_keypoints):
1012
assert store.n_steps == fake_keypoints.shape[0]
1113
assert store.labels == list(
1214
fake_keypoints.columns.get_level_values("bodyparts").unique()
1315
)
1416

17+
18+
def test_store_find_first_unlabeled_frame(store, fake_keypoints):
19+
store._find_first_unlabeled_frame(event=None)
20+
assert store.current_step == store.n_steps - 1
21+
# Remove a frame to test whether it is correctly found
22+
ind_to_remove = 2
23+
data = store.layer.data
24+
store.layer.data = data[data[:, 0] != ind_to_remove]
25+
store._find_first_unlabeled_frame(event=None)
26+
assert store.current_step == ind_to_remove
27+
28+
29+
def test_store_keypoints(store, fake_keypoints):
1530
annotated_keypoints = store.annotated_keypoints
1631
assert len(annotated_keypoints) == fake_keypoints.shape[1] // 2
1732
assert annotated_keypoints[0].id == "animal_0"
@@ -26,15 +41,6 @@ def test_store(store, fake_keypoints):
2641
assert store.current_keypoint == kpt
2742
store.next_keypoint()
2843

29-
store._find_first_unlabeled_frame(event=None)
30-
assert store.current_step == store.n_steps - 1
31-
# Remove a frame to test whether it is correctly found
32-
ind_to_remove = 2
33-
data = store.layer.data
34-
store.layer.data = data[data[:, 0] != ind_to_remove]
35-
store._find_first_unlabeled_frame(event=None)
36-
assert store.current_step == ind_to_remove
37-
3844

3945
def test_point_resize(viewer, points):
4046
viewer.layers.selection.add(points)
@@ -46,7 +52,7 @@ def test_point_resize(viewer, points):
4652

4753

4854
def test_add_unnanotated(store):
49-
store.layer.metadata["controls"].label_mode = 'loop'
55+
store.layer.metadata["controls"].label_mode = "loop"
5056
ind_to_remove = 0
5157
data = store.layer.data
5258
store.layer.data = data[data[:, 0] != ind_to_remove]
@@ -59,10 +65,11 @@ def test_add_unnanotated(store):
5965

6066

6167
def test_add_quick(store):
62-
store.layer.metadata["controls"].label_mode = 'quick'
68+
store.layer.metadata["controls"].label_mode = "quick"
6369
store.current_keypoint = store._keypoints[0]
6470
coord = store.current_step, -1, -1
6571
keypoints._add(store, coord=coord)
6672
np.testing.assert_array_equal(
67-
store.layer.data[store.current_step], coord,
73+
store.layer.data[store.current_step],
74+
coord,
6875
)

src/napari_deeplabcut/_tests/test_misc.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ def test_to_os_dir_sep_invalid():
4040

4141
def test_guarantee_multiindex_rows():
4242
fake_index = [
43-
f"labeled-data/subfolder_{i}/image_{j}"
44-
for i in range(3) for j in range(10)
43+
f"labeled-data/subfolder_{i}/image_{j}" for i in range(3) for j in range(10)
4544
]
4645
df = pd.DataFrame(index=fake_index)
4746
misc.guarantee_multiindex_rows(df)
@@ -68,9 +67,15 @@ def test_dlc_header():
6867
scorer = "me"
6968
animals = [f"animal_{n}" for n in range(n_animals)]
7069
keypoints = [f"kpt_{n}" for n in range(n_keypoints)]
71-
fake_columns = pd.MultiIndex.from_product([
72-
[scorer], animals, keypoints, ["x", "y", "likelihood"],
73-
], names=["scorer", "individuals", "bodyparts", "coords"])
70+
fake_columns = pd.MultiIndex.from_product(
71+
[
72+
[scorer],
73+
animals,
74+
keypoints,
75+
["x", "y", "likelihood"],
76+
],
77+
names=["scorer", "individuals", "bodyparts", "coords"],
78+
)
7479
header = misc.DLCHeader(fake_columns)
7580
assert header.scorer == scorer
7681
header.scorer = "you"

src/napari_deeplabcut/_tests/test_reader.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ def test_read_config(config_path):
6464
def test_read_hdf_old_index(tmp_path_factory, fake_keypoints):
6565
path = str(tmp_path_factory.mktemp("folder") / "data.h5")
6666
old_index = [
67-
f"labeled-data/video/img{i}.png"
68-
for i in range(fake_keypoints.shape[0])
67+
f"labeled-data/video/img{i}.png" for i in range(fake_keypoints.shape[0])
6968
]
7069
fake_keypoints.index = old_index
7170
fake_keypoints.to_hdf(path, key="data")
@@ -79,11 +78,13 @@ def test_read_hdf_old_index(tmp_path_factory, fake_keypoints):
7978

8079
def test_read_hdf_new_index(tmp_path_factory, fake_keypoints):
8180
path = str(tmp_path_factory.mktemp("folder") / "data.h5")
82-
new_index = pd.MultiIndex.from_product([
83-
["labeled-data"],
84-
["video"],
85-
[f"img{i}.png" for i in range(fake_keypoints.shape[0])]
86-
])
81+
new_index = pd.MultiIndex.from_product(
82+
[
83+
["labeled-data"],
84+
["video"],
85+
[f"img{i}.png" for i in range(fake_keypoints.shape[0])],
86+
]
87+
)
8788
fake_keypoints.index = new_index
8889
fake_keypoints.to_hdf(path, key="data")
8990
layers = _reader.read_hdf(path)

src/napari_deeplabcut/_tests/test_widgets.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
def test_guess_continuous():
8-
assert _widgets.guess_continuous(np.array([0.]))
8+
assert _widgets.guess_continuous(np.array([0.0]))
99
assert not _widgets.guess_continuous(np.array(list("abc")))
1010

1111

@@ -40,7 +40,7 @@ def test_store_crop_coordinates(viewer, images, config_path):
4040
viewer.layers.selection.add(images)
4141
_ = viewer.add_shapes(
4242
np.random.random((4, 3)),
43-
shape_type='rectangle',
43+
shape_type="rectangle",
4444
)
4545
controls = _widgets.KeypointControls(viewer)
4646
controls._images_meta = {
@@ -55,17 +55,17 @@ def test_toggle_face_color(viewer, points):
5555
view = viewer.window._qt_viewer
5656
# By default, points are colored by individual with multi-animal data
5757
assert points._face.color_properties.name == "id"
58-
view.canvas.events.key_press(key=keys.Key('F'))
58+
view.canvas.events.key_press(key=keys.Key("F"))
5959
assert points._face.color_properties.name == "label"
60-
view.canvas.events.key_press(key=keys.Key('F'))
60+
view.canvas.events.key_press(key=keys.Key("F"))
6161
assert points._face.color_properties.name == "id"
6262

6363

6464
def test_toggle_edge_color(viewer, points):
6565
viewer.layers.selection.add(points)
6666
view = viewer.window._qt_viewer
6767
np.testing.assert_array_equal(points.edge_width, 0)
68-
view.canvas.events.key_press(key=keys.Key('E'))
68+
view.canvas.events.key_press(key=keys.Key("E"))
6969
np.testing.assert_array_equal(points.edge_width, 2)
7070

7171

@@ -82,7 +82,7 @@ def test_keypoints_dropdown_menu(store):
8282
widget = _widgets.KeypointsDropdownMenu(store)
8383
assert "id" in widget.menus
8484
assert "label" in widget.menus
85-
label_menu = widget.menus['label']
85+
label_menu = widget.menus["label"]
8686
label_menu.currentText() == "kpt_0"
8787
widget.update_menus(event=None)
8888
label_menu.currentText() == "kpt_2"
@@ -92,7 +92,7 @@ def test_keypoints_dropdown_menu(store):
9292

9393
def test_keypoints_dropdown_menu_smart_reset(store):
9494
widget = _widgets.KeypointsDropdownMenu(store)
95-
label_menu = widget.menus['label']
95+
label_menu = widget.menus["label"]
9696
label_menu.update_to("kpt_2")
9797
widget._locked = True
9898
widget.smart_reset(event=None)
@@ -119,4 +119,4 @@ def test_color_scheme_display(qtbot):
119119
widget.add_entry("keypoint", "red")
120120
assert widget.scheme_dict["keypoint"] == "red"
121121
assert widget._container.layout().count() == 1
122-
qtbot.add_widget(widget)
122+
qtbot.add_widget(widget)

0 commit comments

Comments
 (0)