Failing to Pass Scale Variable
Description
Hi All,
I've encountered an issue with passing a scaling factor for feature calculations. More specifically, whenever a scale value is passed that is not equivalent to the default value of 1.0, the program returns an unexpected dimension error. I was also able to reproduce this when following the Analyze Visium fluorescence data tutorial exactly in both a standard python file as well as a jupyter notebook.
Minimal reproducible example
img = sq.datasets.visium_fluo_image_crop()
adata = sq.datasets.visium_fluo_adata_crop()
features_kwargs = {"segmentation": {"label_layer": "segmented_watershed"}}
sq.im.calculate_image_features(
adata,
img,
features="segmentation",
layer="image",
key_added="features_segmentation",
n_jobs=1,
features_kwargs=features_kwargs,
)
params = {
features_lowres": {"features": ["summary", "histogram"], "scale": 0.25},
}
for feature_name, cur_params in params.items():
# features will be saved in `adata.obsm[feature_name]`
sq.im.calculate_image_features(adata, img, layer="image", key_added=feature_name, n_jobs=1, **cur_params)
Traceback
Traceback (most recent call last):
File "squidpytest.py", line 111, in <module>
sq.im.calculate_image_features(adata, img, layer="image", key_added=feature_name, n_jobs=1, **cur_params)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_feature.py", line 91, in calculate_image_features
res = parallelize(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/_utils.py", line 168, in wrapper
res = jl.Parallel(n_jobs=n_jobs, backend=backend)(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/parallel.py", line 1085, in __call__
if self.dispatch_one_batch(iterator):
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/parallel.py", line 901, in dispatch_one_batch
self._dispatch(tasks)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/parallel.py", line 819, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/_parallel_backends.py", line 208, in apply_async
result = ImmediateResult(func)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/_parallel_backends.py", line 597, in __init__
self.results = batch()
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/parallel.py", line 288, in __call__
return [func(*args, **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/joblib/parallel.py", line 288, in <listcomp>
return [func(*args, **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_feature.py", line 119, in _calculate_image_features_helper
for crop in img.generate_spot_crops(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_container.py", line 830, in generate_spot_crops
crop = self.crop_center(y=y, x=x, radius=radius, library_id=obs_library_ids[i], **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_container.py", line 661, in crop_center
return self.crop_corner( # type: ignore[no-any-return]
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_container.py", line 568, in crop_corner
self._post_process(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_container.py", line 602, in _post_process
data = data.map(_rescale).assign_coords({"z": library_ids})
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/dataset.py", line 5957, in map
variables = {
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/dataset.py", line 5958, in <dictcomp>
k: maybe_wrap_array(v, func(v, *args, **kwargs))
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/squidpy/im/_container.py", line 597, in _rescale
return xr.DataArray(scaling_fn(arr).astype(dtype), dims=arr.dims)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/skimage/_shared/utils.py", line 328, in fixed_func
return func(*args, **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/skimage/transform/_warps.py", line 289, in rescale
return resize(image, output_shape, order=order, mode=mode, cval=cval,
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/skimage/transform/_warps.py", line 188, in resize
_clip_warp_output(image, out, mode, cval, clip)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/skimage/transform/_warps.py", line 692, in _clip_warp_output
np.clip(output_image, min_val, max_val, out=output_image)
File "<__array_function__ internals>", line 180, in clip
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 2152, in clip
return _wrapfunc(a, 'clip', a_min, a_max, out=out, **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 57, in _wrapfunc
return bound(*args, **kwds)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/numpy/core/_methods.py", line 159, in _clip
return _clip_dep_invoke_with_casting(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/numpy/core/_methods.py", line 113, in _clip_dep_invoke_with_casting
return ufunc(*args, out=out, **kwargs)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/arithmetic.py", line 86, in __array_ufunc__
return apply_ufunc(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/computation.py", line 1208, in apply_ufunc
return apply_dataarray_vfunc(
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/computation.py", line 315, in apply_dataarray_vfunc
result_var = func(*data_vars)
File "/home/tcollins/anaconda3/envs/squidpy/lib/python3.8/site-packages/xarray/core/computation.py", line 796, in apply_variable_ufunc
raise ValueError(
ValueError: applied function returned data with unexpected number of dimensions. Received 4 dimension(s) but expected 0 dimensions with names: ()
Version
1.2.3
hi @tcollins2011 which version of squidpy ot skimage do you have?
@giovp I was using squidpy version 1.2.3
ok thanks, and scikit-image?
scikit-image was using version: 0.21.0
This seems like an issue with cropping/xarray, will take a look.
hi @tcollins2011 is this stil an issue? will close due to inactivity but feel free to reopen