brainglobe / brainglobe-napari-io

Read and write files from the BrainGlobe neuroanatomy suite
BSD 3-Clause "New" or "Revised" License
13 stars 3 forks source link

Migrate plugin to napari-plugin-engine 0.2.0 #6

Closed noisysky closed 2 years ago

noisysky commented 2 years ago

Unable to open Cellfinder xml files in Napari==0.4.14

Warning message: /path/to/python3.8/site-packages/napari/_qt/qt_viewer.py:1068: UserWarning: No readers found to try reading /path/to/points/cell_classification.xml.!

In a clean Python 3.8 conda environment I ran pip install cellfinder

Then tried dragging cell_classification.xml on Napari.

Trying to fix the issue in this branch (work in progress): https://github.com/noisysky/brainglobe-napari-io/tree/update-npe2 If you find any commits there useful, please just grab them.

adamltyson commented 2 years ago

Thanks for raising the issue. I was under the impression that the original plugin engine was supported for the foreseeable future.

If the branch ends up working, it would be great if you could open a PR.

cc @alessandrofelder @dpshelio @paddyroddy as this is directly related to the cellfinder-napari work.

adamltyson commented 2 years ago

This needs to be fixed as it's affecting more people (and seems incompatible with the latest changes to the cellfinder-napari plugin).

dstansby commented 2 years ago

@adamltyson do you have some sample output data that we can test this plugin with? I'm struggling to generate some from cellfinder by myself

adamltyson commented 2 years ago

@dstansby Will send you some.

jjtukker commented 2 years ago

I'm a little bit confused with issues #6, 9, and 10; not sure if/how they are all related and don't want to add to the confusion, but I am having very similar issues with freshly installed Napari version on MacOS 12.2.1 (see output from napari -info below for more details).

Napari cannot read the json file in the output folder (I just drag-and-drop this, note it is based on the test-data you provide):

