[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