Skip to content

Commit b346090

Browse files
committed
fixed loom import export
1 parent ff4b043 commit b346090

File tree

3 files changed

+21
-22
lines changed

3 files changed

+21
-22
lines changed

anndata/readwrite/read.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pathlib import Path
22
from typing import Union, Optional, Iterable, Generator, Iterator
3-
3+
from scipy.sparse import issparse
44
import numpy as np
55

66
from ..base import AnnData

anndata/readwrite/write.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
from collections import Mapping
44
from pathlib import Path
55
from typing import Union
6-
76
import pandas as pd
87
import numpy as np
9-
from scipy import sparse
108
from scipy.sparse import issparse
9+
import logging as logg
1110

1211
from ..base import AnnData
1312
from .. import h5py
@@ -58,18 +57,18 @@ def write_csvs(dirname, adata, skip_data=True, sep=','):
5857

5958

6059
def write_loom(filename: Union[Path, str], adata: AnnData):
61-
from loompy import create
60+
filename = str(filename) # allow passing Path object
6261
row_attrs = adata.var.to_dict('list')
6362
row_attrs['var_names'] = adata.var_names.values
6463
col_attrs = adata.obs.to_dict('list')
6564
col_attrs['obs_names'] = adata.obs_names.values
66-
with create(
67-
str(filename), # allow passing Path objects
68-
adata.X.T,
69-
row_attrs=row_attrs,
70-
col_attrs=col_attrs
71-
) as ds:
72-
pass
65+
X = adata.X.T
66+
if issparse(X):
67+
logg.info(
68+
'... writing to \'.loom\' file densifies sparse matrix')
69+
X = X.toarray()
70+
from loompy import create
71+
create(filename, X, row_attrs=row_attrs, col_attrs=col_attrs)
7372

7473

7574
def _write_h5ad(filename: Union[Path, str], adata: AnnData, **kwargs):

anndata/tests/readwrite.py

+11-11
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,17 @@ def test_readwrite_h5ad():
6060
assert adata.obs['oanno1'].cat.categories.tolist() == ['cat1', 'cat2']
6161

6262

63-
# def test_readwrite_loom():
64-
# for typ in [np.array, csr_matrix]:
65-
# X = typ(X_list)
66-
# adata = ad.AnnData(X, obs=obs_dict, var=var_dict, uns=uns_dict)
67-
# adata.write_loom('./test.loom')
68-
# adata = ad.read_loom('./test.loom')
69-
# if isinstance(X, np.ndarray):
70-
# assert np.allclose(adata.X, X)
71-
# else:
72-
# # TODO: this should not be necessary
73-
# assert np.allclose(adata.X, X.toarray())
63+
def test_readwrite_loom():
64+
for typ in [np.array, csr_matrix]:
65+
X = typ(X_list)
66+
adata = ad.AnnData(X, obs=obs_dict, var=var_dict, uns=uns_dict)
67+
adata.write_loom('./test.loom')
68+
adata = ad.read_loom('./test.loom')
69+
if isinstance(X, np.ndarray):
70+
assert np.allclose(adata.X, X)
71+
else:
72+
# TODO: this should not be necessary
73+
assert np.allclose(adata.X, X.toarray())
7474

7575

7676
def test_read_csv():

0 commit comments

Comments
 (0)