@@ -75,6 +75,85 @@ def test_readwritedata():
7575 img = nib .load (name )
7676 nib .save (img , 'test.nii' )
7777 img2 = nib .load ('test.nii' )
78- assert_equal (len (img .header .matrix .mims ), len (img2 .header .matrix .mims ))
79- assert_array_almost_equal (img .data ,
80- img2 .data )
78+ assert_equal (len (img .header .matrix .mims ),
79+ len (img2 .header .matrix .mims ))
80+ # Order should be preserved in load/save
81+ for mim1 , mim2 in zip (img .header .matrix .mims ,
82+ img2 .header .matrix .mims ):
83+ assert_equal (len (mim1 .named_maps ), len (mim2 .named_maps ))
84+ for map1 , map2 in zip (mim1 .named_maps , mim2 .named_maps ):
85+ assert_equal (map1 .map_name , map2 .map_name )
86+ if map1 .label_table is None :
87+ assert_true (map2 .label_table is None )
88+ else :
89+ assert_equal (len (map1 .label_table .labels ),
90+ len (map2 .label_table .labels ))
91+ assert_array_almost_equal (img .data , img2 .data )
92+
93+
94+ def test_cifti2types ():
95+ """Check that we instantiate Cifti2 classes correctly, and that our
96+ test files exercise all classes"""
97+ counter = {ci .Cifti2LabelTable : 0 ,
98+ ci .Cifti2Label : 0 ,
99+ ci .Cifti2NamedMap : 0 ,
100+ ci .Cifti2Surface : 0 ,
101+ ci .Cifti2VoxelIndicesIJK : 0 ,
102+ ci .Cifti2Vertices : 0 ,
103+ ci .Cifti2Parcel : 0 ,
104+ ci .Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ : 0 ,
105+ ci .Cifti2Volume : 0 ,
106+ ci .Cifti2VertexIndices : 0 ,
107+ ci .Cifti2BrainModel : 0 ,
108+ ci .Cifti2MatrixIndicesMap : 0 ,
109+ }
110+ for name in datafiles :
111+ hdr = nib .load (name ).header
112+ # Matrix and MetaData aren't conditional, so don't bother counting
113+ assert_true (isinstance (hdr .matrix , ci .Cifti2Matrix ))
114+ assert_true (isinstance (hdr .matrix .metadata , ci .Cifti2MetaData ))
115+ assert_true (isinstance (hdr .matrix .mims , list ))
116+ for mim in hdr .matrix .mims :
117+ assert_true (isinstance (mim , ci .Cifti2MatrixIndicesMap ))
118+ counter [ci .Cifti2MatrixIndicesMap ] += 1
119+ assert_true (isinstance (mim .brain_models , list ))
120+ for bm in mim .brain_models :
121+ assert_true (isinstance (bm , ci .Cifti2BrainModel ))
122+ counter [ci .Cifti2BrainModel ] += 1
123+ if isinstance (bm .vertex_indices , ci .Cifti2VertexIndices ):
124+ counter [ci .Cifti2VertexIndices ] += 1
125+ if isinstance (bm .voxel_indices_ijk , ci .Cifti2VoxelIndicesIJK ):
126+ counter [ci .Cifti2VoxelIndicesIJK ] += 1
127+ assert_true (isinstance (mim .named_maps , list ))
128+ for nm in mim .named_maps :
129+ assert_true (isinstance (nm , ci .Cifti2NamedMap ))
130+ counter [ci .Cifti2NamedMap ] += 1
131+ assert_true (isinstance (nm .metadata , ci .Cifti2MetaData ))
132+ if isinstance (nm .label_table , ci .Cifti2LabelTable ):
133+ counter [ci .Cifti2LabelTable ] += 1
134+ assert_true (isinstance (nm .label_table .labels , list ))
135+ for label in nm .label_table .labels :
136+ assert_true (isinstance (label , ci .Cifti2Label ))
137+ counter [ci .Cifti2Label ] += 1
138+ assert_true (isinstance (mim .parcels , list ))
139+ for parc in mim .parcels :
140+ assert_true (isinstance (parc , ci .Cifti2Parcel ))
141+ counter [ci .Cifti2Parcel ] += 1
142+ if isinstance (parc .voxel_indices_ijk ,
143+ ci .Cifti2VoxelIndicesIJK ):
144+ counter [ci .Cifti2VoxelIndicesIJK ] += 1
145+ assert_true (isinstance (parc .vertices , list ))
146+ for vtcs in parc .vertices :
147+ assert_true (isinstance (vtcs , ci .Cifti2Vertices ))
148+ counter [ci .Cifti2Vertices ] += 1
149+ assert_true (isinstance (mim .surfaces , list ))
150+ for surf in mim .surfaces :
151+ assert_true (isinstance (surf , ci .Cifti2Surface ))
152+ counter [ci .Cifti2Surface ] += 1
153+ if isinstance (mim .volume , ci .Cifti2Volume ):
154+ counter [ci .Cifti2Volume ] += 1
155+ if isinstance (mim .volume .transformation_matrix_voxel_indices_ijk_to_xyz ,
156+ ci .Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ ):
157+ counter [ci .Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ ] += 1
158+ for klass , count in counter .items ():
159+ assert_true (count > 0 , "No exercise of " + klass .__name__ )
0 commit comments