diff --git a/tests/__init__.py b/tests/__init__.py index eb16fa95ab31bdcce6494524b28a481493cf7cb1..4960e909532e5d5f1a970fd9f44368ed23c7d31e 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -294,7 +294,8 @@ def make_mock_feat_analysis(featdir, if indata: filtfunc = op.join(featdir, 'filtered_func_data.nii.gz') - make_random_image(filtfunc, shape4D, xform) + img = make_random_image(filtfunc, shape4D, xform) + del img # and some dummy voxelwise EV files if voxEVs: @@ -311,7 +312,10 @@ def make_mock_feat_analysis(featdir, data = data.reshape(list(shape) + [1]).repeat(timepoints, axis=3) data[..., :] += range(i, i + timepoints) - nib.save(nib.nifti1.Nifti1Image(data, xform), vf) + img = nib.nifti1.Nifti1Image(data, xform) + + nib.save(img, vf) + del img otherFiles = [] otherShapes = [] @@ -342,7 +346,8 @@ def make_mock_feat_analysis(featdir, otherShapes.extend([shape] * len(files)) for f, s in zip(otherFiles, otherShapes): - make_random_image(f, s, xform) + img = make_random_image(f, s, xform) + del img return featdir diff --git a/tests/test_featdesign.py b/tests/test_featdesign.py index f685ff712364c6338faaade5af3cea151ccc87a5..b10aa23091954d0dd4b840d0c11132d3427bd8ab 100644 --- a/tests/test_featdesign.py +++ b/tests/test_featdesign.py @@ -103,17 +103,12 @@ with the following commands: """ -import os -import os.path as op -import itertools as it -import glob -import shutil -import numpy as np +import os.path as op +import numpy as np import pytest import tests -import fsl.data.image as fslimage import fsl.data.featdesign as featdesign import fsl.data.featanalysis as featanalysis @@ -172,6 +167,9 @@ def test_FEATFSFDesign(): assert des.getDesign().shape == desshape assert des.getDesign(rvox).shape == desshape + del des + des = None + def test_FEATFSFDesign_firstLevelVoxelwiseEV(seed): @@ -214,6 +212,8 @@ def test_FEATFSFDesign_firstLevelVoxelwiseEV(seed): for i, evidx in enumerate(voxevIdxs): expect = np.arange(i, i + 45) + offset assert np.all(np.isclose(matrix[:, evidx], expect)) + del design + design = None def test_getFirstLevelEVs_1(): @@ -240,6 +240,8 @@ def test_getFirstLevelEVs_1(): assert isinstance(evs[i], evtype) for k, v in atts.items(): assert getattr(evs[i], k) == v + del evs + evs = None def test_getFirstLevelEVs_2(): @@ -267,6 +269,8 @@ def test_getFirstLevelEVs_2(): assert isinstance(evs[i], evtype) for k, v in atts.items(): assert getattr(evs[i], k) == v + del evs + evs = None def test_getFirstLevelEVs_3(): @@ -307,7 +311,6 @@ def test_getFirstLevelEVs_3(): (featdesign.ConfoundEV, {'index' : 30, 'confIndex' : 0}), (featdesign.ConfoundEV, {'index' : 31, 'confIndex' : 1})] - evs = featdesign.getFirstLevelEVs(featdir, settings, matrix) assert len(evs) == 32 @@ -318,6 +321,10 @@ def test_getFirstLevelEVs_3(): for k, v in atts.items(): assert getattr(evs[i], k) == v + del evs + evs = None + + def test_getFirstLevelEVs_realdata(): featdir = op.join(datadir, '1stlevel_realdata.feat') settings = featanalysis.loadSettings(featdir) @@ -336,7 +343,8 @@ def test_getFirstLevelEVs_realdata(): assert isinstance(evs[i], evtype) for k, v in atts.items(): assert getattr(evs[i], k) == v - + del evs + evs = None def test_getHigherLevelEVs_1(): @@ -351,8 +359,8 @@ def test_getHigherLevelEVs_1(): assert isinstance(evs[0], featdesign.NormalEV) assert evs[0].index == 0 assert evs[0].origIndex == 0 - - + del evs + evs = None def test_getHigherLevelEVs_2(): @@ -368,7 +376,8 @@ def test_getHigherLevelEVs_2(): assert evs[0].index == 0 assert evs[0].origIndex == 0 assert isinstance(evs[1], featdesign.VoxelwiseEV) - + del evs + evs = None def test_loadDesignMat(): diff --git a/tests/test_featimage.py b/tests/test_featimage.py index 6489cc0bfc41582eae0640ba92adfd315f8f2552..fb33c6e4ddb13b43dbc4d1883faddf227489b305 100644 --- a/tests/test_featimage.py +++ b/tests/test_featimage.py @@ -91,7 +91,7 @@ def test_FEATImage_attributes(): clustMasks=False) else: featdir = op.join(datadir, featdir) - + # Now create a FEATImage. We validate its # attributes against the values returned by # the functions in featdesign/featanalysis. @@ -126,12 +126,16 @@ def test_FEATImage_attributes(): expect = featanalysis.loadClusterResults(featdir, settings, ci) assert len(result) == len(expect) assert all([rc.nvoxels == ec.nvoxels for rc, ec in zip(result, expect)]) + del design + del fi + fi = None + def test_FEATImage_imageAccessors(): for featdir in TEST_ANALYSES.keys(): - + shape = TEST_ANALYSES[featdir]['shape'] xform = TEST_ANALYSES[featdir]['xform'] @@ -153,25 +157,26 @@ def test_FEATImage_imageAccessors(): nevs = fi.numEVs() ncons = fi.numContrasts() - # Testing the FEATImage intenral cache + # Testing the FEATImage internal cache for i in range(2): assert fi.getResiduals().shape == shape4D - for ev in range(nevs): assert fi.getPE(ev).shape == shape for con in range(ncons): assert fi.getCOPE( con).shape == shape assert fi.getZStats( con).shape == shape assert fi.getClusterMask(con).shape == shape - + del fi + fi = None + def test_FEATImage_nostats(): - + featdir = op.join(datadir, '1stlevel_nostats.feat') shape = (4, 4, 5, 45) with tests.testdir() as testdir: - + featdir = tests.make_mock_feat_analysis(featdir, testdir, shape) fi = featimage.FEATImage(featdir) @@ -182,13 +187,15 @@ def test_FEATImage_nostats(): with pytest.raises(Exception): fi.fit([1, 2, 3], (2, 2, 2)) - + with pytest.raises(Exception): - fi.partialFit([1, 2, 3], (2, 2, 2)) - + fi.partialFit([1, 2, 3], (2, 2, 2)) + del fi + fi = None + def test_FEATImage_fit_firstLevel(): - + featdir = op.join(datadir, '1stlevel_realdata.feat') fi = featimage.FEATImage(featdir) expect = np.array([ @@ -203,8 +210,8 @@ def test_FEATImage_fit_firstLevel(): 10287.91883737, 10325.38456267, 10341.92299781, 10347.17916861, 10348.58339616, 10348.89634025, 10348.93522057, 10345.25397481, 10288.9236822 , 10315.64160242, 10449.39567496, 10558.66999883, - 10597.64918744]) - + 10597.64918744]) + # bad contrast with pytest.raises(Exception): fi.fit([1, 2, 3, 4, 5, 6, 7], (2, 2, 2)) @@ -215,20 +222,24 @@ def test_FEATImage_fit_firstLevel(): result = fi.fit([1, 1, 1, 1], (2, 2, 2)) assert np.all(np.isclose(result, expect)) + del fi + fi = None def test_FEATImage_fit_higherLevel(): - + featdir = op.join(datadir, '2ndlevel_realdata.gfeat/cope1.feat') fi = featimage.FEATImage(featdir) expect = np.array([86.37929535, 86.37929535, 86.37929535]) result = fi.fit([1], (5, 5, 5)) - + assert np.all(np.isclose(result, expect)) + del fi + fi = None def test_FEATImage_partialFit(): - + featdir = op.join(datadir, '1stlevel_realdata.feat') fi = featimage.FEATImage(featdir) expect = np.array([ @@ -245,14 +256,16 @@ def test_FEATImage_partialFit(): 10203.21032619, 10136.1942605 , 10128.23728873, 10416.78984136, 10118.51262128]) result = fi.partialFit([1, 1, 1, 1], (2, 2, 2)) - + assert np.all(np.isclose(result, expect)) + del fi + fi = None def test_modelFit(seed): for i in range(500): - + # 2 evs, 20 timepoints # First EV is a boxcar, # second is a random regressor @@ -265,12 +278,12 @@ def test_modelFit(seed): design[:, ev] = design[:, ev] - design[:, ev].mean() # Generate some random PEs, and - # generate the data that would + # generate the data that would # have resulted in them pes = np.random.random(2) expect = np.dot(design, pes) contrast = [1] * design.shape[1] - + result1 = featimage.modelFit(expect, design, contrast, pes, True) result2 = featimage.modelFit(expect, design, contrast, pes, False)