Skip to content

Commit

Permalink
account for obsp/varp during transpose (#370)
Browse files Browse the repository at this point in the history
* account for obsp during transpose

* added test

* add copy, use kwd params, public attributes

* clarify docstring

* fixed tests

* make uns of original modifiable

* single quotes
  • Loading branch information
falexwolf committed May 14, 2020
1 parent b6be1d2 commit 58f1eac
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 24 deletions.
15 changes: 10 additions & 5 deletions anndata/_core/anndata.py
Original file line number Diff line number Diff line change
Expand Up @@ -1256,6 +1256,8 @@ def transpose(self) -> "AnnData":
Transpose whole object.
Data matrix is transposed, observations and variables are interchanged.
Ignores `.raw`.
"""
if not self.isbacked:
X = self.X
Expand All @@ -1272,11 +1274,14 @@ def t_csr(m: sparse.spmatrix) -> sparse.csr_matrix:

return AnnData(
t_csr(X),
self._var,
self._obs,
self._uns,
self._varm.flipped(),
self._obsm.flipped(),
obs=self.var,
var=self.obs,
# we're taking a private attributes here to be able to modify uns of the original object
uns=self._uns,
obsm=self.varm.flipped(),
varm=self.obsm.flipped(),
obsp=self.varp.copy(),
varp=self.obsp.copy(),
filename=self.filename,
layers={k: t_csr(v) for k, v in self.layers.items()},
dtype=self.X.dtype.name,
Expand Down
25 changes: 6 additions & 19 deletions anndata/tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,26 +360,13 @@ def test_get_subset_annotation():


def test_transpose():
adata = AnnData(
np.array([[1, 2, 3], [4, 5, 6]]),
dict(obs_names=["A", "B"]),
dict(var_names=["a", "b", "c"]),
)

adata = gen_adata((5, 3))
adata.varp = {f"varp_{k}": v for k, v in adata.varp.items()}
adata1 = adata.T

# make sure to not modify the original!
assert adata.obs_names.tolist() == ["A", "B"]
assert adata.var_names.tolist() == ["a", "b", "c"]

assert adata1.obs_names.tolist() == ["a", "b", "c"]
assert adata1.var_names.tolist() == ["A", "B"]
assert adata1.X.shape == adata.X.T.shape

adata2 = adata.transpose()
assert np.array_equal(adata1.X, adata2.X)
assert np.array_equal(adata1.obs, adata2.obs)
assert np.array_equal(adata1.var, adata2.var)
adata1.uns["test123"] = 1
assert "test123" in adata.uns
assert_equal(adata1.X.shape, (3, 5))
assert_equal(adata1.obsp.keys(), adata.varp.keys())


def test_append_col():
Expand Down

0 comments on commit 58f1eac

Please sign in to comment.