scverse / anndata

Annotated data.
http://anndata.readthedocs.io
BSD 3-Clause "New" or "Revised" License
555 stars 150 forks source link

scanpy.tl.score_genes fails when run on backed adata #234

Open bkmartinjr opened 4 years ago

bkmartinjr commented 4 years ago

If I load an H5AD in backed mode (backed="r"), and call score_genes(), it will fail. Works fine on the same dataset loaded in memory cached mode.

Example (run with scanpy 1.4.2, anndata 0.6.22-post1, and h5py 2.9.0):

>>> ab = anndata.read_h5ad('example-dataset/pbmc3k.h5ad', backed=None)
>>> scanpy.tl.score_genes(ab, ['TNFRSF4', 'CPSF3L', 'ATAD3C'])
>>> ab.obs['score'].head()
index
AAACATACAACCAC-1   -0.113624
AAACATTGAGCTAC-1   -0.219552
AAACATTGATCAGC-1   -0.180511
AAACCGTGCTTCCG-1   -0.217497
AAACCGTGTATGCG-1   -0.093459
Name: score, dtype: float32
>>> 
>>> ab = anndata.read_h5ad('example-dataset/pbmc3k.h5ad', backed="r")
>>> scanpy.tl.score_genes(ab, ['TNFRSF4', 'CPSF3L', 'ATAD3C'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/scanpy/tools/_score_genes.py", line 93, in score_genes
    np.nanmean(_adata[:, gene_pool].X, axis=0), index=gene_pool)  # average expression of genes
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/anndata/core/anndata.py", line 1230, in __getitem__
    return self._getitem_view(index)
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/anndata/core/anndata.py", line 1234, in _getitem_view
    return AnnData(self, oidx=oidx, vidx=vidx, asview=True)
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/anndata/core/anndata.py", line 561, in __init__
    self._init_as_view(X, oidx, vidx)
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/anndata/core/anndata.py", line 633, in _init_as_view
    self._raw = adata_ref.raw[oidx]
  File "/mnt/c/Users/bruce/projects/cellxgene/venv/lib/python3.6/site-packages/anndata/core/anndata.py", line 336, in __getitem__
    if self._adata is not None or not self._adata.isbacked: X = self._X[oidx, vidx]
TypeError: 'NoneType' object is not subscriptable
flying-sheep commented 4 years ago

Looks like an anndata issue, not a scanpy issue.

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. Please add a comment if you want to keep the issue open. Thank you for your contributions!