From 7e78cf31e58542ec4f4d3422e99187b9815df3b9 Mon Sep 17 00:00:00 2001 From: Matthew Brett Date: Thu, 23 Oct 2014 22:39:18 -0700 Subject: [PATCH 1/6] DOC: docstring for PARRECArrayProxy --- nibabel/parrec.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nibabel/parrec.py b/nibabel/parrec.py index 92032006bf..53c5fcb9e3 100644 --- a/nibabel/parrec.py +++ b/nibabel/parrec.py @@ -462,6 +462,18 @@ def _data_from_rec(rec_fileobj, in_shape, dtype, slice_indices, out_shape, class PARRECArrayProxy(object): def __init__(self, file_like, header, scaling): + """ Initialize PARREC array proxy + + Parameters + ---------- + file_like : file-like object + Filename or object implementing ``read, seek, tell`` + header : PARRECHeader instance + Implementing ``get_data_shape, get_data_dtype``, + ``get_sorted_slice_indices``, ``get_data_scaling`` + scaling : {'fp', 'dv'} + Type of scaling to use - see header ``get_data_scaling`` method. + """ self.file_like = file_like # Copies of values needed to read array self._shape = header.get_data_shape() From 939f68bfbf3b83b15c9ac2a1bf43b878cc71c20e Mon Sep 17 00:00:00 2001 From: Matthew Brett Date: Thu, 23 Oct 2014 22:53:12 -0700 Subject: [PATCH 2/6] TST: make truncated PAR/REC and test Test that truncated PAR/REC file raises error or warning according to `permit_truncated` flag. --- nibabel/tests/data/README.rst | 8 ++ nibabel/tests/data/phantom_truncated.PAR | 129 +++++++++++++++++++++++ nibabel/tests/data/phantom_truncated.REC | Bin 0 -> 221184 bytes nibabel/tests/test_parrec.py | 22 +++- 4 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 nibabel/tests/data/README.rst create mode 100644 nibabel/tests/data/phantom_truncated.PAR create mode 100644 nibabel/tests/data/phantom_truncated.REC diff --git a/nibabel/tests/data/README.rst b/nibabel/tests/data/README.rst new file mode 100644 index 0000000000..c33499578a --- /dev/null +++ b/nibabel/tests/data/README.rst @@ -0,0 +1,8 @@ +################## +Nibabel data files +################## + +``phantom_truncated.REC`` is a copy of ``phantom_EPI_asc_CLEAR_2_1.REC``. + +``phantom_truncated.PAR`` is a slightly edited copy of +``phantom_EPI_asc_CLEAR_2_1.PAR``. diff --git a/nibabel/tests/data/phantom_truncated.PAR b/nibabel/tests/data/phantom_truncated.PAR new file mode 100644 index 0000000000..3013c81972 --- /dev/null +++ b/nibabel/tests/data/phantom_truncated.PAR @@ -0,0 +1,129 @@ +# === DATA DESCRIPTION FILE ====================================================== +# +# CAUTION - Investigational device. +# Limited by Federal Law to investigational use. +# +# Dataset name: E:\\Export\phantom_EPI_asc_CLEAR_2_1 +# +# CLINICAL TRYOUT Research image export tool V4.2 +# +# === GENERAL INFORMATION ======================================================== +# +. Patient name : phantom +. Examination name : Konvertertest +. Protocol name : EPI_asc CLEAR +. Examination date/time : 2014.02.14 / 09:00:57 +. Series Type : Image MRSERIES +. Acquisition nr : 2 +. Reconstruction nr : 1 +. Scan Duration [sec] : 14 +. Max. number of cardiac phases : 1 +. Max. number of echoes : 1 +. Max. number of slices/locations : 9 +. Max. number of dynamics : 4 +. Max. number of mixes : 1 +. Patient position : Head First Supine +. Preparation direction : Anterior-Posterior +. Technique : FEEPI +. Scan resolution (x, y) : 64 39 +. Scan mode : MS +. Repetition time [ms] : 2000.000 +. FOV (ap,fh,rl) [mm] : 240.000 70.000 240.000 +. Water Fat shift [pixels] : 11.050 +. Angulation midslice(ap,fh,rl)[degr]: -13.265 0.000 0.000 +. Off Centre midslice(ap,fh,rl) [mm] : 2.508 30.339 -16.032 +. Flow compensation <0=no 1=yes> ? : 0 +. Presaturation <0=no 1=yes> ? : 0 +. Phase encoding velocity [cm/sec] : 0.000000 0.000000 0.000000 +. MTC <0=no 1=yes> ? : 0 +. SPIR <0=no 1=yes> ? : 1 +. EPI factor <0,1=no EPI> : 39 +. Dynamic scan <0=no 1=yes> ? : 1 +. Diffusion <0=no 1=yes> ? : 0 +. Diffusion echo time [ms] : 0.0000 +. Max. number of diffusion values : 1 +. Max. number of gradient orients : 1 +. Number of label types <0=no ASL> : 0 +# +# === PIXEL VALUES ============================================================= +# PV = pixel value in REC file, FP = floating point value, DV = displayed value on console +# RS = rescale slope, RI = rescale intercept, SS = scale slope +# DV = PV * RS + RI FP = DV / (RS * SS) +# +# === IMAGE INFORMATION DEFINITION ============================================= +# The rest of this file contains ONE line per image, this line contains the following information: +# +# slice number (integer) +# echo number (integer) +# dynamic scan number (integer) +# cardiac phase number (integer) +# image_type_mr (integer) +# scanning sequence (integer) +# index in REC file (in images) (integer) +# image pixel size (in bits) (integer) +# scan percentage (integer) +# recon resolution (x y) (2*integer) +# rescale intercept (float) +# rescale slope (float) +# scale slope (float) +# window center (integer) +# window width (integer) +# image angulation (ap,fh,rl in degrees ) (3*float) +# image offcentre (ap,fh,rl in mm ) (3*float) +# slice thickness (in mm ) (float) +# slice gap (in mm ) (float) +# image_display_orientation (integer) +# slice orientation ( TRA/SAG/COR ) (integer) +# fmri_status_indication (integer) +# image_type_ed_es (end diast/end syst) (integer) +# pixel spacing (x,y) (in mm) (2*float) +# echo_time (float) +# dyn_scan_begin_time (float) +# trigger_time (float) +# diffusion_b_factor (float) +# number of averages (integer) +# image_flip_angle (in degrees) (float) +# cardiac frequency (bpm) (integer) +# minimum RR-interval (in ms) (integer) +# maximum RR-interval (in ms) (integer) +# TURBO factor <0=no turbo> (integer) +# Inversion delay (in ms) (float) +# diffusion b value number (imagekey!) (integer) +# gradient orientation number (imagekey!) (integer) +# contrast type (string) +# diffusion anisotropy type (string) +# diffusion (ap, fh, rl) (3*float) +# label type (ASL) (imagekey!) (integer) +# +# === IMAGE INFORMATION ========================================================== +# sl ec dyn ph ty idx pix scan% rec size (re)scale window angulation offcentre thick gap info spacing echo dtime ttime diff avg flip freq RR-int turbo delay b grad cont anis diffusion L.ty + + 1 1 1 1 0 2 0 16 62 64 64 0.00000 1.29035 4.28404e-003 1070 1860 -13.26 -0.00 -0.00 2.51 -0.81 -8.69 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 2 1 1 1 0 2 1 16 62 64 64 0.00000 1.29035 4.28404e-003 1122 1951 -13.26 -0.00 -0.00 2.51 6.98 -10.53 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 3 1 1 1 0 2 2 16 62 64 64 0.00000 1.29035 4.28404e-003 1137 1977 -13.26 -0.00 -0.00 2.51 14.77 -12.36 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 4 1 1 1 0 2 3 16 62 64 64 0.00000 1.29035 4.28404e-003 1217 2116 -13.26 -0.00 -0.00 2.51 22.55 -14.20 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 5 1 1 1 0 2 4 16 62 64 64 0.00000 1.29035 4.28404e-003 1216 2113 -13.26 -0.00 -0.00 2.51 30.34 -16.03 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 6 1 1 1 0 2 5 16 62 64 64 0.00000 1.29035 4.28404e-003 1141 1983 -13.26 -0.00 -0.00 2.51 38.13 -17.87 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 7 1 1 1 0 2 6 16 62 64 64 0.00000 1.29035 4.28404e-003 1119 1945 -13.26 -0.00 -0.00 2.51 45.91 -19.70 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 8 1 1 1 0 2 7 16 62 64 64 0.00000 1.29035 4.28404e-003 1097 1907 -13.26 -0.00 -0.00 2.51 53.70 -21.54 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 9 1 1 1 0 2 8 16 62 64 64 0.00000 1.29035 4.28404e-003 1146 1991 -13.26 -0.00 -0.00 2.51 61.49 -23.37 6.000 2.000 0 1 0 2 3.750 3.750 30.00 0.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 1 1 2 1 0 2 9 16 62 64 64 0.00000 1.29035 4.28404e-003 1071 1863 -13.26 -0.00 -0.00 2.51 -0.81 -8.69 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 2 1 2 1 0 2 10 16 62 64 64 0.00000 1.29035 4.28404e-003 1123 1953 -13.26 -0.00 -0.00 2.51 6.98 -10.53 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 3 1 2 1 0 2 11 16 62 64 64 0.00000 1.29035 4.28404e-003 1135 1973 -13.26 -0.00 -0.00 2.51 14.77 -12.36 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 4 1 2 1 0 2 12 16 62 64 64 0.00000 1.29035 4.28404e-003 1209 2101 -13.26 -0.00 -0.00 2.51 22.55 -14.20 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 5 1 2 1 0 2 13 16 62 64 64 0.00000 1.29035 4.28404e-003 1215 2113 -13.26 -0.00 -0.00 2.51 30.34 -16.03 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 6 1 2 1 0 2 14 16 62 64 64 0.00000 1.29035 4.28404e-003 1145 1990 -13.26 -0.00 -0.00 2.51 38.13 -17.87 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 7 1 2 1 0 2 15 16 62 64 64 0.00000 1.29035 4.28404e-003 1119 1945 -13.26 -0.00 -0.00 2.51 45.91 -19.70 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 8 1 2 1 0 2 16 16 62 64 64 0.00000 1.29035 4.28404e-003 1093 1899 -13.26 -0.00 -0.00 2.51 53.70 -21.54 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 9 1 2 1 0 2 17 16 62 64 64 0.00000 1.29035 4.28404e-003 1150 1999 -13.26 -0.00 -0.00 2.51 61.49 -23.37 6.000 2.000 0 1 0 2 3.750 3.750 30.00 2.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 1 1 3 1 0 2 18 16 62 64 64 0.00000 1.29035 4.28404e-003 1070 1860 -13.26 -0.00 -0.00 2.51 -0.81 -8.69 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 2 1 3 1 0 2 19 16 62 64 64 0.00000 1.29035 4.28404e-003 1125 1955 -13.26 -0.00 -0.00 2.51 6.98 -10.53 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 3 1 3 1 0 2 20 16 62 64 64 0.00000 1.29035 4.28404e-003 1135 1973 -13.26 -0.00 -0.00 2.51 14.77 -12.36 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 4 1 3 1 0 2 21 16 62 64 64 0.00000 1.29035 4.28404e-003 1211 2105 -13.26 -0.00 -0.00 2.51 22.55 -14.20 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 5 1 3 1 0 2 22 16 62 64 64 0.00000 1.29035 4.28404e-003 1218 2118 -13.26 -0.00 -0.00 2.51 30.34 -16.03 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 6 1 3 1 0 2 23 16 62 64 64 0.00000 1.29035 4.28404e-003 1143 1987 -13.26 -0.00 -0.00 2.51 38.13 -17.87 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 7 1 3 1 0 2 24 16 62 64 64 0.00000 1.29035 4.28404e-003 1120 1947 -13.26 -0.00 -0.00 2.51 45.91 -19.70 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 8 1 3 1 0 2 25 16 62 64 64 0.00000 1.29035 4.28404e-003 1093 1901 -13.26 -0.00 -0.00 2.51 53.70 -21.54 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + 9 1 3 1 0 2 26 16 62 64 64 0.00000 1.29035 4.28404e-003 1151 2001 -13.26 -0.00 -0.00 2.51 61.49 -23.37 6.000 2.000 0 1 0 2 3.750 3.750 30.00 4.00 0.00 0.00 0 90.00 0 0 0 39 0.0 1 1 8 0 0.000 0.000 0.000 1 + +# === END OF DATA DESCRIPTION FILE =============================================== diff --git a/nibabel/tests/data/phantom_truncated.REC b/nibabel/tests/data/phantom_truncated.REC new file mode 100644 index 0000000000000000000000000000000000000000..958095f2a8487e3056ad575a4e6339f6d4ed7480 GIT binary patch literal 221184 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

tm6cceKipgK!AxiNDBDtbm_wy+@ov%LBIoHJ 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 Date: Thu, 23 Oct 2014 22:54:57 -0700 Subject: [PATCH 3/6] RF+TST: add permit_truncated to header; fix copy Add `permit_truncated` to header attributes. Fix `copy` method to use value of `permit_truncated` when making a copy. Test. --- nibabel/parrec.py | 4 +++- nibabel/tests/test_parrec.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/nibabel/parrec.py b/nibabel/parrec.py index 53c5fcb9e3..925d9fbe71 100644 --- a/nibabel/parrec.py +++ b/nibabel/parrec.py @@ -524,6 +524,7 @@ def __init__(self, info, image_defs, permit_truncated=False): """ self.general_info = info.copy() self.image_defs = image_defs.copy() + self.permit_truncated = permit_truncated _truncation_checks(info, image_defs, permit_truncated) # charge with basic properties to be able to use base class # functionality @@ -550,7 +551,8 @@ def from_fileobj(klass, fileobj, permit_truncated=False): def copy(self): return PARRECHeader(deepcopy(self.general_info), - self.image_defs.copy()) + self.image_defs.copy(), + self.permit_truncated) def as_analyze_map(self): """Convert PAR parameters to NIFTI1 format""" diff --git a/nibabel/tests/test_parrec.py b/nibabel/tests/test_parrec.py index ce84abc8ad..8900e5635a 100644 --- a/nibabel/tests/test_parrec.py +++ b/nibabel/tests/test_parrec.py @@ -383,3 +383,35 @@ def test_copy_on_init(): hdr.image_defs['image pixel size'] = 8 assert_array_equal(hdr.image_defs['image pixel size'], 8) assert_array_equal(HDR_DEFS['image pixel size'], 16) + + +def assert_arr_dict_equal(dict1, dict2): + assert_equal(set(dict1), set(dict2)) + for key, value1 in dict1.items(): + value2 = dict2[key] + assert_array_equal(value1, value2) + + +def test_header_copy(): + # Test header copying + hdr = PARRECHeader(HDR_INFO, HDR_DEFS) + hdr2 = hdr.copy() + + def assert_copy_ok(hdr1, hdr2): + assert_false(hdr1 is hdr2) + assert_equal(hdr1.permit_truncated, hdr2.permit_truncated) + assert_false(hdr1.general_info is hdr2.general_info) + assert_arr_dict_equal(hdr1.general_info, hdr2.general_info) + assert_false(hdr1.image_defs is hdr2.image_defs) + assert_array_equal(hdr1.image_defs, hdr2.image_defs) + + assert_copy_ok(hdr, hdr2) + assert_false(hdr.permit_truncated) + assert_false(hdr2.permit_truncated) + with open(TRUNC_PAR, 'rt') as fobj: + assert_raises(PARRECError, PARRECHeader.from_fileobj, fobj) + with open(TRUNC_PAR, 'rt') as fobj: + trunc_hdr = PARRECHeader.from_fileobj(fobj, True) + assert_true(trunc_hdr.permit_truncated) + trunc_hdr2 = trunc_hdr.copy() + assert_copy_ok(trunc_hdr, trunc_hdr2) From e20a1cd5d4fa9ab80127e7a59b8a08b3d8ddfd17 Mon Sep 17 00:00:00 2001 From: Matthew Brett Date: Thu, 23 Oct 2014 22:56:20 -0700 Subject: [PATCH 4/6] RF+TST: standard file loading methods for PARREC Add methods with optional args `permit_truncated` and `scaling`: * from_file_map * from_filename * load --- nibabel/parrec.py | 16 +++++++++++----- nibabel/tests/test_parrec.py | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/nibabel/parrec.py b/nibabel/parrec.py index 925d9fbe71..4f46a9718a 100644 --- a/nibabel/parrec.py +++ b/nibabel/parrec.py @@ -900,7 +900,7 @@ class PARRECImage(SpatialImage): ImageArrayProxy = PARRECArrayProxy @classmethod - def from_file_map(klass, file_map, permit_truncated, scaling): + def from_file_map(klass, file_map, permit_truncated=False, scaling='dv'): pt = permit_truncated with file_map['header'].get_prepare_fileobj('rt') as hdr_fobj: hdr = klass.header_class.from_fileobj(hdr_fobj, @@ -910,8 +910,14 @@ def from_file_map(klass, file_map, permit_truncated, scaling): return klass(data, hdr.get_affine(), header=hdr, extra=None, file_map=file_map) + @classmethod + def from_filename(klass, filename, permit_truncated=False, scaling='dv'): + file_map = klass.filespec_to_file_map(filename) + return klass.from_file_map(file_map, permit_truncated, scaling) + + @classmethod + def load(klass, filename, permit_truncated=False, scaling='dv'): + return klass.from_filename(filename, permit_truncated, scaling) + -def load(filename, permit_truncated=False, scaling='dv'): - file_map = PARRECImage.filespec_to_file_map(filename) - return PARRECImage.from_file_map(file_map, permit_truncated, scaling) -load.__doc__ = PARRECImage.load.__doc__ +load = PARRECImage.load diff --git a/nibabel/tests/test_parrec.py b/nibabel/tests/test_parrec.py index 8900e5635a..c1a685e169 100644 --- a/nibabel/tests/test_parrec.py +++ b/nibabel/tests/test_parrec.py @@ -10,8 +10,9 @@ from .. import parrec from ..parrec import (parse_PAR_header, PARRECHeader, PARRECError, vol_numbers, - vol_is_full) + vol_is_full, PARRECImage, PARRECArrayProxy) from ..openers import Opener +from ..fileholders import FileHolder from numpy.testing import (assert_almost_equal, assert_array_equal) @@ -415,3 +416,35 @@ def assert_copy_ok(hdr1, hdr2): assert_true(trunc_hdr.permit_truncated) trunc_hdr2 = trunc_hdr.copy() assert_copy_ok(trunc_hdr, trunc_hdr2) + + +def test_image_creation(): + # Test parts of image API in parrec image creation + hdr = PARRECHeader(HDR_INFO, HDR_DEFS) + arr_prox_dv = np.array(PARRECArrayProxy(EG_REC, hdr, 'dv')) + arr_prox_fp = np.array(PARRECArrayProxy(EG_REC, hdr, 'fp')) + good_map = dict(image = FileHolder(EG_REC), + header = FileHolder(EG_PAR)) + trunc_map = dict(image = FileHolder(TRUNC_REC), + header = FileHolder(TRUNC_PAR)) + for func, good_param, trunc_param in ( + (PARRECImage.from_filename, EG_PAR, TRUNC_PAR), + (PARRECImage.load, EG_PAR, TRUNC_PAR), + (parrec.load, EG_PAR, TRUNC_PAR), + (PARRECImage.from_file_map, good_map, trunc_map)): + img = func(good_param) + assert_array_equal(img.dataobj, arr_prox_dv) + img = func(good_param, False) + assert_array_equal(img.dataobj, arr_prox_dv) + img = func(good_param, False, 'dv') + assert_array_equal(img.dataobj, arr_prox_dv) + img = func(good_param, False, 'fp') + assert_array_equal(img.dataobj, arr_prox_fp) + assert_raises(PARRECError, func, trunc_param) + assert_raises(PARRECError, func, trunc_param, False) + img = func(trunc_param, True) + assert_array_equal(img.dataobj, arr_prox_dv) + img = func(trunc_param, True, 'dv') + assert_array_equal(img.dataobj, arr_prox_dv) + img = func(trunc_param, True, 'fp') + assert_array_equal(img.dataobj, arr_prox_fp) From 6212a2b82f045c5184c33af1ce85814b028dc8e2 Mon Sep 17 00:00:00 2001 From: Matthew Brett Date: Fri, 24 Oct 2014 15:09:13 -0700 Subject: [PATCH 5/6] NF: add keyword-only decorator with tests Add decorator to make keyword arguments keyword-only for Python 2. --- nibabel/keywordonly.py | 27 +++++++++++++++++++++ nibabel/tests/test_keywordonly.py | 39 +++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 nibabel/keywordonly.py create mode 100644 nibabel/tests/test_keywordonly.py diff --git a/nibabel/keywordonly.py b/nibabel/keywordonly.py new file mode 100644 index 0000000000..53bfcdd2d6 --- /dev/null +++ b/nibabel/keywordonly.py @@ -0,0 +1,27 @@ +""" Decorator for labeling keyword arguments as keyword only +""" + +from functools import wraps + +def kw_only_func(n): + """ Return function decorator enforcing maximum of `n` positional arguments + """ + def decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + if len(args) > n: + raise TypeError( + '{0} takes at most {1} positional argument{2}'.format( + func.__name__, n, 's' if n > 1 else '')) + return func(*args, **kwargs) + return wrapper + return decorator + + +def kw_only_meth(n): + """ Return method decorator enforcing maximum of `n` positional arguments + + The method has at least one positional argument ``self`` or ``cls``; allow + for that. + """ + return kw_only_func(n+1) diff --git a/nibabel/tests/test_keywordonly.py b/nibabel/tests/test_keywordonly.py new file mode 100644 index 0000000000..bdf662fdc0 --- /dev/null +++ b/nibabel/tests/test_keywordonly.py @@ -0,0 +1,39 @@ +""" Test kw_only decorators """ + +from ..keywordonly import kw_only_func, kw_only_meth + +from nose.tools import assert_true, assert_false, assert_equal, assert_raises + + +def test_kw_only_func(): + # Test decorator + def func(an_arg): + "My docstring" + return an_arg + assert_equal(func(1), 1) + assert_raises(TypeError, func, 1, 2) + dec_func = kw_only_func(1)(func) + assert_equal(dec_func(1), 1) + assert_raises(TypeError, dec_func, 1, 2) + assert_raises(TypeError, dec_func, 1, akeyarg=3) + assert_equal(dec_func.__doc__, 'My docstring') + @kw_only_func(1) + def kw_func(an_arg, a_kwarg='thing'): + "Another docstring" + return an_arg, a_kwarg + assert_equal(kw_func(1), (1, 'thing')) + assert_raises(TypeError, kw_func, 1, 2) + assert_equal(kw_func(1, a_kwarg=2), (1, 2)) + assert_raises(TypeError, kw_func, 1, akeyarg=3) + assert_equal(kw_func.__doc__, 'Another docstring') + class C(object): + @kw_only_meth(1) + def kw_meth(self, an_arg, a_kwarg='thing'): + "Method docstring" + return an_arg, a_kwarg + c = C() + assert_equal(c.kw_meth(1), (1, 'thing')) + assert_raises(TypeError, c.kw_meth, 1, 2) + assert_equal(c.kw_meth(1, a_kwarg=2), (1, 2)) + assert_raises(TypeError, c.kw_meth, 1, akeyarg=3) + assert_equal(c.kw_meth.__doc__, 'Method docstring') From 2040239e65e5111e1a5225d23b87f2fb13be73d5 Mon Sep 17 00:00:00 2001 From: Matthew Brett Date: Fri, 24 Oct 2014 15:50:30 -0700 Subject: [PATCH 6/6] RF: refactor PARREC file meths for keyword only Use and test keyword-onliness of permit_truncated, scaling argument to PARRECImage file loading methods. --- bin/parrec2nii | 4 +++- nibabel/parrec.py | 11 +++++++---- nibabel/tests/test_parrec.py | 22 +++++++++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/bin/parrec2nii b/bin/parrec2nii index 166bcfdcb2..e49aea3181 100755 --- a/bin/parrec2nii +++ b/bin/parrec2nii @@ -138,7 +138,9 @@ def proc_file(infile, opts): # load the PAR header and data scaling = None if opts.scaling == 'off' else opts.scaling infile = fname_ext_ul_case(infile) - pr_img = pr.load(infile, opts.permit_truncated, scaling) + pr_img = pr.load(infile, + permit_truncated=opts.permit_truncated, + scaling=scaling) pr_hdr = pr_img.header raw_data = pr_img.dataobj.get_unscaled() affine = pr_hdr.get_affine(origin=opts.origin) diff --git a/nibabel/parrec.py b/nibabel/parrec.py index 4f46a9718a..08f93527ea 100644 --- a/nibabel/parrec.py +++ b/nibabel/parrec.py @@ -82,6 +82,7 @@ from copy import deepcopy import re +from .keywordonly import kw_only_meth from .spatialimages import SpatialImage, Header from .eulerangles import euler2mat from .volumeutils import Recoder, array_from_file, BinOpener @@ -900,6 +901,7 @@ class PARRECImage(SpatialImage): ImageArrayProxy = PARRECArrayProxy @classmethod + @kw_only_meth(1) def from_file_map(klass, file_map, permit_truncated=False, scaling='dv'): pt = permit_truncated with file_map['header'].get_prepare_fileobj('rt') as hdr_fobj: @@ -911,13 +913,14 @@ def from_file_map(klass, file_map, permit_truncated=False, scaling='dv'): file_map=file_map) @classmethod + @kw_only_meth(1) def from_filename(klass, filename, permit_truncated=False, scaling='dv'): file_map = klass.filespec_to_file_map(filename) - return klass.from_file_map(file_map, permit_truncated, scaling) + return klass.from_file_map(file_map, + permit_truncated=permit_truncated, + scaling=scaling) - @classmethod - def load(klass, filename, permit_truncated=False, scaling='dv'): - return klass.from_filename(filename, permit_truncated, scaling) + load = from_filename load = PARRECImage.load diff --git a/nibabel/tests/test_parrec.py b/nibabel/tests/test_parrec.py index c1a685e169..8fb7bbfdee 100644 --- a/nibabel/tests/test_parrec.py +++ b/nibabel/tests/test_parrec.py @@ -434,17 +434,25 @@ def test_image_creation(): (PARRECImage.from_file_map, good_map, trunc_map)): img = func(good_param) assert_array_equal(img.dataobj, arr_prox_dv) - img = func(good_param, False) + # permit_truncated is keyword only + assert_raises(TypeError, func, good_param, False) + img = func(good_param, permit_truncated=False) assert_array_equal(img.dataobj, arr_prox_dv) - img = func(good_param, False, 'dv') + # scaling is keyword only + assert_raises(TypeError, func, good_param, False, 'dv') + img = func(good_param, permit_truncated=False, scaling='dv') assert_array_equal(img.dataobj, arr_prox_dv) - img = func(good_param, False, 'fp') + img = func(good_param, scaling='dv') + assert_array_equal(img.dataobj, arr_prox_dv) + # Can use fp scaling + img = func(good_param, scaling='fp') assert_array_equal(img.dataobj, arr_prox_fp) + # Truncated raises error without permit_truncated=True assert_raises(PARRECError, func, trunc_param) - assert_raises(PARRECError, func, trunc_param, False) - img = func(trunc_param, True) + assert_raises(PARRECError, func, trunc_param, permit_truncated=False) + img = func(trunc_param, permit_truncated=True) assert_array_equal(img.dataobj, arr_prox_dv) - img = func(trunc_param, True, 'dv') + img = func(trunc_param, permit_truncated=True, scaling='dv') assert_array_equal(img.dataobj, arr_prox_dv) - img = func(trunc_param, True, 'fp') + img = func(trunc_param, permit_truncated=True, scaling='fp') assert_array_equal(img.dataobj, arr_prox_fp)