-
Notifications
You must be signed in to change notification settings - Fork 23
Description
Hello,
Thank you very much for creating this tool! I had been using it on Mac with no issues but have recently switched to a Windows laptop and running into the following issue. Would greatly appreciate any help with it.
When I click on the plugin on Napari, I get "Key error: 'fa'".
Thank you in advance for your help!
Software: Windows 11
napari version 0.6.5
Python 3.11.13
Here is what the traceback says:
KeyError Traceback (most recent call last)
File ~\anaconda3\envs\ultrack\Lib\site-packages\app_model\backends\qt_qaction.py:59, in QCommandAction._on_triggered(self=QMenuItemAction(MenuItem(when=None, group='3_plu...='Ultrack (ultrack)'))), 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 = 'ultrack:Ultrack'
self = QMenuItemAction(MenuItem(when=None, group='3_plugin_contributions', order=None, command=CommandRule(id='ultrack:Ultrack', title='Ultrack (ultrack)', 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 0x000001DA44EFCA40>, full_name='Ultrack (ultrack)'))), alt=None), app='napari')
self._app = Application('napari')
File ~\anaconda3\envs\ultrack\Lib\site-packages\app_model\registries_commands_reg.py:247, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x1da4353a250 (158 commands)>, id='ultrack:Ultrack', 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 ~\anaconda3\envs\ultrack\Lib\site-packages\app_model\registries_commands_reg.py:242, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x1da4353a250 (158 commands)>, id='ultrack:Ultrack', execute_asynchronously=False, *args=(), **kwargs={})
240 future: Future = Future()
241 try:
--> 242 future.set_result(cmd(*args, **kwargs))
future = <Future at 0x1da51794310 state=pending>
cmd = <function Store.inject.._inner.._exec at 0x000001DA517868E0>
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 ~\anaconda3\envs\ultrack\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 0x000001DA51786980>
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 ~\anaconda3\envs\ultrack\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='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')>
func = functools.partial(<function _toggle_or_get_widget at 0x000001DA44EFC9A0>, plugin='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')
bound.arguments = {'plugin': 'ultrack', 'widget_name': 'Ultrack', 'full_name': 'Ultrack (ultrack)'} 805 except TypeError as e:
806 if "missing" not in e.args[0]:
File ~\anaconda3\envs\ultrack\Lib\site-packages\napari_qt_qplugins_qnpe2.py:352, in _toggle_or_get_widget(plugin='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')
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=(np.float64(0.0), np.float64(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 0x000001DA43718360>], mouse_double_click_callbacks=[<function double_click_to_zoom at 0x000001DA437182C0>], mouse_wheel_callbacks=[<function dims_scroll at 0x000001DA43718220>], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})}
widget_callable = <class 'ultrack.widgets.ultrackwidget.ultrackwidget.UltrackWidget'>
full_name = 'Ultrack (ultrack)'
File ~\anaconda3\envs\ultrack\Lib\site-packages\ultrack\widgets\ultrackwidget\ultrackwidget.py:88, in UltrackWidget.init(self=<ultrack.widgets.ultrackwidget.ultrackwidget.UltrackWidget object>, viewer=Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoo...use_drag_gen={}, _mouse_wheel_gen={}, _keymap={}))
86 self.workflow = UltrackWorkflow(viewer)
87 self._cb_images = {}
---> 88 self._data_forms = DataForms(self._on_change_config)
self = <ultrack.widgets.ultrackwidget.ultrackwidget.UltrackWidget object at 0x000001DA658A1BD0> 90 self._config_valid = True
91 self._all_images_are_valid = False
File ~\anaconda3\envs\ultrack\Lib\site-packages\ultrack\widgets\ultrackwidget\data_forms.py:85, in DataForms.init(self=<ultrack.widgets.ultrackwidget.data_forms.DataForms object>, on_change_any_input=>)
83 self._additional_bindings = []
84 self._additional_forms = {}
---> 85 self._setup_forms()
self = <ultrack.widgets.ultrackwidget.data_forms.DataForms object at 0x000001DA51795190> 86 self.load_config(MainConfig())
File ~\anaconda3\envs\ultrack\Lib\site-packages\ultrack\widgets\ultrackwidget\data_forms.py:103, in DataForms._setup_forms(self=<ultrack.widgets.ultrackwidget.data_forms.DataForms object>)
97 additional_options = json.load(opts)
98 forms_metadata["additional_options"] = {
99 "title": "Pre-processing",
100 "fields": additional_options,
101 }
--> 103 self._create_form("additional_options", forms_metadata["additional_options"])
forms_metadata = {'segmentation': {'title': 'Segmentation', 'fields': {'threshold': {'label': 'Threshold', 'type': 'number', 'step': 'any', 'required': True, 'tooltip': 'Threshold value for the segmentation algorithm', 'validationMessage': 'Please enter a valid threshold value (number)'}, 'min_area': {'label': 'Min Area', 'type': 'number', 'min': 0, 'required': True, 'tooltip': 'Minimum area for detected objects', 'validationMessage': 'Please enter a valid minimum area value (number)'}, 'max_area': {'label': 'Max Area', 'type': 'number', 'min': 1, 'required': True, 'tooltip': 'Maximum area for detected objects', 'validationMessage': 'Please enter a valid maximum area value (number)'}, 'min_frontier': {'label': 'Min Frontier', 'type': 'number', 'step': 'any', 'required': True, 'tooltip': 'Minimum frontier for detected objects', 'validationMessage': 'Please enter a valid minimum frontier value (number)'}, 'n_workers': {'label': 'Number of Workers', 'type': 'number', 'min': 1, 'required': True, 'tooltip': 'Number of workers to use for segmentation', 'validationMessage': 'Please enter a valid number of workers (> 1)'}}}, 'linking': {'title': 'Linking', 'fields': {'max_distance': {'label': 'Max Distance', 'type': 'number', 'step': 'any', 'min': 0.0, 'required': True, 'tooltip': 'Maximum distance for linking segments', 'validationMessage': 'Please enter a valid maximum distance value (number)'}, 'distance_weight': {'label': 'Distance Weight', 'type': 'number', 'step': 'any', 'min': 0.0, 'required': True, 'tooltip': 'Distance weight for linking', 'validationMessage': 'Please enter a valid distance weight value (number)'}, 'max_neighbors': {'label': 'Max Neighbors', 'type': 'number', 'min': 1, 'required': True, 'tooltip': 'Maximum number of neighbors', 'validationMessage': 'Please enter a valid maximum number of neighbors (> 1)'}, 'n_workers': {'label': 'Number of Workers', 'type': 'number', 'min': 1, 'required': True, 'tooltip': 'Number of workers to use for linking', 'validationMessage': 'Please enter a valid number of workers (> 1)'}}}, 'tracking': {'title': 'Tracking', 'fields': {'appear_weight': {'label': 'Appear Weight', 'type': 'number', 'max': 0.0, 'step': 'any', 'required': True, 'tooltip': 'Appear weight for tracking', 'validationMessage': 'Please enter a valid appear weight value (negative number)'}, 'disappear_weight': {'label': 'Disappear Weight', 'type': 'number', 'max': 0.0, 'step': 'any', 'required': True, 'tooltip': 'Disappear weight for tracking', 'validationMessage': 'Please enter a valid disappear weight value (negative number)'}, 'division_weight': {'label': 'Division Weight', 'type': 'number', 'max': 0.0, 'step': 'any', 'required': True, 'tooltip': 'Division weight for tracking', 'validationMessage': 'Please enter a valid division weight value (negative number)'}, 'window_size': {'label': 'Window Size', 'type': 'number', 'min': 0, 'default': '', 'tooltip': 'Window size for tracking. Blank for the whole movie.', 'validationMessage': 'Please enter a valid window size value (number or 0 for blank)'}, 'overlap_size': {'label': 'Overlap Size', 'type': 'number', 'min': 1, 'required': True, 'tooltip': 'Overlap size for tracking', 'validationMessage': 'Please enter a valid overlap size value (number)'}, 'solution_gap': {'label': 'Solution Gap', 'type': 'number', 'step': 'any', 'required': True, 'tooltip': 'Solution gap for tracking', 'validationMessage': 'Please enter a valid solution gap value (number)'}, 'n_threads': {'label': 'Number of Threads', 'type': 'number', 'min': -1, 'required': True, 'tooltip': 'Number of Threads to use for tracking. -1 for all available threads.', 'validationMessage': 'Please enter a valid number of threads'}}}, 'additional_options': {'title': 'Pre-processing', 'fields': {'label_to_contours_kwargs': {'subform': True, 'title': 'Label to Contours', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'min': 0.0, 'step': 'any', 'tooltip': "Contours smoothing parameter (gaussian blur), contours aren't smoothed if not provided", 'validationMessage': 'Please enter a valid sigma value (number or blank)'}}}, 'detect_foreground_kwargs': {'subform': True, 'title': 'Detect Foreground', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'default': 15.0, 'min': 0.0, 'step': 'any', 'required': True, 'tooltip': 'Sigma used to estimate background, napari layer scale is used to convert Sigma to physical space.', 'validationMessage': 'Please enter a valid sigma value (number)'}, 'remove_hist_mode': {'label': 'Remove Histogram Mode', 'type': 'checkbox', 'default': False, 'required': False, 'tooltip': 'Removes histogram mode before computing otsu threshold, useful when background regions are being detected', 'validationMessage': 'Please enter a valid remove histogram mode value (boolean)'}, 'min_foreground': {'label': 'Min Foreground', 'type': 'number', 'min': 0.0, 'step': 'any', 'default': 0.0, 'required': True, 'tooltip': 'Minimum value of foreground pixels after background subtraction and smoothing', 'validationMessage': 'Please enter a valid min foreground value (number)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. When provided it will be used to compute the foreground mask for each channel separately and merge them', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}}}, 'robust_invert_kwargs': {'subform': True, 'title': 'Robust Invert', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'min': 0.0, 'default': 1.0, 'required': True, 'step': 'any', 'tooltip': 'Sigma used to smooth the image, napari layer scale is used to convert Sigma to physical space.', 'validationMessage': 'Please enter a valid sigma value (number)'}, 'lower_quantile': {'label': 'Lower Quantile', 'type': 'number', 'max': 1.0, 'min': 0.0, 'default': '', 'step': 'any', 'required': False, 'tooltip': 'Lower quantile used to clip the intensities, minimum used when blank', 'validationMessage': 'Please enter a valid lower quantile value (number or blank)'}, 'upper_quantile': {'label': 'Upper Quantile', 'type': 'number', 'max': 1.0, 'min': 0.0, 'step': 'any', 'default': '', 'required': False, 'tooltip': 'Upper quantile used to clip the intensities, maximum used when blank', 'validationMessage': 'Please enter a valid upper quantile value (number or blank)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. When provided it will be used to compute the edges for each channel separately and merge them', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}}}, 'flow_kwargs': {'subform': True, 'title': 'Flow-field estimation', 'fields': {'enable': {'label': 'Enable flow field estimation', 'type': 'checkbox', 'default': False, 'required': True, 'tooltip': 'Enable flow field estimation', 'validationMessage': 'Please enter a valid enable value (boolean)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. If not provided assumes first axis after time', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}, 'im_factor': {'label': 'Image space down scaling factor', 'type': 'number', 'min': 1, 'default': 4, 'required': True, 'step': 'any', 'tooltip': 'Image space down scaling factor, by default 4', 'validationMessage': 'Please enter a valid image factor value (number)'}, 'grid_factor': {'label': 'Grid space down scaling factor', 'type': 'number', 'min': 1, 'default': 4, 'required': True, 'step': 'any', 'tooltip': 'Grid space down scaling factor, by default 4', 'validationMessage': 'Please enter a valid grid factor value (number)'}, 'n_scales': {'label': 'Number of scales', 'type': 'number', 'min': 1, 'default': 2, 'required': True, 'tooltip': 'Number of scales used to estimate the flow field', 'validationMessage': 'Please enter a valid number of scales value (number)'}, 'lr': {'label': 'Learning rate', 'type': 'number', 'min': 0.0, 'default': 0.01, 'required': True, 'step': 'any', 'tooltip': 'Learning rate used to estimate the flow field', 'validationMessage': 'Please enter a valid learning rate value (number)'}, 'num_iterations': {'label': 'Number of iterations', 'type': 'number', 'min': 1, 'default': 2000, 'step': 1, 'required': True, 'tooltip': 'Number of iterations used to estimate the flow field', 'validationMessage': 'Please enter a valid number of iterations value (number)'}}}}}}
forms_metadata["additional_options"] = {'title': 'Pre-processing', 'fields': {'label_to_contours_kwargs': {'subform': True, 'title': 'Label to Contours', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'min': 0.0, 'step': 'any', 'tooltip': "Contours smoothing parameter (gaussian blur), contours aren't smoothed if not provided", 'validationMessage': 'Please enter a valid sigma value (number or blank)'}}}, 'detect_foreground_kwargs': {'subform': True, 'title': 'Detect Foreground', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'default': 15.0, 'min': 0.0, 'step': 'any', 'required': True, 'tooltip': 'Sigma used to estimate background, napari layer scale is used to convert Sigma to physical space.', 'validationMessage': 'Please enter a valid sigma value (number)'}, 'remove_hist_mode': {'label': 'Remove Histogram Mode', 'type': 'checkbox', 'default': False, 'required': False, 'tooltip': 'Removes histogram mode before computing otsu threshold, useful when background regions are being detected', 'validationMessage': 'Please enter a valid remove histogram mode value (boolean)'}, 'min_foreground': {'label': 'Min Foreground', 'type': 'number', 'min': 0.0, 'step': 'any', 'default': 0.0, 'required': True, 'tooltip': 'Minimum value of foreground pixels after background subtraction and smoothing', 'validationMessage': 'Please enter a valid min foreground value (number)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. When provided it will be used to compute the foreground mask for each channel separately and merge them', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}}}, 'robust_invert_kwargs': {'subform': True, 'title': 'Robust Invert', 'fields': {'sigma': {'label': 'Sigma', 'type': 'number', 'min': 0.0, 'default': 1.0, 'required': True, 'step': 'any', 'tooltip': 'Sigma used to smooth the image, napari layer scale is used to convert Sigma to physical space.', 'validationMessage': 'Please enter a valid sigma value (number)'}, 'lower_quantile': {'label': 'Lower Quantile', 'type': 'number', 'max': 1.0, 'min': 0.0, 'default': '', 'step': 'any', 'required': False, 'tooltip': 'Lower quantile used to clip the intensities, minimum used when blank', 'validationMessage': 'Please enter a valid lower quantile value (number or blank)'}, 'upper_quantile': {'label': 'Upper Quantile', 'type': 'number', 'max': 1.0, 'min': 0.0, 'step': 'any', 'default': '', 'required': False, 'tooltip': 'Upper quantile used to clip the intensities, maximum used when blank', 'validationMessage': 'Please enter a valid upper quantile value (number or blank)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. When provided it will be used to compute the edges for each channel separately and merge them', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}}}, 'flow_kwargs': {'subform': True, 'title': 'Flow-field estimation', 'fields': {'enable': {'label': 'Enable flow field estimation', 'type': 'checkbox', 'default': False, 'required': True, 'tooltip': 'Enable flow field estimation', 'validationMessage': 'Please enter a valid enable value (boolean)'}, 'channel_axis': {'label': 'Channel Axis', 'type': 'number', 'min': 0, 'max': 4, 'required': False, 'default': '', 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T, C, Y, X) would have channel_axis=0. If not provided assumes first axis after time', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}, 'im_factor': {'label': 'Image space down scaling factor', 'type': 'number', 'min': 1, 'default': 4, 'required': True, 'step': 'any', 'tooltip': 'Image space down scaling factor, by default 4', 'validationMessage': 'Please enter a valid image factor value (number)'}, 'grid_factor': {'label': 'Grid space down scaling factor', 'type': 'number', 'min': 1, 'default': 4, 'required': True, 'step': 'any', 'tooltip': 'Grid space down scaling factor, by default 4', 'validationMessage': 'Please enter a valid grid factor value (number)'}, 'n_scales': {'label': 'Number of scales', 'type': 'number', 'min': 1, 'default': 2, 'required': True, 'tooltip': 'Number of scales used to estimate the flow field', 'validationMessage': 'Please enter a valid number of scales value (number)'}, 'lr': {'label': 'Learning rate', 'type': 'number', 'min': 0.0, 'default': 0.01, 'required': True, 'step': 'any', 'tooltip': 'Learning rate used to estimate the flow field', 'validationMessage': 'Please enter a valid learning rate value (number)'}, 'num_iterations': {'label': 'Number of iterations', 'type': 'number', 'min': 1, 'default': 2000, 'step': 1, 'required': True, 'tooltip': 'Number of iterations used to estimate the flow field', 'validationMessage': 'Please enter a valid number of iterations value (number)'}}}}}
self = <ultrack.widgets.ultrackwidget.data_forms.DataForms object at 0x000001DA51795190> 104 self._create_form("segmentation", forms_metadata["segmentation"])
105 self._create_form("linking", forms_metadata["linking"])
File ~\anaconda3\envs\ultrack\Lib\site-packages\ultrack\widgets\ultrackwidget\data_forms.py:146, in DataForms._create_form(self=<ultrack.widgets.ultrackwidget.data_forms.DataForms object>, id_form='additional_options', metadata={'fields': {'detect_foreground_kwargs': {'fields': {'channel_axis': {'default': '', 'label': 'Channel Axis', 'max': 4, 'min': 0, 'required': False, 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T...d mask for each channel separately and merge them', 'type': 'number', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}, 'min_foreground': {'default': 0.0, 'label': 'Min Foreground', 'min': 0.0, 'required': True, 'step': 'any', 'tooltip': 'Minimum value of foreground pixels after background subtraction and smoothing', 'type': 'number', 'validationMessage': 'Please enter a valid min foreground value (number)'}, 'remove_hist_mode': {'default': False, 'label': 'Remove Histogram Mode', 'required': False, 'tooltip': 'Removes histogram mode before computing otsu thr...useful when background regions are being detected', 'type': 'checkbox', 'validationMessage': 'Please enter a valid remove histogram mode value (boolean)'}, 'sigma': {'default': 15.0, 'label': 'Sigma', 'min': 0.0, 'required': True, 'step': 'any', 'tooltip': 'Sigma used to estimate background, napari layer scale is used to convert Sigma to physical space.', 'type': 'number', 'validationMessage': 'Please enter a valid sigma value (number)'}}, 'subform': True, 'title': 'Detect Foreground'}, 'flow_kwargs': {'fields': {'enable': {'default': False, 'label': 'Enable flow field estimation', 'required': True, 'tooltip': 'Enable flow field estimation', 'type': 'checkbox', 'validationMessage': 'Please enter a valid enable value (boolean)'}, 'channel_axis': {'default': '', 'label': 'Channel Axis', 'max': 4, 'min': 0, 'required': False, 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T...0`. If not provided assumes first axis after time', 'type': 'number', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}, 'grid_factor': {'default': 4, 'label': 'Grid space down scaling factor', 'min': 1, 'required': True, 'step': 'any', 'tooltip': 'Grid space down scaling factor, by default 4', 'type': 'number', 'validationMessage': 'Please enter a valid grid factor value (number)'}, 'im_factor': {'default': 4, 'label': 'Image space down scaling factor', 'min': 1, 'required': True, 'step': 'any', 'tooltip': 'Image space down scaling factor, by default 4', 'type': 'number', 'validationMessage': 'Please enter a valid image factor value (number)'}, 'lr': {'default': 0.01, 'label': 'Learning rate', 'min': 0.0, 'required': True, 'step': 'any', 'tooltip': 'Learning rate used to estimate the flow field', 'type': 'number', 'validationMessage': 'Please enter a valid learning rate value (number)'}, 'n_scales': {'default': 2, 'label': 'Number of scales', 'min': 1, 'required': True, 'tooltip': 'Number of scales used to estimate the flow field', 'type': 'number', 'validationMessage': 'Please enter a valid number of scales value (number)'}, 'num_iterations': {'default': 2000, 'label': 'Number of iterations', 'min': 1, 'required': True, 'step': 1, 'tooltip': 'Number of iterations used to estimate the flow field', 'type': 'number', 'validationMessage': 'Please enter a valid number of iterations value (number)'}}, 'subform': True, 'title': 'Flow-field estimation'}, 'label_to_contours_kwargs': {'fields': {'sigma': {'label': 'Sigma', 'min': 0.0, 'step': 'any', 'tooltip': "Contours smoothing parameter (gaussian blur), contours aren't smoothed if not provided", 'type': 'number', 'validationMessage': 'Please enter a valid sigma value (number or blank)'}}, 'subform': True, 'title': 'Label to Contours'}, 'robust_invert_kwargs': {'fields': {'channel_axis': {'default': '', 'label': 'Channel Axis', 'max': 4, 'min': 0, 'required': False, 'tooltip': 'Channel axis EXCLUDING TIME (first axis), e.g (T... edges for each channel separately and merge them', 'type': 'number', 'validationMessage': 'Please enter a valid channel axis value (number or blank)'}, 'lower_quantile': {'default': '', 'label': 'Lower Quantile', 'max': 1.0, 'min': 0.0, 'required': False, 'step': 'any', 'tooltip': 'Lower quantile used to clip the intensities, minimum used when blank', 'type': 'number', 'validationMessage': 'Please enter a valid lower quantile value (number or blank)'}, 'sigma': {'default': 1.0, 'label': 'Sigma', 'min': 0.0, 'required': True, 'step': 'any', 'tooltip': 'Sigma used to smooth the image, napari layer scale is used to convert Sigma to physical space.', 'type': 'number', 'validationMessage': 'Please enter a valid sigma value (number)'}, 'upper_quantile': {'default': '', 'label': 'Upper Quantile', 'max': 1.0, 'min': 0.0, 'required': False, 'step': 'any', 'tooltip': 'Upper quantile used to clip the intensities, maximum used when blank', 'type': 'number', 'validationMessage': 'Please enter a valid upper quantile value (number or blank)'}}, 'subform': True, 'title': 'Robust Invert'}}, 'title': 'Pre-processing'})
143 id_field, field_metadata = fields_to_be_added.pop(0)
145 if not field_metadata.get("subform", False):
--> 146 self._create_field(
self = <ultrack.widgets.ultrackwidget.data_forms.DataForms object at 0x000001DA51795190>
layout = <PyQt5.QtWidgets.QVBoxLayout object at 0x000001DA658A2050>
current_subform = 'label_to_contours_kwargs'
id_field = 'sigma'
field_metadata = {'label': 'Sigma', 'type': 'number', 'min': 0.0, 'step': 'any', 'tooltip': "Contours smoothing parameter (gaussian blur), contours aren't smoothed if not provided", 'validationMessage': 'Please enter a valid sigma value (number or blank)'}
id_form = 'additional_options' 147 layout, id_form, id_field, field_metadata, current_subform
148 )
149 else:
150 subgroup = QGroupBox(field_metadata["title"])
File ~\anaconda3\envs\ultrack\Lib\site-packages\ultrack\widgets\ultrackwidget\data_forms.py:189, in DataForms._create_field(self=<ultrack.widgets.ultrackwidget.data_forms.DataForms object>, layout=<PyQt5.QtWidgets.QVBoxLayout object>, id_form='additional_options', id_field='sigma', field_metadata={'label': 'Sigma', 'min': 0.0, 'step': 'any', 'tooltip': "Contours smoothing parameter (gaussian blur), contours aren't smoothed if not provided", 'type': 'number', 'validationMessage': 'Please enter a valid sigma value (number or blank)'}, current_subform='label_to_contours_kwargs')
187 if field_metadata["type"] == "number":
188 label = QLabel(f'{field_metadata["label"]} {chr(0xF059)}')
--> 189 label.setFont(qta.font("fa", 14))
label = <PyQt5.QtWidgets.QLabel object at 0x000001DA658A20E0>
qta = <module 'qtawesome' from 'C:\Users\adamk\anaconda3\envs\ultrack\Lib\site-packages\qtawesome\init.py'> 190 label.setToolTip(field_metadata["tooltip"])
191 layout.addWidget(label)
File ~\anaconda3\envs\ultrack\Lib\site-packages\qtawesome_init_.py:351, in font(prefix='fa', size=14)
331 def font(prefix, size):
332 """
333 Return the font corresponding to the specified prefix.
334
(...) 349
350 """
--> 351 return _instance().font(prefix, size)
prefix = 'fa'
size = 14
File ~\anaconda3\envs\ultrack\Lib\site-packages\qtawesome\iconic_font.py:573, in IconicFont.font(self=<qtawesome.iconic_font.IconicFont object>, prefix='fa', size=14)
571 """Return a QFont corresponding to the given prefix and size."""
572 font = QFont()
--> 573 font.setFamily(self.fontname[prefix])
font = <PyQt5.QtGui.QFont object at 0x000001DA658C66C0>
self.fontname = {'fa5': 'Font Awesome 5 Free Regular', 'fa5s': 'Font Awesome 5 Free Solid', 'fa5b': 'Font Awesome 5 Brands Regular', 'fa6': 'Font Awesome 6 Free Regular', 'fa6s': 'Font Awesome 6 Free Solid', 'fa6b': 'Font Awesome 6 Brands Regular', 'ei': 'elusiveicons', 'mdi': 'Material Design Icons 5.9.55', 'mdi6': 'Material Design Icons', 'ph': 'Phosphor', 'ri': 'remixicon', 'msc': 'codicon'}
prefix = 'fa'
self = <qtawesome.iconic_font.IconicFont object at 0x000001DA658A2290> 574 font.setPixelSize(round(size))
575 if prefix[-1] == "s": # solid style
KeyError: 'fa'