diff --git a/tests/test_wrappers/test_fslstats.py b/tests/test_wrappers/test_fslstats.py new file mode 100644 index 0000000000000000000000000000000000000000..30593f2b7dcd21b0622206dab31cd3bf4ec7ef27 --- /dev/null +++ b/tests/test_wrappers/test_fslstats.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + + +import os +import os.path as op +import sys +import contextlib + +import numpy as np + +import fsl.utils.run as run +import fsl.utils.tempdir as tempdir +import fsl.wrappers as fw + +from .. import mockFSLDIR as mockFSLDIR_base, make_random_image + + +mock_fslstats = """ +#!{} + +shape = {{outshape}} + +import sys +import numpy as np + +data = np.random.randint(1, 10, shape) + +if len(shape) == 1: + data = data.reshape(1, -1) + +np.savetxt(sys.stdout, data, fmt='%i') +""".format(sys.executable).strip() + + +@contextlib.contextmanager +def mockFSLDIR(shape): + with mockFSLDIR_base() as fd: + fname = op.join(fd, 'bin', 'fslstats') + script = mock_fslstats.format(outshape=shape) + with open(fname, 'wt') as f: + f.write(script) + os.chmod(fname, 0o755) + yield fd + + +def test_fslstats_cmdline(): + with tempdir.tempdir(), run.dryrun(), mockFSLDIR(1) as fsldir: + + make_random_image('image') + cmd = op.join(fsldir, 'bin', 'fslstats') + + result = fw.fslstats('image').m.r.mask('mask').k('mask').r.run(True) + expected = cmd + ' image -m -r -k mask -k mask -r' + assert result[0] == expected + + result = fw.fslstats('image', t=True, K='mask').m.R.u(123).s.volume.run(True) + expected = cmd + ' -t -K mask image -m -R -u 123 -s -v' + assert result[0] == expected + + result = fw.fslstats('image', K='mask').n.V.p(1).run(True) + expected = cmd + ' -K mask image -n -V -p 1' + assert result[0] == expected + + result = fw.fslstats('image', t=True).H(10, 1, 99).d('diff').run(True) + expected = cmd + ' -t image -H 10 1 99 -d diff' + assert result[0] == expected + + +def test_fslstats_result(): + with tempdir.tempdir(): + + with mockFSLDIR('(1,)') as fsldir: + result = fw.fslstats('image').run() + assert np.isscalar(result) + + with mockFSLDIR('(2,)') as fsldir: + result = fw.fslstats('image').run() + assert result.shape == (2,) + + # 3 mask lbls, 2 values + with mockFSLDIR('(3, 2)') as fsldir: + result = fw.fslstats('image', K='mask').run() + assert result.shape == (3, 2) + + # 5 vols, 2 values + with mockFSLDIR('(5, 2)') as fsldir: + result = fw.fslstats('image', t=True).run() + assert result.shape == (5, 2) + + # 5 vols, 3 mask lbls, 2 values + with mockFSLDIR('(15, 2)') as fsldir: + make_random_image('image', (10, 10, 10, 5)) + result = fw.fslstats('image', K='mask', t=True).run() + assert result.shape == (5, 3, 2)