Skip to content

Commit 7b9684b

Browse files
authored
[python] Test get_experiment_shapes for underpopulated experiments (#3966)
1 parent 615561a commit 7b9684b

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

apis/python/src/tiledbsoma/io/shaping.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,14 +470,17 @@ def _recurse(
470470
# Non-terminal
471471
if isinstance(item, tiledbsoma.Experiment):
472472
retval = {}
473-
retval["obs"] = _recurse(item, node_name="obs", **kwargs)
474-
retval["ms"] = _recurse(item, node_name="ms", **kwargs)
473+
if "obs" in item:
474+
retval["obs"] = _recurse(item, node_name="obs", **kwargs)
475+
if "ms" in item:
476+
retval["ms"] = _recurse(item, node_name="ms", **kwargs)
475477
return retval
476478

477479
# Non-terminal
478480
if isinstance(item, tiledbsoma.Measurement):
479481
retval = {}
480-
retval["var"] = _recurse(item, node_name="var", **kwargs)
482+
if "var" in item:
483+
retval["var"] = _recurse(item, node_name="var", **kwargs)
481484
for iter_coll_name in ["X", "obsm", "obsp", "varm", "varp"]:
482485
kwargs["coll_name"] = iter_coll_name
483486
children_dict = _recurse(item, node_name=iter_coll_name, **kwargs)

apis/python/tests/test_shape.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,43 @@ def _check_ndarray(ndarray, has_shapes, expected_shape):
826826
assert dict_output == expect
827827

828828

829+
@pytest.mark.parametrize("level", [1, 2, 3, 4])
830+
def test_get_experiment_shapes_corner_cases(tmp_path, level):
831+
path1 = tmp_path
832+
path2 = path1 / "ms"
833+
path3 = path2 / "RNA"
834+
path4 = path3 / "X"
835+
836+
uri1 = path1.as_posix()
837+
uri2 = path2.as_posix()
838+
uri3 = path3.as_posix()
839+
uri4 = path4.as_posix()
840+
841+
with tiledbsoma.Experiment.create(uri1) as exp:
842+
if level >= 2:
843+
with tiledbsoma.Collection.create(uri2) as ms:
844+
if level >= 3:
845+
with tiledbsoma.Measurement.create(uri3) as RNA:
846+
if level >= 4:
847+
with tiledbsoma.Collection.create(uri4) as X:
848+
pass
849+
RNA.set("X", X, use_relative_uri=False)
850+
ms.set("RNA", RNA, use_relative_uri=False)
851+
exp.set("ms", ms, use_relative_uri=False)
852+
853+
actual = tiledbsoma.io.get_experiment_shapes(uri1)
854+
expect = {}
855+
if level == 1:
856+
expect = {}
857+
elif level == 2:
858+
expect = {"ms": {}}
859+
elif level == 3:
860+
expect = {"ms": {"RNA": {}}}
861+
elif level == 4:
862+
expect = {"ms": {"RNA": {}}}
863+
assert actual == expect
864+
865+
829866
def test_canned_nonstandard_dataframe_upgrade(tmp_path):
830867
uri = tmp_path.as_posix()
831868

0 commit comments

Comments
 (0)