Skip to content

Commit b876f1a

Browse files
committed
add checks for order_of_images
1 parent 8037569 commit b876f1a

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

nwbinspector/checks/images.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from hdmf.utils import get_data_shape
2+
3+
from pynwb.base import Images
4+
5+
from ..register_checks import register_check, Importance, InspectorMessage
6+
7+
8+
@register_check(importance=Importance.BEST_PRACTICE_VIOLATION, neurodata_type=Images)
9+
def check_order_of_images_unique(images: Images):
10+
if images.order_of_images is None:
11+
return
12+
if not len(set(images.order_of_images)) == len(images.order_of_images):
13+
return InspectorMessage(
14+
message="order_of_images should have unique values."
15+
)
16+
17+
18+
@register_check(importance=Importance.BEST_PRACTICE_VIOLATION, neurodata_type=Images)
19+
def check_order_of_images_len(images: Images):
20+
if images.order_of_images is None:
21+
return
22+
if not len(images.order_of_images) == len(images.images):
23+
return InspectorMessage(
24+
message=f"Length of order_of_images ({len(images.order_of_images)}) does not match the number of images ("
25+
f"{len(images.images)})."
26+
)

tests/unit_tests/test_images.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import numpy as np
2+
3+
from pynwb.base import Images, ImageReferences
4+
from pynwb.image import GrayscaleImage
5+
6+
from nwbinspector.checks.images import check_order_of_images_unique, check_order_of_images_len
7+
8+
9+
def test_check_order_of_images_unique():
10+
11+
imgs = [GrayscaleImage(name=f"image{i}", data=np.random.randn(10, 10)) for i in range(5)]
12+
img_refs = ImageReferences(name="order_of_images", data=imgs + [imgs[0]])
13+
images = Images(name="my_images", images=imgs, order_of_images=img_refs)
14+
15+
assert check_order_of_images_unique(images).message == "order_of_images should have unique values."
16+
17+
18+
def test_pass_check_order_of_images_unique():
19+
20+
imgs = [GrayscaleImage(name=f"image{i}", data=np.random.randn(10, 10)) for i in range(5)]
21+
img_refs = ImageReferences(name="order_of_images", data=imgs)
22+
images = Images(name="my_images", images=imgs, order_of_images=img_refs)
23+
24+
assert check_order_of_images_unique(images) is None
25+
26+
27+
def test_check_order_of_images_len():
28+
29+
imgs = [GrayscaleImage(name=f"image{i}", data=np.random.randn(10, 10)) for i in range(5)]
30+
img_refs = ImageReferences(name="order_of_images", data=imgs + [imgs[0]])
31+
images = Images(name="my_images", images=imgs, order_of_images=img_refs)
32+
33+
assert (
34+
check_order_of_images_len(images).message
35+
== f"Length of order_of_images (6) does not match the number of images (5)."
36+
)
37+
38+
39+
def test_pass_check_order_of_images_len():
40+
41+
imgs = [GrayscaleImage(name=f"image{i}", data=np.random.randn(10, 10)) for i in range(5)]
42+
img_refs = ImageReferences(name="order_of_images", data=imgs)
43+
images = Images(name="my_images", images=imgs, order_of_images=img_refs)
44+
45+
assert check_order_of_images_len(images) is None
46+
47+
48+

0 commit comments

Comments
 (0)