# [Scipy-svn] r6988 - trunk/scipy/sparse/linalg/eigen/arpack

scipy-svn@scip... scipy-svn@scip...
Sat Dec 4 14:25:14 CST 2010

```Author: ptvirtan
Date: 2010-12-04 14:25:14 -0600 (Sat, 04 Dec 2010)
New Revision: 6988

Modified:
trunk/scipy/sparse/linalg/eigen/arpack/arpack.py
Log:
BUG: sparse/arpack: fix bug in return value extraction from dneupd, when got less eigenvalues than desired

Modified: trunk/scipy/sparse/linalg/eigen/arpack/arpack.py
===================================================================
--- trunk/scipy/sparse/linalg/eigen/arpack/arpack.py	2010-12-04 20:25:03 UTC (rev 6987)
+++ trunk/scipy/sparse/linalg/eigen/arpack/arpack.py	2010-12-04 20:25:14 UTC (rev 6988)
@@ -390,12 +390,11 @@
# Arrange the eigenvectors: complex eigenvectors are stored as
# real,imaginary in consecutive columns
z = zr.astype(self.tp.upper())
-            eps = np.finfo(self.tp).eps
i = 0
while i<=k:
# check if complex
-                if abs(d[i].imag) > eps:
-                    # assume this is a complex conjugate pair with eigenvalues
+                if abs(d[i].imag) != 0:
+                    # this is a complex conjugate pair with eigenvalues
# in consecutive columns
z[:,i] = zr[:,i] + 1.0j * zr[:,i+1]
z[:,i+1] = z[:,i].conjugate()
@@ -405,10 +404,12 @@
# Now we have k+1 possible eigenvalues and eigenvectors
# Return the ones specified by the keyword "which"
nreturned = self.iparam[4] # number of good eigenvalues returned
-            if nreturned == k:    # we got exactly how many eigenvalues we wanted
-                d = d[:k]
-                z = z[:,:k]
-            else:   # we got one extra eigenvalue (likely a cc pair, but which?)
+            if nreturned <= k:
+                # we got less or equal as many eigenvalues we wanted
+                d = d[:nreturned]
+                z = z[:,:nreturned]
+            else:
+                # we got one extra eigenvalue (likely a cc pair, but which?)
# cut at approx precision for sorting
rd = np.round(d, decimals = _ndigits[self.tp])
if self.which in ['LR','SR']:

```