spacetx / starfish

starfish: unified pipelines for image-based transcriptomics
https://spacetx-starfish.readthedocs.io/en/latest/
MIT License
223 stars 67 forks source link

'Visualizing Data' tutorial crashes at viewer.add_image step #1924

Closed vals closed 3 years ago

vals commented 3 years ago

[ Related to openjournals/joss-reviews#2440 ]

Hi,

After running the Quick Start tutorial I was going through the 'Visualizing Data' tutorial. At the step viewer.add_image(dots_wth.xarray, name='dots') the software throws an error:

WARNING: Traceback (most recent call last):
  File "C:\Users\vale\Anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\vale\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel_launcher.py", line 16, in <module>
    app.launch_new_instance()
  File "C:\Users\vale\Anaconda3\lib\site-packages\traitlets\config\application.py", line 664, in launch_instance
    app.start()
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\kernelapp.py", line 563, in start
    self.io_loop.start()
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\platform\asyncio.py", line 148, in start
    self.asyncio_loop.run_forever()
  File "C:\Users\vale\Anaconda3\lib\asyncio\base_events.py", line 534, in run_forever
    self._run_once()
  File "C:\Users\vale\Anaconda3\lib\asyncio\base_events.py", line 1771, in _run_once
    handle._run()
  File "C:\Users\vale\Anaconda3\lib\asyncio\events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\ioloop.py", line 690, in <lambda>
    lambda f: self._run_callback(functools.partial(callback, future))
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\ioloop.py", line 743, in _run_callback
    ret = callback()
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\gen.py", line 787, in inner
    self.run()
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\gen.py", line 748, in run
    yielded = self.gen.send(value)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 365, in process_one
    yield gen.maybe_future(dispatch(*args))
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\gen.py", line 209, in wrapper
    yielded = next(result)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 272, in dispatch_shell
    yield gen.maybe_future(handler(stream, idents, msg))
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\gen.py", line 209, in wrapper
    yielded = next(result)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 542, in execute_request
    user_expressions, allow_stdin,
  File "C:\Users\vale\Anaconda3\lib\site-packages\tornado\gen.py", line 209, in wrapper
    yielded = next(result)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\ipkernel.py", line 294, in do_execute
    res = shell.run_cell(code, store_history=store_history, silent=silent)
  File "C:\Users\vale\Anaconda3\lib\site-packages\ipykernel\zmqshell.py", line 536, in run_cell
    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2855, in run_cell
    raw_cell, store_history, silent, shell_futures)
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in _run_cell
    return runner(coro)
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\async_helpers.py", line 68, in _pseudo_sync_runner
    coro.send(None)
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3058, in run_cell_async
    interactivity=interactivity, compiler=compiler, result=result)
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3249, in run_ast_nodes
    if (await self.run_code(code, result,  async_=asy)):
  File "C:\Users\vale\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-53-dff17dbfa61a>", line 1, in <module>
    viewer.add_image(dots_wth.xarray, name = 'dots')
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\components\add_layers_mixin.py", line 223, in add_image
    return self.add_layer(layers.Image(data, **kwargs))
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\components\add_layers_mixin.py", line 55, in add_layer
    self.layers.append(layer)
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\utils\list\_model.py", line 59, in append
    self.events.added(item=obj, index=len(self) - 1)
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\utils\events\event.py", line 514, in __call__
    self._invoke_callback(cb, event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\utils\events\event.py", line 529, in _invoke_callback
    cb(event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\napari\_qt\qt_viewer.py", line 264, in _add_layer
    vispy_layer.node.parent = self.view.scene
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\frozen.py", line 17, in __setattr__
    object.__setattr__(self, key, value)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\scene\node.py", line 198, in parent
    self._set_canvas(parent.canvas)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\scene\node.py", line 316, in _set_canvas
    self.transforms.canvas_transform = tr.canvas_transform
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\visuals\transforms\transform_system.py", line 315, in canvas_transform
    self._canvas_transform.transforms = tr
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\visuals\transforms\chain.py", line 96, in transforms
    self.update()
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\visuals\transforms\base_transform.py", line 153, in update
    self.changed(*args)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\event.py", line 455, in __call__
    self._invoke_callback(cb, event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\event.py", line 471, in _invoke_callback
    cb(event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\event.py", line 455, in __call__
    self._invoke_callback(cb, event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\event.py", line 475, in _invoke_callback
    self, cb_event=(cb, event))
  << caught exception here: >>
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\util\event.py", line 471, in _invoke_callback
    cb(event)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\visuals\visual.py", line 265, in _transform_changed
    self.update()
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\scene\node.py", line 333, in update
    c.update(node=self)
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\scene\canvas.py", line 200, in update
    super(SceneCanvas, self).update()
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\app\canvas.py", line 442, in update
    self._backend._vispy_update()
  File "C:\Users\vale\Anaconda3\lib\site-packages\vispy\app\backends\_qt.py", line 427, in _vispy_update
    self.update()
RuntimeError: wrapped C/C++ object of type CanvasBackendDesktop has been deleted
ERROR: Invoking <bound method BaseVisual._transform_changed of <Image at 0x24fc8a1ca08>> for Event
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-53-dff17dbfa61a> in <module>
----> 1 viewer.add_image(dots_wth.xarray, name = 'dots')
      2 viewer.add_labels(masks.to_label_image().label_iamge, name = 'cells')

~\Anaconda3\lib\site-packages\napari\components\add_layers_mixin.py in add_image(self, data, channel_axis, rgb, colormap, contrast_limits, gamma, interpolation, rendering, iso_threshold, attenuation, name, metadata, scale, translate, opacity, blending, visible, multiscale)
    221                     )
    222 
--> 223             return self.add_layer(layers.Image(data, **kwargs))
    224         else:
    225             layerdata_list = split_channels(data, channel_axis, **kwargs)

~\Anaconda3\lib\site-packages\napari\components\add_layers_mixin.py in add_layer(self, layer)
     53         layer.events.cursor_size.connect(self._update_cursor_size)
     54         layer.events.data.connect(self._on_layers_change)
---> 55         self.layers.append(layer)
     56         self._update_layers(layers=[layer])
     57 

~\Anaconda3\lib\site-packages\napari\utils\list\_model.py in append(self, obj)
     57     def append(self, obj):
     58         TypedList.append(self, obj)
---> 59         self.events.added(item=obj, index=len(self) - 1)
     60 
     61     def pop(self, key):

~\Anaconda3\lib\site-packages\napari\utils\events\event.py in __call__(self, *args, **kwargs)
    512                     continue
    513 
--> 514                 self._invoke_callback(cb, event)
    515                 if event.blocked:
    516                     break

~\Anaconda3\lib\site-packages\napari\utils\events\event.py in _invoke_callback(self, cb, event)
    533                 self.print_callback_errors,
    534                 self,
--> 535                 cb_event=(cb, event),
    536             )
    537 

~\Anaconda3\lib\site-packages\napari\utils\events\event.py in _invoke_callback(self, cb, event)
    527     def _invoke_callback(self, cb, event):
    528         try:
--> 529             cb(event)
    530         except Exception:
    531             _handle_exception(

~\Anaconda3\lib\site-packages\napari\_qt\widgets\qt_layerlist.py in _add(self, event)
     84         index = 2 * (total - event.index) - 1
     85         widget = QtLayerWidget(layer)
---> 86         self.vbox_layout.insertWidget(index, widget)
     87         self.vbox_layout.insertWidget(index + 1, QtDivider())
     88         layer.events.select.connect(self._scroll_on_select)

RuntimeError: wrapped C/C++ object of type QVBoxLayout has been deleted

This is on Windows, in case that matters.

neuromusic commented 3 years ago

Thanks for the bug report @vals ... can you provide the output of the following?

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("NumPy", numpy.__version__)
import scipy; print("SciPy", scipy.__version__)
import skimage; print("scikit-image", skimage.__version__)
import pandas; print("pandas", pandas.__version__)
import sklearn; print("sklearn", sklearn.__version__)
import xarray; print("xarray", xarray.__version__)
import sympy; print("sympy", sympy.__version__)
import starfish; print("starfish", starfish.__version__)
import napari; print("napari", napari.__version__)
neuromusic commented 3 years ago

(edited my comment... the last line should give the napari version)

vals commented 3 years ago

Hi @neuromusic, I just reran the same notebook as I used when reviewing. This time it didn't crash! (It is very likely I updated something in my Python environment between then and now).

I am pasting the outputs of the version numbers for the sake of completeness:

Windows-10-10.0.19041-SP0
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
NumPy 1.18.1
SciPy 1.4.1
scikit-image 0.15.0
pandas 1.0.3
sklearn 0.22.2.post1
xarray 0.16.0
sympy 1.4
starfish 0.2.1
napari 0.3.7

Since it all seems to be working now, I am closing the issue.