[Scipy-svn] r7069 - trunk/scipy/linalg

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Jan 20 07:15:33 EST 2011


Author: rgommers
Date: 2011-01-20 06:15:33 -0600 (Thu, 20 Jan 2011)
New Revision: 7069

Modified:
   trunk/scipy/linalg/decomp_qr.py
   trunk/scipy/linalg/decomp_schur.py
Log:
TST: Avoid ComplexWarning in QR and Schur decomposition.

lwork returned from a workspace query has the same dtype as the
principal matrix, but when we call the computational routine it
expects an integer value.

This also fixes a potential bug in schur(), where lwork keyword was
ignored.

Thanks to Fabian Pedregosa.

Modified: trunk/scipy/linalg/decomp_qr.py
===================================================================
--- trunk/scipy/linalg/decomp_qr.py	2011-01-20 11:29:54 UTC (rev 7068)
+++ trunk/scipy/linalg/decomp_qr.py	2011-01-20 12:15:33 UTC (rev 7069)
@@ -86,7 +86,7 @@
     if lwork is None or lwork == -1:
         # get optimal work array
         qr, tau, work, info = geqrf(a1, lwork=-1, overwrite_a=1)
-        lwork = work[0]
+        lwork = work[0].real.astype(numpy.int)
 
     qr, tau, work, info = geqrf(a1, lwork=lwork, overwrite_a=overwrite_a)
     if info < 0:
@@ -108,12 +108,12 @@
     if M < N:
         # get optimal work array
         Q, work, info = gor_un_gqr(qr[:,0:M], tau, lwork=-1, overwrite_a=1)
-        lwork = work[0]
+        lwork = work[0].real.astype(numpy.int)
         Q, work, info = gor_un_gqr(qr[:,0:M], tau, lwork=lwork, overwrite_a=1)
     elif mode == 'economic':
         # get optimal work array
         Q, work, info = gor_un_gqr(qr, tau, lwork=-1, overwrite_a=1)
-        lwork = work[0]
+        lwork = work[0].real.astype(numpy.int)
         Q, work, info = gor_un_gqr(qr, tau, lwork=lwork, overwrite_a=1)
     else:
         t = qr.dtype.char
@@ -121,7 +121,7 @@
         qqr[:,0:N] = qr
         # get optimal work array
         Q, work, info = gor_un_gqr(qqr, tau, lwork=-1, overwrite_a=1)
-        lwork = work[0]
+        lwork = work[0].real.astype(numpy.int)
         Q, work, info = gor_un_gqr(qqr, tau, lwork=lwork, overwrite_a=1)
 
     if info < 0:
@@ -223,7 +223,7 @@
     if lwork is None or lwork == -1:
         # get optimal work array
         rq, tau, work, info = gerqf(a1, lwork=-1, overwrite_a=1)
-        lwork = work[0]
+        lwork = work[0].real.astype(numpy.int)
     rq, tau, work, info = gerqf(a1, lwork=lwork, overwrite_a=overwrite_a)
     if info < 0:
         raise ValueError('illegal value in %d-th argument of internal geqrf'

Modified: trunk/scipy/linalg/decomp_schur.py
===================================================================
--- trunk/scipy/linalg/decomp_schur.py	2011-01-20 11:29:54 UTC (rev 7068)
+++ trunk/scipy/linalg/decomp_schur.py	2011-01-20 12:15:33 UTC (rev 7069)
@@ -68,8 +68,8 @@
     if lwork is None or lwork == -1:
         # get optimal work array
         result = gees(lambda x: None, a, lwork=-1)
-        lwork = result[-2][0]
-    result = gees(lambda x: None, a, lwork=result[-2][0], overwrite_a=overwrite_a)
+        lwork = result[-2][0].real.astype(numpy.int)
+    result = gees(lambda x: None, a, lwork=lwork, overwrite_a=overwrite_a)
     info = result[-1]
     if info < 0:
         raise ValueError('illegal value in %d-th argument of internal gees'




More information about the Scipy-svn mailing list