Could not find a backend to open /Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json`` with iomoderi`. (see below for full output, it is rather long)

And it also cannot read the xml file (again just drag-and-drop): /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:1068: UserWarning: No readers found to try reading /Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml.!

Note that it can read tiff files. BTW I'm a bit confused about exactly which tiff files to open to get the warped/registered atlas overview and borders that fit to the original data. You mention "the cellfinder directory" somewhere, as opposed to the "registration directory", but I just have one output directory that includes 4 subdirectories (analysis, figures, points, registration), along with cellfinder json and log files.

Here is the full output I get after I drag-and-drop the full output folder (the final UserWarning line came after trying to load the xml file):

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:1094, in QtViewer.dropEvent(self=<napari._qt.qt_viewer.QtViewer object>, event=<PyQt5.QtGui.QDropEvent object>)
   1086 # there is no existing setting, or it failed, get choice from user
   1087 readerDialog = QtReaderDialog(
   1088     parent=self,
   1089     pth=filename,
   (...)
   1092     readers=readers,
   1093 )
-> 1094 self._get_and_try_preferred_reader(
        self = <napari._qt.qt_viewer.QtViewer object at 0x130b23700>
        readers = {'napari': 'napari'}
        error_message = ''
        readerDialog = <napari._qt.dialogs.qt_reader_dialog.QtReaderDialog object at 0x12feb2f70>
   1095     readerDialog, readers, error_message
   1096 )

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:1161, in QtViewer._get_and_try_preferred_reader(self=<napari._qt.qt_viewer.QtViewer object>, readerDialog=<napari._qt.dialogs.qt_reader_dialog.QtReaderDialog object>, readers={'napari': 'napari'}, error_message='')
   1159 display_name, persist_choice = choice
   1160 plugin_name = readers[display_name]
-> 1161 self.viewer.open(
        self.viewer = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0, interactive=True), cursor=Cursor(position=(1, 1), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10, unit=None), text_overlay=TextOverlay(visible=False, color=(0.5, 0.5, 0.5, 1.0), font_size=10, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), overlays=Overlays(interaction_box=InteractionBox(points=None, show=False, show_handle=False, show_vertices=False, selection_box_drag=None, selection_box_final=None, transform_start=<napari.utils.transforms.transforms.Affine object at 0x130b17cd0>, transform_drag=<napari.utils.transforms.transforms.Affine object at 0x130b17d30>, transform_final=<napari.utils.transforms.transforms.Affine object at 0x130b17d90>, transform=<napari.utils.transforms.transforms.Affine object at 0x130b17df0>, allow_new_selection=True, selected_vertex=None)), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_move at 0x14a5f10d0>], mouse_drag_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_drag at 0x14a5dcca0>], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x13054fd30>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Shift': <function InteractionBoxMouseBindings.initialize_key_events.<locals>.hold_to_lock_aspect_ratio at 0x14a5dc3a0>, 'Control-Shift-R': <function InteractionBoxMouseBindings._reset_active_layer_affine at 0x14a5641f0>, 'Control-Shift-A': <function InteractionBoxMouseBindings._transform_active_layer at 0x14a564790>})
        self = <napari._qt.qt_viewer.QtViewer object at 0x130b23700>
        readerDialog = <napari._qt.dialogs.qt_reader_dialog.QtReaderDialog object at 0x12feb2f70>
        readerDialog._current_file = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'
        plugin_name = 'napari'
   1162     readerDialog._current_file,
   1163     plugin=plugin_name,
   1164 )
   1165 # do we have settings to save?
   1166 if persist_choice:
   1167     # need explicit reassignment of object for persistence

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:918, in ViewerModel.open(self=Viewer(axes=Axes(visible=False, labels=True, col...indings._transform_active_layer at 0x14a564790>}), path='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/', stack=False, plugin='napari', layer_type=None, **kwargs={})
    909 with progress(
    910     paths,
    911     desc=trans._('Opening Files'),
   (...)
    914     else None,  # indeterminate bar for 1 file
    915 ) as pbr:
    916     for _path in pbr:
    917         added.extend(
--> 918             self._add_layers_with_plugins(
        added = []
        self = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0, interactive=True), cursor=Cursor(position=(1, 1), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10, unit=None), text_overlay=TextOverlay(visible=False, color=(0.5, 0.5, 0.5, 1.0), font_size=10, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), overlays=Overlays(interaction_box=InteractionBox(points=None, show=False, show_handle=False, show_vertices=False, selection_box_drag=None, selection_box_final=None, transform_start=<napari.utils.transforms.transforms.Affine object at 0x130b17cd0>, transform_drag=<napari.utils.transforms.transforms.Affine object at 0x130b17d30>, transform_final=<napari.utils.transforms.transforms.Affine object at 0x130b17d90>, transform=<napari.utils.transforms.transforms.Affine object at 0x130b17df0>, allow_new_selection=True, selected_vertex=None)), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_move at 0x14a5f10d0>], mouse_drag_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_drag at 0x14a5dcca0>], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x13054fd30>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Shift': <function InteractionBoxMouseBindings.initialize_key_events.<locals>.hold_to_lock_aspect_ratio at 0x14a5dc3a0>, 'Control-Shift-R': <function InteractionBoxMouseBindings._reset_active_layer_affine at 0x14a5641f0>, 'Control-Shift-A': <function InteractionBoxMouseBindings._transform_active_layer at 0x14a564790>})
        _path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'
        [_path] = ['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/']
        kwargs = {}
        plugin = 'napari'
        layer_type = None
        stack = False
    919                 [_path],
    920                 kwargs=kwargs,
    921                 plugin=plugin,
    922                 layer_type=layer_type,
    923                 stack=stack,
    924             )
    925         )
    926 return added

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:983, in ViewerModel._add_layers_with_plugins(self=Viewer(axes=Axes(visible=False, labels=True, col...indings._transform_active_layer at 0x14a564790>}), paths=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], stack=False, kwargs={}, plugin='napari', layer_type=None)
    981 else:
    982     assert len(paths) == 1
--> 983     layer_data, hookimpl = read_data_with_plugins(
        stack = False
        plugin = 'napari'
        paths = ['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/']
    984         paths, plugin=plugin, stack=stack
    985     )
    987 # glean layer names from filename. These will be used as *fallback*
    988 # names, if the plugin does not return a name kwarg in their meta dict.
    989 filenames = []

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/io.py:68, in read_data_with_plugins(paths=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], plugin='napari', stack=False)
     65     assert len(paths) == 1
     66 hookimpl: Optional[HookImplementation]
---> 68 res = _npe2.read(paths, plugin, stack=stack)
        paths = ['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/']
        plugin = 'napari'
        stack = False
        _npe2 = <module 'napari.plugins._npe2' from '/Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/_npe2.py'>
     69 if res is not None:
     70     _ld, hookimpl = res

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/_npe2.py:52, in read(paths=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], plugin='napari', stack=False)
     50 except ValueError as e:
     51     if 'No readers returned data' not in str(e):
---> 52         raise e
     53 return None

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/_npe2.py:48, in read(paths=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], plugin='napari', stack=False)
     46     npe1_path = paths[0]
     47 try:
---> 48     layer_data, reader = read_get_reader(npe1_path, plugin_name=plugin)
        npe1_path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'
        plugin = 'napari'
     49     return layer_data, _FakeHookimpl(reader.plugin_name)
     50 except ValueError as e:

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/npe2/io_utils.py:44, in read_get_reader(path='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/', plugin_name='napari')
     40 def read_get_reader(
     41     path: PathLike, *, plugin_name: Optional[str] = None
     42 ) -> Tuple[List[LayerData], ReaderContribution]:
     43     """Variant of `read` that also returns the `ReaderContribution` used."""
---> 44     return _read(path, plugin_name=plugin_name, return_reader=True)
        path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'
        plugin_name = 'napari'

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/npe2/io_utils.py:131, in _read(path='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/', plugin_name='napari', return_reader=True, _pm=<npe2._plugin_manager.PluginManager object>)
    128 read_func = rdr.exec(kwargs={"path": path})
    129 if read_func is not None:
    130     # if the reader function raises an exception here, we don't try to catch it
--> 131     layer_data = read_func(path)
        path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'
        read_func = <function magic_imread at 0x150965af0>
    132     if layer_data:
    133         return (layer_data, rdr) if return_reader else layer_data

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/types.py:144, in image_reader_to_layerdata_reader.<locals>.reader_function(*args=('/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/',), **kwargs={})
    142 @wraps(func)
    143 def reader_function(*args, **kwargs) -> List[LayerData]:
--> 144     result = func(*args, **kwargs)
        func = <function magic_imread at 0x12fe81a60>
        args = ('/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/',)
        kwargs = {}
    145     return [(result,)]

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/utils/io.py:244, in magic_imread(filenames=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], use_dask=True, stack=True)
    242 else:
    243     if shape is None:
--> 244         image = imread(filename)
        filename = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json'
    245         shape = image.shape
    246         dtype = image.dtype

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/utils/io.py:141, in imread(filename='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json')
    138 else:
    139     import imageio
--> 141     return imageio.imread(filename)
        filename = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json'

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/imageio/__init__.py:86, in imread(uri='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json', format=None, **kwargs={})
     65 def imread(uri, format=None, **kwargs):
     66     """imread(uri, format=None, **kwargs)
     67 
     68     Reads an image from the specified file. Returns a numpy array, which
   (...)
     84         to see what arguments are available for a particular format.
     85     """
---> 86     return imread_v2(uri, format=format, **kwargs)
        imread_v2 = <function imread at 0x12fcfde50>
        uri = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json'
        format = None
        kwargs = {}

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/imageio/v2.py:159, in imread(uri='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json', format=None, **kwargs={})
    154 if "mode" in kwargs:
    155     raise TypeError(
    156         'Invalid keyword argument "mode", ' 'perhaps you mean "pilmode"?'
    157     )
--> 159 with imopen(uri, "ri", plugin=format) as file:
        uri = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json'
        format = None
    160     return file.read(index=0, **kwargs)

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/imageio/core/imopen.py:333, in imopen(uri='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json', io_mode='ri', plugin=None, format_hint=None, legacy_mode=True, **kwargs={})
    327         err_msg += (
    328             "\nBased on the extension, the following plugins might add capable backends:\n"
    329             f"{install_candidates}"
    330         )
    332 request.finish()
--> 333 raise err_type(err_msg)
        err_type = <class 'ValueError'>
        err_msg = 'Could not find a backend to open `/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json`` with iomode `ri`.'

