""" EM Embedded - Global Variables and Constants Contains PyVista plotter, simulation data, caches, and constants shared across the EM module. """ import numpy as np import pyvista as pv # Set PyVista to use off-screen rendering for Trame pv.OFF_SCREEN = True __all__ = [ "plotter", "simulation_data", "current_mesh", "data_frames", "X_grids", "Y_grids", "surface_clims", "stop_simulation", "snapshot_times", "z_scale", "GRID_SIZES", "DEFAULT_AXIS_TICKS", "EXCITATION_SURFACE_COLORSCALE", "qpu_ts_cache", "sim_ts_cache", "qpu_cfg_id_counter", ] # --- Constants --- GRID_SIZES = [8, 16, 32, 64, 128, 256, 512] DEFAULT_AXIS_TICKS = (0.0, 0.25, 0.5, 0.75, 1.0) EXCITATION_SURFACE_COLORSCALE = "Turbo" # --- PyVista and Simulation Data --- plotter = pv.Plotter() simulation_data = None current_mesh = None data_frames = None z_scale = 1.0 X_grids = {} # Dictionary: field -> meshgrid X Y_grids = {} # Dictionary: field -> meshgrid Y surface_clims = {} stop_simulation = False # Flag to stop running simulation snapshot_times = None # Times corresponding to saved frames # --- Caches --- # Cache for QPU Plotly export/selection qpu_ts_cache = { "times": None, "series_map": None, "field": None, "fig": None, "positions_by_field": {"All": []}, "key_to_label": {}, "label_to_keys": {}, "nx": None, "unique_fields": [], } # Cache for Simulator Time Series sim_ts_cache = { "fig": None, "field": None, } # Stable id generator for QPU monitor config rows qpu_cfg_id_counter = 1 def new_monitor_cfg(field: str = "Ez", points: str = "(8, 8)") -> dict: """Create a new QPU monitor configuration.""" global qpu_cfg_id_counter cfg = {"id": qpu_cfg_id_counter, "field": field, "points": points} qpu_cfg_id_counter += 1 return cfg def reset_globals(): """Reset global simulation state.""" global simulation_data, current_mesh, data_frames, X_grids, Y_grids global surface_clims, stop_simulation, snapshot_times, z_scale simulation_data = None current_mesh = None data_frames = None X_grids = {} Y_grids = {} surface_clims = {} stop_simulation = False snapshot_times = None z_scale = 1.0 def set_stop_simulation(value: bool): """Set the stop simulation flag.""" global stop_simulation stop_simulation = value