Skip to content

Commit 77c0120

Browse files
authored
Merge pull request #73 from giovp/feature/dims-warning
raise error for invalid scale factors
2 parents 7a67eea + 57feea3 commit 77c0120

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ examples/sub-I46_ses-SPIM_sample-BrocaAreaS01_stain-GAD67_chunk-00_SPIM*
1010
examples/dask-worker-space/
1111

1212
# Byte-compiled / optimized / DLL files
13-
__pycache__/
13+
__pycache__/

multiscale_spatial_image/to_multiscale/to_multiscale.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ def to_multiscale(
8383
out_chunks = chunks
8484
if out_chunks is None:
8585
out_chunks = default_chunks
86+
87+
# check for valid scale factors
88+
current_shape = {d:s for (d, s) in zip(image.dims, image.shape) if d not in {"t", "c"}}
89+
90+
for scale_factor in scale_factors:
91+
if isinstance(scale_factor, dict):
92+
current_shape = {k: (current_shape[k] / s) for (k, s) in scale_factor.items()}
93+
elif isinstance(scale_factor, int):
94+
current_shape = {k: (s / scale_factor) for (k, s) in current_shape.items()}
95+
for k,v in current_shape.items():
96+
if v < 1:
97+
raise ValueError(f"Scale factor {scale_factor} is incompatible with image shape {image.shape} along dimension `{k}`.")
8698

8799
current_input = image.chunk(out_chunks)
88100
# https://github.com/pydata/xarray/issues/5219

test/test_to_multiscale.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import xarray as xr
2-
3-
from multiscale_spatial_image import Methods, to_multiscale
2+
import pytest
3+
from multiscale_spatial_image import to_multiscale
44

55
from ._data import input_images
66

7+
78
def test_base_scale(input_images):
89
image = input_images["cthead1"]
910

1011
multiscale = to_multiscale(image, [])
11-
xr.testing.assert_equal(image, multiscale['scale0'].ds["cthead1"])
12+
xr.testing.assert_equal(image, multiscale["scale0"].ds["cthead1"])
1213

1314
image = input_images["small_head"]
1415
multiscale = to_multiscale(image, [])
15-
xr.testing.assert_equal(image, multiscale['scale0'].ds["small_head"])
16+
xr.testing.assert_equal(image, multiscale["scale0"].ds["small_head"])
17+
18+
with pytest.raises(ValueError):
19+
to_multiscale(image, scale_factors=[500])
20+
to_multiscale(image, scale_factors=[{"x": 10}, {"x": 500, "y": 10}])

0 commit comments

Comments
 (0)