Spaces:
Running
Running
deploy(hf): sync szl-holdings/a11oy@main derived COPY set
Browse filesReusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy main.
Files: 826 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).
Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- benchmarks/pinn/results.json +126 -23
- pages/benchmark.html +208 -0
benchmarks/pinn/results.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
| 1 |
{
|
| 2 |
"service": "a11oy.pinn.bench",
|
| 3 |
"title": "SZL Governed spectral collocation vs DeepXDE (neural PINN) vs Modulus/PhysicsNeMo",
|
| 4 |
-
"overall_label": "MEASURED (SZL
|
| 5 |
-
"ran_at": "2026-07-
|
| 6 |
"hardware": {
|
| 7 |
"cpus": 2,
|
| 8 |
"ram_gib": 15,
|
| 9 |
"gpu": null,
|
| 10 |
"torch_threads": 2,
|
| 11 |
-
"note": "Replit sandbox \u2014 CPU-only, no CUDA GPU"
|
| 12 |
},
|
| 13 |
"frameworks": {
|
| 14 |
"szl": {
|
|
@@ -39,10 +39,21 @@
|
|
| 39 |
}
|
| 40 |
},
|
| 41 |
"modulus_physicsnemo": {
|
| 42 |
-
"method_class": "neural PINN (NVIDIA)",
|
| 43 |
-
"status": "
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
"license": "Apache-2.0",
|
| 45 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
}
|
| 47 |
},
|
| 48 |
"problems": [
|
|
@@ -102,10 +113,39 @@
|
|
| 102 |
},
|
| 103 |
{
|
| 104 |
"framework": "modulus_physicsnemo",
|
| 105 |
-
"
|
| 106 |
-
"
|
| 107 |
-
"
|
| 108 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
}
|
| 110 |
]
|
| 111 |
},
|
|
@@ -170,10 +210,43 @@
|
|
| 170 |
},
|
| 171 |
{
|
| 172 |
"framework": "modulus_physicsnemo",
|
| 173 |
-
"
|
| 174 |
-
"
|
| 175 |
-
"
|
| 176 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
}
|
| 178 |
]
|
| 179 |
},
|
|
@@ -240,26 +313,56 @@
|
|
| 240 |
},
|
| 241 |
{
|
| 242 |
"framework": "modulus_physicsnemo",
|
| 243 |
-
"
|
| 244 |
-
"
|
| 245 |
-
"
|
| 246 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
}
|
| 248 |
]
|
| 249 |
}
|
| 250 |
],
|
| 251 |
"interpretation": {
|
| 252 |
-
"poisson": "SZL is ~machine precision BY CONSTRUCTION (solution in basis, disclosed); DeepXDE
|
| 253 |
-
"burgers": "honest nonlinear head-to-head: SZL's
|
| 254 |
-
"duffing": "
|
| 255 |
},
|
| 256 |
"scope_limits": "This is a LOW-DIMENSIONAL (1D), SMOOTH, CPU-ONLY suite with KNOWN good bases. It structurally favors spectral methods. The regimes neural PINNs are designed for \u2014 high dimension (curse-of-dimensionality resistance), complex/irregular geometry, and problems with NO known good basis \u2014 are NOT exercised here and are reported as NOT-TESTED, not as a neural-arm loss. Do not read SZL wins on this suite as universal superiority.",
|
| 257 |
-
"honesty": "All rel-L2
|
| 258 |
"doctrine": "Doctrine v11 LOCKED \u2014 no fabricated numbers; MEASURED/MODELED/NOT-RUN/NOT-MEASURED/NOT-TESTED labels only.",
|
| 259 |
"reproduce": {
|
| 260 |
"szl": "python benchmarks/pinn/run_bench.py --arm szl",
|
| 261 |
"deepxde": "python benchmarks/pinn/run_bench.py --arm deepxde --problem {poisson|burgers|duffing} --seeds 3",
|
| 262 |
"assemble": "python benchmarks/pinn/run_bench.py --assemble --out benchmarks/pinn/results.json",
|
| 263 |
-
"modulus": "
|
| 264 |
}
|
| 265 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"service": "a11oy.pinn.bench",
|
| 3 |
"title": "SZL Governed spectral collocation vs DeepXDE (neural PINN) vs Modulus/PhysicsNeMo",
|
| 4 |
+
"overall_label": "MEASURED 3-way (SZL classical spectral on CPU; DeepXDE and NVIDIA Modulus/PhysicsNeMo neural PINNs \u2014 both neural arms GPU-measured, see each arm's framework_versions/device)",
|
| 5 |
+
"ran_at": "2026-07-02T08:21:33Z",
|
| 6 |
"hardware": {
|
| 7 |
"cpus": 2,
|
| 8 |
"ram_gib": 15,
|
| 9 |
"gpu": null,
|
| 10 |
"torch_threads": 2,
|
| 11 |
+
"note": "Replit sandbox \u2014 CPU-only, no CUDA GPU. NOTE: the DeepXDE and PhysicsNeMo neural partials, when present, were MEASURED on a CUDA GPU host (see each arm's framework_versions/device), not on this assemble host."
|
| 12 |
},
|
| 13 |
"frameworks": {
|
| 14 |
"szl": {
|
|
|
|
| 39 |
}
|
| 40 |
},
|
| 41 |
"modulus_physicsnemo": {
|
| 42 |
+
"method_class": "neural PINN (NVIDIA; PhysicsNeMo FullyConnected core model + manual PDE-residual loop, Adam + L-BFGS)",
|
| 43 |
+
"status": "MEASURED",
|
| 44 |
+
"deps": [
|
| 45 |
+
"nvidia-physicsnemo",
|
| 46 |
+
"pytorch-cuda"
|
| 47 |
+
],
|
| 48 |
"license": "Apache-2.0",
|
| 49 |
+
"shipped": false,
|
| 50 |
+
"usage": "benchmark-only dev dependency; NEVER imported by serve.py or any shipped module. The /pinn/bench endpoint only reads this artifact.",
|
| 51 |
+
"versions": {
|
| 52 |
+
"physicsnemo": "2.1.1",
|
| 53 |
+
"torch": "2.12.1+cu130",
|
| 54 |
+
"backend": "pytorch-cuda"
|
| 55 |
+
},
|
| 56 |
+
"note": "NVIDIA Modulus was renamed PhysicsNeMo (same framework). Uses the PhysicsNeMo core model layer (physicsnemo.models.mlp.FullyConnected), NOT the PhysicsNeMo-Sym PDE DSL."
|
| 57 |
}
|
| 58 |
},
|
| 59 |
"problems": [
|
|
|
|
| 113 |
},
|
| 114 |
{
|
| 115 |
"framework": "modulus_physicsnemo",
|
| 116 |
+
"method_class": "neural PINN (PhysicsNeMo FullyConnected MLP; manual PDE-residual loop, Adam + L-BFGS)",
|
| 117 |
+
"license": "Apache-2.0 (NVIDIA PhysicsNeMo; benchmark-only dev dependency, NOT shipped)",
|
| 118 |
+
"seeds_run": 3,
|
| 119 |
+
"rel_l2_vs_exact": {
|
| 120 |
+
"median": 0.0002990356588270515,
|
| 121 |
+
"min": 0.00014039473899174482,
|
| 122 |
+
"max": 0.0009063577745109797,
|
| 123 |
+
"n": 3
|
| 124 |
+
},
|
| 125 |
+
"wall_s": {
|
| 126 |
+
"median": 100.17,
|
| 127 |
+
"min": 98.15,
|
| 128 |
+
"max": 124.26,
|
| 129 |
+
"n": 3
|
| 130 |
+
},
|
| 131 |
+
"trainable_params": 2209,
|
| 132 |
+
"config": {
|
| 133 |
+
"net": "FNN [1,32,32,32,1] tanh (PhysicsNeMo FullyConnected, num_layers=3, layer_size=32)",
|
| 134 |
+
"optimizer": "Adam 8000 iters (lr=1e-3) + L-BFGS (max_iter=2000, strong_wolfe)",
|
| 135 |
+
"num_domain": 64,
|
| 136 |
+
"num_boundary": 2,
|
| 137 |
+
"num_eval": 400,
|
| 138 |
+
"loss_weights": null
|
| 139 |
+
},
|
| 140 |
+
"framework_versions": {
|
| 141 |
+
"physicsnemo": "2.1.1",
|
| 142 |
+
"torch": "2.12.1+cu130",
|
| 143 |
+
"backend": "pytorch-cuda"
|
| 144 |
+
},
|
| 145 |
+
"device": "NVIDIA GeForce RTX 5050 Laptop GPU",
|
| 146 |
+
"label": "MEASURED",
|
| 147 |
+
"energy": "NOT-MEASURED (no power meter)",
|
| 148 |
+
"note": "Uses PhysicsNeMo core model layer (physicsnemo.models.mlp.FullyConnected), NOT the PhysicsNeMo-Sym PDE DSL. Same net/optimizer budget and same exact solutions as the DeepXDE arm for an apples-to-apples neural comparison."
|
| 149 |
}
|
| 150 |
]
|
| 151 |
},
|
|
|
|
| 210 |
},
|
| 211 |
{
|
| 212 |
"framework": "modulus_physicsnemo",
|
| 213 |
+
"method_class": "neural PINN (PhysicsNeMo FullyConnected MLP; manual PDE-residual loop, Adam + L-BFGS)",
|
| 214 |
+
"license": "Apache-2.0 (NVIDIA PhysicsNeMo; benchmark-only dev dependency, NOT shipped)",
|
| 215 |
+
"seeds_run": 3,
|
| 216 |
+
"rel_l2_vs_exact": {
|
| 217 |
+
"median": 0.6442221403121948,
|
| 218 |
+
"min": 0.5102550387382507,
|
| 219 |
+
"max": 0.6993206143379211,
|
| 220 |
+
"n": 3
|
| 221 |
+
},
|
| 222 |
+
"wall_s": {
|
| 223 |
+
"median": 98.22,
|
| 224 |
+
"min": 97.94,
|
| 225 |
+
"max": 103.09,
|
| 226 |
+
"n": 3
|
| 227 |
+
},
|
| 228 |
+
"trainable_params": 3401,
|
| 229 |
+
"config": {
|
| 230 |
+
"net": "FNN [1,40,40,40,1] tanh (PhysicsNeMo FullyConnected, num_layers=3, layer_size=40)",
|
| 231 |
+
"optimizer": "Adam 8000 iters (lr=1e-3) + L-BFGS (max_iter=2000, strong_wolfe)",
|
| 232 |
+
"num_domain": 200,
|
| 233 |
+
"num_boundary": 2,
|
| 234 |
+
"num_eval": 400,
|
| 235 |
+
"loss_weights": [
|
| 236 |
+
1.0,
|
| 237 |
+
100.0
|
| 238 |
+
]
|
| 239 |
+
},
|
| 240 |
+
"framework_versions": {
|
| 241 |
+
"physicsnemo": "2.1.1",
|
| 242 |
+
"torch": "2.12.1+cu130",
|
| 243 |
+
"backend": "pytorch-cuda"
|
| 244 |
+
},
|
| 245 |
+
"device": "NVIDIA GeForce RTX 5050 Laptop GPU",
|
| 246 |
+
"label": "MEASURED",
|
| 247 |
+
"energy": "NOT-MEASURED (no power meter)",
|
| 248 |
+
"caveat": "STANDARD, non-shock-adapted PINN config IDENTICAL to the DeepXDE arm; shock-adaptation (RAR / curriculum / hard-BC) is NOT-TESTED \u2014 the large burgers error reflects the vanilla config, NOT a neural-PINN ceiling.",
|
| 249 |
+
"note": "Uses PhysicsNeMo core model layer (physicsnemo.models.mlp.FullyConnected), NOT the PhysicsNeMo-Sym PDE DSL. Same net/optimizer budget and same exact solutions as the DeepXDE arm for an apples-to-apples neural comparison."
|
| 250 |
}
|
| 251 |
]
|
| 252 |
},
|
|
|
|
| 313 |
},
|
| 314 |
{
|
| 315 |
"framework": "modulus_physicsnemo",
|
| 316 |
+
"method_class": "neural PINN (PhysicsNeMo FullyConnected MLP; manual PDE-residual loop, Adam + L-BFGS)",
|
| 317 |
+
"license": "Apache-2.0 (NVIDIA PhysicsNeMo; benchmark-only dev dependency, NOT shipped)",
|
| 318 |
+
"seeds_run": 3,
|
| 319 |
+
"abs_err": {
|
| 320 |
+
"median": 1.1980533599853516e-05,
|
| 321 |
+
"min": 1.0788440704345703e-05,
|
| 322 |
+
"max": 0.0006236433982849121,
|
| 323 |
+
"n": 3
|
| 324 |
+
},
|
| 325 |
+
"wall_s": {
|
| 326 |
+
"median": 290.45,
|
| 327 |
+
"min": 228.52,
|
| 328 |
+
"max": 530.21,
|
| 329 |
+
"n": 3
|
| 330 |
+
},
|
| 331 |
+
"trainable_params": 3401,
|
| 332 |
+
"config": {
|
| 333 |
+
"net": "FNN [1,40,40,40,1] tanh (PhysicsNeMo FullyConnected, num_layers=3, layer_size=40)",
|
| 334 |
+
"optimizer": "Adam 10000 iters (lr=1e-3) + L-BFGS (max_iter=3000, strong_wolfe)",
|
| 335 |
+
"num_domain": 200,
|
| 336 |
+
"num_boundary": 2,
|
| 337 |
+
"anchors": "120 observation points; alpha init=2.0"
|
| 338 |
+
},
|
| 339 |
+
"framework_versions": {
|
| 340 |
+
"physicsnemo": "2.1.1",
|
| 341 |
+
"torch": "2.12.1+cu130",
|
| 342 |
+
"backend": "pytorch-cuda"
|
| 343 |
+
},
|
| 344 |
+
"device": "NVIDIA GeForce RTX 5050 Laptop GPU",
|
| 345 |
+
"label": "MEASURED (fit error vs synthetic ground truth; not measured physics)",
|
| 346 |
+
"energy": "NOT-MEASURED (no power meter)",
|
| 347 |
+
"alpha_estimate_median": 0.9999880194664001,
|
| 348 |
+
"alpha_truth": 1.0,
|
| 349 |
+
"note": "Uses PhysicsNeMo core model layer (physicsnemo.models.mlp.FullyConnected), NOT the PhysicsNeMo-Sym PDE DSL. Same net/optimizer budget and same exact solutions as the DeepXDE arm for an apples-to-apples neural comparison."
|
| 350 |
}
|
| 351 |
]
|
| 352 |
}
|
| 353 |
],
|
| 354 |
"interpretation": {
|
| 355 |
+
"poisson": "SZL is ~machine precision BY CONSTRUCTION (solution in basis, disclosed); both neural PINNs (DeepXDE and PhysicsNeMo) reach solid neural accuracy without knowing the basis.",
|
| 356 |
+
"burgers": "honest nonlinear head-to-head: SZL's Newton-spectral solver targets the exact tanh shock. BOTH neural arms are STANDARD, non-shock-adapted PINNs and land at ~0.5\u20130.7 rel-L2 (vanilla config, not a ceiling); shock-adaptation (RAR / curriculum / hard-BC) is NOT-TESTED for either.",
|
| 357 |
+
"duffing": "all three recover \u03b1 from the SAME synthetic data; compare |\u03b1\u0302-1| and cost. PhysicsNeMo's L-BFGS fit is typically the tightest."
|
| 358 |
},
|
| 359 |
"scope_limits": "This is a LOW-DIMENSIONAL (1D), SMOOTH, CPU-ONLY suite with KNOWN good bases. It structurally favors spectral methods. The regimes neural PINNs are designed for \u2014 high dimension (curse-of-dimensionality resistance), complex/irregular geometry, and problems with NO known good basis \u2014 are NOT exercised here and are reported as NOT-TESTED, not as a neural-arm loss. Do not read SZL wins on this suite as universal superiority.",
|
| 360 |
+
"honesty": "All rel-L2 / |\u03b1\u0302-1| / wall-time numbers are MEASURED against the exact closed form or synthetic ground truth; the two neural arms report 3 seeds as median[min,max]. No joules (NOT-MEASURED: no power meter). Poisson's in-basis advantage is disclosed. DeepXDE (LGPL) and NVIDIA PhysicsNeMo (Apache-2.0) are BOTH benchmark-only dev dependencies, never imported by shipped code. The PhysicsNeMo arm uses the core FullyConnected model (not PhysicsNeMo-Sym), mirroring the DeepXDE net/optimizer budget and exact solutions. The two neural arms ran on the SAME GPU but may differ in CUDA stack (see each arm's framework_versions) \u2014 accuracy is apples-to-apples, wall_s only broadly comparable.",
|
| 361 |
"doctrine": "Doctrine v11 LOCKED \u2014 no fabricated numbers; MEASURED/MODELED/NOT-RUN/NOT-MEASURED/NOT-TESTED labels only.",
|
| 362 |
"reproduce": {
|
| 363 |
"szl": "python benchmarks/pinn/run_bench.py --arm szl",
|
| 364 |
"deepxde": "python benchmarks/pinn/run_bench.py --arm deepxde --problem {poisson|burgers|duffing} --seeds 3",
|
| 365 |
"assemble": "python benchmarks/pinn/run_bench.py --assemble --out benchmarks/pinn/results.json",
|
| 366 |
+
"modulus": "python benchmarks/pinn/run_modulus.py --problem {poisson|burgers|duffing} --seeds 3 --out benchmarks/pinn/modulus_partial (CUDA GPU host with `pip install nvidia-physicsnemo`); then --assemble picks up modulus_partial/"
|
| 367 |
}
|
| 368 |
}
|
pages/benchmark.html
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html><html lang="en"><head><meta charset="utf-8">
|
| 2 |
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 3 |
+
<title>a11oy · Verifiable-AI Benchmark — 3-way MEASURED PINN (SZL vs DeepXDE vs NVIDIA PhysicsNeMo)</title>
|
| 4 |
+
<meta name="description" content="An honest, measured 3-way physics-informed-neural-network benchmark: SZL governed spectral (CPU) vs DeepXDE (GPU) vs NVIDIA PhysicsNeMo/Modulus (GPU). Every number carries its provenance label; the artifact passes the a11oy honesty gate in CI.">
|
| 5 |
+
<!-- SPDX-License-Identifier: Apache-2.0 · © 2026 SZL Holdings · Doctrine v11 · Signed: Forge -->
|
| 6 |
+
<style>
|
| 7 |
+
:root{--bg:#0a0b10;--panel:#12141d;--panel2:#171a25;--ink:#e8eaf0;--mut:#9aa0b4;--gold:#d9b35c;--line:#252938;--grn:#3fb950;--amb:#d29922;--red:#f85149;--blu:#5cc4bf;}
|
| 8 |
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
|
| 9 |
+
a{color:var(--gold);text-decoration:none}a:hover{text-decoration:underline}
|
| 10 |
+
header{border-bottom:1px solid var(--line);padding:14px 22px;display:flex;align-items:center;gap:14px;background:linear-gradient(180deg,#10121b,#0a0b10)}
|
| 11 |
+
header .brand{font-weight:700;letter-spacing:.5px;color:var(--gold);font-size:18px}
|
| 12 |
+
header .tag{color:var(--mut);font-size:12px}
|
| 13 |
+
nav{display:flex;flex-wrap:wrap;gap:8px;padding:10px 22px;border-bottom:1px solid var(--line);background:var(--panel)}
|
| 14 |
+
nav a{font-size:12.5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;color:var(--mut)}
|
| 15 |
+
nav a:hover{border-color:var(--gold);color:var(--gold);text-decoration:none}
|
| 16 |
+
nav a.active{background:var(--gold);color:#0a0b10;border-color:var(--gold);font-weight:600}
|
| 17 |
+
main{max-width:1080px;margin:0 auto;padding:28px 22px 60px}
|
| 18 |
+
h1{font-size:27px;margin:0 0 6px;color:#fff}h2{font-size:18px;margin:30px 0 10px;color:var(--gold)}
|
| 19 |
+
.sub{color:var(--mut);margin:0 0 18px;font-size:13.5px}
|
| 20 |
+
.hero{background:linear-gradient(180deg,#141826,#0e1119);border:1px solid var(--line);border-radius:14px;padding:22px 24px;margin:14px 0 8px}
|
| 21 |
+
.hero .lede{font-size:15.5px;color:#d8dbe6;max-width:80ch}
|
| 22 |
+
.badges{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 2px}
|
| 23 |
+
.badge{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border-radius:999px;font-size:12.5px;font-weight:600;border:1px solid var(--line);background:var(--panel2)}
|
| 24 |
+
.badge .dot{width:8px;height:8px;border-radius:50%}
|
| 25 |
+
.badge.ok{border-color:rgba(63,185,80,.5);color:var(--grn)}.badge.ok .dot{background:var(--grn)}
|
| 26 |
+
.badge.info{border-color:rgba(92,196,191,.5);color:var(--blu)}.badge.info .dot{background:var(--blu)}
|
| 27 |
+
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px 20px;margin:14px 0}
|
| 28 |
+
.meta{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin:12px 0}
|
| 29 |
+
.meta .m{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
|
| 30 |
+
.meta .m .k{color:var(--mut);font-size:11px;text-transform:uppercase;letter-spacing:.4px}
|
| 31 |
+
.meta .m .v{color:var(--ink);font-size:13.5px;margin-top:3px}
|
| 32 |
+
table{width:100%;border-collapse:collapse;margin:10px 0;font-size:13.5px}
|
| 33 |
+
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
|
| 34 |
+
th{color:var(--mut);font-weight:600;font-size:11.5px;text-transform:uppercase;letter-spacing:.4px}
|
| 35 |
+
td .fw{font-weight:600;color:#fff}td .mc{color:var(--mut);font-size:12px}
|
| 36 |
+
.num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
|
| 37 |
+
.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600}
|
| 38 |
+
.g{background:rgba(63,185,80,.15);color:var(--grn)}.a{background:rgba(210,153,34,.15);color:var(--amb)}.r{background:rgba(248,81,73,.15);color:var(--red)}.n{background:#1c2030;color:var(--mut)}.b{background:rgba(92,196,191,.14);color:var(--blu)}
|
| 39 |
+
.note{border-left:3px solid var(--gold);padding:9px 14px;background:rgba(217,179,92,.06);color:#d8dbe6;font-size:13px;margin:12px 0;border-radius:0 8px 8px 0}
|
| 40 |
+
.warn{border-left:3px solid var(--amb);background:rgba(210,153,34,.07)}
|
| 41 |
+
code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}
|
| 42 |
+
pre{background:#0d0f17;border:1px solid var(--line);border-radius:10px;padding:14px;overflow:auto;color:#cdd3e3}
|
| 43 |
+
footer{border-top:1px solid var(--line);color:var(--mut);font-size:11.5px;padding:18px 22px;line-height:1.7;margin-top:30px}
|
| 44 |
+
.eq{color:var(--blu)}
|
| 45 |
+
.small{font-size:12px;color:var(--mut)}
|
| 46 |
+
</style></head><body>
|
| 47 |
+
<header><span class="brand">a11oy</span><span class="tag">Verifiable AI · every number carries its proof</span></header>
|
| 48 |
+
<nav>
|
| 49 |
+
<a href="/console">← Console</a><a href="/pinn-console">PINN Console</a>
|
| 50 |
+
<a href="/benchmark" class="active">Benchmark</a><a href="/verify">Verify</a>
|
| 51 |
+
<a href="/assurance">Assurance</a><a href="/company">Company</a>
|
| 52 |
+
</nav>
|
| 53 |
+
<main>
|
| 54 |
+
<div class="hero">
|
| 55 |
+
<h1>The 3-way PINN benchmark — measured, not asserted</h1>
|
| 56 |
+
<p class="lede">SZL's governed classical spectral solver (CPU) versus two neural physics-informed
|
| 57 |
+
networks — <b>DeepXDE</b> and <b>NVIDIA PhysicsNeMo / Modulus</b> (both GPU). Three arms,
|
| 58 |
+
three problems, all <b>MEASURED</b> against exact closed forms or synthetic ground truth.
|
| 59 |
+
We publish the config, the seeds, the license of every dependency, and — most importantly —
|
| 60 |
+
<b>where this suite does <i>not</i> let us claim victory.</b> That last part is the product.</p>
|
| 61 |
+
<div class="badges">
|
| 62 |
+
<span class="badge ok"><span class="dot"></span>Honesty gate: PASS in CI</span>
|
| 63 |
+
<span class="badge info"><span class="dot"></span>Doctrine v11 labels</span>
|
| 64 |
+
<span class="badge info"><span class="dot"></span>Live artifact · <a href="/api/a11oy/v1/pinn/bench" style="color:inherit">/api/a11oy/v1/pinn/bench</a></span>
|
| 65 |
+
</div>
|
| 66 |
+
<p class="small" style="margin:10px 0 0">This page renders directly from the committed benchmark artifact — no numbers are typed into the page,
|
| 67 |
+
so it cannot drift from the source of truth. The same artifact must pass
|
| 68 |
+
<code>benchmarks/pinn/honesty_guard.py</code> before it can ship.</p>
|
| 69 |
+
</div>
|
| 70 |
+
|
| 71 |
+
<div id="status" class="note">Loading measured results from <code>/api/a11oy/v1/pinn/bench</code>…</div>
|
| 72 |
+
|
| 73 |
+
<div id="report" hidden>
|
| 74 |
+
<h2 id="benchTitle"></h2>
|
| 75 |
+
<p class="sub" id="overallLabel"></p>
|
| 76 |
+
<div class="meta" id="meta"></div>
|
| 77 |
+
<div id="problems"></div>
|
| 78 |
+
|
| 79 |
+
<h2>How to read this</h2>
|
| 80 |
+
<div class="card" id="interpretation"></div>
|
| 81 |
+
|
| 82 |
+
<h2>What we are <span style="color:var(--red)">not</span> claiming</h2>
|
| 83 |
+
<div class="note warn" id="scopeLimits"></div>
|
| 84 |
+
<div class="note" id="honesty"></div>
|
| 85 |
+
|
| 86 |
+
<h2>Reproduce it yourself</h2>
|
| 87 |
+
<p class="sub">Nothing here is take-our-word-for-it. The exact commands that produced the artifact:</p>
|
| 88 |
+
<pre id="reproduce"></pre>
|
| 89 |
+
<p class="small" id="doctrine"></p>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
<h2>Why this benchmark is different</h2>
|
| 93 |
+
<div class="card">
|
| 94 |
+
<p style="margin:0 0 10px">Content-provenance tools prove where a <i>file</i> came from. Governance platforms document a
|
| 95 |
+
<i>process</i>. Evaluation suites <i>score</i> a model. None of them <b>break the build when a result
|
| 96 |
+
overclaims.</b> a11oy does:</p>
|
| 97 |
+
<ul style="margin:0;color:#d8dbe6">
|
| 98 |
+
<li>Every reported number is stamped <span class="pill g">MEASURED</span> / <span class="pill b">MODELED</span> /
|
| 99 |
+
<span class="pill n">NOT-RUN</span> / <span class="pill n">NOT-MEASURED</span> / <span class="pill n">NOT-TESTED</span>.</li>
|
| 100 |
+
<li>A <b>measured</b> number with no evidence, or a <b>not-run</b> arm carrying a value, fails the honesty gate — the artifact cannot ship.</li>
|
| 101 |
+
<li>Our advantages are <b>disclosed</b>: e.g. the Poisson solution lives inside SZL's trial basis, so that near-machine-precision result is by construction, not a general-accuracy claim.</li>
|
| 102 |
+
</ul>
|
| 103 |
+
</div>
|
| 104 |
+
|
| 105 |
+
</main>
|
| 106 |
+
<footer>
|
| 107 |
+
SPDX-License-Identifier: Apache-2.0 · © 2026 SZL Holdings · a11oy — governed, verifiable AI · Doctrine v11.<br>
|
| 108 |
+
Data source: the committed <code>benchmarks/pinn/results.json</code>, served read-only at <code>/api/a11oy/v1/pinn/bench</code>.
|
| 109 |
+
DeepXDE (LGPL-2.1) and NVIDIA PhysicsNeMo/Modulus (Apache-2.0) are benchmark-only dev dependencies — never imported by shipped code.
|
| 110 |
+
</footer>
|
| 111 |
+
<script>
|
| 112 |
+
(function(){
|
| 113 |
+
var FW = {
|
| 114 |
+
szl: {name:"SZL", cls:"spectral collocation · CPU", tag:"b"},
|
| 115 |
+
deepxde: {name:"DeepXDE", cls:"neural PINN · GPU", tag:"n"},
|
| 116 |
+
modulus_physicsnemo: {name:"NVIDIA PhysicsNeMo / Modulus", cls:"neural PINN · GPU", tag:"n"}
|
| 117 |
+
};
|
| 118 |
+
function esc(s){return String(s==null?"":s).replace(/[&<>]/g,function(c){return {"&":"&","<":"<",">":">"}[c];});}
|
| 119 |
+
function fnum(v){
|
| 120 |
+
if(v==null) return "—";
|
| 121 |
+
if(typeof v!=="number") return esc(v);
|
| 122 |
+
var a=Math.abs(v);
|
| 123 |
+
if(a!==0 && (a<1e-2 || a>=1e4)) return v.toExponential(2);
|
| 124 |
+
return (Math.round(v*1e4)/1e4).toString();
|
| 125 |
+
}
|
| 126 |
+
function metricCell(arm,metric){
|
| 127 |
+
var v=arm[metric];
|
| 128 |
+
if(v==null) return '<span class="num">—</span>';
|
| 129 |
+
if(typeof v==="object"){
|
| 130 |
+
var m=fnum(v.median), lo=fnum(v.min), hi=fnum(v.max);
|
| 131 |
+
return '<span class="num">'+m+'</span> <span class="mc">('+lo+'–'+hi+', n='+esc(v.n)+')</span>';
|
| 132 |
+
}
|
| 133 |
+
return '<span class="num">'+fnum(v)+'</span>';
|
| 134 |
+
}
|
| 135 |
+
function wallCell(arm){
|
| 136 |
+
var w=arm.wall_s;
|
| 137 |
+
if(w==null) return '<span class="mc">—</span>';
|
| 138 |
+
if(typeof w==="object") return '<span class="num">'+fnum(w.median)+'s</span> <span class="mc">('+fnum(w.min)+'–'+fnum(w.max)+')</span>';
|
| 139 |
+
return '<span class="num">'+fnum(w)+'s</span>';
|
| 140 |
+
}
|
| 141 |
+
function labelPill(lbl){
|
| 142 |
+
if(!lbl) return '';
|
| 143 |
+
var head=String(lbl).split(" ")[0];
|
| 144 |
+
var cls = head.indexOf("MEASURED")===0?"g":head.indexOf("MODELED")===0?"b":"n";
|
| 145 |
+
return '<span class="pill '+cls+'">'+esc(head)+'</span>';
|
| 146 |
+
}
|
| 147 |
+
function render(d){
|
| 148 |
+
document.getElementById("status").hidden=true;
|
| 149 |
+
var rep=document.getElementById("report"); rep.hidden=false;
|
| 150 |
+
document.getElementById("benchTitle").textContent=d.title||"PINN benchmark";
|
| 151 |
+
document.getElementById("overallLabel").textContent=d.overall_label||"";
|
| 152 |
+
var hw=d.hardware||{};
|
| 153 |
+
var meta=[
|
| 154 |
+
["Assembled at", d.ran_at||"—"],
|
| 155 |
+
["Assemble host", (hw.cpus||"?")+" CPU · "+(hw.ram_gib||"?")+" GiB · GPU: "+(hw.gpu||"none")],
|
| 156 |
+
["Neural arms", "MEASURED on a CUDA GPU host (see each arm)"],
|
| 157 |
+
["Doctrine", "v11 — labelled numbers only"]
|
| 158 |
+
];
|
| 159 |
+
document.getElementById("meta").innerHTML=meta.map(function(m){
|
| 160 |
+
return '<div class="m"><div class="k">'+esc(m[0])+'</div><div class="v">'+esc(m[1])+'</div></div>';}).join("");
|
| 161 |
+
|
| 162 |
+
var out="";
|
| 163 |
+
(d.problems||[]).forEach(function(p){
|
| 164 |
+
var metric=p.metric||"rel_l2_vs_exact";
|
| 165 |
+
out+='<div class="card"><h3 style="margin:0 0 4px;color:#fff">'+esc(p.id)+'</h3>';
|
| 166 |
+
out+='<p class="small" style="margin:0 0 2px"><span class="eq">'+esc(p.pde)+'</span></p>';
|
| 167 |
+
out+='<p class="small" style="margin:0 0 8px">exact: '+esc(p.exact)+' · metric: <b>'+esc(metric)+'</b></p>';
|
| 168 |
+
out+='<table><thead><tr><th>Framework</th><th>Method</th><th>'+esc(metric)+'</th><th>wall</th><th>seeds</th><th>device</th><th>label</th></tr></thead><tbody>';
|
| 169 |
+
(p.arms||[]).forEach(function(a){
|
| 170 |
+
var fw=FW[a.framework]||{name:a.framework,cls:a.method_class||""};
|
| 171 |
+
var method=a.method||a.method_class||fw.cls||"";
|
| 172 |
+
out+='<tr><td><span class="fw">'+esc(fw.name)+'</span><br><span class="mc">'+esc(fw.cls)+'</span></td>'
|
| 173 |
+
+'<td class="mc">'+esc(method)+'</td>'
|
| 174 |
+
+'<td>'+metricCell(a,metric)+'</td>'
|
| 175 |
+
+'<td>'+wallCell(a)+'</td>'
|
| 176 |
+
+'<td class="mc">'+esc(a.seeds_run||(typeof a[metric]==="object"?a[metric].n:1))+'</td>'
|
| 177 |
+
+'<td class="mc">'+esc(a.device||(a.framework==="szl"?"CPU":"—"))+'</td>'
|
| 178 |
+
+'<td>'+labelPill(a.label)+'</td></tr>';
|
| 179 |
+
var extra=a.caveat||a.disclosure;
|
| 180 |
+
if(a.caveat) out+='<tr><td colspan="7" class="mc" style="border-bottom:1px solid var(--line);padding-top:0"><span class="pill a">caveat</span> '+esc(a.caveat)+'</td></tr>';
|
| 181 |
+
});
|
| 182 |
+
out+='</tbody></table>';
|
| 183 |
+
if(p.disclosure&&p.disclosure.note) out+='<div class="note">Disclosure: '+esc(p.disclosure.note)+'</div>';
|
| 184 |
+
out+='</div>';
|
| 185 |
+
});
|
| 186 |
+
document.getElementById("problems").innerHTML=out;
|
| 187 |
+
|
| 188 |
+
var interp=d.interpretation||{};
|
| 189 |
+
document.getElementById("interpretation").innerHTML=Object.keys(interp).map(function(k){
|
| 190 |
+
return '<p style="margin:6px 0"><b style="color:var(--gold)">'+esc(k)+':</b> '+esc(interp[k])+'</p>';}).join("");
|
| 191 |
+
document.getElementById("scopeLimits").innerHTML="<b>Scope limits.</b> "+esc(d.scope_limits||"");
|
| 192 |
+
document.getElementById("honesty").innerHTML="<b>Honesty.</b> "+esc(d.honesty||"");
|
| 193 |
+
var rep2=d.reproduce||{};
|
| 194 |
+
document.getElementById("reproduce").textContent=Object.keys(rep2).map(function(k){return "# "+k+"\n"+rep2[k];}).join("\n\n");
|
| 195 |
+
document.getElementById("doctrine").textContent=d.doctrine||"";
|
| 196 |
+
}
|
| 197 |
+
fetch("/api/a11oy/v1/pinn/bench",{headers:{accept:"application/json"}})
|
| 198 |
+
.then(function(r){ if(!r.ok) throw new Error("HTTP "+r.status); return r.json(); })
|
| 199 |
+
.then(render)
|
| 200 |
+
.catch(function(e){
|
| 201 |
+
document.getElementById("status").innerHTML=
|
| 202 |
+
'Live benchmark data is not reachable right now (<code>'+esc(e.message)+'</code>). '+
|
| 203 |
+
'The measured artifact is served at <a href="/api/a11oy/v1/pinn/bench">/api/a11oy/v1/pinn/bench</a> — '+
|
| 204 |
+
'this page intentionally shows no numbers it cannot fetch from that source.';
|
| 205 |
+
});
|
| 206 |
+
})();
|
| 207 |
+
</script>
|
| 208 |
+
</body></html>
|