[Scipy-svn] r6995 - in trunk/scipy/sparse/linalg/eigen/arpack: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Sat Dec 4 16:04:44 EST 2010


Author: ptvirtan
Date: 2010-12-04 15:04:44 -0600 (Sat, 04 Dec 2010)
New Revision: 6995

Modified:
   trunk/scipy/sparse/linalg/eigen/arpack/arpack.py
   trunk/scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py
Log:
ENH: sparse/arpack: infer LinearOperator dtype if it is missing in eigs/eigsh (#1119)

Modified: trunk/scipy/sparse/linalg/eigen/arpack/arpack.py
===================================================================
--- trunk/scipy/sparse/linalg/eigen/arpack/arpack.py	2010-12-04 20:26:15 UTC (rev 6994)
+++ trunk/scipy/sparse/linalg/eigen/arpack/arpack.py	2010-12-04 21:04:44 UTC (rev 6995)
@@ -451,6 +451,13 @@
         else:
             return d
 
+def _aslinearoperator_with_dtype(m):
+    m = aslinearoperator(m)
+    if not hasattr(m, 'dtype'):
+        x = np.zeros(m.shape[1])
+        m.dtype = (m*x).dtype
+    return m
+
 def eigs(A, k=6, M=None, sigma=None, which='LM', v0=None,
          ncv=None, maxiter=None, tol=0,
          return_eigenvectors=True):
@@ -548,7 +555,7 @@
        Solution of Large Scale Eigenvalue Problems by Implicitly Restarted
        Arnoldi Methods. SIAM, Philadelphia, PA, 1998.
     """
-    A = aslinearoperator(A)
+    A = _aslinearoperator_with_dtype(A)
     if A.shape[0] != A.shape[1]:
         raise ValueError('expected square matrix (shape=%s)' % (A.shape,))
     n = A.shape[0]
@@ -657,7 +664,7 @@
        Solution of Large Scale Eigenvalue Problems by Implicitly Restarted
        Arnoldi Methods. SIAM, Philadelphia, PA, 1998.
     """
-    A = aslinearoperator(A)
+    A = _aslinearoperator_with_dtype(A)
     if A.shape[0] != A.shape[1]:
         raise ValueError('expected square matrix (shape=%s)' % (A.shape,))
     n = A.shape[0]

Modified: trunk/scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py
===================================================================
--- trunk/scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py	2010-12-04 20:26:15 UTC (rev 6994)
+++ trunk/scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py	2010-12-04 21:04:44 UTC (rev 6995)
@@ -8,10 +8,11 @@
 
 from numpy.testing import assert_almost_equal, assert_array_almost_equal, \
         assert_array_almost_equal_nulp, TestCase, run_module_suite, dec, \
-        assert_raises, verbose
+        assert_raises, verbose, assert_equal
 
 from numpy import array, finfo, argsort, dot, round, conj, random
 from scipy.sparse import csc_matrix, isspmatrix
+from scipy.sparse.linalg import LinearOperator
 from scipy.sparse.linalg.eigen.arpack import eigs, eigsh, svds, \
      ArpackNoConvergence
 
@@ -352,6 +353,11 @@
     A = csc_matrix(np.zeros((2,3)))
     assert_raises(ValueError, eigs, A)
 
+def test_eigs_operator():
+    # Check inferring LinearOperator dtype
+    fft_op = LinearOperator((6, 6), np.fft.fft)
+    w, v = eigs(fft_op, k=3)
+    assert_equal(w.dtype, np.complex_)
 
 def sorted_svd(m, k):
     """Compute svd of a dense matrix m, and return singular vectors/values




More information about the Scipy-svn mailing list