[Scipy-svn] r2343 - in trunk/Lib/io: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Nov 30 13:14:36 CST 2006


Author: matthew.brett at gmail.com
Date: 2006-11-30 13:14:12 -0600 (Thu, 30 Nov 2006)
New Revision: 2343

Modified:
   trunk/Lib/io/recaster.py
   trunk/Lib/io/tests/test_recaster.py
Log:
And more tests on recaster

Modified: trunk/Lib/io/recaster.py
===================================================================
--- trunk/Lib/io/recaster.py	2006-11-30 18:49:45 UTC (rev 2342)
+++ trunk/Lib/io/recaster.py	2006-11-30 19:14:12 UTC (rev 2343)
@@ -265,27 +265,32 @@
             raise TypeError, 'Do not recognize array kind %s' % dtk
             
     def downcast_complex(self, arr):
+        ''' Downcasts complex array to smaller type if possible '''
         # can we downcast to float?
         dt = arr.dtype
         dti = ceil(dt.itemsize / 2)
         sctypes = self.sized_sctypes['f']
         flts = [t[0] for i, t in enumerate(sctypes) if t[1] <= dti]
-        test_arr = arr.astype(flts[0])
-        rtol, atol = self.tols_from_sctype(dt.type)
-        if allclose(arr, test_arr, rtol, atol):
-            return self.downcast_float(test_arr)
-        # try downcasting to another complex type
-        return self.smallest_same_kind(arr)
+        if flts: # There are smaller floats to try
+            test_arr = arr.astype(flts[0])
+            rtol, atol = self.tols_from_sctype(dt.type)
+            if allclose(arr, test_arr, rtol, atol):
+                arr = test_arr
+        # try downcasting to int or another complex type
+        return self.downcast_to_int_or_same(arr)
     
-    def downcast_float(self, arr):
+    def downcast_to_int_or_same(self, arr):
+        ''' Downcast to integer or smaller of same kind '''
         # Try integer
         test_arr = self.downcast_integer(arr)
         rtol, atol = self.tols_from_sctype(arr.dtype.type)
         if allclose(arr, test_arr, rtol, atol):
             return test_arr
-        # Otherwise descend the float types
+        # Otherwise descend the types of same kind
         return self.smallest_same_kind(arr)
 
+    downcast_float = downcast_to_int_or_same
+
     def downcast_integer(self, arr):
         ''' Downcasts arr to integer
 

Modified: trunk/Lib/io/tests/test_recaster.py
===================================================================
--- trunk/Lib/io/tests/test_recaster.py	2006-11-30 18:49:45 UTC (rev 2342)
+++ trunk/Lib/io/tests/test_recaster.py	2006-11-30 19:14:12 UTC (rev 2343)
@@ -92,8 +92,11 @@
             assert rt == T, 'Expected %s, got %s type' % (T, rt)
         
     def test_downcasts(self):
-        value = 1
+        value = 100
         R = self.recaster
-        A = N.array(value, N.complex128)
-        B = R.downcast_complex(A)
-        assert B.dtype.type == N.int32
+        for T in (N.complex128, N.complex64,
+                  N.float64, N.uint64):
+            B = R.downcast(N.array(value, T))
+            assert B is not None, 'Got None for %s' % T
+            assert B.dtype.type == N.int32
+        



More information about the Scipy-svn mailing list