Issue 1:
Just installed on MacOS from source (see #8353). Did not install nose.

python3 runtests.py -v

fails, reporting

!!!!!!!!!!!!!!!!!!! Interrupted: 2 errors during collection !!!!!!!!!!!!!!!!!!!!

without running any tests because

scipy/_lib/tests/test__gcutils.py and

scipy/io/matlab/tests/test_mio5_utils.py

try to import from nose.tools.

Installing nose fixes the problem.

Version of SciPy installed via pip doesn't have this problem. It collects over 14096 items without any errors.

Reproducing code example:

python3 runtests.py -v

or in Python console:

import scipy
scipy.test()

Error message:

Matts-MacBook-Pro:scipy matthaberland$ python3 runtests.py -v
Building, see build.log...
Build OK (0:00:05.530066 elapsed)
============================= test session starts ==============================
platform darwin -- Python 3.6.4, pytest-3.4.0, py-1.5.2, pluggy-0.6.0 -- /usr/local/opt/python3/bin/python3.6
cachedir: ../../../../../.pytest_cache
rootdir: /Users/matthaberland/Desktop/ScipyDev/scipy, inifile: pytest.ini
collected 13960 items / 2 errors

==================================== ERRORS ====================================
ERROR collecting build/testenv/lib/python3.6/site-packages/scipy/_lib/tests/test__gcutils.py
ImportError while importing test module '/Users/matthaberland/Desktop/ScipyDev/scipy/build/testenv/lib/python3.6/site-packages/scipy/_lib/tests/test__gcutils.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
scipy/_lib/tests/test__gcutils.py:9: in <module>
from nose.tools import assert_equal, raises
E ModuleNotFoundError: No module named 'nose'
ERROR collecting build/testenv/lib/python3.6/site-packages/scipy/io/matlab/tests/test_mio5_utils.py
ImportError while importing test module '/Users/matthaberland/Desktop/ScipyDev/scipy/build/testenv/lib/python3.6/site-packages/scipy/io/matlab/tests/test_mio5_utils.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
scipy/io/matlab/tests/test_mio5_utils.py:13: in <module>
from nose.tools import (assert_true, assert_equal, assert_raises)
E ModuleNotFoundError: No module named 'nose'
!!!!!!!!!!!!!!!!!!! Interrupted: 2 errors during collection !!!!!!!!!!!!!!!!!!!!
============================= 570 tests deselected =============================
=================== 570 deselected, 2 error in 8.97 seconds ====================

Scipy/Numpy/Python version information:

1.0.0.dev0+f2c31e3 1.14.0 sys.version_info(major=3, minor=6, micro=4, releaselevel='final', serial=0)

Issue 2:
The current default ncv parameter for sparse.linalg.eigs() often leads to wrong answers.

In the _ArpackParams class constructor, the ncv parameter is set to the bare minimum of 2*k + 1 (where k is the number of requested eigenvalues).

if ncv is None: ncv = 2 * k + 1

This is often insufficient to obtain convergence of the requested eigenvalues, with different eigenvalues being returned instead.

To avoid this issue, MATLAB and Julia both use a minimum of ncv=20 by default (see MATLAB's "p" option). I think scipy would benefit from doing the same:

if ncv is None: ncv = min(20, 2 * k + 1)

I think the small memory usage increase (ncv * size of a Krylov vector) is well worth it for correctness of the answers in cases like mine (see attachment). Also, as an added bonus, the speed of convergence can be greatly enhanced.

I've attached a demonstration in the form of an ipython notebook, including test data:

ARPACK_test.zip