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

scipy-svn at scipy.org scipy-svn at scipy.org
Fri Apr 9 03:45:32 EDT 2010


Author: cdavid
Date: 2010-04-09 02:45:32 -0500 (Fri, 09 Apr 2010)
New Revision: 6317

Modified:
   trunk/scipy/linalg/decomp.py
Log:
ENH: a bit more information upon failure in LinAlgError's from lapack

Thanks to Yaroslav Halchenko  for the fix

Modified: trunk/scipy/linalg/decomp.py
===================================================================
--- trunk/scipy/linalg/decomp.py	2010-04-09 07:45:21 UTC (rev 6316)
+++ trunk/scipy/linalg/decomp.py	2010-04-09 07:45:32 UTC (rev 6317)
@@ -82,7 +82,8 @@
         w = (alphar+_I*alphai)/beta
     if info<0: raise ValueError(
        'illegal value in %d-th argument of internal ggev' % (-info))
-    if info>0: raise LinAlgError,"generalized eig algorithm did not converge"
+    if info>0: raise LinAlgError(
+       "generalized eig algorithm did not converge (info=%d)" % (info))
 
     only_real = numpy.logical_and.reduce(numpy.equal(w.imag,0.0))
     if not (ggev.prefix in 'cz' or only_real):
@@ -190,7 +191,9 @@
             w = wr+_I*wi
     if info<0: raise ValueError(
        'illegal value in %d-th argument of internal geev' % (-info))
-    if info>0: raise LinAlgError,"eig algorithm did not converge"
+    if info>0: raise LinAlgError(
+       "eig algorithm did not converge (only eigenvalues "\
+       "with order >=%d have converged)" % (info))
 
     only_real = numpy.logical_and.reduce(numpy.equal(w.imag,0.0))
     if not (geev.prefix in 'cz' or only_real):
@@ -1023,7 +1026,9 @@
     overwrite_a = overwrite_a or _datanotshared(a1,a)
     potrf, = get_lapack_funcs(('potrf',),(a1,))
     c,info = potrf(a1,lower=lower,overwrite_a=overwrite_a,clean=1)
-    if info>0: raise LinAlgError, "matrix not positive definite"
+    if info>0: raise LinAlgError(
+       "matrix not positive definite (leading minor of order %d"\
+       "is not positive definite)" % (info-1))
     if info<0: raise ValueError(
        'illegal value in %d-th argument of internal potrf' % (-info))
     return c
@@ -1070,7 +1075,9 @@
     overwrite_a = overwrite_a or (_datanotshared(a1,a))
     potrf, = get_lapack_funcs(('potrf',),(a1,))
     c,info = potrf(a1,lower=lower,overwrite_a=overwrite_a,clean=0)
-    if info>0: raise LinAlgError, "matrix not positive definite"
+    if info>0: raise LinAlgError(
+       "matrix not positive definite (leading minor of order %d"\
+       "is not positive definite)"%(info-1))
     if info<0: raise ValueError(
        'illegal value in %d-th argument of internal potrf' % (-info))
     return c, lower




More information about the Scipy-svn mailing list