scverse / squidpy

Spatial Single Cell Analysis in Python
https://squidpy.readthedocs.io/en/stable/
BSD 3-Clause "New" or "Revised" License
400 stars 71 forks source link

Failing to Pass Scale Variable #703

Closed tcollins2011 closed 2 days ago

tcollins2011 commented 1 year ago

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 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 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 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

giovp commented 1 year ago

hi @tcollins2011 which version of squidpy ot skimage do you have?

tcollins2011 commented 1 year ago

@giovp I was using squidpy version 1.2.3

giovp commented 1 year ago

ok thanks, and scikit-image?

tcollins2011 commented 1 year ago

scikit-image was using version: 0.21.0

michalk8 commented 11 months ago

This seems like an issue with cropping/xarray, will take a look.

giovp commented 2 days ago

hi @tcollins2011 is this stil an issue? will close due to inactivity but feel free to reopen