SCS-Lab commited on
Commit
3dc632e
·
verified ·
1 Parent(s): 39d7e43

FUSE-EFIT in-era model, single and averaged forms (replaces the earlier model)

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. LICENSE +21 -0
  2. README.md +121 -135
  3. SHA256SUMS +15 -0
  4. s0/fuse29_seq.onnx → era/averaged/fuse_efit_averaged_sequence.onnx +2 -2
  5. s0/fuse29_step.onnx → era/averaged/fuse_efit_averaged_step.onnx +2 -2
  6. era/averaged/input_ranges.json +539 -0
  7. era/averaged/model_config.json +505 -0
  8. era/averaged/norms.json +294 -0
  9. era/averaged/provenance.json +136 -0
  10. s1/fuse29_seq.onnx → era/single/fuse_efit_single_sequence.onnx +2 -2
  11. s1/fuse29_step.onnx → era/single/fuse_efit_single_step.onnx +2 -2
  12. era/single/input_ranges.json +539 -0
  13. era/single/model_config.json +449 -0
  14. era/single/norms.json +294 -0
  15. era/single/provenance.json +80 -0
  16. manifest.json +60 -313
  17. s0/README.md +0 -56
  18. s0/actuator_ranges.json +0 -600
  19. s0/model_config.json +0 -268
  20. s0/norms.json +0 -292
  21. s0/provenance.json +0 -32
  22. s1/README.md +0 -56
  23. s1/actuator_ranges.json +0 -600
  24. s1/model_config.json +0 -268
  25. s1/norms.json +0 -292
  26. s1/provenance.json +0 -32
  27. s2/README.md +0 -56
  28. s2/actuator_ranges.json +0 -600
  29. s2/fuse29_seq.onnx +0 -3
  30. s2/fuse29_step.onnx +0 -3
  31. s2/model_config.json +0 -268
  32. s2/norms.json +0 -292
  33. s2/provenance.json +0 -32
  34. s3/README.md +0 -56
  35. s3/actuator_ranges.json +0 -600
  36. s3/fuse29_seq.onnx +0 -3
  37. s3/fuse29_step.onnx +0 -3
  38. s3/model_config.json +0 -268
  39. s3/norms.json +0 -292
  40. s3/provenance.json +0 -32
  41. s4/README.md +0 -56
  42. s4/actuator_ranges.json +0 -600
  43. s4/fuse29_seq.onnx +0 -3
  44. s4/fuse29_step.onnx +0 -3
  45. s4/model_config.json +0 -268
  46. s4/norms.json +0 -292
  47. s4/provenance.json +0 -32
  48. s5/README.md +0 -56
  49. s5/actuator_ranges.json +0 -600
  50. s5/fuse29_seq.onnx +0 -3
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 NoahH72
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md CHANGED
@@ -7,165 +7,151 @@ tags:
7
  - plasma-physics
8
  - tokamak
9
  - diii-d
10
- - state-space-model
11
  - mamba
12
- - time-series
13
- - real-time
14
  ---
15
 
16
- # fuse29 — Mamba-2 pedestal predictor for DIII-D
17
 
18
- A 29-input, 6-layer Mamba-2 state-space model that predicts nine pedestal
19
- quantities at ρ_tor = 0.85 from DIII-D actuator settings, at 20 Hz, with a
20
- strictly causal O(1)-per-tick inference path suitable for real-time control.
 
21
 
22
- Packaged as two ONNX graphs with normalisation baked in: **raw physical units
23
- in, physical units out.**
24
 
25
- | | |
26
- |---|---|
27
- | Parameters | 11,254,425 |
28
- | Architecture | Mamba-2 (SSD), 6 layers, d_model 512, d_state 128 |
29
- | Inputs | 29 actuator channels, physical units |
30
- | Outputs | 9 heads, physical units |
31
- | Cadence | 20 Hz (50 ms) |
32
- | Precision | float32 |
33
- | ONNX opset | 17 |
34
- | Step latency | ~2.9 ms/tick, CPU, batch 1 |
35
- | License | MIT |
36
 
37
- ## Intended use
 
 
 
38
 
39
- Predicting pedestal density, temperature, rotation, heights and locations from
40
- the actuator request, inside FUSE or an equivalent DIII-D control or analysis
41
- pipeline. The step graph is designed for the 50 ms control cycle; the sequence
42
- graph is for offline scoring and replay.
43
-
44
- **Not** intended for other machines, other radial locations, or as a
45
- safety-critical interlock. It has no uncertainty estimate and no
46
- out-of-distribution detector.
47
-
48
- ## Quickstart
49
 
50
- ```bash
51
- pip install numpy onnxruntime
 
 
 
 
 
 
 
 
52
  ```
53
 
54
- ```python
55
- from fuse29.runtime import Fuse29Predictor
56
-
57
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model") # loads seed 0
58
- state = predictor.init_state()
59
 
60
- for actuators in shot: # (29,) float32, raw physical units
61
- out, state = predictor.step(actuators, state)
62
- if out.is_hmode:
63
- print(out.ne, out.te_ped, out.neped_prmtan)
 
 
 
64
  ```
65
 
66
- Or straight from onnxruntime, with no Python package — the full contract is
67
- about fifteen lines and is written out in `docs/ONNX.md`.
68
-
69
- ## Files
70
 
71
- Per seed (`s0/` … `s7/`):
72
 
73
- | File | |
74
- |---|---|
75
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
76
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
77
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
78
- | `norms.json` | the statistics baked into the graphs |
79
- | `actuator_ranges.json` | training-split distribution, for checking your units |
80
- | `provenance.json` | source checkpoint SHA-256, library versions, artefact hashes |
81
 
82
- Plus `manifest.json` at the root. **Seed 0 is the champion and the default.**
 
 
 
 
83
 
84
- ## Inputs
 
85
 
86
- 29 DIII-D actuator channels in raw physical units: beam power (MW) and torque,
87
- ECH power, the eighteen shaping F-coil currents (A), both E-coil currents (A),
88
- five gas valve flows (Torr·L/s), and the toroidal field (T). Order is
89
- load-bearing; see `docs/IO_CONTRACT.md`.
90
 
91
- `pohm`, `ip` and `ipspr15v` are deliberately excluded — they are plasma
92
- responses, not commands, and a model predicting the response must not be
93
- handed it.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  ## Outputs
96
 
97
- | # | Head | Units |
98
  |--:|---|---|
99
- | 0 | `ne` | 10¹⁹ m⁻³ |
100
  | 1 | `te_ped` | keV |
101
  | 2 | `ti_ped` | keV |
102
  | 3 | `t_rot_ped` | krad/s |
103
- | 4 | `neped_prmtan` * | 10¹⁹ m⁻³ |
104
- | 5 | `teped_prmtan` * | keV |
105
- | 6 | `rho_sym` * | ρ_tor |
106
- | 7 | `ne_top_loc` * | ρ_tor |
107
- | 8 | `hmode` | probability |
108
-
109
- \* **H-mode only.** See the limitations below.
110
-
111
- ## Performance
112
-
113
- Seed 0, scored with the exported ONNX graph on 4087 held-out shots. Median of
114
- per-shot RMSE:
115
-
116
- | Head | Median per-shot RMSE | Units |
117
- |---|---:|---|
118
- | `ne` | 0.3057 | 10¹⁹ m⁻³ |
119
- | `te_ped` | 0.0605 | keV |
120
- | `ti_ped` | 0.1065 | keV |
121
- | `t_rot_ped` | 4.1497 | krad/s |
122
- | `neped_prmtan` * | 0.3950 | 10¹⁹ m⁻³ |
123
- | `teped_prmtan` * | 0.0783 | keV |
124
- | `rho_sym` * | 0.0113 | ρ_tor |
125
- | `ne_top_loc` * | 0.0134 | ρ_tor |
126
- | `hmode` | 0.9443 accuracy, 0.9476 F1 | — |
127
-
128
- ONNX-vs-PyTorch parity is within 2.5e-05 of a head's training standard
129
- deviation across all eight seeds and both graphs. Full protocol:
130
- `docs/VALIDATION.md`.
131
-
132
- ## Training
133
-
134
- ~40 900 DIII-D shots, 20 Hz, labels as trailing-bin means with empty bins
135
- masked rather than filled. Stratified random 80/10/10 split (seed 20260829).
136
- AdamW, lr 2e-4, cosine schedule, 25 epochs, batch 128. Checkpoint selected on
137
- lowest total validation loss across all nine heads.
138
-
139
- Eight seeds are published; they differ only in weight initialisation and data
140
- ordering. Full recipe in `docs/TRAINING.md`.
141
-
142
- ## Limitations
143
-
144
- - **Four heads are undefined in L-mode.** `neped_prmtan`, `teped_prmtan`,
145
- `rho_sym` and `ne_top_loc` were trained only on H-mode ticks. The graph
146
- emits them unconditionally anyway. You must gate on the model's own `hmode`
147
- output, which is ~94% accurate with errors concentrated at L–H transitions.
148
- See `docs/GATING.md`.
149
- - **Beam power is a live input in this package.** The predecessor (`fuse29_s*`)
150
- could not see `pinj` because a corrupted shot set the divisor to 194 MW.
151
- These weights were retrained against winsorised actuator statistics; a
152
- half-range `pinj` swing now moves `ne` by 0.79. Isolated sweeps are not a
153
- real power scan — other actuators stay at recorded values. See
154
- `docs/LIMITATIONS.md`.
155
- - **Accuracy measures interpolation.** The split is random, so validation
156
- shots come from the same campaigns as training shots. A chronological split
157
- scores roughly 1.5–2× worse. Expect degradation outside the training
158
- distribution, with no built-in warning.
159
- - **No uncertainty.** Seed spread measures optimisation variance, not
160
- predictive uncertainty, and says nothing about errors all eight seeds share.
161
- - **Units have no guard rail.** `pinj` is MW, not W. A unit error produces
162
- confident nonsense rather than an exception; run
163
- `predictor.check_units(shot)` once during integration.
164
- - **Fixed 50 ms cadence**, all 29 channels required every tick, no
165
- missing-channel handling, no dropped-tick recovery.
166
- - **Sequence graph is fixed at 256 ticks.** Use the step graph for anything
167
- longer.
168
- - **float32 only**; no quantised variants are published or validated.
169
- - DIII-D only, ρ_tor = 0.85 only.
170
-
171
- Full discussion in `docs/LIMITATIONS.md`.
 
7
  - plasma-physics
8
  - tokamak
9
  - diii-d
 
10
  - mamba
 
 
11
  ---
12
 
13
+ # FUSE-EFIT (in era), ONNX
14
 
15
+ A 20 Hz, strictly causal model of the DIII-D plasma edge, driven by the heating, fuelling and field
16
+ actuators, the measured plasma current, the loop voltage and the EFIT01 boundary shape. Physical units
17
+ in, physical units out. Code, documentation and the input contract: https://github.com/NoahH72/FUSE-Pedestal-Predictor-Mamba-ONNX
18
+ (`docs/EXPORT.md`, `docs/INPUT_CONTRACT.md`, `MODEL_CARD.md`).
19
 
20
+ ## Two forms, one calling convention
 
21
 
22
+ | form | what it is | networks per tick | ONNX files | step call, 1 thread | step call, 8 threads |
23
+ |---|---|---:|---:|---|---|
24
+ | `single` | replicate 0 of the in-era finals (seed 100), the frozen delivered network | 1 | 184 MB | 4.87 ms (99th percentile 5.08 ms) | 1.95 ms (99th percentile 2.00 ms) |
25
+ | `averaged` | the eight in-era finals (seeds 100-107); the mean of their raw outputs at every tick | 8 | 1468 MB | 56.33 ms (99th percentile 59.45 ms) | 18.25 ms (99th percentile 18.60 ms) |
 
 
 
 
 
 
 
26
 
27
+ Timing: Intel(R) Xeon(R) CPU Max 9470C, onnxruntime 1.30.0, CPU, batch 1. The control cycle is 50 ms per tick. The two forms take and return the same tensors
28
+ with the same names, shapes and units; only the recurrent state is larger for `averaged`
29
+ (19.9 MB per shot against 2.5 MB).
30
+ A host switches form by choosing a folder.
31
 
32
+ ## Files
 
 
 
 
 
 
 
 
 
33
 
34
+ ```
35
+ era/single/fuse_efit_single_step.onnx one 50 ms tick per call, state in and out
36
+ era/single/fuse_efit_single_sequence.onnx one window of 256 ticks
37
+ era/averaged/fuse_efit_averaged_step.onnx
38
+ era/averaged/fuse_efit_averaged_sequence.onnx
39
+ era/<form>/model_config.json the input and output contract, machine-readable
40
+ era/<form>/norms.json the statistics baked into the graphs
41
+ era/<form>/input_ranges.json training ranges per channel, for a units check
42
+ era/<form>/provenance.json source checkpoints with sha256, code identity, versions
43
+ SHA256SUMS sha256sum -c SHA256SUMS
44
  ```
45
 
46
+ ## Download and check
 
 
 
 
47
 
48
+ ```bash
49
+ git clone https://github.com/NoahH72/FUSE-Pedestal-Predictor-Mamba-ONNX
50
+ cd FUSE-Pedestal-Predictor-Mamba-ONNX
51
+ pip install numpy onnxruntime huggingface_hub
52
+ hf download SCS-Lab/FUSE-PED --local-dir export # this page's files, into the code's export/ folder
53
+ cd export && sha256sum --check SHA256SUMS && cd ..
54
+ python examples/verify_integration.py --bundle export/era
55
  ```
56
 
57
+ Every line of the checksum check must say OK, and the integration check must pass, before the model is used.
 
 
 
58
 
59
+ ## Run it
60
 
61
+ ```python
62
+ from fuse_efit.export.runtime import FuseEfitPredictor # numpy + onnxruntime only
 
 
 
 
 
 
63
 
64
+ model = FuseEfitPredictor("export/era", form="single") # or form="averaged"
65
+ state = model.init_state() # zeros at the start of every shot
66
+ for each 50 ms tick:
67
+ y, state = model.step(inputs_25, indicators_5, state) # exactly once per tick
68
+ ```
69
 
70
+ Step graph tensors: `inputs` (batch, 25), `indicators` (batch, 5), `available` (batch, 25),
71
+ `conv_state`, `ssm_state` in; `predictions` (batch, 9), `conv_state_out`, `ssm_state_out` out.
72
 
73
+ ## Inputs (physical units, this order)
 
 
 
74
 
75
+ | # | channel | unit |
76
+ |--:|---|---|
77
+ | 0 | `pinj` | MW |
78
+ | 1 | `tinj` | N m |
79
+ | 2 | `ech_mw` | MW |
80
+ | 3 | `gasa_cal` | Torr L/s |
81
+ | 4 | `gasb_cal` | Torr L/s |
82
+ | 5 | `gasc_cal` | Torr L/s |
83
+ | 6 | `gasd_cal` | Torr L/s |
84
+ | 7 | `gase_cal` | Torr L/s |
85
+ | 8 | `bt` | T |
86
+ | 9 | `ip` | MA |
87
+ | 10 | `aminor` | m |
88
+ | 11 | `rsurf` | m |
89
+ | 12 | `zsurf` | m |
90
+ | 13 | `kappa` | dimensionless |
91
+ | 14 | `tritop` | dimensionless |
92
+ | 15 | `tribot` | dimensionless |
93
+ | 16 | `drsep` | m |
94
+ | 17 | `rvsout` | m |
95
+ | 18 | `gapin` | m |
96
+ | 19 | `rvsou` | m |
97
+ | 20 | `rvsiu` | m |
98
+ | 21 | `shafranov` | m |
99
+ | 22 | `zeta_ou` | dimensionless |
100
+ | 23 | `zeta_ol` | dimensionless |
101
+ | 24 | `vloop` | V |
102
+
103
+ Indicators, 0/1 per tick: `efit_valid`, `vloop_valid`, `rvsout_present`, `rvsou_present`, `rvsiu_present`. Availability,
104
+ 0/1 per shot and channel (default 1). Where an indicator or the availability flag is 0 the value is
105
+ ignored; elsewhere supply a real value (not-a-number is read as the training mean).
106
 
107
  ## Outputs
108
 
109
+ | # | head | unit |
110
  |--:|---|---|
111
+ | 0 | `ne` | 1e19 m^-3 |
112
  | 1 | `te_ped` | keV |
113
  | 2 | `ti_ped` | keV |
114
  | 3 | `t_rot_ped` | krad/s |
