spear-kernels 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +2 -2
  2. package/index.cjs +47 -26
  3. package/index.js +47 -26
  4. package/package.json +25 -25
package/README.md CHANGED
@@ -42,5 +42,5 @@ instance.exports.spear(2); // same protected-division semantics as the JS backen
42
42
  ```
43
43
 
44
44
  Division is **protected** exactly like the engine: denominators floored at
45
- ±1e-4 (sign-preserving), results clamped to ±1e4. Discovered formulas rely on
46
- these rails do not swap in bare `/`.
45
+ ±1e-4 (sign-preserving), results clamped to ±1e4. Discovered formulas rely on
46
+ these rails — do not swap in bare `/`.
package/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- // Auto-generated by scripts/gen-kernels-package.ts DO NOT EDIT.
1
+ // Auto-generated by scripts/gen-kernels-package.ts — DO NOT EDIT.
2
2
  'use strict';
3
3
  const kernels = {
4
4
  "silu": {
@@ -159,7 +159,7 @@ const kernels = {
159
159
  formulaCost: 25,
160
160
  exactCost: 34,
161
161
  speedupVsExact: 1.36,
162
- vsIterative: {"label":"Monte-Carlo · 1000 tirages","speedup":1840},
162
+ vsIterative: {"label":"Monte-Carlo · 1000 tirages","speedup":1840},
163
163
  },
164
164
  },
165
165
  "damped_pendulum": {
@@ -184,7 +184,7 @@ const kernels = {
184
184
  formulaCost: 46,
185
185
  exactCost: null,
186
186
  speedupVsExact: null,
187
- vsIterative: {"label":"Euler-Cromer · 60 pas","speedup":32.608695652173914},
187
+ vsIterative: {"label":"Euler-Cromer · 60 pas","speedup":32.6},
188
188
  },
189
189
  },
190
190
  "rl_distillation": {
@@ -445,7 +445,7 @@ const kernels = {
445
445
  formulaCost: 13,
446
446
  exactCost: 17,
447
447
  speedupVsExact: 1.3076923076923077,
448
- vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":184.6153846153846},
448
+ vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":184.6},
449
449
  },
450
450
  },
451
451
  "lennard_jones": {
@@ -488,7 +488,7 @@ const kernels = {
488
488
  formulaCost: 27,
489
489
  exactCost: 44,
490
490
  speedupVsExact: 1.6296296296296295,
491
- vsIterative: {"label":"RKF45 · 300 pas","speedup":200},
491
+ vsIterative: {"label":"RKF45 · 300 pas","speedup":200},
492
492
  },
493
493
  },
494
494
  "logistic_growth": {
@@ -550,6 +550,13 @@ const kernels = {
550
550
  py: "import torch\n\ndef spear_fn(x):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((-1.553578 * torch.maximum(torch.sqrt(torch.abs((6.660595 - torch.maximum(3.1671, x)))), 0.603662)) + 2.906087)",
551
551
  wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AwIBAAcJAQVzcGVhcgAACjoBOABEuI/cmnTb+L9Ev5oDBHOkGkBE9UpZhjhWCUAgAKWhmZ9EgdB6+DJR4z+lokRhpYKKqj8HQKAL",
552
552
  },
553
+ fast: {
554
+ js: "((t, x) => (((t) * (t) * Math.sin((4.822148 * t))) * (x * Math.sin((4.8694 * t)))))",
555
+ eval: ((t, x) => (((t) * (t) * Math.sin((4.822148 * t))) * (x * Math.sin((4.8694 * t))))),
556
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((powf(t, 2.0f) * sinf((4.822148f * t))) * (x * sinf((4.8694f * t))));\n}",
557
+ py: "import torch\n\ndef spear_fn(t, x):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (((t * t) * torch.sin((4.822148 * t))) * (x * torch.sin((4.8694 * t))))",
558
+ wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDc2luAAEDAgEABwkBBXNwZWFyAAEKKgEoACAAIACiRCLjUSrhSRNAIACiEACiIAFE0ZFc/kN6E0AgAKIQAKKiCw==",
559
+ },
553
560
  meta: {
554
561
  metric: 0.0017117911533114868,
555
562
  level: 2,
@@ -581,7 +588,7 @@ const kernels = {
581
588
  formulaCost: 18,
582
589
  exactCost: 21,
583
590
  speedupVsExact: 1.1666666666666667,
584
- vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":133.33333333333334},
591
+ vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":133.3},
585
592
  },
586
593
  },
587
594
  "pendulum_hybrid": {
@@ -624,7 +631,7 @@ const kernels = {
624
631
  formulaCost: 120,
625
632
  exactCost: null,
626
633
  speedupVsExact: null,
627
- vsIterative: {"label":"Jacobi · 4 balayages","speedup":1.6666666666666667},
634
+ vsIterative: {"label":"Jacobi · 4 balayages","speedup":1.7},
628
635
  },
629
636
  },
630
637
  "ik_reach": {
@@ -649,20 +656,27 @@ const kernels = {
649
656
  formulaCost: 52,
650
657
  exactCost: null,
651
658
  speedupVsExact: null,
652
- vsIterative: {"label":"Newton-DLS · 8 itérations","speedup":6.153846153846154},
659
+ vsIterative: {"label":"Newton-DLS · 8 itérations","speedup":6.2},
653
660
  },
654
661
  },
655
662
  "idm_following": {
656
663
  id: "idm_following",
657
664
  precise: {
658
- js: "((v, dv, s) => ((1.817293 * Math.min(0.9724, Math.max(-5.078809, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215108))",
659
- eval: ((v, dv, s) => ((1.817293 * Math.min(0.9724, Math.max(-5.078809, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215108)),
660
- c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.817293f * fminf(0.9724f, fmaxf(-5.078809f, ((1f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((2.643464f + fmaxf(-0.582903f, ((v * 1.536227f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.215108f);\n}",
661
- py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.817293 * torch.minimum(0.9724, torch.maximum(-5.078809, ((1 - (((v * v) * (v * v)) * 0.000001)) - (((2.643464 + torch.maximum(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((2.643464 + torch.maximum(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.215108)",
662
- wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAK+AEB9QEAROP+I9OhE/0/RD0s1JrmHe8/RJiFdk6zUBTARAAAAAAAAPA/IAAgAKIgACAAoqJEje21oPfGsD6ioUQMOiF00CUFQERwsDcxJKfivyAARA+3Q8NilPg/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKREDDohdNAlBUBEcLA3MSSn4r8gAEQPt0PDYpT4P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJE5dGNsKiIyz+gCw==",
665
+ js: "((v, dv, s) => ((1.825166 * Math.min(1.9, Math.max(-5.198308, ((0.840532 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.4862064122902764))",
666
+ eval: ((v, dv, s) => ((1.825166 * Math.min(1.9, Math.max(-5.198308, ((0.840532 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.4862064122902764)),
667
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.825166f * fminf(1.9f, fmaxf(-5.198308f, ((0.840532f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((2.393229f + fmaxf(-0.435303f, ((v * 1.543892f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.486206f);\n}",
668
+ py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.825166 * torch.minimum(1.9, torch.maximum(-5.198308, ((0.840532 - (((v * v) * (v * v)) * 0.000001)) - (((2.393229 + torch.maximum(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((2.393229 + torch.maximum(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.486206)",
669
+ wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAK+AEB9QEARJNWfEPhM/0/RGZmZmZmZv4/RAMkmkARyxTARCO6Z12j5eo/IAAgAKIgACAAoqJEje21oPfGsD6ioUTUtfY+VSUDQESscTYdAdzbvyAARILlCBnIs/g/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKRE1LX2PlUlA0BErHE2HQHc278gAESC5QgZyLP4P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJEShr5fwEe3z+gCw==",
670
+ },
671
+ fast: {
672
+ js: "((v, dv, s) => ((1.1414205468162575 * ((1.22047 * Math.min(1.9, Math.max(-7.31, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215661)) + 0.024217427345017313))",
673
+ eval: ((v, dv, s) => ((1.1414205468162575 * ((1.22047 * Math.min(1.9, Math.max(-7.31, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215661)) + 0.024217427345017313)),
674
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.141421f * ((1.22047f * fminf(1.9f, fmaxf(-7.31f, ((1f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((3.45f + fmaxf(-0.05f, ((v * 1.45f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.215661f)) + 0.024217f);\n}",
675
+ py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.141421 * ((1.22047 * torch.minimum(1.9, torch.maximum(-7.31, ((1 - (((v * v) * (v * v)) * 0.000001)) - (((3.45 + torch.maximum(-0.05, ((v * 1.45) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((3.45 + torch.maximum(-0.05, ((v * 1.45) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.215661)) + 0.024217)",
676
+ wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAKjAIBiQIARKXu+DBCQ/I/RGX8+4wLh/M/RGZmZmZmZv4/RD0K16NwPR3ARAAAAAAAAPA/IAAgAKIgACAAoqJEje21oPfGsD6ioUSamZmZmZkLQESamZmZmZmpvyAARDMzMzMzM/c/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKREmpmZmZmZC0BEmpmZmZmZqb8gAEQzMzMzMzP3P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJEZOYCl8eayz+gokQCq8IJdMyYP6AL",
663
677
  },
664
678
  meta: {
665
- metric: 0.004462086832640868,
679
+ metric: 0.002938652617546022,
666
680
  level: 2,
667
681
  formulaCost: 20,
668
682
  exactCost: 30,
@@ -710,7 +724,7 @@ const kernels = {
710
724
  formulaCost: 44,
711
725
  exactCost: 43,
712
726
  speedupVsExact: 0.9772727272727273,
713
- vsIterative: {"label":"CORDIC · 16 micro-rotations","speedup":1.4545454545454546},
727
+ vsIterative: {"label":"CORDIC · 16 micro-rotations","speedup":1.5},
714
728
  },
715
729
  },
716
730
  "gauss_shader": {
@@ -1319,6 +1333,13 @@ const kernels = {
1319
1333
  py: "import torch\n\ndef spear_fn(da, t):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (1 / (abs((1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))) < 1e-4 ? 1e-4 : (1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))))",
1320
1334
  wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDZXhwAAEDAgEABwkBBXNwZWFyAAEKvwEBvAEARAAAAAAAAPA/RAAAAAAAAPA/IAAgAZlELUMc6+I2Gj+lIAGmo0QAAAAAAIjDwKVEAAAAAACIw0CkmkQAAAAAAABJwKVEAAAAAAAASUCkEACgmUQtQxzr4jYaP6VEAAAAAAAA8D8gACABmUQtQxzr4jYaP6UgAaajRAAAAAAAiMPApUQAAAAAAIjDQKSaRAAAAAAAAEnApUQAAAAAAABJQKQQAKCmo0QAAAAAAIjDwKVEAAAAAACIw0CkCw==",
1321
1335
  },
1336
+ fast: {
1337
+ js: "((da, t) => Math.min(1e4, Math.max(-1e4, (1) / (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) < 1e-4 && ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) > -1e-4 ? (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) >= 0 ? 1e-4 : -1e-4) : ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t))))))))))))))",
1338
+ eval: ((da, t) => Math.min(1e4, Math.max(-1e4, (1) / (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) < 1e-4 && ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) > -1e-4 ? (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) >= 0 ? 1e-4 : -1e-4) : ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))))))),
1339
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return fminf(fmaxf((1f / copysignf(fmaxf(fabsf((1f + expf(fmaxf(-50.0f, fminf(50.0f, (-fminf(fmaxf((da / copysignf(fmaxf(fabsf(t), 1.0e-4f), t)), -1.0e4f), 1.0e4f))))))), 1.0e-4f), (1f + expf(fmaxf(-50.0f, fminf(50.0f, (-fminf(fmaxf((da / copysignf(fmaxf(fabsf(t), 1.0e-4f), t)), -1.0e4f), 1.0e4f)))))))), -1.0e4f), 1.0e4f);\n}",
1340
+ py: "import torch\n\ndef spear_fn(da, t):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (1 / (abs((1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))) < 1e-4 ? 1e-4 : (1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))))",
1341
+ wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDZXhwAAEDAgEABwkBBXNwZWFyAAEKvwEBvAEARAAAAAAAAPA/RAAAAAAAAPA/IAAgAZlELUMc6+I2Gj+lIAGmo0QAAAAAAIjDwKVEAAAAAACIw0CkmkQAAAAAAABJwKVEAAAAAAAASUCkEACgmUQtQxzr4jYaP6VEAAAAAAAA8D8gACABmUQtQxzr4jYaP6UgAaajRAAAAAAAiMPApUQAAAAAAIjDQKSaRAAAAAAAAEnApUQAAAAAAABJQKQQAKCmo0QAAAAAAIjDwKVEAAAAAACIw0CkCw==",
1342
+ },
1322
1343
  meta: {
1323
1344
  metric: 7.439476402624881e-47,
1324
1345
  level: 2,
@@ -1406,18 +1427,18 @@ const kernels = {
1406
1427
  "grover_amplitude": {
1407
1428
  id: "grover_amplitude",
1408
1429
  precise: {
1409
- js: "((k) => ((0.4208666946976904 * Math.min(1e4, Math.max(-1e4, ((-k)) / ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) < 1e-4 && (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) > -1e-4 ? ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) >= 0 ? 1e-4 : -1e-4) : (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))))))) + 0.03704337736862953))",
1410
- eval: ((k) => ((0.4208666946976904 * Math.min(1e4, Math.max(-1e4, ((-k)) / ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) < 1e-4 && (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) > -1e-4 ? ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) >= 0 ? 1e-4 : -1e-4) : (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))))))) + 0.03704337736862953)),
1411
- c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((0.420867f * fminf(fmaxf(((-k) / copysignf(fmaxf(fabsf(((-k) + fminf(0.966947f, logf(fmaxf(1.0e-30f, k))))), 1.0e-4f), ((-k) + fminf(0.966947f, logf(fmaxf(1.0e-30f, k)))))), -1.0e4f), 1.0e4f)) + 0.037043f);\n}",
1412
- py: "import torch\n\ndef spear_fn(k):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((0.420867 * ((-k) / (abs(((-k) + torch.minimum(0.966947, torch.log(torch.clamp(k, min=1e-30))))) < 1e-4 ? 1e-4 : ((-k) + torch.minimum(0.966947, torch.log(torch.clamp(k, min=1e-30))))))) + 0.037043)",
1413
- wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AgsBA2VudgNsb2cAAQMCAQAHCQEFc3BlYXIAAQp0AXIARMvwbNx679o/IACaIACaRNbjvtU68e4/IABEoMLr/ktItDmlEACkoJlELUMc6+I2Gj+lIACaRNbjvtU68e4/IABEoMLr/ktItDmlEACkoKajRAAAAAAAiMPApUQAAAAAAIjDQKSiRBTOqXxZ96I/oAs=",
1430
+ js: "((k) => ((-0.9084030522924049 * (Math.min(k, (Math.min(1e4, Math.max(-1e4, (1.924223) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))) + Math.min(1e4, Math.max(-1e4, (k) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))))) * -0.38734452474957204)) + 0.07435079907199241))",
1431
+ eval: ((k) => ((-0.9084030522924049 * (Math.min(k, (Math.min(1e4, Math.max(-1e4, (1.924223) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))) + Math.min(1e4, Math.max(-1e4, (k) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))))) * -0.38734452474957204)) + 0.07435079907199241)),
1432
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((-0.908403f * (fminf(k, (fminf(fmaxf((1.924223f / copysignf(fmaxf(fabsf(k), 1.0e-4f), k)), -1.0e4f), 1.0e4f) + fminf(fmaxf((k / copysignf(fmaxf(fabsf(k), 1.0e-4f), k)), -1.0e4f), 1.0e4f))) * -0.387345f)) + 0.074351f);\n}",
1433
+ py: "import torch\n\ndef spear_fn(k):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((-0.908403 * (torch.minimum(k, ((1.924223 / (abs(k) < 1e-4 ? 1e-4 : k)) + (k / (abs(k) < 1e-4 ? 1e-4 : k)))) * -0.387345)) + 0.074351)",
1434
+ wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AwIBAAcJAQVzcGVhcgAACnsBeQBEsNYlR6MR7b8gAERKYHMOnsn+PyAAmUQtQxzr4jYaP6UgAKajRAAAAAAAiMPApUQAAAAAAIjDQKQgACAAmUQtQxzr4jYaP6UgAKajRAAAAAAAiMPApUQAAAAAAIjDQKSgpER6YYWwQMrYv6KiRLoXcmqnCLM/oAs=",
1414
1435
  },
1415
1436
  meta: {
1416
- metric: 0.10656101522361813,
1437
+ metric: 0.10609082949960358,
1417
1438
  level: 0,
1418
- formulaCost: 30,
1439
+ formulaCost: 13,
1419
1440
  exactCost: 48,
1420
- speedupVsExact: 1.6,
1441
+ speedupVsExact: 3.6923076923076925,
1421
1442
  vsIterative: null,
1422
1443
  },
1423
1444
  },
@@ -1547,7 +1568,7 @@ const kernels = {
1547
1568
  formulaCost: 55,
1548
1569
  exactCost: 22,
1549
1570
  speedupVsExact: 0.4,
1550
- vsIterative: {"label":"BFGS optimisation","speedup":14.545454545454545},
1571
+ vsIterative: {"label":"BFGS optimisation","speedup":14.5},
1551
1572
  },
1552
1573
  },
1553
1574
  "amp_damp_fid": {
@@ -1565,7 +1586,7 @@ const kernels = {
1565
1586
  formulaCost: 124,
1566
1587
  exactCost: 24,
1567
1588
  speedupVsExact: 0.1935483870967742,
1568
- vsIterative: {"label":"Kraus ops 4×4 matmul","speedup":0.3870967741935484},
1589
+ vsIterative: {"label":"Kraus ops 4×4 matmul","speedup":0.4},
1569
1590
  },
1570
1591
  },
1571
1592
  "loschmidt_rate": {
@@ -1590,7 +1611,7 @@ const kernels = {
1590
1611
  formulaCost: 47,
1591
1612
  exactCost: 18,
1592
1613
  speedupVsExact: 0.3829787234042553,
1593
- vsIterative: {"label":"Diag complète 128 modes","speedup":13.617021276595745},
1614
+ vsIterative: {"label":"Diag complète 128 modes","speedup":13.6},
1594
1615
  },
1595
1616
  },
1596
1617
  "bessel_i0e": {
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // Auto-generated by scripts/gen-kernels-package.ts DO NOT EDIT.
1
+ // Auto-generated by scripts/gen-kernels-package.ts — DO NOT EDIT.
2
2
  // Self-contained runtime: the arrow functions below ARE the kernels.
3
3
  export const kernels = {
4
4
  "silu": {
@@ -159,7 +159,7 @@ export const kernels = {
159
159
  formulaCost: 25,
160
160
  exactCost: 34,
161
161
  speedupVsExact: 1.36,
162
- vsIterative: {"label":"Monte-Carlo · 1000 tirages","speedup":1840},
162
+ vsIterative: {"label":"Monte-Carlo · 1000 tirages","speedup":1840},
163
163
  },
164
164
  },
165
165
  "damped_pendulum": {
@@ -184,7 +184,7 @@ export const kernels = {
184
184
  formulaCost: 46,
185
185
  exactCost: null,
186
186
  speedupVsExact: null,
187
- vsIterative: {"label":"Euler-Cromer · 60 pas","speedup":32.608695652173914},
187
+ vsIterative: {"label":"Euler-Cromer · 60 pas","speedup":32.6},
188
188
  },
189
189
  },
190
190
  "rl_distillation": {
@@ -445,7 +445,7 @@ export const kernels = {
445
445
  formulaCost: 13,
446
446
  exactCost: 17,
447
447
  speedupVsExact: 1.3076923076923077,
448
- vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":184.6153846153846},
448
+ vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":184.6},
449
449
  },
450
450
  },
451
451
  "lennard_jones": {
@@ -488,7 +488,7 @@ export const kernels = {
488
488
  formulaCost: 27,
489
489
  exactCost: 44,
490
490
  speedupVsExact: 1.6296296296296295,
491
- vsIterative: {"label":"RKF45 · 300 pas","speedup":200},
491
+ vsIterative: {"label":"RKF45 · 300 pas","speedup":200},
492
492
  },
493
493
  },
494
494
  "logistic_growth": {
@@ -550,6 +550,13 @@ export const kernels = {
550
550
  py: "import torch\n\ndef spear_fn(x):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((-1.553578 * torch.maximum(torch.sqrt(torch.abs((6.660595 - torch.maximum(3.1671, x)))), 0.603662)) + 2.906087)",
551
551
  wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AwIBAAcJAQVzcGVhcgAACjoBOABEuI/cmnTb+L9Ev5oDBHOkGkBE9UpZhjhWCUAgAKWhmZ9EgdB6+DJR4z+lokRhpYKKqj8HQKAL",
552
552
  },
553
+ fast: {
554
+ js: "((t, x) => (((t) * (t) * Math.sin((4.822148 * t))) * (x * Math.sin((4.8694 * t)))))",
555
+ eval: ((t, x) => (((t) * (t) * Math.sin((4.822148 * t))) * (x * Math.sin((4.8694 * t))))),
556
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((powf(t, 2.0f) * sinf((4.822148f * t))) * (x * sinf((4.8694f * t))));\n}",
557
+ py: "import torch\n\ndef spear_fn(t, x):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (((t * t) * torch.sin((4.822148 * t))) * (x * torch.sin((4.8694 * t))))",
558
+ wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDc2luAAEDAgEABwkBBXNwZWFyAAEKKgEoACAAIACiRCLjUSrhSRNAIACiEACiIAFE0ZFc/kN6E0AgAKIQAKKiCw==",
559
+ },
553
560
  meta: {
554
561
  metric: 0.0017117911533114868,
555
562
  level: 2,
@@ -581,7 +588,7 @@ export const kernels = {
581
588
  formulaCost: 18,
582
589
  exactCost: 21,
583
590
  speedupVsExact: 1.1666666666666667,
584
- vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":133.33333333333334},
591
+ vsIterative: {"label":"RK4 géodésique · 200 pas","speedup":133.3},
585
592
  },
586
593
  },
587
594
  "pendulum_hybrid": {
@@ -624,7 +631,7 @@ export const kernels = {
624
631
  formulaCost: 120,
625
632
  exactCost: null,
626
633
  speedupVsExact: null,
627
- vsIterative: {"label":"Jacobi · 4 balayages","speedup":1.6666666666666667},
634
+ vsIterative: {"label":"Jacobi · 4 balayages","speedup":1.7},
628
635
  },
629
636
  },
630
637
  "ik_reach": {
@@ -649,20 +656,27 @@ export const kernels = {
649
656
  formulaCost: 52,
650
657
  exactCost: null,
651
658
  speedupVsExact: null,
652
- vsIterative: {"label":"Newton-DLS · 8 itérations","speedup":6.153846153846154},
659
+ vsIterative: {"label":"Newton-DLS · 8 itérations","speedup":6.2},
653
660
  },
654
661
  },
655
662
  "idm_following": {
656
663
  id: "idm_following",
657
664
  precise: {
658
- js: "((v, dv, s) => ((1.817293 * Math.min(0.9724, Math.max(-5.078809, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215108))",
659
- eval: ((v, dv, s) => ((1.817293 * Math.min(0.9724, Math.max(-5.078809, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.643464 + Math.max(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215108)),
660
- c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.817293f * fminf(0.9724f, fmaxf(-5.078809f, ((1f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((2.643464f + fmaxf(-0.582903f, ((v * 1.536227f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.215108f);\n}",
661
- py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.817293 * torch.minimum(0.9724, torch.maximum(-5.078809, ((1 - (((v * v) * (v * v)) * 0.000001)) - (((2.643464 + torch.maximum(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((2.643464 + torch.maximum(-0.582903, ((v * 1.536227) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.215108)",
662
- wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAK+AEB9QEAROP+I9OhE/0/RD0s1JrmHe8/RJiFdk6zUBTARAAAAAAAAPA/IAAgAKIgACAAoqJEje21oPfGsD6ioUQMOiF00CUFQERwsDcxJKfivyAARA+3Q8NilPg/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKREDDohdNAlBUBEcLA3MSSn4r8gAEQPt0PDYpT4P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJE5dGNsKiIyz+gCw==",
665
+ js: "((v, dv, s) => ((1.825166 * Math.min(1.9, Math.max(-5.198308, ((0.840532 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.4862064122902764))",
666
+ eval: ((v, dv, s) => ((1.825166 * Math.min(1.9, Math.max(-5.198308, ((0.840532 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((2.393229 + Math.max(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.4862064122902764)),
667
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.825166f * fminf(1.9f, fmaxf(-5.198308f, ((0.840532f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((2.393229f + fmaxf(-0.435303f, ((v * 1.543892f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.486206f);\n}",
668
+ py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.825166 * torch.minimum(1.9, torch.maximum(-5.198308, ((0.840532 - (((v * v) * (v * v)) * 0.000001)) - (((2.393229 + torch.maximum(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((2.393229 + torch.maximum(-0.435303, ((v * 1.543892) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.486206)",
669
+ wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAK+AEB9QEARJNWfEPhM/0/RGZmZmZmZv4/RAMkmkARyxTARCO6Z12j5eo/IAAgAKIgACAAoqJEje21oPfGsD6ioUTUtfY+VSUDQESscTYdAdzbvyAARILlCBnIs/g/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKRE1LX2PlUlA0BErHE2HQHc278gAESC5QgZyLP4P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJEShr5fwEe3z+gCw==",
670
+ },
671
+ fast: {
672
+ js: "((v, dv, s) => ((1.1414205468162575 * ((1.22047 * Math.min(1.9, Math.max(-7.31, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215661)) + 0.024217427345017313))",
673
+ eval: ((v, dv, s) => ((1.1414205468162575 * ((1.22047 * Math.min(1.9, Math.max(-7.31, ((1 - (((v) * (v)) * ((v) * (v)) * 0.000001)) - (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))) * (Math.min(1e4, Math.max(-1e4, ((3.45 + Math.max(-0.05, ((v * 1.45) + ((v * dv) * 0.212766))))) / ((s) < 1e-4 && (s) > -1e-4 ? ((s) >= 0 ? 1e-4 : -1e-4) : (s))))))))) + 0.215661)) + 0.024217427345017313)),
674
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((1.141421f * ((1.22047f * fminf(1.9f, fmaxf(-7.31f, ((1f - (powf(powf(v, 2.0f), 2.0f) * 0.000001f)) - powf(fminf(fmaxf(((3.45f + fmaxf(-0.05f, ((v * 1.45f) + ((v * dv) * 0.212766f)))) / copysignf(fmaxf(fabsf(s), 1.0e-4f), s)), -1.0e4f), 1.0e4f), 2.0f))))) + 0.215661f)) + 0.024217f);\n}",
675
+ py: "import torch\n\ndef spear_fn(v, dv, s):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((1.141421 * ((1.22047 * torch.minimum(1.9, torch.maximum(-7.31, ((1 - (((v * v) * (v * v)) * 0.000001)) - (((3.45 + torch.maximum(-0.05, ((v * 1.45) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s)) * ((3.45 + torch.maximum(-0.05, ((v * 1.45) + ((v * dv) * 0.212766)))) / (abs(s) < 1e-4 ? 1e-4 : s))))))) + 0.215661)) + 0.024217)",
676
+ wasmBase64: "AGFzbQEAAAABDQJgA3x8fAF8YAF8AXwDAgEABwkBBXNwZWFyAAAKjAIBiQIARKXu+DBCQ/I/RGX8+4wLh/M/RGZmZmZmZv4/RD0K16NwPR3ARAAAAAAAAPA/IAAgAKIgACAAoqJEje21oPfGsD6ioUSamZmZmZkLQESamZmZmZmpvyAARDMzMzMzM/c/oiAAIAGiRLix2ZHqO8s/oqCloCACmUQtQxzr4jYaP6UgAqajRAAAAAAAiMPApUQAAAAAAIjDQKREmpmZmZmZC0BEmpmZmZmZqb8gAEQzMzMzMzP3P6IgACABokS4sdmR6jvLP6KgpaAgAplELUMc6+I2Gj+lIAKmo0QAAAAAAIjDwKVEAAAAAACIw0CkoqGlpKJEZOYCl8eayz+gokQCq8IJdMyYP6AL",
663
677
  },
664
678
  meta: {
665
- metric: 0.004462086832640868,
679
+ metric: 0.002938652617546022,
666
680
  level: 2,
667
681
  formulaCost: 20,
668
682
  exactCost: 30,
@@ -710,7 +724,7 @@ export const kernels = {
710
724
  formulaCost: 44,
711
725
  exactCost: 43,
712
726
  speedupVsExact: 0.9772727272727273,
713
- vsIterative: {"label":"CORDIC · 16 micro-rotations","speedup":1.4545454545454546},
727
+ vsIterative: {"label":"CORDIC · 16 micro-rotations","speedup":1.5},
714
728
  },
715
729
  },
716
730
  "gauss_shader": {
@@ -1319,6 +1333,13 @@ export const kernels = {
1319
1333
  py: "import torch\n\ndef spear_fn(da, t):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (1 / (abs((1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))) < 1e-4 ? 1e-4 : (1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))))",
1320
1334
  wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDZXhwAAEDAgEABwkBBXNwZWFyAAEKvwEBvAEARAAAAAAAAPA/RAAAAAAAAPA/IAAgAZlELUMc6+I2Gj+lIAGmo0QAAAAAAIjDwKVEAAAAAACIw0CkmkQAAAAAAABJwKVEAAAAAAAASUCkEACgmUQtQxzr4jYaP6VEAAAAAAAA8D8gACABmUQtQxzr4jYaP6UgAaajRAAAAAAAiMPApUQAAAAAAIjDQKSaRAAAAAAAAEnApUQAAAAAAABJQKQQAKCmo0QAAAAAAIjDwKVEAAAAAACIw0CkCw==",
1321
1335
  },
1336
+ fast: {
1337
+ js: "((da, t) => Math.min(1e4, Math.max(-1e4, (1) / (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) < 1e-4 && ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) > -1e-4 ? (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) >= 0 ? 1e-4 : -1e-4) : ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t))))))))))))))",
1338
+ eval: ((da, t) => Math.min(1e4, Math.max(-1e4, (1) / (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) < 1e-4 && ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) > -1e-4 ? (((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))) >= 0 ? 1e-4 : -1e-4) : ((1 + Math.exp(Math.max(-50, Math.min(50, (-Math.min(1e4, Math.max(-1e4, (da) / ((t) < 1e-4 && (t) > -1e-4 ? ((t) >= 0 ? 1e-4 : -1e-4) : (t)))))))))))))),
1339
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return fminf(fmaxf((1f / copysignf(fmaxf(fabsf((1f + expf(fmaxf(-50.0f, fminf(50.0f, (-fminf(fmaxf((da / copysignf(fmaxf(fabsf(t), 1.0e-4f), t)), -1.0e4f), 1.0e4f))))))), 1.0e-4f), (1f + expf(fmaxf(-50.0f, fminf(50.0f, (-fminf(fmaxf((da / copysignf(fmaxf(fabsf(t), 1.0e-4f), t)), -1.0e4f), 1.0e4f)))))))), -1.0e4f), 1.0e4f);\n}",
1340
+ py: "import torch\n\ndef spear_fn(da, t):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return (1 / (abs((1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))) < 1e-4 ? 1e-4 : (1 + torch.exp(torch.clamp((-(da / (abs(t) < 1e-4 ? 1e-4 : t))), -50.0, 50.0)))))",
1341
+ wasmBase64: "AGFzbQEAAAABDAJgAnx8AXxgAXwBfAILAQNlbnYDZXhwAAEDAgEABwkBBXNwZWFyAAEKvwEBvAEARAAAAAAAAPA/RAAAAAAAAPA/IAAgAZlELUMc6+I2Gj+lIAGmo0QAAAAAAIjDwKVEAAAAAACIw0CkmkQAAAAAAABJwKVEAAAAAAAASUCkEACgmUQtQxzr4jYaP6VEAAAAAAAA8D8gACABmUQtQxzr4jYaP6UgAaajRAAAAAAAiMPApUQAAAAAAIjDQKSaRAAAAAAAAEnApUQAAAAAAABJQKQQAKCmo0QAAAAAAIjDwKVEAAAAAACIw0CkCw==",
1342
+ },
1322
1343
  meta: {
1323
1344
  metric: 7.439476402624881e-47,
1324
1345
  level: 2,
@@ -1406,18 +1427,18 @@ export const kernels = {
1406
1427
  "grover_amplitude": {
1407
1428
  id: "grover_amplitude",
1408
1429
  precise: {
1409
- js: "((k) => ((0.4208666946976904 * Math.min(1e4, Math.max(-1e4, ((-k)) / ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) < 1e-4 && (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) > -1e-4 ? ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) >= 0 ? 1e-4 : -1e-4) : (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))))))) + 0.03704337736862953))",
1410
- eval: ((k) => ((0.4208666946976904 * Math.min(1e4, Math.max(-1e4, ((-k)) / ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) < 1e-4 && (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) > -1e-4 ? ((((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))) >= 0 ? 1e-4 : -1e-4) : (((-k) + Math.min(0.966947, Math.log(Math.max(1e-30, k))))))))) + 0.03704337736862953)),
1411
- c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((0.420867f * fminf(fmaxf(((-k) / copysignf(fmaxf(fabsf(((-k) + fminf(0.966947f, logf(fmaxf(1.0e-30f, k))))), 1.0e-4f), ((-k) + fminf(0.966947f, logf(fmaxf(1.0e-30f, k)))))), -1.0e4f), 1.0e4f)) + 0.037043f);\n}",
1412
- py: "import torch\n\ndef spear_fn(k):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((0.420867 * ((-k) / (abs(((-k) + torch.minimum(0.966947, torch.log(torch.clamp(k, min=1e-30))))) < 1e-4 ? 1e-4 : ((-k) + torch.minimum(0.966947, torch.log(torch.clamp(k, min=1e-30))))))) + 0.037043)",
1413
- wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AgsBA2VudgNsb2cAAQMCAQAHCQEFc3BlYXIAAQp0AXIARMvwbNx679o/IACaIACaRNbjvtU68e4/IABEoMLr/ktItDmlEACkoJlELUMc6+I2Gj+lIACaRNbjvtU68e4/IABEoMLr/ktItDmlEACkoKajRAAAAAAAiMPApUQAAAAAAIjDQKSiRBTOqXxZ96I/oAs=",
1430
+ js: "((k) => ((-0.9084030522924049 * (Math.min(k, (Math.min(1e4, Math.max(-1e4, (1.924223) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))) + Math.min(1e4, Math.max(-1e4, (k) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))))) * -0.38734452474957204)) + 0.07435079907199241))",
1431
+ eval: ((k) => ((-0.9084030522924049 * (Math.min(k, (Math.min(1e4, Math.max(-1e4, (1.924223) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))) + Math.min(1e4, Math.max(-1e4, (k) / ((k) < 1e-4 && (k) > -1e-4 ? ((k) >= 0 ? 1e-4 : -1e-4) : (k)))))) * -0.38734452474957204)) + 0.07435079907199241)),
1432
+ c: "// Evolved by SPEAR — algebraic only, FP16 safe\n__device__ inline float spear_fn(const float x) {\n return ((-0.908403f * (fminf(k, (fminf(fmaxf((1.924223f / copysignf(fmaxf(fabsf(k), 1.0e-4f), k)), -1.0e4f), 1.0e4f) + fminf(fmaxf((k / copysignf(fmaxf(fabsf(k), 1.0e-4f), k)), -1.0e4f), 1.0e4f))) * -0.387345f)) + 0.074351f);\n}",
1433
+ py: "import torch\n\ndef spear_fn(k):\n # Evolved by SPEAR — zero transcendental ops (exp/erf/tanh free)\n return ((-0.908403 * (torch.minimum(k, ((1.924223 / (abs(k) < 1e-4 ? 1e-4 : k)) + (k / (abs(k) < 1e-4 ? 1e-4 : k)))) * -0.387345)) + 0.074351)",
1434
+ wasmBase64: "AGFzbQEAAAABCwJgAXwBfGABfAF8AwIBAAcJAQVzcGVhcgAACnsBeQBEsNYlR6MR7b8gAERKYHMOnsn+PyAAmUQtQxzr4jYaP6UgAKajRAAAAAAAiMPApUQAAAAAAIjDQKQgACAAmUQtQxzr4jYaP6UgAKajRAAAAAAAiMPApUQAAAAAAIjDQKSgpER6YYWwQMrYv6KiRLoXcmqnCLM/oAs=",
1414
1435
  },
1415
1436
  meta: {
1416
- metric: 0.10656101522361813,
1437
+ metric: 0.10609082949960358,
1417
1438
  level: 0,
1418
- formulaCost: 30,
1439
+ formulaCost: 13,
1419
1440
  exactCost: 48,
1420
- speedupVsExact: 1.6,
1441
+ speedupVsExact: 3.6923076923076925,
1421
1442
  vsIterative: null,
1422
1443
  },
1423
1444
  },
@@ -1547,7 +1568,7 @@ export const kernels = {
1547
1568
  formulaCost: 55,
1548
1569
  exactCost: 22,
1549
1570
  speedupVsExact: 0.4,
1550
- vsIterative: {"label":"BFGS optimisation","speedup":14.545454545454545},
1571
+ vsIterative: {"label":"BFGS optimisation","speedup":14.5},
1551
1572
  },
1552
1573
  },
1553
1574
  "amp_damp_fid": {
@@ -1565,7 +1586,7 @@ export const kernels = {
1565
1586
  formulaCost: 124,
1566
1587
  exactCost: 24,
1567
1588
  speedupVsExact: 0.1935483870967742,
1568
- vsIterative: {"label":"Kraus ops 4×4 matmul","speedup":0.3870967741935484},
1589
+ vsIterative: {"label":"Kraus ops 4×4 matmul","speedup":0.4},
1569
1590
  },
1570
1591
  },
1571
1592
  "loschmidt_rate": {
@@ -1590,7 +1611,7 @@ export const kernels = {
1590
1611
  formulaCost: 47,
1591
1612
  exactCost: 18,
1592
1613
  speedupVsExact: 0.3829787234042553,
1593
- vsIterative: {"label":"Diag complète 128 modes","speedup":13.617021276595745},
1614
+ vsIterative: {"label":"Diag complète 128 modes","speedup":13.6},
1594
1615
  },
1595
1616
  },
1596
1617
  "bessel_i0e": {
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
- {
2
- "name": "spear-kernels",
3
- "version": "1.3.0",
4
- "description": "Closed-form kernels discovered by the SPEAR symbolic regression engine, shipped as JS, CUDA C, PyTorch and WebAssembly.",
5
- "license": "MIT",
6
- "type": "module",
7
- "main": "./index.cjs",
8
- "module": "./index.js",
9
- "types": "./index.d.ts",
10
- "exports": {
11
- ".": {
12
- "types": "./index.d.ts",
13
- "import": "./index.js",
14
- "require": "./index.cjs"
15
- },
16
- "./package.json": "./package.json"
17
- },
18
- "files": [
19
- "index.js",
20
- "index.cjs",
21
- "index.d.ts",
22
- "README.md"
23
- ],
24
- "sideEffects": false
25
- }
1
+ {
2
+ "name": "spear-kernels",
3
+ "version": "1.4.0",
4
+ "description": "Closed-form kernels discovered by the SPEAR symbolic regression engine, shipped as JS, CUDA C, PyTorch and WebAssembly.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./index.cjs",
8
+ "module": "./index.js",
9
+ "types": "./index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./index.d.ts",
13
+ "import": "./index.js",
14
+ "require": "./index.cjs"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "files": [
19
+ "index.js",
20
+ "index.cjs",
21
+ "index.d.ts",
22
+ "README.md"
23
+ ],
24
+ "sideEffects": false
25
+ }