/data/var (#295)

* Upgrade version of scanpy

* /data/var

This works for everything except the case where there is only one gene. Anndata flattens X when there is only one var thus causing the transpose to fail.

* Fix edge case when an axis (obs/var) only contains 1 element
This commit is contained in:
Charlotte Weaver
2018-10-03 15:09:46 -07:00
committed by GitHub
parent 467ae94faf
commit 187bbfdcf7
5 changed files with 221 additions and 69 deletions
+63 -53
View File
@@ -265,71 +265,81 @@ class EndPoints(unittest.TestCase):
self.assertEqual(len(result_data["data"]), 2)
def test_get_data(self):
endpoint = "data/obs"
query = "accept-type=application/json"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 2638)
for axis in ["obs", "var"]:
endpoint = f"data/{axis}"
query = "accept-type=application/json"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 2638)
def test_data_mimetype_error(self):
endpoint = "data/obs"
query = "accept-type=xxx"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 406)
# no accept type
url = f"{URL_BASE}{endpoint}"
result = self.session.get(url)
self.assertEqual(result.status_code, 406)
for axis in ["obs", "var"]:
endpoint = f"data/{axis}"
query = "accept-type=xxx"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 406)
# no accept type
url = f"{URL_BASE}{endpoint}"
result = self.session.get(url)
self.assertEqual(result.status_code, 406)
def test_data_filter(self):
endpoint = "data/obs"
query = "accept-type=application/json&obs:louvain=NK cells&obs:louvain=CD8 T cells&obs:n_counts=3000,*"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 38)
for axis in ["obs", "var"]:
endpoint = f"data/{axis}"
query = "accept-type=application/json&obs:louvain=NK cells&obs:louvain=CD8 T cells&obs:n_counts=3000,*"
url = f"{URL_BASE}{endpoint}?{query}"
result = self.session.get(url)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 38)
def test_data_put(self):
endpoint = "data/obs"
url = f"{URL_BASE}{endpoint}"
header = {"Accept": "application/json"}
obs_filter = {
"filter": {
"obs": {
"annotation_value": [
{"name": "louvain", "values": ["NK cells", "CD8 T cells"]},
{"name": "n_counts", "min": 3000},
],
"index": [1, 99, [1000, 2000]]
for axis in ["obs", "var"]:
endpoint = f"data/{axis}"
url = f"{URL_BASE}{endpoint}"
header = {"Accept": "application/json"}
obs_filter = {
"filter": {
"obs": {
"annotation_value": [
{"name": "louvain", "values": ["NK cells", "CD8 T cells"]},
{"name": "n_counts", "min": 3000},
],
"index": [1, 99, [1000, 2000]]
}
}
}
}
result = self.session.put(url, headers=header, json=obs_filter)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 15)
result = self.session.put(url, headers=header, json=obs_filter)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"]), 15)
def test_data_put_single_var(self):
endpoint = "data/obs"
url = f"{URL_BASE}{endpoint}"
header = {"Accept": "application/json"}
var_filter = {
"filter": {
"var": {
"annotation_value": [
{"name": "name", "values": ["RER1"]},
]
for axis in ["obs", "var"]:
endpoint = f"data/{axis}"
url = f"{URL_BASE}{endpoint}"
header = {"Accept": "application/json"}
var_filter = {
"filter": {
"var": {
"annotation_value": [
{"name": "name", "values": ["RER1"]},
]
}
}
}
}
result = self.session.put(url, headers=header, json=var_filter)
self.assertEqual(result.status_code, 200)
result_data = result.json()
self.assertEqual(len(result_data["obs"][0]), 2)
result = self.session.put(url, headers=header, json=var_filter)
self.assertEqual(result.status_code, 200)
result_data = result.json()
if axis == "obs":
self.assertEqual(len(result_data["obs"][0]), 2)
self.assertEqual(len(result_data["var"]), 1)
elif axis == "var":
self.assertEqual(len(result_data["obs"]), 2638)
self.assertEqual(len(result_data["var"][0]), 2639)
def test_static(self):
endpoint = "static"
+36 -6
View File
@@ -206,9 +206,12 @@ class UtilTest(unittest.TestCase):
self.assertEqual(len(result), 20)
def test_data_frame(self):
data_frame = self.data.data_frame(self.data.data)
self.assertEqual(len(data_frame["var"]), 1838)
self.assertEqual(len(data_frame["obs"]), 2638)
data_frame_obs = self.data.data_frame(self.data.data, "obs")
self.assertEqual(len(data_frame_obs["var"]), 1838)
self.assertEqual(len(data_frame_obs["obs"]), 2638)
data_frame_var = self.data.data_frame(self.data.data, "var")
self.assertEqual(len(data_frame_var["var"]), 1838)
self.assertEqual(len(data_frame_var["obs"]), 2638)
def test_filtered_data_frame(self):
filter_ = {
@@ -221,9 +224,36 @@ class UtilTest(unittest.TestCase):
}
}
data = self.data.filter_dataframe(filter_["filter"])
data_frame = self.data.data_frame(data)
self.assertEqual(len(data_frame["var"]), 1838)
self.assertEqual(len(data_frame["obs"]), 497)
data_frame_obs = self.data.data_frame(data, "obs")
self.assertEqual(len(data_frame_obs["var"]), 1838)
self.assertEqual(len(data_frame_obs["obs"]), 497)
self.assertEqual(type(data_frame_obs["obs"][0]), list)
self.assertEqual(type(data_frame_obs["var"][0]), int)
data_frame_var = self.data.data_frame(data, "var")
self.assertEqual(len(data_frame_var["var"]), 1838)
self.assertEqual(len(data_frame_var["obs"]), 497)
self.assertEqual(type(data_frame_var["var"][0]), list)
self.assertEqual(type(data_frame_var["obs"][0]), int)
def test_data_single_gene(self):
for axis in ["obs", "var"]:
filter_ = {
"filter": {
"var": {
"annotation_value": [
{"name": "name", "values": ["RER1"]},
]
}
}
}
data = self.data.filter_dataframe(filter_["filter"], include_uns=False)
data_frame_var = self.data.data_frame(data, axis)
if axis == "obs":
self.assertEqual(type(data_frame_var["var"][0]), int)
self.assertEqual(type(data_frame_var["obs"][0]), list)
elif axis == "var":
self.assertEqual(type(data_frame_var["obs"][0]), int)
self.assertEqual(type(data_frame_var["var"][0]), list)
if __name__ == '__main__':
unittest.main()