def test_set(self): "Tests setting fields/attributes." [d, m, mrec, dlist, dates, ts, mts] = self.data mts.f0._data[:] = 5 assert_equal(mts['f0']._data, [5,5,5,5,5]) mts.f0 = 1 assert_equal(mts['f0']._data, [1]*5) assert_equal(getmaskarray(mts['f0']), [0]*5) mts.f1 = MA.masked assert_equal(mts.f1.mask, [1]*5) assert_equal(getmaskarray(mts['f1']), [1]*5) mts._mask = MA.masked assert_equal(getmaskarray(mts['f1']), [1]*5) assert_equal(mts['f0']._mask, mts['f1']._mask) mts._mask = MA.nomask assert_equal(getmaskarray(mts['f1']), [0]*5) assert_equal(mts['f0']._mask, mts['f1']._mask)
def __setattr__(self, attr, val): newattr = attr not in self.__dict__ try: # Is attr a generic attribute ? ret = object.__setattr__(self, attr, val) except: # Not a generic attribute: exit if it's not a valid field fielddict = self.dtype.names or {} if attr not in fielddict: exctype, value = sys.exc_info()[:2] raise exctype, value else: if attr not in list(self.dtype.names) + ["_dates", "_mask"]: return ret if newattr: # We just added this one try: # or this setattr worked on an internal # attribute. object.__delattr__(self, attr) except: return ret # Case #1.: Basic field ............ base_fmask = self._fieldmask _names = self.dtype.names if attr in _names: fval = filled(val) mval = getmaskarray(val) if self._hardmask: mval = mask_or(mval, base_fmask.__getattr__(attr)) self._data.__setattr__(attr, fval) base_fmask.__setattr__(attr, mval) return elif attr == "_mask": if self._hardmask: val = make_mask(val) if val is not nomask: # mval = getmaskarray(val) for k in _names: m = mask_or(val, base_fmask.__getattr__(k)) base_fmask.__setattr__(k, m) else: mval = getmaskarray(val) for k in _names: base_fmask.__setattr__(k, mval) return