[Scipy-svn] r3046 - in trunk/Lib/linalg: . tests

scipy-svn@scip... scipy-svn@scip...
Sat May 26 22:00:16 CDT 2007


Author: wnbell
Date: 2007-05-26 22:00:14 -0500 (Sat, 26 May 2007)
New Revision: 3046

Modified:
   trunk/Lib/linalg/decomp.py
   trunk/Lib/linalg/tests/test_decomp.py
Log:
updated _datanotshared() to use __array_interface__ 
instead of __array_data__

added unittest to original problem

resolves ticket #361




Modified: trunk/Lib/linalg/decomp.py
===================================================================
--- trunk/Lib/linalg/decomp.py	2007-05-27 02:04:41 UTC (rev 3045)
+++ trunk/Lib/linalg/decomp.py	2007-05-27 03:00:14 UTC (rev 3046)
@@ -43,13 +43,19 @@
         count += 1
     return v
 
+
+
 def _datanotshared(a1,a):
     if a1 is a:
-        return 0
-    if hasattr(a,"__array_data__"):
-        return a1.__array_data__[0] != a.__array_data__[0]
-    return 1
+        return False
+    else:
+        #try comparing data pointers
+        try:
+            return a1.__array_interface__['data'][0] != a.__array_interface__['data'][0]
+        except:
+            return True
 
+
 def _geneig(a1,b,left,right,overwrite_a,overwrite_b):
     b1 = asarray(b)
     overwrite_b = overwrite_b or _datanotshared(b1,b)

Modified: trunk/Lib/linalg/tests/test_decomp.py
===================================================================
--- trunk/Lib/linalg/tests/test_decomp.py	2007-05-27 02:04:41 UTC (rev 3045)
+++ trunk/Lib/linalg/tests/test_decomp.py	2007-05-27 03:00:14 UTC (rev 3046)
@@ -736,5 +736,25 @@
             h1 = dot(transp(conj(q)),dot(a,q))
             assert_array_almost_equal(h1,h)
 
+
+
+class test_datanotshared(NumpyTestCase):
+    
+    def check_datanotshared(self):
+        from linalg.decomp import _datanotshared
+
+        M = matrix([[0,1],[2,3]])
+        A = asarray(M)
+        L = M.tolist()
+        M2 = M.copy()
+
+        assert_equal(_datanotshared(M,M),False)
+        assert_equal(_datanotshared(M,A),False)
+        
+        assert_equal(_datanotshared(M,L),True)
+        assert_equal(_datanotshared(M,M2),True)
+        assert_equal(_datanotshared(A,M2),True)
+        
+
 if __name__ == "__main__":
     NumpyTest().run()



More information about the Scipy-svn mailing list