Return an empty matrix if no rows or columns are selected (#1501)

Return an empty matrix if no rows or columns are selected

Fixes #1499
This commit is contained in:
bmccandless
2020-05-29 14:47:46 -07:00
committed by GitHub
parent f7585eef1e
commit d0577b94af
3 changed files with 21 additions and 1 deletions
+7
View File
@@ -237,6 +237,13 @@ class CxgAdaptor(DataAdaptor):
def get_X_array(self, obs_mask=None, var_mask=None):
obs_items = pack_selector_from_mask(obs_mask)
var_items = pack_selector_from_mask(var_mask)
if obs_items is None or var_items is None:
# If either zero rows or zero columns were selected, return an empty 2d array.
shape = self.get_shape()
obs_size = 0 if obs_items is None else shape[0] if obs_mask is None else np.count_nonzero(obs_mask)
var_size = 0 if var_items is None else shape[1] if var_mask is None else np.count_nonzero(var_mask)
return np.ndarray((obs_size, var_size))
X = self.open_array("X")
if X.schema.sparse:
+1 -1
View File
@@ -20,7 +20,7 @@ def pack_selector_from_mask(boolarray):
def pack_selector_from_indices(selector):
if len(selector) == 0:
return slice(None)
return None
result = []
current = slice(selector[0], selector[0])
+13
View File
@@ -244,6 +244,19 @@ class EndPoints(object):
self.assertEqual(df["n_rows"], 2638)
self.assertEqual(df["n_cols"], 1)
def test_data_get_unknown_filter_fbs(self):
index_col_name = self.schema["schema"]["annotations"]["var"]["index"]
endpoint = "data/var"
query = f"var:{index_col_name}=UNKNOWN"
url = f"{self.URL_BASE}{endpoint}?{query}"
header = {"Accept": "application/octet-stream"}
result = self.session.get(url, headers=header)
self.assertEqual(result.status_code, HTTPStatus.OK)
self.assertEqual(result.headers["Content-Type"], "application/octet-stream")
df = decode_fbs.decode_matrix_FBS(result.content)
self.assertEqual(df["n_rows"], 2638)
self.assertEqual(df["n_cols"], 0)
def test_data_put_single_var(self):
endpoint = "data/var"
url = f"{self.URL_BASE}{endpoint}"