[Scipy-svn] r7070 - branches/0.9.x/scipy/linalg

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Jan 20 07:18:52 EST 2011


Author: rgommers
Date: 2011-01-20 06:18:52 -0600 (Thu, 20 Jan 2011)
New Revision: 7070

Modified:
   branches/0.9.x/scipy/linalg/decomp_qr.py
   branches/0.9.x/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.

(backport of r7069)

Modified: branches/0.9.x/scipy/linalg/decomp_qr.py
===================================================================
--- branches/0.9.x/scipy/linalg/decomp_qr.py	2011-01-20 12:15:33 UTC (rev 7069)
+++ branches/0.9.x/scipy/linalg/decomp_qr.py	2011-01-20 12:18:52 UTC (rev 7070)
@@ -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:
@@ -109,12 +109,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
@@ -122,7 +122,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:
@@ -224,7 +224,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: branches/0.9.x/scipy/linalg/decomp_schur.py
===================================================================
--- branches/0.9.x/scipy/linalg/decomp_schur.py	2011-01-20 12:15:33 UTC (rev 7069)
+++ branches/0.9.x/scipy/linalg/decomp_schur.py	2011-01-20 12:18:52 UTC (rev 7070)
@@ -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