@@ -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