@@ -239,7 +239,7 @@ def test_dtseries():
239239 img = ci .Cifti2Image (data , hdr )
240240
241241 with InTemporaryDirectory ():
242- ci .save (img , 'test.dtseries.nii' , infer_intent = True )
242+ ci .save (img , 'test.dtseries.nii' )
243243 img2 = nib .load ('test.dtseries.nii' )
244244 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnDenseSeries'
245245 assert isinstance (img2 , ci .Cifti2Image )
@@ -282,7 +282,7 @@ def test_dlabel():
282282 img = ci .Cifti2Image (data , hdr )
283283
284284 with InTemporaryDirectory ():
285- ci .save (img , 'test.dlabel.nii' , infer_intent = True )
285+ ci .save (img , 'test.dlabel.nii' )
286286 img2 = nib .load ('test.dlabel.nii' )
287287 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnDenseLabel'
288288 assert isinstance (img2 , ci .Cifti2Image )
@@ -301,7 +301,7 @@ def test_dconn():
301301 img = ci .Cifti2Image (data , hdr )
302302
303303 with InTemporaryDirectory ():
304- ci .save (img , 'test.dconn.nii' , infer_intent = True )
304+ ci .save (img , 'test.dconn.nii' )
305305 img2 = nib .load ('test.dconn.nii' )
306306 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnDense'
307307 assert isinstance (img2 , ci .Cifti2Image )
@@ -322,7 +322,7 @@ def test_ptseries():
322322 img = ci .Cifti2Image (data , hdr )
323323
324324 with InTemporaryDirectory ():
325- ci .save (img , 'test.ptseries.nii' , infer_intent = True )
325+ ci .save (img , 'test.ptseries.nii' )
326326 img2 = nib .load ('test.ptseries.nii' )
327327 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnParcelSries'
328328 assert isinstance (img2 , ci .Cifti2Image )
@@ -343,7 +343,7 @@ def test_pscalar():
343343 img = ci .Cifti2Image (data , hdr )
344344
345345 with InTemporaryDirectory ():
346- ci .save (img , 'test.pscalar.nii' , infer_intent = True )
346+ ci .save (img , 'test.pscalar.nii' )
347347 img2 = nib .load ('test.pscalar.nii' )
348348 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnParcelScalr'
349349 assert isinstance (img2 , ci .Cifti2Image )
@@ -364,7 +364,7 @@ def test_pdconn():
364364 img = ci .Cifti2Image (data , hdr )
365365
366366 with InTemporaryDirectory ():
367- ci .save (img , 'test.pdconn.nii' , infer_intent = True )
367+ ci .save (img , 'test.pdconn.nii' )
368368 img2 = ci .load ('test.pdconn.nii' )
369369 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnParcelDense'
370370 assert isinstance (img2 , ci .Cifti2Image )
@@ -385,7 +385,7 @@ def test_dpconn():
385385 img = ci .Cifti2Image (data , hdr )
386386
387387 with InTemporaryDirectory ():
388- ci .save (img , 'test.dpconn.nii' , infer_intent = True )
388+ ci .save (img , 'test.dpconn.nii' )
389389 img2 = ci .load ('test.dpconn.nii' )
390390 assert img2 .nifti_header .get_intent ()[0 ] == 'ConnDenseParcel'
391391 assert isinstance (img2 , ci .Cifti2Image )
@@ -425,7 +425,7 @@ def test_pconn():
425425 img = ci .Cifti2Image (data , hdr )
426426
427427 with InTemporaryDirectory ():
428- ci .save (img , 'test.pconn.nii' , infer_intent = True )
428+ ci .save (img , 'test.pconn.nii' )
429429 img2 = ci .load ('test.pconn.nii' )
430430 assert img .nifti_header .get_intent ()[0 ] == 'ConnParcels'
431431 assert isinstance (img2 , ci .Cifti2Image )
@@ -447,7 +447,7 @@ def test_pconnseries():
447447 img = ci .Cifti2Image (data , hdr )
448448
449449 with InTemporaryDirectory ():
450- ci .save (img , 'test.pconnseries.nii' , infer_intent = True )
450+ ci .save (img , 'test.pconnseries.nii' )
451451 img2 = ci .load ('test.pconnseries.nii' )
452452 assert img .nifti_header .get_intent ()[0 ] == 'ConnPPSr'
453453 assert isinstance (img2 , ci .Cifti2Image )
@@ -470,7 +470,7 @@ def test_pconnscalar():
470470 img = ci .Cifti2Image (data , hdr )
471471
472472 with InTemporaryDirectory ():
473- ci .save (img , 'test.pconnscalar.nii' , infer_intent = True )
473+ ci .save (img , 'test.pconnscalar.nii' )
474474 img2 = ci .load ('test.pconnscalar.nii' )
475475 assert img .nifti_header .get_intent ()[0 ] == 'ConnPPSc'
476476 assert isinstance (img2 , ci .Cifti2Image )
@@ -509,3 +509,45 @@ def test_wrong_shape():
509509 with pytest .raises (ValueError ):
510510 img .to_file_map ()
511511
512+
513+ def test_cifti_validation ():
514+ # flip label / brain_model index maps
515+ geometry_map = create_geometry_map ((0 , ))
516+ label_map = create_label_map ((1 , ))
517+ matrix = ci .Cifti2Matrix ()
518+ matrix .append (label_map )
519+ matrix .append (geometry_map )
520+ hdr = ci .Cifti2Header (matrix )
521+ data = np .random .randn (10 , 2 )
522+ img = ci .Cifti2Image (data , hdr )
523+
524+ # attempt to save and validate with an invalid extension
525+ with pytest .raises (KeyError ):
526+ ci .save (img , 'test.dlabelz.nii' )
527+ # even with a proper extension, flipped index maps will fail
528+ with pytest .raises (ci .Cifti2HeaderError ):
529+ ci .save (img , 'test.dlabel.nii' )
530+
531+ label_map = create_label_map ((0 , ))
532+ geometry_map = create_geometry_map ((1 , ))
533+ matrix = ci .Cifti2Matrix ()
534+ matrix .append (label_map )
535+ matrix .append (geometry_map )
536+ hdr = ci .Cifti2Header (matrix )
537+ data = np .random .randn (2 , 10 )
538+ img = ci .Cifti2Image (data , hdr )
539+
540+ with InTemporaryDirectory ():
541+ # still fail with invalid extension and validation
542+ with pytest .raises (KeyError ):
543+ ci .save (img , 'test.dlabelz.nii' )
544+ # but removing validation should work (though intent code will be unknown)
545+ ci .save (img , 'test.dlabelz.nii' , validate = False )
546+
547+ img2 = nib .load ('test.dlabelz.nii' )
548+ assert img2 .nifti_header .get_intent ()[0 ] == 'ConnUnknown'
549+ assert isinstance (img2 , ci .Cifti2Image )
550+ assert_array_equal (img2 .get_fdata (), data )
551+ check_label_map (img2 .header .matrix .get_index_map (0 ))
552+ check_geometry_map (img2 .header .matrix .get_index_map (1 ))
553+ del img2
0 commit comments