115
+ | 4 | `ne_knee` | 1e19 m^-3 |
116
+ | 5 | `te_knee` | keV |
117
+ | 6 | `rho_sym` | rho (normalised radius) |
118
+ | 7 | `ne_top_loc` | rho (normalised radius) |
119
+ | 8 | `hmode` | probability in [0, 1] |
120
+
121
+ `ne_knee`, `te_knee`, `rho_sym` and `ne_top_loc` are defined only in H-mode: report them only where
122
+ `hmode` is at or above a threshold. Each form has its own, set on validation: `single` 0.54
123
+ (balanced) and 0.5 (conservative); `averaged` 0.53 and 0.47. On the
124
+ test shots each keeps about 95-96 % of H-mode ticks with about 5 % L-mode among those kept (`MODEL_CARD.md` §6).
125
+
126
+ ## Accuracy
127
+
128
+ Typical error per test shot (the median over in-era test shots of each shot's RMSE, physical units; `hmode`: its loss), from the single opening of the test set:
129
+
130
+ | output | unit | `single` | `averaged` |
131
+ |---|---|---|---|
132
+ | `ne` | 1e19 m^-3 | 0.2928 | 0.2594 |
133
+ | `te_ped` | keV | 0.05405 | 0.04808 |
134
+ | `ti_ped` | keV | 0.09957 | 0.08967 |
135
+ | `t_rot_ped` | krad/s | 4.043 | 3.678 |
136
+ | `ne_knee` | 1e19 m^-3 | 0.3279 | 0.2973 |
137
+ | `te_knee` | keV | 0.06058 | 0.05636 |
138
+ | `rho_sym` | rho (normalised radius) | 0.01047 | 0.009892 |
139
+ | `ne_top_loc` | rho (normalised radius) | 0.0125 | 0.01188 |
140
+ | `hmode` | loss | 0.1373 | 0.1251 |
141
+ | combined loss | | 0.9889 | 0.8986 |
142
+
143
+ ## Export accuracy
144
+
145
+ Every graph agrees with the PyTorch model to 7.4e-06 of each head's training standard deviation or better, on 1,988 validation ticks per form and 2,000-tick runs.
146
+
147
+ ## Limits
148
+
149
+ Needs EFIT01 geometry, the between-shot reconstruction, as trained; it is not for use during the shot. Fed
150
+ real-time EFIT geometry instead it is about 30 % worse, and far worse on shots where the real-time
151
+ reconstruction lacks the strike points. No uncertainty estimate. A unit
152
+ error gives confident nonsense, not an error: run `examples/verify_integration.py` and
153
+ `check_units` once. Full list: `MODEL_CARD.md` §8.
154
+
155
+ ## Licence and contact
156
+
157
+ Licence: MIT (the `LICENSE` file). Contact: Noah Harris, harrnoah@oregonstate.edu. Code: https://github.com/NoahH72/FUSE-Pedestal-Predictor-Mamba-ONNX.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SHA256SUMS ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2ae4285c93bc52031670b8ff6d22a2dfd029bb162887eed6e66a8c2fe2cb3566 LICENSE
2
+ 89c4a1f613dac205c1bef371a33a45c072d3272c4c387ace453b4ccfbfabf999 README.md
3
+ cd3eaabcc7f7727e273f8063cb7d52bd324c287d42e62bbae4eeebb32b5b00ec era/averaged/fuse_efit_averaged_sequence.onnx
4
+ 8d19844716b817216035a72b480d24326c7fe28a64dbf17f8a9ea53178ea359e era/averaged/fuse_efit_averaged_step.onnx
5
+ 03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d era/averaged/input_ranges.json
6
+ 27697f17523ac6d8e5da69abded17827b566aaadc57be46f77138831d2b7535c era/averaged/model_config.json
7
+ 487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9 era/averaged/norms.json
8
+ 1b76be85374bb2a944a9557ff3ab5c86ffde72f9ccbb29525dcb72e34058da5c era/averaged/provenance.json
9
+ ddda4e5ed0c3c9aba626ccfea0115863c75d9b71c97b7e44a955919f77b3fac4 era/single/fuse_efit_single_sequence.onnx
10
+ 3ffc20851386cf7db9f81792e6b247d179229901c9e615d61c8982174e658c76 era/single/fuse_efit_single_step.onnx
11
+ 03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d era/single/input_ranges.json
12
+ 9e3ae66bbc5e1333cba705bfd7173ba189b19e32c86fbda64a5035d6ea80d9ac era/single/model_config.json
13
+ 487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9 era/single/norms.json
14
+ c481b3f5b07bcb2532bb725629172263e78181752b65641bc27451d3e80a480e era/single/provenance.json
15
+ aaf16deb60a3566f505296ec33c8d01f4bea26f5a05dade3b1c6cd8b1d28c97e manifest.json
s0/fuse29_seq.onnx → era/averaged/fuse_efit_averaged_sequence.onnx RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:0274ad98cc51ee938422f3c9febd3c3cf3141a35d39ff2a62efeb75f9ce43577
3
- size 45464382
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cd3eaabcc7f7727e273f8063cb7d52bd324c287d42e62bbae4eeebb32b5b00ec
3
+ size 735805697
s0/fuse29_step.onnx → era/averaged/fuse_efit_averaged_step.onnx RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:9150698ab06af368eec857ea429191bf8a0593e9fd9d7e571bb7ce5bcbcf853a
3
- size 45081271
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8d19844716b817216035a72b480d24326c7fe28a64dbf17f8a9ea53178ea359e
3
+ size 732659205
era/averaged/input_ranges.json ADDED
@@ -0,0 +1,539 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "what": "per-channel ranges of the in-era training inputs, physical units, for a units check",
5
+ "ticks": "in-era training shots of the train_ and val_ shard files; per channel, shots where it is available and ticks where its governing indicators are 1; finite values only",
6
+ "n_shots": 29473,
7
+ "n_ticks": 2721294,
8
+ "channels": {
9
+ "pinj": {
10
+ "unit": "MW",
11
+ "n_ticks": 2448937,
12
+ "n_shots_available": 26253,
13
+ "mean": 2.6620712114599616,
14
+ "std": 198.71813710424962,
15
+ "min": -46005.02734375,
16
+ "max": 17.512712478637695,
17
+ "pct": {
18
+ "0.1": -0.004518520474433899,
19
+ "1": -1.766427999427833e-07,
20
+ "5": 4.112187479421436e-09,
21
+ "25": 1.1759493350982666,
22
+ "50": 3.7324979305267334,
23
+ "75": 5.975335597991943,
24
+ "95": 9.954481315612787,
25
+ "99": 12.31949230194093,
26
+ "99.9": 14.869131378173837
27
+ }
28
+ },
29
+ "tinj": {
30
+ "unit": "N m",
31
+ "n_ticks": 2448937,
32
+ "n_shots_available": 26253,
33
+ "mean": 2.139621423755444,
34
+ "std": 2.3421389935253805,
35
+ "min": -56.64438247680664,
36
+ "max": 129.98333740234375,
37
+ "pct": {
38
+ "0.1": -2.127721426010132,
39
+ "1": -0.6094307279586793,
40
+ "5": -1.6338495356649219e-07,
41
+ "25": 0.2990165650844574,
42
+ "50": 1.6169323921203613,
43
+ "75": 3.268897533416748,
44
+ "95": 6.551688003540035,
45
+ "99": 8.862295570373538,
46
+ "99.9": 11.422727119446009
47
+ }
48
+ },
49
+ "ech_mw": {
50
+ "unit": "MW",
51
+ "n_ticks": 2375795,
52
+ "n_shots_available": 25943,
53
+ "mean": 0.4480066792528712,
54
+ "std": 0.933062315286273,
55
+ "min": -0.2249511331319809,
56
+ "max": 4.400252342224121,
57
+ "pct": {
58
+ "0.1": -0.0168064936734736,
59
+ "1": -0.005653742989525199,
60
+ "5": -0.0007302230747882277,
61
+ "25": 0.0,
62
+ "50": 0.0,
63
+ "75": 0.0030533920507878065,
64
+ "95": 2.893243908882141,
65
+ "99": 3.3618859004974375,
66
+ "99.9": 3.585800656795506
67
+ }
68
+ },
69
+ "gasa_cal": {
70
+ "unit": "Torr L/s",
71
+ "n_ticks": 2664249,
72
+ "n_shots_available": 28863,
73
+ "mean": 15.33133604839954,
74
+ "std": 28.36489505716798,
75
+ "min": -0.9805486798286438,
76
+ "max": 348.17791748046875,
77
+ "pct": {
78
+ "0.1": -0.015396353930234908,
79
+ "1": 0.0006017432315275073,
80
+ "5": 0.0015028587076812983,
81
+ "25": 0.009874774143099785,
82
+ "50": 0.09126143902540207,
83
+ "75": 20.204317092895508,
84
+ "95": 71.37921600341798,
85
+ "99": 134.24203918457033,
86
+ "99.9": 211.79735192871095
87
+ }
88
+ },
89
+ "gasb_cal": {
90
+ "unit": "Torr L/s",
91
+ "n_ticks": 1673335,
92
+ "n_shots_available": 18008,
93
+ "mean": 1.990969273701691,
94
+ "std": 11.462580440714753,
95
+ "min": -0.5231055021286011,
96
+ "max": 287.6049499511719,
97
+ "pct": {
98
+ "0.1": 9.140472684521228e-06,
99
+ "1": 0.0005795558099634945,
100
+ "5": 0.0014833607710897923,
101
+ "25": 0.005166349466890097,
102
+ "50": 0.014020266011357307,
103
+ "75": 0.06187969818711281,
104
+ "95": 8.572828674316382,
105
+ "99": 57.822401962280246,
106
+ "99.9": 149.42160034179688
107
+ }
108
+ },
109
+ "gasc_cal": {
110
+ "unit": "Torr L/s",
111
+ "n_ticks": 1545281,
112
+ "n_shots_available": 16680,
113
+ "mean": 0.7112485837789,
114
+ "std": 8.255124087718748,
115
+ "min": -0.39658045768737793,
116
+ "max": 306.0269775390625,
117
+ "pct": {
118
+ "0.1": 5.6211974879261106e-05,
119
+ "1": 0.00018177895981352776,
120
+ "5": 0.0004595177888404578,
121
+ "25": 0.0012605531373992562,
122
+ "50": 0.003039183560758829,
123
+ "75": 0.011949803680181503,
124
+ "95": 0.17577648162841797,
125
+ "99": 13.914536666869594,
126
+ "99.9": 143.3022369384774
127
+ }
128
+ },
129
+ "gasd_cal": {
130
+ "unit": "Torr L/s",
131
+ "n_ticks": 1527327,
132
+ "n_shots_available": 16708,
133
+ "mean": 1.1131473380401657,
134
+ "std": 11.254847914946508,
135
+ "min": -0.5287260413169861,
136
+ "max": 771.50439453125,
137
+ "pct": {
138
+ "0.1": 3.574852235033177e-05,
139
+ "1": 0.00012206944666104391,
140
+ "5": 0.00032749708043411374,
141
+ "25": 0.001742765074595809,
142
+ "50": 0.004008667077869177,
143
+ "75": 0.011912376619875431,
144
+ "95": 0.33158734738826723,
145
+ "99": 35.77535942077627,
146
+ "99.9": 163.57034173583992
147
+ }
148
+ },
149
+ "gase_cal": {
150
+ "unit": "Torr L/s",
151
+ "n_ticks": 734608,
152
+ "n_shots_available": 8220,
153
+ "mean": 0.3558095323106283,
154
+ "std": 5.7933940192770965,
155
+ "min": -0.22113843262195587,
156
+ "max": 182.91339111328125,
157
+ "pct": {
158
+ "0.1": 6.105265848600538e-05,
159
+ "1": 0.0001349276426481083,
160
+ "5": 0.00024096852575894445,
161
+ "25": 0.0006113611161708832,
162
+ "50": 0.0015983160119503736,
163
+ "75": 0.007294745184481144,
164
+ "95": 0.06228043679147961,
165
+ "99": 0.8268458759784698,
166
+ "99.9": 129.1965726471041
167
+ }
168
+ },
169
+ "bt": {
170
+ "unit": "T",
171
+ "n_ticks": 2721294,
172
+ "n_shots_available": 29473,
173
+ "mean": -0.9821883979166512,
174
+ "std": 1.6355331835670526,
175
+ "min": -2.231337308883667,
176
+ "max": 2.251864194869995,
177
+ "pct": {
178
+ "0.1": -2.213805790901184,
179
+ "1": -2.181875057220459,
180
+ "5": -2.133511793613434,
181
+ "25": -2.0426759719848633,
182
+ "50": -1.8808952569961548,
183
+ "75": -1.1146354973316193,
184
+ "95": 2.0513723731040954,
185
+ "99": 2.0833286476135244,
186
+ "99.9": 2.182696231603623
187
+ }
188
+ },
189
+ "ip": {
190
+ "unit": "MA",
191
+ "n_ticks": 2721294,
192
+ "n_shots_available": 29473,
193
+ "mean": 0.8259562500751121,
194
+ "std": 0.6308176647686127,
195
+ "min": -1.873443841934204,
196
+ "max": 2.1881160736083984,
197
+ "pct": {
198
+ "0.1": -1.4841706775426864,
199
+ "1": -1.2937129378318786,
200
+ "5": -1.0783746361732482,
201
+ "25": 0.7264370024204254,
202
+ "50": 0.9817398488521576,
203
+ "75": 1.178851455450058,
204
+ "95": 1.4719667851924896,
205
+ "99": 1.630377171039581,
206
+ "99.9": 1.9495262613296536
207
+ }
208
+ },
209
+ "aminor": {
210
+ "unit": "m",
211
+ "n_ticks": 2620593,
212
+ "n_shots_available": 29452,
213
+ "mean": 0.5900859040383979,
214
+ "std": 0.021895064287316395,
215
+ "min": 0.22829703986644745,
216
+ "max": 0.8744112253189087,
217
+ "pct": {
218
+ "0.1": 0.5080196781158447,
219
+ "1": 0.5374526882171631,
220
+ "5": 0.550907027721405,
221
+ "25": 0.5785775780677795,
222
+ "50": 0.5920447111129761,
223
+ "75": 0.603398859500885,
224
+ "95": 0.626347541809082,
225
+ "99": 0.6415323066711426,
226
+ "99.9": 0.659116264343262
227
+ }
228
+ },
229
+ "rsurf": {
230
+ "unit": "m",
231
+ "n_ticks": 2620593,
232
+ "n_shots_available": 29452,
233
+ "mean": 1.6779164176758374,
234
+ "std": 0.028308914638618697,
235
+ "min": 1.2506932020187378,
236
+ "max": 1.9843217134475708,
237
+ "pct": {
238
+ "0.1": 1.5659388380050658,
239
+ "1": 1.6052298355102539,
240
+ "5": 1.6317129373550414,
241
+ "25": 1.6620378494262695,
242
+ "50": 1.6770155429840088,
243
+ "75": 1.6913384199142456,
244
+ "95": 1.7333730936050415,
245
+ "99": 1.742864499092102,
246
+ "99.9": 1.7624900875091556
247
+ }
248
+ },
249
+ "zsurf": {
250
+ "unit": "m",
251
+ "n_ticks": 2620593,
252
+ "n_shots_available": 29452,
253
+ "mean": -0.048890203977045646,
254
+ "std": 0.08377336901538064,
255
+ "min": -0.6153790354728699,
256
+ "max": 0.6005730628967285,
257
+ "pct": {
258
+ "0.1": -0.31802594423294067,
259
+ "1": -0.18586712539196015,
260
+ "5": -0.15249066054821014,
261
+ "25": -0.11547941714525223,
262
+ "50": -0.07223256677389145,
263
+ "75": 0.02473229169845581,
264
+ "95": 0.0917333960533142,
265
+ "99": 0.14512855887413026,
266
+ "99.9": 0.22172307670117003
267
+ }
268
+ },
269
+ "kappa": {
270
+ "unit": "dimensionless",
271
+ "n_ticks": 2620593,
272
+ "n_shots_available": 29452,
273
+ "mean": 1.751501826490992,
274
+ "std": 0.1400324837230824,
275
+ "min": 0.47134819626808167,
276
+ "max": 2.212841033935547,
277
+ "pct": {
278
+ "0.1": 1.1274076805114746,
279
+ "1": 1.2236492252349853,
280
+ "5": 1.442711305618286,
281
+ "25": 1.7150180339813232,
282
+ "50": 1.7899725437164307,
283
+ "75": 1.8340625762939453,
284
+ "95": 1.9024441480636596,
285
+ "99": 1.9540843105316164,
286
+ "99.9": 2.0269266796112118
287
+ }
288
+ },
289
+ "tritop": {
290
+ "unit": "dimensionless",
291
+ "n_ticks": 2620593,
292
+ "n_shots_available": 29452,
293
+ "mean": 0.39675614353298694,
294
+ "std": 0.23100077037562802,
295
+ "min": -0.8470005989074707,
296
+ "max": 1.0,
297
+ "pct": {
298
+ "0.1": -0.42250855803489684,
299
+ "1": -0.3465963649749756,
300
+ "5": 0.06454417407512665,
301
+ "25": 0.23909153044223785,
302
+ "50": 0.36581456661224365,
303
+ "75": 0.6160924434661865,
304
+ "95": 0.7593899011611938,
305
+ "99": 0.8330046582221986,
306
+ "99.9": 0.8900099992752075
307
+ }
308
+ },
309
+ "tribot": {
310
+ "unit": "dimensionless",
311
+ "n_ticks": 2620593,
312
+ "n_shots_available": 29452,
313
+ "mean": 0.499044209811709,
314
+ "std": 0.24968929063555592,
315
+ "min": -0.8580220937728882,
316
+ "max": 1.0,
317
+ "pct": {
318
+ "0.1": -0.7414657316207885,
319
+ "1": -0.6374403476715088,
320
+ "5": 0.10714363753795625,
321
+ "25": 0.34164735674858093,
322
+ "50": 0.5473953485488892,
323
+ "75": 0.6861203908920288,
324
+ "95": 0.7977024435997009,
325
+ "99": 0.8486711049079896,
326
+ "99.9": 0.9298709597587751
327
+ }
328
+ },
329
+ "drsep": {
330
+ "unit": "m",
331
+ "n_ticks": 2620593,
332
+ "n_shots_available": 29452,
333
+ "mean": -0.016213496036148,
334
+ "std": 0.06551636751544158,
335
+ "min": -0.10000000149011612,
336
+ "max": 0.10000000149011612,
337
+ "pct": {
338
+ "0.1": -0.10000000149011612,
339
+ "1": -0.10000000149011612,
340
+ "5": -0.10000000149011612,
341
+ "25": -0.10000000149011612,
342
+ "50": -0.010309768840670586,
343
+ "75": 0.01783900149166584,
344
+ "95": 0.10000000149011612,
345
+ "99": 0.10000000149011612,
346
+ "99.9": 0.10000000149011612
347
+ }
348
+ },
349
+ "rvsout": {
350
+ "unit": "m",
351
+ "n_ticks": 2328621,
352
+ "n_shots_available": 29452,
353
+ "mean": 1.3793721888678152,
354
+ "std": 0.12439954558098618,
355
+ "min": 1.0127931833267212,
356
+ "max": 2.365194320678711,
357
+ "pct": {
358
+ "0.1": 1.0181231236457824,
359
+ "1": 1.1652055978775024,
360
+ "5": 1.2722984552383423,
361
+ "25": 1.33443021774292,
362
+ "50": 1.3540239334106445,
363
+ "75": 1.375470519065857,
364
+ "95": 1.5593847036361694,
365
+ "99": 2.1677620887756346,
366
+ "99.9": 2.1831804895401006
367
+ }
368
+ },
369
+ "gapin": {
370
+ "unit": "m",
371
+ "n_ticks": 2620593,
372
+ "n_shots_available": 29452,
373
+ "mean": 0.07156120898996962,
374
+ "std": 0.0432587754778901,
375
+ "min": 0.0,
376
+ "max": 0.5885139107704163,
377
+ "pct": {
378
+ "0.1": 0.0,
379
+ "1": 6.068613345178164e-08,
380
+ "5": 0.00017625917098484933,
381
+ "25": 0.04369092732667923,
382
+ "50": 0.07125337421894073,
383
+ "75": 0.08842182159423828,
384
+ "95": 0.16015855669975282,
385
+ "99": 0.17832967877388,
386
+ "99.9": 0.206968146562578
387
+ }
388
+ },
389
+ "rvsou": {
390
+ "unit": "m",
391
+ "n_ticks": 1490672,
392
+ "n_shots_available": 29452,
393
+ "mean": 1.3348156930912045,
394
+ "std": 0.10334221557069992,
395
+ "min": 1.0054652690887451,
396
+ "max": 2.3410043716430664,
397
+ "pct": {
398
+ "0.1": 1.0645662200450898,
399
+ "1": 1.134060994386673,
400
+ "5": 1.1750591039657592,
401
+ "25": 1.3031675815582275,
402
+ "50": 1.345410704612732,
403
+ "75": 1.3619457483291626,
404
+ "95": 1.4928356945514678,
405
+ "99": 1.6975986802577974,
406
+ "99.9": 2.168685009956361
407
+ }
408
+ },
409
+ "rvsiu": {
410
+ "unit": "m",
411
+ "n_ticks": 1481823,
412
+ "n_shots_available": 29452,
413
+ "mean": 1.0716172190205149,
414
+ "std": 0.0769388213615333,
415
+ "min": 1.0010124444961548,
416
+ "max": 2.136025905609131,
417
+ "pct": {
418
+ "0.1": 1.0059778497219085,
419
+ "1": 1.0113178491592407,
420
+ "5": 1.0127403736114502,
421
+ "25": 1.0159999132156372,
422
+ "50": 1.019310712814331,
423
+ "75": 1.1208724975585938,
424
+ "95": 1.2043283700942993,
425
+ "99": 1.2522118377685547,
426
+ "99.9": 2.034771483421327
427
+ }
428
+ },
429
+ "shafranov": {
430
+ "unit": "m",
431
+ "n_ticks": 2620593,
432
+ "n_shots_available": 29452,
433
+ "mean": 0.06288958668123741,
434
+ "std": 0.034055322691537854,
435
+ "min": -0.4082394540309906,
436
+ "max": 1.303265929222107,
437
+ "pct": {
438
+ "0.1": -0.005711350440979004,
439
+ "1": 0.006995668411254883,
440
+ "5": 0.017068004608154295,
441
+ "25": 0.03921254351735115,
442
+ "50": 0.05793106555938721,
443
+ "75": 0.0799604281783104,
444
+ "95": 0.12869288325309752,
445
+ "99": 0.16819702863693242,
446
+ "99.9": 0.21218299579620437
447
+ }
448
+ },
449
+ "zeta_ou": {
450
+ "unit": "dimensionless",
451
+ "n_ticks": 2620567,
452
+ "n_shots_available": 29452,
453
+ "mean": -0.121227767772112,
454
+ "std": 0.05779856128475274,
455
+ "min": -2.3985445499420166,
456
+ "max": 0.380886971950531,
457
+ "pct": {
458
+ "0.1": -0.3649558596014976,
459
+ "1": -0.30748181700706484,
460
+ "5": -0.23631144613027572,
461
+ "25": -0.14568214118480682,
462
+ "50": -0.11330334842205048,
463
+ "75": -0.08447503671050072,
464
+ "95": -0.04684258103370671,
465
+ "99": -0.019024645723402546,
466
+ "99.9": 0.020023215260360466
467
+ }
468
+ },
469
+ "zeta_ol": {
470
+ "unit": "dimensionless",
471
+ "n_ticks": 2620567,
472
+ "n_shots_available": 29452,
473
+ "mean": -0.1841641108903704,
474
+ "std": 0.11566216697760474,
475
+ "min": -2.413620710372925,
476
+ "max": 0.25255295634269714,
477
+ "pct": {
478
+ "0.1": -0.7207684978246689,
479
+ "1": -0.6321860718727111,
480
+ "5": -0.3719328552484512,
481
+ "25": -0.25750887393951416,
482
+ "50": -0.15683022141456604,
483
+ "75": -0.1041066087782383,
484
+ "95": -0.04005956836044792,
485
+ "99": 0.008554169535636834,
486
+ "99.9": 0.048173654310407044
487
+ }
488
+ },
489
+ "vloop": {
490
+ "unit": "V",
491
+ "n_ticks": 2721294,
492
+ "n_shots_available": 29473,
493
+ "mean": 0.3860928196706128,
494
+ "std": 0.8461846896364685,
495
+ "min": -11.052228927612305,
496
+ "max": 10.875903129577637,
497
+ "pct": {
498
+ "0.1": -4.470359791755676,
499
+ "1": -2.008943867683411,
500
+ "5": -0.7982482045888901,
501
+ "25": 0.04159998148679733,
502
+ "50": 0.2804970145225525,
503
+ "75": 0.6723037213087082,
504
+ "95": 1.931114912033081,
505
+ "99": 2.662202775478358,
506
+ "99.9": 4.445908463478533
507
+ }
508
+ }
509
+ },
510
+ "indicators": {
511
+ "efit_valid": {
512
+ "fraction_of_ticks_1": 0.9629951780292758
513
+ },
514
+ "vloop_valid": {
515
+ "fraction_of_ticks_1": 1.0
516
+ },
517
+ "rvsout_present": {
518
+ "fraction_of_ticks_1": 0.8557035733735495
519
+ },
520
+ "rvsou_present": {
521
+ "fraction_of_ticks_1": 0.5477805779162414
522
+ },
523
+ "rvsiu_present": {
524
+ "fraction_of_ticks_1": 0.5445288160705899
525
+ }
526
+ },
527
+ "units_check_rule": {
528
+ "span": "[pct 0.1, pct 99.9]",
529
+ "suspect_if_outside": "[pct0.1 - 3 * span_width, pct99.9 + 3 * span_width]",
530
+ "span_factor": 3.0,
531
+ "note": "a smoke test for unit errors, not a distribution-shift detector"
532
+ },
533
+ "dataset": {
534
+ "root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
535
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c",
536
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7"
537
+ },
538
+ "written_utc": "2026-11-08T22:50:46Z"
539
+ }
era/averaged/model_config.json ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "protocol": "in era (random split of shots 125500-205774; DECISIONS D50, D55)",
5
+ "form": "averaged",
6
+ "form_meaning": "averaged: the eight in-era finals evaluated side by side; at every tick the mean of their raw outputs (regression z-scores and the H-mode logit) is de-normalised and passed through the sigmoid, as the eight-replicate ensemble was scored",
7
+ "members": [
8
+ {
9
+ "run": "runs/FULLextfinal_era_r0",
10
+ "replicate": 0,
11
+ "seed": 100,
12
+ "checkpoint_sha256": "28390d5950ec18477394a85dc73498afa0f847502514251b7c96c97569632d96",
13
+ "config_sha256": "ddec260834c0f5fdaa5303382140e9c0bca1e3028ccd478c2c2a65f62d6f2398",
14
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
15
+ },
16
+ {
17
+ "run": "runs/FULLextfinal_era_r1",
18
+ "replicate": 1,
19
+ "seed": 101,
20
+ "checkpoint_sha256": "46053aa6a7e2b96c3236fba561dc74efb772ce5fb4c3e06c177e9b0b44a10fe2",
21
+ "config_sha256": "7f69cc663cf2396df0564115e87e5e00c8eb6ec1382179aef0627f1706ef590e",
22
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
23
+ },
24
+ {
25
+ "run": "runs/FULLextfinal_era_r2",
26
+ "replicate": 2,
27
+ "seed": 102,
28
+ "checkpoint_sha256": "1855ba2c6bb045a31fddbf542bef9d9c748a0c0f8630bc23b4f4574ec92e4e30",
29
+ "config_sha256": "f7d78968cf29b2a319bad9ccfa851e78fc471fc979f77757732059f8f655d98e",
30
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
31
+ },
32
+ {
33
+ "run": "runs/FULLextfinal_era_r3",
34
+ "replicate": 3,
35
+ "seed": 103,
36
+ "checkpoint_sha256": "f9ee89557c3fb5d7ecda0e21269cc17b75337d76f0db9e2480a49da981ddb3b0",
37
+ "config_sha256": "3913dea303f6b892d31e82d6f0cad644105de0ed176ede4d604c94c94fcf7a7f",
38
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
39
+ },
40
+ {
41
+ "run": "runs/FULLextfinal_era_r4",
42
+ "replicate": 4,
43
+ "seed": 104,
44
+ "checkpoint_sha256": "878583951001053e472a43428ae11e91737285f90fe6ba6d9dac98a618e60121",
45
+ "config_sha256": "e0686f2bd559e0ea5bc99a45b5a55d9ec38d064c27ecfdc3a8728059403f36aa",
46
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
47
+ },
48
+ {
49
+ "run": "runs/FULLextfinal_era_r5",
50
+ "replicate": 5,
51
+ "seed": 105,
52
+ "checkpoint_sha256": "cae99aaee1adf7a72b09ab4416f3fc7834652191f1d8e298a88900908508ac05",
53
+ "config_sha256": "a29e4ad97b4731e4425eec601821d5a10f2a84f6a80794e9f108a96ae44cf7c8",
54
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
55
+ },
56
+ {
57
+ "run": "runs/FULLextfinal_era_r6",
58
+ "replicate": 6,
59
+ "seed": 106,
60
+ "checkpoint_sha256": "be34620989ce330df4b1e311242d4b93499a67d5a04ee8b813d41faa3137459a",
61
+ "config_sha256": "eda0c86a4cf575b62576a155569fb2ef032af4e8e38f9873c7bc05d7ef8a0720",
62
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
63
+ },
64
+ {
65
+ "run": "runs/FULLextfinal_era_r7",
66
+ "replicate": 7,
67
+ "seed": 107,
68
+ "checkpoint_sha256": "bf42ec8fc7b0c6dee2011ded621a04c85e453a3ce3e896cf6e6eb0a095e64bd5",
69
+ "config_sha256": "bbd3216e2e47688797ddc2659001cb7172c0717fc01d83316b11f47481dad49c",
70
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
71
+ }
72
+ ],
73
+ "cadence": {
74
+ "period_ms": 50.0,
75
+ "hz": 20,
76
+ "rule": "one step-graph call per 50 ms of simulated time; each tick describes the trailing interval (t - 50 ms, t]; reset the state to zeros at the start of every shot"
77
+ },
78
+ "inputs": {
79
+ "inputs": {
80
+ "shape": [
81
+ "batch",
82
+ 25
83
+ ],
84
+ "dtype": "float32",
85
+ "names": [
86
+ "pinj",
87
+ "tinj",
88
+ "ech_mw",
89
+ "gasa_cal",
90
+ "gasb_cal",
91
+ "gasc_cal",
92
+ "gasd_cal",
93
+ "gase_cal",
94
+ "bt",
95
+ "ip",
96
+ "aminor",
97
+ "rsurf",
98
+ "zsurf",
99
+ "kappa",
100
+ "tritop",
101
+ "tribot",
102
+ "drsep",
103
+ "rvsout",
104
+ "gapin",
105
+ "rvsou",
106
+ "rvsiu",
107
+ "shafranov",
108
+ "zeta_ou",
109
+ "zeta_ol",
110
+ "vloop"
111
+ ],
112
+ "units": {
113
+ "pinj": "MW",
114
+ "tinj": "N m",
115
+ "ech_mw": "MW",
116
+ "gasa_cal": "Torr L/s",
117
+ "gasb_cal": "Torr L/s",
118
+ "gasc_cal": "Torr L/s",
119
+ "gasd_cal": "Torr L/s",
120
+ "gase_cal": "Torr L/s",
121
+ "bt": "T",
122
+ "ip": "MA",
123
+ "aminor": "m",
124
+ "rsurf": "m",
125
+ "zsurf": "m",
126
+ "kappa": "dimensionless",
127
+ "tritop": "dimensionless",
128
+ "tribot": "dimensionless",
129
+ "drsep": "m",
130
+ "rvsout": "m",
131
+ "gapin": "m",
132
+ "rvsou": "m",
133
+ "rvsiu": "m",
134
+ "shafranov": "m",
135
+ "zeta_ou": "dimensionless",
136
+ "zeta_ol": "dimensionless",
137
+ "vloop": "V"
138
+ },
139
+ "sources": {
140
+ "pinj": "PtData bmspinj: neutral-beam injected power, all sources",
141
+ "tinj": "PtData bmstinj: neutral-beam injected torque",
142
+ "ech_mw": "MDSplus \\RF::ECHPWRC: calibrated total ECH power injected",
143
+ "gasa_cal": "MDSplus NEUTRALS GASFLOW.GASA:FLOW: calibrated gas flow, valve A",
144
+ "gasb_cal": "MDSplus NEUTRALS GASFLOW.GASB:FLOW: calibrated gas flow, valve B",
145
+ "gasc_cal": "MDSplus NEUTRALS GASFLOW.GASC:FLOW: calibrated gas flow, valve C",
146
+ "gasd_cal": "MDSplus NEUTRALS GASFLOW.GASD:FLOW: calibrated gas flow, valve D",
147
+ "gase_cal": "MDSplus NEUTRALS GASFLOW.GASE:FLOW: calibrated gas flow, valve E",
148
+ "bt": "PtData bt: vacuum toroidal field, signed",
149
+ "ip": "PtData ip: measured plasma current (amperes / 1e6)",
150
+ "aminor": "EFIT01 AMINOR: minor radius",
151
+ "rsurf": "EFIT01 RSURF: major radius of the boundary's geometric centre",
152
+ "zsurf": "EFIT01 ZSURF: height of the boundary's geometric centre",
153
+ "kappa": "EFIT01 KAPPA: elongation",
154
+ "tritop": "EFIT01 TRITOP: upper triangularity",
155
+ "tribot": "EFIT01 TRIBOT: lower triangularity",
156
+ "drsep": "EFIT01 DRSEP: separatrix separation at the outer midplane, clipped to +-0.1 m per slice",
157
+ "rvsout": "EFIT01 RVSOUT: major radius of the outer (lower) strike point",
158
+ "gapin": "EFIT01 GAPIN: inner gap",
159
+ "rvsou": "EFIT01 RVSOU: major radius of the upper outer strike point",
160
+ "rvsiu": "EFIT01 RVSIU: major radius of the upper inner strike point",
161
+ "shafranov": "EFIT01 R0 - RSURF: Shafranov shift",
162
+ "zeta_ou": "Luce squareness, outer-upper quadrant, from the EFIT01 boundary vertices",
163
+ "zeta_ol": "Luce squareness, outer-lower quadrant, from the EFIT01 boundary vertices",
164
+ "vloop": "PtData VLOOP: loop voltage"
165
+ },
166
+ "grid_rule": {
167
+ "pinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
168
+ "tinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
169
+ "ech_mw": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
170
+ "gasa_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
171
+ "gasb_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
172
+ "gasc_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
173
+ "gasd_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
174
+ "gase_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
175
+ "bt": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
176
+ "ip": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
177
+ "aminor": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
178
+ "rsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
179
+ "zsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
180
+ "kappa": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
181
+ "tritop": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
182
+ "tribot": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
183
+ "drsep": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
184
+ "rvsout": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
185
+ "gapin": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
186
+ "rvsou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
187
+ "rvsiu": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
188
+ "shafranov": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
189
+ "zeta_ou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
190
+ "zeta_ol": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
191
+ "vloop": "mean of the native samples in (t - 50 ms, t] (INPUT_CONTRACT 3.3)"
192
+ },
193
+ "zeroed_when_indicator_is_0": {
194
+ "pinj": [],
195
+ "tinj": [],
196
+ "ech_mw": [],
197
+ "gasa_cal": [],
198
+ "gasb_cal": [],
199
+ "gasc_cal": [],
200
+ "gasd_cal": [],
201
+ "gase_cal": [],
202
+ "bt": [],
203
+ "ip": [],
204
+ "aminor": [
205
+ "efit_valid"
206
+ ],
207
+ "rsurf": [
208
+ "efit_valid"
209
+ ],
210
+ "zsurf": [
211
+ "efit_valid"
212
+ ],
213
+ "kappa": [
214
+ "efit_valid"
215
+ ],
216
+ "tritop": [
217
+ "efit_valid"
218
+ ],
219
+ "tribot": [
220
+ "efit_valid"
221
+ ],
222
+ "drsep": [
223
+ "efit_valid"
224
+ ],
225
+ "rvsout": [
226
+ "efit_valid",
227
+ "rvsout_present"
228
+ ],
229
+ "gapin": [
230
+ "efit_valid"
231
+ ],
232
+ "rvsou": [
233
+ "efit_valid",
234
+ "rvsou_present"
235
+ ],
236
+ "rvsiu": [
237
+ "efit_valid",
238
+ "rvsiu_present"
239
+ ],
240
+ "shafranov": [
241
+ "efit_valid"
242
+ ],
243
+ "zeta_ou": [
244
+ "efit_valid"
245
+ ],
246
+ "zeta_ol": [
247
+ "efit_valid"
248
+ ],
249
+ "vloop": [
250
+ "vloop_valid"
251
+ ]
252
+ },
253
+ "note": "Physical units, contract order (docs/INPUT_CONTRACT.md \u00a72). Where a governing indicator is 0 the value is ignored (any number, or NaN). NaN anywhere is read as the training mean, so never pass NaN for a value you have."
254
+ },
255
+ "indicators": {
256
+ "shape": [
257
+ "batch",
258
+ 5
259
+ ],
260
+ "dtype": "float32",
261
+ "values": "0 or 1, per tick",
262
+ "names": [
263
+ "efit_valid",
264
+ "vloop_valid",
265
+ "rvsout_present",
266
+ "rvsou_present",
267
+ "rvsiu_present"
268
+ ],
269
+ "meaning": {
270
+ "efit_valid": "1 when at least one usable EFIT slice lies in (t - 50 ms, t]; 0 otherwise",
271
+ "vloop_valid": "1 when at least one loop-voltage sample lies in (t - 50 ms, t]; 0 otherwise",
272
+ "rvsout_present": "1 when at least one slice in the window has a real outer strike point; 0 otherwise",
273
+ "rvsou_present": "1 when at least one slice in the window has a real upper outer strike point; 0 otherwise",
274
+ "rvsiu_present": "1 when at least one slice in the window has a real upper inner strike point; 0 otherwise"
275
+ }
276
+ },
277
+ "available": {
278
+ "shape": [
279
+ "batch",
280
+ 25
281
+ ],
282
+ "dtype": "float32",
283
+ "values": "0 or 1, per shot",
284
+ "names": [
285
+ "pinj",
286
+ "tinj",
287
+ "ech_mw",
288
+ "gasa_cal",
289
+ "gasb_cal",
290
+ "gasc_cal",
291
+ "gasd_cal",
292
+ "gase_cal",
293
+ "bt",
294
+ "ip",
295
+ "aminor",
296
+ "rsurf",
297
+ "zsurf",
298
+ "kappa",
299
+ "tritop",
300
+ "tribot",
301
+ "drsep",
302
+ "rvsout",
303
+ "gapin",
304
+ "rvsou",
305
+ "rvsiu",
306
+ "shafranov",
307
+ "zeta_ou",
308
+ "zeta_ol",
309
+ "vloop"
310
+ ],
311
+ "default": 1,
312
+ "note": "1 = a usable record of this channel exists for the shot (the normal case). 0 = no record for the whole shot: the value is ignored and the model receives the flag, as it did in training for missing records. Keep it constant within a shot."
313
+ }
314
+ },
315
+ "outputs": {
316
+ "predictions": {
317
+ "shape": [
318
+ "batch",
319
+ 9
320
+ ],
321
+ "dtype": "float32",
322
+ "names": [
323
+ "ne",
324
+ "te_ped",
325
+ "ti_ped",
326
+ "t_rot_ped",
327
+ "ne_knee",
328
+ "te_knee",
329
+ "rho_sym",
330
+ "ne_top_loc",
331
+ "hmode"
332
+ ],
333
+ "units": {
334
+ "ne": "1e19 m^-3",
335
+ "te_ped": "keV",
336
+ "ti_ped": "keV",
337
+ "t_rot_ped": "krad/s",
338
+ "ne_knee": "1e19 m^-3",
339
+ "te_knee": "keV",
340
+ "rho_sym": "rho (normalised radius)",
341
+ "ne_top_loc": "rho (normalised radius)",
342
+ "hmode": "probability in [0, 1]"
343
+ },
344
+ "meaning": {
345
+ "ne": "electron density at rho = 0.85",
346
+ "te_ped": "electron temperature at rho = 0.85",
347
+ "ti_ped": "ion temperature at rho = 0.85",
348
+ "t_rot_ped": "toroidal rotation at rho = 0.85",
349
+ "ne_knee": "electron density on the pedestal fit at its knee (H-mode only)",
350
+ "te_knee": "electron temperature on its pedestal fit at its knee (H-mode only)",
351
+ "rho_sym": "symmetry point of the density pedestal fit (H-mode only)",
352
+ "ne_top_loc": "knee (pedestal top) of the density pedestal fit (H-mode only)",
353
+ "hmode": "the plasma is in H-mode (sigmoid of the averaged or single logit)"
354
+ }
355
+ },
356
+ "hmode_gated_heads": [
357
+ "ne_knee",
358
+ "te_knee",
359
+ "rho_sym",
360
+ "ne_top_loc"
361
+ ],
362
+ "hmode_gated_note": "Trained on H-mode ticks only and undefined in L-mode; the graph emits a number anyway. Report them only where predictions[hmode] >= threshold; otherwise treat them as undefined, never as 0.",
363
+ "hmode_thresholds": {
364
+ "frozen": {
365
+ "balanced": 0.53,
366
+ "conservative": 0.47
367
+ },
368
+ "definitions": {
369
+ "balanced": "maximum Youden's J on validation (the best trade between missed H-mode and admitted L-mode ticks)",
370
+ "conservative": "the lowest threshold keeping L-mode ticks at or below 5 % of admitted validation ticks"
371
+ },
372
+ "set_on": "the mean of the eight finals' hmode logits, in-era validation split",
373
+ "source": "receipts/G7_export_inputs/hmode_thresholds_both_forms.json (DECISIONS D64)",
374
+ "source_sha256": "b9c027ec369a251dcb48bbc7c444bc39628d9e9ad24b35bc1ce1845705b6a3d1",
375
+ "note": "Gate the four H-mode-only heads on predictions[hmode] >= threshold; MODEL_CARD.md \u00a76."
376
+ }
377
+ },
378
+ "graphs": {
379
+ "step": {
380
+ "file": "fuse_efit_averaged_step.onnx",
381
+ "purpose": "one 50 ms tick per call; unbounded shot length",
382
+ "inputs": {
383
+ "inputs": [
384
+ "batch",
385
+ 25
386
+ ],
387
+ "indicators": [
388
+ "batch",
389
+ 5
390
+ ],
391
+ "available": [
392
+ "batch",
393
+ 25
394
+ ],
395
+ "conv_state": [
396
+ 48,
397
+ "batch",
398
+ 1792,
399
+ 3
400
+ ],
401
+ "ssm_state": [
402
+ 48,
403
+ "batch",
404
+ 12,
405
+ 128,
406
+ 64
407
+ ]
408
+ },
409
+ "outputs": {
410
+ "predictions": [
411
+ "batch",
412
+ 9
413
+ ],
414
+ "conv_state_out": [
415
+ 48,
416
+ "batch",
417
+ 1792,
418
+ 3
419
+ ],
420
+ "ssm_state_out": [
421
+ 48,
422
+ "batch",
423
+ 12,
424
+ 128,
425
+ 64
426
+ ]
427
+ }
428
+ },
429
+ "sequence": {
430
+ "file": "fuse_efit_averaged_sequence.onnx",
431
+ "seq_len": 256,
432
+ "purpose": "a whole window of exactly seq_len ticks; right-pad a shorter shot (any finite values, indicators 1) and keep the first K outputs, which is exact because the model is causal; use the step graph for longer shots",
433
+ "inputs": {
434
+ "inputs": [
435
+ "batch",
436
+ 256,
437
+ 25
438
+ ],
439
+ "indicators": [
440
+ "batch",
441
+ 256,
442
+ 5
443
+ ],
444
+ "available": [
445
+ "batch",
446
+ 25
447
+ ]
448
+ },
449
+ "outputs": {
450
+ "predictions": [
451
+ "batch",
452
+ 256,
453
+ 9
454
+ ]
455
+ }
456
+ }
457
+ },
458
+ "state": {
459
+ "conv_state": [
460
+ "n_members x n_layers",
461
+ "batch",
462
+ 1792,
463
+ 3
464
+ ],
465
+ "ssm_state": [
466
+ "n_members x n_layers",
467
+ "batch",
468
+ 12,
469
+ 128,
470
+ 64
471
+ ],
472
+ "leading_axis": 48,
473
+ "n_members": 8,
474
+ "n_layers": 6,
475
+ "initial": "all zeros at the start of every shot",
476
+ "bytes_per_shot": 19906560,
477
+ "note": "Opaque: store what the step graph returns and pass it back on the next call. The two forms differ only in the leading axis of these two tensors."
478
+ },
479
+ "architecture": {
480
+ "family": "Mamba-2 state-space sequence model",
481
+ "d_model": 768,
482
+ "n_layers": 6,
483
+ "d_state": 64,
484
+ "d_conv": 4,
485
+ "expand": 2,
486
+ "headdim": 128,
487
+ "nheads": 12,
488
+ "ngroups": 2,
489
+ "d_inner": 1536,
490
+ "conv_dim": 1792,
491
+ "chunk_size": 100,
492
+ "n_inputs_trunk": 30,
493
+ "n_params_per_member": 22882785,
494
+ "n_members": 8
495
+ },
496
+ "input_transform": {
497
+ "clip_sigma": 20.0,
498
+ "std_floor": 1e-06,
499
+ "file": "norms.json",
500
+ "applied": "inside the graphs"
501
+ },
502
+ "dtype": "float32",
503
+ "onnx_opset": 17,
504
+ "documentation": "docs/EXPORT.md, docs/INPUT_CONTRACT.md, MODEL_CARD.md"
505
+ }
era/averaged/norms.json ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "note": "The statistics baked into the graphs, for inspection and for reproducing the transform outside them. A host does not need this file to run the model.",
4
+ "input_transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma) per channel, x in physical units; not-a-number -> 0; then z -> 0 where the channel is unavailable or a governing indicator is 0",
5
+ "clip_sigma": 20.0,
6
+ "std_floor": 1e-06,
7
+ "inputs": {
8
+ "names": [
9
+ "pinj",
10
+ "tinj",
11
+ "ech_mw",
12
+ "gasa_cal",
13
+ "gasb_cal",
14
+ "gasc_cal",
15
+ "gasd_cal",
16
+ "gase_cal",
17
+ "bt",
18
+ "ip",
19
+ "aminor",
20
+ "rsurf",
21
+ "zsurf",
22
+ "kappa",
23
+ "tritop",
24
+ "tribot",
25
+ "drsep",
26
+ "rvsout",
27
+ "gapin",
28
+ "rvsou",
29
+ "rvsiu",
30
+ "shafranov",
31
+ "zeta_ou",
32
+ "zeta_ol",
33
+ "vloop"
34
+ ],
35
+ "units": [
36
+ "MW",
37
+ "N m",
38
+ "MW",
39
+ "Torr L/s",
40
+ "Torr L/s",
41
+ "Torr L/s",
42
+ "Torr L/s",
43
+ "Torr L/s",
44
+ "T",
45
+ "MA",
46
+ "m",
47
+ "m",
48
+ "m",
49
+ "dimensionless",
50
+ "dimensionless",
51
+ "dimensionless",
52
+ "m",
53
+ "m",
54
+ "m",
55
+ "m",
56
+ "m",
57
+ "m",
58
+ "dimensionless",
59
+ "dimensionless",
60
+ "V"
61
+ ],
62
+ "mean": [
63
+ 3.942431288688486,
64
+ 2.2096625295179186,
65
+ 0.4654761552810669,
66
+ 15.061767862270832,
67
+ 1.4919341408834326,
68
+ 0.23709206776972092,
69
+ 0.5197598621986353,
70
+ 0.021391137846201724,
71
+ -0.9720653400720033,
72
+ 0.8316150307655334,
73
+ 0.589589536190033,
74
+ 1.677773356437683,
75
+ -0.05055605247616768,
76
+ 1.7517046928405762,
77
+ 0.3966327905654907,
78
+ 0.5042979121208191,
79
+ -0.015922507271170616,
80
+ 1.3765016794204712,
81
+ 0.06946969032287598,
82
+ 1.3273015022277832,
83
+ 1.0669854879379272,
84
+ 0.06224634870886803,
85
+ -0.12007330358028412,
86
+ -0.18449491262435913,
87
+ 0.38771408796310425
88
+ ],
89
+ "std": [
90
+ 3.195729724075188,
91
+ 2.217424308626617,
92
+ 0.9441152811050415,
93
+ 26.64435504465176,
94
+ 6.993835352190119,
95
+ 1.6900931025396266,
96
+ 3.7040796936604687,
97
+ 0.10363119099527826,
98
+ 1.6484726180777753,
99
+ 0.6177622675895691,
100
+ 0.02114672213792801,
101
+ 0.027116550132632256,
102
+ 0.0815875306725502,
103
+ 0.14088328182697296,
104
+ 0.23491179943084717,
105
+ 0.24562624096870422,
106
+ 0.06496237963438034,
107
+ 0.12265536934137344,
108
+ 0.04288293793797493,
109
+ 0.09615185856819153,
110
+ 0.06577663868665695,
111
+ 0.03295154869556427,
112
+ 0.054369814693927765,
113
+ 0.10875540971755981,
114
+ 0.7761709094047546
115
+ ]
116
+ },
117
+ "stages": {
118
+ "note": "The composed statistics above are stage 2 applied after stage 1: mean = m1 + s1 * m2, std = s1 * s2. Stage 1 is the dataset's stored scale (identity except for the beam, gas and field channels); stage 2 is the in-era training-split standardisation.",
119
+ "stage1_physical_to_stored": {
120
+ "mean": [
121
+ 2.8111997039100878,
122
+ 2.154143940948575,
123
+ 0.0,
124
+ 14.89178144369171,
125
+ 1.9421402622606716,
126
+ 0.7508911827356307,
127
+ 1.0383906373403984,
128
+ 0.3920832239686922,
129
+ -1.0310375752078498,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 0.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 0.0,
140
+ 0.0,
141
+ 0.0,
142
+ 0.0,
143
+ 0.0,
144
+ 0.0,
145
+ 0.0
146
+ ],
147
+ "std": [
148
+ 194.08418888726106,
149
+ 2.3684465859740262,
150
+ 1.0,
151
+ 27.289184462156058,
152
+ 11.092415079529571,
153
+ 9.017289768908354,
154
+ 12.055982101097918,
155
+ 6.498888909025979,
156
+ 1.599000778986496,
157
+ 1.0,
158
+ 1.0,
159
+ 1.0,
160
+ 1.0,
161
+ 1.0,
162
+ 1.0,
163
+ 1.0,
164
+ 1.0,
165
+ 1.0,
166
+ 1.0,
167
+ 1.0,
168
+ 1.0,
169
+ 1.0,
170
+ 1.0,
171
+ 1.0,
172
+ 1.0
173
+ ]
174
+ },
175
+ "stage2_stored_to_model": {
176
+ "mean": [
177
+ 0.005828561261296272,
178
+ 0.023440929129719734,
179
+ 0.4654761552810669,
180
+ 0.006229076534509659,
181
+ -0.040586844086647034,
182
+ -0.05697932839393616,
183
+ -0.04301854223012924,
184
+ -0.057039301842451096,
185
+ 0.03688067942857742,
186
+ 0.8316150307655334,
187
+ 0.589589536190033,
188
+ 1.677773356437683,
189
+ -0.05055605247616768,
190
+ 1.7517046928405762,
191
+ 0.3966327905654907,
192
+ 0.5042979121208191,
193
+ -0.015922507271170616,
194
+ 1.3765016794204712,
195
+ 0.06946969032287598,
196
+ 1.3273015022277832,
197
+ 1.0669854879379272,
198
+ 0.06224634870886803,
199
+ -0.12007330358028412,
200
+ -0.18449491262435913,
201
+ 0.38771408796310425
202
+ ],
203
+ "std": [
204
+ 0.01646568812429905,
205
+ 0.9362357258796692,
206
+ 0.9441152811050415,
207
+ 0.9763705134391785,
208
+ 0.6305060982704163,
209
+ 0.1874280571937561,
210
+ 0.30723997950553894,
211
+ 0.015945985913276672,
212
+ 1.0309392213821411,
213
+ 0.6177622675895691,
214
+ 0.02114672213792801,
215
+ 0.027116550132632256,
216
+ 0.0815875306725502,
217
+ 0.14088328182697296,
218
+ 0.23491179943084717,
219
+ 0.24562624096870422,
220
+ 0.06496237963438034,
221
+ 0.12265536934137344,
222
+ 0.04288293793797493,
223
+ 0.09615185856819153,
224
+ 0.06577663868665695,
225
+ 0.03295154869556427,
226
+ 0.054369814693927765,
227
+ 0.10875540971755981,
228
+ 0.7761709094047546
229
+ ]
230
+ }
231
+ },
232
+ "indicators": {
233
+ "names": [
234
+ "efit_valid",
235
+ "vloop_valid",
236
+ "rvsout_present",
237
+ "rvsou_present",
238
+ "rvsiu_present"
239
+ ],
240
+ "transform": "none: 0/1 passed as they are (read as 1 when > 0.5)"
241
+ },
242
+ "targets": {
243
+ "ne": {
244
+ "mean": 2.75117452029956,
245
+ "std": 1.6541537951642646,
246
+ "unit": "1e19 m^-3"
247
+ },
248
+ "te_ped": {
249
+ "mean": 0.5915626266199993,
250
+ "std": 0.43467429211593894,
251
+ "unit": "keV"
252
+ },
253
+ "ti_ped": {
254
+ "mean": 1.0168501881070604,
255
+ "std": 0.6810960596049213,
256
+ "unit": "keV"
257
+ },
258
+ "t_rot_ped": {
259
+ "mean": 21.24461452086136,
260
+ "std": 16.5914840454496,
261
+ "unit": "krad/s"
262
+ },
263
+ "ne_knee": {
264
+ "mean": 2.4166156855194076,
265
+ "std": 1.5067549102828321,
266
+ "unit": "1e19 m^-3"
267
+ },
268
+ "te_knee": {
269
+ "mean": 0.44874806504511355,
270
+ "std": 0.33939948718776175,
271
+ "unit": "keV"
272
+ },
273
+ "rho_sym": {
274
+ "mean": 0.9757616411014167,
275
+ "std": 0.04329206963559261,
276
+ "unit": "rho (normalised radius)"
277
+ },
278
+ "ne_top_loc": {
279
+ "mean": 0.9261865006629387,
280
+ "std": 0.04989716973523974,
281
+ "unit": "rho (normalised radius)"
282
+ }
283
+ },
284
+ "hmode": {
285
+ "transform": "probability = sigmoid(logit); in the averaged form the logit is the mean of the members' logits"
286
+ },
287
+ "source": {
288
+ "dataset_root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
289
+ "norms_file": "norms.json",
290
+ "norms_sha256": "e28b8331a042054543dc97c49d977372012cfbb86119c276b536a1e945f5e926",
291
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7",
292
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c"
293
+ }
294
+ }
era/averaged/provenance.json ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "form": "averaged",
5
+ "exported_utc": "2026-11-08T22:51:23Z",
6
+ "host": "x4217c6s0b0n0",
7
+ "members": [
8
+ {
9
+ "run": "runs/FULLextfinal_era_r0",
10
+ "replicate": 0,
11
+ "seed": 100,
12
+ "checkpoint_sha256": "28390d5950ec18477394a85dc73498afa0f847502514251b7c96c97569632d96",
13
+ "config_sha256": "ddec260834c0f5fdaa5303382140e9c0bca1e3028ccd478c2c2a65f62d6f2398",
14
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
15
+ },
16
+ {
17
+ "run": "runs/FULLextfinal_era_r1",
18
+ "replicate": 1,
19
+ "seed": 101,
20
+ "checkpoint_sha256": "46053aa6a7e2b96c3236fba561dc74efb772ce5fb4c3e06c177e9b0b44a10fe2",
21
+ "config_sha256": "7f69cc663cf2396df0564115e87e5e00c8eb6ec1382179aef0627f1706ef590e",
22
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
23
+ },
24
+ {
25
+ "run": "runs/FULLextfinal_era_r2",
26
+ "replicate": 2,
27
+ "seed": 102,
28
+ "checkpoint_sha256": "1855ba2c6bb045a31fddbf542bef9d9c748a0c0f8630bc23b4f4574ec92e4e30",
29
+ "config_sha256": "f7d78968cf29b2a319bad9ccfa851e78fc471fc979f77757732059f8f655d98e",
30
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
31
+ },
32
+ {
33
+ "run": "runs/FULLextfinal_era_r3",
34
+ "replicate": 3,
35
+ "seed": 103,
36
+ "checkpoint_sha256": "f9ee89557c3fb5d7ecda0e21269cc17b75337d76f0db9e2480a49da981ddb3b0",
37
+ "config_sha256": "3913dea303f6b892d31e82d6f0cad644105de0ed176ede4d604c94c94fcf7a7f",
38
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
39
+ },
40
+ {
41
+ "run": "runs/FULLextfinal_era_r4",
42
+ "replicate": 4,
43
+ "seed": 104,
44
+ "checkpoint_sha256": "878583951001053e472a43428ae11e91737285f90fe6ba6d9dac98a618e60121",
45
+ "config_sha256": "e0686f2bd559e0ea5bc99a45b5a55d9ec38d064c27ecfdc3a8728059403f36aa",
46
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
47
+ },
48
+ {
49
+ "run": "runs/FULLextfinal_era_r5",
50
+ "replicate": 5,
51
+ "seed": 105,
52
+ "checkpoint_sha256": "cae99aaee1adf7a72b09ab4416f3fc7834652191f1d8e298a88900908508ac05",
53
+ "config_sha256": "a29e4ad97b4731e4425eec601821d5a10f2a84f6a80794e9f108a96ae44cf7c8",
54
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
55
+ },
56
+ {
57
+ "run": "runs/FULLextfinal_era_r6",
58
+ "replicate": 6,
59
+ "seed": 106,
60
+ "checkpoint_sha256": "be34620989ce330df4b1e311242d4b93499a67d5a04ee8b813d41faa3137459a",
61
+ "config_sha256": "eda0c86a4cf575b62576a155569fb2ef032af4e8e38f9873c7bc05d7ef8a0720",
62
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
63
+ },
64
+ {
65
+ "run": "runs/FULLextfinal_era_r7",
66
+ "replicate": 7,
67
+ "seed": 107,
68
+ "checkpoint_sha256": "bf42ec8fc7b0c6dee2011ded621a04c85e453a3ce3e896cf6e6eb0a095e64bd5",
69
+ "config_sha256": "bbd3216e2e47688797ddc2659001cb7172c0717fc01d83316b11f47481dad49c",
70
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
71
+ }
72
+ ],
73
+ "freeze_record": {
74
+ "path": "receipts/G5_freeze.json",
75
+ "sha256": "1fbd776750736a6995a5de48b74b16bc13e0a2a1539972e46be23e8dbb49316e"
76
+ },
77
+ "dataset": {
78
+ "root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
79
+ "norms_file": "norms.json",
80
+ "norms_sha256": "e28b8331a042054543dc97c49d977372012cfbb86119c276b536a1e945f5e926",
81
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7",
82
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c"
83
+ },
84
+ "exporter": "torch.onnx.export, TorchScript path (dynamo=False), do_constant_folding",
85
+ "onnx_opset": 17,
86
+ "seq_len": 256,
87
+ "code": {
88
+ "code_sha256": "fdeb0962110362492e04d06d51af130c716c57c3050e7dfe13766177529730da",
89
+ "code_sha256_rule": "tools/code_snapshot.py: sha256 over fuse_efit/, tests/, tools/, pbs/",
90
+ "files": {
91
+ "examples/run_model.py": "aaff89b5f24096c80b43336baedabadff629b688b6543d8187792193c6795075",
92
+ "examples/verify_integration.py": "39d0cf9f13262d9a2ebe2281ebe0e808b1b963e2e95a1042cd3f65c8b1dcd4aa",
93
+ "fuse_efit/export/__init__.py": "404033894bba4772bbec986bb151f4478faa45fe9bf39c4d5e2722e85377517c",
94
+ "fuse_efit/export/contract.py": "de13fe7a8f39db77a351002fbcf8734db93251e0692b37292e842d022c20b561",
95
+ "fuse_efit/export/export_onnx.py": "cef50775b39f6164e4943305976665f386423d61a3a414fa751768007799e923",
96
+ "fuse_efit/export/graphs.py": "13056c2ebe06a104f94c83ebaea0752bf97941945e6797a8d49f8f3ce9861a4d",
97
+ "fuse_efit/export/input_ranges.py": "287d8cbf97163982a98e573e7dcb021fa29e860c4b4f20ac76a0870fdb1b1655",
98
+ "fuse_efit/export/make_reference.py": "dbd20fa4ffd5a2dbe668245f32c86171a2ecc349a768f95bc62c498d28d3d48e",
99
+ "fuse_efit/export/runtime.py": "a70d08d661ebbfd5b4992ff0a6598e28bbf04c1a674eb97589420985f3068a67",
100
+ "fuse_efit/export/step.py": "dee8e5ef7d0d843d9ddf25dee40c93199dba6a3afab0042b929831ae49b7af50",
101
+ "fuse_efit/export/timing.py": "ab9f4f8b35fead7c22f8c0b0e3b9153e3f660c8d8857a1e22bdb188ca8b56669",
102
+ "fuse_efit/export/val_shots.py": "d26c4c20e7c95cae8f3204cc94e60fd897a932cb5db9b24733d0041f654981eb",
103
+ "fuse_efit/export/validate_onnx.py": "93c907a2d1bd2b2d38497f93183bba6d5ff4e0813d9d1ce0f3e2f65404837625"
104
+ }
105
+ },
106
+ "versions": {
107
+ "torch": "2.13.0a0+gitcf30153",
108
+ "numpy": "2.3.5",
109
+ "python": "3.12.12",
110
+ "onnx": "1.23.1",
111
+ "onnxruntime": "1.30.0"
112
+ },
113
+ "platform": "Linux-6.4.0-150700.53.78-default-x86_64-with-glibc2.38",
114
+ "artifacts": {
115
+ "fuse_efit_averaged_step.onnx": {
116
+ "bytes": 732659205,
117
+ "sha256": "8d19844716b817216035a72b480d24326c7fe28a64dbf17f8a9ea53178ea359e"
118
+ },
119
+ "fuse_efit_averaged_sequence.onnx": {
120
+ "bytes": 735805697,
121
+ "sha256": "cd3eaabcc7f7727e273f8063cb7d52bd324c287d42e62bbae4eeebb32b5b00ec"
122
+ },
123
+ "model_config.json": {
124
+ "bytes": 18269,
125
+ "sha256": "27697f17523ac6d8e5da69abded17827b566aaadc57be46f77138831d2b7535c"
126
+ },
127
+ "norms.json": {
128
+ "bytes": 7130,
129
+ "sha256": "487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9"
130
+ },
131
+ "input_ranges.json": {
132
+ "bytes": 15628,
133
+ "sha256": "03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d"
134
+ }
135
+ }
136
+ }
s1/fuse29_seq.onnx → era/single/fuse_efit_single_sequence.onnx RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:3469221c38b1006a017506969d2ffd5f9b84a9a34d22b4429184a299c2438f4a
3
- size 45464382
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ddda4e5ed0c3c9aba626ccfea0115863c75d9b71c97b7e44a955919f77b3fac4
3
+ size 91967120
s1/fuse29_step.onnx → era/single/fuse_efit_single_step.onnx RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:8780126cca821664426bafdd896a1313846da69ad120b9c591d90dc0cc21249e
3
- size 45081271
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ffc20851386cf7db9f81792e6b247d179229901c9e615d61c8982174e658c76
3
+ size 91586758
era/single/input_ranges.json ADDED
@@ -0,0 +1,539 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "what": "per-channel ranges of the in-era training inputs, physical units, for a units check",
5
+ "ticks": "in-era training shots of the train_ and val_ shard files; per channel, shots where it is available and ticks where its governing indicators are 1; finite values only",
6
+ "n_shots": 29473,
7
+ "n_ticks": 2721294,
8
+ "channels": {
9
+ "pinj": {
10
+ "unit": "MW",
11
+ "n_ticks": 2448937,
12
+ "n_shots_available": 26253,
13
+ "mean": 2.6620712114599616,
14
+ "std": 198.71813710424962,
15
+ "min": -46005.02734375,
16
+ "max": 17.512712478637695,
17
+ "pct": {
18
+ "0.1": -0.004518520474433899,
19
+ "1": -1.766427999427833e-07,
20
+ "5": 4.112187479421436e-09,
21
+ "25": 1.1759493350982666,
22
+ "50": 3.7324979305267334,
23
+ "75": 5.975335597991943,
24
+ "95": 9.954481315612787,
25
+ "99": 12.31949230194093,
26
+ "99.9": 14.869131378173837
27
+ }
28
+ },
29
+ "tinj": {
30
+ "unit": "N m",
31
+ "n_ticks": 2448937,
32
+ "n_shots_available": 26253,
33
+ "mean": 2.139621423755444,
34
+ "std": 2.3421389935253805,
35
+ "min": -56.64438247680664,
36
+ "max": 129.98333740234375,
37
+ "pct": {
38
+ "0.1": -2.127721426010132,
39
+ "1": -0.6094307279586793,
40
+ "5": -1.6338495356649219e-07,
41
+ "25": 0.2990165650844574,
42
+ "50": 1.6169323921203613,
43
+ "75": 3.268897533416748,
44
+ "95": 6.551688003540035,
45
+ "99": 8.862295570373538,
46
+ "99.9": 11.422727119446009
47
+ }
48
+ },
49
+ "ech_mw": {
50
+ "unit": "MW",
51
+ "n_ticks": 2375795,
52
+ "n_shots_available": 25943,
53
+ "mean": 0.4480066792528712,
54
+ "std": 0.933062315286273,
55
+ "min": -0.2249511331319809,
56
+ "max": 4.400252342224121,
57
+ "pct": {
58
+ "0.1": -0.0168064936734736,
59
+ "1": -0.005653742989525199,
60
+ "5": -0.0007302230747882277,
61
+ "25": 0.0,
62
+ "50": 0.0,
63
+ "75": 0.0030533920507878065,
64
+ "95": 2.893243908882141,
65
+ "99": 3.3618859004974375,
66
+ "99.9": 3.585800656795506
67
+ }
68
+ },
69
+ "gasa_cal": {
70
+ "unit": "Torr L/s",
71
+ "n_ticks": 2664249,
72
+ "n_shots_available": 28863,
73
+ "mean": 15.33133604839954,
74
+ "std": 28.36489505716798,
75
+ "min": -0.9805486798286438,
76
+ "max": 348.17791748046875,
77
+ "pct": {
78
+ "0.1": -0.015396353930234908,
79
+ "1": 0.0006017432315275073,
80
+ "5": 0.0015028587076812983,
81
+ "25": 0.009874774143099785,
82
+ "50": 0.09126143902540207,
83
+ "75": 20.204317092895508,
84
+ "95": 71.37921600341798,
85
+ "99": 134.24203918457033,
86
+ "99.9": 211.79735192871095
87
+ }
88
+ },
89
+ "gasb_cal": {
90
+ "unit": "Torr L/s",
91
+ "n_ticks": 1673335,
92
+ "n_shots_available": 18008,
93
+ "mean": 1.990969273701691,
94
+ "std": 11.462580440714753,
95
+ "min": -0.5231055021286011,
96
+ "max": 287.6049499511719,
97
+ "pct": {
98
+ "0.1": 9.140472684521228e-06,
99
+ "1": 0.0005795558099634945,
100
+ "5": 0.0014833607710897923,
101
+ "25": 0.005166349466890097,
102
+ "50": 0.014020266011357307,
103
+ "75": 0.06187969818711281,
104
+ "95": 8.572828674316382,
105
+ "99": 57.822401962280246,
106
+ "99.9": 149.42160034179688
107
+ }
108
+ },
109
+ "gasc_cal": {
110
+ "unit": "Torr L/s",
111
+ "n_ticks": 1545281,
112
+ "n_shots_available": 16680,
113
+ "mean": 0.7112485837789,
114
+ "std": 8.255124087718748,
115
+ "min": -0.39658045768737793,
116
+ "max": 306.0269775390625,
117
+ "pct": {
118
+ "0.1": 5.6211974879261106e-05,
119
+ "1": 0.00018177895981352776,
120
+ "5": 0.0004595177888404578,
121
+ "25": 0.0012605531373992562,
122
+ "50": 0.003039183560758829,
123
+ "75": 0.011949803680181503,
124
+ "95": 0.17577648162841797,
125
+ "99": 13.914536666869594,
126
+ "99.9": 143.3022369384774
127
+ }
128
+ },
129
+ "gasd_cal": {
130
+ "unit": "Torr L/s",
131
+ "n_ticks": 1527327,
132
+ "n_shots_available": 16708,
133
+ "mean": 1.1131473380401657,
134
+ "std": 11.254847914946508,
135
+ "min": -0.5287260413169861,
136
+ "max": 771.50439453125,
137
+ "pct": {
138
+ "0.1": 3.574852235033177e-05,
139
+ "1": 0.00012206944666104391,
140
+ "5": 0.00032749708043411374,
141
+ "25": 0.001742765074595809,
142
+ "50": 0.004008667077869177,
143
+ "75": 0.011912376619875431,
144
+ "95": 0.33158734738826723,
145
+ "99": 35.77535942077627,
146
+ "99.9": 163.57034173583992
147
+ }
148
+ },
149
+ "gase_cal": {
150
+ "unit": "Torr L/s",
151
+ "n_ticks": 734608,
152
+ "n_shots_available": 8220,
153
+ "mean": 0.3558095323106283,
154
+ "std": 5.7933940192770965,
155
+ "min": -0.22113843262195587,
156
+ "max": 182.91339111328125,
157
+ "pct": {
158
+ "0.1": 6.105265848600538e-05,
159
+ "1": 0.0001349276426481083,
160
+ "5": 0.00024096852575894445,
161
+ "25": 0.0006113611161708832,
162
+ "50": 0.0015983160119503736,
163
+ "75": 0.007294745184481144,
164
+ "95": 0.06228043679147961,
165
+ "99": 0.8268458759784698,
166
+ "99.9": 129.1965726471041
167
+ }
168
+ },
169
+ "bt": {
170
+ "unit": "T",
171
+ "n_ticks": 2721294,
172
+ "n_shots_available": 29473,
173
+ "mean": -0.9821883979166512,
174
+ "std": 1.6355331835670526,
175
+ "min": -2.231337308883667,
176
+ "max": 2.251864194869995,
177
+ "pct": {
178
+ "0.1": -2.213805790901184,
179
+ "1": -2.181875057220459,
180
+ "5": -2.133511793613434,
181
+ "25": -2.0426759719848633,
182
+ "50": -1.8808952569961548,
183
+ "75": -1.1146354973316193,
184
+ "95": 2.0513723731040954,
185
+ "99": 2.0833286476135244,
186
+ "99.9": 2.182696231603623
187
+ }
188
+ },
189
+ "ip": {
190
+ "unit": "MA",
191
+ "n_ticks": 2721294,
192
+ "n_shots_available": 29473,
193
+ "mean": 0.8259562500751121,
194
+ "std": 0.6308176647686127,
195
+ "min": -1.873443841934204,
196
+ "max": 2.1881160736083984,
197
+ "pct": {
198
+ "0.1": -1.4841706775426864,
199
+ "1": -1.2937129378318786,
200
+ "5": -1.0783746361732482,
201
+ "25": 0.7264370024204254,
202
+ "50": 0.9817398488521576,
203
+ "75": 1.178851455450058,
204
+ "95": 1.4719667851924896,
205
+ "99": 1.630377171039581,
206
+ "99.9": 1.9495262613296536
207
+ }
208
+ },
209
+ "aminor": {
210
+ "unit": "m",
211
+ "n_ticks": 2620593,
212
+ "n_shots_available": 29452,
213
+ "mean": 0.5900859040383979,
214
+ "std": 0.021895064287316395,
215
+ "min": 0.22829703986644745,
216
+ "max": 0.8744112253189087,
217
+ "pct": {
218
+ "0.1": 0.5080196781158447,
219
+ "1": 0.5374526882171631,
220
+ "5": 0.550907027721405,
221
+ "25": 0.5785775780677795,
222
+ "50": 0.5920447111129761,
223
+ "75": 0.603398859500885,
224
+ "95": 0.626347541809082,
225
+ "99": 0.6415323066711426,
226
+ "99.9": 0.659116264343262
227
+ }
228
+ },
229
+ "rsurf": {
230
+ "unit": "m",
231
+ "n_ticks": 2620593,
232
+ "n_shots_available": 29452,
233
+ "mean": 1.6779164176758374,
234
+ "std": 0.028308914638618697,
235
+ "min": 1.2506932020187378,
236
+ "max": 1.9843217134475708,
237
+ "pct": {
238
+ "0.1": 1.5659388380050658,
239
+ "1": 1.6052298355102539,
240
+ "5": 1.6317129373550414,
241
+ "25": 1.6620378494262695,
242
+ "50": 1.6770155429840088,
243
+ "75": 1.6913384199142456,
244
+ "95": 1.7333730936050415,
245
+ "99": 1.742864499092102,
246
+ "99.9": 1.7624900875091556
247
+ }
248
+ },
249
+ "zsurf": {
250
+ "unit": "m",
251
+ "n_ticks": 2620593,
252
+ "n_shots_available": 29452,
253
+ "mean": -0.048890203977045646,
254
+ "std": 0.08377336901538064,
255
+ "min": -0.6153790354728699,
256
+ "max": 0.6005730628967285,
257
+ "pct": {
258
+ "0.1": -0.31802594423294067,
259
+ "1": -0.18586712539196015,
260
+ "5": -0.15249066054821014,
261
+ "25": -0.11547941714525223,
262
+ "50": -0.07223256677389145,
263
+ "75": 0.02473229169845581,
264
+ "95": 0.0917333960533142,
265
+ "99": 0.14512855887413026,
266
+ "99.9": 0.22172307670117003
267
+ }
268
+ },
269
+ "kappa": {
270
+ "unit": "dimensionless",
271
+ "n_ticks": 2620593,
272
+ "n_shots_available": 29452,
273
+ "mean": 1.751501826490992,
274
+ "std": 0.1400324837230824,
275
+ "min": 0.47134819626808167,
276
+ "max": 2.212841033935547,
277
+ "pct": {
278
+ "0.1": 1.1274076805114746,
279
+ "1": 1.2236492252349853,
280
+ "5": 1.442711305618286,
281
+ "25": 1.7150180339813232,
282
+ "50": 1.7899725437164307,
283
+ "75": 1.8340625762939453,
284
+ "95": 1.9024441480636596,
285
+ "99": 1.9540843105316164,
286
+ "99.9": 2.0269266796112118
287
+ }
288
+ },
289
+ "tritop": {
290
+ "unit": "dimensionless",
291
+ "n_ticks": 2620593,
292
+ "n_shots_available": 29452,
293
+ "mean": 0.39675614353298694,
294
+ "std": 0.23100077037562802,
295
+ "min": -0.8470005989074707,
296
+ "max": 1.0,
297
+ "pct": {
298
+ "0.1": -0.42250855803489684,
299
+ "1": -0.3465963649749756,
300
+ "5": 0.06454417407512665,
301
+ "25": 0.23909153044223785,
302
+ "50": 0.36581456661224365,
303
+ "75": 0.6160924434661865,
304
+ "95": 0.7593899011611938,
305
+ "99": 0.8330046582221986,
306
+ "99.9": 0.8900099992752075
307
+ }
308
+ },
309
+ "tribot": {
310
+ "unit": "dimensionless",
311
+ "n_ticks": 2620593,
312
+ "n_shots_available": 29452,
313
+ "mean": 0.499044209811709,
314
+ "std": 0.24968929063555592,
315
+ "min": -0.8580220937728882,
316
+ "max": 1.0,
317
+ "pct": {
318
+ "0.1": -0.7414657316207885,
319
+ "1": -0.6374403476715088,
320
+ "5": 0.10714363753795625,
321
+ "25": 0.34164735674858093,
322
+ "50": 0.5473953485488892,
323
+ "75": 0.6861203908920288,
324
+ "95": 0.7977024435997009,
325
+ "99": 0.8486711049079896,
326
+ "99.9": 0.9298709597587751
327
+ }
328
+ },
329
+ "drsep": {
330
+ "unit": "m",
331
+ "n_ticks": 2620593,
332
+ "n_shots_available": 29452,
333
+ "mean": -0.016213496036148,
334
+ "std": 0.06551636751544158,
335
+ "min": -0.10000000149011612,
336
+ "max": 0.10000000149011612,
337
+ "pct": {
338
+ "0.1": -0.10000000149011612,
339
+ "1": -0.10000000149011612,
340
+ "5": -0.10000000149011612,
341
+ "25": -0.10000000149011612,
342
+ "50": -0.010309768840670586,
343
+ "75": 0.01783900149166584,
344
+ "95": 0.10000000149011612,
345
+ "99": 0.10000000149011612,
346
+ "99.9": 0.10000000149011612
347
+ }
348
+ },
349
+ "rvsout": {
350
+ "unit": "m",
351
+ "n_ticks": 2328621,
352
+ "n_shots_available": 29452,
353
+ "mean": 1.3793721888678152,
354
+ "std": 0.12439954558098618,
355
+ "min": 1.0127931833267212,
356
+ "max": 2.365194320678711,
357
+ "pct": {
358
+ "0.1": 1.0181231236457824,
359
+ "1": 1.1652055978775024,
360
+ "5": 1.2722984552383423,
361
+ "25": 1.33443021774292,
362
+ "50": 1.3540239334106445,
363
+ "75": 1.375470519065857,
364
+ "95": 1.5593847036361694,
365
+ "99": 2.1677620887756346,
366
+ "99.9": 2.1831804895401006
367
+ }
368
+ },
369
+ "gapin": {
370
+ "unit": "m",
371
+ "n_ticks": 2620593,
372
+ "n_shots_available": 29452,
373
+ "mean": 0.07156120898996962,
374
+ "std": 0.0432587754778901,
375
+ "min": 0.0,
376
+ "max": 0.5885139107704163,
377
+ "pct": {
378
+ "0.1": 0.0,
379
+ "1": 6.068613345178164e-08,
380
+ "5": 0.00017625917098484933,
381
+ "25": 0.04369092732667923,
382
+ "50": 0.07125337421894073,
383
+ "75": 0.08842182159423828,
384
+ "95": 0.16015855669975282,
385
+ "99": 0.17832967877388,
386
+ "99.9": 0.206968146562578
387
+ }
388
+ },
389
+ "rvsou": {
390
+ "unit": "m",
391
+ "n_ticks": 1490672,
392
+ "n_shots_available": 29452,
393
+ "mean": 1.3348156930912045,
394
+ "std": 0.10334221557069992,
395
+ "min": 1.0054652690887451,
396
+ "max": 2.3410043716430664,
397
+ "pct": {
398
+ "0.1": 1.0645662200450898,
399
+ "1": 1.134060994386673,
400
+ "5": 1.1750591039657592,
401
+ "25": 1.3031675815582275,
402
+ "50": 1.345410704612732,
403
+ "75": 1.3619457483291626,
404
+ "95": 1.4928356945514678,
405
+ "99": 1.6975986802577974,
406
+ "99.9": 2.168685009956361
407
+ }
408
+ },
409
+ "rvsiu": {
410
+ "unit": "m",
411
+ "n_ticks": 1481823,
412
+ "n_shots_available": 29452,
413
+ "mean": 1.0716172190205149,
414
+ "std": 0.0769388213615333,
415
+ "min": 1.0010124444961548,
416
+ "max": 2.136025905609131,
417
+ "pct": {
418
+ "0.1": 1.0059778497219085,
419
+ "1": 1.0113178491592407,
420
+ "5": 1.0127403736114502,
421
+ "25": 1.0159999132156372,
422
+ "50": 1.019310712814331,
423
+ "75": 1.1208724975585938,
424
+ "95": 1.2043283700942993,
425
+ "99": 1.2522118377685547,
426
+ "99.9": 2.034771483421327
427
+ }
428
+ },
429
+ "shafranov": {
430
+ "unit": "m",
431
+ "n_ticks": 2620593,
432
+ "n_shots_available": 29452,
433
+ "mean": 0.06288958668123741,
434
+ "std": 0.034055322691537854,
435
+ "min": -0.4082394540309906,
436
+ "max": 1.303265929222107,
437
+ "pct": {
438
+ "0.1": -0.005711350440979004,
439
+ "1": 0.006995668411254883,
440
+ "5": 0.017068004608154295,
441
+ "25": 0.03921254351735115,
442
+ "50": 0.05793106555938721,
443
+ "75": 0.0799604281783104,
444
+ "95": 0.12869288325309752,
445
+ "99": 0.16819702863693242,
446
+ "99.9": 0.21218299579620437
447
+ }
448
+ },
449
+ "zeta_ou": {
450
+ "unit": "dimensionless",
451
+ "n_ticks": 2620567,
452
+ "n_shots_available": 29452,
453
+ "mean": -0.121227767772112,
454
+ "std": 0.05779856128475274,
455
+ "min": -2.3985445499420166,
456
+ "max": 0.380886971950531,
457
+ "pct": {
458
+ "0.1": -0.3649558596014976,
459
+ "1": -0.30748181700706484,
460
+ "5": -0.23631144613027572,
461
+ "25": -0.14568214118480682,
462
+ "50": -0.11330334842205048,
463
+ "75": -0.08447503671050072,
464
+ "95": -0.04684258103370671,
465
+ "99": -0.019024645723402546,
466
+ "99.9": 0.020023215260360466
467
+ }
468
+ },
469
+ "zeta_ol": {
470
+ "unit": "dimensionless",
471
+ "n_ticks": 2620567,
472
+ "n_shots_available": 29452,
473
+ "mean": -0.1841641108903704,
474
+ "std": 0.11566216697760474,
475
+ "min": -2.413620710372925,
476
+ "max": 0.25255295634269714,
477
+ "pct": {
478
+ "0.1": -0.7207684978246689,
479
+ "1": -0.6321860718727111,
480
+ "5": -0.3719328552484512,
481
+ "25": -0.25750887393951416,
482
+ "50": -0.15683022141456604,
483
+ "75": -0.1041066087782383,
484
+ "95": -0.04005956836044792,
485
+ "99": 0.008554169535636834,
486
+ "99.9": 0.048173654310407044
487
+ }
488
+ },
489
+ "vloop": {
490
+ "unit": "V",
491
+ "n_ticks": 2721294,
492
+ "n_shots_available": 29473,
493
+ "mean": 0.3860928196706128,
494
+ "std": 0.8461846896364685,
495
+ "min": -11.052228927612305,
496
+ "max": 10.875903129577637,
497
+ "pct": {
498
+ "0.1": -4.470359791755676,
499
+ "1": -2.008943867683411,
500
+ "5": -0.7982482045888901,
501
+ "25": 0.04159998148679733,
502
+ "50": 0.2804970145225525,
503
+ "75": 0.6723037213087082,
504
+ "95": 1.931114912033081,
505
+ "99": 2.662202775478358,
506
+ "99.9": 4.445908463478533
507
+ }
508
+ }
509
+ },
510
+ "indicators": {
511
+ "efit_valid": {
512
+ "fraction_of_ticks_1": 0.9629951780292758
513
+ },
514
+ "vloop_valid": {
515
+ "fraction_of_ticks_1": 1.0
516
+ },
517
+ "rvsout_present": {
518
+ "fraction_of_ticks_1": 0.8557035733735495
519
+ },
520
+ "rvsou_present": {
521
+ "fraction_of_ticks_1": 0.5477805779162414
522
+ },
523
+ "rvsiu_present": {
524
+ "fraction_of_ticks_1": 0.5445288160705899
525
+ }
526
+ },
527
+ "units_check_rule": {
528
+ "span": "[pct 0.1, pct 99.9]",
529
+ "suspect_if_outside": "[pct0.1 - 3 * span_width, pct99.9 + 3 * span_width]",
530
+ "span_factor": 3.0,
531
+ "note": "a smoke test for unit errors, not a distribution-shift detector"
532
+ },
533
+ "dataset": {
534
+ "root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
535
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c",
536
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7"
537
+ },
538
+ "written_utc": "2026-11-08T22:50:46Z"
539
+ }
era/single/model_config.json ADDED
@@ -0,0 +1,449 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "protocol": "in era (random split of shots 125500-205774; DECISIONS D50, D55)",
5
+ "form": "single",
6
+ "form_meaning": "single: replicate 0 of the in-era finals, the frozen delivered network",
7
+ "members": [
8
+ {
9
+ "run": "runs/FULLextfinal_era_r0",
10
+ "replicate": 0,
11
+ "seed": 100,
12
+ "checkpoint_sha256": "28390d5950ec18477394a85dc73498afa0f847502514251b7c96c97569632d96",
13
+ "config_sha256": "ddec260834c0f5fdaa5303382140e9c0bca1e3028ccd478c2c2a65f62d6f2398",
14
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
15
+ }
16
+ ],
17
+ "cadence": {
18
+ "period_ms": 50.0,
19
+ "hz": 20,
20
+ "rule": "one step-graph call per 50 ms of simulated time; each tick describes the trailing interval (t - 50 ms, t]; reset the state to zeros at the start of every shot"
21
+ },
22
+ "inputs": {
23
+ "inputs": {
24
+ "shape": [
25
+ "batch",
26
+ 25
27
+ ],
28
+ "dtype": "float32",
29
+ "names": [
30
+ "pinj",
31
+ "tinj",
32
+ "ech_mw",
33
+ "gasa_cal",
34
+ "gasb_cal",
35
+ "gasc_cal",
36
+ "gasd_cal",
37
+ "gase_cal",
38
+ "bt",
39
+ "ip",
40
+ "aminor",
41
+ "rsurf",
42
+ "zsurf",
43
+ "kappa",
44
+ "tritop",
45
+ "tribot",
46
+ "drsep",
47
+ "rvsout",
48
+ "gapin",
49
+ "rvsou",
50
+ "rvsiu",
51
+ "shafranov",
52
+ "zeta_ou",
53
+ "zeta_ol",
54
+ "vloop"
55
+ ],
56
+ "units": {
57
+ "pinj": "MW",
58
+ "tinj": "N m",
59
+ "ech_mw": "MW",
60
+ "gasa_cal": "Torr L/s",
61
+ "gasb_cal": "Torr L/s",
62
+ "gasc_cal": "Torr L/s",
63
+ "gasd_cal": "Torr L/s",
64
+ "gase_cal": "Torr L/s",
65
+ "bt": "T",
66
+ "ip": "MA",
67
+ "aminor": "m",
68
+ "rsurf": "m",
69
+ "zsurf": "m",
70
+ "kappa": "dimensionless",
71
+ "tritop": "dimensionless",
72
+ "tribot": "dimensionless",
73
+ "drsep": "m",
74
+ "rvsout": "m",
75
+ "gapin": "m",
76
+ "rvsou": "m",
77
+ "rvsiu": "m",
78
+ "shafranov": "m",
79
+ "zeta_ou": "dimensionless",
80
+ "zeta_ol": "dimensionless",
81
+ "vloop": "V"
82
+ },
83
+ "sources": {
84
+ "pinj": "PtData bmspinj: neutral-beam injected power, all sources",
85
+ "tinj": "PtData bmstinj: neutral-beam injected torque",
86
+ "ech_mw": "MDSplus \\RF::ECHPWRC: calibrated total ECH power injected",
87
+ "gasa_cal": "MDSplus NEUTRALS GASFLOW.GASA:FLOW: calibrated gas flow, valve A",
88
+ "gasb_cal": "MDSplus NEUTRALS GASFLOW.GASB:FLOW: calibrated gas flow, valve B",
89
+ "gasc_cal": "MDSplus NEUTRALS GASFLOW.GASC:FLOW: calibrated gas flow, valve C",
90
+ "gasd_cal": "MDSplus NEUTRALS GASFLOW.GASD:FLOW: calibrated gas flow, valve D",
91
+ "gase_cal": "MDSplus NEUTRALS GASFLOW.GASE:FLOW: calibrated gas flow, valve E",
92
+ "bt": "PtData bt: vacuum toroidal field, signed",
93
+ "ip": "PtData ip: measured plasma current (amperes / 1e6)",
94
+ "aminor": "EFIT01 AMINOR: minor radius",
95
+ "rsurf": "EFIT01 RSURF: major radius of the boundary's geometric centre",
96
+ "zsurf": "EFIT01 ZSURF: height of the boundary's geometric centre",
97
+ "kappa": "EFIT01 KAPPA: elongation",
98
+ "tritop": "EFIT01 TRITOP: upper triangularity",
99
+ "tribot": "EFIT01 TRIBOT: lower triangularity",
100
+ "drsep": "EFIT01 DRSEP: separatrix separation at the outer midplane, clipped to +-0.1 m per slice",
101
+ "rvsout": "EFIT01 RVSOUT: major radius of the outer (lower) strike point",
102
+ "gapin": "EFIT01 GAPIN: inner gap",
103
+ "rvsou": "EFIT01 RVSOU: major radius of the upper outer strike point",
104
+ "rvsiu": "EFIT01 RVSIU: major radius of the upper inner strike point",
105
+ "shafranov": "EFIT01 R0 - RSURF: Shafranov shift",
106
+ "zeta_ou": "Luce squareness, outer-upper quadrant, from the EFIT01 boundary vertices",
107
+ "zeta_ol": "Luce squareness, outer-lower quadrant, from the EFIT01 boundary vertices",
108
+ "vloop": "PtData VLOOP: loop voltage"
109
+ },
110
+ "grid_rule": {
111
+ "pinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
112
+ "tinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
113
+ "ech_mw": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
114
+ "gasa_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
115
+ "gasb_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
116
+ "gasc_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
117
+ "gasd_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
118
+ "gase_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
119
+ "bt": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
120
+ "ip": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)",
121
+ "aminor": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
122
+ "rsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
123
+ "zsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
124
+ "kappa": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
125
+ "tritop": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
126
+ "tribot": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
127
+ "drsep": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
128
+ "rvsout": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
129
+ "gapin": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
130
+ "rvsou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
131
+ "rvsiu": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
132
+ "shafranov": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
133
+ "zeta_ou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
134
+ "zeta_ol": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)",
135
+ "vloop": "mean of the native samples in (t - 50 ms, t] (INPUT_CONTRACT 3.3)"
136
+ },
137
+ "zeroed_when_indicator_is_0": {
138
+ "pinj": [],
139
+ "tinj": [],
140
+ "ech_mw": [],
141
+ "gasa_cal": [],
142
+ "gasb_cal": [],
143
+ "gasc_cal": [],
144
+ "gasd_cal": [],
145
+ "gase_cal": [],
146
+ "bt": [],
147
+ "ip": [],
148
+ "aminor": [
149
+ "efit_valid"
150
+ ],
151
+ "rsurf": [
152
+ "efit_valid"
153
+ ],
154
+ "zsurf": [
155
+ "efit_valid"
156
+ ],
157
+ "kappa": [
158
+ "efit_valid"
159
+ ],
160
+ "tritop": [
161
+ "efit_valid"
162
+ ],
163
+ "tribot": [
164
+ "efit_valid"
165
+ ],
166
+ "drsep": [
167
+ "efit_valid"
168
+ ],
169
+ "rvsout": [
170
+ "efit_valid",
171
+ "rvsout_present"
172
+ ],
173
+ "gapin": [
174
+ "efit_valid"
175
+ ],
176
+ "rvsou": [
177
+ "efit_valid",
178
+ "rvsou_present"
179
+ ],
180
+ "rvsiu": [
181
+ "efit_valid",
182
+ "rvsiu_present"
183
+ ],
184
+ "shafranov": [
185
+ "efit_valid"
186
+ ],
187
+ "zeta_ou": [
188
+ "efit_valid"
189
+ ],
190
+ "zeta_ol": [
191
+ "efit_valid"
192
+ ],
193
+ "vloop": [
194
+ "vloop_valid"
195
+ ]
196
+ },
197
+ "note": "Physical units, contract order (docs/INPUT_CONTRACT.md \u00a72). Where a governing indicator is 0 the value is ignored (any number, or NaN). NaN anywhere is read as the training mean, so never pass NaN for a value you have."
198
+ },
199
+ "indicators": {
200
+ "shape": [
201
+ "batch",
202
+ 5
203
+ ],
204
+ "dtype": "float32",
205
+ "values": "0 or 1, per tick",
206
+ "names": [
207
+ "efit_valid",
208
+ "vloop_valid",
209
+ "rvsout_present",
210
+ "rvsou_present",
211
+ "rvsiu_present"
212
+ ],
213
+ "meaning": {
214
+ "efit_valid": "1 when at least one usable EFIT slice lies in (t - 50 ms, t]; 0 otherwise",
215
+ "vloop_valid": "1 when at least one loop-voltage sample lies in (t - 50 ms, t]; 0 otherwise",
216
+ "rvsout_present": "1 when at least one slice in the window has a real outer strike point; 0 otherwise",
217
+ "rvsou_present": "1 when at least one slice in the window has a real upper outer strike point; 0 otherwise",
218
+ "rvsiu_present": "1 when at least one slice in the window has a real upper inner strike point; 0 otherwise"
219
+ }
220
+ },
221
+ "available": {
222
+ "shape": [
223
+ "batch",
224
+ 25
225
+ ],
226
+ "dtype": "float32",
227
+ "values": "0 or 1, per shot",
228
+ "names": [
229
+ "pinj",
230
+ "tinj",
231
+ "ech_mw",
232
+ "gasa_cal",
233
+ "gasb_cal",
234
+ "gasc_cal",
235
+ "gasd_cal",
236
+ "gase_cal",
237
+ "bt",
238
+ "ip",
239
+ "aminor",
240
+ "rsurf",
241
+ "zsurf",
242
+ "kappa",
243
+ "tritop",
244
+ "tribot",
245
+ "drsep",
246
+ "rvsout",
247
+ "gapin",
248
+ "rvsou",
249
+ "rvsiu",
250
+ "shafranov",
251
+ "zeta_ou",
252
+ "zeta_ol",
253
+ "vloop"
254
+ ],
255
+ "default": 1,
256
+ "note": "1 = a usable record of this channel exists for the shot (the normal case). 0 = no record for the whole shot: the value is ignored and the model receives the flag, as it did in training for missing records. Keep it constant within a shot."
257
+ }
258
+ },
259
+ "outputs": {
260
+ "predictions": {
261
+ "shape": [
262
+ "batch",
263
+ 9
264
+ ],
265
+ "dtype": "float32",
266
+ "names": [
267
+ "ne",
268
+ "te_ped",
269
+ "ti_ped",
270
+ "t_rot_ped",
271
+ "ne_knee",
272
+ "te_knee",
273
+ "rho_sym",
274
+ "ne_top_loc",
275
+ "hmode"
276
+ ],
277
+ "units": {
278
+ "ne": "1e19 m^-3",
279
+ "te_ped": "keV",
280
+ "ti_ped": "keV",
281
+ "t_rot_ped": "krad/s",
282
+ "ne_knee": "1e19 m^-3",
283
+ "te_knee": "keV",
284
+ "rho_sym": "rho (normalised radius)",
285
+ "ne_top_loc": "rho (normalised radius)",
286
+ "hmode": "probability in [0, 1]"
287
+ },
288
+ "meaning": {
289
+ "ne": "electron density at rho = 0.85",
290
+ "te_ped": "electron temperature at rho = 0.85",
291
+ "ti_ped": "ion temperature at rho = 0.85",
292
+ "t_rot_ped": "toroidal rotation at rho = 0.85",
293
+ "ne_knee": "electron density on the pedestal fit at its knee (H-mode only)",
294
+ "te_knee": "electron temperature on its pedestal fit at its knee (H-mode only)",
295
+ "rho_sym": "symmetry point of the density pedestal fit (H-mode only)",
296
+ "ne_top_loc": "knee (pedestal top) of the density pedestal fit (H-mode only)",
297
+ "hmode": "the plasma is in H-mode (sigmoid of the averaged or single logit)"
298
+ }
299
+ },
300
+ "hmode_gated_heads": [
301
+ "ne_knee",
302
+ "te_knee",
303
+ "rho_sym",
304
+ "ne_top_loc"
305
+ ],
306
+ "hmode_gated_note": "Trained on H-mode ticks only and undefined in L-mode; the graph emits a number anyway. Report them only where predictions[hmode] >= threshold; otherwise treat them as undefined, never as 0.",
307
+ "hmode_thresholds": {
308
+ "frozen": {
309
+ "balanced": 0.54,
310
+ "conservative": 0.5
311
+ },
312
+ "definitions": {
313
+ "balanced": "maximum Youden's J on validation (the best trade between missed H-mode and admitted L-mode ticks)",
314
+ "conservative": "the lowest threshold keeping L-mode ticks at or below 5 % of admitted validation ticks"
315
+ },
316
+ "set_on": "replicate 0, in-era validation split",
317
+ "source": "receipts/G5_freeze.md section 3; receipts/G5_freeze.json gate_thresholds.era",
318
+ "freeze_record_sha256": "1fbd776750736a6995a5de48b74b16bc13e0a2a1539972e46be23e8dbb49316e",
319
+ "note": "Gate the four H-mode-only heads on predictions[hmode] >= threshold; MODEL_CARD.md \u00a76."
320
+ }
321
+ },
322
+ "graphs": {
323
+ "step": {
324
+ "file": "fuse_efit_single_step.onnx",
325
+ "purpose": "one 50 ms tick per call; unbounded shot length",
326
+ "inputs": {
327
+ "inputs": [
328
+ "batch",
329
+ 25
330
+ ],
331
+ "indicators": [
332
+ "batch",
333
+ 5
334
+ ],
335
+ "available": [
336
+ "batch",
337
+ 25
338
+ ],
339
+ "conv_state": [
340
+ 6,
341
+ "batch",
342
+ 1792,
343
+ 3
344
+ ],
345
+ "ssm_state": [
346
+ 6,
347
+ "batch",
348
+ 12,
349
+ 128,
350
+ 64
351
+ ]
352
+ },
353
+ "outputs": {
354
+ "predictions": [
355
+ "batch",
356
+ 9
357
+ ],
358
+ "conv_state_out": [
359
+ 6,
360
+ "batch",
361
+ 1792,
362
+ 3
363
+ ],
364
+ "ssm_state_out": [
365
+ 6,
366
+ "batch",
367
+ 12,
368
+ 128,
369
+ 64
370
+ ]
371
+ }
372
+ },
373
+ "sequence": {
374
+ "file": "fuse_efit_single_sequence.onnx",
375
+ "seq_len": 256,
376
+ "purpose": "a whole window of exactly seq_len ticks; right-pad a shorter shot (any finite values, indicators 1) and keep the first K outputs, which is exact because the model is causal; use the step graph for longer shots",
377
+ "inputs": {
378
+ "inputs": [
379
+ "batch",
380
+ 256,
381
+ 25
382
+ ],
383
+ "indicators": [
384
+ "batch",
385
+ 256,
386
+ 5
387
+ ],
388
+ "available": [
389
+ "batch",
390
+ 25
391
+ ]
392
+ },
393
+ "outputs": {
394
+ "predictions": [
395
+ "batch",
396
+ 256,
397
+ 9
398
+ ]
399
+ }
400
+ }
401
+ },
402
+ "state": {
403
+ "conv_state": [
404
+ "n_members x n_layers",
405
+ "batch",
406
+ 1792,
407
+ 3
408
+ ],
409
+ "ssm_state": [
410
+ "n_members x n_layers",
411
+ "batch",
412
+ 12,
413
+ 128,
414
+ 64
415
+ ],
416
+ "leading_axis": 6,
417
+ "n_members": 1,
418
+ "n_layers": 6,
419
+ "initial": "all zeros at the start of every shot",
420
+ "bytes_per_shot": 2488320,
421
+ "note": "Opaque: store what the step graph returns and pass it back on the next call. The two forms differ only in the leading axis of these two tensors."
422
+ },
423
+ "architecture": {
424
+ "family": "Mamba-2 state-space sequence model",
425
+ "d_model": 768,
426
+ "n_layers": 6,
427
+ "d_state": 64,
428
+ "d_conv": 4,
429
+ "expand": 2,
430
+ "headdim": 128,
431
+ "nheads": 12,
432
+ "ngroups": 2,
433
+ "d_inner": 1536,
434
+ "conv_dim": 1792,
435
+ "chunk_size": 100,
436
+ "n_inputs_trunk": 30,
437
+ "n_params_per_member": 22882785,
438
+ "n_members": 1
439
+ },
440
+ "input_transform": {
441
+ "clip_sigma": 20.0,
442
+ "std_floor": 1e-06,
443
+ "file": "norms.json",
444
+ "applied": "inside the graphs"
445
+ },
446
+ "dtype": "float32",
447
+ "onnx_opset": 17,
448
+ "documentation": "docs/EXPORT.md, docs/INPUT_CONTRACT.md, MODEL_CARD.md"
449
+ }
era/single/norms.json ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "note": "The statistics baked into the graphs, for inspection and for reproducing the transform outside them. A host does not need this file to run the model.",
4
+ "input_transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma) per channel, x in physical units; not-a-number -> 0; then z -> 0 where the channel is unavailable or a governing indicator is 0",
5
+ "clip_sigma": 20.0,
6
+ "std_floor": 1e-06,
7
+ "inputs": {
8
+ "names": [
9
+ "pinj",
10
+ "tinj",
11
+ "ech_mw",
12
+ "gasa_cal",
13
+ "gasb_cal",
14
+ "gasc_cal",
15
+ "gasd_cal",
16
+ "gase_cal",
17
+ "bt",
18
+ "ip",
19
+ "aminor",
20
+ "rsurf",
21
+ "zsurf",
22
+ "kappa",
23
+ "tritop",
24
+ "tribot",
25
+ "drsep",
26
+ "rvsout",
27
+ "gapin",
28
+ "rvsou",
29
+ "rvsiu",
30
+ "shafranov",
31
+ "zeta_ou",
32
+ "zeta_ol",
33
+ "vloop"
34
+ ],
35
+ "units": [
36
+ "MW",
37
+ "N m",
38
+ "MW",
39
+ "Torr L/s",
40
+ "Torr L/s",
41
+ "Torr L/s",
42
+ "Torr L/s",
43
+ "Torr L/s",
44
+ "T",
45
+ "MA",
46
+ "m",
47
+ "m",
48
+ "m",
49
+ "dimensionless",
50
+ "dimensionless",
51
+ "dimensionless",
52
+ "m",
53
+ "m",
54
+ "m",
55
+ "m",
56
+ "m",
57
+ "m",
58
+ "dimensionless",
59
+ "dimensionless",
60
+ "V"
61
+ ],
62
+ "mean": [
63
+ 3.942431288688486,
64
+ 2.2096625295179186,
65
+ 0.4654761552810669,
66
+ 15.061767862270832,
67
+ 1.4919341408834326,
68
+ 0.23709206776972092,
69
+ 0.5197598621986353,
70
+ 0.021391137846201724,
71
+ -0.9720653400720033,
72
+ 0.8316150307655334,
73
+ 0.589589536190033,
74
+ 1.677773356437683,
75
+ -0.05055605247616768,
76
+ 1.7517046928405762,
77
+ 0.3966327905654907,
78
+ 0.5042979121208191,
79
+ -0.015922507271170616,
80
+ 1.3765016794204712,
81
+ 0.06946969032287598,
82
+ 1.3273015022277832,
83
+ 1.0669854879379272,
84
+ 0.06224634870886803,
85
+ -0.12007330358028412,
86
+ -0.18449491262435913,
87
+ 0.38771408796310425
88
+ ],
89
+ "std": [
90
+ 3.195729724075188,
91
+ 2.217424308626617,
92
+ 0.9441152811050415,
93
+ 26.64435504465176,
94
+ 6.993835352190119,
95
+ 1.6900931025396266,
96
+ 3.7040796936604687,
97
+ 0.10363119099527826,
98
+ 1.6484726180777753,
99
+ 0.6177622675895691,
100
+ 0.02114672213792801,
101
+ 0.027116550132632256,
102
+ 0.0815875306725502,
103
+ 0.14088328182697296,
104
+ 0.23491179943084717,
105
+ 0.24562624096870422,
106
+ 0.06496237963438034,
107
+ 0.12265536934137344,
108
+ 0.04288293793797493,
109
+ 0.09615185856819153,
110
+ 0.06577663868665695,
111
+ 0.03295154869556427,
112
+ 0.054369814693927765,
113
+ 0.10875540971755981,
114
+ 0.7761709094047546
115
+ ]
116
+ },
117
+ "stages": {
118
+ "note": "The composed statistics above are stage 2 applied after stage 1: mean = m1 + s1 * m2, std = s1 * s2. Stage 1 is the dataset's stored scale (identity except for the beam, gas and field channels); stage 2 is the in-era training-split standardisation.",
119
+ "stage1_physical_to_stored": {
120
+ "mean": [
121
+ 2.8111997039100878,
122
+ 2.154143940948575,
123
+ 0.0,
124
+ 14.89178144369171,
125
+ 1.9421402622606716,
126
+ 0.7508911827356307,
127
+ 1.0383906373403984,
128
+ 0.3920832239686922,
129
+ -1.0310375752078498,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 0.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 0.0,
140
+ 0.0,
141
+ 0.0,
142
+ 0.0,
143
+ 0.0,
144
+ 0.0,
145
+ 0.0
146
+ ],
147
+ "std": [
148
+ 194.08418888726106,
149
+ 2.3684465859740262,
150
+ 1.0,
151
+ 27.289184462156058,
152
+ 11.092415079529571,
153
+ 9.017289768908354,
154
+ 12.055982101097918,
155
+ 6.498888909025979,
156
+ 1.599000778986496,
157
+ 1.0,
158
+ 1.0,
159
+ 1.0,
160
+ 1.0,
161
+ 1.0,
162
+ 1.0,
163
+ 1.0,
164
+ 1.0,
165
+ 1.0,
166
+ 1.0,
167
+ 1.0,
168
+ 1.0,
169
+ 1.0,
170
+ 1.0,
171
+ 1.0,
172
+ 1.0
173
+ ]
174
+ },
175
+ "stage2_stored_to_model": {
176
+ "mean": [
177
+ 0.005828561261296272,
178
+ 0.023440929129719734,
179
+ 0.4654761552810669,
180
+ 0.006229076534509659,
181
+ -0.040586844086647034,
182
+ -0.05697932839393616,
183
+ -0.04301854223012924,
184
+ -0.057039301842451096,
185
+ 0.03688067942857742,
186
+ 0.8316150307655334,
187
+ 0.589589536190033,
188
+ 1.677773356437683,
189
+ -0.05055605247616768,
190
+ 1.7517046928405762,
191
+ 0.3966327905654907,
192
+ 0.5042979121208191,
193
+ -0.015922507271170616,
194
+ 1.3765016794204712,
195
+ 0.06946969032287598,
196
+ 1.3273015022277832,
197
+ 1.0669854879379272,
198
+ 0.06224634870886803,
199
+ -0.12007330358028412,
200
+ -0.18449491262435913,
201
+ 0.38771408796310425
202
+ ],
203
+ "std": [
204
+ 0.01646568812429905,
205
+ 0.9362357258796692,
206
+ 0.9441152811050415,
207
+ 0.9763705134391785,
208
+ 0.6305060982704163,
209
+ 0.1874280571937561,
210
+ 0.30723997950553894,
211
+ 0.015945985913276672,
212
+ 1.0309392213821411,
213
+ 0.6177622675895691,
214
+ 0.02114672213792801,
215
+ 0.027116550132632256,
216
+ 0.0815875306725502,
217
+ 0.14088328182697296,
218
+ 0.23491179943084717,
219
+ 0.24562624096870422,
220
+ 0.06496237963438034,
221
+ 0.12265536934137344,
222
+ 0.04288293793797493,
223
+ 0.09615185856819153,
224
+ 0.06577663868665695,
225
+ 0.03295154869556427,
226
+ 0.054369814693927765,
227
+ 0.10875540971755981,
228
+ 0.7761709094047546
229
+ ]
230
+ }
231
+ },
232
+ "indicators": {
233
+ "names": [
234
+ "efit_valid",
235
+ "vloop_valid",
236
+ "rvsout_present",
237
+ "rvsou_present",
238
+ "rvsiu_present"
239
+ ],
240
+ "transform": "none: 0/1 passed as they are (read as 1 when > 0.5)"
241
+ },
242
+ "targets": {
243
+ "ne": {
244
+ "mean": 2.75117452029956,
245
+ "std": 1.6541537951642646,
246
+ "unit": "1e19 m^-3"
247
+ },
248
+ "te_ped": {
249
+ "mean": 0.5915626266199993,
250
+ "std": 0.43467429211593894,
251
+ "unit": "keV"
252
+ },
253
+ "ti_ped": {
254
+ "mean": 1.0168501881070604,
255
+ "std": 0.6810960596049213,
256
+ "unit": "keV"
257
+ },
258
+ "t_rot_ped": {
259
+ "mean": 21.24461452086136,
260
+ "std": 16.5914840454496,
261
+ "unit": "krad/s"
262
+ },
263
+ "ne_knee": {
264
+ "mean": 2.4166156855194076,
265
+ "std": 1.5067549102828321,
266
+ "unit": "1e19 m^-3"
267
+ },
268
+ "te_knee": {
269
+ "mean": 0.44874806504511355,
270
+ "std": 0.33939948718776175,
271
+ "unit": "keV"
272
+ },
273
+ "rho_sym": {
274
+ "mean": 0.9757616411014167,
275
+ "std": 0.04329206963559261,
276
+ "unit": "rho (normalised radius)"
277
+ },
278
+ "ne_top_loc": {
279
+ "mean": 0.9261865006629387,
280
+ "std": 0.04989716973523974,
281
+ "unit": "rho (normalised radius)"
282
+ }
283
+ },
284
+ "hmode": {
285
+ "transform": "probability = sigmoid(logit); in the averaged form the logit is the mean of the members' logits"
286
+ },
287
+ "source": {
288
+ "dataset_root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
289
+ "norms_file": "norms.json",
290
+ "norms_sha256": "e28b8331a042054543dc97c49d977372012cfbb86119c276b536a1e945f5e926",
291
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7",
292
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c"
293
+ }
294
+ }
era/single/provenance.json ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "form": "single",
5
+ "exported_utc": "2026-11-08T22:50:53Z",
6
+ "host": "x4217c6s0b0n0",
7
+ "members": [
8
+ {
9
+ "run": "runs/FULLextfinal_era_r0",
10
+ "replicate": 0,
11
+ "seed": 100,
12
+ "checkpoint_sha256": "28390d5950ec18477394a85dc73498afa0f847502514251b7c96c97569632d96",
13
+ "config_sha256": "ddec260834c0f5fdaa5303382140e9c0bca1e3028ccd478c2c2a65f62d6f2398",
14
+ "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290"
15
+ }
16
+ ],
17
+ "freeze_record": {
18
+ "path": "receipts/G5_freeze.json",
19
+ "sha256": "1fbd776750736a6995a5de48b74b16bc13e0a2a1539972e46be23e8dbb49316e"
20
+ },
21
+ "dataset": {
22
+ "root": "/lus/flare/projects/fusiondl_aesp/d3d_fuse_efit_v1",
23
+ "norms_file": "norms.json",
24
+ "norms_sha256": "e28b8331a042054543dc97c49d977372012cfbb86119c276b536a1e945f5e926",
25
+ "stage1_sha256": "313005ab7d2db432f1048c6c8aaba600edd39b447a85cf355e0e7f564e59b7e7",
26
+ "metadata_sha256": "306076a91e9853f61cbcec46ea9cf4e999760e7d02e887a3e4d90f6b6e6ed46c"
27
+ },
28
+ "exporter": "torch.onnx.export, TorchScript path (dynamo=False), do_constant_folding",
29
+ "onnx_opset": 17,
30
+ "seq_len": 256,
31
+ "code": {
32
+ "code_sha256": "fdeb0962110362492e04d06d51af130c716c57c3050e7dfe13766177529730da",
33
+ "code_sha256_rule": "tools/code_snapshot.py: sha256 over fuse_efit/, tests/, tools/, pbs/",
34
+ "files": {
35
+ "examples/run_model.py": "aaff89b5f24096c80b43336baedabadff629b688b6543d8187792193c6795075",
36
+ "examples/verify_integration.py": "39d0cf9f13262d9a2ebe2281ebe0e808b1b963e2e95a1042cd3f65c8b1dcd4aa",
37
+ "fuse_efit/export/__init__.py": "404033894bba4772bbec986bb151f4478faa45fe9bf39c4d5e2722e85377517c",
38
+ "fuse_efit/export/contract.py": "de13fe7a8f39db77a351002fbcf8734db93251e0692b37292e842d022c20b561",
39
+ "fuse_efit/export/export_onnx.py": "cef50775b39f6164e4943305976665f386423d61a3a414fa751768007799e923",
40
+ "fuse_efit/export/graphs.py": "13056c2ebe06a104f94c83ebaea0752bf97941945e6797a8d49f8f3ce9861a4d",
41
+ "fuse_efit/export/input_ranges.py": "287d8cbf97163982a98e573e7dcb021fa29e860c4b4f20ac76a0870fdb1b1655",
42
+ "fuse_efit/export/make_reference.py": "dbd20fa4ffd5a2dbe668245f32c86171a2ecc349a768f95bc62c498d28d3d48e",
43
+ "fuse_efit/export/runtime.py": "a70d08d661ebbfd5b4992ff0a6598e28bbf04c1a674eb97589420985f3068a67",
44
+ "fuse_efit/export/step.py": "dee8e5ef7d0d843d9ddf25dee40c93199dba6a3afab0042b929831ae49b7af50",
45
+ "fuse_efit/export/timing.py": "ab9f4f8b35fead7c22f8c0b0e3b9153e3f660c8d8857a1e22bdb188ca8b56669",
46
+ "fuse_efit/export/val_shots.py": "d26c4c20e7c95cae8f3204cc94e60fd897a932cb5db9b24733d0041f654981eb",
47
+ "fuse_efit/export/validate_onnx.py": "93c907a2d1bd2b2d38497f93183bba6d5ff4e0813d9d1ce0f3e2f65404837625"
48
+ }
49
+ },
50
+ "versions": {
51
+ "torch": "2.13.0a0+gitcf30153",
52
+ "numpy": "2.3.5",
53
+ "python": "3.12.12",
54
+ "onnx": "1.23.1",
55
+ "onnxruntime": "1.30.0"
56
+ },
57
+ "platform": "Linux-6.4.0-150700.53.78-default-x86_64-with-glibc2.38",
58
+ "artifacts": {
59
+ "fuse_efit_single_step.onnx": {
60
+ "bytes": 91586758,
61
+ "sha256": "3ffc20851386cf7db9f81792e6b247d179229901c9e615d61c8982174e658c76"
62
+ },
63
+ "fuse_efit_single_sequence.onnx": {
64
+ "bytes": 91967120,
65
+ "sha256": "ddda4e5ed0c3c9aba626ccfea0115863c75d9b71c97b7e44a955919f77b3fac4"
66
+ },
67
+ "model_config.json": {
68
+ "bytes": 15429,
69
+ "sha256": "9e3ae66bbc5e1333cba705bfd7173ba189b19e32c86fbda64a5035d6ea80d9ac"
70
+ },
71
+ "norms.json": {
72
+ "bytes": 7130,
73
+ "sha256": "487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9"
74
+ },
75
+ "input_ranges.json": {
76
+ "bytes": 15628,
77
+ "sha256": "03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d"
78
+ }
79
+ }
80
+ }
manifest.json CHANGED
@@ -1,323 +1,70 @@
1
  {
2
- "schema_version": 2,
3
- "model": "fuse29",
4
- "repo_id": "SCS-Lab/FUSE29-Pedestal-model",
5
- "default_seed": 0,
6
- "onnx_opset": 17,
7
- "actuator_space": "physical",
8
- "heads": [
9
- "ne",
10
- "te_ped",
11
- "ti_ped",
12
- "t_rot_ped",
13
- "neped_prmtan",
14
- "teped_prmtan",
15
- "rho_sym",
16
- "ne_top_loc",
17
- "hmode"
18
- ],
19
- "actuators": [
20
- "pinj",
21
- "tinj",
22
- "ech_total",
23
- "f1a",
24
- "f2a",
25
- "f3a",
26
- "f4a",
27
- "f5a",
28
- "f6a",
29
- "f7a",
30
- "f8a",
31
- "f9a",
32
- "f1b",
33
- "f2b",
34
- "f3b",
35
- "f4b",
36
- "f5b",
37
- "f6b",
38
- "f7b",
39
- "f8b",
40
- "f9b",
41
- "ecoila",
42
- "ecoilb",
43
- "gasa_cal",
44
- "gasb_cal",
45
- "gasc_cal",
46
- "gasd_cal",
47
- "gase_cal",
48
- "bt"
49
- ],
50
- "hmode_gated_heads": [
51
- "neped_prmtan",
52
- "teped_prmtan",
53
- "rho_sym",
54
- "ne_top_loc"
55
- ],
56
- "note": "Eight independently trained seeds, differing only in weight initialisation and data ordering. s0 is the locked champion and the default. The others exist so a consumer can measure spread across training runs; they are not a jointly trained ensemble, and averaging them is a choice rather than the intended use.",
57
- "bundles": [
58
- {
59
- "seed": 0,
60
- "path": "s0",
61
- "default": true,
62
- "val_loss": 1.1169083155691624,
63
- "seq_len": 256,
64
- "files": {
65
- "fuse29_step.onnx": {
66
- "bytes": 45081271,
67
- "sha256": "9150698ab06af368eec857ea429191bf8a0593e9fd9d7e571bb7ce5bcbcf853a"
68
- },
69
- "fuse29_seq.onnx": {
70
- "bytes": 45464382,
71
- "sha256": "0274ad98cc51ee938422f3c9febd3c3cf3141a35d39ff2a62efeb75f9ce43577"
72
- },
73
- "model_config.json": {
74
- "bytes": 7112,
75
- "sha256": "10779e134e2f65f92ef6955833c7b2af73119e069e2e31c2cfb0be563bc0bf3b"
76
- },
77
- "norms.json": {
78
- "bytes": 7840,
79
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
80
- },
81
- "actuator_ranges.json": {
82
- "bytes": 17917,
83
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
84
- },
85
- "provenance.json": {
86
- "bytes": 1198,
87
- "sha256": "e948d64c89bf320d0b747624e69ce86e6f645c2a9d7a9096bdb8efa149e47b36"
88
- }
89
- }
90
  },
91
- {
92
- "seed": 1,
93
- "path": "s1",
94
- "default": false,
95
- "val_loss": 1.1129196528345346,
96
- "seq_len": 256,
97
- "files": {
98
- "fuse29_step.onnx": {
99
- "bytes": 45081271,
100
- "sha256": "8780126cca821664426bafdd896a1313846da69ad120b9c591d90dc0cc21249e"
101
- },
102
- "fuse29_seq.onnx": {
103
- "bytes": 45464382,
104
- "sha256": "3469221c38b1006a017506969d2ffd5f9b84a9a34d22b4429184a299c2438f4a"
105
- },
106
- "model_config.json": {
107
- "bytes": 7112,
108
- "sha256": "337fb9444a95c26d458a48cb8bbf83d16fa62436b509a8e9ad5fd9c424b1a55a"
109
- },
110
- "norms.json": {
111
- "bytes": 7840,
112
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
113
- },
114
- "actuator_ranges.json": {
115
- "bytes": 17917,
116
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
117
- },
118
- "provenance.json": {
119
- "bytes": 1198,
120
- "sha256": "7e4895c944d4423e4fee54a887652ead81d158684a996a05cdebb5ba7aa21962"
121
- }
122
- }
123
  },
124
- {
125
- "seed": 2,
126
- "path": "s2",
127
- "default": false,
128
- "val_loss": 1.119664316996932,
129
- "seq_len": 256,
130
- "files": {
131
- "fuse29_step.onnx": {
132
- "bytes": 45081271,
133
- "sha256": "b696b9c645441cde3881ff796aaec6e1927335daba4539095f6b6dee8a5768f4"
134
- },
135
- "fuse29_seq.onnx": {
136
- "bytes": 45464382,
137
- "sha256": "1fc339449427dfe47ee425eb7ff500887e6a10ae1ef32d90207f2d1e3a828cf3"
138
- },
139
- "model_config.json": {
140
- "bytes": 7111,
141
- "sha256": "3f4859e8942bedcedb8860a50d6150f6189860868a2236094079c58fae273f2d"
142
- },
143
- "norms.json": {
144
- "bytes": 7840,
145
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
146
- },
147
- "actuator_ranges.json": {
148
- "bytes": 17917,
149
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
150
- },
151
- "provenance.json": {
152
- "bytes": 1198,
153
- "sha256": "86a2e05a5af2851c400d6f5d5847832e5cee0f079bc4f8223f380c953dff336c"
154
- }
155
- }
156
  },
157
- {
158
- "seed": 3,
159
- "path": "s3",
160
- "default": false,
161
- "val_loss": 1.1190400626510382,
162
- "seq_len": 256,
163
- "files": {
164
- "fuse29_step.onnx": {
165
- "bytes": 45081271,
166
- "sha256": "f2b80d7f732cef7a21eb21e606cf4a3e63aa4a91a9ff6dde789d88e07fcd5418"
167
- },
168
- "fuse29_seq.onnx": {
169
- "bytes": 45464382,
170
- "sha256": "ab580c091de0471edc8454085dcda9c88650e4995be5c2ec6bd7f8b1c87d7786"
171
- },
172
- "model_config.json": {
173
- "bytes": 7112,
174
- "sha256": "cea93ee7706b95023550a1085349bb581679c05695ab7aba421f157c51d19c93"
175
- },
176
- "norms.json": {
177
- "bytes": 7840,
178
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
179
- },
180
- "actuator_ranges.json": {
181
- "bytes": 17917,
182
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
183
- },
184
- "provenance.json": {
185
- "bytes": 1198,
186
- "sha256": "0cdcf038de7a1a94fe1f763dd5f69d5f6aff58abf74d168a9864caaa1827331c"
187
- }
188
- }
189
  },
190
- {
191
- "seed": 4,
192
- "path": "s4",
193
- "default": false,
194
- "val_loss": 1.1320768278092146,
195
- "seq_len": 256,
196
- "files": {
197
- "fuse29_step.onnx": {
198
- "bytes": 45081271,
199
- "sha256": "7c74bffd61e2c69cae1b8b182fbde8897ce971901d83beded7f6a2e0c919fedc"
200
- },
201
- "fuse29_seq.onnx": {
202
- "bytes": 45464382,
203
- "sha256": "2348d2e1930835363dfade74cfc47d46c88e0691693f60e85cffc2d459ecf774"
204
- },
205
- "model_config.json": {
206
- "bytes": 7112,
207
- "sha256": "a7539aaf67b322d787944dfd191feedc2b9373fb5958f763b171869578e41258"
208
- },
209
- "norms.json": {
210
- "bytes": 7840,
211
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
212
- },
213
- "actuator_ranges.json": {
214
- "bytes": 17917,
215
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
216
- },
217
- "provenance.json": {
218
- "bytes": 1198,
219
- "sha256": "47883a9d25d4a0ee5fb8e6d31464442420afbb59ecde6a4e7206f505848aec6d"
220
- }
221
- }
222
  },
223
- {
224
- "seed": 5,
225
- "path": "s5",
226
- "default": false,
227
- "val_loss": 1.1122196558862925,
228
- "seq_len": 256,
229
- "files": {
230
- "fuse29_step.onnx": {
231
- "bytes": 45081271,
232
- "sha256": "1e10c13fc85dd992fafbaddc8b3dd01d11aabaf757e3e125329a699d298a6a11"
233
- },
234
- "fuse29_seq.onnx": {
235
- "bytes": 45464382,
236
- "sha256": "bee461499d85d1cf7ce5b4f5f56ab1bf13b55066737c08147e860211b0091ff3"
237
- },
238
- "model_config.json": {
239
- "bytes": 7112,
240
- "sha256": "77e00af4f5099967eb06c910400cb2ae892d097a9944b4e7e19751066bc0a2ca"
241
- },
242
- "norms.json": {
243
- "bytes": 7840,
244
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
245
- },
246
- "actuator_ranges.json": {
247
- "bytes": 17917,
248
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
249
- },
250
- "provenance.json": {
251
- "bytes": 1198,
252
- "sha256": "13204b19314a50bcb0e7228e79a9c64de4237bae6d6da4bd483a3ca4bdb3ebf4"
253
- }
254
- }
255
  },
256
- {
257
- "seed": 6,
258
- "path": "s6",
259
- "default": false,
260
- "val_loss": 1.1161801163107157,
261
- "seq_len": 256,
262
- "files": {
263
- "fuse29_step.onnx": {
264
- "bytes": 45081271,
265
- "sha256": "36b55e194e705e0a1d1087c1164e4f72f2507784b1210a0ce2f94fa151db04fa"
266
- },
267
- "fuse29_seq.onnx": {
268
- "bytes": 45464382,
269
- "sha256": "ca3570ae8e579c638d9195f6f7e3c4634bc61425cc51c7998a53818cb8c18ddb"
270
- },
271
- "model_config.json": {
272
- "bytes": 7112,
273
- "sha256": "6107c3d463829d896ae229483595fe421f406925361774ff2b6e63bc9cf3ca40"
274
- },
275
- "norms.json": {
276
- "bytes": 7840,
277
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
278
- },
279
- "actuator_ranges.json": {
280
- "bytes": 17917,
281
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
282
- },
283
- "provenance.json": {
284
- "bytes": 1198,
285
- "sha256": "7cb93660689bffca0315d1bf5c1b1ffb2247b7c2e512cc0fdd9dc30037955140"
286
- }
287
- }
288
  },
289
- {
290
- "seed": 7,
291
- "path": "s7",
292
- "default": false,
293
- "val_loss": 1.112956801429391,
294
- "seq_len": 256,
295
- "files": {
296
- "fuse29_step.onnx": {
297
- "bytes": 45081271,
298
- "sha256": "abf72130ad644f7bf2883c39f336536ad839ae7f609cc88d28a5366459e1693c"
299
- },
300
- "fuse29_seq.onnx": {
301
- "bytes": 45464382,
302
- "sha256": "db040b029538d47b404e9864538fb0c550285081ecce7348ad6fd231fdd7bbcf"
303
- },
304
- "model_config.json": {
305
- "bytes": 7111,
306
- "sha256": "7cfbcd1b3b9e50836dc7de9f312db9c70931afcc105dca1dd184d17c65f99d75"
307
- },
308
- "norms.json": {
309
- "bytes": 7840,
310
- "sha256": "f39e579358c10911e79f2bfca2f38f76549e86462a4952ff68f009da0aca8118"
311
- },
312
- "actuator_ranges.json": {
313
- "bytes": 17917,
314
- "sha256": "ccc717f12f66944e120b4a01dbf4ddd090c444ceff50a2613d0992a765b92a44"
315
- },
316
- "provenance.json": {
317
- "bytes": 1198,
318
- "sha256": "687b3a1f6adfb5d4b2834bf1b5fc62f909dfdbb5812e81b82bef6784cef865f7"
319
- }
320
- }
321
  }
322
- ]
 
323
  }
 
