11""" Testing gifti objects
22"""
33import warnings
4+ import sys
45
56import numpy as np
67
78import nibabel as nib
89from nibabel .externals .six import string_types
910from nibabel .gifti import (GiftiImage , GiftiDataArray , GiftiLabel ,
10- GiftiLabelTable , GiftiMetaData , GiftiNVPairs )
11+ GiftiLabelTable , GiftiMetaData , GiftiNVPairs ,
12+ GiftiCoordSystem )
1113from nibabel .gifti .gifti import data_tag
1214from nibabel .nifti1 import data_type_codes
1315
@@ -24,6 +26,8 @@ def test_gifti_image():
2426 # arguments.
2527 gi = GiftiImage ()
2628 assert_equal (gi .darrays , [])
29+ assert_equal (gi .meta .metadata , {})
30+ assert_equal (gi .labeltable .labels , [])
2731 arr = np .zeros ((2 , 3 ))
2832 gi .darrays .append (arr )
2933 # Now check we didn't overwrite the default arg
@@ -45,13 +49,6 @@ def test_gifti_image():
4549 gi .remove_gifti_data_array (0 )
4650 assert_equal (gi .numDA , 0 )
4751
48- # Test from string
49- da = GiftiDataArray .from_array ('zzzzz' )
50- gi .add_gifti_data_array (da )
51- assert_equal (gi .numDA , 1 )
52- assert_array_equal (gi .darrays [0 ].data , data )
53-
54-
5552 # Remove from empty
5653 gi = GiftiImage ()
5754 gi .remove_gifti_data_array_by_intent (0 )
@@ -69,7 +66,93 @@ def test_gifti_image():
6966 assert_equal (gi .numDA , 0 )
7067
7168
72- def test_dataarray ():
69+ def test_gifti_image_bad_inputs ():
70+ img = GiftiImage ()
71+ # Try to set a non-data-array
72+ assert_raises (TypeError , img .add_gifti_data_array , 'not-a-data-array' )
73+
74+ # Try to set to non-table
75+ def assign_labeltable (val ):
76+ img .labeltable = val
77+ assert_raises (TypeError , assign_labeltable , 'not-a-table' )
78+
79+ # Try to set to non-table
80+ def assign_metadata (val ):
81+ img .meta = val
82+ assert_raises (TypeError , assign_metadata , 'not-a-meta' )
83+
84+
85+ def test_dataarray_empty ():
86+ # Test default initialization of DataArray
87+ null_da = GiftiDataArray ()
88+ assert_equal (null_da .data , None )
89+ assert_equal (null_da .intent , 0 )
90+ assert_equal (null_da .datatype , 0 )
91+ assert_equal (null_da .encoding , 3 )
92+ assert_equal (null_da .endian , 2 if sys .byteorder == 'little' else 1 )
93+ assert_equal (null_da .coordsys .dataspace , 0 )
94+ assert_equal (null_da .coordsys .xformspace , 0 )
95+ assert_array_equal (null_da .coordsys .xform , np .eye (4 ))
96+ assert_equal (null_da .ind_ord , 1 )
97+ assert_equal (null_da .meta .metadata , {})
98+ assert_equal (null_da .ext_fname , '' )
99+ assert_equal (null_da .ext_offset , 0 )
100+
101+
102+ def test_dataarray_init ():
103+ # Test non-default dataarray initialization
104+ gda = GiftiDataArray # shortcut
105+ assert_equal (gda (None ).data , None )
106+ arr = np .arange (12 , dtype = np .float32 ).reshape ((3 , 4 ))
107+ assert_array_equal (gda (arr ).data , arr )
108+ # Intents
109+ assert_raises (KeyError , gda , intent = 1 ) # Invalid code
110+ assert_raises (KeyError , gda , intent = 'not an intent' ) # Invalid string
111+ assert_equal (gda (intent = 2 ).intent , 2 )
112+ assert_equal (gda (intent = 'correlation' ).intent , 2 )
113+ assert_equal (gda (intent = 'NIFTI_INTENT_CORREL' ).intent , 2 )
114+ # Datatype
115+ assert_equal (gda (datatype = 2 ).datatype , 2 )
116+ assert_equal (gda (datatype = 'uint8' ).datatype , 2 )
117+ assert_raises (KeyError , gda , datatype = 'not_datatype' )
118+ # Float32 datatype comes from array if datatype not set
119+ assert_equal (gda (arr ).datatype , 16 )
120+ # Can be overriden by init
121+ assert_equal (gda (arr , datatype = 'uint8' ).datatype , 2 )
122+ # Encoding
123+ assert_equal (gda (encoding = 1 ).encoding , 1 )
124+ assert_equal (gda (encoding = 'ASCII' ).encoding , 1 )
125+ assert_equal (gda (encoding = 'GIFTI_ENCODING_ASCII' ).encoding , 1 )
126+ assert_raises (KeyError , gda , encoding = 'not an encoding' )
127+ # Endian
128+ assert_equal (gda (endian = 1 ).endian , 1 )
129+ assert_equal (gda (endian = 'big' ).endian , 1 )
130+ assert_equal (gda (endian = 'GIFTI_ENDIAN_BIG' ).endian , 1 )
131+ assert_raises (KeyError , gda , endian = 'not endian code' )
132+ # CoordSys
133+ aff = np .diag ([2 , 3 , 4 , 1 ])
134+ cs = GiftiCoordSystem (1 , 2 , aff )
135+ da = gda (coordsys = cs )
136+ assert_equal (da .coordsys .dataspace , 1 )
137+ assert_equal (da .coordsys .xformspace , 2 )
138+ assert_array_equal (da .coordsys .xform , aff )
139+ # Ordering
140+ assert_equal (gda (ordering = 2 ).ind_ord , 2 )
141+ assert_equal (gda (ordering = 'F' ).ind_ord , 2 )
142+ assert_equal (gda (ordering = 'ColumnMajorOrder' ).ind_ord , 2 )
143+ assert_raises (KeyError , gda , ordering = 'not an ordering' )
144+ # metadata
145+ meta_dict = dict (one = 1 , two = 2 )
146+ assert_equal (gda (meta = GiftiMetaData .from_dict (meta_dict )).meta .metadata ,
147+ meta_dict )
148+ assert_equal (gda (meta = meta_dict ).meta .metadata , meta_dict )
149+ assert_equal (gda (meta = None ).meta .metadata , {})
150+ # ext_fname and ext_offset
151+ assert_equal (gda (ext_fname = 'foo' ).ext_fname , 'foo' )
152+ assert_equal (gda (ext_offset = 12 ).ext_offset , 12 )
153+
154+
155+ def test_dataarray_from_array ():
73156 for dt_code in data_type_codes .value_set ():
74157 data_type = data_type_codes .type [dt_code ]
75158 if data_type is np .void : # not supported
@@ -104,25 +187,16 @@ def test_labeltable():
104187
105188
106189def test_metadata ():
190+ nvpair = GiftiNVPairs ('key' , 'value' )
191+ da = GiftiMetaData (nvpair = nvpair )
192+ assert_equal (da .data [0 ].name , 'key' )
193+ assert_equal (da .data [0 ].value , 'value' )
107194 # Test deprecation
108195 with clear_and_catch_warnings () as w :
109196 warnings .filterwarnings ('always' , category = DeprecationWarning )
110197 assert_equal (len (GiftiDataArray ().get_metadata ()), 0 )
111198 assert_equal (len (w ), 1 )
112199
113- # Test deprecation
114- with clear_and_catch_warnings () as w :
115- warnings .filterwarnings ('once' , category = DeprecationWarning )
116- assert_equal (len (GiftiMetaData ().get_metadata ()), 0 )
117- assert_equal (len (w ), 1 )
118-
119-
120- def test_metadata ():
121- nvpair = GiftiNVPairs ('key' , 'value' )
122- da = GiftiMetaData (nvpair = nvpair )
123- assert_equal (da .data [0 ].name , 'key' )
124- assert_equal (da .data [0 ].value , 'value' )
125-
126200
127201def test_gifti_label_rgba ():
128202 rgba = np .random .rand (4 )
@@ -177,26 +251,6 @@ def test_gifti_coord():
177251 gcs .to_xml ()
178252
179253
180- def test_gifti_image ():
181- img = GiftiImage ()
182- assert_true (img .darrays is not None )
183- assert_true (img .meta is not None )
184- assert_true (img .labeltable is not None )
185-
186- # Try to set a non-data-array
187- assert_raises (TypeError , img .add_gifti_data_array , 'not-a-data-array' )
188-
189- # Try to set to non-table
190- def assign_labeltable (val ):
191- img .labeltable = val
192- assert_raises (TypeError , assign_labeltable , 'not-a-table' )
193-
194- # Try to set to non-table
195- def assign_metadata (val ):
196- img .meta = val
197- assert_raises (TypeError , assign_metadata , 'not-a-meta' )
198-
199-
200254def test_data_tag_deprecated ():
201255 with clear_and_catch_warnings () as w :
202256 warnings .filterwarnings ('once' , category = DeprecationWarning )
0 commit comments