Skip to content

Commit 7085e2b

Browse files
committed
Merge remote-tracking branch 'upstream/master' into bf-nopytest
2 parents 8a168d9 + ebbd062 commit 7085e2b

11 files changed

+162
-16
lines changed

.travis.yml

+3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ matrix:
6060
NIPYPE_EXTRAS="doc,tests,nipy,profiler"
6161
EXTRA_PIP_FLAGS="--pre $EXTRA_PIP_FLAGS --find-links $PRE_WHEELS"
6262
CI_SKIP_TEST=1
63+
allow_failures:
64+
- python: 2.7
65+
env: INSTALL_DEB_DEPENDECIES=true NIPYPE_EXTRAS="doc,tests,nipy,profiler" EXTRA_PIP_FLAGS="--pre $EXTRA_PIP_FLAGS --find-links $PRE_WHEELS" CI_SKIP_TEST=1
6366

6467
addons:
6568
apt:

nipype/info.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ def get_nipype_gitversion():
105105
# Numpy bug in python 3.7:
106106
# https://www.opensourceanswers.com/blog/you-shouldnt-use-python-37-for-data-science-right-now.html
107107
NUMPY_MIN_VERSION_37 = '1.15.3'
108+
NUMPY_BAD_VERSION_27 = '1.16.0'
108109
SCIPY_MIN_VERSION = '0.14'
109110
TRAITS_MIN_VERSION = '4.6'
110111
DATEUTIL_MIN_VERSION = '2.2'
@@ -136,7 +137,8 @@ def get_nipype_gitversion():
136137
REQUIRES = [
137138
'nibabel>=%s' % NIBABEL_MIN_VERSION,
138139
'networkx>=%s' % NETWORKX_MIN_VERSION,
139-
'numpy>=%s ; python_version < "3.7"' % NUMPY_MIN_VERSION,
140+
'numpy>=%s,!=%s ; python_version == "2.7"' % (NUMPY_MIN_VERSION, NUMPY_BAD_VERSION_27),
141+
'numpy>=%s ; python_version > "3.0" and python_version < "3.7"' % NUMPY_MIN_VERSION,
140142
'numpy>=%s ; python_version >= "3.7"' % NUMPY_MIN_VERSION_37,
141143
'python-dateutil>=%s' % DATEUTIL_MIN_VERSION,
142144
'scipy>=%s' % SCIPY_MIN_VERSION,

nipype/interfaces/ants/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# Registraiton programs
77
from .registration import (ANTS, Registration, RegistrationSynQuick,
8-
MeasureImageSimilarity)
8+
CompositeTransformUtil, MeasureImageSimilarity)
99

