From 1bd72782abe107eda7bddd4db8fb9a8d7736c105 Mon Sep 17 00:00:00 2001 From: weathergod Date: Sun, 21 Nov 2010 18:37:51 -0700 Subject: [PATCH 1/2] BUG: Fix logic in handling of dtype in append_fields. --- numpy/lib/recfunctions.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/numpy/lib/recfunctions.py b/numpy/lib/recfunctions.py index 3c0094aaedb2..da0c3e8acd67 100644 --- a/numpy/lib/recfunctions.py +++ b/numpy/lib/recfunctions.py @@ -614,8 +614,10 @@ def append_fields(base, names, data=None, dtypes=None, if dtypes is None: data = [np.array(a, copy=False, subok=True) for a in data] data = [a.view([(name, a.dtype)]) for (name, a) in zip(names, data)] - elif not hasattr(dtypes, '__iter__'): - dtypes = [dtypes, ] + else : + if not hasattr(dtypes, '__iter__'): + dtypes = [dtypes, ] + if len(data) != len(dtypes): if len(dtypes) == 1: dtypes = dtypes * len(data) From 53b10c95e2240b4ec522a9fe712fe63c867e496c Mon Sep 17 00:00:00 2001 From: Charles Harris Date: Tue, 23 Nov 2010 22:43:12 -0700 Subject: [PATCH 2/2] BUG: data shouldn't be an optional argument. --- numpy/lib/recfunctions.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/numpy/lib/recfunctions.py b/numpy/lib/recfunctions.py index da0c3e8acd67..f722a89d1206 100644 --- a/numpy/lib/recfunctions.py +++ b/numpy/lib/recfunctions.py @@ -572,7 +572,7 @@ def _recursive_rename_fields(ndtype, namemapper): return base.view(newdtype) -def append_fields(base, names, data=None, dtypes=None, +def append_fields(base, names, data, dtypes=None, fill_value= -1, usemask=True, asrecarray=False): """ Add new fields to an existing array. @@ -591,7 +591,7 @@ def append_fields(base, names, data=None, dtypes=None, of the new fields. data : array or sequence of arrays Array or sequence of arrays storing the fields to add to the base. - dtypes : sequence of datatypes + dtypes : sequence of datatypes, optional Datatype or sequence of datatypes. If None, the datatypes are estimated from the `data`. fill_value : {float}, optional @@ -605,8 +605,8 @@ def append_fields(base, names, data=None, dtypes=None, # Check the names if isinstance(names, (tuple, list)): if len(names) != len(data): - err_msg = "The number of arrays does not match the number of names" - raise ValueError(err_msg) + msg = "The number of arrays does not match the number of names" + raise ValueError(msg) elif isinstance(names, basestring): names = [names, ] data = [data, ] @@ -615,15 +615,13 @@ def append_fields(base, names, data=None, dtypes=None, data = [np.array(a, copy=False, subok=True) for a in data] data = [a.view([(name, a.dtype)]) for (name, a) in zip(names, data)] else : - if not hasattr(dtypes, '__iter__'): + if not isinstance(dtypes, (tuple, list)): dtypes = [dtypes, ] - if len(data) != len(dtypes): if len(dtypes) == 1: dtypes = dtypes * len(data) else: - msg = "The dtypes argument must be None, "\ - "a single dtype or a list." + msg = "The dtypes argument must be None, a dtype, or a list." raise ValueError(msg) data = [np.array(a, copy=False, subok=True, dtype=d).view([(n, d)]) for (a, n, d) in zip(data, names, dtypes)]