ckmah / bento-tools

A Python toolkit for subcellular analysis of spatial transcriptomics data
https://bento-tools.readthedocs.io/en/latest/
BSD 2-Clause "Simplified" License
56 stars 6 forks source link

Support for pandas >=2.0.0, spatialdata>=0.1.0 #137

Closed easlinger closed 2 months ago

easlinger commented 2 months ago

Awesome package -- Thanks for all your work on it! Are there any plans to support pandas 2? This would make it possible to integrate into our other workflows more fully. For instance, recent versions of squidpy require pandas 2.1.0.

ckmah commented 2 months ago

Hi @easlinger, thanks for bringing this up! Yes, I want to support pandas>=2 and test compatibility with pandas API changes. I'll prioritize this in the next release.

easlinger commented 2 months ago

Thanks so much! I appreciate it.

Supporting the newest spatialdata and spatialdata-io versions would also help -- I'm having some issues prepping multi-modally-segmented Xenium data

Thanks for all your work!

ckmah commented 2 months ago

For sure! The spatialdata update to >=0.1.0 also had some breaking API changes i.e. moving from single to multi-table support. If you could reproduce any errors you run into with your Xenium data that would great, I will reference it when refactoring. Glad you brought all of these up 👍

easlinger commented 2 months ago

This is an error I get in bento.io.prep with old version data (Xenium 1.0/single-channel segmentation). I can't share the data, unfortunately, but I'll try to give as much context as possible to reproduce (environment listed in last section).

In a future comment, I'll share what happens with our multi-modal segmentation data.

Summary/Additional Context

Calls to Error

bento.io.prep() (in bento/io/_io.py) >

_sjoin_points() (in bento/io/_index.py) >

set_points_metadata() (in bento/io/_utils.py) >

points.loc[:, columns] = metadata (line 256; in set_points_metadata()) >

ValueError: Must have equal len keys and value when setting with an iterable

I did a lazy man's debugging with a statement printing some of the objects involved in the error.

columns = ['cell_boundaries']

Here's a print-out of part of the metadata variable (which appear to be cell IDs): ['eofgbmjc-1' 'enmongjp-1' 'enmolhlp-1' ... '' '' '']

And here are the first two rows of the points dataframe:

                   x             y          z feature_name     cell_id  \
0          37.685432  10092.416016  11.131549      IRF2BP2  UNASSIGNED   
1         147.899933  10138.629883  11.069950      SLC26A6  UNASSIGNED   

           transcript_id fov_name  nucleus_distance         qv  \
0        282170761412612       Q3        392.351013  40.000000   
1        282170761412639       Q3        283.523773  40.000000   

         overlaps_nucleus  
0                       0  
1                       0  

It looks to me like the code is trying to store cell IDs in the transcripts dataframe, which leads to incompatible dimensions?

Code

%load_ext autoreload
%autoreload 2

import os
import matplotlib.pyplot
import seaborn as sns
import scanpy as sc
import bento as bt
import spatialdata_io as sdio
import spatialdata as sd
import pandas as pd
import numpy as np

sdata = sdio.xenium(directory_path)
kwargs = dict(points_key="transcripts", feature_key="feature_name",
              instance_key="cell_boundaries",
              shape_keys=["cell_boundaries", "nucleus_boundaries"])
sdata_p = bt.io.prep(sdata, **kwargs)  # for Bento compatibility

Error Traceback

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[5], [line 4](vscode-notebook-cell:?execution_count=5&line=4)
      [1](vscode-notebook-cell:?execution_count=5&line=1) kwargs = dict(points_key="transcripts", feature_key="feature_name",
      [2](vscode-notebook-cell:?execution_count=5&line=2)               instance_key="cell_boundaries",
      [3](vscode-notebook-cell:?execution_count=5&line=3)               shape_keys=["cell_boundaries", "nucleus_boundaries"])
----> [4](vscode-notebook-cell:?execution_count=5&line=4) sdata = bt.io.prep(sdata, **kwargs)  # for Bento compatibility
      [5](vscode-notebook-cell:?execution_count=5&line=5) sdata

File ~/bento-tools/bento/io/_io.py:75, in prep(sdata, points_key, feature_key, instance_key, shape_keys)
     [73](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:73) if len(point_sjoin) > 0:
     [74](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:74)     pbar.set_description("Mapping points")
---> [75](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:75)     sdata = _sjoin_points(
     [76](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:76)         sdata=sdata,
     [77](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:77)         points_key=points_key,
     [78](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:78)         shape_keys=point_sjoin,
     [79](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:79)     )
     [81](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:81) pbar.update()
     [83](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_io.py:83) if len(shape_sjoin) > 0:

