-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
And in this case, the widget leak is just a failed cleanup after the actual error that is shown a bit higher (https://github.com/pyapp-kit/ndv/actions/runs/15305150376/job/43055857610?pr=202#step:11:393)
WARNING: Traceback (most recent call last):
File "/Users/runner/work/ndv/ndv/.venv/bin/pytest", line 10, in <module>
sys.exit(console_main())
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/config/__init__.py", line 201, in console_main
code = main()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/config/__init__.py", line 175, in main
ret: ExitCode | int = config.hook.pytest_cmdline_main(config=config)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/main.py", line 330, in pytest_cmdline_main
return wrap_session(config, _main)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/main.py", line 283, in wrap_session
session.exitstatus = doit(config, session) or 0
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/main.py", line 337, in _main
config.hook.pytest_runtestloop(session=session)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/main.py", line 362, in pytest_runtestloop
item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 113, in pytest_runtest_protocol
runtestprotocol(item, nextitem=nextitem)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 132, in runtestprotocol
reports.append(call_and_report(item, "call", log))
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 241, in call_and_report
call = CallInfo.from_call(
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 341, in from_call
result: TResult | None = func()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 242, in <lambda>
lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/runner.py", line 174, in pytest_runtest_call
item.runtest()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/python.py", line 1627, in runtest
self.ihook.pytest_pyfunc_call(pyfuncitem=self)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/_pytest/python.py", line 159, in pytest_pyfunc_call
result = testfunction(**testargs)
File "/Users/runner/work/ndv/ndv/tests/test_controller.py", line 255, in test_array_viewer_with_app
process_events()
File "/Users/runner/work/ndv/ndv/src/ndv/views/_app.py", line 344, in process_events
ndv_app().process_events()
File "/Users/runner/work/ndv/ndv/src/ndv/views/_qt/_app.py", line 85, in process_events
QApplication.processEvents()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/app/backends/_qt.py", line 626, in event
out = super(QtBaseCanvasBackend, self).event(ev)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/app/backends/_qt.py", line 928, in paintGL
self._vispy_canvas.events.draw(region=None)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/util/event.py", line 453, in __call__
self._invoke_callback(cb, event)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/util/event.py", line 471, in _invoke_callback
_handle_exception(self.ignore_callback_errors,
<< caught exception here: >>
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/util/event.py", line 469, in _invoke_callback
cb(event)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/scene/canvas.py", line 219, in on_draw
self._draw_scene()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/scene/canvas.py", line 278, in _draw_scene
self.draw_visual(self.scene)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/scene/canvas.py", line 316, in draw_visual
node.draw()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/scene/visuals.py", line 106, in draw
self._visual_superclass.draw(self)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/visuals/visual.py", line 505, in draw
if self._prepare_draw(view=self) is False:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/visuals/image.py", line 677, in _prepare_draw
self._build_texture()
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/visuals/image.py", line 618, in _build_texture
self._texture.scale_and_set_data(self._data, copy=False)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/visuals/_scalable_textures.py", line 447, in scale_and_set_data
self._reformat_if_necessary(data)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/visuals/_scalable_textures.py", line 440, in _reformat_if_necessary
self._resize(data.shape, internalformat=internalformat)
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/gloo/texture.py", line 324, in _resize
shape = self._normalize_shape(shape)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/runner/work/ndv/ndv/.venv/lib/python3.12/site-packages/vispy/gloo/texture.py", line 193, in _normalize_shape
raise ValueError("Too many channels for texture")
ValueError: Too many channels for texture
ERROR: Invoking <bound method SceneCanvas.on_draw of <SceneCanvas (PyQt6) at 0x115ec9b80>> for DrawEvent
Ah, good catch. Yeah, looks like an issue likely arising from the changes added by #196. I'm guessing it's a race condition between a 3D data request and clearing the canvas (i.e. the ImageHandle backed by a vispy image is being used for displaying 3D data when it should have been cleared and replaced by a vispy volume ImageHandle?)
Originally posted by @gselzer in #202 (comment)
@gselzer, I'm not totally following what broke here yet. Is this something you're working on?
Metadata
Metadata
Assignees
Labels
No labels