1010
# Resampling Programs
1111
from .resampling import (ApplyTransforms, ApplyTransformsToPoints,

nipype/interfaces/ants/registration.py

+74
Original file line numberDiff line numberDiff line change
@@ -1596,3 +1596,77 @@ def _list_outputs(self):
15961596
outputs['forward_warp_field'] = out_base + '1Warp.nii.gz'
15971597
outputs['inverse_warp_field'] = out_base + '1InverseWarp.nii.gz'
15981598
return outputs
1599+
1600+
class CompositeTransformUtilInputSpec(ANTSCommandInputSpec):
1601+
process = traits.Enum('assemble', 'disassemble', argstr='--%s',
1602+
position=1, usedefault=True,
1603+
desc='What to do with the transform inputs (assemble or disassemble)',
1604+
)
1605+
out_file = File(exists=False, argstr='%s', position=2,
1606+
desc='Output file path (only used for disassembly).')
1607+
in_file = InputMultiPath(File(exists=True), mandatory=True, argstr='%s...',
1608+
position=3, desc='Input transform file(s)')
1609+
output_prefix = Str("transform", usedefault=True, argstr='%s', position=4,
1610+
desc="A prefix that is prepended to all output files (only used for assembly).")
1611+
1612+
class CompositeTransformUtilOutputSpec(TraitedSpec):
1613+
affine_transform = File(desc="Affine transform component")
1614+
displacement_field = File(desc="Displacement field component")
1615+
out_file = File(desc="Compound transformation file")
1616+
1617+
class CompositeTransformUtil(ANTSCommand):
1618+
"""
1619+
ANTs utility which can combine or break apart transform files into their individual
1620+
constituent components.
1621+
1622+
Examples
1623+
--------
1624+
1625+
>>> from nipype.interfaces.ants import CompositeTransformUtil
1626+
>>> tran = CompositeTransformUtil()
1627+
>>> tran.inputs.process = 'disassemble'
1628+
>>> tran.inputs.in_file = 'output_Composite.h5'
1629+
>>> tran.cmdline
1630+
'CompositeTransformUtil --disassemble output_Composite.h5 transform'
1631+
>>> tran.run() # doctest: +SKIP
1632+
1633+
example for assembling transformation files
1634+
1635+
>>> from nipype.interfaces.ants import CompositeTransformUtil
1636+
>>> tran = CompositeTransformUtil()
1637+
>>> tran.inputs.process = 'assemble'
1638+
>>> tran.inputs.out_file = 'my.h5'
1639+
>>> tran.inputs.in_file = ['AffineTransform.mat', 'DisplacementFieldTransform.nii.gz']
1640+
>>> tran.cmdline
1641+
'CompositeTransformUtil --assemble my.h5 AffineTransform.mat DisplacementFieldTransform.nii.gz '
1642+
>>> tran.run() # doctest: +SKIP
1643+
"""
1644+
1645+
_cmd = 'CompositeTransformUtil'
1646+
input_spec = CompositeTransformUtilInputSpec
1647+
output_spec = CompositeTransformUtilOutputSpec
1648+
1649+
def _num_threads_update(self):
1650+
"""
1651+
CompositeTransformUtil ignores environment variables,
1652+
so override environment update from ANTSCommand class
1653+
"""
1654+
pass
1655+
1656+
def _format_arg(self, name, spec, value):
1657+
if name == 'output_prefix' and self.inputs.process == 'assemble':
1658+
return ''
1659+
if name == 'out_file' and self.inputs.process == 'disassemble':
1660+
return ''
1661+
return super(CompositeTransformUtil, self)._format_arg(name, spec, value)
1662+
1663+
def _list_outputs(self):
1664+
outputs = self.output_spec().get()
1665+
if self.inputs.process == 'disassemble':
1666+
outputs['affine_transform'] = os.path.abspath(
1667+
'00_{}_AffineTransform.mat'.format(self.inputs.output_prefix))
1668+
outputs['displacement_field'] = os.path.abspath(
1669+
'01_{}_DisplacementFieldTransform.nii.gz'.format(self.inputs.output_prefix))
1670+
if self.inputs.process == 'assemble':
1671+
outputs['out_file'] = os.path.abspath(self.inputs.out_file)
1672+
return outputs

nipype/interfaces/ants/segmentation.py

+20-6
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,27 @@ class LaplacianThicknessInputSpec(ANTSCommandInputSpec):
207207
name_template='%s_thickness',
208208
keep_extension=True,
209209
hash_files=False)
210-
smooth_param = traits.Float(argstr='smoothparam=%d', desc='', position=4)
210+
smooth_param = traits.Float(
211+
argstr='%f',
212+
desc='Sigma of the Laplacian Recursive Image Filter (defaults to 1)',
213+
position=4)
211214
prior_thickness = traits.Float(
212-
argstr='priorthickval=%d', desc='', position=5)
213-
dT = traits.Float(argstr='dT=%d', desc='', position=6)
214-
sulcus_prior = traits.Bool(argstr='use-sulcus-prior', desc='', position=7)
215-
opt_tolerance = traits.Float(
216-
argstr='optional-laplacian-tolerance=%d', desc='', position=8)
215+
argstr='%f',
216+
desc='Prior thickness (defaults to 500)',
217+
position=5)
218+
dT = traits.Float(
219+
argstr='%f',
220+
desc='Time delta used during integration (defaults to 0.01)',
221+
position=6)
222+
sulcus_prior = traits.Float(
223+
argstr='%f',
224+
desc='Positive floating point number for sulcus prior. '
225+
'Authors said that 0.15 might be a reasonable value',
226+
position=7)
227+
tolerance = traits.Float(
228+
argstr='%f',
229+
desc='Tolerance to reach during optimization (defaults to 0.001)',
230+
position=8)
217231

