Skip to content

Commit 0e843c0

Browse files
committed
RF - promote _dtype to public class variable
We use cls._dtype in various places; it should be part of the public API.
1 parent a30b85d commit 0e843c0

File tree

7 files changed

+20
-19
lines changed

7 files changed

+20
-19
lines changed

nibabel/analyze.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class AnalyzeHeader(WrapStruct):
174174
scaling
175175
'''
176176
# Copies of module-level definitions
177-
_dtype = header_dtype
177+
template_dtype = header_dtype
178178
_data_type_codes = data_type_codes
179179
# fields with recoders for their values
180180
_field_recoders = {'datatype': data_type_codes}

nibabel/nifti1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ class Nifti1Header(SpmAnalyzeHeader):
517517
This class handles the header-preceding-data case.
518518
'''
519519
# Copies of module level definitions
520-
_dtype = header_dtype
520+
template_dtype = header_dtype
521521
_data_type_codes = data_type_codes
522522

523523
# fields with recoders for their values
@@ -563,7 +563,7 @@ def copy(self):
563563

564564
@classmethod
565565
def from_fileobj(klass, fileobj, endianness=None, check=True):
566-
raw_str = fileobj.read(klass._dtype.itemsize)
566+
raw_str = fileobj.read(klass.template_dtype.itemsize)
567567
hdr = klass(raw_str, endianness, check)
568568
# Read next 4 bytes to see if we have extensions. The nifti standard
569569
# has this as a 4 byte string; if the first value is not zero, then we

nibabel/spm2analyze.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class Spm2AnalyzeHeader(spm99.Spm99AnalyzeHeader):
3030
offset for data'''
3131

3232
# Copies of module level definitions
33-
_dtype = header_dtype
33+
template_dtype = header_dtype
3434

3535
def get_slope_inter(self):
3636
''' Get data scaling (slope) and offset (intercept) from header data

nibabel/spm99analyze.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
class SpmAnalyzeHeader(analyze.AnalyzeHeader):
3838
''' Basic scaling Spm Analyze header '''
3939
# Copies of module level definitions
40-
_dtype = header_dtype
40+
template_dtype = header_dtype
4141

4242
# data scaling capabilities
4343
has_data_slope = True

nibabel/tests/test_analyze.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def test_general_init(self):
6868
assert_equal(hdr.get_zooms(), (1.0,))
6969

7070
def test_header_size(self):
71-
assert_equal(self.header_class._dtype.itemsize, 348)
71+
assert_equal(self.header_class.template_dtype.itemsize, 348)
7272

7373
def test_empty(self):
7474
hdr = self.header_class()

nibabel/tests/test_wrapstruct.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@
4747
class MyWrapStruct(WrapStruct):
4848
""" An example binary header class """
4949
_field_recoders = {}
50-
dtype_def = [
51-
('an_integer', 'i2'),
52-
('a_str', 'S10')]
53-
_dtype = np.dtype(dtype_def)
50+
template_dtype = np.dtype([('an_integer', 'i2'), ('a_str', 'S10')])
5451

5552
@classmethod
5653
def guessed_endian(klass, hdr):

nibabel/wrapstruct.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@
5757
.as_byteswapped(endianness)
5858
.write_to(fileobj)
5959
.from_fileobj(fileobj)
60+
.default_structarr() - return default structured array
61+
.guessed_endian(structarr) - return guessed endian code from this structarr
62+
63+
Class variables:
64+
template_dtype - native endian version of dtype for contained structarr
6065
6166
Consistency checks
6267
------------------
@@ -113,8 +118,7 @@ class WrapStructError(Exception):
113118
class WrapStruct(object):
114119
_field_recoders = {}
115120
# placeholder datatype
116-
dtype_def = [('integer', 'i2')]
117-
_dtype = np.dtype(dtype_def)
121+
template_dtype = np.dtype([('integer', 'i2')])
118122

119123
def __init__(self,
120124
binaryblock=None,
@@ -149,17 +153,17 @@ def __init__(self,
149153
self._structarr = self.__class__.default_structarr(endianness)
150154
return
151155
# check size
152-
if len(binaryblock) != self._dtype.itemsize:
156+
if len(binaryblock) != self.template_dtype.itemsize:
153157
raise WrapStructError('Binary block is wrong size')
154158
wstr = np.ndarray(shape=(),
155-
dtype=self._dtype,
159+
dtype=self.template_dtype,
156160
buffer=binaryblock)
157161
if endianness is None:
158162
endianness = self.__class__.guessed_endian(wstr)
159163
else:
160164
endianness = endian_codes[endianness]
161165
if endianness != native_code:
162-
dt = self._dtype.newbyteorder(endianness)
166+
dt = self.template_dtype.newbyteorder(endianness)
163167
wstr = np.ndarray(shape=(),
164168
dtype=dt,
165169
buffer=binaryblock)
@@ -184,7 +188,7 @@ def from_fileobj(klass, fileobj, endianness=None, check=True):
184188
wstr : WrapStruct object
185189
WrapStruct object initialized from data in fileobj
186190
'''
187-
raw_str = fileobj.read(klass._dtype.itemsize)
191+
raw_str = fileobj.read(klass.template_dtype.itemsize)
188192
return klass(raw_str, endianness, check)
189193

190194
@property
@@ -321,12 +325,12 @@ def __iter__(self):
321325

322326
def keys(self):
323327
''' Return keys from structured data'''
324-
return list(self._dtype.names)
328+
return list(self.template_dtype.names)
325329

326330
def values(self):
327331
''' Return values from structured data'''
328332
data = self._structarr
329-
return [data[key] for key in self._dtype.names]
333+
return [data[key] for key in self.template_dtype.names]
330334

331335
def items(self):
332336
''' Return items from structured data'''
@@ -373,7 +377,7 @@ def guessed_endian(self, mapping):
373377
def default_structarr(klass, endianness=None):
374378
''' Return structured array for default structure, with given endianness
375379
'''
376-
dt = klass._dtype
380+
dt = klass.template_dtype
377381
if endianness is not None:
378382
endianness = endian_codes[endianness]
379383
dt = dt.newbyteorder(endianness)

0 commit comments

Comments
 (0)