diff --git a/.circleci/config.yml b/.circleci/config.yml index 94578513..b7db4924 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,114 +1,107 @@ version: 2 jobs: - build: + build_pytest: machine: image: circleci/classic:201808-01 working_directory: /tmp/src/nitransforms environment: TZ: "/usr/share/zoneinfo/America/Los_Angeles" - SCRATCH: "/scratch" - - steps: - - restore_cache: - keys: - - build-v1-{{ .Branch }}-{{ epoch }} - - build-v1-{{ .Branch }}- - - build-v1-master- - - build-v1- - paths: - - /tmp/docker - - run: - name: Set-up a Docker registry - command: | - docker run -d -p 5000:5000 --restart=always --name=registry \ - -v /tmp/docker:/var/lib/registry registry:2 - - run: - name: Pull existing images - command: | - set +e - docker pull localhost:5000/ubuntu - success=$? - set -e - if [[ "$success" = "0" ]]; then - echo "Pulling from local registry" - docker tag localhost:5000/ubuntu ubuntu:xenial-20200114 - docker pull localhost:5000/nitransforms - docker tag localhost:5000/nitransforms nitransforms:latest - else - echo "Pulling from Docker Hub" - docker pull ubuntu:xenial-20200114 - docker tag ubuntu:xenial-20200114 localhost:5000/ubuntu - docker push localhost:5000/ubuntu - fi - - checkout - - run: - name: Build Docker image & push to registry - no_output_timeout: 60m - command: | - e=1 && for i in {1..5}; do - docker build --rm --cache-from=nitransforms:latest \ - -t nitransforms:latest \ - --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg VCS_REF=`git rev-parse --short HEAD` . \ - && e=0 && break || sleep 15 - done && [ "$e" -eq "0" ] - docker tag nitransforms:latest localhost:5000/nitransforms - docker push localhost:5000/nitransforms - - run: - name: Docker registry garbage collection - command: | - docker exec -it registry /bin/registry garbage-collect --delete-untagged \ - /etc/docker/registry/config.yml - - save_cache: - key: build-v1-{{ .Branch }}-{{ epoch }} - paths: - - /tmp/docker - - run: - name: Store FreeSurfer license file - command: | - mkdir -p /tmp/fslicense - cd /tmp/fslicense - echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IGxpY2Vuc2UudHh0Cg==" | base64 -d | sh - - persist_to_workspace: - root: /tmp - paths: - - fslicense - - test_pytest: - machine: - image: circleci/classic:201808-01 - environment: FS_LICENSE: "/tmp/fslicense/license.txt" - working_directory: /tmp/tests + steps: - - attach_workspace: - at: /tmp - - checkout: - path: /tmp/src/nitransforms - - run: - name: Get codecov - command: python -m pip install codecov - restore_cache: keys: - build-v1-{{ .Branch }}-{{ epoch }} - build-v1-{{ .Branch }}- - build-v1-master- - build-v1- + paths: + - /tmp/docker + - run: + name: Set-up a Docker registry + command: | + docker run -d -p 5000:5000 --restart=always --name=registry \ + -v /tmp/docker:/var/lib/registry registry:2 + - run: + name: Pull existing images + command: | + set +e + docker pull localhost:5000/ubuntu + success=$? + set -e + if [[ "$success" = "0" ]]; then + echo "Pulling from local registry" + docker tag localhost:5000/ubuntu ubuntu:xenial-20200114 + docker pull localhost:5000/nitransforms + docker tag localhost:5000/nitransforms nitransforms:latest + else + echo "Pulling from Docker Hub" + docker pull ubuntu:xenial-20200114 + docker tag ubuntu:xenial-20200114 localhost:5000/ubuntu + docker push localhost:5000/ubuntu + fi + - checkout + - run: + name: Build Docker image & push to registry + no_output_timeout: 60m + command: | + e=1 && for i in {1..5}; do + docker build --rm --cache-from=nitransforms:latest \ + -t nitransforms:latest \ + --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ + --build-arg VCS_REF=`git rev-parse --short HEAD` . \ + && e=0 && break || sleep 15 + done && [ "$e" -eq "0" ] + docker tag nitransforms:latest localhost:5000/nitransforms + docker push localhost:5000/nitransforms + - run: + name: Docker registry garbage collection + command: | + docker exec -it registry /bin/registry garbage-collect --delete-untagged \ + /etc/docker/registry/config.yml + - save_cache: + key: build-v1-{{ .Branch }}-{{ epoch }} + paths: + - /tmp/docker - run: - name: Set-up a Docker registry & pull + name: Store FreeSurfer license file command: | - docker run -d -p 5000:5000 --restart=always --name=registry \ - -v /tmp/docker:/var/lib/registry registry:2 - docker pull localhost:5000/nitransforms - docker tag localhost:5000/nitransforms nitransforms:latest + mkdir -p /tmp/fslicense + cd /tmp/fslicense + echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IGxpY2Vuc2UudHh0Cg==" | base64 -d | sh + + - restore_cache: + keys: + - data-v1-{{ .Branch }}-{{ epoch }} + - data-v1-{{ .Branch }}- + - data-v1-master- + - data-v1- + paths: + - /tmp/data + - run: + name: Download data + command: | + if [[ ! -d /tmp/data ]]; then + wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \ + -O data.zip "https://files.osf.io/v1/resources/fvuh8/providers/osfstorage/5e7d5b65c3f8d300bafa05e0/?zip=" + unzip -d /tmp/data data.zip + else + echo "Dataset was cached" + fi + - save_cache: + key: data-v1-{{ .Branch }}-{{ epoch }} + paths: + - /tmp/data + - run: + name: Get codecov + command: python -m pip install codecov - run: name: Run unit tests no_output_timeout: 2h command: | - mkdir -p $PWD/artifacts $PWD/summaries - sudo setfacl -d -m group:ubuntu:rwx $PWD - sudo setfacl -m group:ubuntu:rwx $PWD - docker run -u $( id -u ) -it --rm=false -w /src/nitransforms \ + mkdir -p $PWD/{artifacts,summaries} + docker run -u $( id -u ) -it --rm -w /src/nitransforms \ + -v /tmp/data:/data -e TEST_DATA_HOME=/data \ -e COVERAGE_FILE=/tmp/summaries/.pytest.coverage \ -v /tmp/fslicense/license.txt:/opt/freesurfer/license.txt:ro \ -v ${PWD}:/tmp nitransforms:latest \ @@ -162,33 +155,21 @@ jobs: command: | python3 -m twine upload dist/* - workflows: version: 2 build_test_deploy: jobs: - - build: - filters: - branches: - ignore: - - /docs?\/.*/ - tags: - only: /.*/ - - - test_pytest: - requires: - - build + - build_pytest: filters: branches: ignore: - /docs?\/.*/ - - /docker\/.*/ tags: only: /.*/ - test_packaging_and_deploy: requires: - - test_pytest + - build_pytest filters: branches: ignore: /.*/ diff --git a/.travis.yml b/.travis.yml index 845acbe0..f8b41b33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,18 +12,31 @@ env: global: - BUILD_TYPE="src" - DOCKER_IMAGE="poldracklab/fmriprep:latest" + - TEST_DATA_HOME="$HOME/.nitransforms/testdata" matrix: include: - python: 3.7 env: BUILD_TYPE="docker" +cache: + directories: + - $HOME/.nitransforms/testdata + before_install: - | + if [[ "$( ls -A $TEST_DATA_HOME )" == "" ]]; then + mkdir -p $HOME/.nitransforms + wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \ + -O data.zip "https://files.osf.io/v1/resources/fvuh8/providers/osfstorage/5e7d5b65c3f8d300bafa05e0/?zip=" + unzip -d $TEST_DATA_HOME data.zip + else + echo "Dataset was cached" + fi if [ ${BUILD_TYPE} == "docker" ]; then CI_ENV=`bash <(curl -s https://codecov.io/env)` docker pull ${DOCKER_IMAGE} # pull latest release - docker run $CI_ENV -itd --name fmriprep --entrypoint=/bin/bash -v `pwd`:/opt/nt -w /opt/nt ${DOCKER_IMAGE} + docker run $CI_ENV -v $TEST_DATA_HOME:/data -e TEST_DATA_HOME=/data -itd --name fmriprep --entrypoint=/bin/bash -v `pwd`:/opt/nt -w /opt/nt ${DOCKER_IMAGE} docker exec fmriprep sh -c 'echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IC9vcHQvZnJlZXN1cmZlci9saWNlbnNlLnR4dAo=" | base64 -d | sh' fi diff --git a/nitransforms/conftest.py b/nitransforms/conftest.py index abcdddec..46dccf61 100644 --- a/nitransforms/conftest.py +++ b/nitransforms/conftest.py @@ -5,11 +5,9 @@ import nibabel as nb import pytest import tempfile -import pkg_resources -SOMEONES_ANATOMY = pkg_resources.resource_filename( - 'nitransforms', 'tests/data/someones_anatomy.nii.gz') _data = None +_testdir = Path(os.getenv('TEST_DATA_HOME', '~/.nitransforms/testdata')).expanduser() @pytest.fixture(autouse=True) @@ -19,7 +17,8 @@ def doctest_autoimport(doctest_namespace): doctest_namespace['nb'] = nb doctest_namespace['os'] = os doctest_namespace['Path'] = Path - doctest_namespace['datadir'] = Path(__file__).parent / 'tests' / 'data' + doctest_namespace['regress_dir'] = Path(__file__).parent / 'tests' / 'data' + doctest_namespace['test_dir'] = _testdir tmpdir = tempfile.TemporaryDirectory() doctest_namespace['tmpdir'] = tmpdir.name @@ -38,6 +37,12 @@ def data_path(): return Path(__file__).parent / 'tests' / 'data' +@pytest.fixture +def testdata_path(): + """Return the heavy test-data folder.""" + return _testdir + + @pytest.fixture def get_testdata(): """Generate data in the requested orientation.""" @@ -46,7 +51,7 @@ def get_testdata(): if _data is not None: return _data - img = nb.load(SOMEONES_ANATOMY) + img = nb.load(_testdir / 'someones_anatomy.nii.gz') imgaff = img.affine _data = {'RAS': img} diff --git a/nitransforms/linear.py b/nitransforms/linear.py index dcf87e13..f09aae72 100644 --- a/nitransforms/linear.py +++ b/nitransforms/linear.py @@ -40,7 +40,7 @@ def __init__(self, matrix=None, reference=None): Examples -------- - >>> xfm = Affine(reference=datadir / "someones_anatomy.nii.gz") + >>> xfm = Affine(reference=test_dir / "someones_anatomy.nii.gz") >>> xfm.matrix # doctest: +NORMALIZE_WHITESPACE array([[1., 0., 0., 0.], [0., 1., 0., 0.], @@ -452,11 +452,11 @@ def load(filename, fmt="X5", reference=None, moving=None): Examples -------- - >>> xfm = load(datadir / "affine-LAS.itk.tfm", fmt="itk") + >>> xfm = load(regress_dir / "affine-LAS.itk.tfm", fmt="itk") >>> isinstance(xfm, Affine) True - >>> xfm = load(datadir / "itktflist.tfm", fmt="itk") + >>> xfm = load(regress_dir / "itktflist.tfm", fmt="itk") >>> isinstance(xfm, LinearTransformsMapping) True diff --git a/nitransforms/tests/data/ds-005_sub-01_T1w.nii.gz b/nitransforms/tests/data/ds-005_sub-01_T1w.nii.gz deleted file mode 100644 index 8204cffe..00000000 Binary files a/nitransforms/tests/data/ds-005_sub-01_T1w.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_afni.nii.gz b/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_afni.nii.gz deleted file mode 100644 index 6b55e549..00000000 Binary files a/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_afni.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_itk.nii.gz b/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_itk.nii.gz deleted file mode 100644 index 5db2f66c..00000000 Binary files a/nitransforms/tests/data/ds-005_sub-01_from-OASIS_to-T1_warp_itk.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/ds-005_sub-01_from-T1_to-OASIS_affine.mat b/nitransforms/tests/data/ds-005_sub-01_from-T1_to-OASIS_affine.mat deleted file mode 100644 index 6684acf1..00000000 Binary files a/nitransforms/tests/data/ds-005_sub-01_from-T1_to-OASIS_affine.mat and /dev/null differ diff --git a/nitransforms/tests/data/ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5 b/nitransforms/tests/data/ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5 deleted file mode 100644 index 475de69b..00000000 Binary files a/nitransforms/tests/data/ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5 and /dev/null differ diff --git a/nitransforms/tests/data/fmap.nii.gz b/nitransforms/tests/data/fmap.nii.gz deleted file mode 100644 index 8a5ace28..00000000 Binary files a/nitransforms/tests/data/fmap.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/func.nii.gz b/nitransforms/tests/data/func.nii.gz deleted file mode 100644 index 67329aac..00000000 Binary files a/nitransforms/tests/data/func.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz b/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz deleted file mode 100644 index 77543fc4..00000000 Binary files a/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/regressions/T1w_scanner.nii.gz b/nitransforms/tests/data/regressions/T1w_scanner.nii.gz deleted file mode 100644 index 90c9edb8..00000000 Binary files a/nitransforms/tests/data/regressions/T1w_scanner.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/regressions/bold.nii.gz b/nitransforms/tests/data/regressions/bold.nii.gz deleted file mode 100644 index d4559cdd..00000000 Binary files a/nitransforms/tests/data/regressions/bold.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/sbref.nii.gz b/nitransforms/tests/data/sbref.nii.gz deleted file mode 100644 index cb9bc170..00000000 Binary files a/nitransforms/tests/data/sbref.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/someones_anatomy.nii.gz b/nitransforms/tests/data/someones_anatomy.nii.gz deleted file mode 100644 index b7e917e3..00000000 Binary files a/nitransforms/tests/data/someones_anatomy.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/tpl-OASIS30ANTs_T1w.nii.gz b/nitransforms/tests/data/tpl-OASIS30ANTs_T1w.nii.gz deleted file mode 100644 index c4f2d27c..00000000 Binary files a/nitransforms/tests/data/tpl-OASIS30ANTs_T1w.nii.gz and /dev/null differ diff --git a/nitransforms/tests/data/tpl-OASIS30ANTs_desc-warped_T1w.nii.gz b/nitransforms/tests/data/tpl-OASIS30ANTs_desc-warped_T1w.nii.gz deleted file mode 100644 index 442f8045..00000000 Binary files a/nitransforms/tests/data/tpl-OASIS30ANTs_desc-warped_T1w.nii.gz and /dev/null differ diff --git a/nitransforms/tests/test_base.py b/nitransforms/tests/test_base.py index 746c977e..ff92fcba 100644 --- a/nitransforms/tests/test_base.py +++ b/nitransforms/tests/test_base.py @@ -7,11 +7,11 @@ from ..base import SpatialReference, SampledSpatialData, ImageGrid, TransformBase -def test_SpatialReference(data_path): +def test_SpatialReference(testdata_path): """Ensure the reference factory is working properly.""" - obj1 = data_path / 'someones_anatomy.nii.gz' - obj2 = data_path / 'sub-200148_hemi-R_pial.surf.gii' - obj3 = data_path / 'func.nii.gz' + obj1 = testdata_path / 'someones_anatomy.nii.gz' + obj2 = testdata_path / 'sub-200148_hemi-R_pial.surf.gii' + obj3 = testdata_path / 'func.nii.gz' assert isinstance(SpatialReference.factory(obj1), ImageGrid) assert isinstance(SpatialReference.factory(str(obj1)), ImageGrid) @@ -58,12 +58,12 @@ def test_ImageGrid(get_testdata, image_orientation): assert (img2 != img) is False -def test_ImageGrid_utils(tmpdir, data_path, get_testdata): +def test_ImageGrid_utils(tmpdir, testdata_path, get_testdata): """Check that images can be objects or paths and equality.""" tmpdir.chdir() im1 = get_testdata['RAS'] - im2 = data_path / 'someones_anatomy.nii.gz' + im2 = testdata_path / 'someones_anatomy.nii.gz' ig = ImageGrid(im1) assert ig == ImageGrid(im2) @@ -73,7 +73,7 @@ def test_ImageGrid_utils(tmpdir, data_path, get_testdata): ImageGrid(im1)._to_hdf5(f.create_group('Reference')) -def test_TransformBase(monkeypatch, data_path, tmpdir): +def test_TransformBase(monkeypatch, testdata_path, tmpdir): """Check the correctness of TransformBase components.""" tmpdir.chdir() @@ -85,7 +85,7 @@ def _to_hdf5(klass, x5_root): monkeypatch.setattr(TransformBase, 'map', _fakemap) monkeypatch.setattr(TransformBase, '_to_hdf5', _to_hdf5) - fname = data_path / 'someones_anatomy.nii.gz' + fname = testdata_path / 'someones_anatomy.nii.gz' # Test identity transform xfm = TransformBase() @@ -114,9 +114,9 @@ def _to_hdf5(klass, x5_root): xfm.to_filename('data.x5') -def test_SampledSpatialData(data_path): +def test_SampledSpatialData(testdata_path): """Check the reference generated by cifti files.""" - gii = data_path / 'sub-200148_hemi-R_pial.surf.gii' + gii = testdata_path / 'sub-200148_hemi-R_pial.surf.gii' ssd = SampledSpatialData(gii) assert ssd.npoints == 249277 diff --git a/nitransforms/tests/test_cli.py b/nitransforms/tests/test_cli.py index 071bf5ab..2a506e0d 100644 --- a/nitransforms/tests/test_cli.py +++ b/nitransforms/tests/test_cli.py @@ -47,10 +47,10 @@ def test_apply_linear(tmpdir, data_path, get_testdata): assert output.check() -def test_apply_nl(tmpdir, data_path): +def test_apply_nl(tmpdir, testdata_path): tmpdir.chdir() - img = str(data_path / 'tpl-OASIS30ANTs_T1w.nii.gz') - nl_xform = str(data_path / 'ds-005_sub-01_from-OASIS_to-T1_warp_afni.nii.gz') + img = str(testdata_path / 'tpl-OASIS30ANTs_T1w.nii.gz') + nl_xform = str(testdata_path / 'ds-005_sub-01_from-OASIS_to-T1_warp_afni.nii.gz') nlargs = ['apply', nl_xform, img] # format not specified diff --git a/nitransforms/tests/test_conversions.py b/nitransforms/tests/test_conversions.py index a6bc03e1..5601bd7a 100644 --- a/nitransforms/tests/test_conversions.py +++ b/nitransforms/tests/test_conversions.py @@ -28,13 +28,13 @@ def test_lta2itk_conversions(data_path, filename): ("from-scanner_to-bold_mode-image", "T1w_scanner.nii.gz", "bold.nii.gz"), ("from-scanner_to-fsnative_mode-image", "T1w_scanner.nii.gz", "T1w_fsnative.nii.gz"), ]) -def test_itk2lta_conversions(data_path, tmp_path, filename, moving, reference): +def test_itk2lta_conversions(data_path, testdata_path, tmp_path, filename, moving, reference): """Check conversions between formats.""" itk = _l.load(data_path / "regressions" / "".join((filename, ".tfm")), fmt="itk") - itk.reference = data_path / "regressions" / reference + itk.reference = testdata_path / reference itk.to_filename(tmp_path / "test.lta", fmt="fs", - moving=data_path / "regressions" / moving) + moving=testdata_path / moving) converted_lta = LTA.from_filename(tmp_path / "test.lta") expected_fname = data_path / "regressions" / "".join((filename, "_type-ras2ras.lta")) diff --git a/nitransforms/tests/test_io.py b/nitransforms/tests/test_io.py index da39d4d2..3cd1bdb5 100644 --- a/nitransforms/tests/test_io.py +++ b/nitransforms/tests/test_io.py @@ -187,10 +187,10 @@ def test_LinearList_common(tmpdir, data_path, sw, image_orientation, for x1, x2 in zip(tflist1.xforms, tflist2.xforms)]) -def test_ITKLinearTransform(tmpdir, data_path): +def test_ITKLinearTransform(tmpdir, testdata_path): tmpdir.chdir() - matlabfile = data_path / 'ds-005_sub-01_from-T1_to-OASIS_affine.mat' + matlabfile = testdata_path / 'ds-005_sub-01_from-T1_to-OASIS_affine.mat' mat = loadmat(str(matlabfile)) with open(str(matlabfile), 'rb') as f: itkxfm = itk.ITKLinearTransform.from_fileobj(f) @@ -339,15 +339,15 @@ def test_afni_Displacements(): afni.AFNIDisplacementsField.from_image(field) -def test_itk_h5(data_path): +def test_itk_h5(testdata_path): """Test displacements fields.""" assert len(list(itk.ITKCompositeH5.from_filename( - data_path / 'ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5' + testdata_path / 'ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5' ))) == 2 with pytest.raises(RuntimeError): list(itk.ITKCompositeH5.from_filename( - data_path / 'ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.x5' + testdata_path / 'ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.x5' )) diff --git a/nitransforms/tests/test_linear.py b/nitransforms/tests/test_linear.py index bcbeeb27..2a638b51 100644 --- a/nitransforms/tests/test_linear.py +++ b/nitransforms/tests/test_linear.py @@ -57,9 +57,9 @@ def test_linear_valueerror(): ntl.Affine(np.ones((4, 4))) -def test_loadsave_itk(tmp_path, data_path): +def test_loadsave_itk(tmp_path, data_path, testdata_path): """Test idempotency.""" - ref_file = data_path / 'someones_anatomy.nii.gz' + ref_file = testdata_path / 'someones_anatomy.nii.gz' xfm = ntl.load(data_path / 'itktflist2.tfm', fmt='itk') assert isinstance(xfm, ntl.LinearTransformsMapping) xfm.reference = ref_file @@ -76,9 +76,9 @@ def test_loadsave_itk(tmp_path, data_path): @pytest.mark.xfail(reason="Not fully implemented") @pytest.mark.parametrize('fmt', ['itk', 'fsl', 'afni', 'lta']) -def test_loadsave(tmp_path, data_path, fmt): +def test_loadsave(tmp_path, data_path, testdata_path, fmt): """Test idempotency.""" - ref_file = data_path / 'someones_anatomy.nii.gz' + ref_file = testdata_path / 'someones_anatomy.nii.gz' xfm = ntl.load(data_path / 'itktflist2.tfm', fmt='itk') xfm.reference = ref_file @@ -88,7 +88,7 @@ def test_loadsave(tmp_path, data_path, fmt): xfm.to_filename(fname, fmt=fmt, moving=ref_file) xfm == ntl.load(fname, fmt=fmt, reference=ref_file) - ref_file = data_path / 'someones_anatomy.nii.gz' + ref_file = testdata_path / 'someones_anatomy.nii.gz' xfm = ntl.load(data_path / 'affine-LAS.itk.tfm', fmt='itk') xfm.reference = ref_file fname = tmp_path / '.'.join(('single-transform', fmt)) @@ -173,46 +173,46 @@ def test_apply_linear_transform( assert (np.abs(diff) > 1e-3).sum() / diff.size < TESTS_BORDER_TOLERANCE -def test_Affine_to_x5(tmpdir, data_path): +def test_Affine_to_x5(tmpdir, testdata_path): """Test affine's operations.""" tmpdir.chdir() aff = ntl.Affine() with h5py.File('xfm.x5', 'w') as f: aff._to_hdf5(f.create_group('Affine')) - aff.reference = data_path / 'someones_anatomy.nii.gz' + aff.reference = testdata_path / 'someones_anatomy.nii.gz' with h5py.File('withref-xfm.x5', 'w') as f: aff._to_hdf5(f.create_group('Affine')) -def test_concatenation(data_path): +def test_concatenation(testdata_path): """Check concatenation of affines.""" - aff = ntl.Affine(reference=data_path / 'someones_anatomy.nii.gz') + aff = ntl.Affine(reference=testdata_path / 'someones_anatomy.nii.gz') x = [(0., 0., 0.), (1., 1., 1.), (-1., -1., -1.)] assert np.all((aff + ntl.Affine())(x) == x) assert np.all((aff + ntl.Affine())(x, inverse=True) == x) -def test_LinearTransformsMapping_apply(tmp_path, data_path): +def test_LinearTransformsMapping_apply(tmp_path, data_path, testdata_path): """Apply transform mappings.""" hmc = ntl.load(data_path / 'hmc-itk.tfm', fmt='itk', - reference=data_path / 'sbref.nii.gz') + reference=testdata_path / 'sbref.nii.gz') assert isinstance(hmc, ntl.LinearTransformsMapping) # Test-case: realing functional data on to sbref - nii = hmc.apply(data_path / 'func.nii.gz', order=1, - reference=data_path / 'sbref.nii.gz') + nii = hmc.apply(testdata_path / 'func.nii.gz', order=1, + reference=testdata_path / 'sbref.nii.gz') assert nii.dataobj.shape[-1] == len(hmc) # Test-case: write out a fieldmap moved with head hmcinv = ntl.LinearTransformsMapping( np.linalg.inv(hmc.matrix), - reference=data_path / 'func.nii.gz') - nii = hmcinv.apply(data_path / 'fmap.nii.gz', order=1) + reference=testdata_path / 'func.nii.gz') + nii = hmcinv.apply(testdata_path / 'fmap.nii.gz', order=1) assert nii.dataobj.shape[-1] == len(hmc) # Ensure a ValueError is issued when trying to do weird stuff hmc = ntl.LinearTransformsMapping(hmc.matrix[:1, ...]) with pytest.raises(ValueError): - hmc.apply(data_path / 'func.nii.gz', order=1, - reference=data_path / 'sbref.nii.gz') + hmc.apply(testdata_path / 'func.nii.gz', order=1, + reference=testdata_path / 'sbref.nii.gz') diff --git a/nitransforms/tests/test_manip.py b/nitransforms/tests/test_manip.py index 453ff27b..5bfc6298 100644 --- a/nitransforms/tests/test_manip.py +++ b/nitransforms/tests/test_manip.py @@ -15,11 +15,11 @@ ) -def test_itk_h5(tmp_path, data_path): +def test_itk_h5(tmp_path, testdata_path): """Check a translation-only field on one or more axes, different image orientations.""" os.chdir(str(tmp_path)) - img_fname = data_path / "regressions" / "T1w_scanner.nii.gz" - xfm_fname = data_path / "ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5" + img_fname = testdata_path / "T1w_scanner.nii.gz" + xfm_fname = testdata_path / "ds-005_sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5" xfm = _load(xfm_fname) diff --git a/nitransforms/tests/test_nonlinear.py b/nitransforms/tests/test_nonlinear.py index 048aedac..ef81178f 100644 --- a/nitransforms/tests/test_nonlinear.py +++ b/nitransforms/tests/test_nonlinear.py @@ -96,11 +96,11 @@ def test_displacements_field1(tmp_path, get_testdata, image_orientation, sw_tool @pytest.mark.parametrize('sw_tool', ['itk', 'afni']) -def test_displacements_field2(tmp_path, data_path, sw_tool): +def test_displacements_field2(tmp_path, testdata_path, sw_tool): """Check a translation-only field on one or more axes, different image orientations.""" os.chdir(str(tmp_path)) - img_fname = data_path / 'tpl-OASIS30ANTs_T1w.nii.gz' - xfm_fname = data_path / 'ds-005_sub-01_from-OASIS_to-T1_warp_{}.nii.gz'.format(sw_tool) + img_fname = testdata_path / 'tpl-OASIS30ANTs_T1w.nii.gz' + xfm_fname = testdata_path / 'ds-005_sub-01_from-OASIS_to-T1_warp_{}.nii.gz'.format(sw_tool) xfm = nlload(xfm_fname, fmt=sw_tool)