[Numpy-svn] r5124 - in trunk/numpy/ma: . tests

numpy-svn at scipy.org numpy-svn at scipy.org
Thu May 1 19:56:10 EDT 2008


Author: pierregm
Date: 2008-05-01 18:56:07 -0500 (Thu, 01 May 2008)
New Revision: 5124

Modified:
   trunk/numpy/ma/core.py
   trunk/numpy/ma/mrecords.py
   trunk/numpy/ma/tests/test_subclassing.py
Log:
core : clean up update_from

Modified: trunk/numpy/ma/core.py
===================================================================
--- trunk/numpy/ma/core.py	2008-05-01 21:34:11 UTC (rev 5123)
+++ trunk/numpy/ma/core.py	2008-05-01 23:56:07 UTC (rev 5124)
@@ -1170,7 +1170,7 @@
         # Process data............
         _data = narray(data, dtype=dtype, copy=copy, subok=True, ndmin=ndmin)
         _baseclass = getattr(data, '_baseclass', type(_data))
-        _basedict = getattr(data, '_basedict', getattr(data, '__dict__', None))
+        _basedict = getattr(data, '_basedict', getattr(data, '__dict__', {}))
         if not isinstance(data, MaskedArray) or not subok:
             _data = _data.view(cls)
         else:
@@ -1225,26 +1225,27 @@
     #
     def _update_from(self, obj):
         """Copies some attributes of obj to self.
-        """
-        self._hardmask = getattr(obj, '_hardmask', False)
-        self._sharedmask = getattr(obj, '_sharedmask', False)
+        """  
         if obj is not None:
-            self._baseclass = getattr(obj, '_baseclass', type(obj))
+            _baseclass = type(obj)
         else:
-            self._baseclass = ndarray
-        self._fill_value = getattr(obj, '_fill_value', None)
+            _baseclass = ndarray
+        _basedict = getattr(obj,'_basedict',getattr(obj,'__dict__',{}))
+        _dict = dict(_fill_value=getattr(obj, '_fill_value', None),
+                     _hardmask=getattr(obj, '_hardmask', False),
+                     _sharedmask=getattr(obj, '_sharedmask', False),
+                     _baseclass=getattr(obj,'_baseclass',_baseclass),
+                     _basedict=_basedict,)
+        self.__dict__.update(_dict)
+        self.__dict__.update(_basedict)        
         return
     #........................
     def __array_finalize__(self,obj):
         """Finalizes the masked array.
         """
         # Get main attributes .........
+        self._update_from(obj)
         self._mask = getattr(obj, '_mask', nomask)
-        self._update_from(obj)
-        # Update special attributes ...
-        self._basedict = getattr(obj, '_basedict', getattr(obj, '__dict__', None))
-        if self._basedict is not None:
-            self.__dict__.update(self._basedict)
         # Finalize the mask ...........
         if self._mask is not nomask:
             self._mask.shape = self.shape
@@ -1305,6 +1306,7 @@
 #        if getmask(indx) is not nomask:
 #            msg = "Masked arrays must be filled before they can be used as indices!"
 #            raise IndexError, msg
+        dtest = ndarray.__getitem__(self, indx)
         dout = ndarray.__getitem__(self.view(ndarray), indx)
         m = self._mask
         if not getattr(dout,'ndim', False):

Modified: trunk/numpy/ma/mrecords.py
===================================================================
--- trunk/numpy/ma/mrecords.py	2008-05-01 21:34:11 UTC (rev 5123)
+++ trunk/numpy/ma/mrecords.py	2008-05-01 23:56:07 UTC (rev 5124)
@@ -180,9 +180,8 @@
         self.__dict__.update(attrdict)
         # Finalize as a regular maskedarray .....
         # Update special attributes ...
-        self._basedict = getattr(obj, '_basedict', getattr(obj,'__dict__',None))
-        if self._basedict is not None:
-            self.__dict__.update(self._basedict)
+        self._basedict = getattr(obj, '_basedict', getattr(obj,'__dict__',{}))
+        self.__dict__.update(self._basedict)
         return
     #......................................................
     def _getdata(self):

Modified: trunk/numpy/ma/tests/test_subclassing.py
===================================================================
--- trunk/numpy/ma/tests/test_subclassing.py	2008-05-01 21:34:11 UTC (rev 5123)
+++ trunk/numpy/ma/tests/test_subclassing.py	2008-05-01 23:56:07 UTC (rev 5124)
@@ -39,7 +39,7 @@
 subarray = SubArray
 
 class MSubArray(SubArray,MaskedArray):
-    def __new__(cls, data, info=None, mask=nomask):
+    def __new__(cls, data, info={}, mask=nomask):
         subarr = SubArray(data, info)
         _data = MaskedArray.__new__(cls, data=subarr, mask=mask)
         _data.info = subarr.info




More information about the Numpy-svn mailing list