@@ -239,7 +239,7 @@ def test_dtseries():
239239img = ci .Cifti2Image (data ,hdr )
240240
241241with InTemporaryDirectory ():
242- ci .save (img ,'test.dtseries.nii' , infer_intent = True )
242+ ci .save (img ,'test.dtseries.nii' )
243243img2 = nib .load ('test.dtseries.nii' )
244244assert img2 .nifti_header .get_intent ()[0 ]== 'ConnDenseSeries'
245245assert isinstance (img2 ,ci .Cifti2Image )
@@ -282,7 +282,7 @@ def test_dlabel():
282282img = ci .Cifti2Image (data ,hdr )
283283
284284with InTemporaryDirectory ():
285- ci .save (img ,'test.dlabel.nii' , infer_intent = True )
285+ ci .save (img ,'test.dlabel.nii' )
286286img2 = nib .load ('test.dlabel.nii' )
287287assert img2 .nifti_header .get_intent ()[0 ]== 'ConnDenseLabel'
288288assert isinstance (img2 ,ci .Cifti2Image )
@@ -301,7 +301,7 @@ def test_dconn():
301301img = ci .Cifti2Image (data ,hdr )
302302
303303with InTemporaryDirectory ():
304- ci .save (img ,'test.dconn.nii' , infer_intent = True )
304+ ci .save (img ,'test.dconn.nii' )
305305img2 = nib .load ('test.dconn.nii' )
306306assert img2 .nifti_header .get_intent ()[0 ]== 'ConnDense'
307307assert isinstance (img2 ,ci .Cifti2Image )
@@ -322,7 +322,7 @@ def test_ptseries():
322322img = ci .Cifti2Image (data ,hdr )
323323
324324with InTemporaryDirectory ():
325- ci .save (img ,'test.ptseries.nii' , infer_intent = True )
325+ ci .save (img ,'test.ptseries.nii' )
326326img2 = nib .load ('test.ptseries.nii' )
327327assert img2 .nifti_header .get_intent ()[0 ]== 'ConnParcelSries'
328328assert isinstance (img2 ,ci .Cifti2Image )
@@ -343,7 +343,7 @@ def test_pscalar():
343343img = ci .Cifti2Image (data ,hdr )
344344
345345with InTemporaryDirectory ():
346- ci .save (img ,'test.pscalar.nii' , infer_intent = True )
346+ ci .save (img ,'test.pscalar.nii' )
347347img2 = nib .load ('test.pscalar.nii' )
348348assert img2 .nifti_header .get_intent ()[0 ]== 'ConnParcelScalr'
349349assert isinstance (img2 ,ci .Cifti2Image )
@@ -364,7 +364,7 @@ def test_pdconn():
364364img = ci .Cifti2Image (data ,hdr )
365365
366366with InTemporaryDirectory ():
367- ci .save (img ,'test.pdconn.nii' , infer_intent = True )
367+ ci .save (img ,'test.pdconn.nii' )
368368img2 = ci .load ('test.pdconn.nii' )
369369assert img2 .nifti_header .get_intent ()[0 ]== 'ConnParcelDense'
370370assert isinstance (img2 ,ci .Cifti2Image )
@@ -385,7 +385,7 @@ def test_dpconn():
385385img = ci .Cifti2Image (data ,hdr )
386386
387387with InTemporaryDirectory ():
388- ci .save (img ,'test.dpconn.nii' , infer_intent = True )
388+ ci .save (img ,'test.dpconn.nii' )
389389img2 = ci .load ('test.dpconn.nii' )
390390assert img2 .nifti_header .get_intent ()[0 ]== 'ConnDenseParcel'
391391assert isinstance (img2 ,ci .Cifti2Image )
@@ -425,7 +425,7 @@ def test_pconn():
425425img = ci .Cifti2Image (data ,hdr )
426426
427427with InTemporaryDirectory ():
428- ci .save (img ,'test.pconn.nii' , infer_intent = True )
428+ ci .save (img ,'test.pconn.nii' )
429429img2 = ci .load ('test.pconn.nii' )
430430assert img .nifti_header .get_intent ()[0 ]== 'ConnParcels'
431431assert isinstance (img2 ,ci .Cifti2Image )
@@ -447,7 +447,7 @@ def test_pconnseries():
447447img = ci .Cifti2Image (data ,hdr )
448448
449449with InTemporaryDirectory ():
450- ci .save (img ,'test.pconnseries.nii' , infer_intent = True )
450+ ci .save (img ,'test.pconnseries.nii' )
451451img2 = ci .load ('test.pconnseries.nii' )
452452assert img .nifti_header .get_intent ()[0 ]== 'ConnPPSr'
453453assert isinstance (img2 ,ci .Cifti2Image )
@@ -470,7 +470,7 @@ def test_pconnscalar():
470470img = ci .Cifti2Image (data ,hdr )
471471
472472with InTemporaryDirectory ():
473- ci .save (img ,'test.pconnscalar.nii' , infer_intent = True )
473+ ci .save (img ,'test.pconnscalar.nii' )
474474img2 = ci .load ('test.pconnscalar.nii' )
475475assert img .nifti_header .get_intent ()[0 ]== 'ConnPPSc'
476476assert isinstance (img2 ,ci .Cifti2Image )
@@ -509,3 +509,45 @@ def test_wrong_shape():
509509with pytest .raises (ValueError ):
510510img .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