File ~/bento-tools/bento/io/_index.py:57, in _sjoin_points(sdata, points_key, shape_keys)
     [54](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_index.py:54)     points["index_right"].fillna("", inplace=True)
     [55](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_index.py:55)     points.rename(columns={"index_right": shape_key}, inplace=True)
---> [57](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_index.py:57)     set_points_metadata(sdata, points_key, points[shape_key], columns=shape_key)
     [59](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/io/_index.py:59) return sdata

File ~/bento-tools/bento/_utils.py:251, in set_points_metadata(sdata, points_key, metadata, columns)
    [249](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:249) transform = sdata.points[points_key].attrs
    [250](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:250) points = sdata.points[points_key].compute()
--> [251](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:251) points.loc[:, columns] = metadata
    [252](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:252) points = PointsModel.parse(
    [253](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:253)     dd.from_pandas(points, npartitions=1), coordinates={"x": "x", "y": "y"}
    [254](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:254) )
    [255](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/bento-tools/bento/_utils.py:255) points.attrs = transform

File ~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:818, in _LocationIndexer.__setitem__(self, key, value)
    [815](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:815) self._has_valid_setitem_indexer(key)
    [817](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:817) iloc = self if self.name == "iloc" else self.obj.iloc
--> [818](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:818) iloc._setitem_with_indexer(indexer, value, self.name)

File ~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1795, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
   [1792](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1792) # align and set the values
   [1793](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1793) if take_split_path:
   [1794](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1794)     # We have to operate column-wise
-> [1795](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1795)     self._setitem_with_indexer_split_path(indexer, value, name)
   [1796](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1796) else:
   [1797](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1797)     self._setitem_single_block(indexer, value, name)

File ~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1850, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
   [1845](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1845)     if len(value) == 1 and not is_integer(info_axis):
   [1846](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1846)         # This is a case like df.iloc[:3, [1]] = [0]
   [1847](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1847)         #  where we treat as df.iloc[:3, 1] = 0
   [1848](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1848)         return self._setitem_with_indexer((pi, info_axis[0]), value[0])