218232

219233
class LaplacianThicknessOutputSpec(TraitedSpec):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
2+
from __future__ import unicode_literals
3+
from ..registration import CompositeTransformUtil
4+
5+
6+
def test_CompositeTransformUtil_inputs():
7+
input_map = dict(
8+
args=dict(argstr='%s', ),
9+
environ=dict(
10+
nohash=True,
11+
usedefault=True,
12+
),
13+
in_file=dict(
14+
argstr='%s...',
15+
mandatory=True,
16+
position=3,
17+
),
18+
num_threads=dict(
19+
nohash=True,
20+
usedefault=True,
21+
),
22+
out_file=dict(
23+
argstr='%s',
24+
position=2,
25+
),
26+
output_prefix=dict(
27+
argstr='%s',
28+
position=4,
29+
usedefault=True,
30+
),
31+
process=dict(
32+
argstr='--%s',
33+
position=1,
34+
usedefault=True,
35+
),
36+
)
37+
inputs = CompositeTransformUtil.input_spec()
38+
39+
for key, metadata in list(input_map.items()):
40+
for metakey, value in list(metadata.items()):
41+
assert getattr(inputs.traits()[key], metakey) == value
42+
def test_CompositeTransformUtil_outputs():
43+
output_map = dict(
44+
affine_transform=dict(),
45+
displacement_field=dict(),
46+
out_file=dict(),
47+
)
48+
outputs = CompositeTransformUtil.output_spec()
49+
50+
for key, metadata in list(output_map.items()):
51+
for metakey, value in list(metadata.items()):
52+
assert getattr(outputs.traits()[key], metakey) == value

nipype/interfaces/ants/tests/test_auto_LaplacianThickness.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def test_LaplacianThickness_inputs():
77
input_map = dict(
88
args=dict(argstr='%s', ),
99
dT=dict(
10-
argstr='dT=%d',
10+
argstr='%f',
1111
position=6,
1212
),
1313
environ=dict(
@@ -30,10 +30,6 @@ def test_LaplacianThickness_inputs():
3030
nohash=True,
3131
usedefault=True,
3232
),
33-
opt_tolerance=dict(
34-
argstr='optional-laplacian-tolerance=%d',
35-
position=8,
36-
),
3733
output_image=dict(
3834
argstr='%s',
3935
hash_files=False,
@@ -43,17 +39,21 @@ def test_LaplacianThickness_inputs():
4339
position=3,
4440
),
4541
prior_thickness=dict(
46-
argstr='priorthickval=%d',
42+
argstr='%f',
4743
position=5,
4844
),
4945
smooth_param=dict(
50-
argstr='smoothparam=%d',
46+
argstr='%f',
5147
position=4,
5248
),
5349
sulcus_prior=dict(
54-
argstr='use-sulcus-prior',
50+
argstr='%f',
5551
position=7,
5652
),
53+
tolerance=dict(
54+
argstr='%f',
55+
position=8,
56+
),
5757
)
5858
inputs = LaplacianThickness.input_spec()
5959

nipype/testing/data/AffineTransform.mat

Whitespace-only changes.

nipype/testing/data/DisplacementFieldTransform.nii.gz

Whitespace-only changes.

nipype/testing/data/output_Composite.h5

Whitespace-only changes.

tools/build_interface_docs.py

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
'\.pipeline\.s3_node_wrapper$',
4242
'\.testing',
4343
'\.scripts',
44+
'\.conftest',
4445
]
4546
docwriter.class_skip_patterns += [
4647
'AFNICommand',

0 commit comments

Comments
 (0)