Skip to content

Commit e70cc20

Browse files
committed
support layers unification in anndata 0.13
closes #187, closes #188
1 parent 7490e8c commit e70cc20

2 files changed

Lines changed: 16 additions & 15 deletions

File tree

muon/_core/preproc.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -765,33 +765,34 @@ def func(x):
765765
attrp[k] = v[subset][:, subset]
766766
setattr(data, f"{attr}p", attrp)
767767

768+
# Subset layers
769+
for layername, layer in layers.items():
770+
if attr == "obs":
771+
layers[layername] = layer[subset, :]
772+
else:
773+
layers[layername] = layer[:, subset]
774+
data.layers = layers
775+
768776
# Subset .X
769-
if data._X is not None:
777+
if None not in layers and (X := data.X) is not None:
778+
Xattr = "_X" if hasattr(data, "_X") else "X"
770779
try:
771780
if attr == "obs":
772-
data._X = data.X[subset, :]
781+
setattr(data, Xattr, X[subset, :])
773782
else:
774-
data._X = data.X[:, subset]
783+
setattr(data, Xattr, X[:, subset])
775784
except TypeError:
776785
if attr == "obs":
777-
data._X = data.X[np.where(subset)[0], :]
786+
setattr(data, Xattr, X[np.where(subset)[0], :])
778787
else:
779-
data._X = data.X[:, np.where(subset)[0]]
788+
setattr(data, Xattr, X[:, np.where(subset)[0]])
780789
# For some h5py versions, indexing arrays must have integer dtypes
781790
# https://github.com/h5py/h5py/issues/1847
782791

783792
if data.isbacked:
784793
data.file.close()
785794
data.filename = None
786795

787-
# Subset layers
788-
for layer in layers:
789-
if attr == "obs":
790-
layers[layer] = layers[layer][subset, :]
791-
else:
792-
layers[layer] = layers[layer][:, subset]
793-
data.layers = layers
794-
795796
# Subset raw - only when subsetting obs
796797
if attr == "obs" and data.raw is not None:
797798
data.raw._X = data.raw.X[subset, :]

tests/test_atac_preproc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class TestTFIDF(unittest.TestCase):
1111
def setUp(self):
1212
np.random.seed(2020)
1313
x = np.abs(np.random.normal(size=(4, 5)))
14-
self.adata = AnnData(x, dtype=x.dtype)
14+
self.adata = AnnData(x)
1515

1616
def test_tfidf(self):
1717
adata = self.adata.copy()
@@ -56,7 +56,7 @@ class TestTFIDFSparse(unittest.TestCase):
5656
def setUp(self):
5757
np.random.seed(2020)
5858
x = rand(100, 10, density=0.2, format="csr")
59-
self.adata = AnnData(x, dtype=x.dtype)
59+
self.adata = AnnData(x)
6060

6161
def test_tfidf(self):
6262
ac.pp.tfidf(self.adata, log_tf=True, log_idf=True)

0 commit comments

Comments
 (0)