ValueError: Could not find a backend to open `/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json`` with iomode `ri`.
/Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:1068: UserWarning: No readers found to try reading /Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml.!

Here is the output from napari --info: (napari-env) user-adm@BR-M-3016296dzne testoutput % napari --info napari: 0.4.15 Platform: macOS-12.2.1-x86_64-i386-64bit System: MacOS 12.2.1 Python: 3.9.10 | packaged by conda-forge | (main, Feb 1 2022, 21:27:48) [Clang 11.1.0 ] Qt: 5.15.2 PyQt5: 5.15.6 NumPy: 1.22.3 SciPy: 1.8.0 Dask: 2022.02.1 VisPy: 0.9.6

OpenGL:

Screens:

Plugins:

dstansby commented 2 years ago

Thanks for reporting, I'll take a look. (p.s. I edited the comment to include the traceback in triple backticks (```) to make it easier to read)

adamltyson commented 2 years ago

@jjtukker could you try pip install brainglobe-napari-io==0.1.5rc0?

jjtukker commented 2 years ago

@jjtukker could you try pip install brainglobe-napari-io==0.1.5rc0?

thanks for the tip, I tried that but for some reason it did not show up in the installed plugins menu. Note I tried this on napari v0.4.11 because this worked for a previous poster (also had to add python.app via conda-forge.

(napari-env) user-adm@BR-M-3016296dzne testoutput % pip install brainglobe-napari-io==0.1.5rc0 Requirement already satisfied: brainglobe-napari-io==0.1.5rc0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (0.1.5rc0) Requirement already satisfied: bg-space in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (0.5.0) Requirement already satisfied: imlib in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (0.1.3) Requirement already satisfied: napari in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (0.4.11) Requirement already satisfied: bg-atlasapi in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (1.0.0) Requirement already satisfied: tifffile>=2020.8.13 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (2022.3.16) Requirement already satisfied: napari-ndtiffs in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (0.1.2) Requirement already satisfied: napari-plugin-engine>=0.1.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from brainglobe-napari-io==0.1.5rc0) (0.2.0) Requirement already satisfied: numpy>=1.19.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from tifffile>=2020.8.13->brainglobe-napari-io==0.1.5rc0) (1.22.3) Requirement already satisfied: click in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (8.0.4) Requirement already satisfied: pandas in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (1.4.1) Requirement already satisfied: tqdm>=4.46.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (4.63.0) Requirement already satisfied: rich in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (12.0.0) Requirement already satisfied: requests in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (2.27.1) Requirement already satisfied: meshio in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (5.3.4) Requirement already satisfied: treelib in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (1.6.1) Requirement already satisfied: scipy in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from bg-space->brainglobe-napari-io==0.1.5rc0) (1.8.0) Requirement already satisfied: natsort in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (8.1.0) Requirement already satisfied: configobj in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (5.0.6) Requirement already satisfied: micrometa in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (0.0.11) Requirement already satisfied: psutil in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (5.9.0) Requirement already satisfied: seaborn in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (0.11.2) Requirement already satisfied: slurmio in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (0.0.6) Requirement already satisfied: scikit-image in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (0.19.2) Requirement already satisfied: PyYAML in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from imlib->brainglobe-napari-io==0.1.5rc0) (6.0) Requirement already satisfied: napari-svg>=0.1.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.1.6) Requirement already satisfied: cachey>=0.2.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.2.1) Requirement already satisfied: imageio>=2.5.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (2.16.1) Requirement already satisfied: magicgui>=0.2.6 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.3.7) Requirement already satisfied: wrapt>=1.11.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (1.14.0) Requirement already satisfied: typing-extensions in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (4.1.1) Requirement already satisfied: pint>=0.17 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.18) Requirement already satisfied: toolz>=0.10.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.11.2) Requirement already satisfied: dask[array]!=2.28.0,>=2.1.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (2022.2.1) Requirement already satisfied: jsonschema>=3.2.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (4.4.0) Requirement already satisfied: pydantic>=1.8.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (1.9.0) Requirement already satisfied: vispy!=0.8.0,>=0.6.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.9.6) Requirement already satisfied: numpydoc>=0.9.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (1.2) Requirement already satisfied: PyOpenGL>=3.1.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (3.1.6) Requirement already satisfied: qtpy>=1.7.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (2.0.1) Requirement already satisfied: superqt>=0.2.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.3.1) Requirement already satisfied: napari-console>=0.0.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (0.0.4) Requirement already satisfied: appdirs>=1.4.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (1.4.4) Requirement already satisfied: Pillow!=7.1.0,!=7.1.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari->brainglobe-napari-io==0.1.5rc0) (9.0.1) Requirement already satisfied: python-dateutil in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari-ndtiffs->brainglobe-napari-io==0.1.5rc0) (2.8.2) Requirement already satisfied: heapdict in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from cachey>=0.2.1->napari->brainglobe-napari-io==0.1.5rc0) (1.0.1) Requirement already satisfied: partd>=0.3.10 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from dask[array]!=2.28.0,>=2.1.0->napari->brainglobe-napari-io==0.1.5rc0) (1.2.0) Requirement already satisfied: packaging>=20.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from dask[array]!=2.28.0,>=2.1.0->napari->brainglobe-napari-io==0.1.5rc0) (21.3) Requirement already satisfied: fsspec>=0.6.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from dask[array]!=2.28.0,>=2.1.0->napari->brainglobe-napari-io==0.1.5rc0) (2022.2.0) Requirement already satisfied: cloudpickle>=1.1.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from dask[array]!=2.28.0,>=2.1.0->napari->brainglobe-napari-io==0.1.5rc0) (2.0.0) Requirement already satisfied: attrs>=17.4.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from jsonschema>=3.2.0->napari->brainglobe-napari-io==0.1.5rc0) (21.4.0) Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from jsonschema>=3.2.0->napari->brainglobe-napari-io==0.1.5rc0) (0.18.1) Requirement already satisfied: docstring-parser in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from magicgui>=0.2.6->napari->brainglobe-napari-io==0.1.5rc0) (0.13) Requirement already satisfied: psygnal>=0.3.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from magicgui>=0.2.6->napari->brainglobe-napari-io==0.1.5rc0) (0.3.3) Requirement already satisfied: ipykernel>=5.2.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (6.9.2) Requirement already satisfied: IPython>=7.7.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (8.1.1) Requirement already satisfied: qtconsole!=4.7.6,>=4.5.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (5.2.2) Requirement already satisfied: sphinx>=1.8 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (4.4.0) Requirement already satisfied: Jinja2>=2.10 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (3.0.3) Requirement already satisfied: kiwisolver in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from vispy!=0.8.0,>=0.6.4->napari->brainglobe-napari-io==0.1.5rc0) (1.4.0) Requirement already satisfied: hsluv in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from vispy!=0.8.0,>=0.6.4->napari->brainglobe-napari-io==0.1.5rc0) (5.0.2) Requirement already satisfied: freetype-py in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from vispy!=0.8.0,>=0.6.4->napari->brainglobe-napari-io==0.1.5rc0) (2.2.0) Requirement already satisfied: six in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from configobj->imlib->brainglobe-napari-io==0.1.5rc0) (1.16.0) Requirement already satisfied: luddite in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from micrometa->imlib->brainglobe-napari-io==0.1.5rc0) (1.0.2) Requirement already satisfied: configparser in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from micrometa->imlib->brainglobe-napari-io==0.1.5rc0) (5.2.0) Requirement already satisfied: pytz>=2020.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from pandas->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (2021.3) Requirement already satisfied: certifi>=2017.4.17 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from requests->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (2021.10.8) Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from requests->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (2.0.12) Requirement already satisfied: idna<4,>=2.5 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from requests->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (3.3) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from requests->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (1.26.9) Requirement already satisfied: commonmark<0.10.0,>=0.9.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from rich->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (0.9.1) Requirement already satisfied: pygments<3.0.0,>=2.6.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from rich->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (2.11.2) Requirement already satisfied: PyWavelets>=1.1.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from scikit-image->imlib->brainglobe-napari-io==0.1.5rc0) (1.3.0) Requirement already satisfied: networkx>=2.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from scikit-image->imlib->brainglobe-napari-io==0.1.5rc0) (2.7.1) Requirement already satisfied: matplotlib>=2.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from seaborn->imlib->brainglobe-napari-io==0.1.5rc0) (3.5.1) Requirement already satisfied: future in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from treelib->bg-atlasapi->brainglobe-napari-io==0.1.5rc0) (0.18.2) Requirement already satisfied: debugpy<2.0,>=1.0.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (1.5.1) Requirement already satisfied: traitlets<6.0,>=5.1.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (5.1.1) Requirement already satisfied: jupyter-client<8.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (7.1.2) Requirement already satisfied: tornado<7.0,>=4.2 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (6.1) Requirement already satisfied: matplotlib-inline<0.2.0,>=0.1.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.1.3) Requirement already satisfied: appnope in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.1.2) Requirement already satisfied: nest-asyncio in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (1.5.4) Requirement already satisfied: decorator in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (5.1.1) Requirement already satisfied: setuptools>=18.5 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (60.10.0) Requirement already satisfied: pexpect>4.3 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (4.8.0) Requirement already satisfied: jedi>=0.16 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.18.1) Requirement already satisfied: pickleshare in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.7.5) Requirement already satisfied: stack-data in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.2.0) Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (3.0.28) Requirement already satisfied: backcall in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.2.0) Requirement already satisfied: MarkupSafe>=2.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from Jinja2>=2.10->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (2.1.1) Requirement already satisfied: cycler>=0.10 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from matplotlib>=2.2->seaborn->imlib->brainglobe-napari-io==0.1.5rc0) (0.11.0) Requirement already satisfied: pyparsing>=2.2.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from matplotlib>=2.2->seaborn->imlib->brainglobe-napari-io==0.1.5rc0) (3.0.7) Requirement already satisfied: fonttools>=4.22.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from matplotlib>=2.2->seaborn->imlib->brainglobe-napari-io==0.1.5rc0) (4.30.0) Requirement already satisfied: locket in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from partd>=0.3.10->dask[array]!=2.28.0,>=2.1.0->napari->brainglobe-napari-io==0.1.5rc0) (0.2.1) Requirement already satisfied: pyzmq>=17.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from qtconsole!=4.7.6,>=4.5.1->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (22.3.0) Requirement already satisfied: ipython-genutils in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from qtconsole!=4.7.6,>=4.5.1->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.2.0) Requirement already satisfied: jupyter-core in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from qtconsole!=4.7.6,>=4.5.1->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (4.9.2) Requirement already satisfied: sphinxcontrib-qthelp in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.0.3) Requirement already satisfied: snowballstemmer>=1.1 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (2.2.0) Requirement already satisfied: sphinxcontrib-jsmath in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.0.1) Requirement already satisfied: imagesize in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.3.0) Requirement already satisfied: docutils<0.18,>=0.14 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (0.17.1) Requirement already satisfied: importlib-metadata>=4.4 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (4.11.3) Requirement already satisfied: sphinxcontrib-htmlhelp>=2.0.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (2.0.0) Requirement already satisfied: alabaster<0.8,>=0.7 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (0.7.12) Requirement already satisfied: sphinxcontrib-applehelp in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.0.2) Requirement already satisfied: sphinxcontrib-serializinghtml>=1.1.5 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.1.5) Requirement already satisfied: sphinxcontrib-devhelp in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (1.0.2) Requirement already satisfied: babel>=1.3 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (2.9.1) Requirement already satisfied: zipp>=0.5 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from importlib-metadata>=4.4->sphinx>=1.8->numpydoc>=0.9.2->napari->brainglobe-napari-io==0.1.5rc0) (3.7.0) Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from jedi>=0.16->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.8.3) Requirement already satisfied: entrypoints in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from jupyter-client<8.0->ipykernel>=5.2.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.4) Requirement already satisfied: ptyprocess>=0.5 in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from pexpect>4.3->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.7.0) Requirement already satisfied: wcwidth in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.2.5) Requirement already satisfied: asttokens in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from stack-data->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (2.0.5) Requirement already satisfied: executing in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from stack-data->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.8.3) Requirement already satisfied: pure-eval in /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages (from stack-data->IPython>=7.7.0->napari-console>=0.0.4->napari->brainglobe-napari-io==0.1.5rc0) (0.2.2) (napari-env) user-adm@BR-M-3016296dzne testoutput % napari /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/main.py:393: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead. _MACOS_AT_LEAST_CATALINA = sys.platform == "darwin" and StrictVersion( /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/main.py:395: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead. ) > StrictVersion('19.0.0') /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/main.py:396: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead. _MACOS_AT_LEAST_BIG_SUR = sys.platform == "darwin" and StrictVersion( /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/main.py:398: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead. ) > StrictVersion('20.0.0') 12:08:48 ERROR PluginError: Error in plugin 'builtins', hook 'napari_get_reader' Cause was: ValueError('Could not find a backend to open /Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/cellfinder.json`` with iomoderi`.') in file: /Users/user-adm/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/imageio/core/imopen.py at line: 333 author: napari team email: napari-steering-council@googlegroups.com package: napari url: https://napari.org version: 0.4.11

