Skip to content

Commit 82b1457

Browse files
committed
added and fixed tests
1 parent ae74339 commit 82b1457

File tree

2 files changed

+66
-26
lines changed

2 files changed

+66
-26
lines changed

nibabel/cmdline/diff.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from optparse import OptionParser, Option
1919

2020
import numpy as np
21-
import functools.partial
2221

2322
import nibabel as nib
2423
import nibabel.cmdline.utils
@@ -50,9 +49,11 @@ def are_values_different(*values):
5049
values = values[1:] # to ensure that the first value isn't compared with itself
5150

5251
for value in values:
53-
try: # we don't want NaN values
54-
if np.any(np.isnan(value0)) or np.any(np.isnan(value)):
52+
try: # we sometimes don't want NaN values
53+
if np.any(np.isnan(value0)) and np.any(np.isnan(value)): # if they're both NaN
5554
break
55+
elif np.any(np.isnan(value0)) or np.any(np.isnan(value)): # if only 1 or the other is NaN
56+
return True
5657

5758
except TypeError:
5859
pass
@@ -82,14 +83,18 @@ def get_headers_diff(file_headers, names=None):
8283
values per each file
8384
"""
8485
difference = OrderedDict()
86+
fields = names
87+
88+
if names is None:
89+
fields = file_headers[0].keys()
8590

8691
# for each header field
87-
for name in names:
88-
values = [header.get(name) for header in file_headers] # get corresponding value
92+
for field in fields:
93+
values = [header.get(field) for header in file_headers] # get corresponding value
8994

9095
# if these values are different, store them in a dictionary
9196
if are_values_different(*values):
92-
difference[name] = values
97+
difference[field] = values
9398

9499
return difference
95100

nibabel/cmdline/tests/test_utils.py

Lines changed: 55 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
from nose.tools import assert_equal
99

1010
import nibabel as nib
11+
import numpy as np
1112
from nibabel.cmdline.utils import *
12-
from nibabel.cmdline.diff import diff_header_fields, diff_headers
13+
from nibabel.cmdline.diff import get_headers_diff
1314
from os.path import (dirname, join as pjoin, abspath)
1415

1516

@@ -46,24 +47,58 @@ def get_test(self):
4647
assert_equal(safe_get(test, "failtest"), "-")
4748

4849

49-
def test_diff_headers():
50+
def test_get_headers_diff():
5051
fnames = [pjoin(DATA_PATH, f)
5152
for f in ('standard.nii.gz', 'example4d.nii.gz')]
52-
file_headers = [nib.load(f).header for f in fnames]
53-
headers = ['sizeof_hdr', 'data_type', 'db_name', 'extents', 'session_error', 'regular', 'dim_info', 'dim', 'intent_p1',
54-
'intent_p2', 'intent_p3', 'intent_code', 'datatype', 'bitpix', 'slice_start', 'pixdim', 'vox_offset', 'scl_slope',
55-
'scl_inter', 'slice_end', 'slice_code', 'xyzt_units', 'cal_max', 'cal_min', 'slice_duration', 'toffset', 'glmax',
56-
'glmin', 'descrip', 'aux_file', 'qform_code', 'sform_code', 'quatern_b', 'quatern_c', 'quatern_d', 'qoffset_x',
57-
'qoffset_y', 'qoffset_z', 'srow_x', 'srow_y', 'srow_z', 'intent_name', 'magic']
58-
59-
assert_equal(diff_headers(file_headers, headers), ['regular', 'dim_info', 'dim', 'datatype', 'bitpix', 'pixdim',
60-
'slice_end', 'xyzt_units', 'cal_max', 'descrip', 'qform_code',
61-
'sform_code', 'quatern_b', 'quatern_c', 'quatern_d', 'qoffset_x',
62-
'qoffset_y', 'qoffset_z', 'srow_x', 'srow_y', 'srow_z'])
63-
64-
65-
def test_diff_header_fields():
66-
fnames = [pjoin(DATA_PATH, f)
67-
for f in ('standard.nii.gz', 'example4d.nii.gz')]
68-
file_headers = [nib.load(f).header for f in fnames]
69-
assert_equal(diff_header_fields("dim_info", file_headers), ['0', '57'])
53+
actual_difference = get_headers_diff([nib.load(f).header for f in fnames])
54+
expected_difference = {
55+
"regular": ["".encode("utf-8"), "r".encode("utf-8")],
56+
"dim_info": [0, 57],
57+
"dim": np.array([[3, 4, 5, 7, 1, 1, 1, 1], [ 4, 128, 96, 24, 2, 1, 1, 1]], "int16"),
58+
"datatype": [2, 4],
59+
"bitpix": [8, 16],
60+
"pixdim": np.array([[ 1., 1., 3., 2., 1., 1., 1., 1.], [ -1.00000000e+00, 2.00000000e+00,
61+
2.00000000e+00, 2.19999909e+00,
62+
2.00000000e+03, 1.00000000e+00,
63+
1.00000000e+00, 1.00000000e+00]], "float32"),
64+
"slice_end": [0, 23],
65+
"xyzt_units": [0, 10],
66+
"cal_max": [0.0, 1162.0],
67+
"descrip": ["".encode("utf-8"), "FSL3.3\x00 v2.25 NIfTI-1 Single file format".encode("utf-8")],
68+
"qform_code": [0, 1],
69+
"sform_code": [2, 1],
70+
"quatern_b": [0.0, -1.9451068140294884e-26],
71+
"quatern_c": [0.0, -0.9967085123062134],
72+
"quatern_d": [0.0, -0.0810687392950058],
73+
"qoffset_x": [0.0, 117.8551025390625],
74+
"qoffset_y": [0.0, -35.72294235229492],
75+
"qoffset_z": [0.0, -7.248798370361328],
76+
"srow_x": np.array([[ 1., 0., 0., 0.], [ -2.00000000e+00, 6.71471565e-19, 9.08102451e-18,
77+
1.17855103e+02]], "float32"),
78+
"srow_y": np.array([[ 0., 3., 0., 0.], [ -6.71471565e-19, 1.97371149e+00, -3.55528235e-01,
79+
-3.57229424e+01]], "float32"),
80+
"srow_z": np.array([[ 0., 0., 2., 0.], [ 8.25548089e-18, 3.23207617e-01, 2.17108178e+00,
81+
-7.24879837e+00]], "float32")
82+
}
83+
84+
assert_equal(actual_difference["regular"], expected_difference["regular"])
85+
assert_equal(actual_difference["dim_info"], expected_difference["dim_info"])
86+
np.testing.assert_array_equal(actual_difference["dim"], expected_difference["dim"])
87+
assert_equal(actual_difference["datatype"], expected_difference["datatype"])
88+
assert_equal(actual_difference["bitpix"], expected_difference["bitpix"])
89+
np.testing.assert_array_equal(actual_difference["pixdim"], expected_difference["pixdim"])
90+
assert_equal(actual_difference["slice_end"], expected_difference["slice_end"])
91+
assert_equal(actual_difference["xyzt_units"], expected_difference["xyzt_units"])
92+
assert_equal(actual_difference["cal_max"], expected_difference["cal_max"])
93+
assert_equal(actual_difference["descrip"], expected_difference["descrip"])
94+
assert_equal(actual_difference["qform_code"], expected_difference["qform_code"])
95+
assert_equal(actual_difference["sform_code"], expected_difference["sform_code"])
96+
assert_equal(actual_difference["quatern_b"], expected_difference["quatern_b"])
97+
assert_equal(actual_difference["quatern_c"], expected_difference["quatern_c"])
98+
assert_equal(actual_difference["quatern_d"], expected_difference["quatern_d"])
99+
assert_equal(actual_difference["qoffset_x"], expected_difference["qoffset_x"])
100+
assert_equal(actual_difference["qoffset_y"], expected_difference["qoffset_y"])
101+
assert_equal(actual_difference["qoffset_z"], expected_difference["qoffset_z"])
102+
np.testing.assert_array_equal(actual_difference["srow_x"], expected_difference["srow_x"])
103+
np.testing.assert_array_equal(actual_difference["srow_y"], expected_difference["srow_y"])
104+
np.testing.assert_array_equal(actual_difference["srow_z"], expected_difference["srow_z"])

0 commit comments

Comments
 (0)