[Scipy-svn] r2892 - in trunk/Lib/sandbox/maskedarray: . tests

scipy-svn@scip... scipy-svn@scip...
Thu Mar 29 14:08:17 CDT 2007


Author: pierregm
Date: 2007-03-29 14:08:14 -0500 (Thu, 29 Mar 2007)
New Revision: 2892

Modified:
   trunk/Lib/sandbox/maskedarray/core.py
   trunk/Lib/sandbox/maskedarray/tests/test_core.py
Log:
core : prevents collapsing an array to masked when all the data are masked

Modified: trunk/Lib/sandbox/maskedarray/core.py
===================================================================
--- trunk/Lib/sandbox/maskedarray/core.py	2007-03-29 13:05:42 UTC (rev 2891)
+++ trunk/Lib/sandbox/maskedarray/core.py	2007-03-29 19:08:14 UTC (rev 2892)
@@ -1067,6 +1067,7 @@
         """Special hook for ufuncs.
 Wraps the numpy array and sets the mask according to context.
         """
+        #TODO : Should we check for type result 
         result = obj.view(type(self))
         #..........
         if context is not None:
@@ -1085,11 +1086,15 @@
                         m = d
                 else:
                     m |= d
-            result._mask = m
-        if (not m.ndim) and m:
-            return masked
+            if not m.ndim and m:
+                if m:
+                    if result.shape == ():
+                        return masked
+                    result._mask = numeric.ones(result.shape, bool_)
+            else:
+                result._mask = m
         #....
-        result._mask = m
+#        result._mask = m
         result._fill_value = self._fill_value
         result._hardmask = self._hardmask
         result._smallmask = self._smallmask
@@ -2626,33 +2631,42 @@
     from maskedarray.testutils import assert_equal, assert_array_equal
     marray = masked_array
     #
-    if 0:
-        a = arange(10)
-        a[::3] = masked
-        a.fill_value = 999
-        a_pickled = cPickle.loads(a.dumps())
-        assert_equal(a_pickled._mask, a._mask)
-        assert_equal(a_pickled._data, a._data)
-        assert_equal(a_pickled.fill_value, 999)
-        #
-        a = array(numpy.matrix(range(10)), mask=[1,0,1,0,0]*2)
-        a_pickled = cPickle.loads(a.dumps())
-        assert_equal(a_pickled._mask, a._mask)
-        assert_equal(a_pickled, a)
-        assert(isinstance(a_pickled._data,numpy.matrix))
-    #
-    
-    #
     if 1:
-        x = marray(numpy.linspace(-1.,1.,31),)
-        x[:10] = x[-10:] = masked
-        z = marray(numpy.empty((len(x),3), dtype=numpy.float_))
-        z[:,0] = x[:]
-        for i in range(1,3):
-            idx = numpy.arange(len(x))
-            numpy.random.shuffle(idx)
-            z[:,i] = x[idx]
-        #
-        z.sort(0)
-        
+        x = masked_array([1,2])
+        y = x * masked
+        print y
+        assert_equal(y.shape, x.shape)
+        assert_equal(y._mask, [True, True])
+        y = x + masked
+        assert_equal(y.shape, x.shape)
+        assert_equal(y._mask, [True, True])
+#    if 0:
+#        a = arange(10)
+#        a[::3] = masked
+#        a.fill_value = 999
+#        a_pickled = cPickle.loads(a.dumps())
+#        assert_equal(a_pickled._mask, a._mask)
+#        assert_equal(a_pickled._data, a._data)
+#        assert_equal(a_pickled.fill_value, 999)
+#        #
+#        a = array(numpy.matrix(range(10)), mask=[1,0,1,0,0]*2)
+#        a_pickled = cPickle.loads(a.dumps())
+#        assert_equal(a_pickled._mask, a._mask)
+#        assert_equal(a_pickled, a)
+#        assert(isinstance(a_pickled._data,numpy.matrix))
+#    #
+#    
+#    #
+#    if 1:
+#        x = marray(numpy.linspace(-1.,1.,31),)
+#        x[:10] = x[-10:] = masked
+#        z = marray(numpy.empty((len(x),3), dtype=numpy.float_))
+#        z[:,0] = x[:]
+#        for i in range(1,3):
+#            idx = numpy.arange(len(x))
+#            numpy.random.shuffle(idx)
+#            z[:,i] = x[idx]
+#        #
+#        z.sort(0)
+#        
     

Modified: trunk/Lib/sandbox/maskedarray/tests/test_core.py
===================================================================
--- trunk/Lib/sandbox/maskedarray/tests/test_core.py	2007-03-29 13:05:42 UTC (rev 2891)
+++ trunk/Lib/sandbox/maskedarray/tests/test_core.py	2007-03-29 19:08:14 UTC (rev 2892)
@@ -612,6 +612,17 @@
         #self.failUnlessRaises(Exception, lambda x,y: x+y, masked, xx)
         #self.failUnlessRaises(Exception, lambda x,y: x+y, xx, masked)
     #........................
+    def check_usingmasked(self):
+        "Checks that there's no collapsing to masked"        
+        x = masked_array([1,2])
+        y = x * masked
+        assert_equal(y.shape, x.shape)
+        assert_equal(y._mask, [True, True])
+        y = x + masked
+        assert_equal(y.shape, x.shape)
+        assert_equal(y._mask, [True, True])
+        
+    #........................
     def check_topython(self):
         "Tests some communication issues with Python."
         assert_equal(1, int(array(1)))



More information about the Scipy-svn mailing list