Skip to content

Commit b8dfa87

Browse files
committed
BF+TEST - fix trackvis swapped endian read error with test
1 parent b4c9b6c commit b8dfa87

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

nibabel/tests/test_trackvis.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import numpy as np
66

77
from .. import trackvis as tv
8+
from ..volumeutils import swapped_code
89

910
from nose.tools import assert_true, assert_false, assert_equal, assert_raises
1011

@@ -46,10 +47,10 @@ def streams_equal(stream1, stream2):
4647
return False
4748
if stream1[1] is None:
4849
if not stream2[1] is None:
49-
return false
50+
return False
5051
if stream1[2] is None:
5152
if not stream2[2] is None:
52-
return false
53+
return False
5354
if not np.all(stream1[1] == stream1[1]):
5455
return False
5556
if not np.all(stream1[2] == stream1[2]):
@@ -75,6 +76,12 @@ def test_round_trip():
7576
out_f.seek(0)
7677
streams2, hdr = tv.read(out_f)
7778
assert_true(streamlist_equal(streams, streams2))
79+
# test that we can write in different endianness and get back same result
80+
out_f.seek(0)
81+
tv.write(out_f, streams, {}, swapped_code)
82+
out_f.seek(0)
83+
streams2, hdr = tv.read(out_f)
84+
assert_true(streamlist_equal(streams, streams2))
7885
# test that we can get out and pass in generators
7986
out_f.seek(0)
8087
streams3, hdr = tv.read(out_f, as_generator=True)

nibabel/trackvis.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,6 @@ def read(fileobj, as_generator=False):
125125
if str(hdr['id_string'])[:5] != 'TRACK':
126126
raise HeaderError('Expecting TRACK as first '
127127
'5 characters of id_string')
128-
version = hdr['version']
129-
if version not in (1, 2):
130-
raise HeaderError('Reader only supports versions 1 and 2')
131-
if version == 1:
132-
hdr = np.ndarray(shape=(),
133-
dtype=header_1_dtype,
134-
buffer=hdr_str)
135128
if hdr['hdr_size'] == 1000:
136129
endianness = native_code
137130
else:
@@ -140,6 +133,16 @@ def read(fileobj, as_generator=False):
140133
raise HeaderError('Invalid hdr_size of %s'
141134
% hdr['hdr_size'])
142135
endianness = swapped_code
136+
# Check version and adapt structure accordingly
137+
version = hdr['version']
138+
if version not in (1, 2):
139+
raise HeaderError('Reader only supports versions 1 and 2')
140+
if version == 1: # make a new header with the same data
141+
hdr = np.ndarray(shape=(),
142+
dtype=header_1_dtype,
143+
buffer=hdr_str)
144+
if endianness == swapped_code:
145+
hdr = hdr.newbyteorder()
143146
n_s = hdr['n_scalars']
144147
n_p = hdr['n_properties']
145148
f4dt = np.dtype(endianness + 'f4')

0 commit comments

Comments
 (0)