-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
filter.tubeness(img, img, number, double[]) cannot be called #166
Comments
@gselzer There's something super weird going on there. I do not think you are calling the code you think you are calling. 😬 |
It's coming from |
Isn't this |
Oh, yeah, I think you're right. I did have neuroanatomy enabled. But it would still be cool if the SNT Op worked. Unfortunately, our 09:50:57 DEBUG napari-imagej: Creating module...
09:50:57 DEBUG napari-imagej: Preprocessing...
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
File ~/code/imagej/napari-imagej/src/napari_imagej/widgets/result_runner.py:155, in ResultRunner._run_actions_for.<locals>.<lambda>()
150 self.viewer.window.add_dock_widget(widget)
151 widget[0].native.setFocus()
153 buttons = [
154 ActionButton(name="Run", func=lambda: execute_result(modal=True)),
--> 155 ActionButton(name="Widget", func=lambda: execute_result(modal=False)),
ActionButton = <class 'napari_imagej.widgets.result_runner.ActionButton'>
156 ]
158 return buttons
File ~/code/imagej/napari-imagej/src/napari_imagej/widgets/result_runner.py:138, in ResultRunner._run_actions_for.<locals>.execute_result(modal=False)
135 module = ij().module().createModule(moduleInfo)
137 # preprocess using napari GUI
--> 138 func, param_options = functionify_module_execution(
moduleInfo = <java object 'net.imagej.ops.OpListingInfo'>
module = <java object 'net.imagej.ops.OpListingModule'>
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, color=<class 'numpy.ndarray'> (4,) float32, ticks=True, position=<Position.BOTTOM_RIGHT: 'bottom_right'>, font_size=10.0, box=False, box_color=<class 'numpy.ndarray'> (4,) float32, unit=None), text_overlay=TextOverlay(visible=False, color=<class 'numpy.ndarray'> (4,) float32, font_size=10.0, 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 0x7f647568fed0>, transform_drag=<napari.utils.transforms.transforms.Affine object at 0x7f647568ff10>, transform_final=<napari.utils.transforms.transforms.Affine object at 0x7f647568ff90>, transform=<napari.utils.transforms.transforms.Affine object at 0x7f6475698050>, allow_new_selection=True, selected_vertex=None)), help='', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_move at 0x7f646c0437e0>], mouse_drag_callbacks=[<function InteractionBoxMouseBindings.initialize_mouse_events.<locals>.mouse_drag at 0x7f646c043920>], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[<function dims_scroll at 0x7f64787e2d40>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, keymap={'Shift': <function InteractionBoxMouseBindings.initialize_key_events.<locals>.hold_to_lock_aspect_ratio at 0x7f646c042980>, 'Control-Shift-R': <function InteractionBoxMouseBindings._reset_active_layer_affine at 0x7f646c1d2ca0>, 'Control-Shift-A': <function InteractionBoxMouseBindings._transform_active_layer at 0x7f646c1d2c00>, 'Control-L': <function NapariImageJWidget.__init__.<locals>.<lambda> at 0x7f64275ec180>})
self = <napari_imagej.widgets.result_runner.ResultRunner object at 0x7f6427ac6f80>
139 self.viewer, module, moduleInfo
140 )
141 if modal:
142 execute_function_modally(
143 viewer=self.viewer,
144 name=name,
145 func=func,
146 param_options=param_options,
147 )
File ~/code/imagej/napari-imagej/src/napari_imagej/utilities/_module_utils.py:534, in functionify_module_execution(viewer=Viewer(axes=Axes(visible=False, labels=True, col...t.__init__.<locals>.<lambda> at 0x7f64275ec180>}), module=<java object 'net.imagej.ops.OpListingModule'>, info=<java object 'net.imagej.ops.OpListingInfo'>)
529 raise Exception(
530 f"Caught Java Exception\n\n {jstacktrace(exc)}"
531 ) from None
533 # Add metadata for widget creation
--> 534 _add_napari_metadata(module_execute, info, unresolved_inputs)
unresolved_inputs = [<java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>]
module_execute = <function filter.tubeness at 0x7f63d161f600>
info = <java object 'net.imagej.ops.OpListingInfo'>
535 magic_kwargs = _add_scijava_metadata(
536 unresolved_inputs, module_execute.__annotation__
537 )
539 return (module_execute, magic_kwargs)
File ~/code/imagej/napari-imagej/src/napari_imagej/utilities/_module_utils.py:381, in _add_napari_metadata(execute_module=<function filter.tubeness>, info=<java object 'net.imagej.ops.OpListingInfo'>, unresolved_inputs=[<java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>])
378 execute_module.__qualname__ = module_name
380 # Rewrite the function signature to match the module inputs.
--> 381 _modify_function_signature(execute_module, unresolved_inputs, info)
info = <java object 'net.imagej.ops.OpListingInfo'>
execute_module = <function filter.tubeness at 0x7f63d161f600>
unresolved_inputs = [<java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>]
383 # Add the type hints as annotations metadata as well.
384 # Without this, magicgui doesn't pick up on the types.
385 type_hints = {str(i.getName()): type_hint_for(i) for i in unresolved_inputs}
File ~/code/imagej/napari-imagej/src/napari_imagej/utilities/_module_utils.py:275, in _modify_function_signature(function=<function filter.tubeness>, inputs=[<java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>], module_info=<java object 'net.imagej.ops.OpListingInfo'>)
273 # Grab all options after the module inputs
274 inputs = _sink_optional_inputs(inputs)
--> 275 module_params = [_module_param(i) for i in inputs]
inputs = [<java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>, <java object 'org.scijava.module.DefaultMutableModuleItem'>]
276 other_params = [
277 Parameter(
278 i[0],
(...)
283 for i in _napari_module_param_additions(module_info).items()
284 ]
285 all_params = module_params + other_params
File ~/code/imagej/napari-imagej/src/napari_imagej/utilities/_module_utils.py:275, in <listcomp>(.0=<list_iterator object>)
273 # Grab all options after the module inputs
274 inputs = _sink_optional_inputs(inputs)
--> 275 module_params = [_module_param(i) for i in inputs]
i = <java object 'org.scijava.module.DefaultMutableModuleItem'>
276 other_params = [
277 Parameter(
278 i[0],
(...)
283 for i in _napari_module_param_additions(module_info).items()
284 ]
285 all_params = module_params + other_params
File ~/code/imagej/napari-imagej/src/napari_imagej/utilities/_module_utils.py:262, in _module_param(input=<java object 'org.scijava.module.DefaultMutableModuleItem'>)
259 default = _param_default_or_none(input)
260 type_hint = _type_hint_for_module_item(input)
--> 262 return Parameter(name=name, kind=kind, default=default, annotation=type_hint)
name = 'in'
kind = <_ParameterKind.POSITIONAL_OR_KEYWORD: 1>
default = <class 'inspect._empty'>
type_hint = 'napari.layers.Image'
File ~/mambaforge/envs/napari-imagej-dev/lib/python3.11/inspect.py:2715, in Parameter.__init__(self=<class 'inspect.Parameter'> instance, name='in', kind=<_ParameterKind.POSITIONAL_OR_KEYWORD: 1>, default=<class 'inspect._empty'>, annotation='napari.layers.Image')
2713 is_keyword = iskeyword(name) and self._kind is not _POSITIONAL_ONLY
2714 if is_keyword or not name.isidentifier():
-> 2715 raise ValueError('{!r} is not a valid parameter name'.format(name))
name = 'in'
2717 self._name = name
ValueError: 'in' is not a valid parameter name I'm not sure why the parameter name is named |
Okay, I just tried running the ImageJ Ops tubeness filter again, and that one works great. Do you think it is worth trying to get SNT's tubeness Op working too, @ctrueden, or should we just close this issue? |
The same thing happens in Fiji, so I filed morphonets/SNT#173 - let's fix it at the source! |
The stack trace is as follows, obtained when running the
Widget
button for that op:I'm not quite sure why this is happening, but it may not be able to put in the
sigma
parameter, because thatNumber
type is getting matched to an integer widget, when the parameter should be adouble
.We may want to wait on Fiji 2.10/#159 being merged
The text was updated successfully, but these errors were encountered: