bouquet — workflow & logic map

Start with the physics workflow (what happens to the profiles and equilibrium quantities); open the full logic map below to see every config knob, decision gate, and artifact, each anchored to file:line (hover). Scroll to zoom, drag to pan the full map. Snapshot of commit 0fb8e7a.
The physics workflow — GP perturbation → derived quantities → bootstrap → ℓ_i matching → GS solve → archive
bouquet_physics cluster_p0 Inputs        (solid blue = required for its path, dashed = optional) cluster_p1 Baseline (once per slice) cluster_p2 repeat × N ens   (each draw independent) gfile geqdsk ψ (R,Z), p , q , j φ , separatrix recon GS reconstruction (geqdsk path) fit inductive spline, full-Sauter j BS j φ = j ind + j BS ;  match i (1) by secant targets: I p , i gfile->recon kin kinetic profiles + σ( ψ N ) envelopes n e , T e , T i (, n i , ω tor ) p-file or kinetic-fit netCDF kin->recon envel uncertainty envelope σ n , σ T , σ Zeff , σ  +  GP length scales n , T , j kin->envel ids IMAS/OMAS IDS n e , T e , T i , Z eff ;   j ohmic , j BS , j NBI ; p fast ;  equilibrium anchors fsolve forward solve (IMAS/OMAS path) keep IDS j ohmic ;  Sauter j BS reconciliation (diff: j BS,diff = j BS IDS j BS Sauter  |  rescale) anchors: p diff , j φ,diff ;   i target = solved i (1) ids->fsolve lcfs magnetics-only LCFS (separatrix target override) lcfs->fsolve fixed fixed arrays j NBI , j RF , p fast ( ψ N ) rebuild rebuild total current j φ = j ind + s · j BS (+ j BS,diff ) + j NBI + j RF (+ j φ,diff ) fixed->rebuild sigmas explicit σ profiles or diagnostic σ source sigmas->envel quasi quasineutral densities n i = n e ( Z imp Z eff ) / ( Z imp − 1) recon->quasi fsolve->quasi quasi->envel gp GP profile sampling (Gibbs kernel) draw n e , T e , T i , Z eff , j ind ~ GP(baseline, σ, ℓ) within envelopes; SOL included via ψ N,kin grid envel->gp derive recompute derived n i from drawn Z eff (quasineutrality) p tot = Σ a e n a T a + p imp + p fast (+ p diff ) gp->derive pgate P ⟩ within 5% of baseline? derive->pgate pgate->gp resample regrid kinetic → equilibrium regrid (PCHIP) n e , T e , T i , Z eff : ψ N,kin ψ N,eq shape-preserving (monotone, no overshoot) ⇒ clean ∇ n , ∇ T for the Sauter coefficients pgate->regrid yes boot bootstrap recompute (Sauter) j BS = f( n , T , Z eff )   (3 self-consistent iterations) parallel→toroidal: c = 1 / (⟨ R ⟩⟨1/ R ⟩) scale s ~ U(0.99, 1.01) · s 0 regrid->boot smooth near-axis bootstrap repair (shared with the baseline) the solver collapses the innermost surface point of j BS ; shelf-preserving Gaussian blend over the transition ⇒ a σ = 0 draw reproduces the baseline j BS boot->smooth smooth->rebuild limatch i matching (optionally sample target ~ N( i , σ ℓi )) scale j ind + corrective iteration until | i − target| ≤ 5% rebuild->limatch limatch->limatch iterate gssolve TokaMaker free-boundary GS solve isoflux separatrix + I p target coil homotopy: bounds ±5% → ±2% → ±1% (warm-started) VSC pair handles vertical control limatch->gssolve gssolve->gssolve homotopy passes agate accepted? converged, i in band, q 0 ≥ 1 (optional) gssolve->agate eqfsa live-equilibrium capture (this draw's own geometry) F , ⟨1/ R ⟩, ⟨1/ R 2 ⟩, ⟨ B 2 ⟩, q , d V /d ψ , f trap flux-surface averages of the converged solve (no re-solve) gssolve->eqfsa agate->gp reject draw inspec in-spec tag coil drift ≤ 2%;  VSC via quadrature-propagated σ agate->inspec yes archive HDF5 ensemble archive (schema v2) profiles, j components, g-/p-file bytes, coil currents, targets, provenance (config) inspec->archive eqfsa->archive filter post-filtering (non-destructive) boundary RMS ≤ 5 mm;  coil spec ⇒ selected (machine-realizable) sub-ensemble archive->filter idsout IMAS/OMAS IDS export (per draw) j tor exact;  ⟨ j · B ⟩/ B 0 from each draw’s own ⟨1/ R ⟩, ⟨1/ R 2 ⟩, ⟨ B 2 otherwise the baseline flux-geometry ratio is used instead archive->idsout
Stage overview of the code (585 nodes, 814 edges in the full map below) bouquet_overview Configuration Configuration (155 nodes) Input readers (g-file / p-file / IDA) Input readers (g-file / p-file / IDA) (16 nodes) Configuration->Input readers (g-file / p-file / IDA) 4 IMAS/OMAS reader IMAS/OMAS reader (28 nodes) Configuration->IMAS/OMAS reader 1 Baseline & uncertainty resolution Baseline & uncertainty resolution (34 nodes) Configuration->Baseline & uncertainty resolution 5 Bouquet orchestrator / IMAS forward solve Bouquet orchestrator / IMAS forward solve (26 nodes) Configuration->Bouquet orchestrator / IMAS forward solve 3 Per-draw solve (SWB / l_i / homotopy) Per-draw solve (SWB / l_i / homotopy) (64 nodes) Configuration->Per-draw solve (SWB / l_i / homotopy) 5 Input readers (g-file / p-file / IDA)->Configuration 1 Input readers (g-file / p-file / IDA)->IMAS/OMAS reader 1 Input readers (g-file / p-file / IDA)->Baseline & uncertainty resolution 1 Input readers (g-file / p-file / IDA)->Bouquet orchestrator / IMAS forward solve 10 Input readers (g-file / p-file / IDA)->Per-draw solve (SWB / l_i / homotopy) 7 IMAS/OMAS reader->Configuration 1 IMAS/OMAS reader->Input readers (g-file / p-file / IDA) 8 IMAS/OMAS reader->Baseline & uncertainty resolution 5 GS reconstruction GS reconstruction (20 nodes) IMAS/OMAS reader->GS reconstruction 4 IMAS/OMAS reader->Bouquet orchestrator / IMAS forward solve 11 IMAS/OMAS reader->Per-draw solve (SWB / l_i / homotopy) 5 Baseline & uncertainty resolution->Input readers (g-file / p-file / IDA) 1 Baseline & uncertainty resolution->IMAS/OMAS reader 14 Baseline & uncertainty resolution->Bouquet orchestrator / IMAS forward solve 1 Baseline & uncertainty resolution->Per-draw solve (SWB / l_i / homotopy) 9 GS reconstruction->Bouquet orchestrator / IMAS forward solve 4 GS reconstruction->Per-draw solve (SWB / l_i / homotopy) 1 Bouquet orchestrator / IMAS forward solve->Input readers (g-file / p-file / IDA) 8 Bouquet orchestrator / IMAS forward solve->IMAS/OMAS reader 11 Bouquet orchestrator / IMAS forward solve->Baseline & uncertainty resolution 5 Bouquet orchestrator / IMAS forward solve->GS reconstruction 1 Draw loop (GPR sampling) Draw loop (GPR sampling) (19 nodes) Bouquet orchestrator / IMAS forward solve->Per-draw solve (SWB / l_i / homotopy) 5 Archive, filtering & plotting Archive, filtering & plotting (53 nodes) Bouquet orchestrator / IMAS forward solve->Archive, filtering & plotting 6 Draw loop (GPR sampling)->Bouquet orchestrator / IMAS forward solve 1 Draw loop (GPR sampling)->Per-draw solve (SWB / l_i / homotopy) 5 Draw loop (GPR sampling)->Archive, filtering & plotting 12 Per-draw solve (SWB / l_i / homotopy)->Bouquet orchestrator / IMAS forward solve 4 Per-draw solve (SWB / l_i / homotopy)->Draw loop (GPR sampling) 2 Archive, filtering & plotting->IMAS/OMAS reader 2 Archive, filtering & plotting->Bouquet orchestrator / IMAS forward solve 2 Archive, filtering & plotting->Draw loop (GPR sampling) 3 Process-parallel path Process-parallel path (31 nodes) Process-parallel path->Bouquet orchestrator / IMAS forward solve 1 Process-parallel path->Archive, filtering & plotting 2
input (29) knob (149) quantity (139) transform (175) decision (62) artifact (31) dashed edge = control flow
bouquet cluster_0 Configuration cluster_1 Input readers (g-file / p-file / IDA) cluster_2 IMAS/OMAS reader cluster_3 Baseline & uncertainty resolution cluster_4 GS reconstruction cluster_5 Bouquet orchestrator / IMAS forward solve cluster_6 Draw loop (GPR sampling) cluster_7 Per-draw solve (SWB / l_i / homotopy) cluster_8 Archive, filtering & plotting cluster_9 Process-parallel path cfg.filterconfig.inspec_F_max inspec_F_max: float = 0.02 fn.filtering.if abs if abs cfg.filterconfig.inspec_F_max->fn.filtering.if abs cfg.filterconfig.inspec_VSC_max inspec_VSC_max: float = 0.02 cfg.filterconfig.inspec_VSC_max->fn.filtering.if abs cfg.filterconfig.rms_max_mm rms_max_mm: float = 5.0 fn.filtering.if rms_error_mm > config.filtering.rms_max_mm: reject if rms_error_mm > config.filtering.rms_max_mm: reject cfg.filterconfig.rms_max_mm->fn.filtering.if rms_error_mm > config.filtering.rms_max_mm: reject cfg.fixedcomponentsconfig.j_NBI j_NBI: Optional[np.ndarray] = None fn.run.fc.j_NBI or zeros_on_psi_N fc.j_NBI or zeros_on_psi_N cfg.fixedcomponentsconfig.j_NBI->fn.run.fc.j_NBI or zeros_on_psi_N cfg.fixedcomponentsconfig.j_RF j_RF: Optional[np.ndarray] = None fn.run.fc.j_RF or zeros_on_psi_N fc.j_RF or zeros_on_psi_N cfg.fixedcomponentsconfig.j_RF->fn.run.fc.j_RF or zeros_on_psi_N cfg.fixedcomponentsconfig.p_fast p_fast: Optional[np.ndarray] = None fn.run.fc.p_fast or compute_p_fast_from_source fc.p_fast or compute_p_fast_from_source cfg.fixedcomponentsconfig.p_fast->fn.run.fc.p_fast or compute_p_fast_from_source cfg.fixedcomponentsconfig.p_fast_reduction p_fast_reduction: str = "trace" fn.physics.isotropize_fast_pressure isotropize_fast_pressure cfg.fixedcomponentsconfig.p_fast_reduction->fn.physics.isotropize_fast_pressure cfg.fixedcomponentsconfig.psi_N psi_N: Optional[np.ndarray] = None fn.run.fc.psi_N or source_psi_N fc.psi_N or source_psi_N cfg.fixedcomponentsconfig.psi_N->fn.run.fc.psi_N or source_psi_N cfg.generationconfig.accept_anchor_inband accept_anchor_inband: bool = False fn.TokaMaker_interface.if gc.accept_anchor_inband and in_band if gc.accept_anchor_inband and in_band cfg.generationconfig.accept_anchor_inband->fn.TokaMaker_interface.if gc.accept_anchor_inband and in_band cfg.generationconfig.allow_incomplete_pressure allow_incomplete_pressure: bool = False fn.io.imas.if config.generation.allow_incomplete_pressure: skip_pressure_check if config.generation.allow_incomplete_pressure: skip_pressure_check cfg.generationconfig.allow_incomplete_pressure->fn.io.imas.if config.generation.allow_incomplete_pressure: skip_pressure_check cfg.generationconfig.allow_unsafe_workflow allow_unsafe_workflow: bool = False fn.run.if not config.generation.allow_unsafe_workflow: validate_workflow if not config.generation.allow_unsafe_workflow: validate_workflow cfg.generationconfig.allow_unsafe_workflow->fn.run.if not config.generation.allow_unsafe_workflow: validate_workflow cfg.generationconfig.anchor_jtor_to_equilibrium anchor_jtor_to_equilibrium: bool = True fn.run.eq.j_tor - cp.j_tor eq.j_tor - cp.j_tor cfg.generationconfig.anchor_jtor_to_equilibrium->fn.run.eq.j_tor - cp.j_tor cfg.generationconfig.anchor_pressure_to_equilibrium anchor_pressure_to_equilibrium: bool = False fn.run.eq.pressure - p_recon eq.pressure - p_recon cfg.generationconfig.anchor_pressure_to_equilibrium->fn.run.eq.pressure - p_recon cfg.generationconfig.coil_drift coil_drift: float = 0.01 fn.TokaMaker_interface.config.generation.coil_drift config.generation.coil_drift cfg.generationconfig.coil_drift->fn.TokaMaker_interface.config.generation.coil_drift cfg.generationconfig.coil_drift_hard_factor coil_drift_hard_factor: Optional[float] = None fn.TokaMaker_interface.coil_drift * config.generation.coil_drift_hard_factor if ... else None coil_drift * config.generation.coil_drift_hard_factor if ... else None cfg.generationconfig.coil_drift_hard_factor->fn.TokaMaker_interface.coil_drift * config.generation.coil_drift_hard_factor if ... else None cfg.generationconfig.constrain_sawteeth constrain_sawteeth: bool = False fn.TokaMaker_interface.if gc.constrain_sawteeth and q0 < 1.0: reject if gc.constrain_sawteeth and q0 < 1.0: reject cfg.generationconfig.constrain_sawteeth->fn.TokaMaker_interface.if gc.constrain_sawteeth and q0 < 1.0: reject cfg.generationconfig.diagnostic_plots diagnostic_plots: bool = False fn.run.if config.generation.diagnostic_plots: plot_diagnostics if config.generation.diagnostic_plots: plot_diagnostics cfg.generationconfig.diagnostic_plots->fn.run.if config.generation.diagnostic_plots: plot_diagnostics cfg.generationconfig.floor_j_BS floor_j_BS: bool = False fn.run.np.maximum np.maximum cfg.generationconfig.floor_j_BS->fn.run.np.maximum cfg.generationconfig.homotopy_passes homotopy_passes: list = [(0.05,0.10),(0.02,0.05),(0.01,0.01)] fn.TokaMaker_interface.for F_tol, VSC_tol in config.generation.homotopy_passes: ... for F_tol, VSC_tol in config.generation.homotopy_passes: ... cfg.generationconfig.homotopy_passes->fn.TokaMaker_interface.for F_tol, VSC_tol in config.generation.homotopy_passes: ... cfg.generationconfig.isolate_edge_jBS isolate_edge_jBS: bool = True fn.run.isolate_edge_jBS isolate_edge_jBS cfg.generationconfig.isolate_edge_jBS->fn.run.isolate_edge_jBS cfg.generationconfig.jBS_baseline_mode jBS_baseline_mode: str = "diff" fn.run.... ... cfg.generationconfig.jBS_baseline_mode->fn.run.... cfg.generationconfig.jBS_scale_range jBS_scale_range: tuple = (0.99, 1.01) fn.TokaMaker_interface.np.random.uniform np.random.uniform cfg.generationconfig.jBS_scale_range->fn.TokaMaker_interface.np.random.uniform cfg.generationconfig.kinetic_source kinetic_source: str = "fuse" fn.run."ida_hybrid": resample_ida_profiles "ida_hybrid": resample_ida_profiles cfg.generationconfig.kinetic_source->fn.run."ida_hybrid": resample_ida_profiles cfg.generationconfig.l_i_tolerance l_i_tolerance: float = 0.05 fn.TokaMaker_interface.if not abs if not abs cfg.generationconfig.l_i_tolerance->fn.TokaMaker_interface.if not abs cfg.generationconfig.n_equils n_equils: int = 20 fn.TokaMaker_interface.for i_eq in _tqdm for i_eq in _tqdm cfg.generationconfig.n_equils->fn.TokaMaker_interface.for i_eq in _tqdm fn.run.int int cfg.generationconfig.n_equils->fn.run.int cfg.generationconfig.perturb_jind_in_anchor perturb_jind_in_anchor: bool = False fn.run.if config.generation.perturb_jind_in_anchor: apply_gpr_to_anchor_j_ind if config.generation.perturb_jind_in_anchor: apply_gpr_to_anchor_j_ind cfg.generationconfig.perturb_jind_in_anchor->fn.run.if config.generation.perturb_jind_in_anchor: apply_gpr_to_anchor_j_ind cfg.generationconfig.recalculate_j_BS recalculate_j_BS: bool = True fn.run.compute_via_swb compute_via_swb cfg.generationconfig.recalculate_j_BS->fn.run.compute_via_swb cfg.generationconfig.scan_key scan_key: float = 0 fn.run.store_equilibrium store_equilibrium cfg.generationconfig.scan_key->fn.run.store_equilibrium cfg.generationconfig.seed seed: Optional[int] = None fn.TokaMaker_interface.np.random.seed np.random.seed cfg.generationconfig.seed->fn.TokaMaker_interface.np.random.seed cfg.generationconfig.swb_iterations swb_iterations: int = 3 fn.TokaMaker_interface.solve_with_bootstrap solve_with_bootstrap cfg.generationconfig.swb_iterations->fn.TokaMaker_interface.solve_with_bootstrap cfg.generationconfig.workflow workflow: str = "auto" fn.run.resolve_workflow_from_preset resolve_workflow_from_preset cfg.generationconfig.workflow->fn.run.resolve_workflow_from_preset cfg.imassource.LCFS_geqdsk LCFS_geqdsk: Optional[str] = None fn.run.read_geqdsk read_geqdsk cfg.imassource.LCFS_geqdsk->fn.run.read_geqdsk cfg.imassource.ida_path ida_path: Optional[str] = None fn.run.ida_path ida_path cfg.imassource.ida_path->fn.run.ida_path cfg.imassource.ids_path ids_path: str = None fn.io.imas.read_imas read_imas cfg.imassource.ids_path->fn.io.imas.read_imas cfg.imassource.impurity_Z impurity_Z: float = 6.0 fn.io.imas.profiles.compute_ni profiles.compute_ni cfg.imassource.impurity_Z->fn.io.imas.profiles.compute_ni cfg.imassource.time time: Optional[float] = None cfg.imassource.time->fn.io.imas.read_imas cfg.reconstructionsource.cocos cocos: int = 1 fn.baseline.read_geqdsk read_geqdsk cfg.reconstructionsource.cocos->fn.baseline.read_geqdsk cfg.reconstructionsource.geqdsk_path geqdsk_path: str = None cfg.reconstructionsource.geqdsk_path->fn.baseline.read_geqdsk cfg.reconstructionsource.geqdsk_path->fn.run.read_geqdsk cfg.reconstructionsource.impurity_Z impurity_Z: float = 6.0 fn.baseline.profiles.compute_ni profiles.compute_ni cfg.reconstructionsource.impurity_Z->fn.baseline.profiles.compute_ni cfg.reconstructionsource.n_k n_k: int = 5 fn.baseline.spline_fit spline_fit cfg.reconstructionsource.n_k->fn.baseline.spline_fit cfg.reconstructionsource.profile_overrides profile_overrides: dict = {} fn.baseline.... ... cfg.reconstructionsource.profile_overrides->fn.baseline.... cfg.reconstructionsource.profiles_path profiles_path: str = None fn.baseline.read_profiles read_profiles cfg.reconstructionsource.profiles_path->fn.baseline.read_profiles cfg.reconstructionsource.psi_bridge psi_bridge: float = 0.99 fn.baseline.hermite_edge_bridge hermite_edge_bridge cfg.reconstructionsource.psi_bridge->fn.baseline.hermite_edge_bridge cfg.reconstructionsource.psi_pad psi_pad: float = 1e-3 fn.baseline.compute_psi_bounds compute_psi_bounds cfg.reconstructionsource.psi_pad->fn.baseline.compute_psi_bounds cfg.reconstructionsource.rescale_j_BS rescale_j_BS: bool = False fn.baseline.scaling_factor scaling_factor cfg.reconstructionsource.rescale_j_BS->fn.baseline.scaling_factor cfg.reconstructionsource.shelf_psi_N shelf_psi_N: float = 0.0 fn.baseline.source.shelf_psi_N source.shelf_psi_N cfg.reconstructionsource.shelf_psi_N->fn.baseline.source.shelf_psi_N cfg.reconstructionsource.time time: Optional[float] = None fn.io.ida.read_ida read_ida cfg.reconstructionsource.time->fn.io.ida.read_ida cfg.solverconfig.F0 F0: Optional[float] = None fn.run.F0 or eqdsk.F0_ref or ... F0 or eqdsk.F0_ref or ... cfg.solverconfig.F0->fn.run.F0 or eqdsk.F0_ref or ... cfg.solverconfig.coil_reg coil_reg: list = [] cfg.solverconfig.coil_vsc coil_vsc: dict = {"F9A": 1.0, "F9B": -1.0} fn.run.coil_vsc dict unpacked into solve_with_bootstrap coil_vsc dict unpacked into solve_with_bootstrap cfg.solverconfig.coil_vsc->fn.run.coil_vsc dict unpacked into solve_with_bootstrap cfg.solverconfig.isoflux_pts isoflux_pts: Optional[np.ndarray] = None fn.run.isoflux_pts or eqdsk.isoflux_pts isoflux_pts or eqdsk.isoflux_pts cfg.solverconfig.isoflux_pts->fn.run.isoflux_pts or eqdsk.isoflux_pts cfg.solverconfig.isoflux_weights isoflux_weights: Optional[np.ndarray] = None fn.run.isoflux_weights or np.ones isoflux_weights or np.ones cfg.solverconfig.isoflux_weights->fn.run.isoflux_weights or np.ones cfg.solverconfig.mesh_path mesh_path: str = None fn.run.load_gs_mesh load_gs_mesh cfg.solverconfig.mesh_path->fn.run.load_gs_mesh cfg.solverconfig.nthreads nthreads: int = 1 fn.TokaMaker_interface.mygs.solve mygs.solve cfg.solverconfig.nthreads->fn.TokaMaker_interface.mygs.solve cfg.solverconfig.nthreads->fn.run.load_gs_mesh cfg.solverconfig.order order: int = 3 fn.run.GsHandle GsHandle cfg.solverconfig.order->fn.run.GsHandle cfg.solverconfig.region_overrides region_overrides: Optional[dict] = None cfg.source.LCFS_geqdsk LCFS_geqdsk fn.imas.read_imas_geometry read_imas_geometry() cfg.source.LCFS_geqdsk->fn.imas.read_imas_geometry cfg.uncertaintyconfig.aux_baselines aux_baselines: dict = {} fn.TokaMaker_interface.config.uncertainty.aux_baselines.get config.uncertainty.aux_baselines.get cfg.uncertaintyconfig.aux_baselines->fn.TokaMaker_interface.config.uncertainty.aux_baselines.get cfg.uncertaintyconfig.aux_length_scales aux_length_scales: dict = {} fn.TokaMaker_interface.config.uncertainty.aux_length_scales.get config.uncertainty.aux_length_scales.get cfg.uncertaintyconfig.aux_length_scales->fn.TokaMaker_interface.config.uncertainty.aux_length_scales.get cfg.uncertaintyconfig.aux_sigmas aux_sigmas: dict = {} fn.TokaMaker_interface.for name, sigma in config.uncertainty.aux_sigmas.items for name, sigma in config.uncertainty.aux_sigmas.items cfg.uncertaintyconfig.aux_sigmas->fn.TokaMaker_interface.for name, sigma in config.uncertainty.aux_sigmas.items cfg.uncertaintyconfig.ida_path ida_path: Optional[str] = None fn.baseline.unc.ida_path or source.profiles_path unc.ida_path or source.profiles_path cfg.uncertaintyconfig.ida_path->fn.baseline.unc.ida_path or source.profiles_path cfg.uncertaintyconfig.j_ls j_ls: float = 0.25 fn.TokaMaker_interface.GPRPerturber GPRPerturber cfg.uncertaintyconfig.j_ls->fn.TokaMaker_interface.GPRPerturber cfg.uncertaintyconfig.jphi_scalar_sigma jphi_scalar_sigma: float = 0.1 fn.TokaMaker_interface.config.uncertainty.jphi_scalar_sigma * abs config.uncertainty.jphi_scalar_sigma * abs cfg.uncertaintyconfig.jphi_scalar_sigma->fn.TokaMaker_interface.config.uncertainty.jphi_scalar_sigma * abs cfg.uncertaintyconfig.n_ls n_ls: float = 0.5 cfg.uncertaintyconfig.n_ls->fn.TokaMaker_interface.GPRPerturber cfg.uncertaintyconfig.ne_scalar_sigma ne_scalar_sigma: float = 0.05 fn.baseline.sigma_ne or unc.ne_scalar_sigma * ne_baseline sigma_ne or unc.ne_scalar_sigma * ne_baseline cfg.uncertaintyconfig.ne_scalar_sigma->fn.baseline.sigma_ne or unc.ne_scalar_sigma * ne_baseline cfg.uncertaintyconfig.ni_scalar_sigma ni_scalar_sigma: float = 0.1 fn.baseline.sigma_ni or unc.ni_scalar_sigma * ni_baseline sigma_ni or unc.ni_scalar_sigma * ni_baseline cfg.uncertaintyconfig.ni_scalar_sigma->fn.baseline.sigma_ni or unc.ni_scalar_sigma * ni_baseline cfg.uncertaintyconfig.sigma_method sigma_method: str = "percentile" fn.baseline.percentile_or_std percentile_or_std cfg.uncertaintyconfig.sigma_method->fn.baseline.percentile_or_std cfg.uncertaintyconfig.sigma_mode sigma_mode: str = "auto" fn.baseline.resolve_ida_sigmas resolve_ida_sigmas cfg.uncertaintyconfig.sigma_mode->fn.baseline.resolve_ida_sigmas cfg.uncertaintyconfig.sigma_ni_from_ne sigma_ni_from_ne: bool = True fn.baseline.sigma_ne sigma_ne cfg.uncertaintyconfig.sigma_ni_from_ne->fn.baseline.sigma_ne cfg.uncertaintyconfig.sigma_profiles sigma_profiles: dict = {} fn.baseline.unc.sigma_profiles.get unc.sigma_profiles.get cfg.uncertaintyconfig.sigma_profiles->fn.baseline.unc.sigma_profiles.get cfg.uncertaintyconfig.t_ls t_ls: float = 0.4 cfg.uncertaintyconfig.t_ls->fn.TokaMaker_interface.GPRPerturber cfg.uncertaintyconfig.te_scalar_sigma te_scalar_sigma: float = 0.05 fn.baseline.sigma_te or unc.te_scalar_sigma * te_baseline sigma_te or unc.te_scalar_sigma * te_baseline cfg.uncertaintyconfig.te_scalar_sigma->fn.baseline.sigma_te or unc.te_scalar_sigma * te_baseline cfg.uncertaintyconfig.ti_scalar_sigma ti_scalar_sigma: float = 0.1 fn.baseline.sigma_ti or unc.ti_scalar_sigma * ti_baseline sigma_ti or unc.ti_scalar_sigma * ti_baseline cfg.uncertaintyconfig.ti_scalar_sigma->fn.baseline.sigma_ti or unc.ti_scalar_sigma * ti_baseline cfg.uncertaintyconfig.zeff_scalar_sigma zeff_scalar_sigma: float = 0.05 fn.TokaMaker_interface.if unc.zeff_scalar_sigma > 0: perturb_zeff if unc.zeff_scalar_sigma > 0: perturb_zeff cfg.uncertaintyconfig.zeff_scalar_sigma->fn.TokaMaker_interface.if unc.zeff_scalar_sigma > 0: perturb_zeff cls.FilterConfig FilterConfig cls.FixedComponentsConfig FixedComponentsConfig cls.GenerationConfig GenerationConfig cls.ImasSource ImasSource cls.ReconstructionSource ReconstructionSource cls.SolverConfig SolverConfig cls.UncertaintyConfig UncertaintyConfig qty.ne ne (electron density) fn.io.ida.read_ida->qty.ne qty.ni ni (main-ion density) fn.io.ida.read_ida->qty.ni qty.psi_N_kinetic psi_N_kinetic (kinetic grid) fn.io.ida.read_ida->qty.psi_N_kinetic qty.te te (electron temperature) fn.io.ida.read_ida->qty.te qty.ti ti (ion temperature) fn.io.ida.read_ida->qty.ti qty.zeff Zeff (effective charge) fn.io.ida.read_ida->qty.zeff qty.p_fast p_fast (fast-ion pressure) fn.physics.isotropize_fast_pressure->qty.p_fast cfg.generationconfig.jbs_delta_mode jbs_delta_mode gate.jbs_delta_mode spike-delta composition branch cfg.generationconfig.jbs_delta_mode->gate.jbs_delta_mode qty.delta_spike0_raw _delta_spike0_raw (cached sigma=0 SWB reference) cfg.generationconfig.jbs_delta_mode->qty.delta_spike0_raw cfg.generationconfig.capture_live_eq capture_live_eq gate.capture_live_eq capture live equilibrium? cfg.generationconfig.capture_live_eq->gate.capture_live_eq cfg.generationconfig.capture_npsi capture_npsi fn.physics.capture_equilibrium_fsa capture_equilibrium_fsa (live-equilibrium snapshot) cfg.generationconfig.capture_npsi->fn.physics.capture_equilibrium_fsa cfg.generationconfig.capture_exact_inv_R2 capture_exact_inv_R2 cfg.generationconfig.capture_exact_inv_R2->fn.physics.capture_equilibrium_fsa cfg.generationconfig.imas_corrective_jphi imas_corrective_jphi gate.imas_corrective_jphi IMAS corrective j_phi iteration? cfg.generationconfig.imas_corrective_jphi->gate.imas_corrective_jphi cfg.solverconfig.saddle_targets SolverConfig.saddle_targets fn.run.setup_solver setup_solver() cfg.solverconfig.saddle_targets->fn.run.setup_solver cfg.solverconfig.saddle_weights SolverConfig.saddle_weights cfg.solverconfig.saddle_weights->fn.run.setup_solver fn.read_geqdsk read_geqdsk() obj.GEQDSKEquilibrium GEQDSKEquilibrium object fn.read_geqdsk->obj.GEQDSKEquilibrium fn.read_ida read_ida() gate.ida_layout IDA layout (direct vs ensemble)? fn.read_ida->gate.ida_layout fn.read_ida_cer read_ida_cer() obj.IDACERProfiles IDACERProfiles dataclass fn.read_ida_cer->obj.IDACERProfiles fn.read_pfile read_pfile() obj.PFile PFile object fn.read_pfile->obj.PFile fn.reconstruct_equilibrium reconstruct_equilibrium() [geqdsk.py] obj.IDAProfiles IDAProfiles dataclass gate.ida_layout->obj.IDAProfiles gate.profile_file_type Profile file type? gate.profile_file_type->fn.io.ida.read_ida gate.profile_file_type->fn.read_ida gate.profile_file_type->fn.read_pfile fn.io.pfile.read_pfile read_pfile(path) + compute_quasineutrality/compute_zeff gate.profile_file_type->fn.io.pfile.read_pfile gate.time_index Select time slice gate.time_index->fn.read_ida input.gfile G-file (GEQDSK) input.gfile->fn.read_geqdsk input.ida_cdf IDA .cdf (netCDF/HDF5) input.ida_cdf->gate.time_index fn.imas._merge_ida_kinetics _merge_ida_kinetics() [IDA-hybrid only] input.ida_cdf->fn.imas._merge_ida_kinetics input.ida_cer IDA CER channels (carbon) input.ida_cer->fn.read_ida_cer input.pfile P-file (Osborne profiles) input.pfile->fn.read_pfile qty.F0 F0 (R*Bt poloidal function) obj.GEQDSKEquilibrium->qty.F0 qty.Ip_target Ip_target (plasma current) obj.GEQDSKEquilibrium->qty.Ip_target qty.boundary_lcfs boundary_lcfs (separatrix contour) obj.GEQDSKEquilibrium->qty.boundary_lcfs qty.j_phi j_phi (toroidal current density) obj.GEQDSKEquilibrium->qty.j_phi qty.li_target li_target (internal inductance) obj.GEQDSKEquilibrium->qty.li_target qty.p_thermal p_thermal (thermal pressure) obj.GEQDSKEquilibrium->qty.p_thermal qty.psi_N psi_N (normalized flux) obj.GEQDSKEquilibrium->qty.psi_N qty.e_r_cer E_r (radial electric field) obj.IDACERProfiles->qty.e_r_cer obj.IDAProfiles->qty.ne obj.IDAProfiles->qty.ni obj.IDAProfiles->qty.psi_N_kinetic qty.sigma_ne sigma_ne (density uncertainty) obj.IDAProfiles->qty.sigma_ne qty.sigma_ni sigma_ni (ion density uncertainty) obj.IDAProfiles->qty.sigma_ni qty.sigma_te sigma_te (temperature uncertainty) obj.IDAProfiles->qty.sigma_te qty.sigma_ti sigma_ti (temperature uncertainty) obj.IDAProfiles->qty.sigma_ti obj.IDAProfiles->qty.te obj.IDAProfiles->qty.ti obj.IDAProfiles->qty.zeff obj.PFile->qty.ne obj.PFile->qty.ni qty.omega_tor omega_tor (toroidal rotation) obj.PFile->qty.omega_tor obj.PFile->qty.te obj.PFile->qty.ti artifact.baseline Baseline (output) artifact.imas_draw_json Perturbed draw JSON artifact.baseline->artifact.imas_draw_json fn.imas.read_imas_baseline read_imas_baseline() artifact.baseline->fn.imas.read_imas_baseline artifact.geometry Geometry tuple (output) cfg.fixed.j_NBI user override: j_NBI fn.imas._override _override() cfg.fixed.j_NBI->fn.imas._override cfg.fixed.j_RF user override: j_RF cfg.fixed.j_RF->fn.imas._override cfg.fixed.p_fast user override: p_fast cfg.fixed.p_fast->fn.imas._override cfg.generation.allow_incomplete_pressure allow incomplete pressure validation fn.imas._validate_pressure_completeness _validate_pressure_completeness() cfg.generation.allow_incomplete_pressure->fn.imas._validate_pressure_completeness cfg.generation.anchor_jtor_to_equilibrium j_tor anchor to equilibrium cfg.generation.anchor_pressure_to_equilibrium pressure anchor to equilibrium cfg.generation.kinetic_source kinetic profile source cfg.generation.p_fast_reduction p_fast isotropization method cfg.generation.p_fast_reduction->fn.physics.isotropize_fast_pressure fn.ida.read_ida read_ida() [IDA-hybrid only] fn.imas._merge_ida_kinetics->qty.ne fn.imas._merge_ida_kinetics->qty.omega_tor fn.imas._merge_ida_kinetics->qty.te fn.imas._merge_ida_kinetics->qty.ti qty.j_NBI_toroidal j_NBI (toroidal) fn.imas._override->qty.j_NBI_toroidal qty.j_RF j_RF (RF-driven current) fn.imas._override->qty.j_RF fn.imas._override->qty.p_fast fn.imas.read_imas_geometry->artifact.geometry fn.imas.read_imas_geometry->qty.F0 fn.imas.read_imas_geometry->qty.boundary_lcfs fn.physics.effective_impurity_charge effective_impurity_charge() fn.physics.impurity_pressure impurity_pressure() fn.physics.main_ion_density_from_zeff main_ion_density_from_zeff() fn.physics.parallel_to_toroidal parallel_to_toroidal() qty.j_BS j_BS (bootstrap current) fn.physics.parallel_to_toroidal->qty.j_BS qty.j_BS_isolated j_BS_isolated (toroidal) fn.physics.parallel_to_toroidal->qty.j_BS_isolated fn.physics.parallel_to_toroidal->qty.j_NBI_toroidal gate.anchor_jtor j_tor anchor decision qty.jphi_diff j_phi anchor offset gate.anchor_jtor->qty.jphi_diff gate.anchor_pressure Pressure anchor decision qty.p_diff pressure anchor offset gate.anchor_pressure->qty.p_diff gate.fixed_components Fixed component overrides gate.fixed_components->fn.imas._override gate.incomplete_pressure Pressure completeness check gate.incomplete_pressure->fn.imas._validate_pressure_completeness gate.kinetic_source Kinetic source selection gate.kinetic_source->fn.imas._merge_ida_kinetics input.lcfs_gfile LCFS g-file (optional) input.lcfs_gfile->fn.imas.read_imas_geometry input.imas_ids IMAS IDS (dd_sim.json) input.imas_ids->fn.imas.read_imas_geometry input.imas_ids->qty.F0 input.imas_ids->qty.Ip_target qty.aux.E_r radial electric field input.imas_ids->qty.aux.E_r qty.aux.chi_e electron thermal diffusivity input.imas_ids->qty.aux.chi_e qty.aux.chi_i ion thermal diffusivity input.imas_ids->qty.aux.chi_i input.imas_ids->qty.boundary_lcfs qty.j_bootstrap_parallel j_bootstrap (parallel) input.imas_ids->qty.j_bootstrap_parallel qty.j_nbi_parallel j_NBI (parallel, summed) input.imas_ids->qty.j_nbi_parallel qty.j_ohmic_parallel j_ohmic (parallel, unused) input.imas_ids->qty.j_ohmic_parallel qty.j_tor_parallel j_tor (authoritative toroidal) input.imas_ids->qty.j_tor_parallel qty.j_total_parallel j_total (parallel) input.imas_ids->qty.j_total_parallel input.imas_ids->qty.jphi_diff input.imas_ids->qty.li_target input.imas_ids->qty.ne input.imas_ids->qty.ni input.imas_ids->qty.omega_tor qty.p_equilibrium equilibrium pressure input.imas_ids->qty.p_equilibrium input.imas_ids->qty.psi_N input.imas_ids->qty.te input.imas_ids->qty.ti input.imas_ids->qty.zeff cfg.FixedComponentsConfig.j_NBI FixedComponentsConfig.j_NBI fn.baseline._resolve_fixed _resolve_fixed(comp, src_psi, dst_psi) cfg.FixedComponentsConfig.j_NBI->fn.baseline._resolve_fixed cfg.FixedComponentsConfig.j_RF FixedComponentsConfig.j_RF cfg.FixedComponentsConfig.j_RF->fn.baseline._resolve_fixed cfg.FixedComponentsConfig.p_fast FixedComponentsConfig.p_fast cfg.FixedComponentsConfig.p_fast->fn.baseline._resolve_fixed cfg.FixedComponentsConfig.psi_N FixedComponentsConfig.psi_N cfg.FixedComponentsConfig.psi_N->fn.baseline._resolve_fixed cfg.GenerationConfig.recalculate_j_BS GenerationConfig.recalculate_j_BS cfg.GenerationConfig.recalculate_j_BS->qty.j_BS cfg.ReconstructionSource.impurity_Z ReconstructionSource.impurity_Z fn.baseline._load_kinetic_profiles _load_kinetic_profiles(source) cfg.ReconstructionSource.impurity_Z->fn.baseline._load_kinetic_profiles cfg.UncertaintyConfig.aux_baselines UncertaintyConfig.aux_baselines fn.baseline._sigma_zeff_baseline resolve zeff baseline (aux or baseline.Zeff) cfg.UncertaintyConfig.aux_baselines->fn.baseline._sigma_zeff_baseline cfg.UncertaintyConfig.aux_length_scales UncertaintyConfig.aux_length_scales cfg.UncertaintyConfig.aux_sigmas UncertaintyConfig.aux_sigmas gate.sigma_priority_zeff zeff sigma priority: explicit | default auto-inject cfg.UncertaintyConfig.aux_sigmas->gate.sigma_priority_zeff cfg.UncertaintyConfig.ida_path UncertaintyConfig.ida_path gate.sigma_priority_ne ne sigma priority: explicit | IDA | scalar cfg.UncertaintyConfig.ida_path->gate.sigma_priority_ne gate.sigma_priority_ni ni sigma priority: explicit | IDA | scalar cfg.UncertaintyConfig.ida_path->gate.sigma_priority_ni gate.sigma_priority_te te sigma priority: explicit | IDA | scalar cfg.UncertaintyConfig.ida_path->gate.sigma_priority_te gate.sigma_priority_ti ti sigma priority: explicit | IDA | scalar cfg.UncertaintyConfig.ida_path->gate.sigma_priority_ti cfg.UncertaintyConfig.jphi_scalar_sigma UncertaintyConfig.jphi_scalar_sigma qty.sigma_jphi sigma_jphi [A/m^2] cfg.UncertaintyConfig.jphi_scalar_sigma->qty.sigma_jphi cfg.UncertaintyConfig.ne_scalar_sigma UncertaintyConfig.ne_scalar_sigma cfg.UncertaintyConfig.ne_scalar_sigma->gate.sigma_priority_ne cfg.UncertaintyConfig.ni_scalar_sigma UncertaintyConfig.ni_scalar_sigma cfg.UncertaintyConfig.ni_scalar_sigma->gate.sigma_priority_ni cfg.UncertaintyConfig.sigma_ni_from_ne UncertaintyConfig.sigma_ni_from_ne cfg.UncertaintyConfig.sigma_ni_from_ne->gate.sigma_priority_ni cfg.UncertaintyConfig.sigma_profiles UncertaintyConfig.sigma_profiles cfg.UncertaintyConfig.sigma_profiles->gate.sigma_priority_ne cfg.UncertaintyConfig.sigma_profiles->gate.sigma_priority_ni cfg.UncertaintyConfig.sigma_profiles->gate.sigma_priority_te cfg.UncertaintyConfig.sigma_profiles->gate.sigma_priority_ti cfg.UncertaintyConfig.te_scalar_sigma UncertaintyConfig.te_scalar_sigma cfg.UncertaintyConfig.te_scalar_sigma->gate.sigma_priority_te cfg.UncertaintyConfig.ti_scalar_sigma UncertaintyConfig.ti_scalar_sigma cfg.UncertaintyConfig.ti_scalar_sigma->gate.sigma_priority_ti cfg.UncertaintyConfig.zeff_scalar_sigma UncertaintyConfig.zeff_scalar_sigma gate.zeff_channel_enable zeff channel enabled (when zeff_scalar_sigma>0) cfg.UncertaintyConfig.zeff_scalar_sigma->gate.zeff_channel_enable fn.baseline._load_kinetic_profiles->gate.profile_file_type qty.j_NBI j_NBI [A/m^2] (beam-driven) fn.baseline._resolve_fixed->qty.j_NBI fn.baseline._resolve_fixed->qty.j_RF fn.baseline._resolve_fixed->qty.p_fast fn.baseline._resolve_reconstruction _resolve_reconstruction(source, config, mygs) fn.baseline._resolve_reconstruction->fn.baseline._load_kinetic_profiles fn.baseline._resolve_reconstruction->fn.baseline._resolve_fixed fn.baseline.floor_inductive_split floor_inductive_split(j_inductive, j_BS) fn.baseline._resolve_reconstruction->fn.baseline.floor_inductive_split fn.baseline._resolve_reconstruction->qty.Ip_target fn.baseline._resolve_reconstruction->qty.j_BS qty.j_inductive j_inductive (ohmic current) fn.baseline._resolve_reconstruction->qty.j_inductive fn.baseline._resolve_reconstruction->qty.j_phi fn.baseline._resolve_reconstruction->qty.li_target fn.baseline._resolve_reconstruction->qty.psi_N qty.aux_baselines aux_baselines dict fn.baseline._sigma_zeff_baseline->qty.aux_baselines fn.baseline.resolve_baseline resolve_baseline(config, mygs) gate.source_type source type: ImasSource | ReconstructionSource fn.baseline.resolve_baseline->gate.source_type fn.baseline.resolve_uncertainty resolve_uncertainty(config, baseline) fn.baseline.resolve_uncertainty->gate.sigma_priority_ne fn.baseline.resolve_uncertainty->gate.sigma_priority_ni fn.baseline.resolve_uncertainty->gate.sigma_priority_te fn.baseline.resolve_uncertainty->gate.sigma_priority_ti fn.baseline.resolve_uncertainty->gate.sigma_priority_zeff fn.baseline.resolve_uncertainty->qty.aux_baselines qty.aux_sigmas aux_sigmas dict fn.baseline.resolve_uncertainty->qty.aux_sigmas fn.baseline.resolve_uncertainty->qty.sigma_jphi fn.io.imas.read_imas_baseline read_imas_baseline(source, fixed, ...) fn.io.pfile.read_pfile->qty.ne fn.io.pfile.read_pfile->qty.ni fn.io.pfile.read_pfile->qty.psi_N_kinetic fn.io.pfile.read_pfile->qty.te fn.io.pfile.read_pfile->qty.ti fn.io.pfile.read_pfile->qty.zeff gate.sigma_priority_ne->qty.sigma_ne gate.sigma_priority_ni->qty.sigma_ni gate.sigma_priority_te->qty.sigma_te gate.sigma_priority_ti->qty.sigma_ti gate.sigma_priority_zeff->qty.aux_sigmas gate.source_type->fn.baseline._resolve_reconstruction gate.source_type->fn.io.imas.read_imas_baseline gate.zeff_channel_enable->fn.baseline._sigma_zeff_baseline gate.sigma0_floor_zone floor zone? (j_inductive <= 0) fn.baseline.floor_inductive_split->gate.sigma0_floor_zone fn.baseline.floor_inductive_split->qty.j_BS fn.baseline.floor_inductive_split->qty.j_inductive cfg.isolate_edge_jBS isolate_edge_jBS ext.solve_with_bootstrap solve_with_bootstrap() cfg.isolate_edge_jBS->ext.solve_with_bootstrap cfg.isolate_edge_jBS->ext.solve_with_bootstrap gate.j_inductive_decomposition j_inductive storage logic (isolate_edge_jBS) cfg.isolate_edge_jBS->gate.j_inductive_decomposition cfg.n_k n_k (spline order) fn.tmi.fit_inductive_profile fit_inductive_profile cfg.n_k->fn.tmi.fit_inductive_profile cfg.psi_bridge psi_bridge cfg.psi_bridge->fn.tmi.fit_inductive_profile cfg.psi_pad psi_pad fn.sampling.calc_cylindrical_li_proxy calc_cylindrical_li_proxy cfg.psi_pad->fn.sampling.calc_cylindrical_li_proxy fn.tmi._swb_jbs_to_toroidal _swb_jbs_to_toroidal cfg.psi_pad->fn.tmi._swb_jbs_to_toroidal cfg.rescale_j_BS rescale_j_BS cfg.rescale_j_BS->fn.tmi.fit_inductive_profile cfg.shelf_psi_N shelf_psi_N cfg.shelf_psi_N->fn.tmi.fit_inductive_profile qty.j_BS_shelved j_BS after optional shelf cfg.shelf_psi_N->qty.j_BS_shelved ext.corrective_jphi_iteration _corrective_jphi_iteration qty.j_phi_output_corr j_phi_output (corrective) ext.corrective_jphi_iteration->qty.j_phi_output_corr qty.li_proxy_baseline baseline li proxy fn.sampling.calc_cylindrical_li_proxy->qty.li_proxy_baseline fn.tmi._shelf_blend_decompose _shelf_blend_decompose qty.shelf_psi_value shelf_psi (location) fn.tmi._shelf_blend_decompose->qty.shelf_psi_value qty.full_j_BS full_j_BS (full bootstrap, physical) fn.tmi._swb_jbs_to_toroidal->qty.full_j_BS qty.j_dot_B <j.B> (undo SWB projection) fn.tmi._swb_jbs_to_toroidal->qty.j_dot_B qty.spike_profile spike_profile (bootstrap spike) fn.tmi._swb_jbs_to_toroidal->qty.spike_profile qty.j_BS_isolated_raw j_BS_isolated_raw (pre-smoothing) fn.tmi._swb_jbs_to_toroidal->qty.j_BS_isolated_raw fn.tmi.classify_jphi_profile classify_jphi_profile qty.jphi_mode jphi_mode fn.tmi.classify_jphi_profile->qty.jphi_mode qty.spike_metrics spike_metrics fn.tmi.classify_jphi_profile->qty.spike_metrics qty.bs_scale bootstrap scaling factor fn.tmi.fit_inductive_profile->qty.bs_scale qty.ind_scale inductive scaling factor fn.tmi.fit_inductive_profile->qty.ind_scale qty.j_inductive_basis j_inductive_basis (spline fit) fn.tmi.fit_inductive_profile->qty.j_inductive_basis fn.tmi.reconstruct_equilibrium reconstruct_equilibrium gate.jphi_classified gate.jphi_classified qty.j_BS_final j_BS_final gate.jphi_classified->qty.j_BS_final qty.j_phi_corrective_target j_phi_corrective_target gate.jphi_classified->qty.j_phi_corrective_target gate.li_converged gate.li_converged gate.li_converged->fn.tmi.reconstruct_equilibrium qty.ind_factor_opt ind_factor (li-converged) gate.li_converged->qty.ind_factor_opt input.eqdsk EQDSK geqdsk equilibrium input.eqdsk->ext.solve_with_bootstrap input.eqdsk->qty.Ip_target qty.eqdsk_j_tor eqdsk j_tor (baseline) input.eqdsk->qty.eqdsk_j_tor input.eqdsk->qty.li_target input.eqdsk->qty.psi_N input.isoflux Isoflux constraint points & weights qty.quality_metrics quality metrics dict input.isoflux->qty.quality_metrics input.kinetics Kinetic profiles (ne, te, ni, ti, Zeff) input.kinetics->ext.solve_with_bootstrap qty.pressure pressure profile input.kinetics->qty.pressure input.mygs TokaMaker GS solver input.mygs->fn.sampling.calc_cylindrical_li_proxy input.mygs->fn.tmi._swb_jbs_to_toroidal cfg.core_exact_psi core_exact_psi (core-exact inductive fit) cfg.core_exact_psi->fn.tmi.fit_inductive_profile art.h5_archive HDF5 archive {header}.h5 fn.run.export export() art.h5_archive->fn.run.export fn.archive.BouquetArchive BouquetArchive(ref) art.h5_archive->fn.archive.BouquetArchive fn.utils.discover_scan_keys discover_scan_keys(h5path_or_header) art.h5_archive->fn.utils.discover_scan_keys fn.utils.list_equilibrium_indices list_equilibrium_indices(h5path, scan_key) art.h5_archive->fn.utils.list_equilibrium_indices fn.utils.load_baseline_profiles load_baseline_profiles(h5path, scan_key) art.h5_archive->fn.utils.load_baseline_profiles fn.utils.load_config load_config(h5path, scan_key) art.h5_archive->fn.utils.load_config fn.utils.load_equilibrium load_equilibrium(header, count, scan_key, eqdsk_out_dir) art.h5_archive->fn.utils.load_equilibrium cfg.generation.floor_j_BS config.generation.floor_j_BS fn.run._forward_solve_imas_baseline _forward_solve_imas_baseline() cfg.generation.floor_j_BS->fn.run._forward_solve_imas_baseline cfg.generation.isolate_edge_jBS config.generation.isolate_edge_jBS cfg.generation.jBS_baseline_mode config.generation.jBS_baseline_mode gate.jBS_baseline_mode jBS_baseline_mode (diff vs rescale) cfg.generation.jBS_baseline_mode->gate.jBS_baseline_mode gate.workflow_guard workflow validation gate cfg.generation.jBS_baseline_mode->gate.workflow_guard cfg.generation.recalculate_j_BS config.generation.recalculate_j_BS cfg.generation.recalculate_j_BS->fn.run._forward_solve_imas_baseline cfg.source.type source type fn.run._validate_workflow _validate_workflow() cfg.source.type->fn.run._validate_workflow ext.generate_bouquet generate_bouquet() ext.solve_with_bootstrap->qty.full_j_BS qty.j_BS_swb j_BS from solve_with_bootstrap (parallel) ext.solve_with_bootstrap->qty.j_BS_swb ext.solve_with_bootstrap->qty.spike_profile gate.ip_sanity Ip convergence check fn.run._forward_solve_imas_baseline->gate.ip_sanity fn.run._forward_solve_imas_baseline->qty.li_target fn.run._repoint_imas_geometry _repoint_imas_geometry() fn.run._repoint_imas_geometry->qty.boundary_lcfs fn.run._resolve_workflow_preset resolve workflow preset fn.run._resolve_workflow_preset->gate.workflow_guard fn.run.generate generate() fn.run._validate_workflow->fn.run.generate fn.run.run run() [convenience] fn.run.export->fn.run.run fn.run.filter filter() fn.run.filter->fn.run.export fn.run.filter->fn.run.run fn.run.run_slices run_slices() fn.run.filter->fn.run.run_slices fn.run.generate->art.h5_archive fn.run.generate->fn.run.filter fn.run.generate->fn.run.run fn.run.generate->fn.run.run_slices fn.run.prepare_baseline prepare_baseline() fn.run.prepare_baseline->fn.run.run fn.run.prepare_baseline->fn.run.run_slices fn.run.prepare_baseline->qty.Ip_target qty.j_BS_src j_BS_src fn.run.prepare_baseline->qty.j_BS_src fn.run.prepare_baseline->qty.j_inductive fn.run.prepare_baseline->qty.j_phi fn.run.prepare_baseline->qty.ne fn.run.prepare_baseline->qty.ni fn.run.prepare_baseline->qty.psi_N fn.run.prepare_baseline->qty.psi_N_kinetic fn.run.prepare_baseline->qty.te fn.run.prepare_baseline->qty.ti fn.run.prepare_baseline->qty.zeff fn.run.set_slice set_slice() fn.run.set_slice->fn.run._repoint_imas_geometry fn.run.set_slice->fn.run.run_slices fn.run.setup_solver->fn.run.prepare_baseline fn.run.setup_solver->fn.run.run fn.run.setup_solver->fn.run.run_slices fn.run.setup_solver->qty.F0 fn.run.setup_solver->qty.boundary_lcfs gate.ip_sanity->fn.run.generate gate.jBS_baseline_mode->qty.bs_scale qty.jBS_diff jBS_diff [A/m^2] (bootstrap correction) gate.jBS_baseline_mode->qty.jBS_diff qty.j_phi_diff_mode j_phi (diff) gate.jBS_baseline_mode->qty.j_phi_diff_mode qty.j_phi_rescale_mode j_phi (rescale) gate.jBS_baseline_mode->qty.j_phi_rescale_mode fn.run.verify_sigma0_consistency verify_sigma0_consistency() (sigma=0 guard) fn.run.verify_sigma0_consistency->gate.sigma0_floor_zone gate.imas_corrective_jphi->ext.corrective_jphi_iteration cfg.coil_drift coil_drift cfg.constrain_sawteeth constrain_sawteeth gate.sawteeth_q0 gate.sawteeth_q0 (q0 constraint) cfg.constrain_sawteeth->gate.sawteeth_q0 gate.constrain_sawteeth_post Post-check q_0 < 1 (final reject) cfg.constrain_sawteeth->gate.constrain_sawteeth_post gate.constrain_sawteeth_pre Pre-check q_0 < 1 (early reject) cfg.constrain_sawteeth->gate.constrain_sawteeth_pre cfg.jBS_scale_range jBS_scale_range qty.jBS_scales jBS_scales (per-draw samples) cfg.jBS_scale_range->qty.jBS_scales cfg.l_i_tolerance l_i_tolerance gate.li_band gate.li_band (l_i acceptance) cfg.l_i_tolerance->gate.li_band gate.li_acceptance l_i band acceptance gate cfg.l_i_tolerance->gate.li_acceptance cfg.l_i_uncertainty l_i_uncertainty qty.l_i_target_draw l_i_target_draw (per-draw sample) cfg.l_i_uncertainty->qty.l_i_target_draw cfg.n_equils n_equils fn.tmi.generate_bouquet generate_bouquet (batch driver) cfg.n_equils->fn.tmi.generate_bouquet cfg.recalculate_j_BS recalculate_j_BS gate.recalculate_jBS Bootstrap recalculation gate cfg.recalculate_j_BS->gate.recalculate_jBS cfg.seed seed (RNG) cfg.seed->fn.tmi.generate_bouquet fn.sampling.generate_perturbed_GPR generate_perturbed_GPR (GPR sampling) qty.aux_out aux_out (per-draw auxiliary) fn.sampling.generate_perturbed_GPR->qty.aux_out qty.ne_draw ne_draw (per-draw perturb) fn.sampling.generate_perturbed_GPR->qty.ne_draw qty.ni_draw ni_draw (per-draw perturb or derived) fn.sampling.generate_perturbed_GPR->qty.ni_draw qty.te_draw te_draw (per-draw perturb) fn.sampling.generate_perturbed_GPR->qty.te_draw qty.ti_draw ti_draw (per-draw perturb) fn.sampling.generate_perturbed_GPR->qty.ti_draw qty.zeff_draw zeff_draw (per-draw sample) fn.sampling.generate_perturbed_GPR->qty.zeff_draw fn.tmi.perturb_kinetic_equilibrium perturb_kinetic_equilibrium (core loop) gate.li_target_sample sample per-draw l_i target? fn.tmi.perturb_kinetic_equilibrium->gate.li_target_sample qty.diagnostics diagnostics (per-draw metrics) fn.tmi.perturb_kinetic_equilibrium->qty.diagnostics qty.output_jphi output_jphi (per-draw j_phi) fn.tmi.perturb_kinetic_equilibrium->qty.output_jphi fn.utils.store_baseline_profiles store_baseline_profiles (baseline save) art.h5.baseline baseline group (_baseline) fn.utils.store_baseline_profiles->art.h5.baseline art.h5.coil_currents coil_currents + coil_names fn.utils.store_baseline_profiles->art.h5.coil_currents art.h5.eqdsk eqdsk dataset fn.utils.store_baseline_profiles->art.h5.eqdsk art.h5.x_points x_points fn.utils.store_baseline_profiles->art.h5.x_points fn.utils.store_equilibrium store_equilibrium (per-draw save) fn.utils.store_equilibrium->art.h5_archive art.h5.aux aux_* profiles fn.utils.store_equilibrium->art.h5.aux fn.utils.store_equilibrium->art.h5.coil_currents fn.utils.store_equilibrium->art.h5.eqdsk art.h5.filter_flags filter flags (group attrs) fn.utils.store_equilibrium->art.h5.filter_flags art.h5.perturbed_lcfs_ref perturbed_lcfs_ref fn.utils.store_equilibrium->art.h5.perturbed_lcfs_ref art.h5.profiles profiles (psi_N, j_phi, j_BS, ...) fn.utils.store_equilibrium->art.h5.profiles fn.utils.store_equilibrium->art.h5.x_points art.h5.eq_fsa eq_fsa group (per-draw FSA geometry) fn.utils.store_equilibrium->art.h5.eq_fsa gate.draw_accepted gate.draw_accepted (final acceptance) gate.li_band->gate.draw_accepted fn.tmi._corrective_jphi_iteration _corrective_jphi_iteration (residual refinement) gate.li_target_sample->fn.tmi._corrective_jphi_iteration gate.sawteeth_q0->gate.draw_accepted gate.solve_failed gate.solve_failed (solver convergence) gate.solve_failed->gate.draw_accepted progress_callback progress_callback (per-draw tick) progress_callback->fn.tmi.generate_bouquet art.eqdsk_bytes EQDSK file (per-draw) art.perturbed_lcfs_ref LCFS trace (perturbed) art.x_points X-point locations cfg.accept_anchor_inband accept_anchor_inband (Fix-B path) gate.li_loop_variant l_i match strategy gate cfg.accept_anchor_inband->gate.li_loop_variant gate.perturb_jind_in_anchor_loop Fix-C resample loop (perturb_jind_in_anchor) cfg.accept_anchor_inband->gate.perturb_jind_in_anchor_loop cfg.floor_j_BS floor_j_BS (negative bootstrap clipping) cfg.floor_j_BS->qty.spike_profile cfg.max_li_iter max_li_iter (l_i loop cap) cfg.max_pressure_iter max_pressure_iter (pressure loop cap) cfg.max_proxy_draws max_proxy_draws (proxy-draw cap) cfg.mygs mygs (TokaMaker solver) cfg.npsi npsi (grid size) cfg.p_thresh p_thresh (pressure match tolerance) cfg.perturb_jind_in_anchor perturb_jind_in_anchor (Fix-C path) cfg.perturb_jind_in_anchor->gate.li_loop_variant cfg.perturb_jind_in_anchor->gate.perturb_jind_in_anchor_loop cfg.pin_jphi pin_jphi (PIN_JPHI diagnostic) gate.pin_jphi_branch PIN_JPHI diagnostic branch cfg.pin_jphi->gate.pin_jphi_branch cfg.proxy_bias_warmstart proxy_bias_warmstart (cross-draw cache) cfg.recon_eq_snapshot recon_eq_snapshot (DIFF_BS cache) gate.diff_bs_branch DIFF_BS differential-bootstrap branch cfg.recon_eq_snapshot->gate.diff_bs_branch cfg.scale_jBS scale_jBS (bootstrap scale factor) cfg.scale_jBS->ext.solve_with_bootstrap cfg.spike_profile_recon_cached spike_profile_recon_cached (DIFF_BS cache) cfg.spike_profile_recon_cached->gate.diff_bs_branch cfg.swb_iterations swb_iterations (SWB self-consistency) cfg.swb_iterations->ext.solve_with_bootstrap ext.tokamaker_get_stats mygs.get_stats (extract equilibrium state) ext.tokamaker_replace_eq mygs.replace_eq (state restore for DIFF_BS) ext.tokamaker_set_profiles mygs.set_profiles (pressure/current assignment) ext.tokamaker_solve mygs.solve() (GS forward solve) qty.F_prof F (flux function) ext.tokamaker_solve->qty.F_prof qty.Ip_tokamaker Ip (TokaMaker output) ext.tokamaker_solve->qty.Ip_tokamaker qty.li_current li (TokaMaker output) ext.tokamaker_solve->qty.li_current qty.li_final li_final ext.tokamaker_solve->qty.li_final fn.tmi.Ip_flux_integral_vs_target Ip_flux_integral_vs_target (root-find target) gate.skip_hard_bounds_env SKIP_HARD env? fn.tmi._corrective_jphi_iteration->gate.skip_hard_bounds_env fn.tmi._corrective_jphi_iteration->qty.output_jphi fn.tmi._kin_to_eq _kin_to_eq (kinetic grid → equilibrium grid) fn.tmi._vsc_channel_drift_pct VSC drift (common-mode + differential, quadrature sigma) gate.in_spec_verdict in-spec verdict fn.tmi._vsc_channel_drift_pct->gate.in_spec_verdict fn.tmi.calc_cylindrical_li_proxy calc_cylindrical_li_proxy (fast proxy) fn.tmi.calc_realgeom_li_proxy_fast calc_realgeom_li_proxy_fast (real-geom pre-screen) fn.tmi.find_optimal_scale find_optimal_scale (SWB OFT import) qty.final_jphi final_jphi (find_optimal_scale output) fn.tmi.find_optimal_scale->qty.final_jphi qty.final_scale_j0 final_scale_j0 (core j0 scale factor) fn.tmi.find_optimal_scale->qty.final_scale_j0 fn.tmi.generate_perturbed_GPR generate_perturbed_GPR (external import) fn.tmi.get_li_proxy_geometry get_li_proxy_geometry (real-geom prescreen) fn.tmi.recon_anchor_solve recon-anchor forward solve qty.eq_stats eq_stats (TokaMaker equilibrium stats) fn.tmi.recon_anchor_solve->qty.eq_stats gate.diff_bs_branch->ext.solve_with_bootstrap gate.homotopy_early_stop next pass already infeasible? gate.homotopy_early_stop->gate.in_spec_verdict gate.homotopy_feasible homotopy pass converged? gate.qp_saturation QP saturated at coil bound? gate.homotopy_feasible->gate.qp_saturation gate.post_align_failed post-alignment failure? gate.in_spec_verdict->gate.post_align_failed gate.iso_update re-point isoflux to perturbed LCFS? gate.skip_homotopy_env SKIP_HOMOTOPY env? gate.iso_update->gate.skip_homotopy_env qty.j_inductive_consistent j_inductive_consistent (stored inductive) gate.j_inductive_decomposition->qty.j_inductive_consistent gate.li_band_loop l_i band-conditioning loop (rejection sampling) gate.li_acceptance->gate.li_band_loop qty.jphi_perturb jphi_perturb (GPR j_phi candidate) gate.li_band_loop->qty.jphi_perturb gate.li_loop_variant->gate.li_band_loop qty.matched_j_inductive matched_j_inductive (Ip-scaled inductive) gate.perturb_jind_in_anchor_loop->qty.matched_j_inductive gate.pin_jphi_branch->qty.spike_profile gate.post_align_failed->gate.draw_accepted gate.pressure_match pressure-match loop qty.ne_perturb ne_perturb (perturbed density) gate.pressure_match->qty.ne_perturb qty.ni_perturb ni_perturb (perturbed ion density) gate.pressure_match->qty.ni_perturb qty.te_perturb te_perturb (perturbed temperature) gate.pressure_match->qty.te_perturb qty.ti_perturb ti_perturb (perturbed ion temperature) gate.pressure_match->qty.ti_perturb gate.qp_saturation->gate.homotopy_early_stop gate.skip_hard_bounds_env->gate.iso_update gate.skip_homotopy_env->gate.homotopy_feasible gate.skip_iso_env SKIP_ISO env? gate.standard_swb_branch Standard SWB branch gate.zeff_active Zeff-primary channel active qty.Z_imp effective impurity charge gate.zeff_active->qty.Z_imp gate.zeff_active->qty.zeff_draw qty.Zeff Zeff (effective charge profile) qty.Zeff->ext.solve_with_bootstrap qty.Zeff->gate.zeff_active qty.coil_currents Coil currents (per-draw) qty.coil_currents->art.eqdsk_bytes qty.coil_currents->art.perturbed_lcfs_ref qty.in_spec_metrics In-spec boundary metrics qty.input_j_phi input_j_phi (total j_phi baseline) qty.input_j_phi->qty.spike_profile qty.input_jinductive input_jinductive (inductive j_phi component) qty.input_jinductive->qty.jphi_perturb qty.new_jphi new_jphi (total j_phi for anchor) qty.input_jinductive->qty.new_jphi qty.input_jinductive->qty.spike_profile qty.l_i_target l_i_target (internal inductance target) qty.l_i_target->gate.li_acceptance qty.eq_fsa eq_fsa (per-draw flux-surface geometry) fn.physics.capture_equilibrium_fsa->qty.eq_fsa gate.capture_live_eq->fn.physics.capture_equilibrium_fsa gate.jbs_delta_mode->fn.tmi.perturb_kinetic_equilibrium qty.delta_spike0_raw->gate.jbs_delta_mode fn.plotting.plot_bouquet plot_bouquet(h5path, scan_key, mode, ...) art.h5.baseline->fn.plotting.plot_bouquet fn.plotting.plot_coil_currents plot_coil_currents(h5path, scan_key, vsc_coils, ...) art.h5.baseline->fn.plotting.plot_coil_currents fn.plotting.plot_traces plot_traces(h5path, scan_key, li_band, rms_max_mm) art.h5.baseline->fn.plotting.plot_traces fn.filtering._baseline_boundary filtering._baseline_boundary art.h5.baseline->fn.filtering._baseline_boundary fn.filtering.filter_coil_currents filter_coil_currents(h5path, scan_key, F_max_pct, VSC_max_pct, apply, plot) art.h5.coil_currents->fn.filtering.filter_coil_currents art.h5.coil_currents->fn.plotting.plot_coil_currents art.h5.config_json config_json dataset fn.archive.DrawView DrawView(archive, scan_key, count) art.h5.eqdsk->fn.archive.DrawView fn.plotting.plot_geqdsk_bouquet plot_geqdsk_bouquet(geqdsk_path_or_eq, ...) art.h5.eqdsk->fn.plotting.plot_geqdsk_bouquet fn.archive.DrawView.extract DrawView.extract(out_dir, formats) art.h5.eqdsk->fn.archive.DrawView.extract fn.filtering._boundary_devs _boundary_devs(bl_boundary, grp) art.h5.perturbed_lcfs_ref->fn.filtering._boundary_devs art.h5.perturbed_lcfs_ref->fn.plotting.plot_traces art.h5.pfile pfile dataset art.h5.pfile->fn.archive.DrawView fn.plotting.plot_pfile_bouquet plot_pfile_bouquet(pfile_path_or_pf, ...) art.h5.pfile->fn.plotting.plot_pfile_bouquet art.h5.profiles->fn.archive.DrawView fn.gui.EquilibriumBrowser EquilibriumBrowser(h5path) art.h5.profiles->fn.gui.EquilibriumBrowser art.h5.profiles->fn.plotting.plot_bouquet art.h5.x_points->fn.plotting.plot_traces cfg.filtering.F_max_pct F_max_pct cfg.filtering.F_max_pct->fn.filtering.filter_coil_currents cfg.filtering.VSC_max_pct VSC_max_pct cfg.filtering.VSC_max_pct->fn.filtering.filter_coil_currents cfg.filtering.max_max_mm max_max_mm fn.filtering.filter_boundaries filter_boundaries(h5path, scan_key, rms_max_mm, max_max_mm, apply, plot) cfg.filtering.max_max_mm->fn.filtering.filter_boundaries cfg.filtering.rms_max_mm rms_max_mm cfg.filtering.rms_max_mm->fn.filtering.filter_boundaries fn.archive.ScanView ScanView(archive, scan_key) fn.archive.BouquetArchive->fn.archive.ScanView fn.archive.ScanView->fn.archive.DrawView fn.filtering._boundary_devs->fn.filtering.filter_boundaries fn.filtering.export_filtered export_filtered(h5path, out_path, scan_key, selection, overwrite) fn.filtering.export_filtered->art.h5_archive fn.filtering.filter_boundaries->art.h5.filter_flags gate.selected selected (AND of filters) fn.filtering.filter_boundaries->gate.selected fn.filtering.filter_coil_currents->art.h5.filter_flags fn.filtering.filter_coil_currents->gate.selected fn.filtering.read_filter_flags read_filter_flags(h5path, scan_key) fn.filtering.select_indices select_indices(h5path, scan_key, selection) fn.filtering.read_filter_flags->fn.filtering.select_indices fn.filtering.select_indices->fn.archive.ScanView fn.filtering.select_indices->fn.filtering.export_filtered fn.filtering.select_indices->fn.plotting.plot_bouquet fn.io.imas.export_imas_drawset export_imas_drawset(...) fn.filtering.select_indices->fn.io.imas.export_imas_drawset fn.schema.find_bytes_dataset find_bytes_dataset(grp, kind) fn.schema.find_bytes_dataset->fn.archive.DrawView fn.schema.write_profile write_profile(grp, name, data) fn.schema.write_profile->fn.utils.store_baseline_profiles fn.schema.write_profile->fn.utils.store_equilibrium fn.utils.discover_scan_keys->fn.archive.BouquetArchive fn.utils.initialize_equilibrium_database initialize_equilibrium_database(header) fn.utils.initialize_equilibrium_database->fn.utils.store_equilibrium fn.utils.list_equilibrium_indices->fn.archive.ScanView fn.utils.load_baseline_profiles->fn.archive.ScanView fn.utils.load_baseline_profiles->fn.gui.EquilibriumBrowser fn.utils.load_baseline_profiles->fn.plotting.plot_bouquet fn.utils.write_provenance write_provenance(h5path, config, scan_key) fn.utils.write_provenance->art.h5_archive gate.boundary_rms Boundary RMS/max pass/fail gate.boundary_rms->fn.filtering.filter_boundaries gate.coil_spec Coil-spec pass/fail gate.coil_spec->fn.filtering.filter_coil_currents gate.selected->art.h5.filter_flags fn.utils.load_eq_fsa load_eq_fsa(header, count, scan_key) art.h5.eq_fsa->fn.utils.load_eq_fsa fn.io.imas._eq_fsa_geom_on _eq_fsa_geom_on(eq_fsa, psiN_t, B0) fn.utils.load_eq_fsa->fn.io.imas._eq_fsa_geom_on fn.archive.DrawView.profiles_doc DrawView.profiles_doc() fn.utils.load_eq_fsa->fn.archive.DrawView.profiles_doc fn.run.export_bundle export_bundle(out_dir, formats, selection) fn.archive.ScanView.extract ScanView.extract(out_dir, formats, selection) fn.run.export_bundle->fn.archive.ScanView.extract fn.run.export_ids export_ids(out_dir, selection, time, fidelity) fn.run.export_ids->fn.io.imas.export_imas_drawset fn.io.imas.write_imas_draw write_imas_draw(...) fn.io.imas.export_imas_drawset->fn.io.imas.write_imas_draw gate.ids_fidelity IDS fidelity: exact | auto | reconstruct fn.io.imas.write_imas_draw->gate.ids_fidelity fn.io.imas._eq_fsa_geom_on->gate.ids_fidelity fn.physics.toroidal_to_parallel toroidal_to_parallel() fn.physics.toroidal_to_parallel->artifact.imas_draw_json gate.ids_fidelity->artifact.imas_draw_json gate.ids_fidelity->fn.physics.toroidal_to_parallel fn.archive.DrawView.extract->fn.archive.DrawView.profiles_doc fn.archive.ScanView.extract->fn.archive.DrawView.extract art.sbatch_scripts {job_name}_array.sbatch, {job_name}_merge.sbatch, {job_name}_submit.sh art.shard_h5 {out_header}_w{worker_id}.h5 fn.parallel.merge_archives merge_archives(shard_paths, out_header, ...) art.shard_h5->fn.parallel.merge_archives art.slurm_bundle {job_name}_bundle.json fn.parallel._cli _cli(argv) art.slurm_bundle->fn.parallel._cli env.blas_pinning BLAS/OpenMP env pinning fn.run.Bouquet_pipeline Bouquet.setup_solver -> prepare_baseline -> generate env.blas_pinning->fn.run.Bouquet_pipeline env.fd_suppression fd-level stdout/stderr suppression fn.parallel.run_shard run_shard(config, worker_id, n_workers, ...) env.fd_suppression->fn.parallel.run_shard fn.parallel._cli->fn.parallel.merge_archives fn.parallel._cli->fn.parallel.run_shard fn.parallel._derive_seed _derive_seed(seed_base, worker_id, scan_key) fn.parallel._physical_cores _physical_cores() knob.n_workers n_workers fn.parallel._shard_size _shard_size(total, n_workers, worker_id) fn.parallel._warn_multithreaded _warn_multithreaded(threads_per_worker) gate.threads_warn threads_per_worker > 1 warning fn.parallel._warn_multithreaded->gate.threads_warn fn.parallel.emit_slurm_script emit_slurm_script(config, ...) fn.parallel.emit_slurm_script->art.sbatch_scripts fn.parallel.emit_slurm_script->art.slurm_bundle fn.parallel.merge_archives->art.h5_archive fn.parallel.merge_archives->art.h5.config_json fn.parallel.parallel_generate parallel_generate(config, ...) fn.parallel.merge_archives->fn.parallel.parallel_generate gate.baseline_match_merge baseline consistency check (merge) fn.parallel.merge_archives->gate.baseline_match_merge gate.baseline_match_laptop baseline consistency check (laptop) fn.parallel.parallel_generate->gate.baseline_match_laptop fn.parallel.run_shard->art.shard_h5 fn.parallel.run_shard->fn.parallel.parallel_generate fn.parallel.run_shard->fn.run.Bouquet_pipeline fn.run.Bouquet_pipeline->art.shard_h5 fn.utils.capture_native_output capture_native_output (fd redirect) fn.utils.capture_native_output->fn.parallel.run_shard gate.backend backend decision gate.backend->fn.parallel.emit_slurm_script gate.backend->fn.parallel.parallel_generate gate.baseline_match_laptop->fn.parallel.merge_archives gate.missing_shards missing shards handling (CLI) gate.missing_shards->fn.parallel._cli input.config BouquetConfig input.config->art.h5.config_json input.config->fn.parallel.emit_slurm_script input.config->fn.parallel.parallel_generate input.config->fn.parallel.run_shard knob.scan_key scan_key input.config->knob.scan_key quantity.n_equils_total n_equils_total input.config->quantity.n_equils_total input.user_args CLI/user args knob.backend backend input.user_args->knob.backend input.user_args->knob.n_workers knob.seed seed input.user_args->knob.seed knob.threads_per_worker threads_per_worker input.user_args->knob.threads_per_worker knob.backend->gate.backend knob.n_workers->fn.parallel._physical_cores knob.n_workers->fn.parallel.emit_slurm_script quantity.n_equils_per_worker n_equils_per_worker knob.n_workers->quantity.n_equils_per_worker quantity.per_worker_seed per_worker_seed knob.scan_key->quantity.per_worker_seed knob.seed->fn.parallel.emit_slurm_script knob.seed->quantity.per_worker_seed knob.threads_per_worker->env.blas_pinning knob.threads_per_worker->fn.parallel._warn_multithreaded knob.threads_per_worker->fn.parallel.emit_slurm_script quantity.n_equils_per_worker->fn.parallel.run_shard quantity.n_equils_total->quantity.n_equils_per_worker quantity.per_worker_seed->fn.parallel.run_shard qty.F0->fn.reconstruct_equilibrium qty.FUSE_tot FUSE_tot qty.FUSE_tot->gate.jBS_baseline_mode qty.Ip Ip (plasma current) qty.Ip->art.eqdsk_bytes qty.Ip_scales Ip_scales qty.Ip_scales->qty.diagnostics qty.Ip_target->fn.reconstruct_equilibrium qty.Ip_target->artifact.baseline qty.Ip_target->ext.corrective_jphi_iteration qty.Ip_target->ext.solve_with_bootstrap qty.Ip_target->fn.run._forward_solve_imas_baseline qty.Ip_target->fn.run.generate qty.Ip_target->fn.tmi._corrective_jphi_iteration qty.Ip_target->fn.tmi.find_optimal_scale qty.Ip_target->fn.tmi.recon_anchor_solve qty.a_optimal a_optimal (Ip scale factor) qty.Ip_target->qty.a_optimal qty.Ip_target->qty.quality_metrics qty.Ip_tokamaker->qty.quality_metrics qty.Z_imp->artifact.baseline qty.pres_tmp pres_tmp (per-draw pressure) qty.Z_imp->qty.pres_tmp qty.Zeff_eq Zeff_eq qty.Zeff_eq->fn.run.generate qty.matched_jphi_perturb matched_jphi_perturb (Ip-matched j_phi candidate) qty.a_optimal->qty.matched_jphi_perturb qty.aux_baselines->gate.zeff_active qty.aux_baselines->qty.aux_out qty.aux_baselines->qty.zeff_draw qty.aux_length_scales aux_length_scales (auxiliary GPR scales) qty.aux_length_scales->qty.aux_out qty.aux_length_scales->qty.zeff_draw qty.aux_out->fn.utils.store_equilibrium qty.aux_out->qty.diagnostics qty.aux_sigmas->gate.zeff_active qty.aux_sigmas->qty.aux_out qty.aux_sigmas->qty.zeff_draw qty.avg_B2 <B²> (FSA) qty.avg_inv_R <1/R> (FSA) qty.baseline_j_BS_with_diff baseline_j_BS (+ jBS_diff) qty.baseline_j_BS_with_diff->fn.run.generate qty.baseline_li_proxy baseline_li_proxy (cylindrical proxy l_i) qty.proxy_target proxy_target (adaptive proxy target) qty.baseline_li_proxy->qty.proxy_target qty.boundary_lcfs->fn.reconstruct_equilibrium qty.bs_scale->fn.run.generate qty.j_phi_fit_prelim j_phi_fit (pre-li-match) qty.bs_scale->qty.j_phi_fit_prelim qty.chi_e chi_e [m^2/s] (electron transport) qty.chi_i chi_i [m^2/s] (ion transport) qty.diagnostics->fn.utils.store_equilibrium qty.e_r e_r [V/m] (radial electric field) qty.eq_stats->qty.baseline_li_proxy qty.eqdsk_j_tor->fn.sampling.calc_cylindrical_li_proxy qty.eqdsk_j_tor->fn.tmi._shelf_blend_decompose qty.eqdsk_j_tor->fn.tmi.classify_jphi_profile qty.eqdsk_j_tor->qty.j_phi_corrective_target qty.eqdsk_j_tor->qty.quality_metrics qty.ffp_prof_corr FFp for GS (corrective) qty.ffp_prof_li FFp for GS (li-match) qty.ffp_prof_li->ext.tokamaker_solve qty.final_jphi->gate.constrain_sawteeth_pre qty.target_jphi_perturb target_jphi_perturb (corrective target) qty.final_jphi->qty.target_jphi_perturb qty.final_li_proxy final_li_proxy (diagnostic cylindrical proxy) qty.proxy_vs_real proxy_vs_real (proxy-equilibrium offset %) qty.final_li_proxy->qty.proxy_vs_real qty.final_scale_j0->qty.target_jphi_perturb qty.full_j_BS->fn.tmi._swb_jbs_to_toroidal qty.full_j_BS->qty.diagnostics qty.guess_j_inductive guess_j_inductive qty.j_ind_li_matched j_ind (li-matched) qty.ind_factor_opt->qty.j_ind_li_matched qty.j_inductive_fit j_inductive_fit (scaled) qty.ind_scale->qty.j_inductive_fit qty.iteration_Ips iteration_Ips qty.iteration_Ips->qty.diagnostics qty.iteration_l_is iteration_l_is qty.iteration_l_is->qty.diagnostics qty.j0_scales j0_scales qty.j0_scales->qty.diagnostics qty.jBS_diff->fn.run.generate qty.jBS_diff->qty.baseline_j_BS_with_diff qty.jBS_diff->qty.spike_profile qty.jBS_scale_range_centered jBS_scale_range (centered) qty.jBS_scale_range_centered->ext.generate_bouquet qty.jBS_scales->fn.tmi.perturb_kinetic_equilibrium qty.j_BS->artifact.baseline qty.j_BS->fn.run.verify_sigma0_consistency qty.j_BS->qty.j_inductive qty.j_ind_final j_ind_final qty.j_BS_final->qty.j_ind_final qty.j_BS_isolated->fn.tmi._shelf_blend_decompose qty.j_BS_isolated->fn.tmi.classify_jphi_profile qty.j_BS_isolated->fn.tmi.fit_inductive_profile qty.j_BS_isolated->qty.ffp_prof_li qty.j_BS_isolated->qty.j_BS_shelved qty.j_BS_isolated->qty.j_phi_corrective_target qty.j_BS_isolated->qty.j_phi_fit_prelim qty.j_BS_smoothed j_BS near-axis smoothed qty.j_BS_shelved->qty.j_BS_smoothed qty.j_BS_smoothed->fn.run._forward_solve_imas_baseline qty.j_BS_smoothed->fn.tmi.perturb_kinetic_equilibrium qty.j_BS_smoothed->qty.j_BS_isolated qty.j_BS_src->fn.run._forward_solve_imas_baseline qty.j_BS_src->gate.jBS_baseline_mode qty.j_BS_swb->fn.tmi._swb_jbs_to_toroidal qty.j_BS_swb->gate.jBS_baseline_mode qty.j_BS_swb->qty.baseline_j_BS_with_diff qty.j_fixed_eff j_fixed_eff (fixed additive currents) qty.j_NBI->qty.j_fixed_eff qty.j_NBI_toroidal->artifact.baseline qty.j_NBI_toroidal->qty.j_inductive qty.j_RF->artifact.baseline qty.j_RF->qty.j_fixed_eff qty.j_RF->qty.j_inductive qty.j_bootstrap_parallel->fn.physics.parallel_to_toroidal qty.j_fixed_eff->qty.a_optimal qty.j_fixed_eff->qty.j_inductive_consistent qty.j_fixed_eff->qty.matched_jphi_perturb qty.j_fixed_eff->qty.new_jphi qty.j_fixed_eff->qty.target_jphi_perturb qty.j_ind_li_matched->qty.j_phi_corrective_target qty.j_inductive->artifact.baseline qty.j_inductive->fn.run._forward_solve_imas_baseline qty.j_inductive->fn.run.generate qty.j_inductive_basis->qty.j_inductive_fit qty.j_inductive_consistent->qty.diagnostics qty.j_inductive_fit->qty.ffp_prof_li qty.j_inductive_fit->qty.j_ind_li_matched qty.j_inductive_fit->qty.j_phi_fit_prelim qty.j_ls j_ls (current length scale) qty.j_ls->qty.jphi_perturb qty.j_nbi_parallel->fn.physics.parallel_to_toroidal qty.j_phi->artifact.baseline qty.j_phi->fn.run._forward_solve_imas_baseline qty.j_phi->fn.run.generate qty.j_phi->qty.j_inductive qty.j_phi->qty.jphi_diff qty.j_phi->qty.sigma_jphi qty.j_phi_corrective_target->ext.corrective_jphi_iteration qty.j_phi_final j_phi_final qty.j_phi_final->qty.j_ind_final qty.j_phi_final->qty.quality_metrics qty.j_phi_output_corr->qty.j_phi_final qty.j_tor_parallel->fn.physics.parallel_to_toroidal qty.j_tor_parallel->qty.j_phi qty.j_total_parallel->fn.physics.parallel_to_toroidal qty.jphi_diff->artifact.baseline qty.jphi_diff->fn.run.generate qty.jphi_diff->qty.j_fixed_eff qty.jphi_mode->gate.jphi_classified qty.jphi_mode->qty.quality_metrics qty.jphi_perturb->qty.a_optimal qty.jphi_perturb->qty.matched_jphi_perturb qty.l_i l_i (equilibrium internal inductance) qty.l_i->art.eqdsk_bytes qty.l_i->gate.li_acceptance qty.l_i->qty.proxy_vs_real qty.l_i_target_draw->gate.li_band qty.li_current->gate.li_converged qty.li_final->qty.quality_metrics qty.li_proxy_baseline->fn.tmi.fit_inductive_profile qty.li_target->artifact.baseline qty.li_target->gate.li_converged qty.li_target->fn.run.generate qty.matched_j_inductive->gate.li_loop_variant qty.matched_jphi_perturb->fn.tmi.find_optimal_scale qty.n_ls n_ls (density length scale) qty.n_ls->gate.pressure_match qty.n_ls->qty.ne_draw qty.ne->fn.reconstruct_equilibrium qty.ne->artifact.baseline qty.ne->fn.imas._merge_ida_kinetics qty.ne->fn.imas._validate_pressure_completeness qty.ne->gate.sigma_priority_ne qty.ne->fn.run._forward_solve_imas_baseline qty.ne->fn.run.generate qty.ne->gate.pressure_match qty.ne->qty.Z_imp qty.ne->qty.ne_draw qty.ne->qty.zeff qty.ne_draw->fn.utils.store_equilibrium qty.ne_draw->qty.ni_draw qty.ne_draw->qty.pres_tmp qty.ne_perturb->ext.solve_with_bootstrap qty.ne_perturb->art.eqdsk_bytes qty.ne_perturb->qty.p_thermal qty.new_jphi->fn.tmi.recon_anchor_solve qty.ni->fn.reconstruct_equilibrium qty.ni->artifact.baseline qty.ni->fn.imas._validate_pressure_completeness qty.ni->gate.sigma_priority_ni qty.ni->fn.run._forward_solve_imas_baseline qty.ni->fn.run.generate qty.ni->gate.pressure_match qty.ni->qty.Z_imp qty.ni->qty.ni_draw qty.p_imp impurity pressure qty.ni->qty.p_imp qty.ni_draw->fn.utils.store_equilibrium qty.ni_draw->qty.pres_tmp qty.ni_perturb->ext.solve_with_bootstrap qty.ni_perturb->art.eqdsk_bytes qty.ni_perturb->qty.p_thermal qty.output_jphi->fn.utils.store_equilibrium qty.output_jphi->art.eqdsk_bytes qty.output_jphi->gate.constrain_sawteeth_post qty.output_jphi->qty.Ip qty.output_jphi->qty.final_li_proxy qty.output_jphi->qty.j_inductive_consistent qty.output_jphi->qty.l_i qty.p_diff->artifact.baseline qty.p_diff->fn.run.generate qty.p_diff->qty.pres_tmp qty.p_equilibrium->artifact.baseline qty.p_equilibrium->fn.imas._validate_pressure_completeness qty.p_equilibrium->qty.p_diff qty.p_fast->artifact.baseline qty.p_fast->fn.imas._validate_pressure_completeness qty.p_recon reconstructed pressure qty.p_fast->qty.p_recon qty.p_fast->qty.pres_tmp qty.p_imp->fn.imas._validate_pressure_completeness qty.p_imp->qty.p_recon qty.p_recon->qty.p_diff qty.p_thermal->fn.reconstruct_equilibrium qty.p_thermal->qty.pres_tmp qty.p_total p_total qty.p_total->fn.run._forward_solve_imas_baseline qty.pprime p' (pressure gradient) qty.pprime_gs p' for GS qty.pprime->qty.pprime_gs qty.pprime_gs->ext.corrective_jphi_iteration qty.pprime_gs->ext.tokamaker_solve qty.pres_tmp->fn.tmi.perturb_kinetic_equilibrium qty.pres_tmp->fn.tmi._corrective_jphi_iteration qty.pres_tmp->fn.tmi.find_optimal_scale qty.pres_tmp->fn.tmi.recon_anchor_solve qty.pres_tmp->gate.recalculate_jBS qty.pressure->fn.tmi.perturb_kinetic_equilibrium qty.pressure->qty.pprime qty.proxy_target->gate.li_band_loop qty.proxy_vs_real->qty.proxy_target qty.psi_N->fn.reconstruct_equilibrium qty.psi_N->artifact.baseline qty.psi_N->fn.imas._merge_ida_kinetics qty.psi_N->fn.imas._override qty.psi_N->fn.tmi.classify_jphi_profile qty.psi_N->fn.run._forward_solve_imas_baseline qty.psi_N->qty.Zeff_eq qty.psi_N_kinetic->artifact.baseline qty.psi_N_kinetic->fn.run._forward_solve_imas_baseline qty.sigma_jphi->qty.jphi_perturb qty.sigma_ne->gate.pressure_match qty.sigma_ne->qty.ne_draw qty.sigma_te->gate.pressure_match qty.sigma_te->qty.te_draw qty.sigma_ti->qty.ti_draw qty.spike_metrics->qty.quality_metrics qty.spike_profile->fn.tmi._swb_jbs_to_toroidal qty.spike_profile->qty.a_optimal qty.spike_profile->qty.diagnostics qty.spike_profile->qty.j_inductive_consistent qty.spike_profile->qty.matched_jphi_perturb qty.spike_profile->qty.new_jphi qty.spike_profile->qty.target_jphi_perturb qty.t_ls t_ls (temperature length scale) qty.t_ls->gate.pressure_match qty.t_ls->qty.te_draw qty.target_jphi_perturb->fn.tmi._corrective_jphi_iteration qty.te->fn.reconstruct_equilibrium qty.te->artifact.baseline qty.te->fn.imas._validate_pressure_completeness qty.te->gate.sigma_priority_te qty.te->fn.run._forward_solve_imas_baseline qty.te->fn.run.generate qty.te->gate.pressure_match qty.te->qty.p_recon qty.te->qty.te_draw qty.te_draw->fn.utils.store_equilibrium qty.te_draw->qty.pres_tmp qty.te_perturb->ext.solve_with_bootstrap qty.te_perturb->art.eqdsk_bytes qty.te_perturb->qty.p_thermal qty.ti->fn.reconstruct_equilibrium qty.ti->artifact.baseline qty.ti->fn.imas._validate_pressure_completeness qty.ti->gate.sigma_priority_ti qty.ti->fn.run._forward_solve_imas_baseline qty.ti->fn.run.generate qty.ti->gate.pressure_match qty.ti->qty.p_imp qty.ti->qty.p_recon qty.ti->qty.ti_draw qty.ti_draw->fn.utils.store_equilibrium qty.ti_draw->qty.pres_tmp qty.ti_perturb->ext.solve_with_bootstrap qty.ti_perturb->art.eqdsk_bytes qty.ti_perturb->qty.p_thermal qty.zeff->artifact.baseline qty.zeff->gate.sigma_priority_zeff qty.zeff->fn.run._forward_solve_imas_baseline qty.zeff->qty.Z_imp qty.zeff->qty.Zeff_eq qty.zeff_draw->qty.ni_draw qty.zeff_draw->qty.ni_perturb quantity.eqdsk_j_tor eqdsk_j_tor quantity.eqdsk_j_tor->fn.tmi.fit_inductive_profile fn.tmi.smooth_jbs_transition smooth_jbs_transition (shared near-axis j_BS repair) fn.tmi.smooth_jbs_transition->fn.run.verify_sigma0_consistency fn.tmi.smooth_jbs_transition->qty.j_BS_smoothed fn.utils.pchip_interp pchip_interp (kinetic -> equilibrium regrid) fn.utils.pchip_interp->fn.baseline._resolve_reconstruction fn.utils.pchip_interp->fn.run._forward_solve_imas_baseline fn.utils.pchip_interp->fn.tmi.generate_bouquet fn.utils.pchip_interp->fn.tmi._kin_to_eq fn.utils.pchip_derivative pchip_derivative (analytic p') fn.utils.pchip_derivative->fn.tmi.recon_anchor_solve fn.utils.pchip_derivative->qty.pprime fn.physics.q_ravg q_ravg (dict-or-positional FSA accessor) fn.physics.q_ravg->fn.tmi._swb_jbs_to_toroidal fn.physics.q_ravg->fn.physics.capture_equilibrium_fsa qty.j_BS_isolated_raw->fn.tmi.classify_jphi_profile qty.j_BS_isolated_raw->fn.tmi.smooth_jbs_transition qty.eq_fsa->fn.utils.store_equilibrium