-> [1850](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1850)     raise ValueError(
   [1851](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1851)         "Must have equal len keys and value "
   [1852](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1852)         "when setting with an iterable"
   [1853](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1853)     )
   [1855](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1855) elif lplane_indexer == 0 and len(value) == len(self.obj.index):
   [1856](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1856)     # We get here in one case via .loc with a all-False mask
   [1857](https://vscode-remote+ssh-002dremote-002bspark-002echobiolab-002eorg.vscode-resource.vscode-cdn.net/home/elizabeth/elizabeth/corescpy/examples/~/miniconda3/envs/bento/lib/python3.10/site-packages/pandas/core/indexing.py:1857)     pass

ValueError: Must have equal len keys and value when setting with an iterable

Environment

# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
adjusttext                1.1.1                    pypi_0    pypi
affine                    2.4.0                    pypi_0    pypi
aiobotocore               2.5.4                    pypi_0    pypi
aiohttp                   3.9.5                    pypi_0    pypi
aioitertools              0.11.0                   pypi_0    pypi
aiosignal                 1.3.1                    pypi_0    pypi
anndata                   0.10.7                   pypi_0    pypi
array-api-compat          1.7.1                    pypi_0    pypi
asciitree                 0.3.3                    pypi_0    pypi
astropy                   6.1.0                    pypi_0    pypi
astropy-iers-data         0.2024.6.10.0.30.47          pypi_0    pypi
asttokens                 2.4.1              pyhd8ed1ab_0    conda-forge
async-timeout             4.0.3                    pypi_0    pypi
attrs                     23.2.0                   pypi_0    pypi
bento-tools               2.1.2                    pypi_0    pypi
botocore                  1.31.17                  pypi_0    pypi
bzip2                     1.0.8                hd590300_5    conda-forge
ca-certificates           2024.6.2             hbcca054_0    conda-forge
certifi                   2024.6.2                 pypi_0    pypi
charset-normalizer        3.3.2                    pypi_0    pypi
click                     8.1.7                    pypi_0    pypi
click-plugins             1.1.1                    pypi_0    pypi
cligj                     0.7.2                    pypi_0    pypi
cloudpickle               3.0.0                    pypi_0    pypi
colorcet                  3.1.0                    pypi_0    pypi
comm                      0.2.2              pyhd8ed1ab_0    conda-forge
contourpy                 1.2.1                    pypi_0    pypi
cycler                    0.12.1                   pypi_0    pypi
dask                      2024.2.1                 pypi_0    pypi
dask-image                2023.3.0                 pypi_0    pypi
datashader                0.16.2                   pypi_0    pypi
debugpy                   1.8.1           py310hc6cd4ac_0    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
decoupler                 1.4.0                    pypi_0    pypi
distributed               2024.2.1                 pypi_0    pypi
emoji                     2.12.1                   pypi_0    pypi
exceptiongroup            1.2.1                    pypi_0    pypi
executing                 2.0.1              pyhd8ed1ab_0    conda-forge
fasteners                 0.19                     pypi_0    pypi
fcsparser                 0.2.8                    pypi_0    pypi
fiona                     1.9.6                    pypi_0    pypi
fonttools                 4.53.0                   pypi_0    pypi
frozenlist                1.4.1                    pypi_0    pypi
fsspec                    2023.6.0                 pypi_0    pypi
geopandas                 0.14.4                   pypi_0    pypi
h5py                      3.11.0                   pypi_0    pypi
idna                      3.7                      pypi_0    pypi
imagecodecs               2024.6.1                 pypi_0    pypi
imageio                   2.34.1                   pypi_0    pypi
importlib-metadata        7.1.0              pyha770c72_0    conda-forge
importlib_metadata        7.1.0                hd8ed1ab_0    conda-forge
ipykernel                 6.29.4             pyh3099207_0    conda-forge
ipython                   8.25.0             pyh707e725_0    conda-forge
jedi                      0.19.1             pyhd8ed1ab_0    conda-forge
jinja2                    3.1.4                    pypi_0    pypi
jmespath                  1.0.1                    pypi_0    pypi
joblib                    1.4.2                    pypi_0    pypi
jupyter_client            8.6.2              pyhd8ed1ab_0    conda-forge
jupyter_core              5.7.2           py310hff52083_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.4.5                    pypi_0    pypi
kneed                     0.8.5                    pypi_0    pypi
krb5                      1.21.2               h659d440_0    conda-forge
lamin-utils               0.13.2                   pypi_0    pypi
lazy-loader               0.4                      pypi_0    pypi
ld_impl_linux-64          2.40                 hf3520f5_3    conda-forge
legacy-api-wrap           1.4                      pypi_0    pypi
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libgcc-ng                 13.2.0               h77fa898_7    conda-forge
libgomp                   13.2.0               h77fa898_7    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libsodium                 1.0.18               h36c2ea0_1    conda-forge
libsqlite                 3.46.0               hde9e2c9_0    conda-forge
libstdcxx-ng              13.2.0               hc0a3c3a_7    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libzlib                   1.3.1                h4ab18f5_1    conda-forge
llvmlite                  0.42.0                   pypi_0    pypi
locket                    1.0.0                    pypi_0    pypi
markdown-it-py            3.0.0                    pypi_0    pypi
markupsafe                2.1.5                    pypi_0    pypi
matplotlib                3.9.0                    pypi_0    pypi
matplotlib-inline         0.1.7              pyhd8ed1ab_0    conda-forge
matplotlib-scalebar       0.8.1                    pypi_0    pypi
mdurl                     0.1.2                    pypi_0    pypi
minisom                   2.3.2                    pypi_0    pypi
msgpack                   1.0.8                    pypi_0    pypi
multidict                 6.0.5                    pypi_0    pypi
multipledispatch          1.0.0                    pypi_0    pypi
multiscale-spatial-image  0.11.2                   pypi_0    pypi
natsort                   8.4.0                    pypi_0    pypi
ncurses                   6.5                  h59595ed_0    conda-forge
nest-asyncio              1.6.0              pyhd8ed1ab_0    conda-forge
networkx                  3.3                      pypi_0    pypi
numba                     0.59.1                   pypi_0    pypi
numcodecs                 0.12.1                   pypi_0    pypi
numpy                     1.26.4                   pypi_0    pypi
ome-zarr                  0.9.0                    pypi_0    pypi
openssl                   3.3.1                h4ab18f5_0    conda-forge
packaging                 24.1               pyhd8ed1ab_0    conda-forge
pandas                    1.5.3                    pypi_0    pypi
param                     2.1.0                    pypi_0    pypi
parso                     0.8.4              pyhd8ed1ab_0    conda-forge
partd                     1.4.2                    pypi_0    pypi
patsy                     0.5.6                    pypi_0    pypi
pexpect                   4.9.0              pyhd8ed1ab_0    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    10.3.0                   pypi_0    pypi
pims                      0.7                      pypi_0    pypi
pip                       24.0               pyhd8ed1ab_0    conda-forge
platformdirs              4.2.2              pyhd8ed1ab_0    conda-forge
pooch                     1.8.2                    pypi_0    pypi
prompt-toolkit            3.0.47             pyha770c72_0    conda-forge
psutil                    5.9.8           py310h2372a71_0    conda-forge
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
pyarrow                   16.1.0                   pypi_0    pypi
pyct                      0.5.0                    pypi_0    pypi
pyerfa                    2.0.1.4                  pypi_0    pypi
pygeos                    0.14                     pypi_0    pypi
pygments                  2.18.0             pyhd8ed1ab_0    conda-forge
pynndescent               0.5.12                   pypi_0    pypi
pyparsing                 3.1.2                    pypi_0    pypi
pyproj                    3.6.1                    pypi_0    pypi
python                    3.10.4          h2660328_0_cpython    conda-forge
python-dateutil           2.9.0.post0              pypi_0    pypi
python_abi                3.10                    4_cp310    conda-forge
pytz                      2024.1                   pypi_0    pypi
pyyaml                    6.0.1                    pypi_0    pypi
pyzmq                     26.0.3          py310h6883aea_0    conda-forge
rasterio                  1.3.10                   pypi_0    pypi
readfcs                   1.1.8                    pypi_0    pypi
readline                  8.2                  h8228510_1    conda-forge
requests                  2.32.3                   pypi_0    pypi
rich                      13.7.1                   pypi_0    pypi
rtree                     1.2.0                    pypi_0    pypi
s3fs                      2023.6.0                 pypi_0    pypi
scanpy                    1.10.1                   pypi_0    pypi
scikit-image              0.23.2                   pypi_0    pypi
scikit-learn              1.5.0                    pypi_0    pypi
scipy                     1.10.1                   pypi_0    pypi
seaborn                   0.13.2                   pypi_0    pypi
session-info              1.0.0                    pypi_0    pypi
setuptools                70.0.0             pyhd8ed1ab_0    conda-forge
shapely                   2.0.4                    pypi_0    pypi
six                       1.16.0             pyh6c4a22f_0    conda-forge
slicerator                1.1.0                    pypi_0    pypi
snuggs                    1.4.7                    pypi_0    pypi
sortedcontainers          2.4.0                    pypi_0    pypi
sparse                    0.15.4                   pypi_0    pypi
spatial-image             0.3.0                    pypi_0    pypi
spatialdata               0.1.2                    pypi_0    pypi
spatialdata-io            0.1.2                    pypi_0    pypi
sqlite                    3.46.0               h6d4b2fc_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
statsmodels               0.14.2                   pypi_0    pypi
stdlib-list               0.10.0                   pypi_0    pypi
tblib                     3.0.0                    pypi_0    pypi
tensorly                  0.8.1                    pypi_0    pypi
threadpoolctl             3.5.0                    pypi_0    pypi
tifffile                  2024.5.22                pypi_0    pypi
tk                        8.6.13          noxft_h4845f30_101    conda-forge
toolz                     0.12.1                   pypi_0    pypi
tornado                   6.4.1           py310hc51659f_0    conda-forge
tqdm                      4.66.4                   pypi_0    pypi
traitlets                 5.14.3             pyhd8ed1ab_0    conda-forge
typing_extensions         4.12.2             pyha770c72_0    conda-forge
tzdata                    2024a                h0c530f3_0    conda-forge
umap-learn                0.5.6                    pypi_0    pypi
upsetplot                 0.9.0                    pypi_0    pypi
urllib3                   1.26.18                  pypi_0    pypi
wcwidth                   0.2.13             pyhd8ed1ab_0    conda-forge
wheel                     0.43.0             pyhd8ed1ab_1    conda-forge
wrapt                     1.16.0                   pypi_0    pypi
xarray                    2023.12.0                pypi_0    pypi
xarray-dataclasses        1.7.0                    pypi_0    pypi
xarray-datatree           0.0.14                   pypi_0    pypi
xarray-schema             0.0.3                    pypi_0    pypi
xarray-spatial            0.4.0                    pypi_0    pypi
xgboost                   2.0.3                    pypi_0    pypi
xz                        5.2.6                h166bdaf_0    conda-forge
yarl                      1.9.4                    pypi_0    pypi
zarr                      2.18.2                   pypi_0    pypi
zeromq                    4.3.5                h75354e8_4    conda-forge
zict                      3.0.0                    pypi_0    pypi
zipp                      3.19.2             pyhd8ed1ab_0    conda-forge
easlinger commented 2 months ago

I've finalized the info in the comment above -- Later I'll try to send a similar report using multi-channel segmentation data.

ckmah commented 2 months ago

I've opened a separate issue specifically for spatialdata-io since the bugs are due to data format changes instead of API changes @easlinger . If you have more relevant info, please add it there, thanks!