Skip to content

Commit 39d3794

Browse files
author
kleinjohann
committed
Add array_annotations to tests
1 parent f873291 commit 39d3794

File tree

1 file changed

+49
-9
lines changed

1 file changed

+49
-9
lines changed

neo/test/iotest/test_nixio.py

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,22 @@ def compare_attr(self, neoobj, nixobj):
312312
else:
313313
self.assertEqual(nixmd[str(k)], v,
314314
"Property value mismatch: {}".format(k))
315+
if hasattr(neoobj, 'array_annotations'):
316+
if neoobj.array_annotations:
317+
nixmd = nixobj.metadata
318+
for k, v, in neoobj.array_annotations.items():
319+
if k in ['labels', 'durations']:
320+
continue
321+
if isinstance(v, pq.Quantity):
322+
nixunit = nixmd.props[str(k)].unit
323+
self.assertEqual(nixunit, units_to_string(v.units))
324+
nixvalue = nixmd[str(k)]
325+
if isinstance(nixvalue, Iterable):
326+
nixvalue = np.array(nixvalue)
327+
np.testing.assert_almost_equal(nixvalue, v.magnitude)
328+
else:
329+
self.assertEqual(nixmd[str(k)], v,
330+
"Property value mismatch: {}".format(k))
315331

316332
@classmethod
317333
def create_full_nix_file(cls, filename):
@@ -356,11 +372,16 @@ def create_full_nix_file(cls, filename):
356372
asig_definition = cls.rsentence(5, 5)
357373
asig_md = group.metadata.create_section(asig_name,
358374
asig_name + ".metadata")
375+
376+
arr_ann_name, arr_ann_val = cls.rword(6), cls.rquant(10, pq.uV)
377+
asig_md.create_property(arr_ann_name, arr_ann_val.magnitude.flatten())
378+
asig_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
379+
359380
for idx in range(3):
360381
da_asig = blk.create_data_array(
361382
"{}.{}".format(asig_name, idx),
362383
"neo.analogsignal",
363-
data=cls.rquant(100, 1)
384+
data=cls.rquant(100, 10)
364385
)
365386
da_asig.definition = asig_definition
366387
da_asig.unit = "mV"
@@ -385,11 +406,14 @@ def create_full_nix_file(cls, filename):
385406
isig_md = group.metadata.create_section(isig_name,
386407
isig_name + ".metadata")
387408
isig_times = cls.rquant(200, 1, True)
409+
arr_ann_name, arr_ann_val = cls.rword(6), cls.rquant(10, pq.uV)
410+
isig_md.create_property(arr_ann_name, arr_ann_val.magnitude.flatten())
411+
isig_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
388412
for idx in range(10):
389413
da_isig = blk.create_data_array(
390414
"{}.{}".format(isig_name, idx),
391415
"neo.irregularlysampledsignal",
392-
data=cls.rquant(200, 1)
416+
data=cls.rquant(200, 10)
393417
)
394418
da_isig.definition = isig_definition
395419
da_isig.unit = "mV"
@@ -423,6 +447,10 @@ def create_full_nix_file(cls, filename):
423447
mtag_st.metadata = mtag_st_md
424448
mtag_st_md.create_property("t_stop", times[-1] + 1.0)
425449

450+
arr_ann_name, arr_ann_val = cls.rword(6), cls.rquant(40, pq.uV)
451+
mtag_st_md.create_property(arr_ann_name, arr_ann_val.magnitude.flatten())
452+
mtag_st_md.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
453+
426454
waveforms = cls.rquant((10, 8, 5), 1)
427455
wfname = "{}.waveforms".format(mtag_st.name)
428456
wfda = blk.create_data_array(wfname, "neo.waveforms",
@@ -469,6 +497,11 @@ def create_full_nix_file(cls, filename):
469497
group.multi_tags.append(mtag_ep)
470498
mtag_ep.definition = cls.rsentence(2)
471499
mtag_ep.extents = extents_da
500+
501+
arr_ann_name, arr_ann_val = cls.rword(6), cls.rquant(5, pq.uV)
502+
mtag_ep.metadata.create_property(arr_ann_name, arr_ann_val.magnitude.flatten())
503+
mtag_ep.metadata.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
504+
472505
label_dim = mtag_ep.positions.append_set_dimension()
473506
label_dim.labels = cls.rsentence(5).split(" ")
474507
# reference all signals in the group
@@ -494,6 +527,11 @@ def create_full_nix_file(cls, filename):
494527
)
495528
group.multi_tags.append(mtag_ev)
496529
mtag_ev.definition = cls.rsentence(2)
530+
531+
arr_ann_name, arr_ann_val = cls.rword(6), cls.rquant(5, pq.uV)
532+
mtag_ev.metadata.create_property(arr_ann_name, arr_ann_val.magnitude.flatten())
533+
mtag_ev.metadata.props[arr_ann_name].unit = str(arr_ann_val.dimensionality)
534+
497535
label_dim = mtag_ev.positions.append_set_dimension()
498536
label_dim.labels = cls.rsentence(5).split(" ")
499537
# reference all signals in the group
@@ -589,8 +627,10 @@ def rquant(shape, unit, incr=False):
589627

590628
@classmethod
591629
def create_all_annotated(cls):
592-
times = cls.rquant(1, pq.s)
593-
signal = cls.rquant(1, pq.V)
630+
times = cls.rquant(10, pq.s)
631+
times_ann = {cls.rword(6): cls.rquant(10, pq.ms)}
632+
signal = cls.rquant((10, 10), pq.V)
633+
signal_ann = {cls.rword(6): cls.rquant(10, pq.uV)}
594634
blk = Block()
595635
blk.annotate(**cls.rdict(3))
596636
cls.populate_dates(blk)
@@ -600,24 +640,24 @@ def create_all_annotated(cls):
600640
cls.populate_dates(seg)
601641
blk.segments.append(seg)
602642

603-
asig = AnalogSignal(signal=signal, sampling_rate=pq.Hz)
643+
asig = AnalogSignal(signal=signal, sampling_rate=pq.Hz, array_annotations=signal_ann)
604644
asig.annotate(**cls.rdict(2))
605645
seg.analogsignals.append(asig)
606646

607647
isig = IrregularlySampledSignal(times=times, signal=signal,
608-
time_units=pq.s)
648+
time_units=pq.s, array_annotations=signal_ann)
609649
isig.annotate(**cls.rdict(2))
610650
seg.irregularlysampledsignals.append(isig)
611651

612-
epoch = Epoch(times=times, durations=times)
652+
epoch = Epoch(times=times, durations=times, array_annotations=times_ann)
613653
epoch.annotate(**cls.rdict(4))
614654
seg.epochs.append(epoch)
615655

616-
event = Event(times=times)
656+
event = Event(times=times, array_annotations=times_ann)
617657
event.annotate(**cls.rdict(4))
618658
seg.events.append(event)
619659

620-
spiketrain = SpikeTrain(times=times, t_stop=pq.s, units=pq.s)
660+
spiketrain = SpikeTrain(times=times, t_stop=pq.s, units=pq.s, array_annotations=times_ann)
621661
d = cls.rdict(6)
622662
d["quantity"] = pq.Quantity(10, "mV")
623663
d["qarray"] = pq.Quantity(range(10), "mA")

0 commit comments

Comments
 (0)