Skip to content

Commit af202a7

Browse files
committed
Merge remote-tracking branch 'upstream/master' into rel/1.5.0
2 parents b17a21b + 47de76e commit af202a7

File tree

18 files changed

+105
-125
lines changed

18 files changed

+105
-125
lines changed

.travis.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1+
os: linux
12
dist: xenial
2-
sudo: true
33

44
language: python
55
# our build matrix
66
python:
77
- 3.6
88
- 3.7
99

10-
# NOTE: Any changes to the matrix section should be duplicated below for
11-
# Python 3.4
1210
env:
1311
global:
1412
- EXTRA_WHEELS="https://5cf40426d9f06eb7461d-6fe47d9331aba7cd62fc36c7196769e4.ssl.cf2.rackcdn.com"
1513
- PRE_WHEELS="https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com"
1614
- EXTRA_PIP_FLAGS="--find-links=$EXTRA_WHEELS"
1715
- CHECK_TYPE=test
18-
matrix:
16+
jobs:
1917
- INSTALL_DEB_DEPENDECIES=true
2018
NIPYPE_EXTRAS="doc,tests,nipy,profiler"
2119
CI_SKIP_TEST=1
@@ -30,7 +28,7 @@ env:
3028
EXTRA_PIP_FLAGS="--pre $EXTRA_PIP_FLAGS --find-links $PRE_WHEELS --upgrade"
3129
CI_SKIP_TEST=1
3230

33-
matrix:
31+
jobs:
3432
include:
3533
- python: 3.7
3634
env:

nipype/__init__.py

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -83,41 +83,9 @@ def check_latest_version(raise_exception=False):
8383
import etelemetry
8484

8585
logger = logging.getLogger("nipype.utils")
86-
87-
INIT_MSG = "Running {packname} version {version} (latest: {latest})".format
88-
89-
latest = {"version": "Unknown", "bad_versions": []}
90-
result = None
91-
try:
92-
result = etelemetry.get_project("nipy/nipype")
93-
except Exception as e:
94-
logger.warning("Could not check for version updates: \n%s", e)
95-
finally:
96-
if result:
97-
latest.update(**result)
98-
if LooseVersion(__version__) != LooseVersion(latest["version"]):
99-
logger.info(
100-
INIT_MSG(
101-
packname="nipype", version=__version__, latest=latest["version"]
102-
)
103-
)
104-
else:
105-
logger.info("No new version available.")
106-
if latest["bad_versions"] and any(
107-
[
108-
LooseVersion(__version__) == LooseVersion(ver)
109-
for ver in latest["bad_versions"]
110-
]
111-
):
112-
message = (
113-
"You are using a version of Nipype with a critical "
114-
"bug. Please use a different version."
115-
)
116-
if raise_exception:
117-
raise RuntimeError(message)
118-
else:
119-
logger.critical(message)
120-
return latest
86+
return etelemetry.check_available_version(
87+
"nipy/nipype", __version__, logger, raise_exception
88+
)
12189

12290

12391
# Run telemetry on import for interactive sessions, such as IPython, Jupyter notebooks, Python REPL

nipype/algorithms/tests/test_TSNR.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import pytest
99
import numpy.testing as npt
10-
import mock
10+
from unittest import mock
1111
import nibabel as nb
1212
import numpy as np
1313
import os
@@ -16,9 +16,7 @@
1616
class TestTSNR:
1717
""" Note: Tests currently do a poor job of testing functionality """
1818

19-
in_filenames = {
20-
"in_file": "tsnrinfile.nii",
21-
}
19+
in_filenames = {"in_file": "tsnrinfile.nii"}
2220

2321
out_filenames = { # default output file names
2422
"detrended_file": "detrend.nii.gz",

nipype/info.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def get_nipype_gitversion():
147147
"simplejson>=%s" % SIMPLEJSON_MIN_VERSION,
148148
"traits>=%s,!=5.0" % TRAITS_MIN_VERSION,
149149
"filelock>=3.0.0",
150-
"etelemetry",
150+
"etelemetry>=0.2.0",
151151
]
152152

