Skip to content

Commit 832f134

Browse files
Merge pull request #806 from INM-6/fix/nix_empty_arrayannotations
Support Empty Array Annotations in NixIO
2 parents 268036e + 141fc3d commit 832f134

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

neo/io/nixio.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ def _write_analogsignal(self, anasig, nixblock, nixgroup):
10081008
if anasig.array_annotations:
10091009
for k, v in anasig.array_annotations.items():
10101010
p = self._write_property(metadata, k, v)
1011-
p.definition = ARRAYANNOTATION
1011+
p.type = ARRAYANNOTATION
10121012

10131013
self._signal_map[nix_name] = nixdas
10141014

@@ -1141,7 +1141,7 @@ def _write_irregularlysampledsignal(self, irsig, nixblock, nixgroup):
11411141
if irsig.array_annotations:
11421142
for k, v in irsig.array_annotations.items():
11431143
p = self._write_property(metadata, k, v)
1144-
p.definition = ARRAYANNOTATION
1144+
p.type = ARRAYANNOTATION
11451145

11461146
self._signal_map[nix_name] = nixdas
11471147

@@ -1191,7 +1191,7 @@ def _write_event(self, event, nixblock, nixgroup):
11911191
if event.array_annotations:
11921192
for k, v in event.array_annotations.items():
11931193
p = self._write_property(metadata, k, v)
1194-
p.definition = ARRAYANNOTATION
1194+
p.type = ARRAYANNOTATION
11951195

11961196
nixgroup.multi_tags.append(nixmt)
11971197

@@ -1252,7 +1252,7 @@ def _write_epoch(self, epoch, nixblock, nixgroup):
12521252
if epoch.array_annotations:
12531253
for k, v in epoch.array_annotations.items():
12541254
p = self._write_property(metadata, k, v)
1255-
p.definition = ARRAYANNOTATION
1255+
p.type = ARRAYANNOTATION
12561256

12571257
nixgroup.multi_tags.append(nixmt)
12581258

@@ -1311,7 +1311,7 @@ def _write_spiketrain(self, spiketrain, nixblock, nixgroup):
13111311
if spiketrain.array_annotations:
13121312
for k, v in spiketrain.array_annotations.items():
13131313
p = self._write_property(metadata, k, v)
1314-
p.definition = ARRAYANNOTATION
1314+
p.type = ARRAYANNOTATION
13151315

13161316
if nixgroup:
13171317
nixgroup.multi_tags.append(nixmt)
@@ -1513,7 +1513,7 @@ def _nix_attr_to_neo(nix_obj):
15131513
values = values[0]
15141514
if prop.definition in (DATEANNOTATION, TIMEANNOTATION, DATETIMEANNOTATION):
15151515
values = dt_from_nix(values, prop.definition)
1516-
if prop.definition == ARRAYANNOTATION:
1516+
if prop.type == ARRAYANNOTATION:
15171517
if 'array_annotations' in neo_attrs:
15181518
neo_attrs['array_annotations'][prop.name] = values
15191519
else:

neo/test/iotest/test_nixio.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ def create_full_nix_file(cls, filename):
420420
asig_md.create_property(arr_ann_name,
421421
arr_ann_val.magnitude.flatten())
422422
asig_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
423-
asig_md.props[arr_ann_name].definition = 'ARRAYANNOTATION'
423+
asig_md.props[arr_ann_name].type = 'ARRAYANNOTATION'
424424

425425
for idx in range(10):
426426
da_asig = blk.create_data_array(
@@ -454,7 +454,7 @@ def create_full_nix_file(cls, filename):
454454
imgseq_md.create_property(arr_ann_name,
455455
arr_ann_val.magnitude.flatten())
456456
imgseq_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
457-
imgseq_md.props[arr_ann_name].definition = 'ARRAYANNOTATION'
457+
imgseq_md.props[arr_ann_name].type = 'ARRAYANNOTATION'
458458

459459
for idx in range(10):
460460
da_imgseq = blk.create_data_array(
@@ -487,7 +487,7 @@ def create_full_nix_file(cls, filename):
487487
isig_md.create_property(arr_ann_name,
488488
arr_ann_val.magnitude.flatten())
489489
isig_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
490-
isig_md.props[arr_ann_name].definition = 'ARRAYANNOTATION'
490+
isig_md.props[arr_ann_name].type = 'ARRAYANNOTATION'
491491
for idx in range(7):
492492
da_isig = blk.create_data_array(
493493
"{}.{}".format(isig_name, idx),
@@ -529,7 +529,7 @@ def create_full_nix_file(cls, filename):
529529
mtag_st_md.create_property(arr_ann_name,
530530
arr_ann_val.magnitude.flatten())
531531
mtag_st_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
532-
mtag_st_md.props[arr_ann_name].definition = 'ARRAYANNOTATION'
532+
mtag_st_md.props[arr_ann_name].type = 'ARRAYANNOTATION'
533533

534534
waveforms = cls.rquant((10, 8, 5), 1)
535535
wfname = "{}.waveforms".format(mtag_st.name)
@@ -581,7 +581,7 @@ def create_full_nix_file(cls, filename):
581581
mtag_ep.metadata.create_property(arr_ann_name,
582582
arr_ann_val.magnitude.flatten())
583583
mtag_ep.metadata.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
584-
mtag_ep.metadata.props[arr_ann_name].definition = 'ARRAYANNOTATION'
584+
mtag_ep.metadata.props[arr_ann_name].type = 'ARRAYANNOTATION'
585585

586586
label_dim = mtag_ep.positions.append_set_dimension()
587587
label_dim.labels = cls.rsentence(5).split(" ")
@@ -614,7 +614,7 @@ def create_full_nix_file(cls, filename):
614614
mtag_ev.metadata.create_property(arr_ann_name,
615615
arr_ann_val.magnitude.flatten())
616616
mtag_ev.metadata.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
617-
mtag_ev.metadata.props[arr_ann_name].definition = 'ARRAYANNOTATION'
617+
mtag_ev.metadata.props[arr_ann_name].type = 'ARRAYANNOTATION'
618618

619619
label_dim = mtag_ev.positions.append_set_dimension()
620620
label_dim.labels = cls.rsentence(5).split(" ")
@@ -1570,6 +1570,24 @@ def test_annotations_special_cases(self):
15701570

15711571
# TODO: multi dimensional value (GH Issue #501)
15721572

1573+
def test_empty_array_annotations(self):
1574+
wblock = Block("block with spiketrain")
1575+
wseg = Segment()
1576+
wseg.spiketrains = [SpikeTrain(times=[] * pq.s, t_stop=1 * pq.s,
1577+
array_annotations={'empty': []})]
1578+
wblock.segments = [wseg]
1579+
self.writer.write_block(wblock)
1580+
try:
1581+
rblock = self.writer.read_block(neoname="block with spiketrain")
1582+
except Exception as exc:
1583+
self.fail('The following exception was raised when'
1584+
+ ' reading the block with an empty array annotation:\n'
1585+
+ str(exc))
1586+
rst = rblock.segments[0].spiketrains[0]
1587+
self.assertEqual(len(rst.array_annotations), 1)
1588+
self.assertIn('empty', rst.array_annotations.keys())
1589+
self.assertEqual(len(rst.array_annotations['empty']), 0)
1590+
15731591
def test_write_proxyobjects(self):
15741592

15751593
def generate_complete_block():

0 commit comments

Comments
 (0)