From f929f40c51078ce9d69f5d2a9788786fee190c82 Mon Sep 17 00:00:00 2001 From: Eric Dill Date: Sat, 11 Jul 2015 17:43:07 -0500 Subject: [PATCH 1/3] BUG: Divide by zero error in ImageItem autoDownsample --- pyqtgraph/graphicsItems/ImageItem.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyqtgraph/graphicsItems/ImageItem.py b/pyqtgraph/graphicsItems/ImageItem.py index 5b041433..4447d4b3 100644 --- a/pyqtgraph/graphicsItems/ImageItem.py +++ b/pyqtgraph/graphicsItems/ImageItem.py @@ -293,6 +293,9 @@ class ImageItem(GraphicsObject): h = Point(y-o).length() xds = max(1, int(1/w)) yds = max(1, int(1/h)) + # xds = int(1/max(1,w)) + # yds = int(1/max(1,h)) + # 1/0 image = fn.downsample(self.image, xds, axis=0) image = fn.downsample(image, yds, axis=1) else: From a52d8f7222997c55377e42f2988eb32f0bfdfdff Mon Sep 17 00:00:00 2001 From: Eric Dill Date: Sat, 11 Jul 2015 17:43:30 -0500 Subject: [PATCH 2/3] TST: Barn door testing on the divide-by-zero error --- .../graphicsItems/tests/test_ImageItem.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 pyqtgraph/graphicsItems/tests/test_ImageItem.py diff --git a/pyqtgraph/graphicsItems/tests/test_ImageItem.py b/pyqtgraph/graphicsItems/tests/test_ImageItem.py new file mode 100644 index 00000000..ce232296 --- /dev/null +++ b/pyqtgraph/graphicsItems/tests/test_ImageItem.py @@ -0,0 +1,65 @@ +import gc +import weakref +# try: +# import faulthandler +# faulthandler.enable() +# except ImportError: +# pass + +from pyqtgraph.Qt import QtCore, QtGui, QtTest +import numpy as np +import pyqtgraph as pg +app = pg.mkQApp() + + +def test_dividebyzero(): + import pyqtgraph as pg + im = pg.image(pg.np.random.normal(size=(100,100))) + im.imageItem.setAutoDownsample(True) + im.view.setRange(xRange=[-5+25, 5e+25],yRange=[-5e+25, 5e+25]) + app.processEvents() + QtTest.QTest.qWait(1000) + # must manually call im.imageItem.render here or the exception + # will only exist on the Qt event loop + im.imageItem.render() + + +if __name__ == "__main__": + test_dividebyzero() + + +# def test_getViewWidget(): +# view = pg.PlotWidget() +# vref = weakref.ref(view) +# item = pg.InfiniteLine() +# view.addItem(item) +# assert item.getViewWidget() is view +# del view +# gc.collect() +# assert vref() is None +# assert item.getViewWidget() is None +# +# def test_getViewWidget_deleted(): +# view = pg.PlotWidget() +# item = pg.InfiniteLine() +# view.addItem(item) +# assert item.getViewWidget() is view +# +# # Arrange to have Qt automatically delete the view widget +# obj = pg.QtGui.QWidget() +# view.setParent(obj) +# del obj +# gc.collect() +# +# assert not pg.Qt.isQObjectAlive(view) +# assert item.getViewWidget() is None + + +#if __name__ == '__main__': + #view = pg.PlotItem() + #vref = weakref.ref(view) + #item = pg.InfiniteLine() + #view.addItem(item) + #del view + #gc.collect() + From 3bdb29e5212992523d155ea090837261c59175b6 Mon Sep 17 00:00:00 2001 From: Eric Dill Date: Sat, 11 Jul 2015 17:44:50 -0500 Subject: [PATCH 3/3] MNT: Remove commented code --- pyqtgraph/graphicsItems/ImageItem.py | 7 +--- .../graphicsItems/tests/test_ImageItem.py | 41 ------------------- 2 files changed, 2 insertions(+), 46 deletions(-) diff --git a/pyqtgraph/graphicsItems/ImageItem.py b/pyqtgraph/graphicsItems/ImageItem.py index 4447d4b3..744e1937 100644 --- a/pyqtgraph/graphicsItems/ImageItem.py +++ b/pyqtgraph/graphicsItems/ImageItem.py @@ -291,11 +291,8 @@ class ImageItem(GraphicsObject): y = self.mapToDevice(QtCore.QPointF(0,1)) w = Point(x-o).length() h = Point(y-o).length() - xds = max(1, int(1/w)) - yds = max(1, int(1/h)) - # xds = int(1/max(1,w)) - # yds = int(1/max(1,h)) - # 1/0 + xds = int(1/max(1, w)) + yds = int(1/max(1, h)) image = fn.downsample(self.image, xds, axis=0) image = fn.downsample(image, yds, axis=1) else: diff --git a/pyqtgraph/graphicsItems/tests/test_ImageItem.py b/pyqtgraph/graphicsItems/tests/test_ImageItem.py index ce232296..c2ba58d9 100644 --- a/pyqtgraph/graphicsItems/tests/test_ImageItem.py +++ b/pyqtgraph/graphicsItems/tests/test_ImageItem.py @@ -22,44 +22,3 @@ def test_dividebyzero(): # must manually call im.imageItem.render here or the exception # will only exist on the Qt event loop im.imageItem.render() - - -if __name__ == "__main__": - test_dividebyzero() - - -# def test_getViewWidget(): -# view = pg.PlotWidget() -# vref = weakref.ref(view) -# item = pg.InfiniteLine() -# view.addItem(item) -# assert item.getViewWidget() is view -# del view -# gc.collect() -# assert vref() is None -# assert item.getViewWidget() is None -# -# def test_getViewWidget_deleted(): -# view = pg.PlotWidget() -# item = pg.InfiniteLine() -# view.addItem(item) -# assert item.getViewWidget() is view -# -# # Arrange to have Qt automatically delete the view widget -# obj = pg.QtGui.QWidget() -# view.setParent(obj) -# del obj -# gc.collect() -# -# assert not pg.Qt.isQObjectAlive(view) -# assert item.getViewWidget() is None - - -#if __name__ == '__main__': - #view = pg.PlotItem() - #vref = weakref.ref(view) - #item = pg.InfiniteLine() - #view.addItem(item) - #del view - #gc.collect() -