Initial results: laplace-dirichlet-2d, mfs and nystrom-dlp on one machine
11 changed files+1360−0
.github/workflows/check.ymladded+15−0View file
@@ -0,0 +1,15 @@
1+name: check
2+on:
3+ pull_request:
4+ push:
5+ branches: [main]
6+
7+jobs:
8+ check:
9+ runs-on: ubuntu-latest
10+ steps:
11+ - uses: actions/checkout@v4
12+ - uses: actions/setup-node@v4
13+ with:
14+ node-version: 24
15+ - run: node scripts/build-index.mjs --check
LICENSEadded+202−0View file
@@ -0,0 +1,202 @@
1+
2+ Apache License
3+ Version 2.0, January 2004
4+ http://www.apache.org/licenses/
5+
6+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7+
8+ 1. Definitions.
9+
10+ "License" shall mean the terms and conditions for use, reproduction,
11+ and distribution as defined by Sections 1 through 9 of this document.
12+
13+ "Licensor" shall mean the copyright owner or entity authorized by
14+ the copyright owner that is granting the License.
15+
16+ "Legal Entity" shall mean the union of the acting entity and all
17+ other entities that control, are controlled by, or are under common
18+ control with that entity. For the purposes of this definition,
19+ "control" means (i) the power, direct or indirect, to cause the
20+ direction or management of such entity, whether by contract or
21+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22+ outstanding shares, or (iii) beneficial ownership of such entity.
23+
24+ "You" (or "Your") shall mean an individual or Legal Entity
25+ exercising permissions granted by this License.
26+
27+ "Source" form shall mean the preferred form for making modifications,
28+ including but not limited to software source code, documentation
29+ source, and configuration files.
30+
31+ "Object" form shall mean any form resulting from mechanical
32+ transformation or translation of a Source form, including but
33+ not limited to compiled object code, generated documentation,
34+ and conversions to other media types.
35+
36+ "Work" shall mean the work of authorship, whether in Source or
37+ Object form, made available under the License, as indicated by a
38+ copyright notice that is included in or attached to the work
39+ (an example is provided in the Appendix below).
40+
41+ "Derivative Works" shall mean any work, whether in Source or Object
42+ form, that is based on (or derived from) the Work and for which the
43+ editorial revisions, annotations, elaborations, or other modifications
44+ represent, as a whole, an original work of authorship. For the purposes
45+ of this License, Derivative Works shall not include works that remain
46+ separable from, or merely link (or bind by name) to the interfaces of,
47+ the Work and Derivative Works thereof.
48+
49+ "Contribution" shall mean any work of authorship, including
50+ the original version of the Work and any modifications or additions
51+ to that Work or Derivative Works thereof, that is intentionally
52+ submitted to Licensor for inclusion in the Work by the copyright owner
53+ or by an individual or Legal Entity authorized to submit on behalf of
54+ the copyright owner. For the purposes of this definition, "submitted"
55+ means any form of electronic, verbal, or written communication sent
56+ to the Licensor or its representatives, including but not limited to
57+ communication on electronic mailing lists, source code control systems,
58+ and issue tracking systems that are managed by, or on behalf of, the
59+ Licensor for the purpose of discussing and improving the Work, but
60+ excluding communication that is conspicuously marked or otherwise
61+ designated in writing by the copyright owner as "Not a Contribution."
62+
63+ "Contributor" shall mean Licensor and any individual or Legal Entity
64+ on behalf of whom a Contribution has been received by Licensor and
65+ subsequently incorporated within the Work.
66+
67+ 2. Grant of Copyright License. Subject to the terms and conditions of
68+ this License, each Contributor hereby grants to You a perpetual,
69+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70+ copyright license to reproduce, prepare Derivative Works of,
71+ publicly display, publicly perform, sublicense, and distribute the
72+ Work and such Derivative Works in Source or Object form.
73+
74+ 3. Grant of Patent License. Subject to the terms and conditions of
75+ this License, each Contributor hereby grants to You a perpetual,
76+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77+ (except as stated in this section) patent license to make, have made,
78+ use, offer to sell, sell, import, and otherwise transfer the Work,
79+ where such license applies only to those patent claims licensable
80+ by such Contributor that are necessarily infringed by their
81+ Contribution(s) alone or by combination of their Contribution(s)
82+ with the Work to which such Contribution(s) was submitted. If You
83+ institute patent litigation against any entity (including a
84+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85+ or a Contribution incorporated within the Work constitutes direct
86+ or contributory patent infringement, then any patent licenses
87+ granted to You under this License for that Work shall terminate
88+ as of the date such litigation is filed.
89+
90+ 4. Redistribution. You may reproduce and distribute copies of the
91+ Work or Derivative Works thereof in any medium, with or without
92+ modifications, and in Source or Object form, provided that You
93+ meet the following conditions:
94+
95+ (a) You must give any other recipients of the Work or
96+ Derivative Works a copy of this License; and
97+
98+ (b) You must cause any modified files to carry prominent notices
99+ stating that You changed the files; and
100+
101+ (c) You must retain, in the Source form of any Derivative Works
102+ that You distribute, all copyright, patent, trademark, and
103+ attribution notices from the Source form of the Work,
104+ excluding those notices that do not pertain to any part of
105+ the Derivative Works; and
106+
107+ (d) If the Work includes a "NOTICE" text file as part of its
108+ distribution, then any Derivative Works that You distribute must
109+ include a readable copy of the attribution notices contained
110+ within such NOTICE file, excluding those notices that do not
111+ pertain to any part of the Derivative Works, in at least one
112+ of the following places: within a NOTICE text file distributed
113+ as part of the Derivative Works; within the Source form or
114+ documentation, if provided along with the Derivative Works; or,
115+ within a display generated by the Derivative Works, if and
116+ wherever such third-party notices normally appear. The contents
117+ of the NOTICE file are for informational purposes only and
118+ do not modify the License. You may add Your own attribution
119+ notices within Derivative Works that You distribute, alongside
120+ or as an addendum to the NOTICE text from the Work, provided
121+ that such additional attribution notices cannot be construed
122+ as modifying the License.
123+
124+ You may add Your own copyright statement to Your modifications and
125+ may provide additional or different license terms and conditions
126+ for use, reproduction, or distribution of Your modifications, or
127+ for any such Derivative Works as a whole, provided Your use,
128+ reproduction, and distribution of the Work otherwise complies with
129+ the conditions stated in this License.
130+
131+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132+ any Contribution intentionally submitted for inclusion in the Work
133+ by You to the Licensor shall be under the terms and conditions of
134+ this License, without any additional terms or conditions.
135+ Notwithstanding the above, nothing herein shall supersede or modify
136+ the terms of any separate license agreement you may have executed
137+ with Licensor regarding such Contributions.
138+
139+ 6. Trademarks. This License does not grant permission to use the trade
140+ names, trademarks, service marks, or product names of the Licensor,
141+ except as required for reasonable and customary use in describing the
142+ origin of the Work and reproducing the content of the NOTICE file.
143+
144+ 7. Disclaimer of Warranty. Unless required by applicable law or
145+ agreed to in writing, Licensor provides the Work (and each
146+ Contributor provides its Contributions) on an "AS IS" BASIS,
147+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148+ implied, including, without limitation, any warranties or conditions
149+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150+ PARTICULAR PURPOSE. You are solely responsible for determining the
151+ appropriateness of using or redistributing the Work and assume any
152+ risks associated with Your exercise of permissions under this License.
153+
154+ 8. Limitation of Liability. In no event and under no legal theory,
155+ whether in tort (including negligence), contract, or otherwise,
156+ unless required by applicable law (such as deliberate and grossly
157+ negligent acts) or agreed to in writing, shall any Contributor be
158+ liable to You for damages, including any direct, indirect, special,
159+ incidental, or consequential damages of any character arising as a
160+ result of this License or out of the use or inability to use the
161+ Work (including but not limited to damages for loss of goodwill,
162+ work stoppage, computer failure or malfunction, or any and all
163+ other commercial damages or losses), even if such Contributor
164+ has been advised of the possibility of such damages.
165+
166+ 9. Accepting Warranty or Additional Liability. While redistributing
167+ the Work or Derivative Works thereof, You may choose to offer,
168+ and charge a fee for, acceptance of support, warranty, indemnity,
169+ or other liability obligations and/or rights consistent with this
170+ License. However, in accepting such obligations, You may act only
171+ on Your own behalf and on Your sole responsibility, not on behalf
172+ of any other Contributor, and only if You agree to indemnify,
173+ defend, and hold each Contributor harmless for any liability
174+ incurred by, or claims asserted against, such Contributor by reason
175+ of your accepting any such warranty or additional liability.
176+
177+ END OF TERMS AND CONDITIONS
178+
179+ APPENDIX: How to apply the Apache License to your work.
180+
181+ To apply the Apache License to your work, attach the following
182+ boilerplate notice, with the fields enclosed by brackets "[]"
183+ replaced with your own identifying information. (Don't include
184+ the brackets!) The text should be enclosed in the appropriate
185+ comment syntax for the file format. We also recommend that a
186+ file or class name and description of purpose be included on the
187+ same "printed page" as the copyright notice for easier
188+ identification within third-party archives.
189+
190+ Copyright [yyyy] [name of copyright owner]
191+
192+ Licensed under the Apache License, Version 2.0 (the "License");
193+ you may not use this file except in compliance with the License.
194+ You may obtain a copy of the License at
195+
196+ http://www.apache.org/licenses/LICENSE-2.0
197+
198+ Unless required by applicable law or agreed to in writing, software
199+ distributed under the License is distributed on an "AS IS" BASIS,
200+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201+ See the License for the specific language governing permissions and
202+ limitations under the License.
README.mdadded+43−0View file
@@ -0,0 +1,43 @@
1+# fastandaccurate-results
2+
3+Benchmark results for
4+[fastandaccurate](https://github.com/concept-collection/fastandaccurate),
5+viewed at https://concept-collection.github.io/fastandaccurate/.
6+
7+This repository is the database: each file under `results/` is one
8+work-precision sweep (one problem instance, one solver, one environment)
9+in the JSON format defined by the main repository's
10+`src/harness/resultSchema.ts`. The site fetches `index.json` and the
11+files it lists, statically; there is no server. Provenance travels
12+inside each file: instance spec and hash, solver id and version,
13+protocol, runtime, numbl version, and machine. The submitter is recorded
14+by the pull request itself.
15+
16+## Submitting results
17+
18+1. Produce result files with the command line (or download them from a
19+ run made in the browser on the site):
20+
21+ ```
22+ npx https://concept-collection.github.io/fastandaccurate/cli.tgz run --label "my workstation"
23+ ```
24+
25+2. Copy them under `results/<problem>/`, naming files
26+ `<problem>.<instance>.<solver>.<something-distinguishing>.json` so
27+ that results from different machines can coexist.
28+
29+3. Regenerate the index and open a pull request:
30+
31+ ```
32+ node scripts/build-index.mjs
33+ ```
34+
35+Results from solvers not in the main repository are welcome; the file
36+records the solver's source, and such results display on the site marked
37+as not reproducible in the browser. Review is by inspection of the
38+provenance fields and, for in-browser solvers, by rerunning; a result
39+that cannot be reproduced within reason will be questioned in the PR.
40+
41+## License
42+
43+Apache-2.0
index.jsonadded+10−0View file
@@ -0,0 +1,10 @@
1+{
2+ "files": [
3+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.disk-easy.mfs.i7-1355U.json",
4+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.disk-easy.nystrom-dlp.i7-1355U.json",
5+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-hard.mfs.i7-1355U.json",
6+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-hard.nystrom-dlp.i7-1355U.json",
7+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-medium.mfs.i7-1355U.json",
8+ "results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-medium.nystrom-dlp.i7-1355U.json"
9+ ]
10+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.disk-easy.mfs.i7-1355U.jsonadded+171−0View file
@@ -0,0 +1,171 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "disk-easy",
7+ "spec": {
8+ "a": 0,
9+ "d": 0.5,
10+ "instance": "disk-easy",
11+ "k": 0,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "188fddb2f5a2b9f843972da7c87580faf2da18364fbdd648a3c8581e41508448",
16+ "solver": {
17+ "id": "mfs",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:41.568Z",
37+ "points": [
38+ {
39+ "n": 8,
40+ "solveSeconds": 0.002077288000000066,
41+ "solveSecondsAll": [
42+ 0.0034976300000000293,
43+ 0.002077288000000066,
44+ 0.0008802160000001003
45+ ],
46+ "coldSeconds": 0.010351658000000041,
47+ "relMax": 0.13210958527140085,
48+ "relL2": 0.07781022485512006
49+ },
50+ {
51+ "n": 12,
52+ "solveSeconds": 0.000929252000000047,
53+ "solveSecondsAll": [
54+ 0.0012145350000000166,
55+ 0.000929252000000047,
56+ 0.0008850040000000226
57+ ],
58+ "coldSeconds": 0.005586590000000058,
59+ "relMax": 0.02764497393031529,
60+ "relL2": 0.01647591632007419
61+ },
62+ {
63+ "n": 16,
64+ "solveSeconds": 0.001035358999999958,
65+ "solveSecondsAll": [
66+ 0.0014088909999999677,
67+ 0.001035358999999958,
68+ 0.0008102689999999191
69+ ],
70+ "coldSeconds": 0.005757393999999971,
71+ "relMax": 0.008948766685973872,
72+ "relL2": 0.004780629428958886
73+ },
74+ {
75+ "n": 24,
76+ "solveSeconds": 0.0007746649999998967,
77+ "solveSecondsAll": [
78+ 0.0009919619999999574,
79+ 0.0007746649999998967,
80+ 0.0007503049999999511
81+ ],
82+ "coldSeconds": 0.0055992249999999855,
83+ "relMax": 0.0008578116084708398,
84+ "relL2": 0.00043151173078340816
85+ },
86+ {
87+ "n": 32,
88+ "solveSeconds": 0.0007511220000000485,
89+ "solveSecondsAll": [
90+ 0.0008204529999998877,
91+ 0.0007511220000000485,
92+ 0.0006974010000000419
93+ ],
94+ "coldSeconds": 0.0056461570000000405,
95+ "relMax": 0.00008101854437867803,
96+ "relL2": 0.000041341977632112244
97+ },
98+ {
99+ "n": 48,
100+ "solveSeconds": 0.0008785350000001246,
101+ "solveSecondsAll": [
102+ 0.0009218370000000364,
103+ 0.0008785350000001246,
104+ 0.000769595999999928
105+ ],
106+ "coldSeconds": 0.0079386560000001,
107+ "relMax": 6.758794266304618e-7,
108+ "relL2": 3.170374745286789e-7
109+ },
110+ {
111+ "n": 64,
112+ "solveSeconds": 0.002357602999999875,
113+ "solveSecondsAll": [
114+ 0.0024619560000000984,
115+ 0.0019088229999999484,
116+ 0.002357602999999875
117+ ],
118+ "coldSeconds": 0.020033054000000106,
119+ "relMax": 2.0048554919222663e-8,
120+ "relL2": 7.89773592606316e-9
121+ },
122+ {
123+ "n": 96,
124+ "solveSeconds": 0.0017051670000000074,
125+ "solveSecondsAll": [
126+ 0.0017051670000000074,
127+ 0.0021201160000000607,
128+ 0.0016633709999999136
129+ ],
130+ "coldSeconds": 0.009902426999999991,
131+ "relMax": 3.2723913397991925e-12,
132+ "relL2": 1.1240708762998872e-12
133+ },
134+ {
135+ "n": 128,
136+ "solveSeconds": 0.0025675399999999238,
137+ "solveSecondsAll": [
138+ 0.0024753489999999045,
139+ 0.002579242000000037,
140+ 0.0025675399999999238
141+ ],
142+ "coldSeconds": 0.013849510999999981,
143+ "relMax": 1.3527309081059868e-15,
144+ "relL2": 8.029755198572431e-16
145+ },
146+ {
147+ "n": 192,
148+ "solveSeconds": 0.006501550999999939,
149+ "solveSecondsAll": [
150+ 0.006501550999999939,
151+ 0.006701045000000017,
152+ 0.006473771999999989
153+ ],
154+ "coldSeconds": 0.018389438000000036,
155+ "relMax": 1.4880039989165855e-15,
156+ "relL2": 7.062430616884601e-16
157+ },
158+ {
159+ "n": 256,
160+ "solveSeconds": 0.011760473000000049,
161+ "solveSecondsAll": [
162+ 0.01941393899999999,
163+ 0.011760473000000049,
164+ 0.011502518999999989
165+ ],
166+ "coldSeconds": 0.027640722999999978,
167+ "relMax": 8.11638544863592e-16,
168+ "relL2": 6.485113810453287e-16
169+ }
170+ ]
171+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.disk-easy.nystrom-dlp.i7-1355U.jsonadded+183−0View file
@@ -0,0 +1,183 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "disk-easy",
7+ "spec": {
8+ "a": 0,
9+ "d": 0.5,
10+ "instance": "disk-easy",
11+ "k": 0,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "188fddb2f5a2b9f843972da7c87580faf2da18364fbdd648a3c8581e41508448",
16+ "solver": {
17+ "id": "nystrom-dlp",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:43.367Z",
37+ "points": [
38+ {
39+ "n": 16,
40+ "solveSeconds": 0.0009324490000000019,
41+ "solveSecondsAll": [
42+ 0.0011822820000000345,
43+ 0.0009324490000000019,
44+ 0.0008764609999999395
45+ ],
46+ "coldSeconds": 0.00459436099999988,
47+ "relMax": 0.20133219106718017,
48+ "relL2": 0.1216911383668638
49+ },
50+ {
51+ "n": 24,
52+ "solveSeconds": 0.0007655230000001012,
53+ "solveSecondsAll": [
54+ 0.0007655230000001012,
55+ 0.0006916690000000614,
56+ 0.0007776060000000973
57+ ],
58+ "coldSeconds": 0.00538934000000002,
59+ "relMax": 0.1443613624396861,
60+ "relL2": 0.09406306723622944
61+ },
62+ {
63+ "n": 32,
64+ "solveSeconds": 0.0007859719999999681,
65+ "solveSecondsAll": [
66+ 0.0008708380000000959,
67+ 0.0007235419999999104,
68+ 0.0007859719999999681
69+ ],
70+ "coldSeconds": 0.005132948999999942,
71+ "relMax": 0.03570868666378402,
72+ "relL2": 0.02203063290867372
73+ },
74+ {
75+ "n": 48,
76+ "solveSeconds": 0.0009026749999999639,
77+ "solveSecondsAll": [
78+ 0.0010852129999999738,
79+ 0.0009026749999999639,
80+ 0.0008377539999999684
81+ ],
82+ "coldSeconds": 0.005989601000000011,
83+ "relMax": 0.01245993662197902,
84+ "relL2": 0.007479839022911284
85+ },
86+ {
87+ "n": 64,
88+ "solveSeconds": 0.001216865000000067,
89+ "solveSecondsAll": [
90+ 0.001216865000000067,
91+ 0.0013133959999999112,
92+ 0.0012002690000000316
93+ ],
94+ "coldSeconds": 0.006591179999999919,
95+ "relMax": 0.0010454354251292802,
96+ "relL2": 0.0006386470958706547
97+ },
98+ {
99+ "n": 96,
100+ "solveSeconds": 0.0017843339999999985,
101+ "solveSecondsAll": [
102+ 0.0019770579999999205,
103+ 0.0017686190000000268,
104+ 0.0017843339999999985
105+ ],
106+ "coldSeconds": 0.007838183999999915,
107+ "relMax": 0.00007857866353974285,
108+ "relL2": 0.00004716104173971954
109+ },
110+ {
111+ "n": 128,
112+ "solveSeconds": 0.002891325999999972,
113+ "solveSecondsAll": [
114+ 0.0027789400000000075,
115+ 0.002891325999999972,
116+ 0.003054756999999908
117+ ],
118+ "coldSeconds": 0.008824056999999885,
119+ "relMax": 0.0000016007356144778505,
120+ "relL2": 9.827672002203685e-7
121+ },
122+ {
123+ "n": 192,
124+ "solveSeconds": 0.006477695999999922,
125+ "solveSecondsAll": [
126+ 0.006585324999999864,
127+ 0.006433686999999688,
128+ 0.006477695999999922
129+ ],
130+ "coldSeconds": 0.016181576000000142,
131+ "relMax": 3.147070831371893e-9,
132+ "relL2": 1.8880990960897678e-9
133+ },
134+ {
135+ "n": 256,
136+ "solveSeconds": 0.013444664999999967,
137+ "solveSecondsAll": [
138+ 0.013444664999999967,
139+ 0.019942491000000118,
140+ 0.012369188000000308
141+ ],
142+ "coldSeconds": 0.02050866100000026,
143+ "relMax": 1.131829950812279e-12,
144+ "relL2": 7.06247323898298e-13
145+ },
146+ {
147+ "n": 384,
148+ "solveSeconds": 0.036323829000000085,
149+ "solveSecondsAll": [
150+ 0.04157000100000019,
151+ 0.035918895000000006,
152+ 0.036323829000000085
153+ ],
154+ "coldSeconds": 0.04589834500000012,
155+ "relMax": 1.0821847264847894e-15,
156+ "relL2": 9.1389333566701e-16
157+ },
158+ {
159+ "n": 512,
160+ "solveSeconds": 0.08473455200000002,
161+ "solveSecondsAll": [
162+ 0.08473455200000002,
163+ 0.08188585700000006,
164+ 0.08777262400000008
165+ ],
166+ "coldSeconds": 0.10006759599999993,
167+ "relMax": 2.2996425437801776e-15,
168+ "relL2": 1.5093905432441853e-15
169+ },
170+ {
171+ "n": 768,
172+ "solveSeconds": 0.26098004799999996,
173+ "solveSecondsAll": [
174+ 0.2588811620000002,
175+ 0.26098004799999996,
176+ 0.26829037999999983
177+ ],
178+ "coldSeconds": 0.278884844,
179+ "relMax": 1.3527309081059868e-15,
180+ "relL2": 1.2086802968149456e-15
181+ }
182+ ]
183+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-hard.mfs.i7-1355U.jsonadded+171−0View file
@@ -0,0 +1,171 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "star-hard",
7+ "spec": {
8+ "a": 0.3,
9+ "d": 0.08,
10+ "instance": "star-hard",
11+ "k": 5,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "cd0f3e5dc72e88da57eaf0a1696e04c32da1b28b439b79069dcf740b1cb70799",
16+ "solver": {
17+ "id": "mfs",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:45.704Z",
37+ "points": [
38+ {
39+ "n": 8,
40+ "solveSeconds": 0.0002090880000009676,
41+ "solveSecondsAll": [
42+ 0.0003033250000008536,
43+ 0.0002090880000009676,
44+ 0.00019384299999991583
45+ ],
46+ "coldSeconds": 0.0070653680000010155,
47+ "relMax": 0.2634046274685336,
48+ "relL2": 0.2157941479023842
49+ },
50+ {
51+ "n": 12,
52+ "solveSeconds": 0.0003659630000001357,
53+ "solveSecondsAll": [
54+ 0.00040542500000029236,
55+ 0.0003659630000001357,
56+ 0.00034224599999976846
57+ ],
58+ "coldSeconds": 0.004627665999999309,
59+ "relMax": 0.6004630187733077,
60+ "relL2": 0.2825225964625363
61+ },
62+ {
63+ "n": 16,
64+ "solveSeconds": 0.0003261949999995295,
65+ "solveSecondsAll": [
66+ 0.00045577699999999055,
67+ 0.0003261949999995295,
68+ 0.00027639900000053785
69+ ],
70+ "coldSeconds": 0.004942039999999537,
71+ "relMax": 0.12412630448719432,
72+ "relL2": 0.07219219549689747
73+ },
74+ {
75+ "n": 24,
76+ "solveSeconds": 0.00034045499999901807,
77+ "solveSecondsAll": [
78+ 0.000493535000000378,
79+ 0.00034045499999901807,
80+ 0.00032858200000074334
81+ ],
82+ "coldSeconds": 0.005240230000000068,
83+ "relMax": 0.0754379432741786,
84+ "relL2": 0.03977129890064446
85+ },
86+ {
87+ "n": 32,
88+ "solveSeconds": 0.0003940129999993047,
89+ "solveSecondsAll": [
90+ 0.0004548149999994422,
91+ 0.0003940129999993047,
92+ 0.00032998299999942304
93+ ],
94+ "coldSeconds": 0.00565845200000048,
95+ "relMax": 4.03086339203969,
96+ "relL2": 1.4469395951630863
97+ },
98+ {
99+ "n": 48,
100+ "solveSeconds": 0.0004999050000007443,
101+ "solveSecondsAll": [
102+ 0.0006630310000002027,
103+ 0.0004999050000007443,
104+ 0.0004951069999989954
105+ ],
106+ "coldSeconds": 0.006800244999999094,
107+ "relMax": 0.0813094587878239,
108+ "relL2": 0.036551313691126054
109+ },
110+ {
111+ "n": 64,
112+ "solveSeconds": 0.000705986999999908,
113+ "solveSecondsAll": [
114+ 0.0007958340000007169,
115+ 0.0006629780000011465,
116+ 0.000705986999999908
117+ ],
118+ "coldSeconds": 0.008302740999999614,
119+ "relMax": 0.15224317960343983,
120+ "relL2": 0.05501558170887485
121+ },
122+ {
123+ "n": 96,
124+ "solveSeconds": 0.0012715619999994487,
125+ "solveSecondsAll": [
126+ 0.00140074900000009,
127+ 0.0012715619999994487,
128+ 0.001241162000000351
129+ ],
130+ "coldSeconds": 0.010491155999999613,
131+ "relMax": 0.10742462036034146,
132+ "relL2": 0.0373032309110451
133+ },
134+ {
135+ "n": 128,
136+ "solveSeconds": 0.002304394000000265,
137+ "solveSecondsAll": [
138+ 0.002391441999999522,
139+ 0.002272153999999915,
140+ 0.002304394000000265
141+ ],
142+ "coldSeconds": 0.012644635000000903,
143+ "relMax": 0.08273815535462978,
144+ "relL2": 0.03997533688035583
145+ },
146+ {
147+ "n": 192,
148+ "solveSeconds": 0.006111972000000243,
149+ "solveSecondsAll": [
150+ 0.0055212920000000665,
151+ 0.006111972000000243,
152+ 0.0062941100000006855
153+ ],
154+ "coldSeconds": 0.022495764000000307,
155+ "relMax": 0.0004233816630264492,
156+ "relL2": 0.00016702943548596631
157+ },
158+ {
159+ "n": 256,
160+ "solveSeconds": 0.012667997999999514,
161+ "solveSecondsAll": [
162+ 0.012667997999999514,
163+ 0.012132275999999997,
164+ 0.012692963000000113
165+ ],
166+ "coldSeconds": 0.027834304999999837,
167+ "relMax": 0.0007639218451016202,
168+ "relL2": 0.0002918044606068516
169+ }
170+ ]
171+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-hard.nystrom-dlp.i7-1355U.jsonadded+183−0View file
@@ -0,0 +1,183 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "star-hard",
7+ "spec": {
8+ "a": 0.3,
9+ "d": 0.08,
10+ "instance": "star-hard",
11+ "k": 5,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "cd0f3e5dc72e88da57eaf0a1696e04c32da1b28b439b79069dcf740b1cb70799",
16+ "solver": {
17+ "id": "nystrom-dlp",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:47.587Z",
37+ "points": [
38+ {
39+ "n": 16,
40+ "solveSeconds": 0.00040304899999998867,
41+ "solveSecondsAll": [
42+ 0.0006907130000000095,
43+ 0.00040304899999998867,
44+ 0.00032897100000006674
45+ ],
46+ "coldSeconds": 0.007212176999999542,
47+ "relMax": 1.0012927828431628,
48+ "relL2": 0.6268341577111681
49+ },
50+ {
51+ "n": 24,
52+ "solveSeconds": 0.0004962250000000168,
53+ "solveSecondsAll": [
54+ 0.0005611690000009162,
55+ 0.0004962250000000168,
56+ 0.0004208710000002114
57+ ],
58+ "coldSeconds": 0.004637444000000102,
59+ "relMax": 0.4707363745703508,
60+ "relL2": 0.3363127656208159
61+ },
62+ {
63+ "n": 32,
64+ "solveSeconds": 0.000542948999998849,
65+ "solveSecondsAll": [
66+ 0.0006260869999996643,
67+ 0.0005266059999993189,
68+ 0.000542948999998849
69+ ],
70+ "coldSeconds": 0.004869804000000144,
71+ "relMax": 0.5430357988099125,
72+ "relL2": 0.36857878404853767
73+ },
74+ {
75+ "n": 48,
76+ "solveSeconds": 0.0006370219999993765,
77+ "solveSecondsAll": [
78+ 0.0007464109999997248,
79+ 0.0006167550000002464,
80+ 0.0006370219999993765
81+ ],
82+ "coldSeconds": 0.005442319999999334,
83+ "relMax": 0.35146701729508595,
84+ "relL2": 0.17673816863760544
85+ },
86+ {
87+ "n": 64,
88+ "solveSeconds": 0.0009983520000007573,
89+ "solveSecondsAll": [
90+ 0.0010535849999993019,
91+ 0.0009983520000007573,
92+ 0.0008559269999999231
93+ ],
94+ "coldSeconds": 0.006428632999999628,
95+ "relMax": 0.1041593869662402,
96+ "relL2": 0.05877196980605954
97+ },
98+ {
99+ "n": 96,
100+ "solveSeconds": 0.001484592999999812,
101+ "solveSecondsAll": [
102+ 0.0016087080000000142,
103+ 0.001484592999999812,
104+ 0.0014817030000005005
105+ ],
106+ "coldSeconds": 0.008417777000000903,
107+ "relMax": 0.019890024955154847,
108+ "relL2": 0.010229531469234568
109+ },
110+ {
111+ "n": 128,
112+ "solveSeconds": 0.0025423260000003722,
113+ "solveSecondsAll": [
114+ 0.0027056230000006565,
115+ 0.002504584999999615,
116+ 0.0025423260000003722
117+ ],
118+ "coldSeconds": 0.008852112999999662,
119+ "relMax": 0.023294117313062843,
120+ "relL2": 0.011141172036004378
121+ },
122+ {
123+ "n": 192,
124+ "solveSeconds": 0.0069691609999997794,
125+ "solveSecondsAll": [
126+ 0.006432903000000323,
127+ 0.0069691609999997794,
128+ 0.013193225000000197
129+ ],
130+ "coldSeconds": 0.013981187999999811,
131+ "relMax": 0.006182541731318104,
132+ "relL2": 0.0025994879309085453
133+ },
134+ {
135+ "n": 256,
136+ "solveSeconds": 0.013088812000000338,
137+ "solveSecondsAll": [
138+ 0.013088812000000338,
139+ 0.012877731000000558,
140+ 0.014111780000000351
141+ ],
142+ "coldSeconds": 0.021770259999999375,
143+ "relMax": 0.0004633989832265899,
144+ "relL2": 0.00018208660262845498
145+ },
146+ {
147+ "n": 384,
148+ "solveSeconds": 0.0379076180000002,
149+ "solveSecondsAll": [
150+ 0.0379076180000002,
151+ 0.043147487000000595,
152+ 0.037207533000000126
153+ ],
154+ "coldSeconds": 0.05463423600000006,
155+ "relMax": 0.000018366247560592936,
156+ "relL2": 0.000006854012137305858
157+ },
158+ {
159+ "n": 512,
160+ "solveSeconds": 0.0902195990000001,
161+ "solveSecondsAll": [
162+ 0.08444170900000092,
163+ 0.0902195990000001,
164+ 0.09421118499999981
165+ ],
166+ "coldSeconds": 0.09904113600000031,
167+ "relMax": 1.7957233124445474e-7,
168+ "relL2": 8.058828759314353e-8
169+ },
170+ {
171+ "n": 768,
172+ "solveSeconds": 0.27671563200000016,
173+ "solveSecondsAll": [
174+ 0.27671563200000016,
175+ 0.2872887639999995,
176+ 0.27161440900000056
177+ ],
178+ "coldSeconds": 0.29365246100000064,
179+ "relMax": 1.5750829642713015e-10,
180+ "relL2": 5.6171916731395036e-11
181+ }
182+ ]
183+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-medium.mfs.i7-1355U.jsonadded+171−0View file
@@ -0,0 +1,171 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "star-medium",
7+ "spec": {
8+ "a": 0.2,
9+ "d": 0.4,
10+ "instance": "star-medium",
11+ "k": 3,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "12e35e4a645cf2c72f224e1d6e24d2d01b881b46c77ccadb2f2b013c1eb2deae",
16+ "solver": {
17+ "id": "mfs",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:43.603Z",
37+ "points": [
38+ {
39+ "n": 8,
40+ "solveSeconds": 0.0003609129999997407,
41+ "solveSecondsAll": [
42+ 0.00036497100000021376,
43+ 0.0002824169999997572,
44+ 0.0003609129999997407
45+ ],
46+ "coldSeconds": 0.003879154999999468,
47+ "relMax": 0.18229794928306942,
48+ "relL2": 0.11559946195423404
49+ },
50+ {
51+ "n": 12,
52+ "solveSeconds": 0.0004948240000004489,
53+ "solveSecondsAll": [
54+ 0.0005891319999999922,
55+ 0.0004948240000004489,
56+ 0.0003452749999999227
57+ ],
58+ "coldSeconds": 0.004562068000000252,
59+ "relMax": 0.06059563921722052,
60+ "relL2": 0.03273307322736645
61+ },
62+ {
63+ "n": 16,
64+ "solveSeconds": 0.00031827100000025865,
65+ "solveSecondsAll": [
66+ 0.0005579729999998229,
67+ 0.00031827100000025865,
68+ 0.00029267499999985347
69+ ],
70+ "coldSeconds": 0.004772903000000106,
71+ "relMax": 0.030352227533532658,
72+ "relL2": 0.014281558735214714
73+ },
74+ {
75+ "n": 24,
76+ "solveSeconds": 0.0004193799999998582,
77+ "solveSecondsAll": [
78+ 0.0004354200000005193,
79+ 0.0004193799999998582,
80+ 0.0002858330000004017
81+ ],
82+ "coldSeconds": 0.005043588999999571,
83+ "relMax": 0.004838882219935299,
84+ "relL2": 0.002445290636974208
85+ },
86+ {
87+ "n": 32,
88+ "solveSeconds": 0.00047787600000015473,
89+ "solveSecondsAll": [
90+ 0.0004842740000001733,
91+ 0.00047787600000015473,
92+ 0.0004347189999998058
93+ ],
94+ "coldSeconds": 0.00561773600000004,
95+ "relMax": 0.0005169542165909356,
96+ "relL2": 0.00022654753279899276
97+ },
98+ {
99+ "n": 48,
100+ "solveSeconds": 0.0007229920000000334,
101+ "solveSecondsAll": [
102+ 0.0007422369999998679,
103+ 0.0007229920000000334,
104+ 0.000457787999999848
105+ ],
106+ "coldSeconds": 0.00673383499999991,
107+ "relMax": 0.000012364687312092832,
108+ "relL2": 0.000006232072913466557
109+ },
110+ {
111+ "n": 64,
112+ "solveSeconds": 0.0006763940000000801,
113+ "solveSecondsAll": [
114+ 0.0007485809999998594,
115+ 0.0006763940000000801,
116+ 0.0006279279999996668
117+ ],
118+ "coldSeconds": 0.007549134000000457,
119+ "relMax": 0.000001884669237593171,
120+ "relL2": 7.289974343289346e-7
121+ },
122+ {
123+ "n": 96,
124+ "solveSeconds": 0.0017429830000001978,
125+ "solveSecondsAll": [
126+ 0.0017528270000002344,
127+ 0.0017429830000001978,
128+ 0.0012718380000005247
129+ ],
130+ "coldSeconds": 0.010454100000000022,
131+ "relMax": 1.909358241829674e-9,
132+ "relL2": 9.105500417808156e-10
133+ },
134+ {
135+ "n": 128,
136+ "solveSeconds": 0.0022719030000004636,
137+ "solveSecondsAll": [
138+ 0.0023181660000002324,
139+ 0.0022719030000004636,
140+ 0.00209414899999949
141+ ],
142+ "coldSeconds": 0.012269802000000052,
143+ "relMax": 1.1795409870405824e-11,
144+ "relL2": 5.0938643596346354e-12
145+ },
146+ {
147+ "n": 192,
148+ "solveSeconds": 0.005693799999999971,
149+ "solveSecondsAll": [
150+ 0.005693799999999971,
151+ 0.005616314999999705,
152+ 0.006163400000000152
153+ ],
154+ "coldSeconds": 0.024589685000000028,
155+ "relMax": 6.375001281120397e-16,
156+ "relL2": 6.570069848379876e-16
157+ },
158+ {
159+ "n": 256,
160+ "solveSeconds": 0.011945035000000548,
161+ "solveSecondsAll": [
162+ 0.011945035000000548,
163+ 0.011988515999999727,
164+ 0.01169417500000014
165+ ],
166+ "coldSeconds": 0.02715690699999973,
167+ "relMax": 1.1475002306016713e-15,
168+ "relL2": 8.113636003110512e-16
169+ }
170+ ]
171+}
results/laplace-dirichlet-2d/laplace-dirichlet-2d.star-medium.nystrom-dlp.i7-1355U.jsonadded+183−0View file
@@ -0,0 +1,183 @@
1+{
2+ "format": "fastandaccurate-result",
3+ "formatVersion": 1,
4+ "problem": "laplace-dirichlet-2d",
5+ "problemVersion": 1,
6+ "instance": "star-medium",
7+ "spec": {
8+ "a": 0.2,
9+ "d": 0.4,
10+ "instance": "star-medium",
11+ "k": 3,
12+ "problem": "laplace-dirichlet-2d",
13+ "problemVersion": 1
14+ },
15+ "specHash": "12e35e4a645cf2c72f224e1d6e24d2d01b881b46c77ccadb2f2b013c1eb2deae",
16+ "solver": {
17+ "id": "nystrom-dlp",
18+ "version": "1.0.0",
19+ "backend": "cpu",
20+ "source": "builtin"
21+ },
22+ "environment": {
23+ "kind": "node",
24+ "runtime": "node v24.14.1",
25+ "numblVersion": "0.4.18",
26+ "os": "linux 6.12.101+deb13-amd64",
27+ "cpu": "13th Gen Intel(R) Core(TM) i7-1355U",
28+ "machineLabel": "linux laptop (i7-1355U)",
29+ "browserReproducible": true
30+ },
31+ "protocol": {
32+ "warmupRuns": 1,
33+ "timedRuns": 3,
34+ "timer": "numbl tic/toc"
35+ },
36+ "createdUtc": "2026-08-17T12:57:45.467Z",
37+ "points": [
38+ {
39+ "n": 16,
40+ "solveSeconds": 0.0004122899999998708,
41+ "solveSecondsAll": [
42+ 0.0005804559999997849,
43+ 0.0004122899999998708,
44+ 0.00035321299999990785
45+ ],
46+ "coldSeconds": 0.007057764999999883,
47+ "relMax": 0.4087449172107536,
48+ "relL2": 0.20977302809539963
49+ },
50+ {
51+ "n": 24,
52+ "solveSeconds": 0.0005397359999999018,
53+ "solveSecondsAll": [
54+ 0.0009606479999999529,
55+ 0.0005085790000003421,
56+ 0.0005397359999999018
57+ ],
58+ "coldSeconds": 0.004929985999999609,
59+ "relMax": 0.14572578895167163,
60+ "relL2": 0.09686889271486522
61+ },
62+ {
63+ "n": 32,
64+ "solveSeconds": 0.0005889389999995664,
65+ "solveSecondsAll": [
66+ 0.0005889389999995664,
67+ 0.0006186509999994705,
68+ 0.0004888669999996154
69+ ],
70+ "coldSeconds": 0.004995525999999639,
71+ "relMax": 0.11437448727141163,
72+ "relL2": 0.06415188313353161
73+ },
74+ {
75+ "n": 48,
76+ "solveSeconds": 0.0007005269999997843,
77+ "solveSecondsAll": [
78+ 0.0009408330000000298,
79+ 0.0006823150000001554,
80+ 0.0007005269999997843
81+ ],
82+ "coldSeconds": 0.005665542000000023,
83+ "relMax": 0.022365613471283016,
84+ "relL2": 0.012084778141981512
85+ },
86+ {
87+ "n": 64,
88+ "solveSeconds": 0.0008822190000001839,
89+ "solveSecondsAll": [
90+ 0.0009516670000002669,
91+ 0.0008822190000001839,
92+ 0.0007902429999999683
93+ ],
94+ "coldSeconds": 0.006636267999999834,
95+ "relMax": 0.004251742487311943,
96+ "relL2": 0.0024942902126743756
97+ },
98+ {
99+ "n": 96,
100+ "solveSeconds": 0.001546022999999952,
101+ "solveSecondsAll": [
102+ 0.001554105999999944,
103+ 0.0014781669999996971,
104+ 0.001546022999999952
105+ ],
106+ "coldSeconds": 0.008422434000000312,
107+ "relMax": 0.0005697416637470521,
108+ "relL2": 0.00023326185561126694
109+ },
110+ {
111+ "n": 128,
112+ "solveSeconds": 0.0024154619999996463,
113+ "solveSecondsAll": [
114+ 0.0025810970000001987,
115+ 0.0024154619999996463,
116+ 0.0023942849999998295
117+ ],
118+ "coldSeconds": 0.008678047000000522,
119+ "relMax": 0.000042019707113811886,
120+ "relL2": 0.000026523702555073166
121+ },
122+ {
123+ "n": 192,
124+ "solveSeconds": 0.006972149000000094,
125+ "solveSecondsAll": [
126+ 0.005867279999999919,
127+ 0.006972149000000094,
128+ 0.012608927000000048
129+ ],
130+ "coldSeconds": 0.014929213999999913,
131+ "relMax": 4.72989553598241e-7,
132+ "relL2": 2.057940630613194e-7
133+ },
134+ {
135+ "n": 256,
136+ "solveSeconds": 0.012538951000000242,
137+ "solveSecondsAll": [
138+ 0.012538951000000242,
139+ 0.012509082000000227,
140+ 0.013403877000000453
141+ ],
142+ "coldSeconds": 0.021181455000000238,
143+ "relMax": 2.0748112319541105e-9,
144+ "relL2": 9.360333669698691e-10
145+ },
146+ {
147+ "n": 384,
148+ "solveSeconds": 0.03684299700000038,
149+ "solveSecondsAll": [
150+ 0.03684299700000038,
151+ 0.04609481800000026,
152+ 0.03380763299999989
153+ ],
154+ "coldSeconds": 0.05451158999999972,
155+ "relMax": 1.79711286114784e-13,
156+ "relL2": 6.348341105602037e-14
157+ },
158+ {
159+ "n": 512,
160+ "solveSeconds": 0.08727729299999964,
161+ "solveSecondsAll": [
162+ 0.08535833699999973,
163+ 0.08996971899999995,
164+ 0.08727729299999964
165+ ],
166+ "coldSeconds": 0.09719524999999951,
167+ "relMax": 8.925001793568555e-16,
168+ "relL2": 7.320866508003385e-16
169+ },
170+ {
171+ "n": 768,
172+ "solveSeconds": 0.2772639780000006,
173+ "solveSecondsAll": [
174+ 0.2728536799999999,
175+ 0.2835926879999997,
176+ 0.2772639780000006
177+ ],
178+ "coldSeconds": 0.28815913500000034,
179+ "relMax": 1.4025002818464873e-15,
180+ "relL2": 1.1765191493841947e-15
181+ }
182+ ]
183+}
scripts/build-index.mjsadded+28−0View file
@@ -0,0 +1,28 @@
1+/**
2+ * Regenerate index.json from the files under results/. The site fetches
3+ * index.json and then each listed file; a result not in the index is
4+ * invisible. Run with --check to verify without writing (CI does this).
5+ */
6+import { readFile, writeFile } from "node:fs/promises";
7+import { glob } from "node:fs/promises";
8+import { join, relative } from "node:path";
9+
10+const root = new URL("..", import.meta.url).pathname;
11+const files = [];
12+for await (const entry of glob("results/**/*.json", { cwd: root })) {
13+ files.push(relative(root, join(root, entry)).replaceAll("\\", "/"));
14+}
15+files.sort();
16+const index = `${JSON.stringify({ files }, null, 2)}\n`;
17+
18+if (process.argv.includes("--check")) {
19+ const existing = await readFile(join(root, "index.json"), "utf8").catch(() => "");
20+ if (existing !== index) {
21+ console.error("index.json is out of date; run: node scripts/build-index.mjs");
22+ process.exit(1);
23+ }
24+ console.log(`index.json up to date (${files.length} results)`);
25+} else {
26+ await writeFile(join(root, "index.json"), index);
27+ console.log(`index.json written (${files.length} results)`);
28+}