def test_index_img(): img_3d = nibabel.Nifti1Image(np.ones((3, 4, 5)), np.eye(4)) expected_error_msg = ("Input data has incompatible dimensionality: " "Expected dimension is 4D and you provided " "a 3D image.") with pytest.raises(TypeError, match=expected_error_msg): image.index_img(img_3d, 0) affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = data_gen.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] tested_indices = (list(range(fourth_dim_size)) + [ slice(2, 8, 2), [1, 2, 3, 2], [], (np.arange(fourth_dim_size) % 3) == 1 ]) for i in tested_indices: this_img = image.index_img(img_4d, i) expected_data_3d = get_data(img_4d)[..., i] assert_array_equal(get_data(this_img), expected_data_3d) assert_array_equal(this_img.affine, img_4d.affine) for i in [ fourth_dim_size, -fourth_dim_size - 1, [0, fourth_dim_size], np.repeat(True, fourth_dim_size + 1) ]: with pytest.raises(IndexError, match='out of bounds|invalid index|out of range|' 'boolean index'): image.index_img(img_4d, i)
def test_index_img(): img_3d = nibabel.Nifti1Image(np.ones((3, 4, 5)), np.eye(4)) testing.assert_raises_regex(TypeError, '4D Niimg-like', image.index_img, img_3d, 0) affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = testing.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] tested_indices = (list(range(fourth_dim_size)) + [slice(2, 8, 2), [1, 2, 3, 2], [], (np.arange(fourth_dim_size) % 3) == 1]) for i in tested_indices: this_img = image.index_img(img_4d, i) expected_data_3d = img_4d.get_data()[..., i] assert_array_equal(this_img.get_data(), expected_data_3d) assert_array_equal(this_img.get_affine(), img_4d.get_affine()) for i in [fourth_dim_size, - fourth_dim_size - 1, [0, fourth_dim_size], np.repeat(True, fourth_dim_size + 1)]: testing.assert_raises_regex( IndexError, 'out of bounds|invalid index|out of range', image.index_img, img_4d, i)
def test_index_img(): img_3d = nibabel.Nifti1Image(np.ones((3, 4, 5)), np.eye(4)) testing.assert_raises_regex(TypeError, "Input data has incompatible dimensionality: " "Expected dimension is 4D and you provided " "a 3D image.", image.index_img, img_3d, 0) affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = data_gen.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] tested_indices = (list(range(fourth_dim_size)) + [slice(2, 8, 2), [1, 2, 3, 2], [], (np.arange(fourth_dim_size) % 3) == 1]) for i in tested_indices: this_img = image.index_img(img_4d, i) expected_data_3d = img_4d.get_data()[..., i] assert_array_equal(this_img.get_data(), expected_data_3d) assert_array_equal(this_img.affine, img_4d.affine) for i in [fourth_dim_size, - fourth_dim_size - 1, [0, fourth_dim_size], np.repeat(True, fourth_dim_size + 1)]: testing.assert_raises_regex( IndexError, 'out of bounds|invalid index|out of range|boolean index', image.index_img, img_4d, i)
def test_pd_index_img(): # confirm indices from pandas dataframes are handled correctly if 'pandas' not in sys.modules: raise pytest.skip(msg='Pandas not available') affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = data_gen.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] rng = np.random.RandomState(42) arr = rng.uniform(size=fourth_dim_size) > 0.5 df = pd.DataFrame({"arr": arr}) np_index_img = image.index_img(img_4d, arr) pd_index_img = image.index_img(img_4d, df) assert_array_equal(get_data(np_index_img), get_data(pd_index_img))
def test_pd_index_img(): # confirm indices from pandas dataframes are handled correctly if 'pandas' not in sys.modules: raise SkipTest affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = testing.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] rng = np.random.RandomState(0) arr = rng.rand(fourth_dim_size) > 0.5 df = pd.DataFrame({"arr": arr}) np_index_img = image.index_img(img_4d, arr) pd_index_img = image.index_img(img_4d, df) assert_array_equal(np_index_img.get_data(), pd_index_img.get_data())
def test_pd_index_img(): # confirm indices from pandas dataframes are handled correctly if 'pandas' not in sys.modules: raise SkipTest affine = np.array([[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [0., 0., 0., 1.]]) img_4d, _ = data_gen.generate_fake_fmri(affine=affine) fourth_dim_size = img_4d.shape[3] rng = np.random.RandomState(0) arr = rng.rand(fourth_dim_size) > 0.5 df = pd.DataFrame({"arr": arr}) np_index_img = image.index_img(img_4d, arr) pd_index_img = image.index_img(img_4d, df) assert_array_equal(np_index_img.get_data(), pd_index_img.get_data())