From 6f57873526741458a343b7d9a131f568d3e79e0a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 27 Dec 2014 10:54:13 -0600 Subject: [PATCH] Do not use ImportError behaviour in viewer Conflicts: skimage/viewer/tests/test_tools.py --- skimage/viewer/__init__.py | 7 +++-- skimage/viewer/qt.py | 21 ++++++++++++-- skimage/viewer/tests/test_plugins.py | 35 +++++++++++----------- skimage/viewer/tests/test_tools.py | 43 ++++------------------------ skimage/viewer/tests/test_utils.py | 17 +++++------ skimage/viewer/tests/test_viewer.py | 17 ++++++----- skimage/viewer/tests/test_widgets.py | 29 +++++++++---------- 7 files changed, 74 insertions(+), 95 deletions(-) diff --git a/skimage/viewer/__init__.py b/skimage/viewer/__init__.py index 8c2c33cf..443e5659 100644 --- a/skimage/viewer/__init__.py +++ b/skimage/viewer/__init__.py @@ -1,5 +1,6 @@ import warnings -try: - from .viewers import ImageViewer, CollectionViewer -except ImportError as e: +from .viewers import ImageViewer, CollectionViewer +from .qt import has_qt + +if not has_qt: warnings.warn('Viewer requires Qt') diff --git a/skimage/viewer/qt.py b/skimage/viewer/qt.py index bc827f9a..dc4852c9 100644 --- a/skimage/viewer/qt.py +++ b/skimage/viewer/qt.py @@ -1,8 +1,25 @@ +has_qt = True + try: from matplotlib.backends.qt_compat import QtGui, QtCore, QtWidgets except ImportError: - from matplotlib.backends.qt4_compat import QtGui, QtCore - QtWidgets = QtGui + try: + from matplotlib.backends.qt4_compat import QtGui, QtCore + QtWidgets = QtGui + except ImportError: + # Mock objects + class QtGui(object): + QMainWindow = object + QDialog = object + QWidget = object + + class QtCore(object): + Signal = object + Qt = object + + QtWidgets = QtGui + + has_qt = False Qt = QtCore.Qt Signal = QtCore.Signal diff --git a/skimage/viewer/tests/test_plugins.py b/skimage/viewer/tests/test_plugins.py index b5cf7ab9..699578f2 100644 --- a/skimage/viewer/tests/test_plugins.py +++ b/skimage/viewer/tests/test_plugins.py @@ -4,15 +4,12 @@ import skimage import skimage.data as data from skimage.filters.rank import median from skimage.morphology import disk -try: - from skimage.viewer import ImageViewer - from skimage.viewer.plugins.base import Plugin - from skimage.viewer.widgets import Slider - from skimage.viewer.plugins import ( - LineProfile, Measure, CannyPlugin, LabelPainter, Crop, ColorHistogram, - PlotPlugin) -except ImportError: - ImageViewer is None +from skimage.viewer import ImageViewer, has_qt +from skimage.viewer.plugins.base import Plugin +from skimage.viewer.widgets import Slider +from skimage.viewer.plugins import ( + LineProfile, Measure, CannyPlugin, LabelPainter, Crop, ColorHistogram, + PlotPlugin) from numpy.testing import assert_equal, assert_allclose, assert_almost_equal from numpy.testing.decorators import skipif <<<<<<< HEAD @@ -33,7 +30,7 @@ def setup_line_profile(image, limits='image'): return plugin -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_line_profile(): """ Test a line profile using an ndim=2 image""" plugin = setup_line_profile(data.camera()) @@ -47,7 +44,7 @@ def test_line_profile(): assert_allclose(scan_data.mean(), 0.2812, rtol=1e-3) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_line_profile_rgb(): """ Test a line profile using an ndim=3 image""" plugin = setup_line_profile(data.chelsea(), limits=None) @@ -62,7 +59,7 @@ def test_line_profile_rgb(): assert_allclose(scan_data.mean(), 0.4359, rtol=1e-3) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_line_profile_dynamic(): """Test a line profile updating after an image transform""" image = data.coins()[:-50, :] # shave some off to make the line lower @@ -88,7 +85,7 @@ def test_line_profile_dynamic(): assert_almost_equal(np.max(line) - np.min(line), 0.639, 1) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_measure(): image = data.camera() viewer = ImageViewer(image) @@ -100,7 +97,7 @@ def test_measure(): assert_equal(str(m._angle.text[:5]), '135.0') -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_canny(): image = data.camera() viewer = ImageViewer(image) @@ -113,7 +110,7 @@ def test_canny(): assert edges.sum() == 2852 -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_label_painter(): image = data.camera() moon = data.moon() @@ -131,7 +128,7 @@ def test_label_painter(): assert_equal(lp.paint_tool.shape, moon.shape) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_crop(): image = data.camera() viewer = ImageViewer(image) @@ -142,7 +139,7 @@ def test_crop(): assert_equal(viewer.image.shape, (101, 101)) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_color_histogram(): image = skimage.img_as_float(data.load('color.png')) viewer = ImageViewer(image) @@ -154,7 +151,7 @@ def test_color_histogram(): assert_almost_equal(viewer.image.std(), 0.325, 3) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_plot_plugin(): viewer = ImageViewer(data.moon()) plugin = PlotPlugin(image_filter=lambda x: x) @@ -166,7 +163,7 @@ def test_plot_plugin(): viewer.close() -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_plugin(): img = skimage.img_as_float(data.moon()) viewer = ImageViewer(img) diff --git a/skimage/viewer/tests/test_tools.py b/skimage/viewer/tests/test_tools.py index 6ea25940..aae44783 100644 --- a/skimage/viewer/tests/test_tools.py +++ b/skimage/viewer/tests/test_tools.py @@ -4,23 +4,12 @@ import numpy as np from numpy.testing import assert_equal from numpy.testing.decorators import skipif from skimage import data -<<<<<<< HEAD -from skimage.viewer import ImageViewer, viewer_available +from skimage.viewer import ImageViewer, has_qt from skimage.viewer.canvastools import ( LineTool, ThickLineTool, RectangleTool, PaintTool) from skimage.viewer.canvastools.base import CanvasToolBase from matplotlib.testing.decorators import cleanup -======= -try: - from skimage.viewer import ImageViewer - from skimage.viewer.canvastools import ( - LineTool, ThickLineTool, RectangleTool, PaintTool) - from skimage.viewer.canvastools.base import CanvasToolBase -except ImportError: - ImageViewer = None ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility - def get_end_points(image): h, w = image.shape[0:2] @@ -84,12 +73,8 @@ def do_event(viewer, etype, button=1, xdata=0, ydata=0, key=None): func(event) -<<<<<<< HEAD @cleanup -@skipif(not viewer_available) -======= -@skipif(ImageViewer is None) ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility +@skipif(not has_qt) def test_line_tool(): img = data.camera() viewer = ImageViewer(img) @@ -114,12 +99,8 @@ def test_line_tool(): assert_equal(tool.geometry, np.array([[100, 100], [10, 10]])) -<<<<<<< HEAD @cleanup -@skipif(not viewer_available) -======= -@skipif(ImageViewer is None) ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility +@skipif(not has_qt) def test_thick_line_tool(): img = data.camera() viewer = ImageViewer(img) @@ -142,12 +123,8 @@ def test_thick_line_tool(): assert_equal(tool.linewidth, 1) -<<<<<<< HEAD @cleanup -@skipif(not viewer_available) -======= -@skipif(ImageViewer is None) ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility +@skipif(not has_qt) def test_rect_tool(): img = data.camera() viewer = ImageViewer(img) @@ -175,12 +152,8 @@ def test_rect_tool(): assert_equal(tool.geometry, [10, 100, 10, 100]) -<<<<<<< HEAD @cleanup -@skipif(not viewer_available) -======= -@skipif(ImageViewer is None) ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility +@skipif(not has_qt) def test_paint_tool(): img = data.moon() viewer = ImageViewer(img) @@ -213,12 +186,8 @@ def test_paint_tool(): assert_equal(tool.overlay.sum(), 0) -<<<<<<< HEAD @cleanup -@skipif(not viewer_available) -======= -@skipif(ImageViewer is None) ->>>>>>> 7e2fdf7... Update viewer for PyQt5 compatibility +@skipif(not has_qt) def test_base_tool(): img = data.moon() viewer = ImageViewer(img) diff --git a/skimage/viewer/tests/test_utils.py b/skimage/viewer/tests/test_utils.py index 5c962e5c..ae158a90 100644 --- a/skimage/viewer/tests/test_utils.py +++ b/skimage/viewer/tests/test_utils.py @@ -1,14 +1,11 @@ # -*- coding: utf-8 -*- -try: - from skimage.viewer import utils - from skimage.viewer.utils import dialogs - from skimage.viewer.qt import QtCore, QtGui -except ImportError: - QtCore = None +from skimage.viewer import utils +from skimage.viewer.utils import dialogs +from skimage.viewer.qt import QtCore, QtGui, has_qt from numpy.testing.decorators import skipif -@skipif(QtCore is None) +@skipif(not has_qt) def test_event_loop(): utils.init_qtapp() timer = QtCore.QTimer() @@ -16,7 +13,7 @@ def test_event_loop(): utils.start_qtapp() -@skipif(QtCore is None) +@skipif(not has_qt) def test_format_filename(): fname = dialogs._format_filename(('apple', 2)) assert fname == 'apple' @@ -24,7 +21,7 @@ def test_format_filename(): assert fname is None -@skipif(QtCore is None) +@skipif(not has_qt) def test_open_file_dialog(): utils.init_qtapp() timer = QtCore.QTimer() @@ -33,7 +30,7 @@ def test_open_file_dialog(): assert filename is None -@skipif(QtCore is None) +@skipif(not has_qt) def test_save_file_dialog(): utils.init_qtapp() timer = QtCore.QTimer() diff --git a/skimage/viewer/tests/test_viewer.py b/skimage/viewer/tests/test_viewer.py index 0709d18d..548565a4 100644 --- a/skimage/viewer/tests/test_viewer.py +++ b/skimage/viewer/tests/test_viewer.py @@ -1,11 +1,10 @@ from skimage import data -try: - from skimage.viewer.qt import QtGui, QtCore - from skimage.viewer import ImageViewer, CollectionViewer - from skimage.viewer.plugins import OverlayPlugin -except ImportError: - ImageViewer = None + +from skimage.viewer.qt import QtGui, QtCore, has_qt +from skimage.viewer import ImageViewer, CollectionViewer +from skimage.viewer.plugins import OverlayPlugin + from skimage.transform import pyramid_gaussian from skimage.filters import sobel from numpy.testing import assert_equal @@ -14,7 +13,7 @@ from skimage._shared.version_requirements import is_installed from skimage._shared._warnings import expected_warnings -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_viewer(): astro = data.astronaut() coins = data.coins() @@ -41,7 +40,7 @@ def make_key_event(key): QtCore.Qt.NoModifier) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_collection_viewer(): img = data.astronaut() @@ -57,7 +56,7 @@ def test_collection_viewer(): view._format_coord(10, 10) -@skipif(ImageViewer is None) +@skipif(not has_qt) @skipif(not is_installed('matplotlib', '>=1.2')) def test_viewer_with_overlay(): img = data.coins() diff --git a/skimage/viewer/tests/test_widgets.py b/skimage/viewer/tests/test_widgets.py index 8e76d29b..66b86fa4 100644 --- a/skimage/viewer/tests/test_widgets.py +++ b/skimage/viewer/tests/test_widgets.py @@ -1,14 +1,13 @@ import os from skimage import data, img_as_float, io, img_as_uint -try: - from skimage.viewer import ImageViewer - from skimage.viewer.qt import QtGui, QtCore - from skimage.viewer.widgets import ( - Slider, OKCancelButtons, SaveButtons, ComboBox, CheckBox, Text) - from skimage.viewer.plugins.base import Plugin -except ImportError: - ImageViewer = None + +from skimage.viewer import ImageViewer +from skimage.viewer.qt import QtGui, QtCore, has_qt +from skimage.viewer.widgets import ( + Slider, OKCancelButtons, SaveButtons, ComboBox, CheckBox, Text) +from skimage.viewer.plugins.base import Plugin + from numpy.testing import assert_almost_equal, assert_equal from numpy.testing.decorators import skipif from skimage._shared._warnings import expected_warnings @@ -21,7 +20,7 @@ def get_image_viewer(): return viewer -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_check_box(): viewer = get_image_viewer() cb = CheckBox('hello', value=True, alignment='left') @@ -36,7 +35,7 @@ def test_check_box(): assert_equal(cb.val, False) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_combo_box(): viewer = get_image_viewer() cb = ComboBox('hello', ('a', 'b', 'c')) @@ -49,7 +48,7 @@ def test_combo_box(): assert_equal(cb.index, 2) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_text_widget(): viewer = get_image_viewer() txt = Text('hello', 'hello, world!') @@ -60,7 +59,7 @@ def test_text_widget(): assert_equal(str(txt.text), 'goodbye, world!') -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_slider_int(): viewer = get_image_viewer() sld = Slider('radius', 2, 10, value_type='int') @@ -74,7 +73,7 @@ def test_slider_int(): assert_equal(sld.val, 5) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_slider_float(): viewer = get_image_viewer() sld = Slider('alpha', 2.1, 3.1, value=2.1, value_type='float', @@ -89,7 +88,7 @@ def test_slider_float(): assert_almost_equal(sld.val, 2.5, 2) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_save_buttons(): viewer = get_image_viewer() sv = SaveButtons() @@ -117,7 +116,7 @@ def test_save_buttons(): os.remove(filename) -@skipif(ImageViewer is None) +@skipif(not has_qt) def test_ok_buttons(): viewer = get_image_viewer() ok = OKCancelButtons()