summaryrefslogtreecommitdiff
path: root/numpy/ma/core.py
diff options
context:
space:
mode:
authorpierregm <pierregm@localhost>2008-12-01 09:45:51 +0000
committerpierregm <pierregm@localhost>2008-12-01 09:45:51 +0000
commit7933d532fea5a0e75e6e415e6ab9d6bc7c585089 (patch)
tree10b1de17bfbb8b92c4112ce659b352e4c922a008 /numpy/ma/core.py
parent0a5268f521e4d29f755f91c83100b574966d3aef (diff)
downloadnumpy-7933d532fea5a0e75e6e415e6ab9d6bc7c585089.tar.gz
Fixed make_mask_descr for nested dtypes
Diffstat (limited to 'numpy/ma/core.py')
-rw-r--r--numpy/ma/core.py31
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.