squidpy icon indicating copy to clipboard operation
squidpy copied to clipboard

Failing to Pass Scale Variable

Open tcollins2011 opened this issue 2 years ago • 5 comments

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

tcollins2011 avatar Jun 08 '23 22:06 tcollins2011

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

giovp avatar Jun 12 '23 13:06 giovp

@giovp I was using squidpy version 1.2.3

tcollins2011 avatar Jun 12 '23 16:06 tcollins2011

ok thanks, and scikit-image?

giovp avatar Jun 12 '23 17:06 giovp

scikit-image was using version: 0.21.0

tcollins2011 avatar Jun 12 '23 19:06 tcollins2011

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

michalk8 avatar Jul 20 '23 15:07 michalk8

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

giovp avatar Jul 07 '24 13:07 giovp