'''

ValueError Traceback (most recent call last) File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:996, in QtViewer.dropEvent(self=, event=) 993 else: 994 filenames.append(url.toString()) --> 996 self.viewer.open(filenames, stack=bool(shift_down)) shift_down = <PyQt5.QtCore.Qt.KeyboardModifiers object at 0x14c109200> filenames = ['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'] self.viewer = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, interactive=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10.0, unit=None), text_overlay=TextOverlay(visible=False, color=<class 'numpy.ndarray'> (4,) float64, font_size=10.0, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x131291dc0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Control-Shift-C': <bound method QtViewer.toggle_console_visibility of <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>>}) self = <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:914, in ViewerModel.open(self=Viewer(axes=Axes(visible=False, labels=True, col...._qt.qt_viewer.QtViewer object at 0x1340820d0>>}), path=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/'], stack=False, plugin=None, layer_type=None, **kwargs={}) 911 added: List[Layer] = [] # for layers that get added 912 for _path in paths: 913 added.extend( --> 914 self._add_layers_with_plugins( added = [] self = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, interactive=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10.0, unit=None), text_overlay=TextOverlay(visible=False, color=<class 'numpy.ndarray'> (4,) float64, font_size=10.0, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x131291dc0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Control-Shift-C': <bound method QtViewer.toggle_console_visibility of <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>>}) _path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/' kwargs = {} plugin = None layer_type = None 915 _path, kwargs, plugin=plugin, layer_type=layer_type 916 ) 917 ) 918 return added

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:959, in ViewerModel._add_layers_with_plugins(self=Viewer(axes=Axes(visible=False, labels=True, col...._qt.qt_viewer.QtViewer object at 0x1340820d0>>}), path_or_paths='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/', kwargs={}, plugin=None, layer_type=None) 927 """Load a path or a list of paths into the viewer using plugins. 928 929 This function is mostly called from self.open_path, where the stack (...) 955 A list of any layers that were added to the viewer. 956 """ 957 from ..plugins.io import read_data_with_plugins --> 959 layer_data, hookimpl = read_data_with_plugins( plugin = None path_or_paths = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/' 960 path_or_paths, plugin=plugin 961 ) 963 # glean layer names from filename. These will be used as fallback 964 # names, if the plugin does not return a name kwarg in their meta dict. 965 filenames = []

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/io.py:136, in read_data_with_plugins(path='/Users/user-adm/Lab/DATA/brainsaw/testbrain/testoutput', plugin=None) 129 message = trans.( 130 'No plugin found capable of reading {repr_path}.', 131 deferred=True, 132 repr_path=repr(path), 133 ) 135 # TODO: change to a warning notification in a later PR --> 136 raise ValueError(message) message = "No plugin found capable of reading '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput'." 138 if errors: 139 names = {repr(e.plugin_name) for e in errors}

ValueError: No plugin found capable of reading '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput'.

ValueError Traceback (most recent call last) File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/_qt/qt_viewer.py:996, in QtViewer.dropEvent(self=, event=) 993 else: 994 filenames.append(url.toString()) --> 996 self.viewer.open(filenames, stack=bool(shift_down)) shift_down = <PyQt5.QtCore.Qt.KeyboardModifiers object at 0x1593c4350> filenames = ['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml'] self.viewer = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, interactive=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10.0, unit=None), text_overlay=TextOverlay(visible=False, color=<class 'numpy.ndarray'> (4,) float64, font_size=10.0, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x131291dc0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Control-Shift-C': <bound method QtViewer.toggle_console_visibility of <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>>}) self = <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:914, in ViewerModel.open(self=Viewer(axes=Axes(visible=False, labels=True, col...._qt.qt_viewer.QtViewer object at 0x1340820d0>>}), path=['/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml'], stack=False, plugin=None, layer_type=None, **kwargs={}) 911 added: List[Layer] = [] # for layers that get added 912 for _path in paths: 913 added.extend( --> 914 self._add_layers_with_plugins( added = [] self = Viewer(axes=Axes(visible=False, labels=True, colored=True, dashed=False, arrows=True), camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, interactive=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, size=1, style=<CursorStyle.STANDARD: 'standard'>), dims=Dims(ndim=2, ndisplay=2, last_used=0, range=((0, 2, 1), (0, 2, 1)), current_step=(0, 0), order=(0, 1), axis_labels=('0', '1')), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], scale_bar=ScaleBar(visible=False, colored=False, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10.0, unit=None), text_overlay=TextOverlay(visible=False, color=<class 'numpy.ndarray'> (4,) float64, font_size=10.0, position=<TextOverlayPosition.TOP_LEFT: 'top_left'>, text=''), help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x131291dc0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Control-Shift-C': <bound method QtViewer.toggle_console_visibility of <napari._qt.qt_viewer.QtViewer object at 0x1340820d0>>}) _path = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml' kwargs = {} plugin = None layer_type = None 915 _path, kwargs, plugin=plugin, layer_type=layer_type 916 ) 917 ) 918 return added

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/components/viewer_model.py:959, in ViewerModel._add_layers_with_plugins(self=Viewer(axes=Axes(visible=False, labels=True, col...._qt.qt_viewer.QtViewer object at 0x1340820d0>>}), path_or_paths='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml', kwargs={}, plugin=None, layer_type=None) 927 """Load a path or a list of paths into the viewer using plugins. 928 929 This function is mostly called from self.open_path, where the stack (...) 955 A list of any layers that were added to the viewer. 956 """ 957 from ..plugins.io import read_data_with_plugins --> 959 layer_data, hookimpl = read_data_with_plugins( plugin = None path_or_paths = '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml' 960 path_or_paths, plugin=plugin 961 ) 963 # glean layer names from filename. These will be used as fallback 964 # names, if the plugin does not return a name kwarg in their meta dict. 965 filenames = []

File ~/opt/anaconda3/envs/napari-env/lib/python3.9/site-packages/napari/plugins/io.py:136, in read_data_with_plugins(path='/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cellclassification.xml', plugin=None) 129 message = trans.( 130 'No plugin found capable of reading {repr_path}.', 131 deferred=True, 132 repr_path=repr(path), 133 ) 135 # TODO: change to a warning notification in a later PR --> 136 raise ValueError(message) message = "No plugin found capable of reading '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml'." 138 if errors: 139 names = {repr(e.plugin_name) for e in errors} ''' ValueError: No plugin found capable of reading '/Users/user-adm/Lab/DATA/brainsaw/test_brain/testoutput/points/cell_classification.xml'.

adamltyson commented 2 years ago

Could you try updating napari? The reason for all these issues is a napari/napari plugin engine version mismatch.

jjtukker commented 2 years ago

ok made a fresh env with fresh pip install "napari[all]" (I am assuming this will install the latest version) and pip install brainglobe-napari-io==0.1.5rc0 It works now! The plugin is detected, and when I drag-and-drop the output folder I get a menu asking to choose a reader (options brainglobe-napari-io and napari) and choosing the former, it works very nicely! Only the point size of the cells does not seem to be changeable (color and shape yes, size no), but that is a different and minor issue I can live with. Many thanks. Just FYI here is the napari info: napari: 0.4.15 Platform: macOS-12.2.1-x86_64-i386-64bit System: MacOS 12.2.1 Python: 3.9.10 | packaged by conda-forge | (main, Feb 1 2022, 21:27:48) [Clang 11.1.0 ] Qt: 5.15.2 PyQt5: 5.15.6 NumPy: 1.22.3 SciPy: 1.8.0 Dask: 2022.02.1 VisPy: 0.9.6

OpenGL:

Screens:

Plugins: