diff --git a/nibabel/__init__.py b/nibabel/__init__.py index 4c3c7ae55c..fca22ccc99 100644 --- a/nibabel/__init__.py +++ b/nibabel/__init__.py @@ -34,6 +34,19 @@ For more detailed information see the :ref:`manual`. """ + + +def setup_test(): + """ Set numpy print options to "legacy" for new versions of numpy + + If imported into a file, nosetest will run this before any doctests. + """ + import numpy + from distutils.version import LooseVersion + if LooseVersion(numpy.__version__) >= LooseVersion('1.14'): + numpy.set_printoptions(legacy="1.13") + + # module imports from . import analyze as ana from . import spm99analyze as spm99 @@ -67,19 +80,19 @@ from . import mriutils from . import streamlines from . import viewers -from .testing import setup_test -# Note test requirement for "mock". Requirement for "nose" tested by numpy. -try: - import mock -except ImportError: +import pkgutil + +if not pkgutil.find_loader('mock'): def test(*args, **kwargs): raise RuntimeError('Need "mock" package for tests') else: from numpy.testing import Tester test = Tester().test bench = Tester().bench - del mock, Tester + del Tester + +del pkgutil from .pkg_info import get_pkg_info as _get_pkg_info diff --git a/nibabel/affines.py b/nibabel/affines.py index 432106743e..057233e454 100644 --- a/nibabel/affines.py +++ b/nibabel/affines.py @@ -6,7 +6,7 @@ import numpy as np from six.moves import reduce -from .testing import setup_test # noqa +from . import setup_test # noqa class AffineError(ValueError): diff --git a/nibabel/casting.py b/nibabel/casting.py index fd4170e1ff..3709ee1dea 100644 --- a/nibabel/casting.py +++ b/nibabel/casting.py @@ -8,7 +8,7 @@ from platform import processor, machine import numpy as np -from .testing import setup_test # noqa +from . import setup_test # noqa class CastingError(Exception): diff --git a/nibabel/nicom/dwiparams.py b/nibabel/nicom/dwiparams.py index 32ba3dbaa1..1fda89b0da 100644 --- a/nibabel/nicom/dwiparams.py +++ b/nibabel/nicom/dwiparams.py @@ -21,7 +21,7 @@ ''' import numpy as np import numpy.linalg as npl -from ..testing import setup_test as setup_module # noqa +from .. import setup_test as setup_module # noqa def B2q(B, tol=None): diff --git a/nibabel/nifti1.py b/nibabel/nifti1.py index 84cfed956a..548ad34658 100644 --- a/nibabel/nifti1.py +++ b/nibabel/nifti1.py @@ -27,7 +27,7 @@ from .spm99analyze import SpmAnalyzeHeader from .casting import have_binary128 from .pydicom_compat import have_dicom, pydicom as pdcm -from .testing import setup_test # noqa +from . import setup_test # noqa # nifti1 flat header definition for Analyze-like first 348 bytes # first number in comments indicates offset in file header in bytes diff --git a/nibabel/optpkg.py b/nibabel/optpkg.py index 4bb8a991d7..fb0e00179a 100644 --- a/nibabel/optpkg.py +++ b/nibabel/optpkg.py @@ -1,16 +1,13 @@ """ Routines to support optional packages """ +import pkgutil from distutils.version import LooseVersion - from six import string_types +from .tripwire import TripWire -try: - import nose -except ImportError: - have_nose = False -else: +if pkgutil.find_loader('nose'): have_nose = True - -from .tripwire import TripWire +else: + have_nose = False def _check_pkg_version(pkg, min_version): @@ -121,6 +118,7 @@ def optional_package(name, trip_msg=None, min_version=None): def setup_module(): if have_nose: + import nose raise nose.plugins.skip.SkipTest('No %s for these tests' % name) return pkg, False, setup_module diff --git a/nibabel/quaternions.py b/nibabel/quaternions.py index 76e93e4490..f9318a93f2 100644 --- a/nibabel/quaternions.py +++ b/nibabel/quaternions.py @@ -27,7 +27,7 @@ import math import numpy as np -from .testing import setup_test # noqa +from . import setup_test # noqa MAX_FLOAT = np.maximum_sctype(np.float) FLOAT_EPS = np.finfo(np.float).eps diff --git a/nibabel/testing/__init__.py b/nibabel/testing/__init__.py index a1960249cd..35aac71a49 100644 --- a/nibabel/testing/__init__.py +++ b/nibabel/testing/__init__.py @@ -213,13 +213,3 @@ def assert_arr_dict_equal(dict1, dict2): for key, value1 in dict1.items(): value2 = dict2[key] assert_array_equal(value1, value2) - - -def setup_test(): - """ Set numpy print options to "legacy" for new versions of numpy - - If imported into a file, nosetest will run this before any doctests. - """ - from distutils.version import LooseVersion - if LooseVersion(np.__version__) >= LooseVersion('1.14'): - np.set_printoptions(legacy="1.13") diff --git a/nibabel/tests/test_optpkg.py b/nibabel/tests/test_optpkg.py index a4c090e1af..c0930e848a 100644 --- a/nibabel/tests/test_optpkg.py +++ b/nibabel/tests/test_optpkg.py @@ -38,7 +38,12 @@ def test_basic(): assert_good('os.path') # We never have package _not_a_package assert_bad('_not_a_package') + + # setup_module imports nose, so make sure we don't disrupt that + orig_import = builtins.__import__ def raise_Exception(*args, **kwargs): + if args[0] == 'nose': + return orig_import(*args, **kwargs) raise Exception( "non ImportError could be thrown by some malfunctioning module " "upon import, and optional_package should catch it too")