Skip to content
This repository was archived by the owner on Feb 26, 2025. It is now read-only.

Commit e1589b5

Browse files
authored
Fix empty list in reports (#51)
* Fix empty list in reports * this is a temporary solution until BlueBrain/libsonata#84 is done
1 parent 5147443 commit e1589b5

File tree

6 files changed

+21
-1
lines changed

6 files changed

+21
-1
lines changed

bluepysnap/frame_report.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from libsonata import ElementReportReader
2424

2525
from bluepysnap.exceptions import BluepySnapError
26+
from bluepysnap.utils import fix_libsonata_empty_list
2627

2728
L = logging.getLogger(__name__)
2829

@@ -211,6 +212,8 @@ def nodes(self):
211212

212213
def _resolve(self, group):
213214
"""Transform a group into a node_id array."""
215+
if group == []:
216+
return fix_libsonata_empty_list()
214217
return self.nodes.ids(group=group)
215218

216219

bluepysnap/spike_report.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import numpy as np
2525

2626
from bluepysnap.exceptions import BluepySnapError
27+
from bluepysnap.utils import fix_libsonata_empty_list
2728

2829

2930
def _get_reader(spike_report):
@@ -84,6 +85,8 @@ def nodes(self):
8485

8586
def _resolve_nodes(self, group):
8687
"""Transform a node group into a node_id array."""
88+
if group == []:
89+
return fix_libsonata_empty_list()
8790
return self.nodes.ids(group=group)
8891

8992
def get(self, group=None, t_start=None, t_stop=None):

bluepysnap/utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ def ensure_list(v):
4646
return [v]
4747

4848

49+
def fix_libsonata_empty_list():
50+
"""Temporary solution to return empty list from libsonata report readers `.get` functions.
51+
52+
see: https://github.com/BlueBrain/libsonata/issues/84
53+
"""
54+
return np.array([-2])
55+
56+
4957
def add_dynamic_prefix(properties):
5058
"""Add the dynamic prefix to a list of properties."""
5159
return [DYNAMICS_PREFIX + name for name in list(properties)]

tests/test_frame_report.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ def test_nodes_invalid_population(self):
142142
def test_get(self):
143143
pdt.assert_frame_equal(self.test_obj.get(), self.df)
144144

145+
pdt.assert_frame_equal(self.test_obj.get([]), pd.DataFrame())
146+
145147
pdt.assert_frame_equal(self.test_obj.get(2), self.df.loc[:, [2]])
146148

147149
pdt.assert_frame_equal(self.test_obj.get([2, 0]), self.df.loc[:, [0, 2]])

tests/test_spike_report.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test__resolve_nodes(self):
105105
def test_get(self):
106106
pdt.assert_series_equal(self.test_obj.get(),
107107
_create_series([2, 0, 1, 2, 0], [0.1, 0.2, 0.3, 0.7, 1.3]))
108-
108+
pdt.assert_series_equal(self.test_obj.get([]), _create_series([], []))
109109
npt.assert_allclose(self.test_obj.get(2), np.array([0.1, 0.7]))
110110
npt.assert_allclose(self.test_obj.get(0, t_start=1.), [1.3])
111111
npt.assert_allclose(self.test_obj.get(0, t_stop=1.), [0.2])

tests/test_utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ def test_ensure_list():
2929
assert test_module.ensure_list('abc') == ['abc']
3030

3131

32+
def test_fix_libsonata_empty_list():
33+
npt.assert_array_equal(test_module.fix_libsonata_empty_list(), np.array([-2]))
34+
35+
3236
def test_add_dynamic_prefix():
3337
assert test_module.add_dynamic_prefix(["a", "b"]) == [DYNAMICS_PREFIX+"a", DYNAMICS_PREFIX+"b"]
3438

0 commit comments

Comments
 (0)