-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Describe the bug
I just did a fresh install on Windows. Then, I got the following errors when trying to load the plugin:
AttributeError Traceback (most recent call last)
File ~.conda\envs\sml\lib\site-packages\app_model\backends\qt_qaction.py:59, in QCommandAction._on_triggered(self=QMenuItemAction(MenuItem(when=None, group='3_plu...ncell-segmenter-ml)'))), alt=None), app='napari'), checked=True)
55 def _on_triggered(self, checked: bool) -> None:
56 # execute_command returns a Future, for the sake of eventually being
57 # asynchronous without breaking the API. For now, we call result()
58 # to raise any exceptions.
---> 59 self._app.commands.execute_command(self._command_id).result()
self._command_id = 'allencell-segmenter-ml:Allen Cell Segmenter - ML'
self = QMenuItemAction(MenuItem(when=None, group='3_plugin_contributions', order=None, command=CommandRule(id='allencell-segmenter-ml:Allen Cell Segmenter - ML', title='Allen Cell Segmenter - ML (allencell-segmenter-ml)', category=None, tooltip=None, status_tip=None, icon=None, icon_visible_in_menu=True, enablement=None, short_title=None, toggled=ToggleRule(condition=None, get_current=functools.partial(<function _get_current_dock_status at 0x0000023A767A67A0>, full_name='Allen Cell Segmenter - ML (allencell-segmenter-ml)'))), alt=None), app='napari')
self._app = Application('napari')
File ~.conda\envs\sml\lib\site-packages\app_model\registries_commands_reg.py:247, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x23a767ddb40 (156 commands)>, id='allencell-segmenter-ml:Allen Cell Segmenter - ML', execute_asynchronously=False, *args=(), **kwargs={})
243 except Exception as e:
244 if self._raise_synchronous_exceptions:
245 # note, the caller of this function can also achieve this by
246 # calling future.result() on the returned future object.
--> 247 raise e
248 future.set_exception(e)
250 return future
File ~.conda\envs\sml\lib\site-packages\app_model\registries_commands_reg.py:242, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x23a767ddb40 (156 commands)>, id='allencell-segmenter-ml:Allen Cell Segmenter - ML', execute_asynchronously=False, *args=(), **kwargs={})
240 future: Future = Future()
241 try:
--> 242 future.set_result(cmd(*args, **kwargs))
future = <Future at 0x23a8e584e50 state=pending>
cmd = <function Store.inject.._inner.._exec at 0x0000023A0383CDC0>
args = ()
kwargs = {}
243 except Exception as e:
244 if self._raise_synchronous_exceptions:
245 # note, the caller of this function can also achieve this by
246 # calling future.result() on the returned future object.
File ~.conda\envs\sml\lib\site-packages\in_n_out_store.py:934, in Store.inject_processors.._deco.._exec(*args=(), **kwargs={})
932 @wraps(func)
933 def _exec(*args: P.args, **kwargs: P.kwargs) -> R:
--> 934 result = func(*args, **kwargs)
func = <function Store.inject.._inner.._exec at 0x0000023A0383CEE0>
args = ()
kwargs = {}
935 if result is not None:
936 self.process(
937 result,
938 type_hint=type_hint,
(...)
941 _funcname=getattr(func, "qualname", str(func)),
942 )
File ~.conda\envs\sml\lib\site-packages\in_n_out_store.py:804, in Store.inject.._inner.._exec(*args=(), **kwargs={})
797 logger.debug(
798 " Calling %s with %r (injected %r)",
799 _fname,
800 bound.arguments,
801 _injected_names,
802 )
803 try:
--> 804 result = func(**bound.arguments)
bound = <BoundArguments (plugin='allencell-segmenter-ml', widget_name='Allen Cell Segmenter - ML', full_name='Allen Cell Segmenter - ML (allencell-segmenter-ml)')>
func = functools.partial(<function _toggle_or_get_widget at 0x0000023A767A6710>, plugin='allencell-segmenter-ml', widget_name='Allen Cell Segmenter - ML', full_name='Allen Cell Segmenter - ML (allencell-segmenter-ml)')
bound.arguments = {'plugin': 'allencell-segmenter-ml', 'widget_name': 'Allen Cell Segmenter - ML', 'full_name': 'Allen Cell Segmenter - ML (allencell-segmenter-ml)'}
805 except TypeError as e:
806 if "missing" not in e.args[0]:
File ~.conda\envs\sml\lib\site-packages\napari_qt_qplugins_qnpe2.py:352, in _toggle_or_get_widget(plugin='allencell-segmenter-ml', widget_name='Allen Cell Segmenter - ML', full_name='Allen Cell Segmenter - ML (allencell-segmenter-ml)')
350 if widget_param:
351 kwargs[widget_param] = viewer
--> 352 return widget_callable(**kwargs), full_name
kwargs = {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True, orientation=(<DepthAxisOrientation.TOWARDS: 'towards'>, <VerticalAxisOrientation.DOWN: 'down'>, <HorizontalAxisOrientation.RIGHT: 'right'>)), cursor=Cursor(position=(1.0, 1.0), viewbox=None, scaled=True, style=<CursorStyle.STANDARD: 'standard'>, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), rollable=(True, True), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False, spacing=0.0), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[<function drag_to_zoom at 0x0000023A6C946C20>], mouse_double_click_callbacks=[<function double_click_to_zoom at 0x0000023A6C946B90>], mouse_wheel_callbacks=[<function dims_scroll at 0x0000023A6C9460E0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})}
widget_callable = <class 'allencell_ml_segmenter.main.main_widget.MainWidget'>
full_name = 'Allen Cell Segmenter - ML (allencell-segmenter-ml)'
File ~.conda\envs\sml\lib\site-packages\allencell_ml_segmenter\main\main_widget.py:150, in MainWidget.init(self=<allencell_ml_segmenter.main.main_widget.MainWidget object>, viewer=Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoo...use_drag_gen={}, _mouse_wheel_gen={}, _keymap={}), settings=None)
143 self._training_view: TrainingView = TrainingView(
144 main_model=self._model,
145 viewer=self.viewer,
146 experiments_model=self._experiments_model,
147 training_model=self._training_model,
148 )
149 self._initialize_window(self._training_view, "Training")
--> 150 self._prediction_view: PredictionView = PredictionView(
PredictionView = <class 'allencell_ml_segmenter.prediction.view.PredictionView'>
self = <allencell_ml_segmenter.main.main_widget.MainWidget object at 0x0000023A8DF31990>
self._model = <allencell_ml_segmenter.main.main_model.MainModel object at 0x0000023A8E584EB0>
self._prediction_model = <allencell_ml_segmenter.prediction.model.PredictionModel object at 0x0000023A8E593130>
self._prediction_file_input_model = <allencell_ml_segmenter.core.file_input_model.FileInputModel object at 0x0000023A8E585B10>
self.viewer = <allencell_ml_segmenter.main.viewer.Viewer object at 0x0000023A8E584E20>
151 main_model=self._model,
152 prediction_model=self._prediction_model,
153 file_input_model=self._prediction_file_input_model,
154 viewer=self.viewer,
155 )
156 self._initialize_window(self._prediction_view, "Prediction")
157 self._window_container.currentChanged.connect(self._tab_changed)
File ~.conda\envs\sml\lib\site-packages\allencell_ml_segmenter\prediction\view.py:76, in PredictionView.init(self=<allencell_ml_segmenter.prediction.view.PredictionView object>, main_model=<allencell_ml_segmenter.main.main_model.MainModel object>, prediction_model=<allencell_ml_segmenter.prediction.model.PredictionModel object>, file_input_model=<allencell_ml_segmenter.core.file_input_model.FileInputModel object>, viewer=<allencell_ml_segmenter.main.viewer.Viewer object>, img_data_extractor=<allencell_ml_segmenter.core.image_data_extracto...age_data_extractor.AICSImageDataExtractor object>)
73 self._title.setObjectName("title")
74 layout.addWidget(self._title, alignment=Qt.AlignmentFlag.AlignHCenter)
---> 76 self._file_input_widget: FileInputWidget = FileInputWidget(
FileInputWidget = <class 'allencell_ml_segmenter.core.file_input_widget.FileInputWidget'>
self = <allencell_ml_segmenter.prediction.view.PredictionView object at 0x0000023A8E48AC20>
self._file_input_model = <allencell_ml_segmenter.core.file_input_model.FileInputModel object at 0x0000023A8E585B10>
self._viewer = <allencell_ml_segmenter.main.viewer.Viewer object at 0x0000023A8E584E20>
self._service = <allencell_ml_segmenter.prediction.service.ModelFileService object at 0x0000023A8E587A30>
77 self._file_input_model, self._viewer, self._service
78 )
79 self._file_input_widget.setObjectName("fileInput")
81 # Disabled for V1 chrishu 3/30/24 #274
82 # self._model_input_widget: ModelInputWidget = ModelInputWidget(
83 # self._prediction_model
(...)
86
87 # Dummy divs allow for easy alignment
File ~.conda\envs\sml\lib\site-packages\allencell_ml_segmenter\core\file_input_widget.py:73, in FileInputWidget.init(self=<allencell_ml_segmenter.core.file_input_widget.FileInputWidget object>, model=<allencell_ml_segmenter.core.file_input_model.FileInputModel object>, viewer=<allencell_ml_segmenter.main.viewer.Viewer object>, service=<allencell_ml_segmenter.prediction.service.ModelFileService object>, include_channel_selection=True, mode=<WidgetMode.PREDICTION: 'prediction'>)
67 self.setSizePolicy(
68 QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Maximum
69 )
71 # set up napari event listener for layer changes
72 # this keeps the layer list in our UI updated as the layers are added/deleted from napari
---> 73 self._viewer.subscribe_layers_change_event(
self._viewer = <allencell_ml_segmenter.main.viewer.Viewer object at 0x0000023A8E584E20>
self = <allencell_ml_segmenter.core.file_input_widget.FileInputWidget object at 0x0000023A8E489C60>
74 function=self._update_layer_list
75 )
77 frame: QFrame = QFrame()
78 frame_layout: QVBoxLayout = QVBoxLayout()
File ~.conda\envs\sml\lib\site-packages\allencell_ml_segmenter\main\viewer.py:124, in Viewer.subscribe_layers_change_event(self=<allencell_ml_segmenter.main.viewer.Viewer object>, function=>)
121 def subscribe_layers_change_event(
122 self, function: Callable[[NapariEvent], None]
123 ) -> None:
--> 124 self.viewer.events.layers_change.connect(function)
function = <bound method FileInputWidget._update_layer_list of <allencell_ml_segmenter.core.file_input_widget.FileInputWidget object at 0x0000023A8E489C60>>
self.viewer = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True, orientation=(<DepthAxisOrientation.TOWARDS: 'towards'>, <VerticalAxisOrientation.DOWN: 'down'>, <HorizontalAxisOrientation.RIGHT: 'right'>)), cursor=Cursor(position=(1.0, 1.0), viewbox=None, scaled=True, style=<CursorStyle.STANDARD: 'standard'>, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), rollable=(True, True), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False, spacing=0.0), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[<function drag_to_zoom at 0x0000023A6C946C20>], mouse_double_click_callbacks=[<function double_click_to_zoom at 0x0000023A6C946B90>], mouse_wheel_callbacks=[<function dims_scroll at 0x0000023A6C9460E0>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})
self = <allencell_ml_segmenter.main.viewer.Viewer object at 0x0000023A8E584E20>
File ~.conda\envs\sml\lib\site-packages\napari\utils\events\event.py:966, in EmitterGroup.getattr(self=<napari.utils.events.event.EmitterGroup object>, name='layers_change')
965 def getattr(self, name) -> EventEmitter:
--> 966 return object.getattribute(self, name)
self = <napari.utils.events.event.EmitterGroup object at 0x0000023A76844880>
name = 'layers_change'
AttributeError: 'EmitterGroup' object has no attribute 'layers_change'
Environment (please complete the following information):
- Windows 10 Enterprise
- latest as of 2025.08.29
- latest as of 2025.08.29
- GPU: yes, RTX4000
- CUDA version: 12.8