153153
# neurdflib has to come after prov
@@ -157,7 +157,6 @@ def get_nipype_gitversion():
157157
TESTS_REQUIRES = [
158158
"codecov",
159159
"coverage<5",
160-
"mock",
161160
"pytest",
162161
"pytest-cov",
163162
"pytest-env",

nipype/interfaces/ants/registration.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,12 +591,18 @@ class RegistrationOutputSpec(TraitedSpec):
591591
forward_transforms = traits.List(
592592
File(exists=True), desc="List of output transforms for forward registration"
593593
)
594+
reverse_forward_transforms = traits.List(
595+
File(exists=True), desc="List of output transforms for forward registration reversed for antsApplyTransform"
596+
)
594597
reverse_transforms = traits.List(
595598
File(exists=True), desc="List of output transforms for reverse registration"
596599
)
597600
forward_invert_flags = traits.List(
598601
traits.Bool(), desc="List of flags corresponding to the forward transforms"
599602
)
603+
reverse_forward_invert_flags = traits.List(
604+
traits.Bool(), desc="List of flags corresponding to the forward transforms reversed for antsApplyTransform"
605+
)
600606
reverse_invert_flags = traits.List(
601607
traits.Bool(), desc="List of flags corresponding to the reverse transforms"
602608
)
@@ -797,6 +803,8 @@ class Registration(ANTSCommand):
797803
'inverse_composite_transform': '...data/output_InverseComposite.h5',
798804
'inverse_warped_image': <undefined>,
799805
'metric_value': <undefined>,
806+
'reverse_forward_invert_flags': [],
807+
'reverse_forward_transforms': [],
800808
'reverse_invert_flags': [],
801809
'reverse_transforms': [],
802810
'save_state': '...data/trans.mat',
@@ -826,6 +834,9 @@ class Registration(ANTSCommand):
826834
'inverse_composite_transform': <undefined>,
827835
'inverse_warped_image': <undefined>,
828836
'metric_value': <undefined>,
837+
'reverse_forward_invert_flags': [False, False],
838+
'reverse_forward_transforms': ['...data/output_1Warp.nii.gz',
839+
'...data/output_0GenericAffine.mat'],
829840
'reverse_invert_flags': [True, False],
830841
'reverse_transforms': ['...data/output_0GenericAffine.mat', \
831842
'...data/output_1InverseWarp.nii.gz'],
@@ -1472,6 +1483,10 @@ def _list_outputs(self):
14721483
outputs["metric_value"] = self._metric_value
14731484
if self._elapsed_time:
14741485
outputs["elapsed_time"] = self._elapsed_time
1486+
1487+
outputs["reverse_forward_transforms"] = outputs["forward_transforms"][::-1]
1488+
outputs["reverse_forward_invert_flags"] = outputs["forward_invert_flags"][::-1]
1489+
14751490
return outputs
14761491

14771492

nipype/interfaces/ants/tests/test_auto_Registration.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ def test_Registration_outputs():
9797
inverse_composite_transform=dict(extensions=None,),
9898
inverse_warped_image=dict(extensions=None,),
9999
metric_value=dict(),
100+
reverse_forward_invert_flags=dict(),
101+
reverse_forward_transforms=dict(),
100102
reverse_invert_flags=dict(),
101103
reverse_transforms=dict(),
102104
save_state=dict(extensions=None,),

nipype/interfaces/base/tests/test_core.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import simplejson as json
66

77
import pytest
8+
from unittest import mock
89

910
from .... import config
1011
from ....testing import example_data
@@ -456,17 +457,18 @@ def test_global_CommandLine_output(tmpdir):
456457
ci = BET()
457458
assert ci.terminal_output == "stream" # default case
458459

459-
nib.CommandLine.set_default_terminal_output("allatonce")
460-
ci = nib.CommandLine(command="ls -l")
461-
assert ci.terminal_output == "allatonce"
460+
with mock.patch.object(nib.CommandLine, '_terminal_output'):
461+
nib.CommandLine.set_default_terminal_output("allatonce")
462+
ci = nib.CommandLine(command="ls -l")
463+
assert ci.terminal_output == "allatonce"
462464

463-
nib.CommandLine.set_default_terminal_output("file")
464-
ci = nib.CommandLine(command="ls -l")
465-
assert ci.terminal_output == "file"
465+
nib.CommandLine.set_default_terminal_output("file")
466+
ci = nib.CommandLine(command="ls -l")
467+
assert ci.terminal_output == "file"
466468

467-
# Check default affects derived interfaces
468-
ci = BET()
469-
assert ci.terminal_output == "file"
469+
# Check default affects derived interfaces
470+
ci = BET()
471+
assert ci.terminal_output == "file"
470472

471473

472474
def test_CommandLine_prefix(tmpdir):

nipype/interfaces/fsl/tests/test_base.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
@pytest.mark.skipif(no_fsl(), reason="fsl is not installed")
1414
def test_fslversion():
1515
ver = fsl.Info.version()
16-
ver = ver.split(".")
17-
assert ver[0] in ["4", "5"]
16+
assert ver.split(".", 1)[0].isdigit()
1817

1918

2019
@pytest.mark.skipif(no_fsl(), reason="fsl is not installed")

nipype/interfaces/niftyreg/base.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import os
2020

2121
from ... import logging
22-
from ..base import CommandLine, CommandLineInputSpec, traits, Undefined
22+
from ..base import (CommandLine, CommandLineInputSpec, traits, Undefined,
23+
PackageInfo)
2324
from ...utils.filemanip import split_filename
2425

2526
iflogger = logging.getLogger("nipype.interface")
@@ -29,6 +30,14 @@ def get_custom_path(command, env_dir="NIFTYREGDIR"):
2930
return os.path.join(os.getenv(env_dir, ""), command)
3031

3132

33+
class Info(PackageInfo):
34+
version_cmd = get_custom_path('reg_aladin') + ' --version'
35+
36+
@staticmethod
37+
def parse_version(raw_info):
38+
return raw_info
39+
40+
3241
class NiftyRegCommandInputSpec(CommandLineInputSpec):
3342
"""Input Spec for niftyreg interfaces."""
3443

@@ -55,9 +64,8 @@ def __init__(self, required_version=None, **inputs):
5564
self.num_threads = 1
5665
super(NiftyRegCommand, self).__init__(**inputs)
5766
self.required_version = required_version
58-
_version = self.version_from_command()
67+
_version = self.version
5968
if _version:
60-
_version = _version.decode("utf-8")
6169
if self._min_version is not None and StrictVersion(
6270
_version
6371
) < StrictVersion(self._min_version):
@@ -91,11 +99,9 @@ def _environ_update(self):
9199
self.inputs.omp_core_val = Undefined
92100

93101
def check_version(self):
94-
_version = self.version_from_command()
102+
_version = self.version
95103
if not _version:
96104
raise Exception("Niftyreg not found")
97-
# Decoding to string:
98-
_version = _version.decode("utf-8")
99105
if StrictVersion(_version) < StrictVersion(self._min_version):
100106
err = "A later version of Niftyreg is required (%s < %s)"
101107
raise ValueError(err % (_version, self._min_version))
@@ -107,10 +113,10 @@ def check_version(self):
107113

108114
@property
109115
def version(self):
110-
return self.version_from_command()
116+
return Info.version()
111117

112118
def exists(self):
113-
return self.version_from_command() is not None
119+
return self.version is not None
114120

115121
def _format_arg(self, name, spec, value):
116122
if name == "omp_core_val":

nipype/interfaces/tests/test_extra_dcm2nii.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def _fetch_data(datadir, dicoms):
2222
"""Fetches some test DICOMs using datalad"""
2323
api.install(path=datadir, source=DICOM_DIR)
2424
data = os.path.join(datadir, dicoms)
25-
api.get(path=data)
25+
api.get(path=data, dataset=datadir)
2626
except IncompleteResultsError as exc:
2727
pytest.skip("Failed to fetch test data: %s" % str(exc))
2828
return data
@@ -32,7 +32,6 @@ def _fetch_data(datadir, dicoms):
3232

3333
@pytest.mark.skipif(no_datalad, reason="Datalad required")
3434
@pytest.mark.skipif(no_dcm2niix, reason="Dcm2niix required")
35-
@pytest.mark.xfail(reason="Intermittent failures. Let's come back to this later.")
3635
def test_dcm2niix_dti(fetch_data, tmpdir):
3736
tmpdir.chdir()
3837
datadir = tmpdir.mkdir("data").strpath

0 commit comments

Comments
 (0)