diff options
author | pierregm <pierregm@localhost> | 2008-12-01 09:45:51 +0000 |
---|---|---|
committer | pierregm <pierregm@localhost> | 2008-12-01 09:45:51 +0000 |
commit | 7933d532fea5a0e75e6e415e6ab9d6bc7c585089 (patch) | |
tree | 10b1de17bfbb8b92c4112ce659b352e4c922a008 /numpy/ma/core.py | |
parent | 0a5268f521e4d29f755f91c83100b574966d3aef (diff) | |
download | numpy-7933d532fea5a0e75e6e415e6ab9d6bc7c585089.tar.gz |
Fixed make_mask_descr for nested dtypes
Diffstat (limited to 'numpy/ma/core.py')
-rw-r--r-- | numpy/ma/core.py | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/numpy/ma/core.py b/numpy/ma/core.py index d5b80c46f..590421594 100644 --- a/numpy/ma/core.py +++ b/numpy/ma/core.py @@ -798,22 +798,27 @@ def make_mask_descr(ndtype): Each field is set to a bool. """ + def _make_descr(datatype): + "Private function allowing recursion." + # Do we have some name fields ? + names = datatype.names + if names: + descr = [] + for name in names: + (ndtype, _) = datatype.fields[name] + descr.append((name, _make_descr(ndtype))) + return descr + # Is this some kind of composite a la (np.float,2) + elif datatype.subdtype: + mdescr = list(datatype.subdtype) + mdescr[0] = np.dtype(bool) + return tuple(mdescr) + else: + return np.bool # Make sure we do have a dtype if not isinstance(ndtype, np.dtype): ndtype = np.dtype(ndtype) - # Do we have some name fields ? - if ndtype.names: - mdescr = [list(_) for _ in ndtype.descr] - for m in mdescr: - m[1] = '|b1' - return np.dtype([tuple(_) for _ in mdescr]) - # Is this some kind of composite a la (np.float,2) - elif ndtype.subdtype: - mdescr = list(ndtype.subdtype) - mdescr[0] = np.dtype(bool) - return np.dtype(tuple(mdescr)) - else: - return MaskType + return np.dtype(_make_descr(ndtype)) def get_mask(a): """Return the mask of a, if any, or nomask. |