CreativeEngineer commited on
Commit
92c59c2
·
1 Parent(s): f09f601

feat: add initial p1 validation artifacts

Browse files
baselines/measured_sweep.py ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Measured sweep over the 4-knob parameter space.
2
+
3
+ Validates ranges, crash zones, feasibility regions, and identifies
4
+ candidate reset seeds for the repaired low-dimensional family.
5
+
6
+ Usage:
7
+ uv run python baselines/measured_sweep.py
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ import json
14
+ import time
15
+ from itertools import product
16
+ from pathlib import Path
17
+
18
+ import numpy as np
19
+
20
+ from fusion_lab.models import LowDimBoundaryParams
21
+ from server.contract import N_FIELD_PERIODS
22
+ from server.environment import PARAMETER_DELTAS, PARAMETER_RANGES
23
+ from server.physics import build_boundary_from_params, evaluate_boundary
24
+
25
+ SWEEP_RANGES: dict[str, tuple[float, float]] = PARAMETER_RANGES
26
+
27
+
28
+ def linspace_inclusive(low: float, high: float, n: int) -> list[float]:
29
+ return [round(float(v), 4) for v in np.linspace(low, high, n)]
30
+
31
+
32
+ def parse_args() -> argparse.Namespace:
33
+ parser = argparse.ArgumentParser(
34
+ description="Run a measured low-fidelity sweep over the repaired 4-knob family."
35
+ )
36
+ parser.add_argument(
37
+ "--grid-points",
38
+ type=int,
39
+ default=3,
40
+ help="Number of evenly spaced points per parameter range.",
41
+ )
42
+ parser.add_argument(
43
+ "--output-dir",
44
+ type=Path,
45
+ default=Path("baselines/sweep_results"),
46
+ help="Directory where the JSON artifact should be written.",
47
+ )
48
+ return parser.parse_args()
49
+
50
+
51
+ def run_sweep(*, grid_points: int) -> list[dict]:
52
+ if grid_points < 2:
53
+ raise ValueError("--grid-points must be at least 2.")
54
+ grids = {
55
+ name: linspace_inclusive(lo, hi, grid_points) for name, (lo, hi) in SWEEP_RANGES.items()
56
+ }
57
+
58
+ configs = list(
59
+ product(
60
+ grids["aspect_ratio"],
61
+ grids["elongation"],
62
+ grids["rotational_transform"],
63
+ grids["triangularity_scale"],
64
+ )
65
+ )
66
+ total = len(configs)
67
+ print(f"Sweep: {total} configurations, estimated {total * 0.6:.0f}s")
68
+
69
+ results: list[dict] = []
70
+ t0 = time.monotonic()
71
+
72
+ for i, (ar, elong, rt, ts) in enumerate(configs):
73
+ params = LowDimBoundaryParams(
74
+ aspect_ratio=ar,
75
+ elongation=elong,
76
+ rotational_transform=rt,
77
+ triangularity_scale=ts,
78
+ )
79
+ boundary = build_boundary_from_params(params, n_field_periods=N_FIELD_PERIODS)
80
+ metrics = evaluate_boundary(boundary, fidelity="low")
81
+
82
+ results.append(
83
+ {
84
+ "aspect_ratio": ar,
85
+ "elongation": elong,
86
+ "rotational_transform": rt,
87
+ "triangularity_scale": ts,
88
+ "crashed": metrics.evaluation_failed,
89
+ "failure_reason": metrics.failure_reason,
90
+ "feasible": metrics.constraints_satisfied,
91
+ "p1_feasibility": metrics.p1_feasibility,
92
+ "p1_score": metrics.p1_score,
93
+ "max_elongation": metrics.max_elongation,
94
+ "aspect_ratio_out": metrics.aspect_ratio,
95
+ "average_triangularity": metrics.average_triangularity,
96
+ "edge_iota_over_nfp": metrics.edge_iota_over_nfp,
97
+ "vacuum_well": metrics.vacuum_well,
98
+ }
99
+ )
100
+
101
+ if (i + 1) % 50 == 0 or i + 1 == total:
102
+ elapsed = time.monotonic() - t0
103
+ rate = (i + 1) / elapsed
104
+ eta = (total - i - 1) / rate
105
+ print(
106
+ f" [{i + 1}/{total}] "
107
+ f"{elapsed:.1f}s elapsed, {eta:.1f}s remaining, "
108
+ f"{rate:.1f} eval/s"
109
+ )
110
+
111
+ return results
112
+
113
+
114
+ def analyze(results: list[dict]) -> dict:
115
+ total = len(results)
116
+ crashed = [r for r in results if r["crashed"]]
117
+ evaluated = [r for r in results if not r["crashed"]]
118
+ feasible = [r for r in evaluated if r["feasible"]]
119
+
120
+ print(f"\n{'=' * 60}")
121
+ print("SWEEP SUMMARY")
122
+ print(f"{'=' * 60}")
123
+ print(f"Total: {total}")
124
+ print(f"Evaluated: {len(evaluated)} ({len(evaluated) / total * 100:.1f}%)")
125
+ print(f"Crashed: {len(crashed)} ({len(crashed) / total * 100:.1f}%)")
126
+ print(f"Feasible: {len(feasible)} ({len(feasible) / total * 100:.1f}% of evaluated)")
127
+
128
+ # Per-parameter breakdown
129
+ for param in ["aspect_ratio", "elongation", "rotational_transform", "triangularity_scale"]:
130
+ print(f"\n--- {param} ---")
131
+ values = sorted(set(r[param] for r in results))
132
+ for v in values:
133
+ subset = [r for r in results if r[param] == v]
134
+ n_crash = sum(1 for r in subset if r["crashed"])
135
+ n_feas = sum(1 for r in subset if not r["crashed"] and r["feasible"])
136
+ n_eval = sum(1 for r in subset if not r["crashed"])
137
+ avg_feas = (
138
+ np.mean([r["p1_feasibility"] for r in subset if not r["crashed"]])
139
+ if n_eval > 0
140
+ else float("nan")
141
+ )
142
+ print(
143
+ f" {v:.4f}: crash={n_crash}/{len(subset)} "
144
+ f"feasible={n_feas}/{n_eval} "
145
+ f"avg_feasibility={avg_feas:.4f}"
146
+ )
147
+
148
+ # Top feasible results
149
+ if feasible:
150
+ print("\n--- TOP FEASIBLE (by score) ---")
151
+ by_score = sorted(feasible, key=lambda r: r["p1_score"], reverse=True)
152
+ for r in by_score[:10]:
153
+ print(
154
+ f" AR={r['aspect_ratio']:.2f} elong={r['elongation']:.2f} "
155
+ f"rt={r['rotational_transform']:.2f} ts={r['triangularity_scale']:.2f} | "
156
+ f"score={r['p1_score']:.6f} feas={r['p1_feasibility']:.6f} "
157
+ f"elong_out={r['max_elongation']:.4f} tri={r['average_triangularity']:.4f}"
158
+ )
159
+
160
+ # Candidate reset seeds: near-feasible but not yet feasible
161
+ near_feasible = sorted(
162
+ [r for r in evaluated if not r["feasible"] and r["p1_feasibility"] < 0.5],
163
+ key=lambda r: r["p1_feasibility"],
164
+ )
165
+ print("\n--- CANDIDATE RESET SEEDS (near-feasible, not yet feasible) ---")
166
+ for r in near_feasible[:10]:
167
+ print(
168
+ f" AR={r['aspect_ratio']:.2f} elong={r['elongation']:.2f} "
169
+ f"rt={r['rotational_transform']:.2f} ts={r['triangularity_scale']:.2f} | "
170
+ f"feas={r['p1_feasibility']:.6f} "
171
+ f"tri={r['average_triangularity']:.4f} iota={r['edge_iota_over_nfp']:.4f}"
172
+ )
173
+
174
+ # Delta reachability: from each near-feasible seed, can 6 steps reach feasibility?
175
+ print("\n--- DELTA REACHABILITY ---")
176
+ for param, deltas in PARAMETER_DELTAS.items():
177
+ lo, hi = PARAMETER_RANGES[param]
178
+ span = hi - lo
179
+ max_reach = deltas["large"] * 6
180
+ print(
181
+ f" {param}: range=[{lo}, {hi}] span={span:.2f} "
182
+ f"max_6_steps={max_reach:.2f} "
183
+ f"coverage={max_reach / span * 100:.0f}%"
184
+ )
185
+
186
+ analysis = {
187
+ "total": total,
188
+ "evaluated": len(evaluated),
189
+ "crashed": len(crashed),
190
+ "feasible": len(feasible),
191
+ "crash_rate": len(crashed) / total,
192
+ "feasibility_rate": len(feasible) / max(len(evaluated), 1),
193
+ }
194
+ return analysis
195
+
196
+
197
+ def main() -> None:
198
+ args = parse_args()
199
+ results = run_sweep(grid_points=args.grid_points)
200
+
201
+ out_dir = args.output_dir
202
+ out_dir.mkdir(exist_ok=True)
203
+ timestamp = time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())
204
+ out_path = out_dir / f"measured_sweep_{timestamp}.json"
205
+
206
+ analysis = analyze(results)
207
+
208
+ with open(out_path, "w") as f:
209
+ json.dump({"analysis": analysis, "results": results}, f, indent=2)
210
+ print(f"\nResults saved to {out_path}")
211
+
212
+
213
+ if __name__ == "__main__":
214
+ main()
baselines/sweep_results/measured_sweep_20260308T050043Z.json ADDED
@@ -0,0 +1,1308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "analysis": {
3
+ "total": 81,
4
+ "evaluated": 63,
5
+ "crashed": 18,
6
+ "feasible": 0,
7
+ "crash_rate": 0.2222222222222222,
8
+ "feasibility_rate": 0.0
9
+ },
10
+ "results": [
11
+ {
12
+ "aspect_ratio": 3.2,
13
+ "elongation": 1.2,
14
+ "rotational_transform": 1.2,
15
+ "triangularity_scale": 0.4,
16
+ "crashed": false,
17
+ "failure_reason": "",
18
+ "feasible": false,
19
+ "p1_feasibility": 0.2992442990666656,
20
+ "p1_score": 0.0,
21
+ "max_elongation": 3.16130576121601,
22
+ "aspect_ratio_out": 2.9974947988779532,
23
+ "average_triangularity": -0.3772870380738901,
24
+ "edge_iota_over_nfp": 0.2102267102800003,
25
+ "vacuum_well": -0.7692596885396071
26
+ },
27
+ {
28
+ "aspect_ratio": 3.2,
29
+ "elongation": 1.2,
30
+ "rotational_transform": 1.2,
31
+ "triangularity_scale": 0.55,
32
+ "crashed": false,
33
+ "failure_reason": "",
34
+ "feasible": false,
35
+ "p1_feasibility": 0.4090894053777488,
36
+ "p1_score": 0.0,
37
+ "max_elongation": 4.152094100549045,
38
+ "aspect_ratio_out": 2.921555348457181,
39
+ "average_triangularity": -0.47193262838245775,
40
+ "edge_iota_over_nfp": 0.17727317838667536,
41
+ "vacuum_well": -0.9367956816738985
42
+ },
43
+ {
44
+ "aspect_ratio": 3.2,
45
+ "elongation": 1.2,
46
+ "rotational_transform": 1.2,
47
+ "triangularity_scale": 0.7,
48
+ "crashed": false,
49
+ "failure_reason": "",
50
+ "feasible": false,
51
+ "p1_feasibility": 0.5042302640839985,
52
+ "p1_score": 0.0,
53
+ "max_elongation": 5.535803883650764,
54
+ "aspect_ratio_out": 2.8456158980364137,
55
+ "average_triangularity": -0.5427662288172865,
56
+ "edge_iota_over_nfp": 0.14873092077480043,
57
+ "vacuum_well": -1.1406175925392996
58
+ },
59
+ {
60
+ "aspect_ratio": 3.2,
61
+ "elongation": 1.2,
62
+ "rotational_transform": 1.55,
63
+ "triangularity_scale": 0.4,
64
+ "crashed": false,
65
+ "failure_reason": "",
66
+ "feasible": false,
67
+ "p1_feasibility": 0.24542592385222362,
68
+ "p1_score": 0.0,
69
+ "max_elongation": 4.121228842521552,
70
+ "aspect_ratio_out": 2.997494798877953,
71
+ "average_triangularity": -0.3772870380738882,
72
+ "edge_iota_over_nfp": 0.3164284175757522,
73
+ "vacuum_well": -0.8497809691028027
74
+ },
75
+ {
76
+ "aspect_ratio": 3.2,
77
+ "elongation": 1.2,
78
+ "rotational_transform": 1.55,
79
+ "triangularity_scale": 0.55,
80
+ "crashed": false,
81
+ "failure_reason": "",
82
+ "feasible": false,
83
+ "p1_feasibility": 0.12086983493481807,
84
+ "p1_score": 0.0,
85
+ "max_elongation": 5.454537868016638,
86
+ "aspect_ratio_out": 2.921555348457181,
87
+ "average_triangularity": -0.4719326283824573,
88
+ "edge_iota_over_nfp": 0.26373904951955457,
89
+ "vacuum_well": -1.022090883293349
90
+ },
91
+ {
92
+ "aspect_ratio": 3.2,
93
+ "elongation": 1.2,
94
+ "rotational_transform": 1.55,
95
+ "triangularity_scale": 0.7,
96
+ "crashed": false,
97
+ "failure_reason": "",
98
+ "feasible": false,
99
+ "p1_feasibility": 0.28449084880096587,
100
+ "p1_score": 0.0,
101
+ "max_elongation": 7.3486347080873395,
102
+ "aspect_ratio_out": 2.845615898036414,
103
+ "average_triangularity": -0.5427662288172859,
104
+ "edge_iota_over_nfp": 0.21465274535971024,
105
+ "vacuum_well": -1.2227198660107412
106
+ },
107
+ {
108
+ "aspect_ratio": 3.2,
109
+ "elongation": 1.2,
110
+ "rotational_transform": 1.9,
111
+ "triangularity_scale": 0.4,
112
+ "crashed": false,
113
+ "failure_reason": "",
114
+ "feasible": false,
115
+ "p1_feasibility": 0.24542592385222062,
116
+ "p1_score": 0.0,
117
+ "max_elongation": 5.506917831126787,
118
+ "aspect_ratio_out": 2.9974947988779492,
119
+ "average_triangularity": -0.3772870380738897,
120
+ "edge_iota_over_nfp": 0.4111851229739778,
121
+ "vacuum_well": -0.8487582268420396
122
+ },
123
+ {
124
+ "aspect_ratio": 3.2,
125
+ "elongation": 1.2,
126
+ "rotational_transform": 1.9,
127
+ "triangularity_scale": 0.55,
128
+ "crashed": true,
129
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
130
+ "feasible": false,
131
+ "p1_feasibility": 1000000.0,
132
+ "p1_score": 0.0,
133
+ "max_elongation": 10.0,
134
+ "aspect_ratio_out": 0.0,
135
+ "average_triangularity": 0.0,
136
+ "edge_iota_over_nfp": 0.0,
137
+ "vacuum_well": 0.0
138
+ },
139
+ {
140
+ "aspect_ratio": 3.2,
141
+ "elongation": 1.2,
142
+ "rotational_transform": 1.9,
143
+ "triangularity_scale": 0.7,
144
+ "crashed": true,
145
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
146
+ "feasible": false,
147
+ "p1_feasibility": 1000000.0,
148
+ "p1_score": 0.0,
149
+ "max_elongation": 10.0,
150
+ "aspect_ratio_out": 0.0,
151
+ "average_triangularity": 0.0,
152
+ "edge_iota_over_nfp": 0.0,
153
+ "vacuum_well": 0.0
154
+ },
155
+ {
156
+ "aspect_ratio": 3.2,
157
+ "elongation": 1.5,
158
+ "rotational_transform": 1.2,
159
+ "triangularity_scale": 0.4,
160
+ "crashed": false,
161
+ "failure_reason": "",
162
+ "feasible": false,
163
+ "p1_feasibility": 0.3756331947507288,
164
+ "p1_score": 0.0,
165
+ "max_elongation": 3.415282869637771,
166
+ "aspect_ratio_out": 2.9873706820500727,
167
+ "average_triangularity": -0.38276544931263445,
168
+ "edge_iota_over_nfp": 0.18731004157478134,
169
+ "vacuum_well": -0.7354702188161674
170
+ },
171
+ {
172
+ "aspect_ratio": 3.2,
173
+ "elongation": 1.5,
174
+ "rotational_transform": 1.2,
175
+ "triangularity_scale": 0.55,
176
+ "crashed": false,
177
+ "failure_reason": "",
178
+ "feasible": false,
179
+ "p1_feasibility": 0.4698235036344714,
180
+ "p1_score": 0.0,
181
+ "max_elongation": 4.397190759490295,
182
+ "aspect_ratio_out": 2.907634687818849,
183
+ "average_triangularity": -0.47640349211453187,
184
+ "edge_iota_over_nfp": 0.15905294890965857,
185
+ "vacuum_well": -0.8791543482410266
186
+ },
187
+ {
188
+ "aspect_ratio": 3.2,
189
+ "elongation": 1.5,
190
+ "rotational_transform": 1.2,
191
+ "triangularity_scale": 0.7,
192
+ "crashed": false,
193
+ "failure_reason": "",
194
+ "feasible": false,
195
+ "p1_feasibility": 0.5428078225003115,
196
+ "p1_score": 0.0,
197
+ "max_elongation": 5.745675404632478,
198
+ "aspect_ratio_out": 2.827898693587622,
199
+ "average_triangularity": -0.5463927121513807,
200
+ "edge_iota_over_nfp": 0.13715765324990656,
201
+ "vacuum_well": -1.0487526494457182
202
+ },
203
+ {
204
+ "aspect_ratio": 3.2,
205
+ "elongation": 1.5,
206
+ "rotational_transform": 1.55,
207
+ "triangularity_scale": 0.4,
208
+ "crashed": false,
209
+ "failure_reason": "",
210
+ "feasible": false,
211
+ "p1_feasibility": 0.23446910137473032,
212
+ "p1_score": 0.0,
213
+ "max_elongation": 4.409780538549243,
214
+ "aspect_ratio_out": 2.9873706820500683,
215
+ "average_triangularity": -0.38276544931263484,
216
+ "edge_iota_over_nfp": 0.2846591548163929,
217
+ "vacuum_well": -0.7976954392526402
218
+ },
219
+ {
220
+ "aspect_ratio": 3.2,
221
+ "elongation": 1.5,
222
+ "rotational_transform": 1.55,
223
+ "triangularity_scale": 0.55,
224
+ "crashed": false,
225
+ "failure_reason": "",
226
+ "feasible": false,
227
+ "p1_feasibility": 0.19785195828765914,
228
+ "p1_score": 0.0,
229
+ "max_elongation": 5.717017037692497,
230
+ "aspect_ratio_out": 2.907634687818846,
231
+ "average_triangularity": -0.47640349211453215,
232
+ "edge_iota_over_nfp": 0.24064441251370225,
233
+ "vacuum_well": -0.9370717167513004
234
+ },
235
+ {
236
+ "aspect_ratio": 3.2,
237
+ "elongation": 1.5,
238
+ "rotational_transform": 1.55,
239
+ "triangularity_scale": 0.7,
240
+ "crashed": false,
241
+ "failure_reason": "",
242
+ "feasible": false,
243
+ "p1_feasibility": 0.31745507935684175,
244
+ "p1_score": 0.0,
245
+ "max_elongation": 7.524424461976794,
246
+ "aspect_ratio_out": 2.827898693587622,
247
+ "average_triangularity": -0.5463927121513805,
248
+ "edge_iota_over_nfp": 0.20476347619294746,
249
+ "vacuum_well": -1.0979141176158662
250
+ },
251
+ {
252
+ "aspect_ratio": 3.2,
253
+ "elongation": 1.5,
254
+ "rotational_transform": 1.9,
255
+ "triangularity_scale": 0.4,
256
+ "crashed": false,
257
+ "failure_reason": "",
258
+ "feasible": false,
259
+ "p1_feasibility": 0.2344691013747291,
260
+ "p1_score": 0.0,
261
+ "max_elongation": 5.828745051952865,
262
+ "aspect_ratio_out": 2.98737068205007,
263
+ "average_triangularity": -0.38276544931263545,
264
+ "edge_iota_over_nfp": 0.37697102463283866,
265
+ "vacuum_well": -0.7940349587136619
266
+ },
267
+ {
268
+ "aspect_ratio": 3.2,
269
+ "elongation": 1.5,
270
+ "rotational_transform": 1.9,
271
+ "triangularity_scale": 0.55,
272
+ "crashed": true,
273
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
274
+ "feasible": false,
275
+ "p1_feasibility": 1000000.0,
276
+ "p1_score": 0.0,
277
+ "max_elongation": 10.0,
278
+ "aspect_ratio_out": 0.0,
279
+ "average_triangularity": 0.0,
280
+ "edge_iota_over_nfp": 0.0,
281
+ "vacuum_well": 0.0
282
+ },
283
+ {
284
+ "aspect_ratio": 3.2,
285
+ "elongation": 1.5,
286
+ "rotational_transform": 1.9,
287
+ "triangularity_scale": 0.7,
288
+ "crashed": true,
289
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
290
+ "feasible": false,
291
+ "p1_feasibility": 1000000.0,
292
+ "p1_score": 0.0,
293
+ "max_elongation": 10.0,
294
+ "aspect_ratio_out": 0.0,
295
+ "average_triangularity": 0.0,
296
+ "edge_iota_over_nfp": 0.0,
297
+ "vacuum_well": 0.0
298
+ },
299
+ {
300
+ "aspect_ratio": 3.2,
301
+ "elongation": 1.8,
302
+ "rotational_transform": 1.2,
303
+ "triangularity_scale": 0.4,
304
+ "crashed": false,
305
+ "failure_reason": "",
306
+ "feasible": false,
307
+ "p1_feasibility": 0.41572876893682525,
308
+ "p1_score": 0.0,
309
+ "max_elongation": 3.643871627883724,
310
+ "aspect_ratio_out": 2.9727492396200192,
311
+ "average_triangularity": -0.3900787346843175,
312
+ "edge_iota_over_nfp": 0.1752813693189524,
313
+ "vacuum_well": -0.7062026867261749
314
+ },
315
+ {
316
+ "aspect_ratio": 3.2,
317
+ "elongation": 1.8,
318
+ "rotational_transform": 1.2,
319
+ "triangularity_scale": 0.55,
320
+ "crashed": false,
321
+ "failure_reason": "",
322
+ "feasible": false,
323
+ "p1_feasibility": 0.511263141576597,
324
+ "p1_score": 0.0,
325
+ "max_elongation": 4.6308076495645185,
326
+ "aspect_ratio_out": 2.8875302044775286,
327
+ "average_triangularity": -0.4823961090018443,
328
+ "edge_iota_over_nfp": 0.1466210575270209,
329
+ "vacuum_well": -0.8495335820014714
330
+ },
331
+ {
332
+ "aspect_ratio": 3.2,
333
+ "elongation": 1.8,
334
+ "rotational_transform": 1.2,
335
+ "triangularity_scale": 0.7,
336
+ "crashed": false,
337
+ "failure_reason": "",
338
+ "feasible": false,
339
+ "p1_feasibility": 0.575134593927855,
340
+ "p1_score": 0.0,
341
+ "max_elongation": 5.983792904658967,
342
+ "aspect_ratio_out": 2.802311169335037,
343
+ "average_triangularity": -0.5512332332730122,
344
+ "edge_iota_over_nfp": 0.12745962182164347,
345
+ "vacuum_well": -1.0099648537211192
346
+ },
347
+ {
348
+ "aspect_ratio": 3.2,
349
+ "elongation": 1.8,
350
+ "rotational_transform": 1.55,
351
+ "triangularity_scale": 0.4,
352
+ "crashed": false,
353
+ "failure_reason": "",
354
+ "feasible": false,
355
+ "p1_feasibility": 0.2198425306313636,
356
+ "p1_score": 0.0,
357
+ "max_elongation": 4.658846779436034,
358
+ "aspect_ratio_out": 2.9727492396200206,
359
+ "average_triangularity": -0.3900787346843182,
360
+ "edge_iota_over_nfp": 0.260614756973633,
361
+ "vacuum_well": -0.7619073642576293
362
+ },
363
+ {
364
+ "aspect_ratio": 3.2,
365
+ "elongation": 1.8,
366
+ "rotational_transform": 1.55,
367
+ "triangularity_scale": 0.55,
368
+ "crashed": false,
369
+ "failure_reason": "",
370
+ "feasible": false,
371
+ "p1_feasibility": 0.2548347634174995,
372
+ "p1_score": 0.0,
373
+ "max_elongation": 5.96315599581871,
374
+ "aspect_ratio_out": 2.8875302044775286,
375
+ "average_triangularity": -0.48239610900184327,
376
+ "edge_iota_over_nfp": 0.22354957097475014,
377
+ "vacuum_well": -0.8874237224309117
378
+ },
379
+ {
380
+ "aspect_ratio": 3.2,
381
+ "elongation": 1.8,
382
+ "rotational_transform": 1.55,
383
+ "triangularity_scale": 0.7,
384
+ "crashed": false,
385
+ "failure_reason": "",
386
+ "feasible": false,
387
+ "p1_feasibility": 0.32546519894675746,
388
+ "p1_score": 0.0,
389
+ "max_elongation": 7.752053893932858,
390
+ "aspect_ratio_out": 2.8023111693350367,
391
+ "average_triangularity": -0.5512332332730115,
392
+ "edge_iota_over_nfp": 0.20236044031597275,
393
+ "vacuum_well": -1.025387025277758
394
+ },
395
+ {
396
+ "aspect_ratio": 3.2,
397
+ "elongation": 1.8,
398
+ "rotational_transform": 1.9,
399
+ "triangularity_scale": 0.4,
400
+ "crashed": false,
401
+ "failure_reason": "",
402
+ "feasible": false,
403
+ "p1_feasibility": 0.21984253063136272,
404
+ "p1_score": 0.0,
405
+ "max_elongation": 6.09849446743415,
406
+ "aspect_ratio_out": 2.9727492396200192,
407
+ "average_triangularity": -0.39007873468431864,
408
+ "edge_iota_over_nfp": 0.34816514339419125,
409
+ "vacuum_well": -0.7642647530236962
410
+ },
411
+ {
412
+ "aspect_ratio": 3.2,
413
+ "elongation": 1.8,
414
+ "rotational_transform": 1.9,
415
+ "triangularity_scale": 0.55,
416
+ "crashed": true,
417
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
418
+ "feasible": false,
419
+ "p1_feasibility": 1000000.0,
420
+ "p1_score": 0.0,
421
+ "max_elongation": 10.0,
422
+ "aspect_ratio_out": 0.0,
423
+ "average_triangularity": 0.0,
424
+ "edge_iota_over_nfp": 0.0,
425
+ "vacuum_well": 0.0
426
+ },
427
+ {
428
+ "aspect_ratio": 3.2,
429
+ "elongation": 1.8,
430
+ "rotational_transform": 1.9,
431
+ "triangularity_scale": 0.7,
432
+ "crashed": true,
433
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
434
+ "feasible": false,
435
+ "p1_feasibility": 1000000.0,
436
+ "p1_score": 0.0,
437
+ "max_elongation": 10.0,
438
+ "aspect_ratio_out": 0.0,
439
+ "average_triangularity": 0.0,
440
+ "edge_iota_over_nfp": 0.0,
441
+ "vacuum_well": 0.0
442
+ },
443
+ {
444
+ "aspect_ratio": 3.5,
445
+ "elongation": 1.2,
446
+ "rotational_transform": 1.2,
447
+ "triangularity_scale": 0.4,
448
+ "crashed": false,
449
+ "failure_reason": "",
450
+ "feasible": false,
451
+ "p1_feasibility": 0.2454259238522214,
452
+ "p1_score": 0.0,
453
+ "max_elongation": 3.3941794666037,
454
+ "aspect_ratio_out": 3.297494798877951,
455
+ "average_triangularity": -0.3772870380738893,
456
+ "edge_iota_over_nfp": 0.25020340071179015,
457
+ "vacuum_well": -0.664703585980881
458
+ },
459
+ {
460
+ "aspect_ratio": 3.5,
461
+ "elongation": 1.2,
462
+ "rotational_transform": 1.2,
463
+ "triangularity_scale": 0.55,
464
+ "crashed": false,
465
+ "failure_reason": "",
466
+ "feasible": false,
467
+ "p1_feasibility": 0.29748701762857843,
468
+ "p1_score": 0.0,
469
+ "max_elongation": 4.453965370200011,
470
+ "aspect_ratio_out": 3.221555348457185,
471
+ "average_triangularity": -0.47193262838245753,
472
+ "edge_iota_over_nfp": 0.21075389471142647,
473
+ "vacuum_well": -0.7999402027558562
474
+ },
475
+ {
476
+ "aspect_ratio": 3.5,
477
+ "elongation": 1.2,
478
+ "rotational_transform": 1.2,
479
+ "triangularity_scale": 0.7,
480
+ "crashed": false,
481
+ "failure_reason": "",
482
+ "feasible": false,
483
+ "p1_feasibility": 0.41176221731566515,
484
+ "p1_score": 0.0,
485
+ "max_elongation": 5.935449908790214,
486
+ "aspect_ratio_out": 3.1456158980364113,
487
+ "average_triangularity": -0.5427662288172873,
488
+ "edge_iota_over_nfp": 0.17647133480530044,
489
+ "vacuum_well": -0.9605409707647019
490
+ },
491
+ {
492
+ "aspect_ratio": 3.5,
493
+ "elongation": 1.2,
494
+ "rotational_transform": 1.55,
495
+ "triangularity_scale": 0.4,
496
+ "crashed": false,
497
+ "failure_reason": "",
498
+ "feasible": false,
499
+ "p1_feasibility": 0.2454259238522163,
500
+ "p1_score": 0.0,
501
+ "max_elongation": 4.576580280082074,
502
+ "aspect_ratio_out": 3.2974947988779504,
503
+ "average_triangularity": -0.37728703807389186,
504
+ "edge_iota_over_nfp": 0.36414107926306327,
505
+ "vacuum_well": -0.7128435653443117
506
+ },
507
+ {
508
+ "aspect_ratio": 3.5,
509
+ "elongation": 1.2,
510
+ "rotational_transform": 1.55,
511
+ "triangularity_scale": 0.55,
512
+ "crashed": false,
513
+ "failure_reason": "",
514
+ "feasible": false,
515
+ "p1_feasibility": 0.05613474323508394,
516
+ "p1_score": 0.0,
517
+ "max_elongation": 6.047857576381886,
518
+ "aspect_ratio_out": 3.2215553484571795,
519
+ "average_triangularity": -0.47193262838245803,
520
+ "edge_iota_over_nfp": 0.3054435838875495,
521
+ "vacuum_well": -0.8521401674735174
522
+ },
523
+ {
524
+ "aspect_ratio": 3.5,
525
+ "elongation": 1.2,
526
+ "rotational_transform": 1.55,
527
+ "triangularity_scale": 0.7,
528
+ "crashed": false,
529
+ "failure_reason": "",
530
+ "feasible": false,
531
+ "p1_feasibility": 0.1656236239017676,
532
+ "p1_score": 0.0,
533
+ "max_elongation": 8.134786960902295,
534
+ "aspect_ratio_out": 3.1456158980364153,
535
+ "average_triangularity": -0.5427662288172861,
536
+ "edge_iota_over_nfp": 0.2503129128294697,
537
+ "vacuum_well": -1.0097109038318997
538
+ },
539
+ {
540
+ "aspect_ratio": 3.5,
541
+ "elongation": 1.2,
542
+ "rotational_transform": 1.9,
543
+ "triangularity_scale": 0.4,
544
+ "crashed": false,
545
+ "failure_reason": "",
546
+ "feasible": false,
547
+ "p1_feasibility": 0.2454259238522143,
548
+ "p1_score": 0.0,
549
+ "max_elongation": 6.330394186717037,
550
+ "aspect_ratio_out": 3.297494798877949,
551
+ "average_triangularity": -0.37728703807389286,
552
+ "edge_iota_over_nfp": 0.46201189807837234,
553
+ "vacuum_well": -0.6837429974221736
554
+ },
555
+ {
556
+ "aspect_ratio": 3.5,
557
+ "elongation": 1.2,
558
+ "rotational_transform": 1.9,
559
+ "triangularity_scale": 0.55,
560
+ "crashed": true,
561
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
562
+ "feasible": false,
563
+ "p1_feasibility": 1000000.0,
564
+ "p1_score": 0.0,
565
+ "max_elongation": 10.0,
566
+ "aspect_ratio_out": 0.0,
567
+ "average_triangularity": 0.0,
568
+ "edge_iota_over_nfp": 0.0,
569
+ "vacuum_well": 0.0
570
+ },
571
+ {
572
+ "aspect_ratio": 3.5,
573
+ "elongation": 1.2,
574
+ "rotational_transform": 1.9,
575
+ "triangularity_scale": 0.7,
576
+ "crashed": true,
577
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
578
+ "feasible": false,
579
+ "p1_feasibility": 1000000.0,
580
+ "p1_score": 0.0,
581
+ "max_elongation": 10.0,
582
+ "aspect_ratio_out": 0.0,
583
+ "average_triangularity": 0.0,
584
+ "edge_iota_over_nfp": 0.0,
585
+ "vacuum_well": 0.0
586
+ },
587
+ {
588
+ "aspect_ratio": 3.5,
589
+ "elongation": 1.5,
590
+ "rotational_transform": 1.2,
591
+ "triangularity_scale": 0.4,
592
+ "crashed": false,
593
+ "failure_reason": "",
594
+ "feasible": false,
595
+ "p1_feasibility": 0.2552162867390878,
596
+ "p1_score": 0.0,
597
+ "max_elongation": 3.645500992042136,
598
+ "aspect_ratio_out": 3.287370682050072,
599
+ "average_triangularity": -0.3827654493126362,
600
+ "edge_iota_over_nfp": 0.22343511397827365,
601
+ "vacuum_well": -0.6309996936433193
602
+ },
603
+ {
604
+ "aspect_ratio": 3.5,
605
+ "elongation": 1.5,
606
+ "rotational_transform": 1.2,
607
+ "triangularity_scale": 0.55,
608
+ "crashed": false,
609
+ "failure_reason": "",
610
+ "feasible": false,
611
+ "p1_feasibility": 0.3652585910461875,
612
+ "p1_score": 0.0,
613
+ "max_elongation": 4.683962785437232,
614
+ "aspect_ratio_out": 3.2076346878188455,
615
+ "average_triangularity": -0.47640349211453326,
616
+ "edge_iota_over_nfp": 0.19042242268614373,
617
+ "vacuum_well": -0.7435543314082094
618
+ },
619
+ {
620
+ "aspect_ratio": 3.5,
621
+ "elongation": 1.5,
622
+ "rotational_transform": 1.2,
623
+ "triangularity_scale": 0.7,
624
+ "crashed": false,
625
+ "failure_reason": "",
626
+ "feasible": false,
627
+ "p1_feasibility": 0.45145912595142856,
628
+ "p1_score": 0.0,
629
+ "max_elongation": 6.1087362987510785,
630
+ "aspect_ratio_out": 3.1278986935876247,
631
+ "average_triangularity": -0.5463927121513825,
632
+ "edge_iota_over_nfp": 0.16456226221457143,
633
+ "vacuum_well": -0.8743755327281046
634
+ },
635
+ {
636
+ "aspect_ratio": 3.5,
637
+ "elongation": 1.5,
638
+ "rotational_transform": 1.55,
639
+ "triangularity_scale": 0.4,
640
+ "crashed": false,
641
+ "failure_reason": "",
642
+ "feasible": false,
643
+ "p1_feasibility": 0.23446910137472687,
644
+ "p1_score": 0.0,
645
+ "max_elongation": 4.869439306707605,
646
+ "aspect_ratio_out": 3.287370682050072,
647
+ "average_triangularity": -0.38276544931263656,
648
+ "edge_iota_over_nfp": 0.3311741122924938,
649
+ "vacuum_well": -0.6687744150602308
650
+ },
651
+ {
652
+ "aspect_ratio": 3.5,
653
+ "elongation": 1.5,
654
+ "rotational_transform": 1.55,
655
+ "triangularity_scale": 0.55,
656
+ "crashed": false,
657
+ "failure_reason": "",
658
+ "feasible": false,
659
+ "p1_feasibility": 0.05509465022700962,
660
+ "p1_score": 0.0,
661
+ "max_elongation": 6.294387064409056,
662
+ "aspect_ratio_out": 3.2076346878188478,
663
+ "average_triangularity": -0.47640349211453337,
664
+ "edge_iota_over_nfp": 0.2834716049318971,
665
+ "vacuum_well": -0.7817459617243165
666
+ },
667
+ {
668
+ "aspect_ratio": 3.5,
669
+ "elongation": 1.5,
670
+ "rotational_transform": 1.55,
671
+ "triangularity_scale": 0.7,
672
+ "crashed": false,
673
+ "failure_reason": "",
674
+ "feasible": false,
675
+ "p1_feasibility": 0.18795354892189217,
676
+ "p1_score": 0.0,
677
+ "max_elongation": 8.259847119894143,
678
+ "aspect_ratio_out": 3.127898693587626,
679
+ "average_triangularity": -0.5463927121513834,
680
+ "edge_iota_over_nfp": 0.24361393532343234,
681
+ "vacuum_well": -0.9101645505111563
682
+ },
683
+ {
684
+ "aspect_ratio": 3.5,
685
+ "elongation": 1.5,
686
+ "rotational_transform": 1.9,
687
+ "triangularity_scale": 0.4,
688
+ "crashed": false,
689
+ "failure_reason": "",
690
+ "feasible": false,
691
+ "p1_feasibility": 0.23446910137472798,
692
+ "p1_score": 0.0,
693
+ "max_elongation": 6.666881773484368,
694
+ "aspect_ratio_out": 3.2873706820500743,
695
+ "average_triangularity": -0.382765449312636,
696
+ "edge_iota_over_nfp": 0.4272117184895036,
697
+ "vacuum_well": -0.6343193410902149
698
+ },
699
+ {
700
+ "aspect_ratio": 3.5,
701
+ "elongation": 1.5,
702
+ "rotational_transform": 1.9,
703
+ "triangularity_scale": 0.55,
704
+ "crashed": true,
705
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
706
+ "feasible": false,
707
+ "p1_feasibility": 1000000.0,
708
+ "p1_score": 0.0,
709
+ "max_elongation": 10.0,
710
+ "aspect_ratio_out": 0.0,
711
+ "average_triangularity": 0.0,
712
+ "edge_iota_over_nfp": 0.0,
713
+ "vacuum_well": 0.0
714
+ },
715
+ {
716
+ "aspect_ratio": 3.5,
717
+ "elongation": 1.5,
718
+ "rotational_transform": 1.9,
719
+ "triangularity_scale": 0.7,
720
+ "crashed": true,
721
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
722
+ "feasible": false,
723
+ "p1_feasibility": 1000000.0,
724
+ "p1_score": 0.0,
725
+ "max_elongation": 10.0,
726
+ "aspect_ratio_out": 0.0,
727
+ "average_triangularity": 0.0,
728
+ "edge_iota_over_nfp": 0.0,
729
+ "vacuum_well": 0.0
730
+ },
731
+ {
732
+ "aspect_ratio": 3.5,
733
+ "elongation": 1.8,
734
+ "rotational_transform": 1.2,
735
+ "triangularity_scale": 0.4,
736
+ "crashed": false,
737
+ "failure_reason": "",
738
+ "feasible": false,
739
+ "p1_feasibility": 0.31238226470825553,
740
+ "p1_score": 0.0,
741
+ "max_elongation": 3.8692530187501073,
742
+ "aspect_ratio_out": 3.272749239620019,
743
+ "average_triangularity": -0.390078734684318,
744
+ "edge_iota_over_nfp": 0.20628532058752333,
745
+ "vacuum_well": -0.6043041164364112
746
+ },
747
+ {
748
+ "aspect_ratio": 3.5,
749
+ "elongation": 1.8,
750
+ "rotational_transform": 1.2,
751
+ "triangularity_scale": 0.55,
752
+ "crashed": false,
753
+ "failure_reason": "",
754
+ "feasible": false,
755
+ "p1_feasibility": 0.4126167583963611,
756
+ "p1_score": 0.0,
757
+ "max_elongation": 4.903513329259712,
758
+ "aspect_ratio_out": 3.1875302044775253,
759
+ "average_triangularity": -0.482396109001844,
760
+ "edge_iota_over_nfp": 0.17621497248109166,
761
+ "vacuum_well": -0.7113384768069663
762
+ },
763
+ {
764
+ "aspect_ratio": 3.5,
765
+ "elongation": 1.8,
766
+ "rotational_transform": 1.2,
767
+ "triangularity_scale": 0.7,
768
+ "crashed": false,
769
+ "failure_reason": "",
770
+ "feasible": false,
771
+ "p1_feasibility": 0.4733786617465044,
772
+ "p1_score": 0.0,
773
+ "max_elongation": 6.318251319708043,
774
+ "aspect_ratio_out": 3.1023111693350365,
775
+ "average_triangularity": -0.551233233273011,
776
+ "edge_iota_over_nfp": 0.15798640147604867,
777
+ "vacuum_well": -0.8271583951674183
778
+ },
779
+ {
780
+ "aspect_ratio": 3.5,
781
+ "elongation": 1.8,
782
+ "rotational_transform": 1.55,
783
+ "triangularity_scale": 0.4,
784
+ "crashed": false,
785
+ "failure_reason": "",
786
+ "feasible": false,
787
+ "p1_feasibility": 0.21984253063136583,
788
+ "p1_score": 0.0,
789
+ "max_elongation": 5.118240837608963,
790
+ "aspect_ratio_out": 3.272749239620021,
791
+ "average_triangularity": -0.3900787346843171,
792
+ "edge_iota_over_nfp": 0.30467031557444413,
793
+ "vacuum_well": -0.6428347405255894
794
+ },
795
+ {
796
+ "aspect_ratio": 3.5,
797
+ "elongation": 1.8,
798
+ "rotational_transform": 1.55,
799
+ "triangularity_scale": 0.55,
800
+ "crashed": false,
801
+ "failure_reason": "",
802
+ "feasible": false,
803
+ "p1_feasibility": 0.1135333246675809,
804
+ "p1_score": 0.0,
805
+ "max_elongation": 6.52496520982626,
806
+ "aspect_ratio_out": 3.1875302044775293,
807
+ "average_triangularity": -0.4823961090018447,
808
+ "edge_iota_over_nfp": 0.2659400025997257,
809
+ "vacuum_well": -0.7422184942989336
810
+ },
811
+ {
812
+ "aspect_ratio": 3.5,
813
+ "elongation": 1.8,
814
+ "rotational_transform": 1.55,
815
+ "triangularity_scale": 0.7,
816
+ "crashed": false,
817
+ "failure_reason": "",
818
+ "feasible": false,
819
+ "p1_feasibility": 0.19066188850017865,
820
+ "p1_score": 0.0,
821
+ "max_elongation": 8.453464204422819,
822
+ "aspect_ratio_out": 3.102311169335036,
823
+ "average_triangularity": -0.5512332332730117,
824
+ "edge_iota_over_nfp": 0.2428014334499464,
825
+ "vacuum_well": -0.8527496798204878
826
+ },
827
+ {
828
+ "aspect_ratio": 3.5,
829
+ "elongation": 1.8,
830
+ "rotational_transform": 1.9,
831
+ "triangularity_scale": 0.4,
832
+ "crashed": false,
833
+ "failure_reason": "",
834
+ "feasible": false,
835
+ "p1_feasibility": 0.21984253063136494,
836
+ "p1_score": 0.0,
837
+ "max_elongation": 6.9463560702338905,
838
+ "aspect_ratio_out": 3.272749239620025,
839
+ "average_triangularity": -0.39007873468431753,
840
+ "edge_iota_over_nfp": 0.3976618109725794,
841
+ "vacuum_well": -0.6148108774395119
842
+ },
843
+ {
844
+ "aspect_ratio": 3.5,
845
+ "elongation": 1.8,
846
+ "rotational_transform": 1.9,
847
+ "triangularity_scale": 0.55,
848
+ "crashed": true,
849
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
850
+ "feasible": false,
851
+ "p1_feasibility": 1000000.0,
852
+ "p1_score": 0.0,
853
+ "max_elongation": 10.0,
854
+ "aspect_ratio_out": 0.0,
855
+ "average_triangularity": 0.0,
856
+ "edge_iota_over_nfp": 0.0,
857
+ "vacuum_well": 0.0
858
+ },
859
+ {
860
+ "aspect_ratio": 3.5,
861
+ "elongation": 1.8,
862
+ "rotational_transform": 1.9,
863
+ "triangularity_scale": 0.7,
864
+ "crashed": true,
865
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
866
+ "feasible": false,
867
+ "p1_feasibility": 1000000.0,
868
+ "p1_score": 0.0,
869
+ "max_elongation": 10.0,
870
+ "aspect_ratio_out": 0.0,
871
+ "average_triangularity": 0.0,
872
+ "edge_iota_over_nfp": 0.0,
873
+ "vacuum_well": 0.0
874
+ },
875
+ {
876
+ "aspect_ratio": 3.8,
877
+ "elongation": 1.2,
878
+ "rotational_transform": 1.2,
879
+ "triangularity_scale": 0.4,
880
+ "crashed": false,
881
+ "failure_reason": "",
882
+ "feasible": false,
883
+ "p1_feasibility": 0.24542592385222006,
884
+ "p1_score": 0.0,
885
+ "max_elongation": 3.655092009945489,
886
+ "aspect_ratio_out": 3.597494798877952,
887
+ "average_triangularity": -0.37728703807388997,
888
+ "edge_iota_over_nfp": 0.2893199762541339,
889
+ "vacuum_well": -0.5782263807621896
890
+ },
891
+ {
892
+ "aspect_ratio": 3.8,
893
+ "elongation": 1.2,
894
+ "rotational_transform": 1.2,
895
+ "triangularity_scale": 0.55,
896
+ "crashed": false,
897
+ "failure_reason": "",
898
+ "feasible": false,
899
+ "p1_feasibility": 0.18656815973467256,
900
+ "p1_score": 0.0,
901
+ "max_elongation": 4.791820749012815,
902
+ "aspect_ratio_out": 3.5215553484571793,
903
+ "average_triangularity": -0.47193262838245903,
904
+ "edge_iota_over_nfp": 0.24402955207959823,
905
+ "vacuum_well": -0.6901925400158998
906
+ },
907
+ {
908
+ "aspect_ratio": 3.8,
909
+ "elongation": 1.2,
910
+ "rotational_transform": 1.2,
911
+ "triangularity_scale": 0.7,
912
+ "crashed": false,
913
+ "failure_reason": "",
914
+ "feasible": false,
915
+ "p1_feasibility": 0.31951499196875227,
916
+ "p1_score": 0.0,
917
+ "max_elongation": 6.382367050051349,
918
+ "aspect_ratio_out": 3.4456158980364155,
919
+ "average_triangularity": -0.5427662288172861,
920
+ "edge_iota_over_nfp": 0.20414550240937432,
921
+ "vacuum_well": -0.8206695782389528
922
+ },
923
+ {
924
+ "aspect_ratio": 3.8,
925
+ "elongation": 1.2,
926
+ "rotational_transform": 1.55,
927
+ "triangularity_scale": 0.4,
928
+ "crashed": false,
929
+ "failure_reason": "",
930
+ "feasible": false,
931
+ "p1_feasibility": 0.24542592385221906,
932
+ "p1_score": 0.0,
933
+ "max_elongation": 5.094101658298537,
934
+ "aspect_ratio_out": 3.5974947988779453,
935
+ "average_triangularity": -0.37728703807389047,
936
+ "edge_iota_over_nfp": 0.40945734796781447,
937
+ "vacuum_well": -0.5981804595302792
938
+ },
939
+ {
940
+ "aspect_ratio": 3.8,
941
+ "elongation": 1.2,
942
+ "rotational_transform": 1.55,
943
+ "triangularity_scale": 0.55,
944
+ "crashed": false,
945
+ "failure_reason": "",
946
+ "feasible": false,
947
+ "p1_feasibility": 0.05613474323508627,
948
+ "p1_score": 0.0,
949
+ "max_elongation": 6.721805873813851,
950
+ "aspect_ratio_out": 3.5215553484571824,
951
+ "average_triangularity": -0.47193262838245686,
952
+ "edge_iota_over_nfp": 0.34411106640849015,
953
+ "vacuum_well": -0.7119763601489589
954
+ },
955
+ {
956
+ "aspect_ratio": 3.8,
957
+ "elongation": 1.2,
958
+ "rotational_transform": 1.55,
959
+ "triangularity_scale": 0.7,
960
+ "crashed": false,
961
+ "failure_reason": "",
962
+ "feasible": false,
963
+ "p1_feasibility": 0.055638380310600866,
964
+ "p1_score": 0.0,
965
+ "max_elongation": 9.030344748230837,
966
+ "aspect_ratio_out": 3.445615898036414,
967
+ "average_triangularity": -0.5427662288172874,
968
+ "edge_iota_over_nfp": 0.28330848590681973,
969
+ "vacuum_well": -0.8388909971694075
970
+ },
971
+ {
972
+ "aspect_ratio": 3.8,
973
+ "elongation": 1.2,
974
+ "rotational_transform": 1.9,
975
+ "triangularity_scale": 0.4,
976
+ "crashed": false,
977
+ "failure_reason": "",
978
+ "feasible": false,
979
+ "p1_feasibility": 0.24542592385222373,
980
+ "p1_score": 0.0,
981
+ "max_elongation": 7.330392814766231,
982
+ "aspect_ratio_out": 3.5974947988779458,
983
+ "average_triangularity": -0.37728703807388814,
984
+ "edge_iota_over_nfp": 0.5044776421055188,
985
+ "vacuum_well": -0.5662857208360687
986
+ },
987
+ {
988
+ "aspect_ratio": 3.8,
989
+ "elongation": 1.2,
990
+ "rotational_transform": 1.9,
991
+ "triangularity_scale": 0.55,
992
+ "crashed": true,
993
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
994
+ "feasible": false,
995
+ "p1_feasibility": 1000000.0,
996
+ "p1_score": 0.0,
997
+ "max_elongation": 10.0,
998
+ "aspect_ratio_out": 0.0,
999
+ "average_triangularity": 0.0,
1000
+ "edge_iota_over_nfp": 0.0,
1001
+ "vacuum_well": 0.0
1002
+ },
1003
+ {
1004
+ "aspect_ratio": 3.8,
1005
+ "elongation": 1.2,
1006
+ "rotational_transform": 1.9,
1007
+ "triangularity_scale": 0.7,
1008
+ "crashed": true,
1009
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
1010
+ "feasible": false,
1011
+ "p1_feasibility": 1000000.0,
1012
+ "p1_score": 0.0,
1013
+ "max_elongation": 10.0,
1014
+ "aspect_ratio_out": 0.0,
1015
+ "average_triangularity": 0.0,
1016
+ "edge_iota_over_nfp": 0.0,
1017
+ "vacuum_well": 0.0
1018
+ },
1019
+ {
1020
+ "aspect_ratio": 3.8,
1021
+ "elongation": 1.5,
1022
+ "rotational_transform": 1.2,
1023
+ "triangularity_scale": 0.4,
1024
+ "crashed": false,
1025
+ "failure_reason": "",
1026
+ "feasible": false,
1027
+ "p1_feasibility": 0.23446910137472843,
1028
+ "p1_score": 0.0,
1029
+ "max_elongation": 3.9082135297904603,
1030
+ "aspect_ratio_out": 3.5873706820500715,
1031
+ "average_triangularity": -0.3827654493126358,
1032
+ "edge_iota_over_nfp": 0.2601408639197091,
1033
+ "vacuum_well": -0.546989318570786
1034
+ },
1035
+ {
1036
+ "aspect_ratio": 3.8,
1037
+ "elongation": 1.5,
1038
+ "rotational_transform": 1.2,
1039
+ "triangularity_scale": 0.55,
1040
+ "crashed": false,
1041
+ "failure_reason": "",
1042
+ "feasible": false,
1043
+ "p1_feasibility": 0.25770258074325547,
1044
+ "p1_score": 0.0,
1045
+ "max_elongation": 5.011193704084697,
1046
+ "aspect_ratio_out": 3.507634687818846,
1047
+ "average_triangularity": -0.47640349211453364,
1048
+ "edge_iota_over_nfp": 0.22268922577702335,
1049
+ "vacuum_well": -0.6378508849467094
1050
+ },
1051
+ {
1052
+ "aspect_ratio": 3.8,
1053
+ "elongation": 1.5,
1054
+ "rotational_transform": 1.2,
1055
+ "triangularity_scale": 0.7,
1056
+ "crashed": false,
1057
+ "failure_reason": "",
1058
+ "feasible": false,
1059
+ "p1_feasibility": 0.3563685202429026,
1060
+ "p1_score": 0.0,
1061
+ "max_elongation": 6.523908903139856,
1062
+ "aspect_ratio_out": 3.427898693587626,
1063
+ "average_triangularity": -0.5463927121513822,
1064
+ "edge_iota_over_nfp": 0.1930894439271292,
1065
+ "vacuum_well": -0.7422835451739921
1066
+ },
1067
+ {
1068
+ "aspect_ratio": 3.8,
1069
+ "elongation": 1.5,
1070
+ "rotational_transform": 1.55,
1071
+ "triangularity_scale": 0.4,
1072
+ "crashed": false,
1073
+ "failure_reason": "",
1074
+ "feasible": false,
1075
+ "p1_feasibility": 0.23446910137472743,
1076
+ "p1_score": 0.0,
1077
+ "max_elongation": 5.4000662498579395,
1078
+ "aspect_ratio_out": 3.58737068205007,
1079
+ "average_triangularity": -0.3827654493126363,
1080
+ "edge_iota_over_nfp": 0.37576442477917044,
1081
+ "vacuum_well": -0.5593363795034076
1082
+ },
1083
+ {
1084
+ "aspect_ratio": 3.8,
1085
+ "elongation": 1.5,
1086
+ "rotational_transform": 1.55,
1087
+ "triangularity_scale": 0.55,
1088
+ "crashed": false,
1089
+ "failure_reason": "",
1090
+ "feasible": false,
1091
+ "p1_feasibility": 0.047193015770934044,
1092
+ "p1_score": 0.0,
1093
+ "max_elongation": 6.95917543501653,
1094
+ "aspect_ratio_out": 3.5076346878188462,
1095
+ "average_triangularity": -0.476403492114533,
1096
+ "edge_iota_over_nfp": 0.32390835631237563,
1097
+ "vacuum_well": -0.6531086645842118
1098
+ },
1099
+ {
1100
+ "aspect_ratio": 3.8,
1101
+ "elongation": 1.5,
1102
+ "rotational_transform": 1.55,
1103
+ "triangularity_scale": 0.7,
1104
+ "crashed": false,
1105
+ "failure_reason": "",
1106
+ "feasible": false,
1107
+ "p1_feasibility": 0.06608766640438413,
1108
+ "p1_score": 0.0,
1109
+ "max_elongation": 9.110492371135232,
1110
+ "aspect_ratio_out": 3.4278986935876268,
1111
+ "average_triangularity": -0.5463927121513822,
1112
+ "edge_iota_over_nfp": 0.28017370007868475,
1113
+ "vacuum_well": -0.7564369584107291
1114
+ },
1115
+ {
1116
+ "aspect_ratio": 3.8,
1117
+ "elongation": 1.5,
1118
+ "rotational_transform": 1.9,
1119
+ "triangularity_scale": 0.4,
1120
+ "crashed": false,
1121
+ "failure_reason": "",
1122
+ "feasible": false,
1123
+ "p1_feasibility": 0.23446910137472732,
1124
+ "p1_score": 0.0,
1125
+ "max_elongation": 7.677673329183981,
1126
+ "aspect_ratio_out": 3.5873706820500697,
1127
+ "average_triangularity": -0.38276544931263634,
1128
+ "edge_iota_over_nfp": 0.4707294226314962,
1129
+ "vacuum_well": -0.5146202191204641
1130
+ },
1131
+ {
1132
+ "aspect_ratio": 3.8,
1133
+ "elongation": 1.5,
1134
+ "rotational_transform": 1.9,
1135
+ "triangularity_scale": 0.55,
1136
+ "crashed": true,
1137
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
1138
+ "feasible": false,
1139
+ "p1_feasibility": 1000000.0,
1140
+ "p1_score": 0.0,
1141
+ "max_elongation": 10.0,
1142
+ "aspect_ratio_out": 0.0,
1143
+ "average_triangularity": 0.0,
1144
+ "edge_iota_over_nfp": 0.0,
1145
+ "vacuum_well": 0.0
1146
+ },
1147
+ {
1148
+ "aspect_ratio": 3.8,
1149
+ "elongation": 1.5,
1150
+ "rotational_transform": 1.9,
1151
+ "triangularity_scale": 0.7,
1152
+ "crashed": true,
1153
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
1154
+ "feasible": false,
1155
+ "p1_feasibility": 1000000.0,
1156
+ "p1_score": 0.0,
1157
+ "max_elongation": 10.0,
1158
+ "aspect_ratio_out": 0.0,
1159
+ "average_triangularity": 0.0,
1160
+ "edge_iota_over_nfp": 0.0,
1161
+ "vacuum_well": 0.0
1162
+ },
1163
+ {
1164
+ "aspect_ratio": 3.8,
1165
+ "elongation": 1.8,
1166
+ "rotational_transform": 1.2,
1167
+ "triangularity_scale": 0.4,
1168
+ "crashed": false,
1169
+ "failure_reason": "",
1170
+ "feasible": false,
1171
+ "p1_feasibility": 0.21984253063136272,
1172
+ "p1_score": 0.0,
1173
+ "max_elongation": 4.1304272049856765,
1174
+ "aspect_ratio_out": 3.572749239620019,
1175
+ "average_triangularity": -0.39007873468431864,
1176
+ "edge_iota_over_nfp": 0.23918988633893049,
1177
+ "vacuum_well": -0.5244590200054563
1178
+ },
1179
+ {
1180
+ "aspect_ratio": 3.8,
1181
+ "elongation": 1.8,
1182
+ "rotational_transform": 1.2,
1183
+ "triangularity_scale": 0.55,
1184
+ "crashed": false,
1185
+ "failure_reason": "",
1186
+ "feasible": false,
1187
+ "p1_feasibility": 0.30941253114225103,
1188
+ "p1_score": 0.0,
1189
+ "max_elongation": 5.219891723892629,
1190
+ "aspect_ratio_out": 3.4875302044775336,
1191
+ "average_triangularity": -0.48239610900184327,
1192
+ "edge_iota_over_nfp": 0.20717624065732468,
1193
+ "vacuum_well": -0.6074137302875826
1194
+ },
1195
+ {
1196
+ "aspect_ratio": 3.8,
1197
+ "elongation": 1.8,
1198
+ "rotational_transform": 1.2,
1199
+ "triangularity_scale": 0.7,
1200
+ "crashed": false,
1201
+ "failure_reason": "",
1202
+ "feasible": false,
1203
+ "p1_feasibility": 0.3721181780375554,
1204
+ "p1_score": 0.0,
1205
+ "max_elongation": 6.709958387787289,
1206
+ "aspect_ratio_out": 3.4023111693350363,
1207
+ "average_triangularity": -0.551233233273013,
1208
+ "edge_iota_over_nfp": 0.18836454658873336,
1209
+ "vacuum_well": -0.6969799270812338
1210
+ },
1211
+ {
1212
+ "aspect_ratio": 3.8,
1213
+ "elongation": 1.8,
1214
+ "rotational_transform": 1.55,
1215
+ "triangularity_scale": 0.4,
1216
+ "crashed": false,
1217
+ "failure_reason": "",
1218
+ "feasible": false,
1219
+ "p1_feasibility": 0.21984253063136006,
1220
+ "p1_score": 0.0,
1221
+ "max_elongation": 5.655882151980431,
1222
+ "aspect_ratio_out": 3.5727492396200193,
1223
+ "average_triangularity": -0.39007873468431997,
1224
+ "edge_iota_over_nfp": 0.3476959386568659,
1225
+ "vacuum_well": -0.5401610577187229
1226
+ },
1227
+ {
1228
+ "aspect_ratio": 3.8,
1229
+ "elongation": 1.8,
1230
+ "rotational_transform": 1.55,
1231
+ "triangularity_scale": 0.55,
1232
+ "crashed": false,
1233
+ "failure_reason": "",
1234
+ "feasible": false,
1235
+ "p1_feasibility": 0.03520778199631258,
1236
+ "p1_score": 0.0,
1237
+ "max_elongation": 7.180648727079949,
1238
+ "aspect_ratio_out": 3.4875302044775283,
1239
+ "average_triangularity": -0.4823961090018437,
1240
+ "edge_iota_over_nfp": 0.30698149307999983,
1241
+ "vacuum_well": -0.6211518335261255
1242
+ },
1243
+ {
1244
+ "aspect_ratio": 3.8,
1245
+ "elongation": 1.8,
1246
+ "rotational_transform": 1.55,
1247
+ "triangularity_scale": 0.7,
1248
+ "crashed": false,
1249
+ "failure_reason": "",
1250
+ "feasible": false,
1251
+ "p1_feasibility": 0.06277313159962161,
1252
+ "p1_score": 0.0,
1253
+ "max_elongation": 9.276836759242448,
1254
+ "aspect_ratio_out": 3.402311169335038,
1255
+ "average_triangularity": -0.5512332332730103,
1256
+ "edge_iota_over_nfp": 0.2811680605201135,
1257
+ "vacuum_well": -0.7118470668886681
1258
+ },
1259
+ {
1260
+ "aspect_ratio": 3.8,
1261
+ "elongation": 1.8,
1262
+ "rotational_transform": 1.9,
1263
+ "triangularity_scale": 0.4,
1264
+ "crashed": false,
1265
+ "failure_reason": "",
1266
+ "feasible": false,
1267
+ "p1_feasibility": 0.2198425306313675,
1268
+ "p1_score": 0.0,
1269
+ "max_elongation": 7.969505345435814,
1270
+ "aspect_ratio_out": 3.572749239620025,
1271
+ "average_triangularity": -0.39007873468431625,
1272
+ "edge_iota_over_nfp": 0.44118859445417574,
1273
+ "vacuum_well": -0.4933392101193987
1274
+ },
1275
+ {
1276
+ "aspect_ratio": 3.8,
1277
+ "elongation": 1.8,
1278
+ "rotational_transform": 1.9,
1279
+ "triangularity_scale": 0.55,
1280
+ "crashed": true,
1281
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
1282
+ "feasible": false,
1283
+ "p1_feasibility": 1000000.0,
1284
+ "p1_score": 0.0,
1285
+ "max_elongation": 10.0,
1286
+ "aspect_ratio_out": 0.0,
1287
+ "average_triangularity": 0.0,
1288
+ "edge_iota_over_nfp": 0.0,
1289
+ "vacuum_well": 0.0
1290
+ },
1291
+ {
1292
+ "aspect_ratio": 3.8,
1293
+ "elongation": 1.8,
1294
+ "rotational_transform": 1.9,
1295
+ "triangularity_scale": 0.7,
1296
+ "crashed": true,
1297
+ "failure_reason": "Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.Thread 0:\n\tFATAL ERROR in thread=0. The solver failed during the first iterations. This may happen if the initial boundary is poorly shaped or if it isn't spectrally condensed enough.",
1298
+ "feasible": false,
1299
+ "p1_feasibility": 1000000.0,
1300
+ "p1_score": 0.0,
1301
+ "max_elongation": 10.0,
1302
+ "aspect_ratio_out": 0.0,
1303
+ "average_triangularity": 0.0,
1304
+ "edge_iota_over_nfp": 0.0,
1305
+ "vacuum_well": 0.0
1306
+ }
1307
+ ]
1308
+ }
docs/P1_MANUAL_PLAYTEST_LOG.md ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # P1 Manual Playtest Log
2
+
3
+ Scope:
4
+
5
+ - initial low-fidelity manual sanity check from the current default reset seed
6
+ - focus: can a human read the observation, choose a plausible move, and see a legible reward change?
7
+
8
+ Episode A: repair toward feasibility
9
+
10
+ Start state:
11
+
12
+ - seed: `0`
13
+ - params: `aspect_ratio=3.6`, `elongation=1.4`, `rotational_transform=1.5`, `triangularity_scale=0.55`
14
+ - low-fidelity feasibility: `0.050653`
15
+ - low-fidelity score: `0.0`
16
+ - constraints satisfied: `false`
17
+
18
+ Step 1:
19
+
20
+ - action: increase `rotational_transform` by `medium`
21
+ - expectation: improve iota without changing triangularity much
22
+ - result: feasibility stayed effectively flat at `0.050653`
23
+ - reward: `-0.1`
24
+ - interpretation: legible but weak; this move alone does not solve the boundary issue
25
+
26
+ Step 2:
27
+
28
+ - action: increase `triangularity_scale` by `medium`
29
+ - expectation: push the boundary over the triangularity threshold
30
+ - result: low-fidelity feasibility moved to `0.0`
31
+ - result: low-fidelity score moved to `0.291660`
32
+ - constraints satisfied: `true`
33
+ - reward: `+3.1533`
34
+ - interpretation: good reward behavior; the feasibility crossing was clearly positive and easy to understand
35
+
36
+ Episode B: move the wrong way
37
+
38
+ Start state:
39
+
40
+ - same default reset seed
41
+
42
+ Step 1:
43
+
44
+ - action: decrease `triangularity_scale` by `medium`
45
+ - expectation: worsen triangularity and move away from feasibility
46
+ - result: feasibility worsened to `0.107113`
47
+ - reward: `-0.3823`
48
+ - interpretation: good negative signal; the environment penalized an obviously bad move without needing a complicated reward term
49
+
50
+ Current conclusion:
51
+
52
+ - Reward V0 is legible on the low-fidelity repair path around the default reset seed
53
+ - the most useful next manual check is still a real `submit` trace, but low-fidelity shaping is already understandable by a human
docs/P1_MEASURED_SWEEP_NOTE.md ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # P1 Measured Sweep Note
2
+
3
+ Artifact:
4
+
5
+ - `baselines/sweep_results/measured_sweep_20260308T050043Z.json`
6
+
7
+ Run shape:
8
+
9
+ - repaired 4-knob family
10
+ - low-fidelity verifier only
11
+ - `3 x 3 x 3 x 3 = 81` configurations
12
+
13
+ Summary:
14
+
15
+ - total configurations: `81`
16
+ - evaluated successfully: `63`
17
+ - crashed: `18`
18
+ - feasible: `0`
19
+ - crash rate: `22.2%`
20
+
21
+ Most useful result:
22
+
23
+ - the best coarse near-boundary point was:
24
+ - `aspect_ratio=3.8`
25
+ - `elongation=1.8`
26
+ - `rotational_transform=1.55`
27
+ - `triangularity_scale=0.55`
28
+ - `p1_feasibility=0.035208`
29
+
30
+ What the sweep tells us:
31
+
32
+ - the repaired family does have a usable near-boundary band
33
+ - coarse global resolution is still too blunt to capture the small low-fidelity feasible pocket seen in targeted local probes
34
+ - `rotational_transform=1.55` performed better than `1.2`, while `1.9` produced a concentrated crash zone
35
+ - `triangularity_scale=0.55` was the best coarse setting overall; `0.7` improved triangularity but also increased crash rate
36
+
37
+ Actionable conclusion:
38
+
39
+ - keep the current ranges and deltas for now
40
+ - do not freeze a new default reset seed from the coarse sweep alone
41
+ - use the coarse sweep plus local probes to drive the first tracked fixtures and manual playtesting
server/data/p1/FIXTURE_SANITY.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # P1 Fixture Sanity
2
+
3
+ This folder now contains three low-fidelity-calibrated `P1` fixtures:
4
+
5
+ - `boundary_default_reset.json`
6
+ - `bad_low_iota.json`
7
+ - `lowfi_feasible_local.json`
8
+
9
+ Calibration source:
10
+
11
+ - coarse measured sweep artifact: `baselines/sweep_results/measured_sweep_20260308T050043Z.json`
12
+ - targeted local probes around the default reset seed
13
+
14
+ Current interpretation:
15
+
16
+ - `boundary_default_reset.json`
17
+ - near-boundary reset reference
18
+ - infeasible, but close enough that short repair episodes are realistic
19
+ - `bad_low_iota.json`
20
+ - clearly bad infeasible case
21
+ - demonstrates that edge iota can be the blocking constraint even when triangularity is already acceptable
22
+ - `lowfi_feasible_local.json`
23
+ - low-fidelity feasible local target
24
+ - reachable from the default reset band with two intuitive knob increases
25
+
26
+ What is still pending:
27
+
28
+ - paired high-fidelity submit measurements for each tracked fixture
29
+ - low-fi vs high-fi ranking comparison note
30
+ - decision on whether any reset seed should be changed from the current default
server/data/p1/README.md CHANGED
@@ -13,8 +13,15 @@ These fixtures are for verifier and reward sanity checks.
13
  ## Status
