@@ -325,6 +325,8 @@ def compare_attr(self, neoobj, nixobj):
325325 if isinstance (nixvalue , Iterable ):
326326 nixvalue = np .array (nixvalue )
327327 np .testing .assert_almost_equal (nixvalue , v .magnitude )
328+ if isinstance (v , np .ndarray ):
329+ self .assertTrue (np .all (v == nixmd [str (k )]))
328330 else :
329331 self .assertEqual (nixmd [str (k )], v ,
330332 "Property value mismatch: {}" .format (k ))
@@ -373,15 +375,15 @@ def create_full_nix_file(cls, filename):
373375 asig_md = group .metadata .create_section (asig_name ,
374376 asig_name + ".metadata" )
375377
376- arr_ann_name , arr_ann_val = cls . rword ( 6 ) , cls .rquant (10 , pq .uV )
378+ arr_ann_name , arr_ann_val = 'anasig_arr_ann' , cls .rquant (10 , pq .uV )
377379 asig_md .create_property (arr_ann_name , arr_ann_val .magnitude .flatten ())
378380 asig_md .props [arr_ann_name ].unit = str (arr_ann_val .dimensionality )
379381
380- for idx in range (3 ):
382+ for idx in range (10 ):
381383 da_asig = blk .create_data_array (
382384 "{}.{}" .format (asig_name , idx ),
383385 "neo.analogsignal" ,
384- data = cls .rquant (100 , 10 )
386+ data = cls .rquant (100 , 1 )
385387 )
386388 da_asig .definition = asig_definition
387389 da_asig .unit = "mV"
@@ -406,14 +408,14 @@ def create_full_nix_file(cls, filename):
406408 isig_md = group .metadata .create_section (isig_name ,
407409 isig_name + ".metadata" )
408410 isig_times = cls .rquant (200 , 1 , True )
409- arr_ann_name , arr_ann_val = cls . rword ( 6 ) , cls .rquant (10 , pq .uV )
411+ arr_ann_name , arr_ann_val = 'irrsig_arr_ann' , cls .rquant (7 , pq .uV )
410412 isig_md .create_property (arr_ann_name , arr_ann_val .magnitude .flatten ())
411413 isig_md .props [arr_ann_name ].unit = str (arr_ann_val .dimensionality )
412- for idx in range (10 ):
414+ for idx in range (7 ):
413415 da_isig = blk .create_data_array (
414416 "{}.{}" .format (isig_name , idx ),
415417 "neo.irregularlysampledsignal" ,
416- data = cls .rquant (200 , 10 )
418+ data = cls .rquant (200 , 1 )
417419 )
418420 da_isig .definition = isig_definition
419421 da_isig .unit = "mV"
@@ -447,7 +449,7 @@ def create_full_nix_file(cls, filename):
447449 mtag_st .metadata = mtag_st_md
448450 mtag_st_md .create_property ("t_stop" , times [- 1 ] + 1.0 )
449451
450- arr_ann_name , arr_ann_val = cls . rword ( 6 ) , cls .rquant (40 , pq .uV )
452+ arr_ann_name , arr_ann_val = 'st_arr_ann' , cls .rquant (40 , pq .uV )
451453 mtag_st_md .create_property (arr_ann_name , arr_ann_val .magnitude .flatten ())
452454 mtag_st_md .props [arr_ann_name ].unit = str (arr_ann_val .dimensionality )
453455
@@ -498,7 +500,7 @@ def create_full_nix_file(cls, filename):
498500 mtag_ep .definition = cls .rsentence (2 )
499501 mtag_ep .extents = extents_da
500502
501- arr_ann_name , arr_ann_val = cls . rword ( 6 ) , cls .rquant (5 , pq .uV )
503+ arr_ann_name , arr_ann_val = 'ep_arr_ann' , cls .rquant (5 , pq .uV )
502504 mtag_ep .metadata .create_property (arr_ann_name , arr_ann_val .magnitude .flatten ())
503505 mtag_ep .metadata .props [arr_ann_name ].unit = str (arr_ann_val .dimensionality )
504506
@@ -528,7 +530,7 @@ def create_full_nix_file(cls, filename):
528530 group .multi_tags .append (mtag_ev )
529531 mtag_ev .definition = cls .rsentence (2 )
530532
531- arr_ann_name , arr_ann_val = cls . rword ( 6 ) , cls .rquant (5 , pq .uV )
533+ arr_ann_name , arr_ann_val = 'ev_arr_ann' , cls .rquant (5 , pq .uV )
532534 mtag_ev .metadata .create_property (arr_ann_name , arr_ann_val .magnitude .flatten ())
533535 mtag_ev .metadata .props [arr_ann_name ].unit = str (arr_ann_val .dimensionality )
534536
@@ -1401,6 +1403,60 @@ def test_neo_name_read(self):
14011403 neoblock = self .io .read_block (neoname = neoname )
14021404 self .assertEqual (neoblock .annotations ["nix_name" ], nixblock .name )
14031405
1406+ def test_array_annotations_read (self ):
1407+ for bl in self .io .read_all_blocks ():
1408+ nix_block = self .nixfile .blocks [bl .annotations ['nix_name' ]]
1409+ for seg in bl .segments :
1410+ for anasig in seg .analogsignals :
1411+ da = nix_block .data_arrays [anasig .annotations ['nix_name' ]+ '.0' ]
1412+ self .assertIn ('anasig_arr_ann' , da .metadata )
1413+ self .assertIn ('anasig_arr_ann' , anasig .array_annotations )
1414+ self .assertTrue (np .all (da .metadata ['anasig_arr_ann' ] ==
1415+ anasig .array_annotations ['anasig_arr_ann' ].magnitude ))
1416+ self .assertEqual (da .metadata .props ['anasig_arr_ann' ].unit ,
1417+ units_to_string (
1418+ anasig .array_annotations ['anasig_arr_ann' ].units ))
1419+ for irrsig in seg .irregularlysampledsignals :
1420+ da = nix_block .data_arrays [irrsig .annotations ['nix_name' ] + '.0' ]
1421+ self .assertIn ('irrsig_arr_ann' , da .metadata )
1422+ self .assertIn ('irrsig_arr_ann' , irrsig .array_annotations )
1423+ self .assertTrue (np .all (da .metadata ['irrsig_arr_ann' ] ==
1424+ irrsig .array_annotations [
1425+ 'irrsig_arr_ann' ].magnitude ))
1426+ self .assertEqual (da .metadata .props ['irrsig_arr_ann' ].unit ,
1427+ units_to_string (
1428+ irrsig .array_annotations ['irrsig_arr_ann' ].units ))
1429+ for ev in seg .events :
1430+ da = nix_block .multi_tags [ev .annotations ['nix_name' ]]
1431+ self .assertIn ('ev_arr_ann' , da .metadata )
1432+ self .assertIn ('ev_arr_ann' , ev .array_annotations )
1433+ self .assertTrue (np .all (da .metadata ['ev_arr_ann' ] ==
1434+ ev .array_annotations [
1435+ 'ev_arr_ann' ].magnitude ))
1436+ self .assertEqual (da .metadata .props ['ev_arr_ann' ].unit ,
1437+ units_to_string (
1438+ ev .array_annotations ['ev_arr_ann' ].units ))
1439+ for ep in seg .epochs :
1440+ da = nix_block .multi_tags [ep .annotations ['nix_name' ]]
1441+ self .assertIn ('ep_arr_ann' , da .metadata )
1442+ self .assertIn ('ep_arr_ann' , ep .array_annotations )
1443+ self .assertTrue (np .all (da .metadata ['ep_arr_ann' ] ==
1444+ ep .array_annotations [
1445+ 'ep_arr_ann' ].magnitude ))
1446+ self .assertEqual (da .metadata .props ['ep_arr_ann' ].unit ,
1447+ units_to_string (
1448+ ep .array_annotations ['ep_arr_ann' ].units ))
1449+ for st in seg .spiketrains :
1450+ da = nix_block .multi_tags [st .annotations ['nix_name' ]]
1451+ self .assertIn ('st_arr_ann' , da .metadata )
1452+ self .assertIn ('st_arr_ann' , st .array_annotations )
1453+ self .assertTrue (np .all (da .metadata ['st_arr_ann' ] ==
1454+ st .array_annotations [
1455+ 'st_arr_ann' ].magnitude ))
1456+ self .assertEqual (da .metadata .props ['st_arr_ann' ].unit ,
1457+ units_to_string (
1458+ st .array_annotations ['st_arr_ann' ].units ))
1459+
14041460
14051461@unittest .skipUnless (HAVE_NIX , "Requires NIX" )
14061462class NixIOContextTests (NixIOTest ):
0 commit comments