betterwithage Claude Opus 4.7 commited on
Commit
e0be5bb
·
verified ·
1 Parent(s): d56fac1

deploy(hf): sync szl-holdings/a11oy@main derived COPY set

Browse files

Reusable 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>

Files changed (2) hide show
  1. benchmarks/pinn/results.json +126 -23
  2. 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 + DeepXDE on this CPU box); Modulus NOT-RUN",
5
- "ran_at": "2026-07-02T05:46:02Z",
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": "NOT-RUN",
 
 
 
 
44
  "license": "Apache-2.0",
45
- "note": "NVIDIA Modulus was renamed PhysicsNeMo (same framework)."
 
 
 
 
 
 
 
46
  }
47
  },
48
  "problems": [
@@ -102,10 +113,39 @@
102
  },
103
  {
104
  "framework": "modulus_physicsnemo",
105
- "label": "NOT-RUN",
106
- "reason": "NVIDIA Modulus (renamed PhysicsNeMo) requires a CUDA GPU; this benchmark box is CPU-only (0 GPUs).",
107
- "note": "NVIDIA Modulus was renamed to PhysicsNeMo \u2014 same framework lineage.",
108
- "reproduce": "on a CUDA GPU host: `pip install nvidia-physicsnemo`; port the 'poisson' 1D residual to a PhysicsNeMo PDE + constraint and train; report rel-L2 vs the same exact closed form."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
110
  ]
111
  },
@@ -170,10 +210,43 @@
170
  },
171
  {
172
  "framework": "modulus_physicsnemo",
173
- "label": "NOT-RUN",
174
- "reason": "NVIDIA Modulus (renamed PhysicsNeMo) requires a CUDA GPU; this benchmark box is CPU-only (0 GPUs).",
175
- "note": "NVIDIA Modulus was renamed to PhysicsNeMo \u2014 same framework lineage.",
176
- "reproduce": "on a CUDA GPU host: `pip install nvidia-physicsnemo`; port the 'burgers' 1D residual to a PhysicsNeMo PDE + constraint and train; report rel-L2 vs the same exact closed form."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  }
178
  ]
179
  },
@@ -240,26 +313,56 @@
240
  },
241
  {
242
  "framework": "modulus_physicsnemo",
243
- "label": "NOT-RUN",
244
- "reason": "NVIDIA Modulus (renamed PhysicsNeMo) requires a CUDA GPU; this benchmark box is CPU-only (0 GPUs).",
245
- "note": "NVIDIA Modulus was renamed to PhysicsNeMo \u2014 same framework lineage.",
246
- "reproduce": "on a CUDA GPU host: `pip install nvidia-physicsnemo`; port the 'duffing' 1D residual to a PhysicsNeMo PDE + constraint and train; report rel-L2 vs the same exact closed form."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  }
248
  ]
249
  }
250
  ],
251
  "interpretation": {
252
- "poisson": "SZL is ~machine precision BY CONSTRUCTION (solution in basis, disclosed); DeepXDE reaches a solid neural-PINN accuracy without knowing the basis.",
253
- "burgers": "honest nonlinear head-to-head: SZL's new Newton-spectral solver and the neural PINN both target the exact tanh shock; compare rel-L2 and wall time. The DeepXDE arm is a STANDARD, non-shock-adapted PINN \u2014 shock-adaptation (RAR / curriculum / hard-BC) is NOT-TESTED and would likely narrow the gap.",
254
- "duffing": "both recover \u03b1 from the same data; compare |\u03b1\u0302-1| and cost."
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 and wall-time numbers are MEASURED on this box against the exact closed form; \u22653 seeds are reported as median[min,max] for the neural arm. No joules are reported (NOT-MEASURED: no power meter). Poisson's in-basis advantage is disclosed. DeepXDE (LGPL) is benchmark-only and never shipped. Modulus/PhysicsNeMo is NOT-RUN with a reproduce spec (no GPU).",
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": "requires a CUDA GPU host with nvidia-physicsnemo (see each problem's modulus arm)"
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 {"&":"&amp;","<":"&lt;",">":"&gt;"}[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>