1
  {
2
+ "schema_version": 1,
3
+ "model": "FUSE-EFIT",
4
+ "protocol": "in era",
5
+ "repo_id": "SCS-Lab/FUSE-PED",
6
+ "license": "mit",
7
+ "code": "https://github.com/NoahH72/FUSE-Pedestal-Predictor-Mamba-ONNX",
8
+ "forms": {
9
+ "single": {
10
+ "path": "era/single",
11
+ "members": 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  },
13
+ "averaged": {
14
+ "path": "era/averaged",
15
+ "members": 8
16
+ }
17
+ },
18
+ "default_form": "single",
19
+ "files": {
20
+ "era/averaged/fuse_efit_averaged_sequence.onnx": {
21
+ "bytes": 735805697,
22
+ "sha256": "cd3eaabcc7f7727e273f8063cb7d52bd324c287d42e62bbae4eeebb32b5b00ec"
23
+ },
24
+ "era/averaged/fuse_efit_averaged_step.onnx": {
25
+ "bytes": 732659205,
26
+ "sha256": "8d19844716b817216035a72b480d24326c7fe28a64dbf17f8a9ea53178ea359e"
27
+ },
28
+ "era/averaged/input_ranges.json": {
29
+ "bytes": 15628,
30
+ "sha256": "03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d"
31
+ },
32
+ "era/averaged/model_config.json": {
33
+ "bytes": 18269,
34
+ "sha256": "27697f17523ac6d8e5da69abded17827b566aaadc57be46f77138831d2b7535c"
35
+ },
36
+ "era/averaged/norms.json": {
37
+ "bytes": 7130,
38
+ "sha256": "487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9"
39
+ },
40
+ "era/averaged/provenance.json": {
41
+ "bytes": 6405,
42
+ "sha256": "1b76be85374bb2a944a9557ff3ab5c86ffde72f9ccbb29525dcb72e34058da5c"
 
 
43
  },
44
+ "era/single/fuse_efit_single_sequence.onnx": {
45
+ "bytes": 91967120,
46
+ "sha256": "ddda4e5ed0c3c9aba626ccfea0115863c75d9b71c97b7e44a955919f77b3fac4"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  },
48
+ "era/single/fuse_efit_single_step.onnx": {
49
+ "bytes": 91586758,
50
+ "sha256": "3ffc20851386cf7db9f81792e6b247d179229901c9e615d61c8982174e658c76"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  },
52
+ "era/single/input_ranges.json": {
53
+ "bytes": 15628,
54
+ "sha256": "03f5af87195cb7e9746a320bf0070d05b53234e54a6d2e012a6ebd346e64f98d"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  },
56
+ "era/single/model_config.json": {
57
+ "bytes": 15429,
58
+ "sha256": "9e3ae66bbc5e1333cba705bfd7173ba189b19e32c86fbda64a5035d6ea80d9ac"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  },
60
+ "era/single/norms.json": {
61
+ "bytes": 7130,
62
+ "sha256": "487fa5c79f1e4f58db2df41b239d954e6006d4cc6118228ed9e4241189402ea9"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  },
64
+ "era/single/provenance.json": {
65
+ "bytes": 3758,
66
+ "sha256": "c481b3f5b07bcb2532bb725629172263e78181752b65641bc27451d3e80a480e"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
+ },
69
+ "prepared_utc": "2026-11-09T16:40:37Z"
70
  }
s0/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 0
14
-
15
- **This is the champion seed and the default.** `Fuse29Predictor.from_pretrained()` with no seed argument loads it, and every number in the root model card refers to it.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 0 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1169 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:21.979021+00:00 |
29
- | Source checkpoint SHA-256 | `875ff7248c0bfde3…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=0)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s0/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s0/model_config.json DELETED
@@ -1,268 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "model": "fuse29",
4
- "seed": 0,
5
- "description": "29-input Mamba-2 pedestal predictor for DIII-D. Strictly causal, 20 Hz, nine heads at rho_tor = 0.85.",
6
- "architecture": {
7
- "family": "Mamba-2 (structured state-space duality)",
8
- "d_model": 512,
9
- "n_layers": 6,
10
- "d_state": 128,
11
- "d_conv": 4,
12
- "expand": 2,
13
- "headdim": 128,
14
- "nheads": 8,
15
- "ngroups": 2,
16
- "chunk_size": 100,
17
- "d_inner": 1024,
18
- "conv_dim": 1536,
19
- "n_params": 11254425
20
- },
21
- "cadence": {
22
- "hz": 20,
23
- "period_ms": 50.0,
24
- "rho_tor": 0.85
25
- },
26
- "inputs": {
27
- "names": [
28
- "pinj",
29
- "tinj",
30
- "ech_total",
31
- "f1a",
32
- "f2a",
33
- "f3a",
34
- "f4a",
35
- "f5a",
36
- "f6a",
37
- "f7a",
38
- "f8a",
39
- "f9a",
40
- "f1b",
41
- "f2b",
42
- "f3b",
43
- "f4b",
44
- "f5b",
45
- "f6b",
46
- "f7b",
47
- "f8b",
48
- "f9b",
49
- "ecoila",
50
- "ecoilb",
51
- "gasa_cal",
52
- "gasb_cal",
53
- "gasc_cal",
54
- "gasd_cal",
55
- "gase_cal",
56
- "bt"
57
- ],
58
- "n": 29,
59
- "units": {
60
- "pinj": "MW",
61
- "tinj": "N*m",
62
- "ech_total": "MW",
63
- "f1a": "A",
64
- "f2a": "A",
65
- "f3a": "A",
66
- "f4a": "A",
67
- "f5a": "A",
68
- "f6a": "A",
69
- "f7a": "A",
70
- "f8a": "A",
71
- "f9a": "A",
72
- "f1b": "A",
73
- "f2b": "A",
74
- "f3b": "A",
75
- "f4b": "A",
76
- "f5b": "A",
77
- "f6b": "A",
78
- "f7b": "A",
79
- "f8b": "A",
80
- "f9b": "A",
81
- "ecoila": "A",
82
- "ecoilb": "A",
83
- "gasa_cal": "Torr*L/s",
84
- "gasb_cal": "Torr*L/s",
85
- "gasc_cal": "Torr*L/s",
86
- "gasd_cal": "Torr*L/s",
87
- "gase_cal": "Torr*L/s",
88
- "bt": "T"
89
- },
90
- "sources": {
91
- "pinj": "ptdata:bmspinj",
92
- "tinj": "ptdata:bmstinj",
93
- "ech_total": "ptdata:ECHPWR",
94
- "f1a": "ptdata:F1A",
95
- "f2a": "ptdata:F2A",
96
- "f3a": "ptdata:F3A",
97
- "f4a": "ptdata:F4A",
98
- "f5a": "ptdata:F5A",
99
- "f6a": "ptdata:F6A",
100
- "f7a": "ptdata:F7A",
101
- "f8a": "ptdata:F8A",
102
- "f9a": "ptdata:F9A",
103
- "f1b": "ptdata:F1B",
104
- "f2b": "ptdata:F2B",
105
- "f3b": "ptdata:F3B",
106
- "f4b": "ptdata:F4B",
107
- "f5b": "ptdata:F5B",
108
- "f6b": "ptdata:F6B",
109
- "f7b": "ptdata:F7B",
110
- "f8b": "ptdata:F8B",
111
- "f9b": "ptdata:F9B",
112
- "ecoila": "ptdata:ECOILA",
113
- "ecoilb": "ptdata:ECOILB",
114
- "gasa_cal": "tree:NEUTRALS GASFLOW.GASA:FLOW",
115
- "gasb_cal": "tree:NEUTRALS GASFLOW.GASB:FLOW",
116
- "gasc_cal": "tree:NEUTRALS GASFLOW.GASC:FLOW",
117
- "gasd_cal": "tree:NEUTRALS GASFLOW.GASD:FLOW",
118
- "gase_cal": "tree:NEUTRALS GASFLOW.GASE:FLOW",
119
- "bt": "ptdata:bt"
120
- },
121
- "descriptions": {
122
- "pinj": "Neutral beam injected power, all sources.",
123
- "tinj": "Neutral beam injected torque, all sources.",
124
- "ech_total": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
125
- "f1a": "Shaping F-coil F1A current (bank A).",
126
- "f2a": "Shaping F-coil F2A current (bank A).",
127
- "f3a": "Shaping F-coil F3A current (bank A).",
128
- "f4a": "Shaping F-coil F4A current (bank A).",
129
- "f5a": "Shaping F-coil F5A current (bank A).",
130
- "f6a": "Shaping F-coil F6A current (bank A).",
131
- "f7a": "Shaping F-coil F7A current (bank A).",
132
- "f8a": "Shaping F-coil F8A current (bank A).",
133
- "f9a": "Shaping F-coil F9A current (bank A).",
134
- "f1b": "Shaping F-coil F1B current (bank B).",
135
- "f2b": "Shaping F-coil F2B current (bank B).",
136
- "f3b": "Shaping F-coil F3B current (bank B).",
137
- "f4b": "Shaping F-coil F4B current (bank B).",
138
- "f5b": "Shaping F-coil F5B current (bank B).",
139
- "f6b": "Shaping F-coil F6B current (bank B).",
140
- "f7b": "Shaping F-coil F7B current (bank B).",
141
- "f8b": "Shaping F-coil F8B current (bank B).",
142
- "f9b": "Shaping F-coil F9B current (bank B).",
143
- "ecoila": "Ohmic E-coil bank A current.",
144
- "ecoilb": "Ohmic E-coil bank B current.",
145
- "gasa_cal": "Calibrated gas injection flow, valve A.",
146
- "gasb_cal": "Calibrated gas injection flow, valve B.",
147
- "gasc_cal": "Calibrated gas injection flow, valve C.",
148
- "gasd_cal": "Calibrated gas injection flow, valve D.",
149
- "gase_cal": "Calibrated gas injection flow, valve E.",
150
- "bt": "Vacuum toroidal magnetic field (signed)."
151
- },
152
- "space": "raw physical units; the graph applies the z-score",
153
- "note": "Check your units against actuator_ranges.json before trusting any output. A unit error produces confident nonsense rather than an exception."
154
- },
155
- "outputs": {
156
- "names": [
157
- "ne",
158
- "te_ped",
159
- "ti_ped",
160
- "t_rot_ped",
161
- "neped_prmtan",
162
- "teped_prmtan",
163
- "rho_sym",
164
- "ne_top_loc",
165
- "hmode"
166
- ],
167
- "n": 9,
168
- "units": {
169
- "ne": "1e19 m^-3",
170
- "te_ped": "keV",
171
- "ti_ped": "keV",
172
- "t_rot_ped": "krad/s",
173
- "neped_prmtan": "1e19 m^-3",
174
- "teped_prmtan": "keV",
175
- "rho_sym": "rho_tor (dimensionless)",
176
- "ne_top_loc": "rho_tor (dimensionless)",
177
- "hmode": "probability in [0, 1]"
178
- },
179
- "note": "Physical units. hmode is a probability in [0, 1]; the graph applies the sigmoid.",
180
- "hmode_gated": {
181
- "heads": [
182
- "neped_prmtan",
183
- "teped_prmtan",
184
- "rho_sym",
185
- "ne_top_loc"
186
- ],
187
- "indices": [
188
- 4,
189
- 5,
190
- 6,
191
- 7
192
- ],
193
- "threshold": 0.5,
194
- "note": "These four heads were trained only on H-mode rows and are undefined otherwise. The graph does NOT gate them; the consumer must, using the model's own hmode output. See docs/GATING.md."
195
- }
196
- },
197
- "graphs": {
198
- "fuse29_step.onnx": {
199
- "purpose": "real-time, one 50 ms tick per call",
200
- "inputs": {
201
- "actuators": [
202
- "batch",
203
- 29
204
- ],
205
- "conv_state": [
206
- 6,
207
- "batch",
208
- 1536,
209
- 3
210
- ],
211
- "ssm_state": [
212
- 6,
213
- "batch",
214
- 8,
215
- 128,
216
- 128
217
- ]
218
- },
219
- "outputs": {
220
- "predictions": [
221
- "batch",
222
- 9
223
- ],
224
- "conv_state_out": [
225
- 6,
226
- "batch",
227
- 1536,
228
- 3
229
- ],
230
- "ssm_state_out": [
231
- 6,
232
- "batch",
233
- 8,
234
- 128,
235
- 128
236
- ]
237
- },
238
- "initial_state": "all zeros at the start of a shot",
239
- "max_shot_length": "unbounded"
240
- },
241
- "fuse29_seq.onnx": {
242
- "purpose": "offline scoring of a whole shot",
243
- "inputs": {
244
- "actuators": [
245
- "batch",
246
- 256,
247
- 29
248
- ]
249
- },
250
- "outputs": {
251
- "predictions": [
252
- "batch",
253
- 256,
254
- 9
255
- ]
256
- },
257
- "seq_len": 256,
258
- "note": "Sequence length is FIXED. Right-pad shorter shots with zeros and read the first T outputs; the model is strictly causal so this is exact. For longer shots use the step graph or re-export with --seq-len."
259
- }
260
- },
261
- "dtype": "float32",
262
- "onnx_opset": 17,
263
- "training": {
264
- "epoch": 19,
265
- "val_loss": 1.1169083155691624,
266
- "note": "See docs/TRAINING.md for the full recipe."
267
- }
268
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s0/norms.json DELETED
@@ -1,292 +0,0 @@
1
- {
2
- "schema_version": 2,
3
- "note": "Statistics are baked into the shipped ONNX graphs. This file is for inspection and for reproducing the transform outside the graph; it is not required at inference time.",
4
- "actuator_space": "physical",
5
- "std_floor": 1e-06,
6
- "clip_sigma": 20.0,
7
- "provenance": {
8
- "split": "train",
9
- "n_shots": 32731,
10
- "rho_index": 85,
11
- "source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85, random stratified split (split_index.json)",
12
- "note": "Recomputed on the NEW random train split. The source shards carried z-scores from the OLD chronological train split, whose shots overlap our test set. Actuator statistics are winsorised so a corrupted sample cannot set a channel's divisor.",
13
- "inflated_channels": [
14
- "pinj",
15
- "gasc_cal",
16
- "gasd_cal",
17
- "gase_cal"
18
- ],
19
- "actuator_estimator": "winsorised to p1..p99",
20
- "actuator_space": "physical",
21
- "composed_from": [
22
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
23
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
24
- ],
25
- "composition": "z = (x_phys - (m1 + s1*m2)) / (s1*s2), where (m1, s1) is the upstream FPE z-score and (m2, s2) is this model's re-scale onto its own training split"
26
- },
27
- "actuators": {
28
- "names": [
29
- "pinj",
30
- "tinj",
31
- "ech_total",
32
- "f1a",
33
- "f2a",
34
- "f3a",
35
- "f4a",
36
- "f5a",
37
- "f6a",
38
- "f7a",
39
- "f8a",
40
- "f9a",
41
- "f1b",
42
- "f2b",
43
- "f3b",
44
- "f4b",
45
- "f5b",
46
- "f6b",
47
- "f7b",
48
- "f8b",
49
- "f9b",
50
- "ecoila",
51
- "ecoilb",
52
- "gasa_cal",
53
- "gasb_cal",
54
- "gasc_cal",
55
- "gasd_cal",
56
- "gase_cal",
57
- "bt"
58
- ],
59
- "mean": [
60
- 3.838883638381958,
61
- 2.2043209075927734,
62
- 2.6981112957000732,
63
- -1382.3704833984375,
64
- -1229.876708984375,
65
- -592.7352294921875,
66
- 1098.1622314453125,
67
- 1173.57958984375,
68
- -2493.411865234375,
69
- -2367.570556640625,
70
- 996.0214233398438,
71
- -535.8018798828125,
72
- -1373.1888427734375,
73
- -1218.50048828125,
74
- -1005.3848266601562,
75
- 1124.2967529296875,
76
- 1443.536865234375,
77
- -2463.248046875,
78
- -2941.56005859375,
79
- 1431.05615234375,
80
- -214.02586364746094,
81
- -6965.32666015625,
82
- -6876.16455078125,
83
- 15.054444313049316,
84
- 1.386172890663147,
85
- 0.35034820437431335,
86
- 0.528103232383728,
87
- 0.27696067094802856,
88
- -0.971906840801239
89
- ],
90
- "std": [
91
- 3.0613932609558105,
92
- 2.11222505569458,
93
- 6.685519218444824,
94
- 1349.629638671875,
95
- 1248.3497314453125,
96
- 1185.706298828125,
97
- 1368.95458984375,
98
- 1352.103759765625,
99
- 1867.8076171875,
100
- 1999.19970703125,
101
- 1498.948974609375,
102
- 1258.01171875,
103
- 1367.82275390625,
104
- 1316.67724609375,
105
- 1308.8258056640625,
106
- 1519.5994873046875,
107
- 1408.3306884765625,
108
- 1836.4208984375,
109
- 2510.1083984375,
110
- 1718.2965087890625,
111
- 1388.83447265625,
112
- 18940.9453125,
113
- 18723.662109375,
114
- 26.369497299194336,
115
- 3.4090511798858643,
116
- 0.4470684826374054,
117
- 0.654624342918396,
118
- 0.17616958916187286,
119
- 1.6484158039093018
120
- ],
121
- "transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma), applied inside the graph"
122
- },
123
- "targets": {
124
- "ne": {
125
- "mean": 2.7511744499206543,
126
- "std": 1.654153823852539
127
- },
128
- "te_ped": {
129
- "mean": 0.5915626287460327,
130
- "std": 0.43467429280281067
131
- },
132
- "ti_ped": {
133
- "mean": 1.016850233078003,
134
- "std": 0.681096076965332
135
- },
136
- "t_rot_ped": {
137
- "mean": 21.244613647460938,
138
- "std": 16.59148406982422
139
- },
140
- "neped_prmtan": {
141
- "mean": 2.7231285572052,
142
- "std": 1.7005536556243896
143
- },
144
- "teped_prmtan": {
145
- "mean": 0.46375223994255066,
146
- "std": 0.36919456720352173
147
- },
148
- "rho_sym": {
149
- "mean": 0.9757616519927979,
150
- "std": 0.04329206794500351
151
- },
152
- "ne_top_loc": {
153
- "mean": 0.9261865019798279,
154
- "std": 0.049897171556949615
155
- }
156
- },
157
- "hmode": {
158
- "transform": "sigmoid",
159
- "note": "hmode is a logit in the trunk; the graph applies the sigmoid."
160
- },
161
- "stages": {
162
- "note": "The composed actuator statistics above are the product of these two. Shown for traceability; use the composed values.",
163
- "stage1_physical_to_fpe_zscore": {
164
- "mean": [
165
- 2.8111997039100878,
166
- 2.154143940948575,
167
- 2.159654935239209,
168
- -1444.0438445123289,
169
- -1315.1185221229061,
170
- -639.741760304047,
171
- 1172.4978680515835,
172
- 1222.4970107268077,
173
- -2488.8410961768263,
174
- -2491.3739557685253,
175
- 1050.107386405324,
176
- -578.9736547563273,
177
- -1421.0817159358041,
178
- -1285.3967398730092,
179
- -1061.0290851406676,
180
- 1186.4795970820587,
181
- 1460.6822372728345,
182
- -2452.093120847959,
183
- -3071.3132492215186,
184
- 1531.3304960724108,
185
- -262.6728625067526,
186
- -6887.604056684089,
187
- -6768.996463787789,
188
- 14.89178144369171,
189
- 1.9421402622606716,
190
- 0.7508911827356307,
191
- 1.0383906373403984,
192
- 0.3920832239686922,
193
- -1.0310375752078498
194
- ],
195
- "std": [
196
- 194.08418888726106,
197
- 2.3684465859740262,
198
- 5.948083564785035,
199
- 1267.4907621702682,
200
- 1217.4478106828162,
201
- 1249.3915272640536,
202
- 1345.3871181128568,
203
- 1359.1934832307923,
204
- 1887.1891497052302,
205
- 1888.1014577442652,
206
- 1559.9875106371376,
207
- 1287.2118470203372,
208
- 1271.813282654729,
209
- 1259.8644805335082,
210
- 1361.9306367877398,
211
- 1521.172083160852,
212
- 1393.2120473032558,
213
- 1856.723912629122,
214
- 2432.8530409799628,
215
- 1705.6959050005082,
216
- 1421.8036451037203,
217
- 19092.148992270486,
218
- 18858.28389193975,
219
- 27.289184462156058,
220
- 11.092415079529571,
221
- 9.017289768908354,
222
- 12.055982101097918,
223
- 6.498888909025979,
224
- 1.599000778986496
225
- ]
226
- },
227
- "stage2_fpe_zscore_to_model": {
228
- "mean": [
229
- 0.0052950419485569,
230
- 0.02118559367954731,
231
- 0.0905260294675827,
232
- 0.04865782707929611,
233
- 0.0700167864561081,
234
- 0.03762352466583252,
235
- -0.05525219440460205,
236
- -0.03599006310105324,
237
- -0.002421961398795247,
238
- 0.06557027250528336,
239
- -0.03467077016830444,
240
- 0.03353898227214813,
241
- 0.03765711933374405,
242
- 0.05309795215725899,
243
- 0.040856875479221344,
244
- -0.04087827727198601,
245
- -0.012306398712098598,
246
- -0.006007813848555088,
247
- 0.05333370715379715,
248
- -0.05878793075680733,
249
- 0.03421499580144882,
250
- -0.004070908762514591,
251
- -0.00568280229344964,
252
- 0.005960696842521429,
253
- -0.050121404230594635,
254
- -0.04441944137215614,
255
- -0.042326491326093674,
256
- -0.017714189365506172,
257
- 0.036979787051677704
258
- ],
259
- "std": [
260
- 0.015773532912135124,
261
- 0.8918187022209167,
262
- 1.1239787340164185,
263
- 1.0648043155670166,
264
- 1.0253825187683105,
265
- 0.9490270018577576,
266
- 1.0175172090530396,
267
- 0.994783878326416,
268
- 0.9897299408912659,
269
- 1.0588412284851074,
270
- 0.9608724117279053,
271
- 0.9773152470588684,
272
- 1.0754902362823486,
273
- 1.04509437084198,
274
- 0.9610077142715454,
275
- 0.9989661574363708,
276
- 1.0108516216278076,
277
- 0.9890651702880859,
278
- 1.0317550897598267,
279
- 1.007387399673462,
280
- 0.9768117070198059,
281
- 0.9920803308486938,
282
- 0.9928614497184753,
283
- 0.9662984609603882,
284
- 0.30733174085617065,
285
- 0.04957903176546097,
286
- 0.05429871752858162,
287
- 0.02710764855146408,
288
- 1.030903697013855
289
- ]
290
- }
291
- }
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s0/provenance.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "exported_utc": "2026-09-03T00:46:21.979021+00:00",
4
- "seed": 0,
5
- "source_checkpoint": "/flare/fusiondl_aesp/fuse_bd_model/fuse20/runs/fuse29r_s0/best_model.pt",
6
- "source_checkpoint_sha256": "875ff7248c0bfde39c54e75d4638bd563f8f78b52dc26e294cdd308b116d13c7",
7
- "norms_source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json",
8
- "norms_actuator_space": "physical",
9
- "norms_composed_from": [
10
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
11
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
12
- ],
13
- "onnx_opset": 17,
14
- "exporter": "torch.onnx.export (TorchScript, dynamo=False)",
15
- "versions": {
16
- "torch": "2.10.0a0+git449b176",
17
- "python": "3.12.12",
18
- "platform": "Linux-5.14.21-150400.24.235-default-x86_64-with-glibc2.31",
19
- "onnx": "1.22.0",
20
- "onnxruntime": "1.29.0"
21
- },
22
- "artifacts": {
23
- "fuse29_step.onnx": {
24
- "bytes": 45081271,
25
- "sha256": "9150698ab06af368eec857ea429191bf8a0593e9fd9d7e571bb7ce5bcbcf853a"
26
- },
27
- "fuse29_seq.onnx": {
28
- "bytes": 45464382,
29
- "sha256": "0274ad98cc51ee938422f3c9febd3c3cf3141a35d39ff2a62efeb75f9ce43577"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 1
14
-
15
- This is seed 1, one of eight independently trained runs. Seed 0 is the champion and the default; this one exists so you can measure spread across training runs. Unless you are doing that, you want seed 0.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 1 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1129 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:24.670692+00:00 |
29
- | Source checkpoint SHA-256 | `a77e8a7359c47e1f…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=1)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1/model_config.json DELETED
@@ -1,268 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "model": "fuse29",
4
- "seed": 1,
5
- "description": "29-input Mamba-2 pedestal predictor for DIII-D. Strictly causal, 20 Hz, nine heads at rho_tor = 0.85.",
6
- "architecture": {
7
- "family": "Mamba-2 (structured state-space duality)",
8
- "d_model": 512,
9
- "n_layers": 6,
10
- "d_state": 128,
11
- "d_conv": 4,
12
- "expand": 2,
13
- "headdim": 128,
14
- "nheads": 8,
15
- "ngroups": 2,
16
- "chunk_size": 100,
17
- "d_inner": 1024,
18
- "conv_dim": 1536,
19
- "n_params": 11254425
20
- },
21
- "cadence": {
22
- "hz": 20,
23
- "period_ms": 50.0,
24
- "rho_tor": 0.85
25
- },
26
- "inputs": {
27
- "names": [
28
- "pinj",
29
- "tinj",
30
- "ech_total",
31
- "f1a",
32
- "f2a",
33
- "f3a",
34
- "f4a",
35
- "f5a",
36
- "f6a",
37
- "f7a",
38
- "f8a",
39
- "f9a",
40
- "f1b",
41
- "f2b",
42
- "f3b",
43
- "f4b",
44
- "f5b",
45
- "f6b",
46
- "f7b",
47
- "f8b",
48
- "f9b",
49
- "ecoila",
50
- "ecoilb",
51
- "gasa_cal",
52
- "gasb_cal",
53
- "gasc_cal",
54
- "gasd_cal",
55
- "gase_cal",
56
- "bt"
57
- ],
58
- "n": 29,
59
- "units": {
60
- "pinj": "MW",
61
- "tinj": "N*m",
62
- "ech_total": "MW",
63
- "f1a": "A",
64
- "f2a": "A",
65
- "f3a": "A",
66
- "f4a": "A",
67
- "f5a": "A",
68
- "f6a": "A",
69
- "f7a": "A",
70
- "f8a": "A",
71
- "f9a": "A",
72
- "f1b": "A",
73
- "f2b": "A",
74
- "f3b": "A",
75
- "f4b": "A",
76
- "f5b": "A",
77
- "f6b": "A",
78
- "f7b": "A",
79
- "f8b": "A",
80
- "f9b": "A",
81
- "ecoila": "A",
82
- "ecoilb": "A",
83
- "gasa_cal": "Torr*L/s",
84
- "gasb_cal": "Torr*L/s",
85
- "gasc_cal": "Torr*L/s",
86
- "gasd_cal": "Torr*L/s",
87
- "gase_cal": "Torr*L/s",
88
- "bt": "T"
89
- },
90
- "sources": {
91
- "pinj": "ptdata:bmspinj",
92
- "tinj": "ptdata:bmstinj",
93
- "ech_total": "ptdata:ECHPWR",
94
- "f1a": "ptdata:F1A",
95
- "f2a": "ptdata:F2A",
96
- "f3a": "ptdata:F3A",
97
- "f4a": "ptdata:F4A",
98
- "f5a": "ptdata:F5A",
99
- "f6a": "ptdata:F6A",
100
- "f7a": "ptdata:F7A",
101
- "f8a": "ptdata:F8A",
102
- "f9a": "ptdata:F9A",
103
- "f1b": "ptdata:F1B",
104
- "f2b": "ptdata:F2B",
105
- "f3b": "ptdata:F3B",
106
- "f4b": "ptdata:F4B",
107
- "f5b": "ptdata:F5B",
108
- "f6b": "ptdata:F6B",
109
- "f7b": "ptdata:F7B",
110
- "f8b": "ptdata:F8B",
111
- "f9b": "ptdata:F9B",
112
- "ecoila": "ptdata:ECOILA",
113
- "ecoilb": "ptdata:ECOILB",
114
- "gasa_cal": "tree:NEUTRALS GASFLOW.GASA:FLOW",
115
- "gasb_cal": "tree:NEUTRALS GASFLOW.GASB:FLOW",
116
- "gasc_cal": "tree:NEUTRALS GASFLOW.GASC:FLOW",
117
- "gasd_cal": "tree:NEUTRALS GASFLOW.GASD:FLOW",
118
- "gase_cal": "tree:NEUTRALS GASFLOW.GASE:FLOW",
119
- "bt": "ptdata:bt"
120
- },
121
- "descriptions": {
122
- "pinj": "Neutral beam injected power, all sources.",
123
- "tinj": "Neutral beam injected torque, all sources.",
124
- "ech_total": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
125
- "f1a": "Shaping F-coil F1A current (bank A).",
126
- "f2a": "Shaping F-coil F2A current (bank A).",
127
- "f3a": "Shaping F-coil F3A current (bank A).",
128
- "f4a": "Shaping F-coil F4A current (bank A).",
129
- "f5a": "Shaping F-coil F5A current (bank A).",
130
- "f6a": "Shaping F-coil F6A current (bank A).",
131
- "f7a": "Shaping F-coil F7A current (bank A).",
132
- "f8a": "Shaping F-coil F8A current (bank A).",
133
- "f9a": "Shaping F-coil F9A current (bank A).",
134
- "f1b": "Shaping F-coil F1B current (bank B).",
135
- "f2b": "Shaping F-coil F2B current (bank B).",
136
- "f3b": "Shaping F-coil F3B current (bank B).",
137
- "f4b": "Shaping F-coil F4B current (bank B).",
138
- "f5b": "Shaping F-coil F5B current (bank B).",
139
- "f6b": "Shaping F-coil F6B current (bank B).",
140
- "f7b": "Shaping F-coil F7B current (bank B).",
141
- "f8b": "Shaping F-coil F8B current (bank B).",
142
- "f9b": "Shaping F-coil F9B current (bank B).",
143
- "ecoila": "Ohmic E-coil bank A current.",
144
- "ecoilb": "Ohmic E-coil bank B current.",
145
- "gasa_cal": "Calibrated gas injection flow, valve A.",
146
- "gasb_cal": "Calibrated gas injection flow, valve B.",
147
- "gasc_cal": "Calibrated gas injection flow, valve C.",
148
- "gasd_cal": "Calibrated gas injection flow, valve D.",
149
- "gase_cal": "Calibrated gas injection flow, valve E.",
150
- "bt": "Vacuum toroidal magnetic field (signed)."
151
- },
152
- "space": "raw physical units; the graph applies the z-score",
153
- "note": "Check your units against actuator_ranges.json before trusting any output. A unit error produces confident nonsense rather than an exception."
154
- },
155
- "outputs": {
156
- "names": [
157
- "ne",
158
- "te_ped",
159
- "ti_ped",
160
- "t_rot_ped",
161
- "neped_prmtan",
162
- "teped_prmtan",
163
- "rho_sym",
164
- "ne_top_loc",
165
- "hmode"
166
- ],
167
- "n": 9,
168
- "units": {
169
- "ne": "1e19 m^-3",
170
- "te_ped": "keV",
171
- "ti_ped": "keV",
172
- "t_rot_ped": "krad/s",
173
- "neped_prmtan": "1e19 m^-3",
174
- "teped_prmtan": "keV",
175
- "rho_sym": "rho_tor (dimensionless)",
176
- "ne_top_loc": "rho_tor (dimensionless)",
177
- "hmode": "probability in [0, 1]"
178
- },
179
- "note": "Physical units. hmode is a probability in [0, 1]; the graph applies the sigmoid.",
180
- "hmode_gated": {
181
- "heads": [
182
- "neped_prmtan",
183
- "teped_prmtan",
184
- "rho_sym",
185
- "ne_top_loc"
186
- ],
187
- "indices": [
188
- 4,
189
- 5,
190
- 6,
191
- 7
192
- ],
193
- "threshold": 0.5,
194
- "note": "These four heads were trained only on H-mode rows and are undefined otherwise. The graph does NOT gate them; the consumer must, using the model's own hmode output. See docs/GATING.md."
195
- }
196
- },
197
- "graphs": {
198
- "fuse29_step.onnx": {
199
- "purpose": "real-time, one 50 ms tick per call",
200
- "inputs": {
201
- "actuators": [
202
- "batch",
203
- 29
204
- ],
205
- "conv_state": [
206
- 6,
207
- "batch",
208
- 1536,
209
- 3
210
- ],
211
- "ssm_state": [
212
- 6,
213
- "batch",
214
- 8,
215
- 128,
216
- 128
217
- ]
218
- },
219
- "outputs": {
220
- "predictions": [
221
- "batch",
222
- 9
223
- ],
224
- "conv_state_out": [
225
- 6,
226
- "batch",
227
- 1536,
228
- 3
229
- ],
230
- "ssm_state_out": [
231
- 6,
232
- "batch",
233
- 8,
234
- 128,
235
- 128
236
- ]
237
- },
238
- "initial_state": "all zeros at the start of a shot",
239
- "max_shot_length": "unbounded"
240
- },
241
- "fuse29_seq.onnx": {
242
- "purpose": "offline scoring of a whole shot",
243
- "inputs": {
244
- "actuators": [
245
- "batch",
246
- 256,
247
- 29
248
- ]
249
- },
250
- "outputs": {
251
- "predictions": [
252
- "batch",
253
- 256,
254
- 9
255
- ]
256
- },
257
- "seq_len": 256,
258
- "note": "Sequence length is FIXED. Right-pad shorter shots with zeros and read the first T outputs; the model is strictly causal so this is exact. For longer shots use the step graph or re-export with --seq-len."
259
- }
260
- },
261
- "dtype": "float32",
262
- "onnx_opset": 17,
263
- "training": {
264
- "epoch": 22,
265
- "val_loss": 1.1129196528345346,
266
- "note": "See docs/TRAINING.md for the full recipe."
267
- }
268
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1/norms.json DELETED
@@ -1,292 +0,0 @@
1
- {
2
- "schema_version": 2,
3
- "note": "Statistics are baked into the shipped ONNX graphs. This file is for inspection and for reproducing the transform outside the graph; it is not required at inference time.",
4
- "actuator_space": "physical",
5
- "std_floor": 1e-06,
6
- "clip_sigma": 20.0,
7
- "provenance": {
8
- "split": "train",
9
- "n_shots": 32731,
10
- "rho_index": 85,
11
- "source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85, random stratified split (split_index.json)",
12
- "note": "Recomputed on the NEW random train split. The source shards carried z-scores from the OLD chronological train split, whose shots overlap our test set. Actuator statistics are winsorised so a corrupted sample cannot set a channel's divisor.",
13
- "inflated_channels": [
14
- "pinj",
15
- "gasc_cal",
16
- "gasd_cal",
17
- "gase_cal"
18
- ],
19
- "actuator_estimator": "winsorised to p1..p99",
20
- "actuator_space": "physical",
21
- "composed_from": [
22
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
23
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
24
- ],
25
- "composition": "z = (x_phys - (m1 + s1*m2)) / (s1*s2), where (m1, s1) is the upstream FPE z-score and (m2, s2) is this model's re-scale onto its own training split"
26
- },
27
- "actuators": {
28
- "names": [
29
- "pinj",
30
- "tinj",
31
- "ech_total",
32
- "f1a",
33
- "f2a",
34
- "f3a",
35
- "f4a",
36
- "f5a",
37
- "f6a",
38
- "f7a",
39
- "f8a",
40
- "f9a",
41
- "f1b",
42
- "f2b",
43
- "f3b",
44
- "f4b",
45
- "f5b",
46
- "f6b",
47
- "f7b",
48
- "f8b",
49
- "f9b",
50
- "ecoila",
51
- "ecoilb",
52
- "gasa_cal",
53
- "gasb_cal",
54
- "gasc_cal",
55
- "gasd_cal",
56
- "gase_cal",
57
- "bt"
58
- ],
59
- "mean": [
60
- 3.838883638381958,
61
- 2.2043209075927734,
62
- 2.6981112957000732,
63
- -1382.3704833984375,
64
- -1229.876708984375,
65
- -592.7352294921875,
66
- 1098.1622314453125,
67
- 1173.57958984375,
68
- -2493.411865234375,
69
- -2367.570556640625,
70
- 996.0214233398438,
71
- -535.8018798828125,
72
- -1373.1888427734375,
73
- -1218.50048828125,
74
- -1005.3848266601562,
75
- 1124.2967529296875,
76
- 1443.536865234375,
77
- -2463.248046875,
78
- -2941.56005859375,
79
- 1431.05615234375,
80
- -214.02586364746094,
81
- -6965.32666015625,
82
- -6876.16455078125,
83
- 15.054444313049316,
84
- 1.386172890663147,
85
- 0.35034820437431335,
86
- 0.528103232383728,
87
- 0.27696067094802856,
88
- -0.971906840801239
89
- ],
90
- "std": [
91
- 3.0613932609558105,
92
- 2.11222505569458,
93
- 6.685519218444824,
94
- 1349.629638671875,
95
- 1248.3497314453125,
96
- 1185.706298828125,
97
- 1368.95458984375,
98
- 1352.103759765625,
99
- 1867.8076171875,
100
- 1999.19970703125,
101
- 1498.948974609375,
102
- 1258.01171875,
103
- 1367.82275390625,
104
- 1316.67724609375,
105
- 1308.8258056640625,
106
- 1519.5994873046875,
107
- 1408.3306884765625,
108
- 1836.4208984375,
109
- 2510.1083984375,
110
- 1718.2965087890625,
111
- 1388.83447265625,
112
- 18940.9453125,
113
- 18723.662109375,
114
- 26.369497299194336,
115
- 3.4090511798858643,
116
- 0.4470684826374054,
117
- 0.654624342918396,
118
- 0.17616958916187286,
119
- 1.6484158039093018
120
- ],
121
- "transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma), applied inside the graph"
122
- },
123
- "targets": {
124
- "ne": {
125
- "mean": 2.7511744499206543,
126
- "std": 1.654153823852539
127
- },
128
- "te_ped": {
129
- "mean": 0.5915626287460327,
130
- "std": 0.43467429280281067
131
- },
132
- "ti_ped": {
133
- "mean": 1.016850233078003,
134
- "std": 0.681096076965332
135
- },
136
- "t_rot_ped": {
137
- "mean": 21.244613647460938,
138
- "std": 16.59148406982422
139
- },
140
- "neped_prmtan": {
141
- "mean": 2.7231285572052,
142
- "std": 1.7005536556243896
143
- },
144
- "teped_prmtan": {
145
- "mean": 0.46375223994255066,
146
- "std": 0.36919456720352173
147
- },
148
- "rho_sym": {
149
- "mean": 0.9757616519927979,
150
- "std": 0.04329206794500351
151
- },
152
- "ne_top_loc": {
153
- "mean": 0.9261865019798279,
154
- "std": 0.049897171556949615
155
- }
156
- },
157
- "hmode": {
158
- "transform": "sigmoid",
159
- "note": "hmode is a logit in the trunk; the graph applies the sigmoid."
160
- },
161
- "stages": {
162
- "note": "The composed actuator statistics above are the product of these two. Shown for traceability; use the composed values.",
163
- "stage1_physical_to_fpe_zscore": {
164
- "mean": [
165
- 2.8111997039100878,
166
- 2.154143940948575,
167
- 2.159654935239209,
168
- -1444.0438445123289,
169
- -1315.1185221229061,
170
- -639.741760304047,
171
- 1172.4978680515835,
172
- 1222.4970107268077,
173
- -2488.8410961768263,
174
- -2491.3739557685253,
175
- 1050.107386405324,
176
- -578.9736547563273,
177
- -1421.0817159358041,
178
- -1285.3967398730092,
179
- -1061.0290851406676,
180
- 1186.4795970820587,
181
- 1460.6822372728345,
182
- -2452.093120847959,
183
- -3071.3132492215186,
184
- 1531.3304960724108,
185
- -262.6728625067526,
186
- -6887.604056684089,
187
- -6768.996463787789,
188
- 14.89178144369171,
189
- 1.9421402622606716,
190
- 0.7508911827356307,
191
- 1.0383906373403984,
192
- 0.3920832239686922,
193
- -1.0310375752078498
194
- ],
195
- "std": [
196
- 194.08418888726106,
197
- 2.3684465859740262,
198
- 5.948083564785035,
199
- 1267.4907621702682,
200
- 1217.4478106828162,
201
- 1249.3915272640536,
202
- 1345.3871181128568,
203
- 1359.1934832307923,
204
- 1887.1891497052302,
205
- 1888.1014577442652,
206
- 1559.9875106371376,
207
- 1287.2118470203372,
208
- 1271.813282654729,
209
- 1259.8644805335082,
210
- 1361.9306367877398,
211
- 1521.172083160852,
212
- 1393.2120473032558,
213
- 1856.723912629122,
214
- 2432.8530409799628,
215
- 1705.6959050005082,
216
- 1421.8036451037203,
217
- 19092.148992270486,
218
- 18858.28389193975,
219
- 27.289184462156058,
220
- 11.092415079529571,
221
- 9.017289768908354,
222
- 12.055982101097918,
223
- 6.498888909025979,
224
- 1.599000778986496
225
- ]
226
- },
227
- "stage2_fpe_zscore_to_model": {
228
- "mean": [
229
- 0.0052950419485569,
230
- 0.02118559367954731,
231
- 0.0905260294675827,
232
- 0.04865782707929611,
233
- 0.0700167864561081,
234
- 0.03762352466583252,
235
- -0.05525219440460205,
236
- -0.03599006310105324,
237
- -0.002421961398795247,
238
- 0.06557027250528336,
239
- -0.03467077016830444,
240
- 0.03353898227214813,
241
- 0.03765711933374405,
242
- 0.05309795215725899,
243
- 0.040856875479221344,
244
- -0.04087827727198601,
245
- -0.012306398712098598,
246
- -0.006007813848555088,
247
- 0.05333370715379715,
248
- -0.05878793075680733,
249
- 0.03421499580144882,
250
- -0.004070908762514591,
251
- -0.00568280229344964,
252
- 0.005960696842521429,
253
- -0.050121404230594635,
254
- -0.04441944137215614,
255
- -0.042326491326093674,
256
- -0.017714189365506172,
257
- 0.036979787051677704
258
- ],
259
- "std": [
260
- 0.015773532912135124,
261
- 0.8918187022209167,
262
- 1.1239787340164185,
263
- 1.0648043155670166,
264
- 1.0253825187683105,
265
- 0.9490270018577576,
266
- 1.0175172090530396,
267
- 0.994783878326416,
268
- 0.9897299408912659,
269
- 1.0588412284851074,
270
- 0.9608724117279053,
271
- 0.9773152470588684,
272
- 1.0754902362823486,
273
- 1.04509437084198,
274
- 0.9610077142715454,
275
- 0.9989661574363708,
276
- 1.0108516216278076,
277
- 0.9890651702880859,
278
- 1.0317550897598267,
279
- 1.007387399673462,
280
- 0.9768117070198059,
281
- 0.9920803308486938,
282
- 0.9928614497184753,
283
- 0.9662984609603882,
284
- 0.30733174085617065,
285
- 0.04957903176546097,
286
- 0.05429871752858162,
287
- 0.02710764855146408,
288
- 1.030903697013855
289
- ]
290
- }
291
- }
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1/provenance.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "exported_utc": "2026-09-03T00:46:24.670692+00:00",
4
- "seed": 1,
5
- "source_checkpoint": "/flare/fusiondl_aesp/fuse_bd_model/fuse20/runs/fuse29r_s1/best_model.pt",
6
- "source_checkpoint_sha256": "a77e8a7359c47e1f6d9a2406fe29fea9214e6110e3a4f5f26371afbaba236394",
7
- "norms_source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json",
8
- "norms_actuator_space": "physical",
9
- "norms_composed_from": [
10
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
11
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
12
- ],
13
- "onnx_opset": 17,
14
- "exporter": "torch.onnx.export (TorchScript, dynamo=False)",
15
- "versions": {
16
- "torch": "2.10.0a0+git449b176",
17
- "python": "3.12.12",
18
- "platform": "Linux-5.14.21-150400.24.235-default-x86_64-with-glibc2.31",
19
- "onnx": "1.22.0",
20
- "onnxruntime": "1.29.0"
21
- },
22
- "artifacts": {
23
- "fuse29_step.onnx": {
24
- "bytes": 45081271,
25
- "sha256": "8780126cca821664426bafdd896a1313846da69ad120b9c591d90dc0cc21249e"
26
- },
27
- "fuse29_seq.onnx": {
28
- "bytes": 45464382,
29
- "sha256": "3469221c38b1006a017506969d2ffd5f9b84a9a34d22b4429184a299c2438f4a"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s2/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 2
14
-
15
- This is seed 2, one of eight independently trained runs. Seed 0 is the champion and the default; this one exists so you can measure spread across training runs. Unless you are doing that, you want seed 0.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 2 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1197 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:27.308435+00:00 |
29
- | Source checkpoint SHA-256 | `d113f84516d9e749…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=2)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s2/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s2/fuse29_seq.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:1fc339449427dfe47ee425eb7ff500887e6a10ae1ef32d90207f2d1e3a828cf3
3
- size 45464382
 
 
 
 
s2/fuse29_step.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:b696b9c645441cde3881ff796aaec6e1927335daba4539095f6b6dee8a5768f4
3
- size 45081271
 
 
 
 
s2/model_config.json DELETED
@@ -1,268 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "model": "fuse29",
4
- "seed": 2,
5
- "description": "29-input Mamba-2 pedestal predictor for DIII-D. Strictly causal, 20 Hz, nine heads at rho_tor = 0.85.",
6
- "architecture": {
7
- "family": "Mamba-2 (structured state-space duality)",
8
- "d_model": 512,
9
- "n_layers": 6,
10
- "d_state": 128,
11
- "d_conv": 4,
12
- "expand": 2,
13
- "headdim": 128,
14
- "nheads": 8,
15
- "ngroups": 2,
16
- "chunk_size": 100,
17
- "d_inner": 1024,
18
- "conv_dim": 1536,
19
- "n_params": 11254425
20
- },
21
- "cadence": {
22
- "hz": 20,
23
- "period_ms": 50.0,
24
- "rho_tor": 0.85
25
- },
26
- "inputs": {
27
- "names": [
28
- "pinj",
29
- "tinj",
30
- "ech_total",
31
- "f1a",
32
- "f2a",
33
- "f3a",
34
- "f4a",
35
- "f5a",
36
- "f6a",
37
- "f7a",
38
- "f8a",
39
- "f9a",
40
- "f1b",
41
- "f2b",
42
- "f3b",
43
- "f4b",
44
- "f5b",
45
- "f6b",
46
- "f7b",
47
- "f8b",
48
- "f9b",
49
- "ecoila",
50
- "ecoilb",
51
- "gasa_cal",
52
- "gasb_cal",
53
- "gasc_cal",
54
- "gasd_cal",
55
- "gase_cal",
56
- "bt"
57
- ],
58
- "n": 29,
59
- "units": {
60
- "pinj": "MW",
61
- "tinj": "N*m",
62
- "ech_total": "MW",
63
- "f1a": "A",
64
- "f2a": "A",
65
- "f3a": "A",
66
- "f4a": "A",
67
- "f5a": "A",
68
- "f6a": "A",
69
- "f7a": "A",
70
- "f8a": "A",
71
- "f9a": "A",
72
- "f1b": "A",
73
- "f2b": "A",
74
- "f3b": "A",
75
- "f4b": "A",
76
- "f5b": "A",
77
- "f6b": "A",
78
- "f7b": "A",
79
- "f8b": "A",
80
- "f9b": "A",
81
- "ecoila": "A",
82
- "ecoilb": "A",
83
- "gasa_cal": "Torr*L/s",
84
- "gasb_cal": "Torr*L/s",
85
- "gasc_cal": "Torr*L/s",
86
- "gasd_cal": "Torr*L/s",
87
- "gase_cal": "Torr*L/s",
88
- "bt": "T"
89
- },
90
- "sources": {
91
- "pinj": "ptdata:bmspinj",
92
- "tinj": "ptdata:bmstinj",
93
- "ech_total": "ptdata:ECHPWR",
94
- "f1a": "ptdata:F1A",
95
- "f2a": "ptdata:F2A",
96
- "f3a": "ptdata:F3A",
97
- "f4a": "ptdata:F4A",
98
- "f5a": "ptdata:F5A",
99
- "f6a": "ptdata:F6A",
100
- "f7a": "ptdata:F7A",
101
- "f8a": "ptdata:F8A",
102
- "f9a": "ptdata:F9A",
103
- "f1b": "ptdata:F1B",
104
- "f2b": "ptdata:F2B",
105
- "f3b": "ptdata:F3B",
106
- "f4b": "ptdata:F4B",
107
- "f5b": "ptdata:F5B",
108
- "f6b": "ptdata:F6B",
109
- "f7b": "ptdata:F7B",
110
- "f8b": "ptdata:F8B",
111
- "f9b": "ptdata:F9B",
112
- "ecoila": "ptdata:ECOILA",
113
- "ecoilb": "ptdata:ECOILB",
114
- "gasa_cal": "tree:NEUTRALS GASFLOW.GASA:FLOW",
115
- "gasb_cal": "tree:NEUTRALS GASFLOW.GASB:FLOW",
116
- "gasc_cal": "tree:NEUTRALS GASFLOW.GASC:FLOW",
117
- "gasd_cal": "tree:NEUTRALS GASFLOW.GASD:FLOW",
118
- "gase_cal": "tree:NEUTRALS GASFLOW.GASE:FLOW",
119
- "bt": "ptdata:bt"
120
- },
121
- "descriptions": {
122
- "pinj": "Neutral beam injected power, all sources.",
123
- "tinj": "Neutral beam injected torque, all sources.",
124
- "ech_total": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
125
- "f1a": "Shaping F-coil F1A current (bank A).",
126
- "f2a": "Shaping F-coil F2A current (bank A).",
127
- "f3a": "Shaping F-coil F3A current (bank A).",
128
- "f4a": "Shaping F-coil F4A current (bank A).",
129
- "f5a": "Shaping F-coil F5A current (bank A).",
130
- "f6a": "Shaping F-coil F6A current (bank A).",
131
- "f7a": "Shaping F-coil F7A current (bank A).",
132
- "f8a": "Shaping F-coil F8A current (bank A).",
133
- "f9a": "Shaping F-coil F9A current (bank A).",
134
- "f1b": "Shaping F-coil F1B current (bank B).",
135
- "f2b": "Shaping F-coil F2B current (bank B).",
136
- "f3b": "Shaping F-coil F3B current (bank B).",
137
- "f4b": "Shaping F-coil F4B current (bank B).",
138
- "f5b": "Shaping F-coil F5B current (bank B).",
139
- "f6b": "Shaping F-coil F6B current (bank B).",
140
- "f7b": "Shaping F-coil F7B current (bank B).",
141
- "f8b": "Shaping F-coil F8B current (bank B).",
142
- "f9b": "Shaping F-coil F9B current (bank B).",
143
- "ecoila": "Ohmic E-coil bank A current.",
144
- "ecoilb": "Ohmic E-coil bank B current.",
145
- "gasa_cal": "Calibrated gas injection flow, valve A.",
146
- "gasb_cal": "Calibrated gas injection flow, valve B.",
147
- "gasc_cal": "Calibrated gas injection flow, valve C.",
148
- "gasd_cal": "Calibrated gas injection flow, valve D.",
149
- "gase_cal": "Calibrated gas injection flow, valve E.",
150
- "bt": "Vacuum toroidal magnetic field (signed)."
151
- },
152
- "space": "raw physical units; the graph applies the z-score",
153
- "note": "Check your units against actuator_ranges.json before trusting any output. A unit error produces confident nonsense rather than an exception."
154
- },
155
- "outputs": {
156
- "names": [
157
- "ne",
158
- "te_ped",
159
- "ti_ped",
160
- "t_rot_ped",
161
- "neped_prmtan",
162
- "teped_prmtan",
163
- "rho_sym",
164
- "ne_top_loc",
165
- "hmode"
166
- ],
167
- "n": 9,
168
- "units": {
169
- "ne": "1e19 m^-3",
170
- "te_ped": "keV",
171
- "ti_ped": "keV",
172
- "t_rot_ped": "krad/s",
173
- "neped_prmtan": "1e19 m^-3",
174
- "teped_prmtan": "keV",
175
- "rho_sym": "rho_tor (dimensionless)",
176
- "ne_top_loc": "rho_tor (dimensionless)",
177
- "hmode": "probability in [0, 1]"
178
- },
179
- "note": "Physical units. hmode is a probability in [0, 1]; the graph applies the sigmoid.",
180
- "hmode_gated": {
181
- "heads": [
182
- "neped_prmtan",
183
- "teped_prmtan",
184
- "rho_sym",
185
- "ne_top_loc"
186
- ],
187
- "indices": [
188
- 4,
189
- 5,
190
- 6,
191
- 7
192
- ],
193
- "threshold": 0.5,
194
- "note": "These four heads were trained only on H-mode rows and are undefined otherwise. The graph does NOT gate them; the consumer must, using the model's own hmode output. See docs/GATING.md."
195
- }
196
- },
197
- "graphs": {
198
- "fuse29_step.onnx": {
199
- "purpose": "real-time, one 50 ms tick per call",
200
- "inputs": {
201
- "actuators": [
202
- "batch",
203
- 29
204
- ],
205
- "conv_state": [
206
- 6,
207
- "batch",
208
- 1536,
209
- 3
210
- ],
211
- "ssm_state": [
212
- 6,
213
- "batch",
214
- 8,
215
- 128,
216
- 128
217
- ]
218
- },
219
- "outputs": {
220
- "predictions": [
221
- "batch",
222
- 9
223
- ],
224
- "conv_state_out": [
225
- 6,
226
- "batch",
227
- 1536,
228
- 3
229
- ],
230
- "ssm_state_out": [
231
- 6,
232
- "batch",
233
- 8,
234
- 128,
235
- 128
236
- ]
237
- },
238
- "initial_state": "all zeros at the start of a shot",
239
- "max_shot_length": "unbounded"
240
- },
241
- "fuse29_seq.onnx": {
242
- "purpose": "offline scoring of a whole shot",
243
- "inputs": {
244
- "actuators": [
245
- "batch",
246
- 256,
247
- 29
248
- ]
249
- },
250
- "outputs": {
251
- "predictions": [
252
- "batch",
253
- 256,
254
- 9
255
- ]
256
- },
257
- "seq_len": 256,
258
- "note": "Sequence length is FIXED. Right-pad shorter shots with zeros and read the first T outputs; the model is strictly causal so this is exact. For longer shots use the step graph or re-export with --seq-len."
259
- }
260
- },
261
- "dtype": "float32",
262
- "onnx_opset": 17,
263
- "training": {
264
- "epoch": 20,
265
- "val_loss": 1.119664316996932,
266
- "note": "See docs/TRAINING.md for the full recipe."
267
- }
268
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s2/norms.json DELETED
@@ -1,292 +0,0 @@
1
- {
2
- "schema_version": 2,
3
- "note": "Statistics are baked into the shipped ONNX graphs. This file is for inspection and for reproducing the transform outside the graph; it is not required at inference time.",
4
- "actuator_space": "physical",
5
- "std_floor": 1e-06,
6
- "clip_sigma": 20.0,
7
- "provenance": {
8
- "split": "train",
9
- "n_shots": 32731,
10
- "rho_index": 85,
11
- "source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85, random stratified split (split_index.json)",
12
- "note": "Recomputed on the NEW random train split. The source shards carried z-scores from the OLD chronological train split, whose shots overlap our test set. Actuator statistics are winsorised so a corrupted sample cannot set a channel's divisor.",
13
- "inflated_channels": [
14
- "pinj",
15
- "gasc_cal",
16
- "gasd_cal",
17
- "gase_cal"
18
- ],
19
- "actuator_estimator": "winsorised to p1..p99",
20
- "actuator_space": "physical",
21
- "composed_from": [
22
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
23
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
24
- ],
25
- "composition": "z = (x_phys - (m1 + s1*m2)) / (s1*s2), where (m1, s1) is the upstream FPE z-score and (m2, s2) is this model's re-scale onto its own training split"
26
- },
27
- "actuators": {
28
- "names": [
29
- "pinj",
30
- "tinj",
31
- "ech_total",
32
- "f1a",
33
- "f2a",
34
- "f3a",
35
- "f4a",
36
- "f5a",
37
- "f6a",
38
- "f7a",
39
- "f8a",
40
- "f9a",
41
- "f1b",
42
- "f2b",
43
- "f3b",
44
- "f4b",
45
- "f5b",
46
- "f6b",
47
- "f7b",
48
- "f8b",
49
- "f9b",
50
- "ecoila",
51
- "ecoilb",
52
- "gasa_cal",
53
- "gasb_cal",
54
- "gasc_cal",
55
- "gasd_cal",
56
- "gase_cal",
57
- "bt"
58
- ],
59
- "mean": [
60
- 3.838883638381958,
61
- 2.2043209075927734,
62
- 2.6981112957000732,
63
- -1382.3704833984375,
64
- -1229.876708984375,
65
- -592.7352294921875,
66
- 1098.1622314453125,
67
- 1173.57958984375,
68
- -2493.411865234375,
69
- -2367.570556640625,
70
- 996.0214233398438,
71
- -535.8018798828125,
72
- -1373.1888427734375,
73
- -1218.50048828125,
74
- -1005.3848266601562,
75
- 1124.2967529296875,
76
- 1443.536865234375,
77
- -2463.248046875,
78
- -2941.56005859375,
79
- 1431.05615234375,
80
- -214.02586364746094,
81
- -6965.32666015625,
82
- -6876.16455078125,
83
- 15.054444313049316,
84
- 1.386172890663147,
85
- 0.35034820437431335,
86
- 0.528103232383728,
87
- 0.27696067094802856,
88
- -0.971906840801239
89
- ],
90
- "std": [
91
- 3.0613932609558105,
92
- 2.11222505569458,
93
- 6.685519218444824,
94
- 1349.629638671875,
95
- 1248.3497314453125,
96
- 1185.706298828125,
97
- 1368.95458984375,
98
- 1352.103759765625,
99
- 1867.8076171875,
100
- 1999.19970703125,
101
- 1498.948974609375,
102
- 1258.01171875,
103
- 1367.82275390625,
104
- 1316.67724609375,
105
- 1308.8258056640625,
106
- 1519.5994873046875,
107
- 1408.3306884765625,
108
- 1836.4208984375,
109
- 2510.1083984375,
110
- 1718.2965087890625,
111
- 1388.83447265625,
112
- 18940.9453125,
113
- 18723.662109375,
114
- 26.369497299194336,
115
- 3.4090511798858643,
116
- 0.4470684826374054,
117
- 0.654624342918396,
118
- 0.17616958916187286,
119
- 1.6484158039093018
120
- ],
121
- "transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma), applied inside the graph"
122
- },
123
- "targets": {
124
- "ne": {
125
- "mean": 2.7511744499206543,
126
- "std": 1.654153823852539
127
- },
128
- "te_ped": {
129
- "mean": 0.5915626287460327,
130
- "std": 0.43467429280281067
131
- },
132
- "ti_ped": {
133
- "mean": 1.016850233078003,
134
- "std": 0.681096076965332
135
- },
136
- "t_rot_ped": {
137
- "mean": 21.244613647460938,
138
- "std": 16.59148406982422
139
- },
140
- "neped_prmtan": {
141
- "mean": 2.7231285572052,
142
- "std": 1.7005536556243896
143
- },
144
- "teped_prmtan": {
145
- "mean": 0.46375223994255066,
146
- "std": 0.36919456720352173
147
- },
148
- "rho_sym": {
149
- "mean": 0.9757616519927979,
150
- "std": 0.04329206794500351
151
- },
152
- "ne_top_loc": {
153
- "mean": 0.9261865019798279,
154
- "std": 0.049897171556949615
155
- }
156
- },
157
- "hmode": {
158
- "transform": "sigmoid",
159
- "note": "hmode is a logit in the trunk; the graph applies the sigmoid."
160
- },
161
- "stages": {
162
- "note": "The composed actuator statistics above are the product of these two. Shown for traceability; use the composed values.",
163
- "stage1_physical_to_fpe_zscore": {
164
- "mean": [
165
- 2.8111997039100878,
166
- 2.154143940948575,
167
- 2.159654935239209,
168
- -1444.0438445123289,
169
- -1315.1185221229061,
170
- -639.741760304047,
171
- 1172.4978680515835,
172
- 1222.4970107268077,
173
- -2488.8410961768263,
174
- -2491.3739557685253,
175
- 1050.107386405324,
176
- -578.9736547563273,
177
- -1421.0817159358041,
178
- -1285.3967398730092,
179
- -1061.0290851406676,
180
- 1186.4795970820587,
181
- 1460.6822372728345,
182
- -2452.093120847959,
183
- -3071.3132492215186,
184
- 1531.3304960724108,
185
- -262.6728625067526,
186
- -6887.604056684089,
187
- -6768.996463787789,
188
- 14.89178144369171,
189
- 1.9421402622606716,
190
- 0.7508911827356307,
191
- 1.0383906373403984,
192
- 0.3920832239686922,
193
- -1.0310375752078498
194
- ],
195
- "std": [
196
- 194.08418888726106,
197
- 2.3684465859740262,
198
- 5.948083564785035,
199
- 1267.4907621702682,
200
- 1217.4478106828162,
201
- 1249.3915272640536,
202
- 1345.3871181128568,
203
- 1359.1934832307923,
204
- 1887.1891497052302,
205
- 1888.1014577442652,
206
- 1559.9875106371376,
207
- 1287.2118470203372,
208
- 1271.813282654729,
209
- 1259.8644805335082,
210
- 1361.9306367877398,
211
- 1521.172083160852,
212
- 1393.2120473032558,
213
- 1856.723912629122,
214
- 2432.8530409799628,
215
- 1705.6959050005082,
216
- 1421.8036451037203,
217
- 19092.148992270486,
218
- 18858.28389193975,
219
- 27.289184462156058,
220
- 11.092415079529571,
221
- 9.017289768908354,
222
- 12.055982101097918,
223
- 6.498888909025979,
224
- 1.599000778986496
225
- ]
226
- },
227
- "stage2_fpe_zscore_to_model": {
228
- "mean": [
229
- 0.0052950419485569,
230
- 0.02118559367954731,
231
- 0.0905260294675827,
232
- 0.04865782707929611,
233
- 0.0700167864561081,
234
- 0.03762352466583252,
235
- -0.05525219440460205,
236
- -0.03599006310105324,
237
- -0.002421961398795247,
238
- 0.06557027250528336,
239
- -0.03467077016830444,
240
- 0.03353898227214813,
241
- 0.03765711933374405,
242
- 0.05309795215725899,
243
- 0.040856875479221344,
244
- -0.04087827727198601,
245
- -0.012306398712098598,
246
- -0.006007813848555088,
247
- 0.05333370715379715,
248
- -0.05878793075680733,
249
- 0.03421499580144882,
250
- -0.004070908762514591,
251
- -0.00568280229344964,
252
- 0.005960696842521429,
253
- -0.050121404230594635,
254
- -0.04441944137215614,
255
- -0.042326491326093674,
256
- -0.017714189365506172,
257
- 0.036979787051677704
258
- ],
259
- "std": [
260
- 0.015773532912135124,
261
- 0.8918187022209167,
262
- 1.1239787340164185,
263
- 1.0648043155670166,
264
- 1.0253825187683105,
265
- 0.9490270018577576,
266
- 1.0175172090530396,
267
- 0.994783878326416,
268
- 0.9897299408912659,
269
- 1.0588412284851074,
270
- 0.9608724117279053,
271
- 0.9773152470588684,
272
- 1.0754902362823486,
273
- 1.04509437084198,
274
- 0.9610077142715454,
275
- 0.9989661574363708,
276
- 1.0108516216278076,
277
- 0.9890651702880859,
278
- 1.0317550897598267,
279
- 1.007387399673462,
280
- 0.9768117070198059,
281
- 0.9920803308486938,
282
- 0.9928614497184753,
283
- 0.9662984609603882,
284
- 0.30733174085617065,
285
- 0.04957903176546097,
286
- 0.05429871752858162,
287
- 0.02710764855146408,
288
- 1.030903697013855
289
- ]
290
- }
291
- }
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s2/provenance.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "exported_utc": "2026-09-03T00:46:27.308435+00:00",
4
- "seed": 2,
5
- "source_checkpoint": "/flare/fusiondl_aesp/fuse_bd_model/fuse20/runs/fuse29r_s2/best_model.pt",
6
- "source_checkpoint_sha256": "d113f84516d9e749eea611ebc53086e170a251ba50ec4f60ec69bfc5d82d92bf",
7
- "norms_source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json",
8
- "norms_actuator_space": "physical",
9
- "norms_composed_from": [
10
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
11
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
12
- ],
13
- "onnx_opset": 17,
14
- "exporter": "torch.onnx.export (TorchScript, dynamo=False)",
15
- "versions": {
16
- "torch": "2.10.0a0+git449b176",
17
- "python": "3.12.12",
18
- "platform": "Linux-5.14.21-150400.24.235-default-x86_64-with-glibc2.31",
19
- "onnx": "1.22.0",
20
- "onnxruntime": "1.29.0"
21
- },
22
- "artifacts": {
23
- "fuse29_step.onnx": {
24
- "bytes": 45081271,
25
- "sha256": "b696b9c645441cde3881ff796aaec6e1927335daba4539095f6b6dee8a5768f4"
26
- },
27
- "fuse29_seq.onnx": {
28
- "bytes": 45464382,
29
- "sha256": "1fc339449427dfe47ee425eb7ff500887e6a10ae1ef32d90207f2d1e3a828cf3"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 3
14
-
15
- This is seed 3, one of eight independently trained runs. Seed 0 is the champion and the default; this one exists so you can measure spread across training runs. Unless you are doing that, you want seed 0.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 3 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1190 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:29.898835+00:00 |
29
- | Source checkpoint SHA-256 | `ec8986c56b48bf90…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=3)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3/fuse29_seq.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:ab580c091de0471edc8454085dcda9c88650e4995be5c2ec6bd7f8b1c87d7786
3
- size 45464382
 
 
 
 
s3/fuse29_step.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f2b80d7f732cef7a21eb21e606cf4a3e63aa4a91a9ff6dde789d88e07fcd5418
3
- size 45081271
 
 
 
 
s3/model_config.json DELETED
@@ -1,268 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "model": "fuse29",
4
- "seed": 3,
5
- "description": "29-input Mamba-2 pedestal predictor for DIII-D. Strictly causal, 20 Hz, nine heads at rho_tor = 0.85.",
6
- "architecture": {
7
- "family": "Mamba-2 (structured state-space duality)",
8
- "d_model": 512,
9
- "n_layers": 6,
10
- "d_state": 128,
11
- "d_conv": 4,
12
- "expand": 2,
13
- "headdim": 128,
14
- "nheads": 8,
15
- "ngroups": 2,
16
- "chunk_size": 100,
17
- "d_inner": 1024,
18
- "conv_dim": 1536,
19
- "n_params": 11254425
20
- },
21
- "cadence": {
22
- "hz": 20,
23
- "period_ms": 50.0,
24
- "rho_tor": 0.85
25
- },
26
- "inputs": {
27
- "names": [
28
- "pinj",
29
- "tinj",
30
- "ech_total",
31
- "f1a",
32
- "f2a",
33
- "f3a",
34
- "f4a",
35
- "f5a",
36
- "f6a",
37
- "f7a",
38
- "f8a",
39
- "f9a",
40
- "f1b",
41
- "f2b",
42
- "f3b",
43
- "f4b",
44
- "f5b",
45
- "f6b",
46
- "f7b",
47
- "f8b",
48
- "f9b",
49
- "ecoila",
50
- "ecoilb",
51
- "gasa_cal",
52
- "gasb_cal",
53
- "gasc_cal",
54
- "gasd_cal",
55
- "gase_cal",
56
- "bt"
57
- ],
58
- "n": 29,
59
- "units": {
60
- "pinj": "MW",
61
- "tinj": "N*m",
62
- "ech_total": "MW",
63
- "f1a": "A",
64
- "f2a": "A",
65
- "f3a": "A",
66
- "f4a": "A",
67
- "f5a": "A",
68
- "f6a": "A",
69
- "f7a": "A",
70
- "f8a": "A",
71
- "f9a": "A",
72
- "f1b": "A",
73
- "f2b": "A",
74
- "f3b": "A",
75
- "f4b": "A",
76
- "f5b": "A",
77
- "f6b": "A",
78
- "f7b": "A",
79
- "f8b": "A",
80
- "f9b": "A",
81
- "ecoila": "A",
82
- "ecoilb": "A",
83
- "gasa_cal": "Torr*L/s",
84
- "gasb_cal": "Torr*L/s",
85
- "gasc_cal": "Torr*L/s",
86
- "gasd_cal": "Torr*L/s",
87
- "gase_cal": "Torr*L/s",
88
- "bt": "T"
89
- },
90
- "sources": {
91
- "pinj": "ptdata:bmspinj",
92
- "tinj": "ptdata:bmstinj",
93
- "ech_total": "ptdata:ECHPWR",
94
- "f1a": "ptdata:F1A",
95
- "f2a": "ptdata:F2A",
96
- "f3a": "ptdata:F3A",
97
- "f4a": "ptdata:F4A",
98
- "f5a": "ptdata:F5A",
99
- "f6a": "ptdata:F6A",
100
- "f7a": "ptdata:F7A",
101
- "f8a": "ptdata:F8A",
102
- "f9a": "ptdata:F9A",
103
- "f1b": "ptdata:F1B",
104
- "f2b": "ptdata:F2B",
105
- "f3b": "ptdata:F3B",
106
- "f4b": "ptdata:F4B",
107
- "f5b": "ptdata:F5B",
108
- "f6b": "ptdata:F6B",
109
- "f7b": "ptdata:F7B",
110
- "f8b": "ptdata:F8B",
111
- "f9b": "ptdata:F9B",
112
- "ecoila": "ptdata:ECOILA",
113
- "ecoilb": "ptdata:ECOILB",
114
- "gasa_cal": "tree:NEUTRALS GASFLOW.GASA:FLOW",
115
- "gasb_cal": "tree:NEUTRALS GASFLOW.GASB:FLOW",
116
- "gasc_cal": "tree:NEUTRALS GASFLOW.GASC:FLOW",
117
- "gasd_cal": "tree:NEUTRALS GASFLOW.GASD:FLOW",
118
- "gase_cal": "tree:NEUTRALS GASFLOW.GASE:FLOW",
119
- "bt": "ptdata:bt"
120
- },
121
- "descriptions": {
122
- "pinj": "Neutral beam injected power, all sources.",
123
- "tinj": "Neutral beam injected torque, all sources.",
124
- "ech_total": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
125
- "f1a": "Shaping F-coil F1A current (bank A).",
126
- "f2a": "Shaping F-coil F2A current (bank A).",
127
- "f3a": "Shaping F-coil F3A current (bank A).",
128
- "f4a": "Shaping F-coil F4A current (bank A).",
129
- "f5a": "Shaping F-coil F5A current (bank A).",
130
- "f6a": "Shaping F-coil F6A current (bank A).",
131
- "f7a": "Shaping F-coil F7A current (bank A).",
132
- "f8a": "Shaping F-coil F8A current (bank A).",
133
- "f9a": "Shaping F-coil F9A current (bank A).",
134
- "f1b": "Shaping F-coil F1B current (bank B).",
135
- "f2b": "Shaping F-coil F2B current (bank B).",
136
- "f3b": "Shaping F-coil F3B current (bank B).",
137
- "f4b": "Shaping F-coil F4B current (bank B).",
138
- "f5b": "Shaping F-coil F5B current (bank B).",
139
- "f6b": "Shaping F-coil F6B current (bank B).",
140
- "f7b": "Shaping F-coil F7B current (bank B).",
141
- "f8b": "Shaping F-coil F8B current (bank B).",
142
- "f9b": "Shaping F-coil F9B current (bank B).",
143
- "ecoila": "Ohmic E-coil bank A current.",
144
- "ecoilb": "Ohmic E-coil bank B current.",
145
- "gasa_cal": "Calibrated gas injection flow, valve A.",
146
- "gasb_cal": "Calibrated gas injection flow, valve B.",
147
- "gasc_cal": "Calibrated gas injection flow, valve C.",
148
- "gasd_cal": "Calibrated gas injection flow, valve D.",
149
- "gase_cal": "Calibrated gas injection flow, valve E.",
150
- "bt": "Vacuum toroidal magnetic field (signed)."
151
- },
152
- "space": "raw physical units; the graph applies the z-score",
153
- "note": "Check your units against actuator_ranges.json before trusting any output. A unit error produces confident nonsense rather than an exception."
154
- },
155
- "outputs": {
156
- "names": [
157
- "ne",
158
- "te_ped",
159
- "ti_ped",
160
- "t_rot_ped",
161
- "neped_prmtan",
162
- "teped_prmtan",
163
- "rho_sym",
164
- "ne_top_loc",
165
- "hmode"
166
- ],
167
- "n": 9,
168
- "units": {
169
- "ne": "1e19 m^-3",
170
- "te_ped": "keV",
171
- "ti_ped": "keV",
172
- "t_rot_ped": "krad/s",
173
- "neped_prmtan": "1e19 m^-3",
174
- "teped_prmtan": "keV",
175
- "rho_sym": "rho_tor (dimensionless)",
176
- "ne_top_loc": "rho_tor (dimensionless)",
177
- "hmode": "probability in [0, 1]"
178
- },
179
- "note": "Physical units. hmode is a probability in [0, 1]; the graph applies the sigmoid.",
180
- "hmode_gated": {
181
- "heads": [
182
- "neped_prmtan",
183
- "teped_prmtan",
184
- "rho_sym",
185
- "ne_top_loc"
186
- ],
187
- "indices": [
188
- 4,
189
- 5,
190
- 6,
191
- 7
192
- ],
193
- "threshold": 0.5,
194
- "note": "These four heads were trained only on H-mode rows and are undefined otherwise. The graph does NOT gate them; the consumer must, using the model's own hmode output. See docs/GATING.md."
195
- }
196
- },
197
- "graphs": {
198
- "fuse29_step.onnx": {
199
- "purpose": "real-time, one 50 ms tick per call",
200
- "inputs": {
201
- "actuators": [
202
- "batch",
203
- 29
204
- ],
205
- "conv_state": [
206
- 6,
207
- "batch",
208
- 1536,
209
- 3
210
- ],
211
- "ssm_state": [
212
- 6,
213
- "batch",
214
- 8,
215
- 128,
216
- 128
217
- ]
218
- },
219
- "outputs": {
220
- "predictions": [
221
- "batch",
222
- 9
223
- ],
224
- "conv_state_out": [
225
- 6,
226
- "batch",
227
- 1536,
228
- 3
229
- ],
230
- "ssm_state_out": [
231
- 6,
232
- "batch",
233
- 8,
234
- 128,
235
- 128
236
- ]
237
- },
238
- "initial_state": "all zeros at the start of a shot",
239
- "max_shot_length": "unbounded"
240
- },
241
- "fuse29_seq.onnx": {
242
- "purpose": "offline scoring of a whole shot",
243
- "inputs": {
244
- "actuators": [
245
- "batch",
246
- 256,
247
- 29
248
- ]
249
- },
250
- "outputs": {
251
- "predictions": [
252
- "batch",
253
- 256,
254
- 9
255
- ]
256
- },
257
- "seq_len": 256,
258
- "note": "Sequence length is FIXED. Right-pad shorter shots with zeros and read the first T outputs; the model is strictly causal so this is exact. For longer shots use the step graph or re-export with --seq-len."
259
- }
260
- },
261
- "dtype": "float32",
262
- "onnx_opset": 17,
263
- "training": {
264
- "epoch": 20,
265
- "val_loss": 1.1190400626510382,
266
- "note": "See docs/TRAINING.md for the full recipe."
267
- }
268
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3/norms.json DELETED
@@ -1,292 +0,0 @@
1
- {
2
- "schema_version": 2,
3
- "note": "Statistics are baked into the shipped ONNX graphs. This file is for inspection and for reproducing the transform outside the graph; it is not required at inference time.",
4
- "actuator_space": "physical",
5
- "std_floor": 1e-06,
6
- "clip_sigma": 20.0,
7
- "provenance": {
8
- "split": "train",
9
- "n_shots": 32731,
10
- "rho_index": 85,
11
- "source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85, random stratified split (split_index.json)",
12
- "note": "Recomputed on the NEW random train split. The source shards carried z-scores from the OLD chronological train split, whose shots overlap our test set. Actuator statistics are winsorised so a corrupted sample cannot set a channel's divisor.",
13
- "inflated_channels": [
14
- "pinj",
15
- "gasc_cal",
16
- "gasd_cal",
17
- "gase_cal"
18
- ],
19
- "actuator_estimator": "winsorised to p1..p99",
20
- "actuator_space": "physical",
21
- "composed_from": [
22
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
23
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
24
- ],
25
- "composition": "z = (x_phys - (m1 + s1*m2)) / (s1*s2), where (m1, s1) is the upstream FPE z-score and (m2, s2) is this model's re-scale onto its own training split"
26
- },
27
- "actuators": {
28
- "names": [
29
- "pinj",
30
- "tinj",
31
- "ech_total",
32
- "f1a",
33
- "f2a",
34
- "f3a",
35
- "f4a",
36
- "f5a",
37
- "f6a",
38
- "f7a",
39
- "f8a",
40
- "f9a",
41
- "f1b",
42
- "f2b",
43
- "f3b",
44
- "f4b",
45
- "f5b",
46
- "f6b",
47
- "f7b",
48
- "f8b",
49
- "f9b",
50
- "ecoila",
51
- "ecoilb",
52
- "gasa_cal",
53
- "gasb_cal",
54
- "gasc_cal",
55
- "gasd_cal",
56
- "gase_cal",
57
- "bt"
58
- ],
59
- "mean": [
60
- 3.838883638381958,
61
- 2.2043209075927734,
62
- 2.6981112957000732,
63
- -1382.3704833984375,
64
- -1229.876708984375,
65
- -592.7352294921875,
66
- 1098.1622314453125,
67
- 1173.57958984375,
68
- -2493.411865234375,
69
- -2367.570556640625,
70
- 996.0214233398438,
71
- -535.8018798828125,
72
- -1373.1888427734375,
73
- -1218.50048828125,
74
- -1005.3848266601562,
75
- 1124.2967529296875,
76
- 1443.536865234375,
77
- -2463.248046875,
78
- -2941.56005859375,
79
- 1431.05615234375,
80
- -214.02586364746094,
81
- -6965.32666015625,
82
- -6876.16455078125,
83
- 15.054444313049316,
84
- 1.386172890663147,
85
- 0.35034820437431335,
86
- 0.528103232383728,
87
- 0.27696067094802856,
88
- -0.971906840801239
89
- ],
90
- "std": [
91
- 3.0613932609558105,
92
- 2.11222505569458,
93
- 6.685519218444824,
94
- 1349.629638671875,
95
- 1248.3497314453125,
96
- 1185.706298828125,
97
- 1368.95458984375,
98
- 1352.103759765625,
99
- 1867.8076171875,
100
- 1999.19970703125,
101
- 1498.948974609375,
102
- 1258.01171875,
103
- 1367.82275390625,
104
- 1316.67724609375,
105
- 1308.8258056640625,
106
- 1519.5994873046875,
107
- 1408.3306884765625,
108
- 1836.4208984375,
109
- 2510.1083984375,
110
- 1718.2965087890625,
111
- 1388.83447265625,
112
- 18940.9453125,
113
- 18723.662109375,
114
- 26.369497299194336,
115
- 3.4090511798858643,
116
- 0.4470684826374054,
117
- 0.654624342918396,
118
- 0.17616958916187286,
119
- 1.6484158039093018
120
- ],
121
- "transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma), applied inside the graph"
122
- },
123
- "targets": {
124
- "ne": {
125
- "mean": 2.7511744499206543,
126
- "std": 1.654153823852539
127
- },
128
- "te_ped": {
129
- "mean": 0.5915626287460327,
130
- "std": 0.43467429280281067
131
- },
132
- "ti_ped": {
133
- "mean": 1.016850233078003,
134
- "std": 0.681096076965332
135
- },
136
- "t_rot_ped": {
137
- "mean": 21.244613647460938,
138
- "std": 16.59148406982422
139
- },
140
- "neped_prmtan": {
141
- "mean": 2.7231285572052,
142
- "std": 1.7005536556243896
143
- },
144
- "teped_prmtan": {
145
- "mean": 0.46375223994255066,
146
- "std": 0.36919456720352173
147
- },
148
- "rho_sym": {
149
- "mean": 0.9757616519927979,
150
- "std": 0.04329206794500351
151
- },
152
- "ne_top_loc": {
153
- "mean": 0.9261865019798279,
154
- "std": 0.049897171556949615
155
- }
156
- },
157
- "hmode": {
158
- "transform": "sigmoid",
159
- "note": "hmode is a logit in the trunk; the graph applies the sigmoid."
160
- },
161
- "stages": {
162
- "note": "The composed actuator statistics above are the product of these two. Shown for traceability; use the composed values.",
163
- "stage1_physical_to_fpe_zscore": {
164
- "mean": [
165
- 2.8111997039100878,
166
- 2.154143940948575,
167
- 2.159654935239209,
168
- -1444.0438445123289,
169
- -1315.1185221229061,
170
- -639.741760304047,
171
- 1172.4978680515835,
172
- 1222.4970107268077,
173
- -2488.8410961768263,
174
- -2491.3739557685253,
175
- 1050.107386405324,
176
- -578.9736547563273,
177
- -1421.0817159358041,
178
- -1285.3967398730092,
179
- -1061.0290851406676,
180
- 1186.4795970820587,
181
- 1460.6822372728345,
182
- -2452.093120847959,
183
- -3071.3132492215186,
184
- 1531.3304960724108,
185
- -262.6728625067526,
186
- -6887.604056684089,
187
- -6768.996463787789,
188
- 14.89178144369171,
189
- 1.9421402622606716,
190
- 0.7508911827356307,
191
- 1.0383906373403984,
192
- 0.3920832239686922,
193
- -1.0310375752078498
194
- ],
195
- "std": [
196
- 194.08418888726106,
197
- 2.3684465859740262,
198
- 5.948083564785035,
199
- 1267.4907621702682,
200
- 1217.4478106828162,
201
- 1249.3915272640536,
202
- 1345.3871181128568,
203
- 1359.1934832307923,
204
- 1887.1891497052302,
205
- 1888.1014577442652,
206
- 1559.9875106371376,
207
- 1287.2118470203372,
208
- 1271.813282654729,
209
- 1259.8644805335082,
210
- 1361.9306367877398,
211
- 1521.172083160852,
212
- 1393.2120473032558,
213
- 1856.723912629122,
214
- 2432.8530409799628,
215
- 1705.6959050005082,
216
- 1421.8036451037203,
217
- 19092.148992270486,
218
- 18858.28389193975,
219
- 27.289184462156058,
220
- 11.092415079529571,
221
- 9.017289768908354,
222
- 12.055982101097918,
223
- 6.498888909025979,
224
- 1.599000778986496
225
- ]
226
- },
227
- "stage2_fpe_zscore_to_model": {
228
- "mean": [
229
- 0.0052950419485569,
230
- 0.02118559367954731,
231
- 0.0905260294675827,
232
- 0.04865782707929611,
233
- 0.0700167864561081,
234
- 0.03762352466583252,
235
- -0.05525219440460205,
236
- -0.03599006310105324,
237
- -0.002421961398795247,
238
- 0.06557027250528336,
239
- -0.03467077016830444,
240
- 0.03353898227214813,
241
- 0.03765711933374405,
242
- 0.05309795215725899,
243
- 0.040856875479221344,
244
- -0.04087827727198601,
245
- -0.012306398712098598,
246
- -0.006007813848555088,
247
- 0.05333370715379715,
248
- -0.05878793075680733,
249
- 0.03421499580144882,
250
- -0.004070908762514591,
251
- -0.00568280229344964,
252
- 0.005960696842521429,
253
- -0.050121404230594635,
254
- -0.04441944137215614,
255
- -0.042326491326093674,
256
- -0.017714189365506172,
257
- 0.036979787051677704
258
- ],
259
- "std": [
260
- 0.015773532912135124,
261
- 0.8918187022209167,
262
- 1.1239787340164185,
263
- 1.0648043155670166,
264
- 1.0253825187683105,
265
- 0.9490270018577576,
266
- 1.0175172090530396,
267
- 0.994783878326416,
268
- 0.9897299408912659,
269
- 1.0588412284851074,
270
- 0.9608724117279053,
271
- 0.9773152470588684,
272
- 1.0754902362823486,
273
- 1.04509437084198,
274
- 0.9610077142715454,
275
- 0.9989661574363708,
276
- 1.0108516216278076,
277
- 0.9890651702880859,
278
- 1.0317550897598267,
279
- 1.007387399673462,
280
- 0.9768117070198059,
281
- 0.9920803308486938,
282
- 0.9928614497184753,
283
- 0.9662984609603882,
284
- 0.30733174085617065,
285
- 0.04957903176546097,
286
- 0.05429871752858162,
287
- 0.02710764855146408,
288
- 1.030903697013855
289
- ]
290
- }
291
- }
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3/provenance.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "exported_utc": "2026-09-03T00:46:29.898835+00:00",
4
- "seed": 3,
5
- "source_checkpoint": "/flare/fusiondl_aesp/fuse_bd_model/fuse20/runs/fuse29r_s3/best_model.pt",
6
- "source_checkpoint_sha256": "ec8986c56b48bf90ca14a2312d6024ad1541bb04baa64889e54d104ae914b914",
7
- "norms_source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json",
8
- "norms_actuator_space": "physical",
9
- "norms_composed_from": [
10
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
11
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
12
- ],
13
- "onnx_opset": 17,
14
- "exporter": "torch.onnx.export (TorchScript, dynamo=False)",
15
- "versions": {
16
- "torch": "2.10.0a0+git449b176",
17
- "python": "3.12.12",
18
- "platform": "Linux-5.14.21-150400.24.235-default-x86_64-with-glibc2.31",
19
- "onnx": "1.22.0",
20
- "onnxruntime": "1.29.0"
21
- },
22
- "artifacts": {
23
- "fuse29_step.onnx": {
24
- "bytes": 45081271,
25
- "sha256": "f2b80d7f732cef7a21eb21e606cf4a3e63aa4a91a9ff6dde789d88e07fcd5418"
26
- },
27
- "fuse29_seq.onnx": {
28
- "bytes": 45464382,
29
- "sha256": "ab580c091de0471edc8454085dcda9c88650e4995be5c2ec6bd7f8b1c87d7786"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 4
14
-
15
- This is seed 4, one of eight independently trained runs. Seed 0 is the champion and the default; this one exists so you can measure spread across training runs. Unless you are doing that, you want seed 0.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 4 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1321 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:32.537210+00:00 |
29
- | Source checkpoint SHA-256 | `d36f1364948aded5…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=4)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4/fuse29_seq.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:2348d2e1930835363dfade74cfc47d46c88e0691693f60e85cffc2d459ecf774
3
- size 45464382
 
 
 
 
s4/fuse29_step.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:7c74bffd61e2c69cae1b8b182fbde8897ce971901d83beded7f6a2e0c919fedc
3
- size 45081271
 
 
 
 
s4/model_config.json DELETED
@@ -1,268 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "model": "fuse29",
4
- "seed": 4,
5
- "description": "29-input Mamba-2 pedestal predictor for DIII-D. Strictly causal, 20 Hz, nine heads at rho_tor = 0.85.",
6
- "architecture": {
7
- "family": "Mamba-2 (structured state-space duality)",
8
- "d_model": 512,
9
- "n_layers": 6,
10
- "d_state": 128,
11
- "d_conv": 4,
12
- "expand": 2,
13
- "headdim": 128,
14
- "nheads": 8,
15
- "ngroups": 2,
16
- "chunk_size": 100,
17
- "d_inner": 1024,
18
- "conv_dim": 1536,
19
- "n_params": 11254425
20
- },
21
- "cadence": {
22
- "hz": 20,
23
- "period_ms": 50.0,
24
- "rho_tor": 0.85
25
- },
26
- "inputs": {
27
- "names": [
28
- "pinj",
29
- "tinj",
30
- "ech_total",
31
- "f1a",
32
- "f2a",
33
- "f3a",
34
- "f4a",
35
- "f5a",
36
- "f6a",
37
- "f7a",
38
- "f8a",
39
- "f9a",
40
- "f1b",
41
- "f2b",
42
- "f3b",
43
- "f4b",
44
- "f5b",
45
- "f6b",
46
- "f7b",
47
- "f8b",
48
- "f9b",
49
- "ecoila",
50
- "ecoilb",
51
- "gasa_cal",
52
- "gasb_cal",
53
- "gasc_cal",
54
- "gasd_cal",
55
- "gase_cal",
56
- "bt"
57
- ],
58
- "n": 29,
59
- "units": {
60
- "pinj": "MW",
61
- "tinj": "N*m",
62
- "ech_total": "MW",
63
- "f1a": "A",
64
- "f2a": "A",
65
- "f3a": "A",
66
- "f4a": "A",
67
- "f5a": "A",
68
- "f6a": "A",
69
- "f7a": "A",
70
- "f8a": "A",
71
- "f9a": "A",
72
- "f1b": "A",
73
- "f2b": "A",
74
- "f3b": "A",
75
- "f4b": "A",
76
- "f5b": "A",
77
- "f6b": "A",
78
- "f7b": "A",
79
- "f8b": "A",
80
- "f9b": "A",
81
- "ecoila": "A",
82
- "ecoilb": "A",
83
- "gasa_cal": "Torr*L/s",
84
- "gasb_cal": "Torr*L/s",
85
- "gasc_cal": "Torr*L/s",
86
- "gasd_cal": "Torr*L/s",
87
- "gase_cal": "Torr*L/s",
88
- "bt": "T"
89
- },
90
- "sources": {
91
- "pinj": "ptdata:bmspinj",
92
- "tinj": "ptdata:bmstinj",
93
- "ech_total": "ptdata:ECHPWR",
94
- "f1a": "ptdata:F1A",
95
- "f2a": "ptdata:F2A",
96
- "f3a": "ptdata:F3A",
97
- "f4a": "ptdata:F4A",
98
- "f5a": "ptdata:F5A",
99
- "f6a": "ptdata:F6A",
100
- "f7a": "ptdata:F7A",
101
- "f8a": "ptdata:F8A",
102
- "f9a": "ptdata:F9A",
103
- "f1b": "ptdata:F1B",
104
- "f2b": "ptdata:F2B",
105
- "f3b": "ptdata:F3B",
106
- "f4b": "ptdata:F4B",
107
- "f5b": "ptdata:F5B",
108
- "f6b": "ptdata:F6B",
109
- "f7b": "ptdata:F7B",
110
- "f8b": "ptdata:F8B",
111
- "f9b": "ptdata:F9B",
112
- "ecoila": "ptdata:ECOILA",
113
- "ecoilb": "ptdata:ECOILB",
114
- "gasa_cal": "tree:NEUTRALS GASFLOW.GASA:FLOW",
115
- "gasb_cal": "tree:NEUTRALS GASFLOW.GASB:FLOW",
116
- "gasc_cal": "tree:NEUTRALS GASFLOW.GASC:FLOW",
117
- "gasd_cal": "tree:NEUTRALS GASFLOW.GASD:FLOW",
118
- "gase_cal": "tree:NEUTRALS GASFLOW.GASE:FLOW",
119
- "bt": "ptdata:bt"
120
- },
121
- "descriptions": {
122
- "pinj": "Neutral beam injected power, all sources.",
123
- "tinj": "Neutral beam injected torque, all sources.",
124
- "ech_total": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
125
- "f1a": "Shaping F-coil F1A current (bank A).",
126
- "f2a": "Shaping F-coil F2A current (bank A).",
127
- "f3a": "Shaping F-coil F3A current (bank A).",
128
- "f4a": "Shaping F-coil F4A current (bank A).",
129
- "f5a": "Shaping F-coil F5A current (bank A).",
130
- "f6a": "Shaping F-coil F6A current (bank A).",
131
- "f7a": "Shaping F-coil F7A current (bank A).",
132
- "f8a": "Shaping F-coil F8A current (bank A).",
133
- "f9a": "Shaping F-coil F9A current (bank A).",
134
- "f1b": "Shaping F-coil F1B current (bank B).",
135
- "f2b": "Shaping F-coil F2B current (bank B).",
136
- "f3b": "Shaping F-coil F3B current (bank B).",
137
- "f4b": "Shaping F-coil F4B current (bank B).",
138
- "f5b": "Shaping F-coil F5B current (bank B).",
139
- "f6b": "Shaping F-coil F6B current (bank B).",
140
- "f7b": "Shaping F-coil F7B current (bank B).",
141
- "f8b": "Shaping F-coil F8B current (bank B).",
142
- "f9b": "Shaping F-coil F9B current (bank B).",
143
- "ecoila": "Ohmic E-coil bank A current.",
144
- "ecoilb": "Ohmic E-coil bank B current.",
145
- "gasa_cal": "Calibrated gas injection flow, valve A.",
146
- "gasb_cal": "Calibrated gas injection flow, valve B.",
147
- "gasc_cal": "Calibrated gas injection flow, valve C.",
148
- "gasd_cal": "Calibrated gas injection flow, valve D.",
149
- "gase_cal": "Calibrated gas injection flow, valve E.",
150
- "bt": "Vacuum toroidal magnetic field (signed)."
151
- },
152
- "space": "raw physical units; the graph applies the z-score",
153
- "note": "Check your units against actuator_ranges.json before trusting any output. A unit error produces confident nonsense rather than an exception."
154
- },
155
- "outputs": {
156
- "names": [
157
- "ne",
158
- "te_ped",
159
- "ti_ped",
160
- "t_rot_ped",
161
- "neped_prmtan",
162
- "teped_prmtan",
163
- "rho_sym",
164
- "ne_top_loc",
165
- "hmode"
166
- ],
167
- "n": 9,
168
- "units": {
169
- "ne": "1e19 m^-3",
170
- "te_ped": "keV",
171
- "ti_ped": "keV",
172
- "t_rot_ped": "krad/s",
173
- "neped_prmtan": "1e19 m^-3",
174
- "teped_prmtan": "keV",
175
- "rho_sym": "rho_tor (dimensionless)",
176
- "ne_top_loc": "rho_tor (dimensionless)",
177
- "hmode": "probability in [0, 1]"
178
- },
179
- "note": "Physical units. hmode is a probability in [0, 1]; the graph applies the sigmoid.",
180
- "hmode_gated": {
181
- "heads": [
182
- "neped_prmtan",
183
- "teped_prmtan",
184
- "rho_sym",
185
- "ne_top_loc"
186
- ],
187
- "indices": [
188
- 4,
189
- 5,
190
- 6,
191
- 7
192
- ],
193
- "threshold": 0.5,
194
- "note": "These four heads were trained only on H-mode rows and are undefined otherwise. The graph does NOT gate them; the consumer must, using the model's own hmode output. See docs/GATING.md."
195
- }
196
- },
197
- "graphs": {
198
- "fuse29_step.onnx": {
199
- "purpose": "real-time, one 50 ms tick per call",
200
- "inputs": {
201
- "actuators": [
202
- "batch",
203
- 29
204
- ],
205
- "conv_state": [
206
- 6,
207
- "batch",
208
- 1536,
209
- 3
210
- ],
211
- "ssm_state": [
212
- 6,
213
- "batch",
214
- 8,
215
- 128,
216
- 128
217
- ]
218
- },
219
- "outputs": {
220
- "predictions": [
221
- "batch",
222
- 9
223
- ],
224
- "conv_state_out": [
225
- 6,
226
- "batch",
227
- 1536,
228
- 3
229
- ],
230
- "ssm_state_out": [
231
- 6,
232
- "batch",
233
- 8,
234
- 128,
235
- 128
236
- ]
237
- },
238
- "initial_state": "all zeros at the start of a shot",
239
- "max_shot_length": "unbounded"
240
- },
241
- "fuse29_seq.onnx": {
242
- "purpose": "offline scoring of a whole shot",
243
- "inputs": {
244
- "actuators": [
245
- "batch",
246
- 256,
247
- 29
248
- ]
249
- },
250
- "outputs": {
251
- "predictions": [
252
- "batch",
253
- 256,
254
- 9
255
- ]
256
- },
257
- "seq_len": 256,
258
- "note": "Sequence length is FIXED. Right-pad shorter shots with zeros and read the first T outputs; the model is strictly causal so this is exact. For longer shots use the step graph or re-export with --seq-len."
259
- }
260
- },
261
- "dtype": "float32",
262
- "onnx_opset": 17,
263
- "training": {
264
- "epoch": 22,
265
- "val_loss": 1.1320768278092146,
266
- "note": "See docs/TRAINING.md for the full recipe."
267
- }
268
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4/norms.json DELETED
@@ -1,292 +0,0 @@
1
- {
2
- "schema_version": 2,
3
- "note": "Statistics are baked into the shipped ONNX graphs. This file is for inspection and for reproducing the transform outside the graph; it is not required at inference time.",
4
- "actuator_space": "physical",
5
- "std_floor": 1e-06,
6
- "clip_sigma": 20.0,
7
- "provenance": {
8
- "split": "train",
9
- "n_shots": 32731,
10
- "rho_index": 85,
11
- "source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85, random stratified split (split_index.json)",
12
- "note": "Recomputed on the NEW random train split. The source shards carried z-scores from the OLD chronological train split, whose shots overlap our test set. Actuator statistics are winsorised so a corrupted sample cannot set a channel's divisor.",
13
- "inflated_channels": [
14
- "pinj",
15
- "gasc_cal",
16
- "gasd_cal",
17
- "gase_cal"
18
- ],
19
- "actuator_estimator": "winsorised to p1..p99",
20
- "actuator_space": "physical",
21
- "composed_from": [
22
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
23
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
24
- ],
25
- "composition": "z = (x_phys - (m1 + s1*m2)) / (s1*s2), where (m1, s1) is the upstream FPE z-score and (m2, s2) is this model's re-scale onto its own training split"
26
- },
27
- "actuators": {
28
- "names": [
29
- "pinj",
30
- "tinj",
31
- "ech_total",
32
- "f1a",
33
- "f2a",
34
- "f3a",
35
- "f4a",
36
- "f5a",
37
- "f6a",
38
- "f7a",
39
- "f8a",
40
- "f9a",
41
- "f1b",
42
- "f2b",
43
- "f3b",
44
- "f4b",
45
- "f5b",
46
- "f6b",
47
- "f7b",
48
- "f8b",
49
- "f9b",
50
- "ecoila",
51
- "ecoilb",
52
- "gasa_cal",
53
- "gasb_cal",
54
- "gasc_cal",
55
- "gasd_cal",
56
- "gase_cal",
57
- "bt"
58
- ],
59
- "mean": [
60
- 3.838883638381958,
61
- 2.2043209075927734,
62
- 2.6981112957000732,
63
- -1382.3704833984375,
64
- -1229.876708984375,
65
- -592.7352294921875,
66
- 1098.1622314453125,
67
- 1173.57958984375,
68
- -2493.411865234375,
69
- -2367.570556640625,
70
- 996.0214233398438,
71
- -535.8018798828125,
72
- -1373.1888427734375,
73
- -1218.50048828125,
74
- -1005.3848266601562,
75
- 1124.2967529296875,
76
- 1443.536865234375,
77
- -2463.248046875,
78
- -2941.56005859375,
79
- 1431.05615234375,
80
- -214.02586364746094,
81
- -6965.32666015625,
82
- -6876.16455078125,
83
- 15.054444313049316,
84
- 1.386172890663147,
85
- 0.35034820437431335,
86
- 0.528103232383728,
87
- 0.27696067094802856,
88
- -0.971906840801239
89
- ],
90
- "std": [
91
- 3.0613932609558105,
92
- 2.11222505569458,
93
- 6.685519218444824,
94
- 1349.629638671875,
95
- 1248.3497314453125,
96
- 1185.706298828125,
97
- 1368.95458984375,
98
- 1352.103759765625,
99
- 1867.8076171875,
100
- 1999.19970703125,
101
- 1498.948974609375,
102
- 1258.01171875,
103
- 1367.82275390625,
104
- 1316.67724609375,
105
- 1308.8258056640625,
106
- 1519.5994873046875,
107
- 1408.3306884765625,
108
- 1836.4208984375,
109
- 2510.1083984375,
110
- 1718.2965087890625,
111
- 1388.83447265625,
112
- 18940.9453125,
113
- 18723.662109375,
114
- 26.369497299194336,
115
- 3.4090511798858643,
116
- 0.4470684826374054,
117
- 0.654624342918396,
118
- 0.17616958916187286,
119
- 1.6484158039093018
120
- ],
121
- "transform": "z = clip((x - mean) / std, -clip_sigma, +clip_sigma), applied inside the graph"
122
- },
123
- "targets": {
124
- "ne": {
125
- "mean": 2.7511744499206543,
126
- "std": 1.654153823852539
127
- },
128
- "te_ped": {
129
- "mean": 0.5915626287460327,
130
- "std": 0.43467429280281067
131
- },
132
- "ti_ped": {
133
- "mean": 1.016850233078003,
134
- "std": 0.681096076965332
135
- },
136
- "t_rot_ped": {
137
- "mean": 21.244613647460938,
138
- "std": 16.59148406982422
139
- },
140
- "neped_prmtan": {
141
- "mean": 2.7231285572052,
142
- "std": 1.7005536556243896
143
- },
144
- "teped_prmtan": {
145
- "mean": 0.46375223994255066,
146
- "std": 0.36919456720352173
147
- },
148
- "rho_sym": {
149
- "mean": 0.9757616519927979,
150
- "std": 0.04329206794500351
151
- },
152
- "ne_top_loc": {
153
- "mean": 0.9261865019798279,
154
- "std": 0.049897171556949615
155
- }
156
- },
157
- "hmode": {
158
- "transform": "sigmoid",
159
- "note": "hmode is a logit in the trunk; the graph applies the sigmoid."
160
- },
161
- "stages": {
162
- "note": "The composed actuator statistics above are the product of these two. Shown for traceability; use the composed values.",
163
- "stage1_physical_to_fpe_zscore": {
164
- "mean": [
165
- 2.8111997039100878,
166
- 2.154143940948575,
167
- 2.159654935239209,
168
- -1444.0438445123289,
169
- -1315.1185221229061,
170
- -639.741760304047,
171
- 1172.4978680515835,
172
- 1222.4970107268077,
173
- -2488.8410961768263,
174
- -2491.3739557685253,
175
- 1050.107386405324,
176
- -578.9736547563273,
177
- -1421.0817159358041,
178
- -1285.3967398730092,
179
- -1061.0290851406676,
180
- 1186.4795970820587,
181
- 1460.6822372728345,
182
- -2452.093120847959,
183
- -3071.3132492215186,
184
- 1531.3304960724108,
185
- -262.6728625067526,
186
- -6887.604056684089,
187
- -6768.996463787789,
188
- 14.89178144369171,
189
- 1.9421402622606716,
190
- 0.7508911827356307,
191
- 1.0383906373403984,
192
- 0.3920832239686922,
193
- -1.0310375752078498
194
- ],
195
- "std": [
196
- 194.08418888726106,
197
- 2.3684465859740262,
198
- 5.948083564785035,
199
- 1267.4907621702682,
200
- 1217.4478106828162,
201
- 1249.3915272640536,
202
- 1345.3871181128568,
203
- 1359.1934832307923,
204
- 1887.1891497052302,
205
- 1888.1014577442652,
206
- 1559.9875106371376,
207
- 1287.2118470203372,
208
- 1271.813282654729,
209
- 1259.8644805335082,
210
- 1361.9306367877398,
211
- 1521.172083160852,
212
- 1393.2120473032558,
213
- 1856.723912629122,
214
- 2432.8530409799628,
215
- 1705.6959050005082,
216
- 1421.8036451037203,
217
- 19092.148992270486,
218
- 18858.28389193975,
219
- 27.289184462156058,
220
- 11.092415079529571,
221
- 9.017289768908354,
222
- 12.055982101097918,
223
- 6.498888909025979,
224
- 1.599000778986496
225
- ]
226
- },
227
- "stage2_fpe_zscore_to_model": {
228
- "mean": [
229
- 0.0052950419485569,
230
- 0.02118559367954731,
231
- 0.0905260294675827,
232
- 0.04865782707929611,
233
- 0.0700167864561081,
234
- 0.03762352466583252,
235
- -0.05525219440460205,
236
- -0.03599006310105324,
237
- -0.002421961398795247,
238
- 0.06557027250528336,
239
- -0.03467077016830444,
240
- 0.03353898227214813,
241
- 0.03765711933374405,
242
- 0.05309795215725899,
243
- 0.040856875479221344,
244
- -0.04087827727198601,
245
- -0.012306398712098598,
246
- -0.006007813848555088,
247
- 0.05333370715379715,
248
- -0.05878793075680733,
249
- 0.03421499580144882,
250
- -0.004070908762514591,
251
- -0.00568280229344964,
252
- 0.005960696842521429,
253
- -0.050121404230594635,
254
- -0.04441944137215614,
255
- -0.042326491326093674,
256
- -0.017714189365506172,
257
- 0.036979787051677704
258
- ],
259
- "std": [
260
- 0.015773532912135124,
261
- 0.8918187022209167,
262
- 1.1239787340164185,
263
- 1.0648043155670166,
264
- 1.0253825187683105,
265
- 0.9490270018577576,
266
- 1.0175172090530396,
267
- 0.994783878326416,
268
- 0.9897299408912659,
269
- 1.0588412284851074,
270
- 0.9608724117279053,
271
- 0.9773152470588684,
272
- 1.0754902362823486,
273
- 1.04509437084198,
274
- 0.9610077142715454,
275
- 0.9989661574363708,
276
- 1.0108516216278076,
277
- 0.9890651702880859,
278
- 1.0317550897598267,
279
- 1.007387399673462,
280
- 0.9768117070198059,
281
- 0.9920803308486938,
282
- 0.9928614497184753,
283
- 0.9662984609603882,
284
- 0.30733174085617065,
285
- 0.04957903176546097,
286
- 0.05429871752858162,
287
- 0.02710764855146408,
288
- 1.030903697013855
289
- ]
290
- }
291
- }
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4/provenance.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "exported_utc": "2026-09-03T00:46:32.537210+00:00",
4
- "seed": 4,
5
- "source_checkpoint": "/flare/fusiondl_aesp/fuse_bd_model/fuse20/runs/fuse29r_s4/best_model.pt",
6
- "source_checkpoint_sha256": "d36f1364948aded5be459beb9a7670d59366272471c4f8ef36338135d8242104",
7
- "norms_source": "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json",
8
- "norms_actuator_space": "physical",
9
- "norms_composed_from": [
10
- "/lus/flare/projects/fusiondl_aesp/d3d_pedestal_fpe_harrisn85/normalization_params.json",
11
- "/lus/flare/projects/fusiondl_aesp/d3d_fuse20_rho85/norms.json"
12
- ],
13
- "onnx_opset": 17,
14
- "exporter": "torch.onnx.export (TorchScript, dynamo=False)",
15
- "versions": {
16
- "torch": "2.10.0a0+git449b176",
17
- "python": "3.12.12",
18
- "platform": "Linux-5.14.21-150400.24.235-default-x86_64-with-glibc2.31",
19
- "onnx": "1.22.0",
20
- "onnxruntime": "1.29.0"
21
- },
22
- "artifacts": {
23
- "fuse29_step.onnx": {
24
- "bytes": 45081271,
25
- "sha256": "7c74bffd61e2c69cae1b8b182fbde8897ce971901d83beded7f6a2e0c919fedc"
26
- },
27
- "fuse29_seq.onnx": {
28
- "bytes": 45464382,
29
- "sha256": "2348d2e1930835363dfade74cfc47d46c88e0691693f60e85cffc2d459ecf774"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s5/README.md DELETED
@@ -1,56 +0,0 @@
1
- ---
2
- license: mit
3
- library_name: onnx
4
- tags:
5
- - onnx
6
- - fusion
7
- - plasma-physics
8
- - tokamak
9
- - diii-d
10
- - mamba
11
- ---
12
-
13
- # fuse29 — seed 5
14
-
15
- This is seed 5, one of eight independently trained runs. Seed 0 is the champion and the default; this one exists so you can measure spread across training runs. Unless you are doing that, you want seed 0.
16
-
17
- 29-input Mamba-2 pedestal predictor for DIII-D. Raw physical units in,
18
- physical units out. See the [root model card](https://huggingface.co/SCS-Lab/FUSE29-Pedestal-model)
19
- for the full description, I/O contract, accuracy and limitations.
20
-
21
- | | |
22
- |---|---|
23
- | Seed | 5 |
24
- | Parameters | 11,254,425 |
25
- | Best validation loss | 1.1122 |
26
- | Sequence graph length | 256 ticks |
27
- | ONNX opset | 17 |
28
- | Exported | 2026-09-03T00:46:35.316400+00:00 |
29
- | Source checkpoint SHA-256 | `d01cae015ed05e7e…` |
30
-
31
- ## Load
32
-
33
- ```python
34
- from fuse29.runtime import Fuse29Predictor
35
-
36
- predictor = Fuse29Predictor.from_pretrained("SCS-Lab/FUSE29-Pedestal-model", seed=5)
37
- ```
38
-
39
- ## Files
40
-
41
- | File | |
42
- |---|---|
43
- | `fuse29_step.onnx` | one 50 ms tick, carries state, no length limit |
44
- | `fuse29_seq.onnx` | whole shot at a fixed 256 ticks |
45
- | `model_config.json` | I/O contract: names, order, units, sources, shapes |
46
- | `norms.json` | the statistics baked into the graphs |
47
- | `actuator_ranges.json` | training-split distribution, for checking your units |
48
- | `provenance.json` | source checkpoint hash, library versions, artefact hashes |
49
-
50
- ## Before you use it
51
-
52
- - Four heads (`neped_prmtan`, `teped_prmtan`, `rho_sym`, `ne_top_loc`) are
53
- **only valid in H-mode** and the graph does not gate them. Gate on the
54
- model's own `hmode` output.
55
- - `pinj` is in **MW**, not W. Run `predictor.check_units(shot)` once.
56
- - Output column order is not alphabetical. See `model_config.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s5/actuator_ranges.json DELETED
@@ -1,600 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "note": "Physical-units distribution of each actuator over the training split. Use it to check that your signals are in the units the graph expects; a unit error is the one preprocessing mistake that produces confident nonsense rather than an exception.",
4
- "split": "train",
5
- "n_shots": 32731,
6
- "n_ticks": 3020926,
7
- "percentiles": [
8
- 0.1,
9
- 1,
10
- 5,
11
- 25,
12
- 50,
13
- 75,
14
- 95,
15
- 99,
16
- 99.9
17
- ],
18
- "channels": {
19
- "pinj": {
20
- "units": "MW",
21
- "source": "ptdata:bmspinj",
22
- "description": "Neutral beam injected power, all sources.",
23
- "min": -46005.02701919088,
24
- "max": 17.512712760455507,
25
- "mean": 3.838883638381958,
26
- "std": 3.0613932609558105,
27
- "pct": {
28
- "0.1": -0.004132416388869853,
29
- "1": 4.112187479421436e-09,
30
- "5": 4.112187479421436e-09,
31
- "25": 1.311169336894574,
32
- "50": 3.18466408866965,
33
- "75": 5.748764762873332,
34
- "95": 9.841882532311711,
35
- "99": 12.212702351352696,
36
- "99.9": 14.791924355083399
37
- }
38
- },
39
- "tinj": {
40
- "units": "N*m",
41
- "source": "ptdata:bmstinj",
42
- "description": "Neutral beam injected torque, all sources.",
43
- "min": -56.644382966354534,
44
- "max": 129.9833380295058,
45
- "mean": 2.2043209075927734,
46
- "std": 2.11222505569458,
47
- "pct": {
48
- "0.1": -2.0636791725994676,
49
- "1": -0.5384317586520496,
50
- "5": -1.6338495756329507e-07,
51
- "25": 0.4319133403840452,
52
- "50": 1.963846077087278,
53
- "75": 3.1821234334199193,
54
- "95": 6.641525317445799,
55
- "99": 8.941231792062355,
56
- "99.9": 11.156712776956862
57
- }
58
- },
59
- "ech_total": {
60
- "units": "MW",
61
- "source": "ptdata:ECHPWR",
62
- "description": "Total electron cyclotron heating power (see note in docs/PREPROCESSING.md on this channel's scaling).",
63
- "min": -19.31181996542309,
64
- "max": 40.286455582885246,
65
- "mean": 2.6981112957000732,
66
- "std": 6.685519218444824,
67
- "pct": {
68
- "0.1": -1.0663586061709935,
69
- "1": -0.09982622583332723,
70
- "5": -0.020836448436920674,
71
- "25": -3.2566890961760464e-08,
72
- "50": -3.2566890961760464e-08,
73
- "75": 1.1717011943616973,
74
- "95": 21.558252060431304,
75
- "99": 30.476182922859127,
76
- "99.9": 37.09168917133024
77
- }
78
- },
79
- "f1a": {
80
- "units": "A",
81
- "source": "ptdata:F1A",
82
- "description": "Shaping F-coil F1A current (bank A).",
83
- "min": -5776.925892871883,
84
- "max": 5794.3504737288395,
85
- "mean": -1382.3704833984375,
86
- "std": 1349.629638671875,
87
- "pct": {
88
- "0.1": -4852.691808601986,
89
- "1": -4131.456225748339,
90
- "5": -3401.8604035239678,
91
- "25": -2236.4754469921672,
92
- "50": -1501.5458201268116,
93
- "75": -660.4245966463927,
94
- "95": 1294.4315819071094,
95
- "99": 3103.250955923345,
96
- "99.9": 4467.289606367005
97
- }
98
- },
99
- "f2a": {
100
- "units": "A",
101
- "source": "ptdata:F2A",
102
- "description": "Shaping F-coil F2A current (bank A).",
103
- "min": -5716.347659616551,
104
- "max": 5702.840977614059,
105
- "mean": -1229.876708984375,
106
- "std": 1248.3497314453125,
107
- "pct": {
108
- "0.1": -4093.397230708888,
109
- "1": -3297.8668360449756,
110
- "5": -2712.522533155646,
111
- "25": -2004.455454331444,
112
- "50": -1443.842241803098,
113
- "75": -854.5004209979342,
114
- "95": 1825.579117167513,
115
- "99": 3097.0902901803724,
116
- "99.9": 3899.548655232026
117
- }
118
- },
119
- "f3a": {
120
- "units": "A",
121
- "source": "ptdata:F3A",
122
- "description": "Shaping F-coil F3A current (bank A).",
123
- "min": -5498.272347966228,
124
- "max": 5321.719922394657,
125
- "mean": -592.7352294921875,
126
- "std": 1185.706298828125,
127
- "pct": {
128
- "0.1": -4140.690909683277,
129
- "1": -3539.2136012211317,
130
- "5": -2813.2888996278725,
131
- "25": -1377.7435033975407,
132
- "50": -152.16189816331342,
133
- "75": 2.4453898354848604,
134
- "95": 1203.107532773337,
135
- "99": 2898.3184344684487,
136
- "99.9": 3780.0556837479485
137
- }
138
- },
139
- "f4a": {
140
- "units": "A",
141
- "source": "ptdata:F4A",
142
- "description": "Shaping F-coil F4A current (bank A).",
143
- "min": -5876.373800845117,
144
- "max": 5855.700219305917,
145
- "mean": 1098.1622314453125,
146
- "std": 1368.95458984375,
147
- "pct": {
148
- "0.1": -4331.218505807293,
149
- "1": -3344.4526378786877,
150
- "5": -1858.4157962413597,
151
- "25": 395.84891116184133,
152
- "50": 1143.436262581068,
153
- "75": 1990.2677717095535,
154
- "95": 3141.5448401142426,
155
- "99": 3756.430079500399,
156
- "99.9": 4525.754910416766
157
- }
158
- },
159
- "f5a": {
160
- "units": "A",
161
- "source": "ptdata:F5A",
162
- "description": "Shaping F-coil F5A current (bank A).",
163
- "min": -5178.8539079385355,
164
- "max": 5353.141466672798,
165
- "mean": 1173.57958984375,
166
- "std": 1352.103759765625,
167
- "pct": {
168
- "0.1": -4592.7059148331355,
169
- "1": -3597.7201189044818,
170
- "5": -1551.4942446467403,
171
- "25": 543.836095032849,
172
- "50": 1273.969119983141,
173
- "75": 2051.0443148459794,
174
- "95": 3019.669622905384,
175
- "99": 3875.454685744494,
176
- "99.9": 4738.506855960392
177
- }
178
- },
179
- "f6a": {
180
- "units": "A",
181
- "source": "ptdata:F6A",
182
- "description": "Shaping F-coil F6A current (bank A).",
183
- "min": -7929.903731492232,
184
- "max": 5741.056818467809,
185
- "mean": -2493.411865234375,
186
- "std": 1867.8076171875,
187
- "pct": {
188
- "0.1": -6125.90268588119,
189
- "1": -4963.398523516425,
190
- "5": -4319.477588996284,
191
- "25": -3574.8234234024885,
192
- "50": -2898.635802832382,
193
- "75": -2143.0930801744807,
194
- "95": 2999.75903843203,
195
- "99": 4137.6543157735705,
196
- "99.9": 4783.375582166487
197
- }
198
- },
199
- "f7a": {
200
- "units": "A",
201
- "source": "ptdata:F7A",
202
- "description": "Shaping F-coil F7A current (bank A).",
203
- "min": -9825.736080045011,
204
- "max": 8678.484606762057,
205
- "mean": -2367.570556640625,
206
- "std": 1999.19970703125,
207
- "pct": {
208
- "0.1": -7676.219824168618,
209
- "1": -6127.379912259545,
210
- "5": -4909.893927511103,
211
- "25": -3430.1309476786882,
212
- "50": -2697.460342263373,
213
- "75": -1913.0579478721388,
214
- "95": 2723.164038733837,
215
- "99": 3948.221013655396,
216
- "99.9": 5316.086800760559
217
- }
218
- },
219
- "f8a": {
220
- "units": "A",
221
- "source": "ptdata:F8A",
222
- "description": "Shaping F-coil F8A current (bank A).",
223
- "min": -5378.835169240788,
224
- "max": 5880.767402237174,
225
- "mean": 996.0214233398438,
226
- "std": 1498.948974609375,
227
- "pct": {
228
- "0.1": -4229.744640827867,
229
- "1": -3363.368412210415,
230
- "5": -1922.2114690963926,
231
- "25": 60.761390529545906,
232
- "50": 1153.9241798399726,
233
- "75": 1951.1572686642544,
234
- "95": 3318.078493605748,
235
- "99": 3973.7764489149104,
236
- "99.9": 4670.296725684707
237
- }
238
- },
239
- "f9a": {
240
- "units": "A",
241
- "source": "ptdata:F9A",
242
- "description": "Shaping F-coil F9A current (bank A).",
243
- "min": -7206.032812499594,
244
- "max": 8700.684616308497,
245
- "mean": -535.8018798828125,
246
- "std": 1258.01171875,
247
- "pct": {
248
- "0.1": -4739.927394914494,
249
- "1": -3344.557163847978,
250
- "5": -2567.420669960383,
251
- "25": -1538.6304412830955,
252
- "50": -578.9736547563273,
253
- "75": 353.08467764596537,
254
- "95": 1558.2607279613098,
255
- "99": 2657.691791383836,
256
- "99.9": 4334.930796170508
257
- }
258
- },
259
- "f1b": {
260
- "units": "A",
261
- "source": "ptdata:F1B",
262
- "description": "Shaping F-coil F1B current (bank B).",
263
- "min": -5921.943154546981,
264
- "max": 5407.326196618229,
265
- "mean": -1373.1888427734375,
266
- "std": 1367.82275390625,
267
- "pct": {
268
- "0.1": -5179.567735964654,
269
- "1": -4339.478258925401,
270
- "5": -3463.431883510691,
271
- "25": -2205.922070942479,
272
- "50": -1459.5306304510002,
273
- "75": -750.1948036110768,
274
- "95": 1428.796834935177,
275
- "99": 3233.0438718527407,
276
- "99.9": 4240.724502122051
277
- }
278
- },
279
- "f2b": {
280
- "units": "A",
281
- "source": "ptdata:F2B",
282
- "description": "Shaping F-coil F2B current (bank B).",
283
- "min": -5788.286812358208,
284
- "max": 5428.562849130928,
285
- "mean": -1218.50048828125,
286
- "std": 1316.67724609375,
287
- "pct": {
288
- "0.1": -4785.998935671587,
289
- "1": -3520.521383204173,
290
- "5": -2855.1671089762676,
291
- "25": -1969.483606794242,
292
- "50": -1447.1879016413761,
293
- "75": -866.6265611311096,
294
- "95": 2049.217650390811,
295
- "99": 3312.4349928765846,
296
- "99.9": 4011.5142868858347
297
- }
298
- },
299
- "f3b": {
300
- "units": "A",
301
- "source": "ptdata:F3B",
302
- "description": "Shaping F-coil F3B current (bank B).",
303
- "min": -5503.943071765381,
304
- "max": 4849.177948074737,
305
- "mean": -1005.3848266601562,
306
- "std": 1308.8258056640625,
307
- "pct": {
308
- "0.1": -4452.6277480541985,
309
- "1": -3641.634707712471,
310
- "5": -2937.4861003450947,
311
- "25": -1881.7475544966392,
312
- "50": -1170.6945714968547,
313
- "75": -124.13671681902403,
314
- "95": 1683.5400540223286,
315
- "99": 3015.8060365193123,
316
- "99.9": 3797.6599244161957
317
- }
318
- },
319
- "f4b": {
320
- "units": "A",
321
- "source": "ptdata:F4B",
322
- "description": "Shaping F-coil F4B current (bank B).",
323
- "min": -5829.242194941551,
324
- "max": 5787.149431930685,
325
- "mean": 1124.2967529296875,
326
- "std": 1519.5994873046875,
327
- "pct": {
328
- "0.1": -4083.976449898858,
329
- "1": -3247.08251902718,
330
- "5": -2270.942268479742,
331
- "25": 376.8608226937906,
332
- "50": 1392.450441038166,
333
- "75": 2146.7001303629104,
334
- "95": 3145.5476189867913,
335
- "99": 3926.614817946318,
336
- "99.9": 4582.551950710075
337
- }
338
- },
339
- "f5b": {
340
- "units": "A",
341
- "source": "ptdata:F5B",
342
- "description": "Shaping F-coil F5B current (bank B).",
343
- "min": -5213.110339059254,
344
- "max": 5388.213772287713,
345
- "mean": 1443.536865234375,
346
- "std": 1408.3306884765625,
347
- "pct": {
348
- "0.1": -4134.61747806435,
349
- "1": -3056.873937432705,
350
- "5": -1361.0988601293998,
351
- "25": 675.1515533174199,
352
- "50": 1572.802070225599,
353
- "75": 2367.5452263604984,
354
- "95": 3528.863240540377,
355
- "99": 4411.454242162536,
356
- "99.9": 4967.30642206674
357
- }
358
- },
359
- "f6b": {
360
- "units": "A",
361
- "source": "ptdata:F6B",
362
- "description": "Shaping F-coil F6B current (bank B).",
363
- "min": -7604.653108484432,
364
- "max": 7763.1261416792295,
365
- "mean": -2463.248046875,
366
- "std": 1836.4208984375,
367
- "pct": {
368
- "0.1": -6372.627428710043,
369
- "1": -5251.4106280007745,
370
- "5": -4318.157196234368,
371
- "25": -3524.5849152058445,
372
- "50": -2837.2759930056304,
373
- "75": -2089.94465303326,
374
- "95": 2871.6849973390945,
375
- "99": 3948.010461650111,
376
- "99.9": 4803.251616324593
377
- }
378
- },
379
- "f7b": {
380
- "units": "A",
381
- "source": "ptdata:F7B",
382
- "description": "Shaping F-coil F7B current (bank B).",
383
- "min": -11380.254539563213,
384
- "max": 9414.242772782009,
385
- "mean": -2941.56005859375,
386
- "std": 2510.1083984375,
387
- "pct": {
388
- "0.1": -9236.286164628174,
389
- "1": -7962.01372128499,
390
- "5": -6618.689743738845,
391
- "25": -4397.68407591947,
392
- "50": -3041.7944101983817,
393
- "75": -2113.0768216001165,
394
- "95": 2850.240503964187,
395
- "99": 5238.131223534479,
396
- "99.9": 6771.41582857779
397
- }
398
- },
399
- "f8b": {
400
- "units": "A",
401
- "source": "ptdata:F8B",
402
- "description": "Shaping F-coil F8B current (bank B).",
403
- "min": -5834.457886045129,
404
- "max": 5952.292180058913,
405
- "mean": 1431.05615234375,
406
- "std": 1718.2965087890625,
407
- "pct": {
408
- "0.1": -4377.886849186064,
409
- "1": -3547.8568327724756,
410
- "5": -2536.325388000092,
411
- "25": 592.1441487378677,
412
- "50": 1743.1741236182588,
413
- "75": 2613.9050347435855,
414
- "95": 3655.019608301406,
415
- "99": 4295.252919476556,
416
- "99.9": 5183.621783504976
417
- }
418
- },
419
- "f9b": {
420
- "units": "A",
421
- "source": "ptdata:F9B",
422
- "description": "Shaping F-coil F9B current (bank B).",
423
- "min": -7298.33418485197,
424
- "max": 8673.475372842513,
425
- "mean": -214.02586364746094,
426
- "std": 1388.83447265625,
427
- "pct": {
428
- "0.1": -4443.002941036773,
429
- "1": -3335.961239603393,
430
- "5": -2530.3434455144015,
431
- "25": -1111.6205754278508,
432
- "50": -212.41719832099042,
433
- "75": 564.1401009862525,
434
- "95": 2296.158459733251,
435
- "99": 3401.023805016151,
436
- "99.9": 4981.695296538042
437
- }
438
- },
439
- "ecoila": {
440
- "units": "A",
441
- "source": "ptdata:ECOILA",
442
- "description": "Ohmic E-coil bank A current.",
443
- "min": -68526.67779690563,
444
- "max": 65669.33446503483,
445
- "mean": -6965.32666015625,
446
- "std": 18940.9453125,
447
- "pct": {
448
- "0.1": -62521.0592220894,
449
- "1": -53449.0677376177,
450
- "5": -39610.65329064206,
451
- "25": -19599.348704727538,
452
- "50": -6887.604056684089,
453
- "75": 6065.040591650557,
454
- "95": 23926.96154448237,
455
- "99": 33650.27142286909,
456
- "99.9": 48164.54971213867
457
- }
458
- },
459
- "ecoilb": {
460
- "units": "A",
461
- "source": "ptdata:ECOILB",
462
- "description": "Ohmic E-coil bank B current.",
463
- "min": -67880.78461590248,
464
- "max": 67380.80764904841,
465
- "mean": -6876.16455078125,
466
- "std": 18723.662109375,
467
- "pct": {
468
- "0.1": -61839.528701402356,
469
- "1": -52787.079189397904,
470
- "5": -39153.2527665565,
471
- "25": -19383.82435886666,
472
- "50": -6768.996463787789,
473
- "75": 6013.297288247475,
474
- "95": 23686.641557508636,
475
- "99": 33187.653018934754,
476
- "99.9": 47362.43837391052
477
- }
478
- },
479
- "gasa_cal": {
480
- "units": "Torr*L/s",
481
- "source": "tree:NEUTRALS GASFLOW.GASA:FLOW",
482
- "description": "Calibrated gas injection flow, valve A.",
483
- "min": -0.9805486760911233,
484
- "max": 348.1779045740827,
485
- "mean": 15.054444313049316,
486
- "std": 26.369497299194336,
487
- "pct": {
488
- "0.1": -0.0181447514768128,
489
- "1": 0.0006228885411054819,
490
- "5": 0.0014589414841879034,
491
- "25": 0.00852798057103854,
492
- "50": 0.09974314587981326,
493
- "75": 19.645558552678416,
494
- "95": 71.02669389337856,
495
- "99": 137.36341388263276,
496
- "99.9": 211.79616738152396
497
- }
498
- },
499
- "gasb_cal": {
500
- "units": "Torr*L/s",
501
- "source": "tree:NEUTRALS GASFLOW.GASB:FLOW",
502
- "description": "Calibrated gas injection flow, valve B.",
503
- "min": -0.5231055139632899,
504
- "max": 317.69717326145866,
505
- "mean": 1.386172890663147,
506
- "std": 3.4090511798858643,
507
- "pct": {
508
- "0.1": 9.14047308575583e-06,
509
- "1": 0.0007714573310613204,
510
- "5": 0.002068321612864521,
511
- "25": 0.009055124211873267,
512
- "50": 0.07339015461169385,
513
- "75": 1.9421402622606716,
514
- "95": 1.9421402622606716,
515
- "99": 23.663863921838843,
516
- "99.9": 149.40068998150738
517
- }
518
- },
519
- "gasc_cal": {
520
- "units": "Torr*L/s",
521
- "source": "tree:NEUTRALS GASFLOW.GASC:FLOW",
522
- "description": "Calibrated gas injection flow, valve C.",
523
- "min": -0.3965804467767108,
524
- "max": 306.0269668007428,
525
- "mean": 0.35034820437431335,
526
- "std": 0.4470684826374054,
527
- "pct": {
528
- "0.1": 7.428448363699935e-05,
529
- "1": 0.00026770734685732656,
530
- "5": 0.0006667805693404416,
531
- "25": 0.002788385500787083,
532
- "50": 0.023577950502740697,
533
- "75": 0.7508911827356307,
534
- "95": 0.7508911827356307,
535
- "99": 2.733332630282,
536
- "99.9": 108.67323889612304
537
- }
538
- },
539
- "gasd_cal": {
540
- "units": "Torr*L/s",
541
- "source": "tree:NEUTRALS GASFLOW.GASD:FLOW",
542
- "description": "Calibrated gas injection flow, valve D.",
543
- "min": -0.5287260135880842,
544
- "max": 771.5043798529183,
545
- "mean": 0.528103232383728,
546
- "std": 0.654624342918396,
547
- "pct": {
548
- "0.1": 5.497087182604332e-05,
549
- "1": 0.000175335120693898,
550
- "5": 0.0005482846440516553,
551
- "25": 0.003719433481388368,
552
- "50": 0.08385269566973214,
553
- "75": 1.0383906373403984,
554
- "95": 1.0383906373403984,
555
- "99": 4.359676988215197,
556
- "99.9": 127.54440071212512
557
- }
558
- },
559
- "gase_cal": {
560
- "units": "Torr*L/s",
561
- "source": "tree:NEUTRALS GASFLOW.GASE:FLOW",
562
- "description": "Calibrated gas injection flow, valve E.",
563
- "min": -0.2211384331710633,
564
- "max": 672.8582070151267,
565
- "mean": 0.27696067094802856,
566
- "std": 0.17616958916187286,
567
- "pct": {
568
- "0.1": 0.00010156410138473793,
569
- "1": 0.000223585566083373,
570
- "5": 0.0005190716405260032,
571
- "25": 0.011627604901727706,
572
- "50": 0.3920832239686922,
573
- "75": 0.3920832239686922,
574
- "95": 0.3920832239686922,
575
- "99": 0.3920832239686922,
576
- "99.9": 29.75536079519976
577
- }
578
- },
579
- "bt": {
580
- "units": "T",
581
- "source": "ptdata:bt",
582
- "description": "Vacuum toroidal magnetic field (signed).",
583
- "min": -2.2353815075115375,
584
- "max": 2.25186423641397,
585
- "mean": -0.971906840801239,
586
- "std": 1.6484158039093018,
587
- "pct": {
588
- "0.1": -2.2151064134142304,
589
- "1": -2.1819873443702726,
590
- "5": -2.136304350652244,
591
- "25": -2.0446028795017246,
592
- "50": -1.8984274308309796,
593
- "75": -1.0260122281948352,
594
- "95": 2.053318112027725,
595
- "99": 2.10945640328767,
596
- "99.9": 2.1819705410137904
597
- }
598
- }
599
- }
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s5/fuse29_seq.onnx DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:bee461499d85d1cf7ce5b4f5f56ab1bf13b55066737c08147e860211b0091ff3
3
- size 45464382