14
 
15
  - [ ] known-good or near-winning fixture added
16
- - [ ] near-boundary fixture added
17
- - [ ] clearly infeasible fixture added
18
- - [ ] fixture sanity note written
 
 
 
 
 
 
 
19
 
20
  Do not copy the old `ai-sci-feasible-designs` harness here. Reuse only the specific JSON artifacts needed for the fresh `P1` environment.
 
13
  ## Status
14
 
15
  - [ ] known-good or near-winning fixture added
16
+ - [x] near-boundary fixture added
17
+ - [x] clearly infeasible fixture added
18
+ - [x] fixture sanity note written
19
+
20
+ Current tracked files:
21
+
22
+ - `boundary_default_reset.json`
23
+ - `bad_low_iota.json`
24
+ - `lowfi_feasible_local.json`
25
+ - `FIXTURE_SANITY.md`
26
 
27
  Do not copy the old `ai-sci-feasible-designs` harness here. Reuse only the specific JSON artifacts needed for the fresh `P1` environment.
server/data/p1/bad_low_iota.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "bad_low_iota",
3
+ "status": "low_fidelity_calibrated",
4
+ "notes": [
5
+ "Clearly infeasible calibration case from the coarse measured sweep.",
6
+ "The dominant failure mode is low edge_iota_over_nfp, not triangularity.",
7
+ "High-fidelity submit spot check is still pending."
8
+ ],
9
+ "params": {
10
+ "aspect_ratio": 3.2,
11
+ "elongation": 1.8,
12
+ "rotational_transform": 1.2,
13
+ "triangularity_scale": 0.7
14
+ },
15
+ "low_fidelity": {
16
+ "evaluation_failed": false,
17
+ "constraints_satisfied": false,
18
+ "p1_score": 0.0,
19
+ "p1_feasibility": 0.575134593927855,
20
+ "max_elongation": 5.983792904658967,
21
+ "aspect_ratio": 2.802311169335037,
22
+ "average_triangularity": -0.5512332332730122,
23
+ "edge_iota_over_nfp": 0.12745962182164347,
24
+ "vacuum_well": -1.0099648537211192
25
+ },
26
+ "high_fidelity": null
27
+ }
server/data/p1/boundary_default_reset.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "boundary_default_reset",
3
+ "status": "low_fidelity_calibrated",
4
+ "notes": [
5
+ "Matches the current default reset seed.",
6
+ "Useful as a near-boundary starting point for short repair episodes.",
7
+ "High-fidelity submit spot check is still pending."
8
+ ],
9
+ "params": {
10
+ "aspect_ratio": 3.6,
11
+ "elongation": 1.4,
12
+ "rotational_transform": 1.5,
13
+ "triangularity_scale": 0.55
14
+ },
15
+ "low_fidelity": {
16
+ "evaluation_failed": false,
17
+ "constraints_satisfied": false,
18
+ "p1_score": 0.0,
19
+ "p1_feasibility": 0.0506528382250242,
20
+ "max_elongation": 6.13677115978351,
21
+ "aspect_ratio": 3.31313049868072,
22
+ "average_triangularity": -0.4746735808874879,
23
+ "edge_iota_over_nfp": 0.2906263991807532,
24
+ "vacuum_well": -0.7537878932672235
25
+ },
26
+ "high_fidelity": null
27
+ }
server/data/p1/lowfi_feasible_local.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "lowfi_feasible_local",
3
+ "status": "low_fidelity_calibrated",
4
+ "notes": [
5
+ "Local repair target reached from the default reset band by increasing rotational_transform and triangularity_scale.",
6
+ "Useful as a low-fidelity feasibility reference for Reward V0 sanity checks.",
7
+ "High-fidelity submit spot check is still pending."
8
+ ],
9
+ "params": {
10
+ "aspect_ratio": 3.6,
11
+ "elongation": 1.4,
12
+ "rotational_transform": 1.6,
13
+ "triangularity_scale": 0.6
14
+ },
15
+ "low_fidelity": {
16
+ "evaluation_failed": false,
17
+ "constraints_satisfied": true,
18
+ "p1_score": 0.29165951078327634,
19
+ "p1_feasibility": 0.0,
20
+ "max_elongation": 7.375064402950513,
21
+ "aspect_ratio": 3.2870514531062405,
22
+ "average_triangularity": -0.5002923204919443,
23
+ "edge_iota_over_nfp": 0.30046082924426193,
24
+ "vacuum_well": -0.7949586699110935
25
+ },
26
+ "high_fidelity": null
27
+ }