From 9906e7a626aa67ca77ac8a2b289ab30091362bbc Mon Sep 17 00:00:00 2001 From: ax3l <1353258+ax3l@users.noreply.github.com> Date: Sat, 1 Nov 2025 03:35:11 +0000 Subject: [PATCH 1/3] fix population of distribution values unsure if the mechanisms of state.flush changed on the trame end, but it looks like now it executes only after the function ends and not at the moment that it is called. this 'fix' populates the values on the ui once the state.flush is called. --- .../dashboard/Input/distribution/ui.py | 3 ++- .../Toolbar/file_imports/ui_populator.py | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/python/impactx/dashboard/Input/distribution/ui.py b/src/python/impactx/dashboard/Input/distribution/ui.py index 99cc9c2b6..019a81413 100644 --- a/src/python/impactx/dashboard/Input/distribution/ui.py +++ b/src/python/impactx/dashboard/Input/distribution/ui.py @@ -15,7 +15,7 @@ from ..utils import GeneralFunctions from ..validation import DashboardValidation, errors_tracker from .utils import DistributionFunctions - +from ...Toolbar.file_imports.ui_populator import _apply_distribution_inputs # ----------------------------------------------------------------------------- # Helpful # ----------------------------------------------------------------------------- @@ -62,6 +62,7 @@ def populate_distribution_parameters(): state.selected_distribution_parameters = params errors_tracker.update_simulation_validation_status() + _apply_distribution_inputs() return params diff --git a/src/python/impactx/dashboard/Toolbar/file_imports/ui_populator.py b/src/python/impactx/dashboard/Toolbar/file_imports/ui_populator.py index dc9d1730c..4440e79c8 100644 --- a/src/python/impactx/dashboard/Toolbar/file_imports/ui_populator.py +++ b/src/python/impactx/dashboard/Toolbar/file_imports/ui_populator.py @@ -26,6 +26,19 @@ def on_import_file_change(import_file, **kwargs): state.importing_file = False +def _apply_distribution_inputs(): + """ + Push any cached distribution parameters into the UI. + """ + + imported_params = getattr(state, "imported_distribution_parameters", None) + if imported_params: + for param_name, raw_value in imported_params.items(): + if param_name in state.selected_distribution_parameters: + ctrl.update_distribution_parameter(param_name, raw_value) + state.imported_distribution_parameters = None + + def populate_impactx_simulation_file_to_ui(file) -> None: """ Auto fills the dashboard with parsed inputs. @@ -45,22 +58,21 @@ def populate_impactx_simulation_file_to_ui(file) -> None: if hasattr(state, input_name) and input_name not in non_state_inputs: setattr(state, input_name, input_value) - _populate_distribution_inputs_to_ui(imported_distribution_data) + _prepare_distribution_update(imported_distribution_data) _populate_lattice_config_to_ui(imported_lattice_data) _populate_lattice_config_variables_to_ui(parsed_variables) @staticmethod -def _populate_distribution_inputs_to_ui(parsed_data): +def _prepare_distribution_update(parsed_data): # the below two calls do not call state.change("distribution") or state.change("distribution_type") # since they are both part of a nested state (ie. distribution_type=["Twiss","Quadratic"]). + parameters = parsed_data["parameters"] + state.imported_distribution_parameters = parameters.copy() if parameters else None state.distribution = parsed_data["name"] state.distribution_type = parsed_data["type"] state.flush() # force calls state.change("distribution") and state.change("distribution_type") - for distr_param_name, distr_param_value in parsed_data["parameters"].items(): - ctrl.update_distribution_parameter(distr_param_name, distr_param_value) - @staticmethod def _populate_lattice_config_to_ui(parsed_data): From bb637935e856b7dab78a3a0f393441596e7e4132 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 22:46:58 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/python/impactx/dashboard/Input/distribution/ui.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/python/impactx/dashboard/Input/distribution/ui.py b/src/python/impactx/dashboard/Input/distribution/ui.py index 019a81413..c7580c085 100644 --- a/src/python/impactx/dashboard/Input/distribution/ui.py +++ b/src/python/impactx/dashboard/Input/distribution/ui.py @@ -10,12 +10,13 @@ from ... import ctrl, state, vuetify from ...Input.components import CardBase, CardComponents, InputComponents +from ...Toolbar.file_imports.ui_populator import _apply_distribution_inputs from .. import DashboardDefaults from ..defaults_helper import InputDefaultsHelper from ..utils import GeneralFunctions from ..validation import DashboardValidation, errors_tracker from .utils import DistributionFunctions -from ...Toolbar.file_imports.ui_populator import _apply_distribution_inputs + # ----------------------------------------------------------------------------- # Helpful # ----------------------------------------------------------------------------- From aeb335803edd372ef4e2a9ccd03d4391ae840bfb Mon Sep 17 00:00:00 2001 From: Parthib Roy Date: Mon, 3 Nov 2025 15:45:57 -0800 Subject: [PATCH 3/3] try: event loop before server.start() --- src/python/impactx/dashboard/start.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/python/impactx/dashboard/start.py b/src/python/impactx/dashboard/start.py index 1412616b4..e50b36103 100644 --- a/src/python/impactx/dashboard/start.py +++ b/src/python/impactx/dashboard/start.py @@ -6,6 +6,8 @@ License: BSD-3-Clause-LBNL """ +import asyncio + from . import server, state from .app import application from .Input.defaults import DashboardDefaults @@ -42,6 +44,10 @@ class DashboardApp: def start(self): setup_dashboard() + try: + asyncio.get_running_loop() + except RuntimeError: + asyncio.set_event_loop(asyncio.new_event_loop()) server.start() return 0