From 23d6c99ff1c0bd216d41b93795974a833dfd613c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoshiki=20V=C3=A1zquez=20Baeza?= Date: Mon, 9 Dec 2024 14:33:02 -0800 Subject: [PATCH] BUG: Fix bug with rounding of empty tables Fixes #216 --- woltka/biom.py | 3 ++- woltka/tests/test_biom.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/woltka/biom.py b/woltka/biom.py index e50e2dc..e3da214 100644 --- a/woltka/biom.py +++ b/woltka/biom.py @@ -192,7 +192,8 @@ def f(num): return round(num, digits) tmd = table.matrix_data - tmd.data = np.vectorize(f)(tmd.data).astype('float64') + if tmd.nnz: + tmd.data = np.vectorize(f)(tmd.data).astype('float64') tmd.eliminate_zeros() table.remove_empty(axis='observation') diff --git a/woltka/tests/test_biom.py b/woltka/tests/test_biom.py index 1704e03..916ee52 100644 --- a/woltka/tests/test_biom.py +++ b/woltka/tests/test_biom.py @@ -205,6 +205,30 @@ def test_round_biom(self): 'S2': {'G1': 1.55, 'G2': 0.17, 'G3': 1.5}}))) self.assertBIOMEqual(obs, exp) + def test_round_biom_empty_table(self): + # https://github.com/qiyunzhu/woltka/issues/216 + exp = Table(data=[], observation_ids=[], sample_ids=[]) + round_biom(exp) + obs = Table(data=[], observation_ids=[], sample_ids=[]) + self.assertBIOMEqual(obs, exp) + + def test_round_biom_empty_table_with_labels(self): + # https://github.com/qiyunzhu/woltka/issues/216 + observation_ids = ['G1', 'G2', 'G3'] + sample_ids = ['S1', 'S2'] + data = np.zeros((len(observation_ids), len(sample_ids))) + + obs = Table(data, observation_ids=observation_ids, + sample_ids=sample_ids) + round_biom(obs) + + data = np.zeros((len(observation_ids), len(sample_ids))) + exp = Table(data, observation_ids=observation_ids, + sample_ids=sample_ids) + exp.remove_empty(axis='observation') + + self.assertBIOMEqual(obs, exp) + def test_biom_add_metacol(self): obs = Table(*map(np.array, prep_table({ 'S1': {'G1': 4, 'G2': 5, 'G3': 8, 'G4': 0, 'G5': 3},