wgblas 1.0.0 → 1.1.1

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.
@@ -1,4 +1,4 @@
1
- var wgblas=(()=>{var Je=Object.create;var or=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var et=Object.getOwnPropertyNames;var tt=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var nr=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(r,e)=>(typeof require<"u"?require:r)[e]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var W=(a,r,e)=>()=>{if(e)throw e[0];try{return a&&(r=a(a=0)),r}catch(i){throw e=[i],i}};var hr=(a,r)=>{for(var e in r)or(a,e,{get:r[e],enumerable:!0})},xr=(a,r,e,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of et(r))!at.call(a,t)&&t!==e&&or(a,t,{get:()=>r[t],enumerable:!(i=rt(r,t))||i.enumerable});return a};var sr=(a,r,e)=>(e=a!=null?Je(tt(a)):{},xr(r||!a||!a.__esModule?or(e,"default",{value:a,enumerable:!0}):e,a)),it=a=>xr(or({},"__esModule",{value:!0}),a);var jr,Ir=W(()=>{jr=`// amax reduction: collapses 2*WGS (value, index) pairs into one index.
1
+ var wgblas=(()=>{var mt=Object.create;var ur=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var lr=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(r,e)=>(typeof require<"u"?require:r)[e]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var I=(a,r,e)=>()=>{if(e)throw e[0];try{return a&&(r=a(a=0)),r}catch(o){throw e=[o],o}};var yr=(a,r)=>{for(var e in r)ur(a,e,{get:r[e],enumerable:!0})},_r=(a,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of pt(r))!wt.call(a,t)&&t!==e&&ur(a,t,{get:()=>r[t],enumerable:!(o=dt(r,t))||o.enumerable});return a};var fr=(a,r,e)=>(e=a!=null?mt(gt(a)):{},_r(r||!a||!a.__esModule?ur(e,"default",{value:a,enumerable:!0}):e,a)),bt=a=>_r(ur({},"__esModule",{value:!0}),a);var Ur,Mr=I(()=>{Ur=`// amax reduction: collapses 2*WGS (value, index) pairs into one index.
2
2
  // dispatch: 1 workgroup of WGS threads.
3
3
  // partials_val and partials_idx must have exactly 2*WGS entries.
4
4
 
@@ -41,7 +41,7 @@ fn reduce(
41
41
 
42
42
  if (i == 0u) { result[0] = tile_idx[0]; }
43
43
  }
44
- `});var Wr,Nr=W(()=>{Wr=`// sum reduction: collapses 2*WGS partials into one scalar.
44
+ `});var Vr,Tr=I(()=>{Vr=`// sum reduction: collapses 2*WGS partials into one scalar.
45
45
  // dispatch: 1 workgroup of WGS threads.
46
46
  // partials must have exactly 2*WGS entries.
47
47
 
@@ -67,7 +67,7 @@ fn reduce(
67
67
 
68
68
  if (i == 0u) { result[0] = tile[0]; }
69
69
  }
70
- `});var Ur,Mr=W(()=>{Ur=`// sum reduction (f64): collapses 2*WGS partial [main, aux] pairs into one,
70
+ `});var Hr,Rr=I(()=>{Hr=`// sum reduction (f64): collapses 2*WGS partial [main, aux] pairs into one,
71
71
  // using computeSum instead of plain f32 \`+\` (see reduction/sum.wgsl for the
72
72
  // f32 original this mirrors).
73
73
  // dispatch: 1 workgroup of WGS threads. partialsMain/partialsAux must have
@@ -116,7 +116,7 @@ fn reduce_f64(
116
116
  resultAux[0] = tile[0].aux;
117
117
  }
118
118
  }
119
- `});var Rr,Tr=W(()=>{Rr=`// sscal: x = alpha * x
119
+ `});var Cr,Dr=I(()=>{Cr=`// sscal: x = alpha * x
120
120
 
121
121
  @group(0) @binding(0) var<storage, read_write> x: array<f32>;
122
122
 
@@ -139,7 +139,7 @@ fn main(
139
139
  x[id * params.x_inc] = params.alpha * x[id * params.x_inc];
140
140
  }
141
141
  }
142
- `});var Hr,Vr=W(()=>{Hr=`// sswap: x <-> y
142
+ `});var zr,Or=I(()=>{zr=`// sswap: x <-> y
143
143
 
144
144
  @group(0) @binding(0) var<storage, read_write> x: array<f32>;
145
145
  @group(0) @binding(1) var<storage, read_write> y: array<f32>;
@@ -165,7 +165,7 @@ fn main(
165
165
  y[id * params.y_inc] = temp;
166
166
  }
167
167
  }
168
- `});var Cr,Dr=W(()=>{Cr=`// saxpy: y = alpha * x + y
168
+ `});var qr,Qr=I(()=>{qr=`// saxpy: y = alpha * x + y
169
169
 
170
170
  @group(0) @binding(0) var<storage, read> x: array<f32>;
171
171
  @group(0) @binding(1) var<storage, read_write> y: array<f32>;
@@ -190,7 +190,7 @@ fn main(
190
190
  y[id * params.y_inc] = params.alpha * x[id * params.x_inc] + y[id * params.y_inc];
191
191
  }
192
192
  }
193
- `});var zr,Or=W(()=>{zr=`// scopy: y = x
193
+ `});var Kr,Zr=I(()=>{Kr=`// scopy: y = x
194
194
 
195
195
  @group(0) @binding(0) var<storage, read> x: array<f32>;
196
196
  @group(0) @binding(1) var<storage, read_write> y: array<f32>;
@@ -214,7 +214,7 @@ fn main(
214
214
  y[id * params.y_inc] = x[id * params.x_inc];
215
215
  }
216
216
  }
217
- `});var qr,Qr=W(()=>{qr=`// sdot: result = sum(x[i] * y[i])
217
+ `});var $r,Xr=I(()=>{$r=`// sdot: result = sum(x[i] * y[i])
218
218
  // pass 1 dispatches exactly 2 * WGS workgroups; pass 2 uses reduction/sum.wgsl.
219
219
 
220
220
  @group(0) @binding(0) var<storage, read> x: array<f32>;
@@ -267,7 +267,7 @@ fn main(
267
267
 
268
268
  if (lid.x == 0u) { partials[wgid.x] = tile[0]; }
269
269
  }
270
- `});var Kr,Zr=W(()=>{Kr=`// sasum: result = sum(|x[i]|)
270
+ `});var Jr,Yr=I(()=>{Jr=`// sasum: result = sum(|x[i]|)
271
271
  // pass 1 dispatches exactly 2 * WGS workgroups; pass 2 uses reduction/abssum.wgsl.
272
272
 
273
273
  @group(0) @binding(0) var<storage, read> x: array<f32>;
@@ -318,7 +318,7 @@ fn main(
318
318
 
319
319
  if (lid.x == 0u) { partials[wgid.x] = tile[0]; }
320
320
  }
321
- `});var $r,Xr=W(()=>{$r=`// snrm2: result = sqrt(sum(x[i] * x[i]))
321
+ `});var ee,re=I(()=>{ee=`// snrm2: result = sqrt(sum(x[i] * x[i]))
322
322
  // pass 1 dispatches exactly 2 * WGS workgroups; pass 2 uses reduction/sqsum.wgsl.
323
323
 
324
324
  @group(0) @binding(0) var<storage, read> x: array<f32>;
@@ -374,7 +374,7 @@ fn main(
374
374
 
375
375
  if (lid.x == 0u) { partials[wgid.x] = tile[0]; }
376
376
  }
377
- `});var Jr,Yr=W(()=>{Jr=`// srot: x = c*x + s*y, y = -s*x + c*y
377
+ `});var ae,te=I(()=>{ae=`// srot: x = c*x + s*y, y = -s*x + c*y
378
378
 
379
379
  @group(0) @binding(0) var<storage, read_write> x: array<f32>;
380
380
  @group(0) @binding(1) var<storage, read_write> y: array<f32>;
@@ -403,7 +403,7 @@ fn main(
403
403
  y[id * params.y_inc] = -params.s * xi + params.c * yi;
404
404
  }
405
405
  }
406
- `});var ee,re=W(()=>{ee=`// srotm: applies modified Givens rotation H to vectors x and y.
406
+ `});var ie,oe=I(()=>{ie=`// srotm: applies modified Givens rotation H to vectors x and y.
407
407
  // param[0] = flag: -1 (full H), 0 (unit diagonal), 1 (unit off-diagonal)
408
408
  // param = [ flag, h11, h21, h12, h22 ]
409
409
  // flag == -2 (identity/no-op) is handled in JS before dispatch reaches here.
@@ -453,7 +453,7 @@ fn main(
453
453
  y[id * params.y_inc] = h21 * xi + h22 * yi;
454
454
  }
455
455
  }
456
- `});var ae,te=W(()=>{ae=`// isamax: returns index of element with largest absolute value
456
+ `});var se,ne=I(()=>{se=`// isamax: returns index of element with largest absolute value
457
457
  // pass 1 dispatches exactly 2 * WGS workgroups; pass 2 uses reduction/argmax.wgsl.
458
458
 
459
459
  @group(0) @binding(0) var<storage, read> x: array<f32>;
@@ -535,7 +535,7 @@ fn main(
535
535
  partials_idx[wgid.x] = tile_idx[0];
536
536
  }
537
537
  }
538
- `});var oe,ie=W(()=>{oe=`// sgemv_n: y = alpha * A * x + beta * y (A is m\xD7n row-major, no-transpose)
538
+ `});var le,ue=I(()=>{le=`// sgemv_n: y = alpha * A * x + beta * y (A is m\xD7n row-major, no-transpose)
539
539
  //
540
540
  // One workgroup per output row, with a grid-stride outer loop so the shader
541
541
  // still covers all rows when m exceeds maxComputeWorkgroupsPerDimension.
@@ -610,7 +610,7 @@ fn main(
610
610
  workgroupBarrier();
611
611
  }
612
612
  }
613
- `});var se,ne=W(()=>{se=`// sgemv_t: y = alpha * A^T * x + beta * y (A is m\xD7n row-major, transposed)
613
+ `});var ce,fe=I(()=>{ce=`// sgemv_t: y = alpha * A^T * x + beta * y (A is m\xD7n row-major, transposed)
614
614
  // each thread owns one column of A \u2192 one element of y (length n)
615
615
  // tiles over x (length m) using shared memory; four independent accumulators
616
616
  // let the GPU pipeline A reads across j within each tile (ILP=4)
@@ -675,7 +675,7 @@ fn main(
675
675
  y[yi] = params.alpha * (acc0 + acc1 + acc2 + acc3) + params.beta * y[yi];
676
676
  }
677
677
  }
678
- `});var le,ue=W(()=>{le=`// ssymv: y = alpha * A * x + beta * y
678
+ `});var de,me=I(()=>{de=`// ssymv: y = alpha * A * x + beta * y
679
679
  // A is n\xD7n symmetric, lower (uplo=0) or upper (uplo=1) triangle stored.
680
680
  // The logical matrix is fully dense (symmetric), so each row's dot product
681
681
  // sums over all n columns; entries on the unstored side of the diagonal are
@@ -744,7 +744,7 @@ fn main(
744
744
  }
745
745
  }
746
746
  }
747
- `});var fe,ce=W(()=>{fe=`// strmv: y = op(A) * x
747
+ `});var ge,pe=I(()=>{ge=`// strmv: y = op(A) * x
748
748
  // A is n\xD7n triangular, lower (uplo=0) or upper (uplo=1) triangle stored.
749
749
  // op(A) is A (trans=0) or A^T (trans=1).
750
750
  // diag=1 (unit) treats the diagonal as 1 without reading A's diagonal values.
@@ -847,7 +847,178 @@ fn main(
847
847
  }
848
848
  }
849
849
  }
850
- `});var me,de=W(()=>{me=`// f64add: adds two doubles, each packed as a [main, aux] pair (main: f32
850
+ `});var be,we=I(()=>{be=`// sger: A := alpha * x * y^T + A (rank-1 update, A is m\xD7n general/dense)
851
+
852
+ @group(0) @binding(0) var<storage, read> x: array<f32>;
853
+ @group(0) @binding(1) var<storage, read> y: array<f32>;
854
+ @group(0) @binding(2) var<storage, read_write> A: array<f32>;
855
+
856
+ struct Params {
857
+ m: u32,
858
+ n: u32,
859
+ alpha: f32,
860
+ incx: u32,
861
+ incy: u32,
862
+ lda: u32,
863
+ }
864
+
865
+ @group(0) @binding(3) var<uniform> params: Params;
866
+
867
+ const WGS: u32 = 64u;
868
+
869
+ @compute @workgroup_size(64)
870
+ fn main(
871
+ @builtin(workgroup_id) wgid: vec3u,
872
+ @builtin(local_invocation_id) lid: vec3u,
873
+ @builtin(num_workgroups) nwg: vec3u,
874
+ ) {
875
+ for (var row = wgid.x; row < params.m; row += nwg.x) {
876
+ let xi = params.alpha * x[row * params.incx];
877
+ let row_base = row * params.lda;
878
+
879
+ // 4-unrolled loop: each iteration issues 4 independent A/y accesses.
880
+ let n4_floor = (params.n / (4u * WGS)) * (4u * WGS);
881
+ for (var col: u32 = lid.x; col < n4_floor; col += 4u * WGS) {
882
+ let idx0 = row_base + col;
883
+ let idx1 = row_base + col + WGS;
884
+ let idx2 = row_base + col + 2u * WGS;
885
+ let idx3 = row_base + col + 3u * WGS;
886
+ A[idx0] = xi * y[ col * params.incy] + A[idx0];
887
+ A[idx1] = xi * y[(col + WGS) * params.incy] + A[idx1];
888
+ A[idx2] = xi * y[(col + 2u * WGS) * params.incy] + A[idx2];
889
+ A[idx3] = xi * y[(col + 3u * WGS) * params.incy] + A[idx3];
890
+ }
891
+ // Scalar tail: at most 3*WGS elements left after the unrolled block.
892
+ for (var col: u32 = n4_floor + lid.x; col < params.n; col += WGS) {
893
+ let idx = row_base + col;
894
+ A[idx] = xi * y[col * params.incy] + A[idx];
895
+ }
896
+ }
897
+ }
898
+ `});var xe,he=I(()=>{xe=`// ssyr: A := alpha * x * x^T + A (symmetric rank-1 update)
899
+ // A is n\xD7n symmetric; only the triangle specified by uplo is referenced/updated,
900
+ // the other triangle is implied by symmetry (not touched).
901
+
902
+ @group(0) @binding(0) var<storage, read> x: array<f32>;
903
+ @group(0) @binding(1) var<storage, read_write> A: array<f32>;
904
+
905
+ struct Params {
906
+ n: u32,
907
+ alpha: f32,
908
+ incx: u32,
909
+ lda: u32,
910
+ uplo: u32, // 0 = lower, 1 = upper
911
+ }
912
+
913
+ @group(0) @binding(2) var<uniform> params: Params;
914
+
915
+ const WGS: u32 = 64u;
916
+
917
+ @compute @workgroup_size(64)
918
+ fn main(
919
+ @builtin(workgroup_id) wgid: vec3u,
920
+ @builtin(local_invocation_id) lid: vec3u,
921
+ @builtin(num_workgroups) nwg: vec3u,
922
+ ) {
923
+ for (var row = wgid.x; row < params.n; row += nwg.x) {
924
+ let xi = params.alpha * x[row * params.incx];
925
+ let row_base = row * params.lda;
926
+
927
+ // Stored-triangle column range for this row: lower [0,row], upper [row,n).
928
+ var colStart: u32;
929
+ var colEnd: u32;
930
+ if params.uplo == 1u {
931
+ colStart = row;
932
+ colEnd = params.n;
933
+ } else {
934
+ colStart = 0u;
935
+ colEnd = row + 1u;
936
+ }
937
+
938
+ // 4-unrolled loop over the stored range.
939
+ let rangeLen = colEnd - colStart;
940
+ let n4_floor = colStart + (rangeLen / (4u * WGS)) * (4u * WGS);
941
+ for (var col: u32 = colStart + lid.x; col < n4_floor; col += 4u * WGS) {
942
+ let idx0 = row_base + col;
943
+ let idx1 = row_base + col + WGS;
944
+ let idx2 = row_base + col + 2u * WGS;
945
+ let idx3 = row_base + col + 3u * WGS;
946
+ A[idx0] = xi * x[ col * params.incx] + A[idx0];
947
+ A[idx1] = xi * x[(col + WGS) * params.incx] + A[idx1];
948
+ A[idx2] = xi * x[(col + 2u * WGS) * params.incx] + A[idx2];
949
+ A[idx3] = xi * x[(col + 3u * WGS) * params.incx] + A[idx3];
950
+ }
951
+ // Scalar tail: at most 3*WGS elements left after the unrolled block.
952
+ for (var col: u32 = n4_floor + lid.x; col < colEnd; col += WGS) {
953
+ let idx = row_base + col;
954
+ A[idx] = xi * x[col * params.incx] + A[idx];
955
+ }
956
+ }
957
+ }
958
+ `});var ye,ve=I(()=>{ye=`// ssyr2: A := alpha * x * y^T + alpha * y * x^T + A (symmetric rank-2 update)
959
+ // A is n\xD7n symmetric; only the triangle specified by uplo is referenced/updated,
960
+ // the other triangle is implied by symmetry (not touched).
961
+
962
+ @group(0) @binding(0) var<storage, read> x: array<f32>;
963
+ @group(0) @binding(1) var<storage, read> y: array<f32>;
964
+ @group(0) @binding(2) var<storage, read_write> A: array<f32>;
965
+
966
+ struct Params {
967
+ n: u32,
968
+ alpha: f32,
969
+ incx: u32,
970
+ incy: u32,
971
+ lda: u32,
972
+ uplo: u32, // 0 = lower, 1 = upper
973
+ }
974
+
975
+ @group(0) @binding(3) var<uniform> params: Params;
976
+
977
+ const WGS: u32 = 64u;
978
+
979
+ @compute @workgroup_size(64)
980
+ fn main(
981
+ @builtin(workgroup_id) wgid: vec3u,
982
+ @builtin(local_invocation_id) lid: vec3u,
983
+ @builtin(num_workgroups) nwg: vec3u,
984
+ ) {
985
+ for (var row = wgid.x; row < params.n; row += nwg.x) {
986
+ let xi = params.alpha * x[row * params.incx];
987
+ let yi = params.alpha * y[row * params.incy];
988
+ let row_base = row * params.lda;
989
+
990
+ // Stored-triangle column range for this row: lower [0,row], upper [row,n).
991
+ var colStart: u32;
992
+ var colEnd: u32;
993
+ if params.uplo == 1u {
994
+ colStart = row;
995
+ colEnd = params.n;
996
+ } else {
997
+ colStart = 0u;
998
+ colEnd = row + 1u;
999
+ }
1000
+
1001
+ // 4-unrolled loop over the stored range.
1002
+ let rangeLen = colEnd - colStart;
1003
+ let n4_floor = colStart + (rangeLen / (4u * WGS)) * (4u * WGS);
1004
+ for (var col: u32 = colStart + lid.x; col < n4_floor; col += 4u * WGS) {
1005
+ let idx0 = row_base + col;
1006
+ let idx1 = row_base + col + WGS;
1007
+ let idx2 = row_base + col + 2u * WGS;
1008
+ let idx3 = row_base + col + 3u * WGS;
1009
+ A[idx0] = xi * y[ col * params.incy] + yi * x[ col * params.incx] + A[idx0];
1010
+ A[idx1] = xi * y[(col + WGS) * params.incy] + yi * x[(col + WGS) * params.incx] + A[idx1];
1011
+ A[idx2] = xi * y[(col + 2u * WGS) * params.incy] + yi * x[(col + 2u * WGS) * params.incx] + A[idx2];
1012
+ A[idx3] = xi * y[(col + 3u * WGS) * params.incy] + yi * x[(col + 3u * WGS) * params.incx] + A[idx3];
1013
+ }
1014
+ // Scalar tail: at most 3*WGS elements left after the unrolled block.
1015
+ for (var col: u32 = n4_floor + lid.x; col < colEnd; col += WGS) {
1016
+ let idx = row_base + col;
1017
+ A[idx] = xi * y[col * params.incy] + yi * x[col * params.incx] + A[idx];
1018
+ }
1019
+ }
1020
+ }
1021
+ `});var Ee,_e=I(()=>{Ee=`// f64add: adds two doubles, each packed as a [main, aux] pair (main: f32
851
1022
  // value, aux: raw u32 bits \u2014 see src/util/f64pack.mjs; decode()/encode()
852
1023
  // below are the WGSL mirror of that file's packedToFields()/fieldsToPacked()),
853
1024
  // producing the sum as another [main, aux] pair.
@@ -1128,7 +1299,7 @@ fn computeSum(a: Fields, b: Fields) -> Packed {
1128
1299
  let f = addFields(a, b);
1129
1300
  return encode(f.sign, f.rawExp, f.mantissaHi, f.lo);
1130
1301
  }
1131
- `});var ge,pe=W(()=>{ge=`// dasum: result = sum(|x[i]|)
1302
+ `});var Ae,Ge=I(()=>{Ae=`// dasum: result = sum(|x[i]|)
1132
1303
  // pass 1 dispatches exactly 2 * WGS workgroups; pass 2 uses reduction/sumF64.wgsl.
1133
1304
  // Same structure as sasum.wgsl \u2014 every value is now a [main, aux] pair
1134
1305
  // (see src/util/f64pack.mjs) and every \`+\`/\`+=\` is computeSum via addPair
@@ -1226,7 +1397,7 @@ fn dasum_main(
1226
1397
  partialsAux[wgid.x] = tile[0].aux;
1227
1398
  }
1228
1399
  }
1229
- `});var be,we=W(()=>{be=`// strsv_invert_block: computes ONE column (workgroup_id.x) of ONE block's
1400
+ `});var ke,Be=I(()=>{ke=`// strsv_invert_block: computes ONE column (workgroup_id.x) of ONE block's
1230
1401
  // (workgroup_id.y) explicit inverse, via the same one-row-at-a-time
1231
1402
  // substitution as strsv_block.wgsl, but solving against a unit basis vector
1232
1403
  // e_col instead of the real right-hand side, and writing to a dense
@@ -1335,7 +1506,7 @@ fn strsv_invert_block_main(
1335
1506
  workgroupBarrier();
1336
1507
  }
1337
1508
  }
1338
- `});var xe,he=W(()=>{xe=`// strsv_apply_inverse: given a precomputed block inverse (from
1509
+ `});var Se,Pe=I(()=>{Se=`// strsv_apply_inverse: given a precomputed block inverse (from
1339
1510
  // strsv_invert_block.wgsl), computes this block's solution as a dense
1340
1511
  // matrix-vector multiply against the block's current remainder in x \u2014
1341
1512
  // replacing what the old strsv_block.wgsl did via a genuinely sequential,
@@ -1382,7 +1553,7 @@ fn strsv_apply_inverse_main(@builtin(local_invocation_id) lid: vec3u) {
1382
1553
  }
1383
1554
  x[(params.blockStart + lid.x) * params.incx] = acc;
1384
1555
  }
1385
- `});var ye,ve=W(()=>{ye=`// strsv_update: subtracts a solved block's contribution from every
1556
+ `});var je,Fe=I(()=>{je=`// strsv_update: subtracts a solved block's contribution from every
1386
1557
  // remaining row in parallel (one workgroup per row, like strmv.wgsl) \u2014
1387
1558
  // this is what turns strsv's O(n) sequential stages into O(n/blockSize).
1388
1559
  // No diag/masking needed: this region never touches the diagonal.
@@ -1457,7 +1628,7 @@ fn strsv_update_main(
1457
1628
  workgroupBarrier();
1458
1629
  }
1459
1630
  }
1460
- `});var _e={};hr(_e,{shaderSources:()=>Nt});var Nt,Ee=W(()=>{Ir();Nr();Mr();Tr();Vr();Dr();Or();Qr();Zr();Xr();Yr();re();te();ie();ne();ue();ce();de();pe();we();he();ve();Nt={"reduction/argmax":jr,"reduction/sum":Wr,"reduction/sumF64":Ur,sscal:Rr,sswap:Hr,saxpy:Cr,scopy:zr,sdot:qr,sasum:Kr,snrm2:$r,srot:Jr,srotm:ee,isamax:ae,sgemv_n:oe,sgemv_t:se,ssymv:le,strmv:fe,f64add:me,dasum:ge,strsv_invert_block:be,strsv_apply_inverse:xe,strsv_update:ye}});var Rt={};hr(Rt,{GpuMatrix:()=>C,GpuVector:()=>h,cleanup:()=>Br,dasum:()=>je,gpuName:()=>Ar,init:()=>kr,isamax:()=>Me,randomFloat32Array:()=>Fr,randomFloat64Array:()=>Lr,sasum:()=>Ie,saxpy:()=>Ge,scopy:()=>Pe,sdot:()=>Fe,sgemv:()=>Re,snrm2:()=>We,srot:()=>Ue,srotm:()=>Te,sscal:()=>Be,sswap:()=>Ae,ssymv:()=>Ve,strmv:()=>He,strsv:()=>Oe});function vr(a,r){return r?a.features.has("timestamp-query")?{requiredFeatures:["timestamp-query"]}:(console.warn("timestamp-query not supported on this device \u2014 benchmark mode disabled."),{}):{}}function yr(){if(!_r())return{querySet:null,passDescriptor:void 0};let r=M().createQuerySet({type:"timestamp",count:2});return{querySet:r,passDescriptor:{timestampWrites:{querySet:r,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1}}}}function ur(a,r){if(!r)return null;let e=M(),i=e.createBuffer({label:"timestamp-resolve",size:16,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});a.resolveQuerySet(r,0,2,i,0);let t=e.createBuffer({label:"timestamp-readback",size:16,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});return a.copyBufferToBuffer(i,0,t,0,16),{tsReadBuffer:t,resolveBuffer:i,querySet:r}}async function G(a){if(!a)return;let{tsReadBuffer:r,resolveBuffer:e,querySet:i}=a;await r.mapAsync(GPUMapMode.READ);let t=new BigInt64Array(r.getMappedRange().slice());return r.unmap(),r.destroy(),e.destroy(),i.destroy(),Math.max(0,Number(t[1]-t[0]))/1e6}var Q=null,$=null,Er=null,cr=!1;async function kr({powerPreference:a="high-performance",benchmark:r=!1}={}){if(Q)return Q;let e;if(typeof window>"u"){let{create:o,globals:u}=await import("webgpu");Object.assign(globalThis,u),e=o([]),Er=e}else e=navigator.gpu;if(!e)throw new Error("WebGPU not supported in this environment.");if($=await e.requestAdapter({powerPreference:a})??await e.requestAdapter(),!$)throw new Error("No WebGPU adapter found.");cr=r;let t=[...vr($,r).requiredFeatures??[]];return Q=await $.requestDevice({requiredFeatures:t}),Q.addEventListener("uncapturederror",o=>{console.error("Uncaptured GPU error:",o.error.message)}),Q}function Br(){Q&&(Q.destroy(),Q=null),$=null,Er=null,cr=!1}function Ar(){if(!$)throw new Error("WebGPU adapter not initialized \u2014 call init() first.");let{device:a,description:r}=$.info;return{description:r||"unknown",device:a||"unknown"}}function _r(){return cr}function M(){if(!Q)throw new Error("WebGPU device not initialized \u2014 call init() first.");return Q}function m(...a){a.flat().forEach(r=>r.destroy())}function b(a,r="blas-input",e=!1){let i=M(),t=i.limits.maxStorageBufferBindingSize,o=a.byteLength;if(o>t)throw new Error(`Buffer size ${o} bytes exceeds device limit of ${t} bytes.`);let u=e?GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC:GPUBufferUsage.STORAGE,n=i.createBuffer({label:r,size:o,usage:u,mappedAtCreation:!0}),l=a.constructor;return new l(n.getMappedRange()).set(a),n.unmap(),n}function H(a,r="blas-storage"){return M().createBuffer({label:r,size:a,usage:GPUBufferUsage.STORAGE})}function O(a,r="blas-result"){return M().createBuffer({label:r,size:a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC})}function _(a,r){let i=M().createBuffer({label:"blas-readback",size:r.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});return a.copyBufferToBuffer(r,0,i,0,r.size),i}function L(a,r="blas-params"){let e=M(),i=a.length*4,t=Math.ceil(i/16)*16,o=new ArrayBuffer(t),u=new DataView(o);a.forEach(({value:l,type:s},f)=>{let c=f*4;if(s==="u32")u.setUint32(c,l,!0);else if(s==="i32")u.setInt32(c,l,!0);else if(s==="f32")u.setFloat32(c,l,!0);else throw new Error(`Unknown param type "${s}". Use "f32", "u32", or "i32".`)});let n=e.createBuffer({label:r,size:t,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(n,0,o),n}async function y(a,r=Float32Array){try{await a.mapAsync(GPUMapMode.READ);let e=new r(a.getMappedRange().slice());return a.unmap(),e}finally{a.destroy()}}var ot=new ArrayBuffer(8),J=new DataView(ot),Gr=new ArrayBuffer(4),Pr=new Uint32Array(Gr),Sr=new Float32Array(Gr);function nt(a){return Pr[0]=a>>>0,Sr[0]}function st(a){return Sr[0]=a,Pr[0]}function ut(a,r,e,i){let t=r>>>3,o=r&7,u=i>>>29,n=e<<3|u,l=i&536870911,s=a<<31|t<<23|n,f=o>>>2&1,c=o&3,d=l>>>23,p=l&8388607,g=c<<6|d,w=(f<<31|g<<23|p)>>>0;return[nt(s),w]}function lt(a,r){let e=st(a);r=r>>>0;let i=e>>>31,t=e>>>23&255,o=e&8388607,u=r>>>31,n=r>>>23&255,l=r&8388607,s=u<<2|n>>>6,f=(n&63)<<23|l,c=t<<3|s,d=o>>>3,g=((o&7)<<29|f)>>>0;return{sign:i,rawExp:c,mantissaHi:d,lo:g}}var ct=2040;function lr(a){J.setFloat64(0,a,!1);let r=J.getUint32(0,!1),e=J.getUint32(4,!1),i=r>>>31,t=r>>>20&2047,o=r&1048575;if(t>=ct)throw new RangeError(`packF64: |${a}| is too large to pack safely (must be finite with magnitude below ~1.4e306); main's bit pattern would itself be NaN/Infinity-shaped and get silently corrupted by any real float32 round-trip`);return ut(i,t,o,e)}function rr(a,r){let{sign:e,rawExp:i,mantissaHi:t,lo:o}=lt(a,r),u=(e<<31|i<<20|t)>>>0;return J.setUint32(0,u,!1),J.setUint32(4,o,!1),J.getFloat64(0,!1)}var h=class a{constructor(r,e,i=Float32Array,t=null){this._buf=r,this._auxBuf=t,this.length=e,this.dtype=i}static from(r){if(r instanceof Float64Array){let i=new Float32Array(r.length),t=new Uint32Array(r.length);for(let n=0;n<r.length;n++){let l=lr(r[n]);i[n]=l[0],t[n]=l[1]}let o=b(i,"gpu-vector-f64-main",!0),u=b(t,"gpu-vector-f64-aux",!0);return new a(o,r.length,Float64Array,u)}if(!(r instanceof Float32Array))throw new Error("GpuVector.from expects a Float32Array or Float64Array.");let e=b(r,"gpu-vector",!0);return new a(e,r.length,r.constructor)}async read(){let r=M(),e=r.createCommandEncoder(),i=_(e,this._buf);if(r.queue.submit([e.finish()]),!this._auxBuf)return y(i,this.dtype);let t=r.createCommandEncoder(),o=_(t,this._auxBuf);r.queue.submit([t.finish()]);let[u,n]=await Promise.all([y(i,Float32Array),y(o,Uint32Array)]),l=new Float64Array(this.length);for(let s=0;s<this.length;s++)l[s]=rr(u[s],n[s]);return l}destroy(){this._buf.destroy(),this._auxBuf&&this._auxBuf.destroy()}};var C=class a{constructor(r,e,i,t,o=null){this._buf=r,this._auxBuf=o,this.rows=e,this.cols=i,this.lda=t}static from(r,e,i,t=i){if(!(r instanceof Float32Array)&&!(r instanceof Float64Array))throw new Error("GpuMatrix.from expects a Float32Array or Float64Array.");if(!Number.isInteger(e)||e<=0)throw new Error("rows must be a positive integer.");if(!Number.isInteger(i)||i<=0)throw new Error("cols must be a positive integer.");if(!Number.isInteger(t)||t<i)throw new Error("lda must be an integer >= cols.");if(r.length<e*t)throw new Error("data does not have enough elements for the given rows and lda.");if(r instanceof Float64Array){let u=e*t,n=new Float32Array(u),l=new Uint32Array(u);for(let c=0;c<u;c++){let d=lr(r[c]);n[c]=d[0],l[c]=d[1]}let s=b(n,"gpu-matrix-f64-main",!0),f=b(l,"gpu-matrix-f64-aux",!0);return new a(s,e,i,t,f)}let o=b(r.subarray(0,e*t),"gpu-matrix",!0);return new a(o,e,i,t)}async read(){let r=M(),e=r.createCommandEncoder(),i=_(e,this._buf);if(r.queue.submit([e.finish()]),this._auxBuf){let u=r.createCommandEncoder(),n=_(u,this._auxBuf);r.queue.submit([u.finish()]);let[l,s]=await Promise.all([y(i,Float32Array),y(n,Uint32Array)]),f=new Float64Array(this.rows*this.lda);for(let d=0;d<f.length;d++)f[d]=rr(l[d],s[d]);if(this.lda===this.cols)return f;let c=new Float64Array(this.rows*this.cols);for(let d=0;d<this.rows;d++)c.set(f.subarray(d*this.lda,d*this.lda+this.cols),d*this.cols);return c}let t=await y(i,Float32Array);if(this.lda===this.cols)return t;let o=new Float32Array(this.rows*this.cols);for(let u=0;u<this.rows;u++)o.set(t.subarray(u*this.lda,u*this.lda+this.cols),u*this.cols);return o}destroy(){this._buf.destroy(),this._auxBuf&&this._auxBuf.destroy()}};function Fr(a,r=-1,e=1){let i=new Float32Array(a);for(let t=0;t<a;t++)i[t]=r+Math.random()*(e-r);return i}function Lr(a,r=-1,e=1){let i=new Float64Array(a);for(let t=0;t<a;t++)i[t]=r+Math.random()*(e-r);return i}function B(a,r,e=0){let i=M(),t=r.map((o,u)=>({binding:e+u,resource:o instanceof GPUBuffer?{buffer:o}:o}));return i.createBindGroup({layout:a,entries:t})}var ft=new WeakMap;function P(a){M().queue.submit([a.finish()])}function fr(){let a=M(),{querySet:r,passDescriptor:e}=yr();return{commandEncoder:a.createCommandEncoder(),querySet:r,passDescriptor:e}}function ar(a,r,e,i,t){let o=a.beginComputePass(t);o.setPipeline(r),o.setBindGroup(0,e),typeof i=="number"?o.dispatchWorkgroups(i):o.dispatchWorkgroups(i.x,i.y),o.end(),ft.set(a,o)}function S(a,r,e){let{commandEncoder:i,querySet:t,passDescriptor:o}=fr();ar(i,a,r,e,o);let u=ur(i,t);return{commandEncoder:i,ts:u}}var Ut={},dr=new WeakMap;async function A(a,r,e="main"){dr.has(a)||dr.set(a,new Map);let i=dr.get(a),t=Array.isArray(r)?r:[r],o=`${t.join("+")}::${e}`;return i.has(o)||i.set(o,await Mt(t,e)),i.get(o)}async function Wt(a){if(typeof process>"u"||!process.versions?.node){let{shaderSources:r}=await Promise.resolve().then(()=>(Ee(),_e)),e=r[a];if(!e)throw new Error(`Shader "${a}" not found in browser bundle.`);return e}else{let{readFileSync:r}=await import("fs"),{fileURLToPath:e}=await import("url"),{dirname:i,join:t}=await import("path"),o=i(e(Ut.url));return r(t(o,`../shaders/${a}.wgsl`),"utf8")}}async function Mt(a,r="main"){let e=M(),i=a.join("+"),t=(await Promise.all(a.map(Wt))).join(`
1461
- `),o=e.createShaderModule({label:i,code:t}),n=(await o.getCompilationInfo()).messages.filter(f=>f.type==="error");if(n.length>0)throw new Error(`Shader "${i}" compilation failed:
1462
- ${n.map(f=>` line ${f.lineNum}: ${f.message}`).join(`
1463
- `)}`);let l=r==="main"?{module:o}:{module:o,entryPoint:r},s=e.createComputePipeline({label:i,layout:"auto",compute:l});return s._shaderModule=o,s}var Tt=64,ke=8;function D(a,r){let e=M().limits.maxComputeWorkgroupsPerDimension;return r===void 0?Math.min(Math.ceil(a/Tt),e):{x:Math.min(Math.ceil(r/ke),e),y:Math.min(Math.ceil(a/ke),e)}}async function Be(a,r,e,i,t){let o=i instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(t))throw new Error("n and incx must be integers.");if(typeof e!="number")throw new Error("alpha must be a number.");if(Number.isNaN(e))throw new Error("alpha must not be NaN.");if(!Number.isFinite(e))throw new Error("alpha must be finite.");if(t<=0)throw new Error("incx must be positive.");if(!(i instanceof Float32Array)&&!(i instanceof h))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return o?{}:i;if(i.length<(r-1)*t+1)throw new Error("x does not have enough elements for the given n and incx.");let u=await A(a,"sscal"),n=null,l=null,s=null;try{n=o?i._buf:b(i,"sscal-x",!0),l=L([{value:r,type:"u32"},{value:e,type:"f32"},{value:t,type:"u32"}],"sscal-params");let f=B(u.getBindGroupLayout(0),[n,l]),{commandEncoder:c,ts:d}=S(u,f,D(r));s=o?null:_(c,n),P(c);let p=await G(d);if(o)return p!==void 0?{gpuTimeMs:p}:{};let g=await y(s,Float32Array);return s=null,p!==void 0?{x:g,gpuTimeMs:p}:g}finally{!o&&n&&m(n),l&&m(l),s&&m(s)}}async function Ae(a,r,e,i,t,o){let u=e instanceof h,n=t instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(o))throw new Error("n, incx, and incy must be integers.");if(i<=0||o<=0)throw new Error("incx and incy must be positive.");if(!(e instanceof Float32Array)&&!(e instanceof h))throw new Error("x must be a Float32Array or GpuVector.");if(!(t instanceof Float32Array)&&!(t instanceof h))throw new Error("y must be a Float32Array or GpuVector.");if(e.constructor!==t.constructor)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return u?{}:{x:e,y:t};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*o+1)throw new Error("y does not have enough elements for the given n and incy.");let l=await A(a,"sswap"),s=null,f=null,c=null,d=null,p=null;try{s=u?e._buf:b(e,"sswap-x",!0),f=n?t._buf:b(t,"sswap-y",!0),c=L([{value:r,type:"u32"},{value:i,type:"u32"},{value:o,type:"u32"}],"sswap-params");let g=B(l.getBindGroupLayout(0),[s,f,c]),{commandEncoder:w,ts:k}=S(l,g,D(r));d=u?null:_(w,s),p=n?null:_(w,f),P(w);let x=await G(k);if(u&&n)return x!==void 0?{gpuTimeMs:x}:{};let E=await y(d,Float32Array);d=null;let v=await y(p,Float32Array);return p=null,x!==void 0?{x:E,y:v,gpuTimeMs:x}:{x:E,y:v}}finally{!u&&s&&m(s),!n&&f&&m(f),c&&m(c),d&&m(d),p&&m(p)}}async function Ge(a,r,e,i,t,o,u){let n=i instanceof h,l=o instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(t)||!Number.isInteger(u))throw new Error("n, incx, and incy must be integers.");if(typeof e!="number")throw new Error("alpha must be a number.");if(Number.isNaN(e))throw new Error("alpha must not be NaN.");if(!Number.isFinite(e))throw new Error("alpha must be finite.");if(t<=0||u<=0)throw new Error("incx and incy must be positive.");if(!n&&!(i instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!l&&!(o instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(n!==l)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return l?{}:{y:o};if(i.length<(r-1)*t+1)throw new Error("x does not have enough elements for the given n and incx.");if(o.length<(r-1)*u+1)throw new Error("y does not have enough elements for the given n and incy.");let s=await A(a,"saxpy"),f=null,c=null,d=null,p=null;try{f=n?i._buf:b(i,"saxpy-x",!1),c=l?o._buf:b(o,"saxpy-y",!0),d=L([{value:r,type:"u32"},{value:e,type:"f32"},{value:t,type:"u32"},{value:u,type:"u32"}],"saxpy-params");let g=B(s.getBindGroupLayout(0),[f,c,d]),{commandEncoder:w,ts:k}=S(s,g,D(r));p=l?null:_(w,c),P(w);let x=await G(k);if(l&&n)return x!==void 0?{gpuTimeMs:x}:{};let E=await y(p,Float32Array);return p=null,x!==void 0?{y:E,gpuTimeMs:x}:{y:E}}finally{!n&&f&&m(f),!l&&c&&m(c),d&&m(d),p&&m(p)}}async function Pe(a,r,e,i,t,o){let u=e instanceof h,n=t instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(o))throw new Error("n, incx, and incy must be integers.");if(i<=0||o<=0)throw new Error("incx and incy must be positive.");if(!u&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!n&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(u!==n)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return n?{}:{y:t};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*o+1)throw new Error("y does not have enough elements for the given n and incy.");let l=await A(a,"scopy"),s=null,f=null,c=null,d=null;try{s=u?e._buf:b(e,"scopy-x",!1),f=n?t._buf:b(t,"scopy-y",!0),c=L([{value:r,type:"u32"},{value:i,type:"u32"},{value:o,type:"u32"}],"scopy-params");let p=B(l.getBindGroupLayout(0),[s,f,c]),{commandEncoder:g,ts:w}=S(l,p,D(r));d=n?null:_(g,f),P(g);let k=await G(w);if(n&&u)return k!==void 0?{gpuTimeMs:k}:{};let x=await y(d,Float32Array);return d=null,k!==void 0?{y:x,gpuTimeMs:k}:{y:x}}finally{!u&&s&&m(s),!n&&f&&m(f),c&&m(c),d&&m(d)}}var Se=64;async function Fe(a,r,e,i,t,o){let u=e instanceof h,n=t instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(o))throw new Error("n, incx, and incy must be integers.");if(i<=0||o<=0)throw new Error("incx and incy must be positive.");if(!u&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!n&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(u!==n)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return{dot:0};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*o+1)throw new Error("y does not have enough elements for the given n and incy.");let l=await A(a,"sdot"),s=await A(a,"reduction/sum"),f=null,c=null,d=null,p=null,g=null,w=null;try{f=u?e._buf:b(e,"sdot-x",!1),c=n?t._buf:b(t,"sdot-y",!1),d=H(2*Se*4,"sdot-partials"),p=O(4,"sdot-result"),g=L([{value:r,type:"u32"},{value:i,type:"u32"},{value:o,type:"u32"}],"sdot-params");let k=B(l.getBindGroupLayout(0),[f,c,d,g]),{commandEncoder:x,ts:E}=S(l,k,2*Se);P(x);let v=B(s.getBindGroupLayout(0),[d,p]),{commandEncoder:F,ts:I}=S(s,v,1);w=_(F,p),P(F);let j=y(w,Float32Array);w=null;let[N,U,T]=await Promise.all([G(E),G(I),j]);return N!==void 0&&U!==void 0?{dot:T[0],gpuTimeMs:N+U}:{dot:T[0]}}finally{!u&&f&&m(f),!n&&c&&m(c),d&&m(d),p&&m(p),g&&m(g),w&&m(w)}}var Le=64;async function Ie(a,r,e,i){let t=e instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i))throw new Error("n and incx must be integers.");if(i<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{asum:0};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");let o=await A(a,"sasum"),u=await A(a,"reduction/sum"),n=null,l=null,s=null,f=null,c=null;try{n=t?e._buf:b(e,"sasum-x",!1),l=H(2*Le*4,"sasum-partials"),s=O(4,"sasum-result"),f=L([{value:r,type:"u32"},{value:i,type:"u32"}],"sasum-params");let d=B(o.getBindGroupLayout(0),[n,l,f]),{commandEncoder:p,ts:g}=S(o,d,2*Le);P(p);let w=B(u.getBindGroupLayout(0),[l,s]),{commandEncoder:k,ts:x}=S(u,w,1);c=_(k,s),P(k);let E=y(c,Float32Array);c=null;let[v,F,I]=await Promise.all([G(g),G(x),E]);return v!==void 0&&F!==void 0?{asum:I[0],gpuTimeMs:v+F}:{asum:I[0]}}finally{!t&&n&&m(n),l&&m(l),s&&m(s),f&&m(f),c&&m(c)}}var mr=64;async function je(a,r,e,i){let t=e instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i))throw new Error("n and incx must be integers.");if(i<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float64Array))throw new Error("x must be a Float64Array or GpuVector.");if(t&&e.dtype!==Float64Array)throw new Error("x must be a Float64Array-backed GpuVector.");if(r<=0)return{asum:0};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");let o=await A(a,["f64add","dasum"]),u=await A(a,["f64add","reduction/sumF64"]),n=null,l=null,s=null,f=null,c=null,d=null,p=null,g=null;try{n=t?e:h.from(e),l=H(2*mr*4,"dasum-partialsMain"),s=H(2*mr*4,"dasum-partialsAux"),f=O(4,"dasum-result-main"),c=O(4,"dasum-result-aux"),d=L([{value:r,type:"u32"},{value:i,type:"u32"}],"dasum-params");let w=B(o.getBindGroupLayout(0),[n._buf,n._auxBuf,l,s,d]),{commandEncoder:k,ts:x}=S(o,w,2*mr);P(k);let E=B(u.getBindGroupLayout(0),[l,s,f,c]),{commandEncoder:v,ts:F}=S(u,E,1);p=_(v,f),g=_(v,c),P(v);let I=y(p,Float32Array),j=y(g,Uint32Array);p=null,g=null;let[N,U,T,R]=await Promise.all([G(x),G(F),I,j]),V=rr(T[0],R[0]);return N!==void 0&&U!==void 0?{asum:V,gpuTimeMs:N+U}:{asum:V}}finally{!t&&n&&n.destroy(),l&&m(l),s&&m(s),f&&m(f),c&&m(c),d&&m(d),p&&m(p),g&&m(g)}}var Ne=64;async function We(a,r,e,i){let t=e instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i))throw new Error("n and incx must be integers.");if(i<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{nrm2:0};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");let o=await A(a,"snrm2"),u=await A(a,"reduction/sum"),n=null,l=null,s=null,f=null,c=null;try{n=t?e._buf:b(e,"snrm2-x",!1),l=H(2*Ne*4,"snrm2-partials"),s=O(4,"snrm2-result"),f=L([{value:r,type:"u32"},{value:i,type:"u32"}],"snrm2-params");let d=B(o.getBindGroupLayout(0),[n,l,f]),{commandEncoder:p,ts:g}=S(o,d,2*Ne);P(p);let w=B(u.getBindGroupLayout(0),[l,s]),{commandEncoder:k,ts:x}=S(u,w,1);c=_(k,s),P(k);let E=y(c,Float32Array);c=null;let[v,F,I]=await Promise.all([G(g),G(x),E]),j=Math.sqrt(I[0]);return v!==void 0&&F!==void 0?{nrm2:j,gpuTimeMs:v+F}:{nrm2:j}}finally{!t&&n&&m(n),l&&m(l),s&&m(s),f&&m(f),c&&m(c)}}var pr=64;async function Me(a,r,e,i){let t=e instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i))throw new Error("n and incx must be integers.");if(i<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{index:0};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");let o=await A(a,"isamax"),u=await A(a,"reduction/argmax"),n=null,l=null,s=null,f=null,c=null,d=null;try{n=t?e._buf:b(e,"isamax-x",!1),l=H(2*pr*4,"isamax-partials-val"),s=H(2*pr*4,"isamax-partials-idx"),f=O(4,"isamax-result"),c=L([{value:r,type:"u32"},{value:i,type:"u32"}],"isamax-params");let p=B(o.getBindGroupLayout(0),[n,l,s,c]),{commandEncoder:g,ts:w}=S(o,p,2*pr);P(g);let k=B(u.getBindGroupLayout(0),[l,s,f]),{commandEncoder:x,ts:E}=S(u,k,1);d=_(x,f),P(x);let v=y(d,Uint32Array);d=null;let[F,I,j]=await Promise.all([G(w),G(E),v]),N=j[0];return F!==void 0&&I!==void 0?{index:N,gpuTimeMs:F+I}:{index:N}}finally{!t&&n&&m(n),l&&m(l),s&&m(s),f&&m(f),c&&m(c),d&&m(d)}}async function Ue(a,r,e,i,t,o,u,n){let l=e instanceof h,s=t instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(o))throw new Error("n, incx, and incy must be integers.");if(typeof u!="number")throw new Error("c must be a number.");if(typeof n!="number")throw new Error("s must be a number.");if(Number.isNaN(u)||Number.isNaN(n))throw new Error("c and s must not be NaN.");if(!Number.isFinite(u))throw new Error("c must be finite.");if(!Number.isFinite(n))throw new Error("s must be finite.");if(i<=0||o<=0)throw new Error("incx and incy must be positive.");if(!l&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!s&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(l!==s)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return l?{}:{x:e,y:t};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*o+1)throw new Error("y does not have enough elements for the given n and incy.");let f=await A(a,"srot"),c=null,d=null,p=null,g=null,w=null;try{c=l?e._buf:b(e,"srot-x",!0),d=s?t._buf:b(t,"srot-y",!0),p=L([{value:r,type:"u32"},{value:u,type:"f32"},{value:n,type:"f32"},{value:i,type:"u32"},{value:o,type:"u32"}],"srot-params");let k=B(f.getBindGroupLayout(0),[c,d,p]),{commandEncoder:x,ts:E}=S(f,k,D(r));g=l?null:_(x,c),w=s?null:_(x,d),P(x);let v=await G(E);if(l&&s)return v!==void 0?{gpuTimeMs:v}:{};let F=y(g,Float32Array),I=y(w,Float32Array);g=null,w=null;let[j,N]=await Promise.all([F,I]);return v!==void 0?{x:j,y:N,gpuTimeMs:v}:{x:j,y:N}}finally{!l&&c&&m(c),!s&&d&&m(d),p&&m(p),g&&m(g),w&&m(w)}}async function Te(a,r,e,i,t,o,u){let n=e instanceof h,l=t instanceof h;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(o))throw new Error("n, incx, and incy must be integers.");if(!(u instanceof Float32Array)||u.length!==5)throw new Error("param must be a Float32Array of length 5.");if(i<=0||o<=0)throw new Error("incx and incy must be positive.");if(!n&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!l&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(n!==l)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0||u[0]===-2)return n?{}:{x:e,y:t};if(e.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*o+1)throw new Error("y does not have enough elements for the given n and incy.");let s=await A(a,"srotm"),f=null,c=null,d=null,p=null,g=null,w=null;try{f=n?e._buf:b(e,"srotm-x",!0),c=l?t._buf:b(t,"srotm-y",!0),d=b(u,"srotm-param",!1),p=L([{value:r,type:"u32"},{value:i,type:"u32"},{value:o,type:"u32"}],"srotm-params");let k=B(s.getBindGroupLayout(0),[f,c,d,p]),{commandEncoder:x,ts:E}=S(s,k,D(r));g=n?null:_(x,f),w=l?null:_(x,c),P(x);let v=await G(E);if(n&&l)return v!==void 0?{gpuTimeMs:v}:{};let F=y(g,Float32Array),I=y(w,Float32Array);g=null,w=null;let[j,N]=await Promise.all([F,I]);return v!==void 0?{x:j,y:N,gpuTimeMs:v}:{x:j,y:N}}finally{!n&&f&&m(f),!l&&c&&m(c),d&&m(d),p&&m(p),g&&m(g),w&&m(w)}}async function Re(a,r,e,i,t,o,u,n,l,s,f,c){let d=n instanceof h,p=f instanceof h,g=o instanceof C,w=r==="no-transpose";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!w&&r!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(!Number.isInteger(e)||!Number.isInteger(i)||!Number.isInteger(l)||!Number.isInteger(c)||!Number.isInteger(u))throw new Error("m, n, incx, incy, and lda must be integers.");if(typeof t!="number")throw new Error("alpha must be a number.");if(Number.isNaN(t))throw new Error("alpha must not be NaN.");if(!Number.isFinite(t))throw new Error("alpha must be finite.");if(typeof s!="number")throw new Error("beta must be a number.");if(Number.isNaN(s))throw new Error("beta must not be NaN.");if(!Number.isFinite(s))throw new Error("beta must be finite.");if(l<=0||c<=0)throw new Error("incx and incy must be positive.");if(u<i)throw new Error("lda must be >= n.");if(!g&&!(o instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!d&&!(n instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!p&&!(f instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(d!==p)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(d&&!g)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(d&&n._buf===f._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(g&&u!==o.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(g&&(o.rows<e||o.cols<i))throw new Error("A is too small for the given m and n.");if(e<0||i<0)throw new Error("m and n must be non-negative.");if(e===0||i===0)return p?{}:{y:f};let k=w?i:e,x=w?e:i;if(!g&&o.length<(e-1)*u+i)throw new Error("A does not have enough elements for the given m, n, and lda.");if(n.length<(k-1)*l+1)throw new Error("x does not have enough elements for the given dimensions and incx.");if(f.length<(x-1)*c+1)throw new Error("y does not have enough elements for the given dimensions and incy.");let v=await A(a,w?"sgemv_n":"sgemv_t"),F=g?o._buf:b(o,"sgemv-A",!1),I=d?n._buf:b(n,"sgemv-x",!1),j=p?f._buf:b(f,"sgemv-y",!0),N=L([{value:e,type:"u32"},{value:i,type:"u32"},{value:t,type:"f32"},{value:s,type:"f32"},{value:l,type:"u32"},{value:c,type:"u32"},{value:u,type:"u32"}],"sgemv-params");try{let U=B(v.getBindGroupLayout(0),[F,I,j,N]),T=w?Math.min(e,a.limits.maxComputeWorkgroupsPerDimension):D(x),{commandEncoder:R,ts:V}=S(v,U,T),z=p?null:_(R,j);P(R);let Y=await G(V);if(p)return Y!==void 0?{gpuTimeMs:Y}:{};let Z=await y(z,Float32Array);return Y!==void 0?{y:Z,gpuTimeMs:Y}:{y:Z}}finally{g||m(F),d||m(I),p||m(j),m(N)}}async function Ve(a,r,e,i,t,o,u,n,l,s,f){let c=u instanceof h,d=s instanceof h,p=t instanceof C,g=r==="lower";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!g&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(f)||!Number.isInteger(o))throw new Error("n, incx, incy, and lda must be integers.");if(typeof i!="number")throw new Error("alpha must be a number.");if(Number.isNaN(i))throw new Error("alpha must not be NaN.");if(!Number.isFinite(i))throw new Error("alpha must be finite.");if(typeof l!="number")throw new Error("beta must be a number.");if(Number.isNaN(l))throw new Error("beta must not be NaN.");if(!Number.isFinite(l))throw new Error("beta must be finite.");if(n<=0||f<=0)throw new Error("incx and incy must be positive.");if(o<e)throw new Error("lda must be >= n.");if(!p&&!(t instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!c&&!(u instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!d&&!(s instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(c!==d)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(c&&!p)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(c&&u._buf===s._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(p&&o!==t.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(p&&(t.rows<e||t.cols<e))throw new Error("A is too small for the given n.");if(e<0)throw new Error("n must be non-negative.");if(e===0)return d?{}:{y:s};if(!p&&t.length<(e-1)*o+e)throw new Error("A does not have enough elements for the given n and lda.");if(u.length<(e-1)*n+1)throw new Error("x does not have enough elements for the given n and incx.");if(s.length<(e-1)*f+1)throw new Error("y does not have enough elements for the given n and incy.");let w=await A(a,"ssymv"),k=null,x=null,E=null,v=null;try{k=p?t._buf:b(t,"ssymv-A",!1),x=c?u._buf:b(u,"ssymv-x",!1),E=d?s._buf:b(s,"ssymv-y",!0),v=L([{value:e,type:"u32"},{value:i,type:"f32"},{value:l,type:"f32"},{value:n,type:"u32"},{value:f,type:"u32"},{value:o,type:"u32"},{value:g?0:1,type:"u32"}],"ssymv-params");let F=B(w.getBindGroupLayout(0),[k,x,E,v]),I=Math.min(e,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:j,ts:N}=S(w,F,I),U=d?null:_(j,E);P(j);let T=await G(N);if(d)return T!==void 0?{gpuTimeMs:T}:{};let R=await y(U,Float32Array);return T!==void 0?{y:R,gpuTimeMs:T}:{y:R}}finally{!p&&k&&m(k),!c&&x&&m(x),!d&&E&&m(E),v&&m(v)}}async function He(a,r,e,i,t,o,u,n,l,s,f){let c=n instanceof h,d=s instanceof h,p=o instanceof C,g=r==="lower",w=e==="no-transpose",k=i==="unit";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!g&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(!w&&e!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(!k&&i!=="non-unit")throw new Error("diag must be 'unit' or 'non-unit'.");if(!Number.isInteger(t)||!Number.isInteger(l)||!Number.isInteger(f)||!Number.isInteger(u))throw new Error("n, incx, incy, and lda must be integers.");if(l<=0||f<=0)throw new Error("incx and incy must be positive.");if(u<t)throw new Error("lda must be >= n.");if(!p&&!(o instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!c&&!(n instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!d&&!(s instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(c!==d)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(c&&n._buf===s._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(c&&!p)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(p&&d&&o._buf===s._buf)throw new Error("A and y must not reference the same GPU buffer.");if(p&&u!==o.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(p&&(o.rows<t||o.cols<t))throw new Error("A is too small for the given n.");if(t<0)throw new Error("n must be non-negative.");if(t===0)return d?{}:{y:s};if(!p&&o.length<(t-1)*u+t)throw new Error("A does not have enough elements for the given n and lda.");if(n.length<(t-1)*l+1)throw new Error("x does not have enough elements for the given n and incx.");if(s.length<(t-1)*f+1)throw new Error("y does not have enough elements for the given n and incy.");let x=await A(a,"strmv"),E=null,v=null,F=null,I=null;try{E=p?o._buf:b(o,"strmv-A",!1),v=c?n._buf:b(n,"strmv-x",!1),F=d?s._buf:b(s,"strmv-y",!0),I=L([{value:t,type:"u32"},{value:l,type:"u32"},{value:f,type:"u32"},{value:u,type:"u32"},{value:w?0:1,type:"u32"},{value:g?0:1,type:"u32"},{value:k?1:0,type:"u32"}],"strmv-params");let j=B(x.getBindGroupLayout(0),[E,v,F,I]),N=Math.min(t,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:U,ts:T}=S(x,j,N),R=d?null:_(U,F);P(U);let V=await G(T);if(d)return V!==void 0?{gpuTimeMs:V}:{};let z=await y(R,Float32Array);return V!==void 0?{y:z,gpuTimeMs:V}:{y:z}}finally{!p&&E&&m(E),!c&&v&&m(v),!d&&F&&m(F),I&&m(I)}}var q=64;function De(a,r,e){let i=new ArrayBuffer(a*r),t=new DataView(i);for(let o=0;o<a;o++){let u=e(o),n=o*r;u.forEach((l,s)=>t.setUint32(n+s*4,l,!0))}return i}function Ce(a,r,e){let i=a.createBuffer({label:e,size:r.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return a.queue.writeBuffer(i,0,r),i}async function Oe(a,r,e,i,t,o,u,n,l){let s=n instanceof h,f=o instanceof C,c=r==="lower",d=e==="no-transpose",p=i==="unit";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!c&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(!d&&e!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(!p&&i!=="non-unit")throw new Error("diag must be 'unit' or 'non-unit'.");if(!Number.isInteger(t)||!Number.isInteger(l)||!Number.isInteger(u))throw new Error("n, incx, and lda must be integers.");if(l<=0)throw new Error("incx must be positive.");if(u<t)throw new Error("lda must be >= n.");if(!f&&!(o instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!s&&!(n instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(s&&!f)throw new Error("A must be a GpuMatrix when x is a GpuVector.");if(f&&u!==o.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(f&&(o.rows<t||o.cols<t))throw new Error("A is too small for the given n.");if(t<0)throw new Error("n must be non-negative.");if(t===0)return s?{}:{x:n};if(!f&&o.length<(t-1)*u+t)throw new Error("A does not have enough elements for the given n and lda.");if(n.length<(t-1)*l+1)throw new Error("x does not have enough elements for the given n and incx.");let g=await A(a,"strsv_invert_block"),w=await A(a,"strsv_apply_inverse"),k=await A(a,"strsv_update"),x=d===c,E=[];for(let z=0;z<t;z+=q)E.push(z);x||E.reverse();let v=E.length,F=a.limits.maxComputeWorkgroupsPerDimension,I=a.limits.minUniformBufferOffsetAlignment,j=null,N=null,U=null,T=null,R=null,V=null;try{j=f?o._buf:b(o,"strsv-A",!1),N=s?n._buf:b(n,"strsv-x",!0),U=H(v*q*q*4,"strsv-Ainv");let z=De(v,I,K=>{let X=K*q,tr=Math.min(X+q,t);return[l,K,X,tr]});T=Ce(a,z,"strsv-apply-params");let Y=De(v,I,K=>{let X=K*q,tr=Math.min(X+q,t);return[t,l,u,d?0:1,c?0:1,X,tr]});R=Ce(a,Y,"strsv-update-params");let{commandEncoder:Z,querySet:er}=fr();V=L([{value:t,type:"u32"},{value:u,type:"u32"},{value:d?0:1,type:"u32"},{value:c?0:1,type:"u32"},{value:p?1:0,type:"u32"}],"strsv-invert-params");let ze=B(g.getBindGroupLayout(0),[j,U,V]);ar(Z,g,ze,{x:q,y:v},er?{timestampWrites:{querySet:er,beginningOfPassWriteIndex:0}}:void 0);for(let K=0;K<E.length;K++){let X=E[K],tr=Math.min(X+q,t),Ze=X/q,Ke=K===E.length-1,wr=Ze*I,Xe=B(w.getBindGroupLayout(0),[U,N,{buffer:T,offset:wr,size:16}]);ar(Z,w,Xe,1,Ke&&er?{timestampWrites:{querySet:er,endOfPassWriteIndex:1}}:void 0);let br=x?t-tr:X;if(br===0)continue;let $e=B(k.getBindGroupLayout(0),[j,N,{buffer:R,offset:wr,size:32}]),Ye=Math.min(br,F);ar(Z,k,$e,Ye)}let Qe=ur(Z,er),qe=s?null:_(Z,N);P(Z);let ir=await G(Qe);if(s)return ir!==void 0?{gpuTimeMs:ir}:{};let gr=await y(qe,Float32Array);return ir!==void 0?{x:gr,gpuTimeMs:ir}:{x:gr}}finally{!f&&j&&m(j),!s&&N&&m(N),U&&m(U),T&&m(T),R&&m(R),V&&m(V)}}return it(Rt);})();
1631
+ `});var Le={};yr(Le,{shaderSources:()=>Xt});var Xt,Ne=I(()=>{Mr();Tr();Rr();Dr();Or();Qr();Zr();Xr();Yr();re();te();oe();ne();ue();fe();me();pe();we();he();ve();_e();Ge();Be();Pe();Fe();Xt={"reduction/argmax":Ur,"reduction/sum":Vr,"reduction/sumF64":Hr,sscal:Cr,sswap:zr,saxpy:qr,scopy:Kr,sdot:$r,sasum:Jr,snrm2:ee,srot:ae,srotm:ie,isamax:se,sgemv_n:le,sgemv_t:ce,ssymv:de,strmv:ge,sger:be,ssyr:xe,ssyr2:ye,f64add:Ee,dasum:Ae,strsv_invert_block:ke,strsv_apply_inverse:Se,strsv_update:je}});var ea={};yr(ea,{GpuMatrix:()=>H,GpuVector:()=>x,cleanup:()=>Pr,dasum:()=>Ce,gpuName:()=>Sr,init:()=>kr,isamax:()=>Qe,randomFloat32Array:()=>Nr,randomFloat64Array:()=>Wr,randomTriangularFloat32Array:()=>Ir,sasum:()=>De,saxpy:()=>Ue,scopy:()=>Te,sdot:()=>Re,sgemv:()=>Ke,sger:()=>et,snrm2:()=>ze,srot:()=>qe,srotm:()=>Ze,sscal:()=>Ie,sswap:()=>Me,ssymv:()=>Xe,ssyr:()=>tt,ssyr2:()=>at,strmv:()=>$e,strsv:()=>rt});function Er(a,r){return r?a.features.has("timestamp-query")?{requiredFeatures:["timestamp-query"]}:(console.warn("timestamp-query not supported on this device \u2014 benchmark mode disabled."),{}):{}}function Gr(){if(!Ar())return{querySet:null,passDescriptor:void 0};let r=V().createQuerySet({type:"timestamp",count:2});return{querySet:r,passDescriptor:{timestampWrites:{querySet:r,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1}}}}function cr(a,r){if(!r)return null;let e=V(),o=e.createBuffer({label:"timestamp-resolve",size:16,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});a.resolveQuerySet(r,0,2,o,0);let t=e.createBuffer({label:"timestamp-readback",size:16,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});return a.copyBufferToBuffer(o,0,t,0,16),{tsReadBuffer:t,resolveBuffer:o,querySet:r}}async function P(a){if(!a)return;let{tsReadBuffer:r,resolveBuffer:e,querySet:o}=a;await r.mapAsync(GPUMapMode.READ);let t=new BigInt64Array(r.getMappedRange().slice());return r.unmap(),r.destroy(),e.destroy(),o.destroy(),Math.max(0,Number(t[1]-t[0]))/1e6}var Z=null,J=null,Br=null,dr=!1;async function kr({powerPreference:a="high-performance",benchmark:r=!1}={}){if(Z)return Z;let e;if(typeof window>"u"){let{create:i,globals:s}=await import("webgpu");Object.assign(globalThis,s),e=i([]),Br=e}else e=navigator.gpu;if(!e)throw new Error("WebGPU not supported in this environment.");if(J=await e.requestAdapter({powerPreference:a})??await e.requestAdapter(),!J)throw new Error("No WebGPU adapter found.");dr=r;let t=[...Er(J,r).requiredFeatures??[]];return Z=await J.requestDevice({requiredFeatures:t}),Z.addEventListener("uncapturederror",i=>{console.error("Uncaptured GPU error:",i.error.message)}),Z}function Pr(){Z&&(Z.destroy(),Z=null),J=null,Br=null,dr=!1}function Sr(){if(!J)throw new Error("WebGPU adapter not initialized \u2014 call init() first.");let{device:a,description:r}=J.info;return{description:r||"unknown",device:a||"unknown"}}function Ar(){return dr}function V(){if(!Z)throw new Error("WebGPU device not initialized \u2014 call init() first.");return Z}function d(...a){a.flat().forEach(r=>r.destroy())}function b(a,r="blas-input",e=!1){let o=V(),t=o.limits.maxStorageBufferBindingSize,i=a.byteLength;if(i>t)throw new Error(`Buffer size ${i} bytes exceeds device limit of ${t} bytes.`);let s=e?GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC:GPUBufferUsage.STORAGE,u=o.createBuffer({label:r,size:i,usage:s,mappedAtCreation:!0}),n=a.constructor;return new n(u.getMappedRange()).set(a),u.unmap(),u}function D(a,r="blas-storage"){return V().createBuffer({label:r,size:a,usage:GPUBufferUsage.STORAGE})}function q(a,r="blas-result"){return V().createBuffer({label:r,size:a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC})}function E(a,r){let o=V().createBuffer({label:"blas-readback",size:r.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});return a.copyBufferToBuffer(r,0,o,0,r.size),o}function N(a,r="blas-params"){let e=V(),o=a.length*4,t=Math.ceil(o/16)*16,i=new ArrayBuffer(t),s=new DataView(i);a.forEach(({value:n,type:l},f)=>{let c=f*4;if(l==="u32")s.setUint32(c,n,!0);else if(l==="i32")s.setInt32(c,n,!0);else if(l==="f32")s.setFloat32(c,n,!0);else throw new Error(`Unknown param type "${l}". Use "f32", "u32", or "i32".`)});let u=e.createBuffer({label:r,size:t,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(u,0,i),u}async function _(a,r=Float32Array){try{await a.mapAsync(GPUMapMode.READ);let e=new r(a.getMappedRange().slice());return a.unmap(),e}finally{a.destroy()}}var ht=new ArrayBuffer(8),er=new DataView(ht),Fr=new ArrayBuffer(4),jr=new Uint32Array(Fr),Lr=new Float32Array(Fr);function xt(a){return jr[0]=a>>>0,Lr[0]}function vt(a){return Lr[0]=a,jr[0]}function yt(a,r,e,o){let t=r>>>3,i=r&7,s=o>>>29,u=e<<3|s,n=o&536870911,l=a<<31|t<<23|u,f=i>>>2&1,c=i&3,p=n>>>23,m=n&8388607,g=c<<6|p,w=(f<<31|g<<23|m)>>>0;return[xt(l),w]}function _t(a,r){let e=vt(a);r=r>>>0;let o=e>>>31,t=e>>>23&255,i=e&8388607,s=r>>>31,u=r>>>23&255,n=r&8388607,l=s<<2|u>>>6,f=(u&63)<<23|n,c=t<<3|l,p=i>>>3,g=((i&7)<<29|f)>>>0;return{sign:o,rawExp:c,mantissaHi:p,lo:g}}var Et=2040;function mr(a){er.setFloat64(0,a,!1);let r=er.getUint32(0,!1),e=er.getUint32(4,!1),o=r>>>31,t=r>>>20&2047,i=r&1048575;if(t>=Et)throw new RangeError(`packF64: |${a}| is too large to pack safely (must be finite with magnitude below ~1.4e306); main's bit pattern would itself be NaN/Infinity-shaped and get silently corrupted by any real float32 round-trip`);return yt(o,t,i,e)}function tr(a,r){let{sign:e,rawExp:o,mantissaHi:t,lo:i}=_t(a,r),s=(e<<31|o<<20|t)>>>0;return er.setUint32(0,s,!1),er.setUint32(4,i,!1),er.getFloat64(0,!1)}var x=class a{constructor(r,e,o=Float32Array,t=null){this._buf=r,this._auxBuf=t,this.length=e,this.dtype=o}static from(r){if(r instanceof Float64Array){let o=new Float32Array(r.length),t=new Uint32Array(r.length);for(let u=0;u<r.length;u++){let n=mr(r[u]);o[u]=n[0],t[u]=n[1]}let i=b(o,"gpu-vector-f64-main",!0),s=b(t,"gpu-vector-f64-aux",!0);return new a(i,r.length,Float64Array,s)}if(!(r instanceof Float32Array))throw new Error("GpuVector.from expects a Float32Array or Float64Array.");let e=b(r,"gpu-vector",!0);return new a(e,r.length,r.constructor)}async read(){let r=V(),e=r.createCommandEncoder(),o=E(e,this._buf);if(r.queue.submit([e.finish()]),!this._auxBuf)return _(o,this.dtype);let t=r.createCommandEncoder(),i=E(t,this._auxBuf);r.queue.submit([t.finish()]);let[s,u]=await Promise.all([_(o,Float32Array),_(i,Uint32Array)]),n=new Float64Array(this.length);for(let l=0;l<this.length;l++)n[l]=tr(s[l],u[l]);return n}destroy(){this._buf.destroy(),this._auxBuf&&this._auxBuf.destroy()}};var H=class a{constructor(r,e,o,t,i=null,s="row-major"){this._buf=r,this._auxBuf=i,this.rows=e,this.cols=o,this.lda=t,this.layout=s}static from(r,e,o,t,i="row-major"){if(i!=="row-major"&&i!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");let s=i==="row-major";if(t===void 0&&(t=s?o:e),!(r instanceof Float32Array)&&!(r instanceof Float64Array))throw new Error("GpuMatrix.from expects a Float32Array or Float64Array.");if(!Number.isInteger(e)||e<=0)throw new Error("rows must be a positive integer.");if(!Number.isInteger(o)||o<=0)throw new Error("cols must be a positive integer.");let u=s?o:e;if(!Number.isInteger(t)||t<u)throw new Error(`lda must be an integer >= ${s?"cols":"rows"}.`);let n=s?e:o;if(r.length<n*t)throw new Error("data does not have enough elements for the given rows, cols, and lda.");if(r instanceof Float64Array){let f=n*t,c=new Float32Array(f),p=new Uint32Array(f);for(let w=0;w<f;w++){let y=mr(r[w]);c[w]=y[0],p[w]=y[1]}let m=b(c,"gpu-matrix-f64-main",!0),g=b(p,"gpu-matrix-f64-aux",!0);return new a(m,e,o,t,g,i)}let l=b(r.subarray(0,n*t),"gpu-matrix",!0);return new a(l,e,o,t,null,i)}async read(){let r=V(),e=r.createCommandEncoder(),o=E(e,this._buf);r.queue.submit([e.finish()]);let t=this.layout!=="column-major",i=t?this.rows:this.cols,s=t?this.cols:this.rows;if(this._auxBuf){let l=r.createCommandEncoder(),f=E(l,this._auxBuf);r.queue.submit([l.finish()]);let[c,p]=await Promise.all([_(o,Float32Array),_(f,Uint32Array)]),m=new Float64Array(i*this.lda);for(let w=0;w<m.length;w++)m[w]=tr(c[w],p[w]);if(this.lda===s)return m;let g=new Float64Array(i*s);for(let w=0;w<i;w++)g.set(m.subarray(w*this.lda,w*this.lda+s),w*s);return g}let u=await _(o,Float32Array);if(this.lda===s)return u;let n=new Float32Array(i*s);for(let l=0;l<i;l++)n.set(u.subarray(l*this.lda,l*this.lda+s),l*s);return n}destroy(){this._buf.destroy(),this._auxBuf&&this._auxBuf.destroy()}};function Nr(a,r=-1,e=1){let o=new Float32Array(a);for(let t=0;t<a;t++)o[t]=r+Math.random()*(e-r);return o}function Wr(a,r=-1,e=1){let o=new Float64Array(a);for(let t=0;t<a;t++)o[t]=r+Math.random()*(e-r);return o}function Ir(a,r,e="lower",o=-1,t=1,i=5,s=15){if(e!=="lower"&&e!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(r<a)throw new Error("lda must be >= n.");let u=new Float32Array(a*r);for(let n=0;n<a;n++){for(let l=0;l<a;l++){if(n===l)continue;(e==="lower"?l<n:l>n)&&(u[n*r+l]=o+Math.random()*(t-o))}u[n*r+n]=i+Math.random()*(s-i)}return u}function A(a,r,e=0){let o=V(),t=r.map((i,s)=>({binding:e+s,resource:i instanceof GPUBuffer?{buffer:i}:i}));return o.createBindGroup({layout:a,entries:t})}var Gt=new WeakMap;function S(a){V().queue.submit([a.finish()])}function pr(){let a=V(),{querySet:r,passDescriptor:e}=Gr();return{commandEncoder:a.createCommandEncoder(),querySet:r,passDescriptor:e}}function ir(a,r,e,o,t){let i=a.beginComputePass(t);i.setPipeline(r),i.setBindGroup(0,e),typeof o=="number"?i.dispatchWorkgroups(o):i.dispatchWorkgroups(o.x,o.y),i.end(),Gt.set(a,i)}function L(a,r,e){let{commandEncoder:o,querySet:t,passDescriptor:i}=pr();ir(o,a,r,e,i);let s=cr(o,t);return{commandEncoder:o,ts:s}}var Jt={},gr=new WeakMap;async function B(a,r,e="main"){gr.has(a)||gr.set(a,new Map);let o=gr.get(a),t=Array.isArray(r)?r:[r],i=`${t.join("+")}::${e}`;return o.has(i)||o.set(i,await Yt(t,e)),o.get(i)}async function $t(a){if(typeof process>"u"||!process.versions?.node){let{shaderSources:r}=await Promise.resolve().then(()=>(Ne(),Le)),e=r[a];if(!e)throw new Error(`Shader "${a}" not found in browser bundle.`);return e}else{let{readFileSync:r}=await import("fs"),{fileURLToPath:e}=await import("url"),{dirname:o,join:t}=await import("path"),i=o(e(Jt.url));return r(t(i,`../shaders/${a}.wgsl`),"utf8")}}async function Yt(a,r="main"){let e=V(),o=a.join("+"),t=(await Promise.all(a.map($t))).join(`
1632
+ `),i=e.createShaderModule({label:o,code:t}),u=(await i.getCompilationInfo()).messages.filter(f=>f.type==="error");if(u.length>0)throw new Error(`Shader "${o}" compilation failed:
1633
+ ${u.map(f=>` line ${f.lineNum}: ${f.message}`).join(`
1634
+ `)}`);let n=r==="main"?{module:i}:{module:i,entryPoint:r},l=e.createComputePipeline({label:o,layout:"auto",compute:n});return l._shaderModule=i,l}var ra=64,We=8;function C(a,r){let e=V().limits.maxComputeWorkgroupsPerDimension;return r===void 0?Math.min(Math.ceil(a/ra),e):{x:Math.min(Math.ceil(r/We),e),y:Math.min(Math.ceil(a/We),e)}}async function Ie(a,r,e,o,t){let i=o instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(t))throw new Error("n and incx must be integers.");if(typeof e!="number")throw new Error("alpha must be a number.");if(Number.isNaN(e))throw new Error("alpha must not be NaN.");if(!Number.isFinite(e))throw new Error("alpha must be finite.");if(t<=0)throw new Error("incx must be positive.");if(!(o instanceof Float32Array)&&!(o instanceof x))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return i?{}:o;if(o.length<(r-1)*t+1)throw new Error("x does not have enough elements for the given n and incx.");let s=await B(a,"sscal"),u=null,n=null,l=null;try{u=i?o._buf:b(o,"sscal-x",!0),n=N([{value:r,type:"u32"},{value:e,type:"f32"},{value:t,type:"u32"}],"sscal-params");let f=A(s.getBindGroupLayout(0),[u,n]),{commandEncoder:c,ts:p}=L(s,f,C(r));l=i?null:E(c,u),S(c);let m=await P(p);if(i)return m!==void 0?{gpuTimeMs:m}:{};let g=await _(l,Float32Array);return l=null,m!==void 0?{x:g,gpuTimeMs:m}:g}finally{!i&&u&&d(u),n&&d(n),l&&d(l)}}async function Me(a,r,e,o,t,i){let s=e instanceof x,u=t instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(i))throw new Error("n, incx, and incy must be integers.");if(o<=0||i<=0)throw new Error("incx and incy must be positive.");if(!(e instanceof Float32Array)&&!(e instanceof x))throw new Error("x must be a Float32Array or GpuVector.");if(!(t instanceof Float32Array)&&!(t instanceof x))throw new Error("y must be a Float32Array or GpuVector.");if(e.constructor!==t.constructor)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return s?{}:{x:e,y:t};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*i+1)throw new Error("y does not have enough elements for the given n and incy.");let n=await B(a,"sswap"),l=null,f=null,c=null,p=null,m=null;try{l=s?e._buf:b(e,"sswap-x",!0),f=u?t._buf:b(t,"sswap-y",!0),c=N([{value:r,type:"u32"},{value:o,type:"u32"},{value:i,type:"u32"}],"sswap-params");let g=A(n.getBindGroupLayout(0),[l,f,c]),{commandEncoder:w,ts:y}=L(n,g,C(r));p=s?null:E(w,l),m=u?null:E(w,f),S(w);let h=await P(y);if(s&&u)return h!==void 0?{gpuTimeMs:h}:{};let G=await _(p,Float32Array);p=null;let v=await _(m,Float32Array);return m=null,h!==void 0?{x:G,y:v,gpuTimeMs:h}:{x:G,y:v}}finally{!s&&l&&d(l),!u&&f&&d(f),c&&d(c),p&&d(p),m&&d(m)}}async function Ue(a,r,e,o,t,i,s){let u=o instanceof x,n=i instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(t)||!Number.isInteger(s))throw new Error("n, incx, and incy must be integers.");if(typeof e!="number")throw new Error("alpha must be a number.");if(Number.isNaN(e))throw new Error("alpha must not be NaN.");if(!Number.isFinite(e))throw new Error("alpha must be finite.");if(t<=0||s<=0)throw new Error("incx and incy must be positive.");if(!u&&!(o instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!n&&!(i instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(u!==n)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return n?{}:{y:i};if(o.length<(r-1)*t+1)throw new Error("x does not have enough elements for the given n and incx.");if(i.length<(r-1)*s+1)throw new Error("y does not have enough elements for the given n and incy.");let l=await B(a,"saxpy"),f=null,c=null,p=null,m=null;try{f=u?o._buf:b(o,"saxpy-x",!1),c=n?i._buf:b(i,"saxpy-y",!0),p=N([{value:r,type:"u32"},{value:e,type:"f32"},{value:t,type:"u32"},{value:s,type:"u32"}],"saxpy-params");let g=A(l.getBindGroupLayout(0),[f,c,p]),{commandEncoder:w,ts:y}=L(l,g,C(r));m=n?null:E(w,c),S(w);let h=await P(y);if(n&&u)return h!==void 0?{gpuTimeMs:h}:{};let G=await _(m,Float32Array);return m=null,h!==void 0?{y:G,gpuTimeMs:h}:{y:G}}finally{!u&&f&&d(f),!n&&c&&d(c),p&&d(p),m&&d(m)}}async function Te(a,r,e,o,t,i){let s=e instanceof x,u=t instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(i))throw new Error("n, incx, and incy must be integers.");if(o<=0||i<=0)throw new Error("incx and incy must be positive.");if(!s&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!u&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(s!==u)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return u?{}:{y:t};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*i+1)throw new Error("y does not have enough elements for the given n and incy.");let n=await B(a,"scopy"),l=null,f=null,c=null,p=null;try{l=s?e._buf:b(e,"scopy-x",!1),f=u?t._buf:b(t,"scopy-y",!0),c=N([{value:r,type:"u32"},{value:o,type:"u32"},{value:i,type:"u32"}],"scopy-params");let m=A(n.getBindGroupLayout(0),[l,f,c]),{commandEncoder:g,ts:w}=L(n,m,C(r));p=u?null:E(g,f),S(g);let y=await P(w);if(u&&s)return y!==void 0?{gpuTimeMs:y}:{};let h=await _(p,Float32Array);return p=null,y!==void 0?{y:h,gpuTimeMs:y}:{y:h}}finally{!s&&l&&d(l),!u&&f&&d(f),c&&d(c),p&&d(p)}}var Ve=64;async function Re(a,r,e,o,t,i){let s=e instanceof x,u=t instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(i))throw new Error("n, incx, and incy must be integers.");if(o<=0||i<=0)throw new Error("incx and incy must be positive.");if(!s&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!u&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(s!==u)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return{dot:0};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*i+1)throw new Error("y does not have enough elements for the given n and incy.");let n=await B(a,"sdot"),l=await B(a,"reduction/sum"),f=null,c=null,p=null,m=null,g=null,w=null;try{f=s?e._buf:b(e,"sdot-x",!1),c=u?t._buf:b(t,"sdot-y",!1),p=D(2*Ve*4,"sdot-partials"),m=q(4,"sdot-result"),g=N([{value:r,type:"u32"},{value:o,type:"u32"},{value:i,type:"u32"}],"sdot-params");let y=A(n.getBindGroupLayout(0),[f,c,p,g]),{commandEncoder:h,ts:G}=L(n,y,2*Ve);S(h);let v=A(l.getBindGroupLayout(0),[p,m]),{commandEncoder:F,ts:k}=L(l,v,1);w=E(F,m),S(F);let j=_(w,Float32Array);w=null;let[W,M,U]=await Promise.all([P(G),P(k),j]);return W!==void 0&&M!==void 0?{dot:U[0],gpuTimeMs:W+M}:{dot:U[0]}}finally{!s&&f&&d(f),!u&&c&&d(c),p&&d(p),m&&d(m),g&&d(g),w&&d(w)}}var He=64;async function De(a,r,e,o){let t=e instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new Error("n and incx must be integers.");if(o<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{asum:0};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");let i=await B(a,"sasum"),s=await B(a,"reduction/sum"),u=null,n=null,l=null,f=null,c=null;try{u=t?e._buf:b(e,"sasum-x",!1),n=D(2*He*4,"sasum-partials"),l=q(4,"sasum-result"),f=N([{value:r,type:"u32"},{value:o,type:"u32"}],"sasum-params");let p=A(i.getBindGroupLayout(0),[u,n,f]),{commandEncoder:m,ts:g}=L(i,p,2*He);S(m);let w=A(s.getBindGroupLayout(0),[n,l]),{commandEncoder:y,ts:h}=L(s,w,1);c=E(y,l),S(y);let G=_(c,Float32Array);c=null;let[v,F,k]=await Promise.all([P(g),P(h),G]);return v!==void 0&&F!==void 0?{asum:k[0],gpuTimeMs:v+F}:{asum:k[0]}}finally{!t&&u&&d(u),n&&d(n),l&&d(l),f&&d(f),c&&d(c)}}var wr=64;async function Ce(a,r,e,o){let t=e instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new Error("n and incx must be integers.");if(o<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float64Array))throw new Error("x must be a Float64Array or GpuVector.");if(t&&e.dtype!==Float64Array)throw new Error("x must be a Float64Array-backed GpuVector.");if(r<=0)return{asum:0};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");let i=await B(a,["f64add","dasum"]),s=await B(a,["f64add","reduction/sumF64"]),u=null,n=null,l=null,f=null,c=null,p=null,m=null,g=null;try{u=t?e:x.from(e),n=D(2*wr*4,"dasum-partialsMain"),l=D(2*wr*4,"dasum-partialsAux"),f=q(4,"dasum-result-main"),c=q(4,"dasum-result-aux"),p=N([{value:r,type:"u32"},{value:o,type:"u32"}],"dasum-params");let w=A(i.getBindGroupLayout(0),[u._buf,u._auxBuf,n,l,p]),{commandEncoder:y,ts:h}=L(i,w,2*wr);S(y);let G=A(s.getBindGroupLayout(0),[n,l,f,c]),{commandEncoder:v,ts:F}=L(s,G,1);m=E(v,f),g=E(v,c),S(v);let k=_(m,Float32Array),j=_(g,Uint32Array);m=null,g=null;let[W,M,U,T]=await Promise.all([P(h),P(F),k,j]),R=tr(U[0],T[0]);return W!==void 0&&M!==void 0?{asum:R,gpuTimeMs:W+M}:{asum:R}}finally{!t&&u&&u.destroy(),n&&d(n),l&&d(l),f&&d(f),c&&d(c),p&&d(p),m&&d(m),g&&d(g)}}var Oe=64;async function ze(a,r,e,o){let t=e instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new Error("n and incx must be integers.");if(o<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{nrm2:0};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");let i=await B(a,"snrm2"),s=await B(a,"reduction/sum"),u=null,n=null,l=null,f=null,c=null;try{u=t?e._buf:b(e,"snrm2-x",!1),n=D(2*Oe*4,"snrm2-partials"),l=q(4,"snrm2-result"),f=N([{value:r,type:"u32"},{value:o,type:"u32"}],"snrm2-params");let p=A(i.getBindGroupLayout(0),[u,n,f]),{commandEncoder:m,ts:g}=L(i,p,2*Oe);S(m);let w=A(s.getBindGroupLayout(0),[n,l]),{commandEncoder:y,ts:h}=L(s,w,1);c=E(y,l),S(y);let G=_(c,Float32Array);c=null;let[v,F,k]=await Promise.all([P(g),P(h),G]),j=Math.sqrt(k[0]);return v!==void 0&&F!==void 0?{nrm2:j,gpuTimeMs:v+F}:{nrm2:j}}finally{!t&&u&&d(u),n&&d(n),l&&d(l),f&&d(f),c&&d(c)}}var br=64;async function Qe(a,r,e,o){let t=e instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new Error("n and incx must be integers.");if(o<=0)throw new Error("incx must be positive.");if(!t&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(r<=0)return{index:0};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");let i=await B(a,"isamax"),s=await B(a,"reduction/argmax"),u=null,n=null,l=null,f=null,c=null,p=null;try{u=t?e._buf:b(e,"isamax-x",!1),n=D(2*br*4,"isamax-partials-val"),l=D(2*br*4,"isamax-partials-idx"),f=q(4,"isamax-result"),c=N([{value:r,type:"u32"},{value:o,type:"u32"}],"isamax-params");let m=A(i.getBindGroupLayout(0),[u,n,l,c]),{commandEncoder:g,ts:w}=L(i,m,2*br);S(g);let y=A(s.getBindGroupLayout(0),[n,l,f]),{commandEncoder:h,ts:G}=L(s,y,1);p=E(h,f),S(h);let v=_(p,Uint32Array);p=null;let[F,k,j]=await Promise.all([P(w),P(G),v]),W=j[0];return F!==void 0&&k!==void 0?{index:W,gpuTimeMs:F+k}:{index:W}}finally{!t&&u&&d(u),n&&d(n),l&&d(l),f&&d(f),c&&d(c),p&&d(p)}}async function qe(a,r,e,o,t,i,s,u){let n=e instanceof x,l=t instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(i))throw new Error("n, incx, and incy must be integers.");if(typeof s!="number")throw new Error("c must be a number.");if(typeof u!="number")throw new Error("s must be a number.");if(Number.isNaN(s)||Number.isNaN(u))throw new Error("c and s must not be NaN.");if(!Number.isFinite(s))throw new Error("c must be finite.");if(!Number.isFinite(u))throw new Error("s must be finite.");if(o<=0||i<=0)throw new Error("incx and incy must be positive.");if(!n&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!l&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(n!==l)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0)return n?{}:{x:e,y:t};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*i+1)throw new Error("y does not have enough elements for the given n and incy.");let f=await B(a,"srot"),c=null,p=null,m=null,g=null,w=null;try{c=n?e._buf:b(e,"srot-x",!0),p=l?t._buf:b(t,"srot-y",!0),m=N([{value:r,type:"u32"},{value:s,type:"f32"},{value:u,type:"f32"},{value:o,type:"u32"},{value:i,type:"u32"}],"srot-params");let y=A(f.getBindGroupLayout(0),[c,p,m]),{commandEncoder:h,ts:G}=L(f,y,C(r));g=n?null:E(h,c),w=l?null:E(h,p),S(h);let v=await P(G);if(n&&l)return v!==void 0?{gpuTimeMs:v}:{};let F=_(g,Float32Array),k=_(w,Float32Array);g=null,w=null;let[j,W]=await Promise.all([F,k]);return v!==void 0?{x:j,y:W,gpuTimeMs:v}:{x:j,y:W}}finally{!n&&c&&d(c),!l&&p&&d(p),m&&d(m),g&&d(g),w&&d(w)}}async function Ze(a,r,e,o,t,i,s){let u=e instanceof x,n=t instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(i))throw new Error("n, incx, and incy must be integers.");if(!(s instanceof Float32Array)||s.length!==5)throw new Error("param must be a Float32Array of length 5.");if(o<=0||i<=0)throw new Error("incx and incy must be positive.");if(!u&&!(e instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!n&&!(t instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(u!==n)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(r<=0||s[0]===-2)return u?{}:{x:e,y:t};if(e.length<(r-1)*o+1)throw new Error("x does not have enough elements for the given n and incx.");if(t.length<(r-1)*i+1)throw new Error("y does not have enough elements for the given n and incy.");let l=await B(a,"srotm"),f=null,c=null,p=null,m=null,g=null,w=null;try{f=u?e._buf:b(e,"srotm-x",!0),c=n?t._buf:b(t,"srotm-y",!0),p=b(s,"srotm-param",!1),m=N([{value:r,type:"u32"},{value:o,type:"u32"},{value:i,type:"u32"}],"srotm-params");let y=A(l.getBindGroupLayout(0),[f,c,p,m]),{commandEncoder:h,ts:G}=L(l,y,C(r));g=u?null:E(h,f),w=n?null:E(h,c),S(h);let v=await P(G);if(u&&n)return v!==void 0?{gpuTimeMs:v}:{};let F=_(g,Float32Array),k=_(w,Float32Array);g=null,w=null;let[j,W]=await Promise.all([F,k]);return v!==void 0?{x:j,y:W,gpuTimeMs:v}:{x:j,y:W}}finally{!u&&f&&d(f),!n&&c&&d(c),p&&d(p),m&&d(m),g&&d(g),w&&d(w)}}async function Ke(a,r,e,o,t,i,s,u,n,l,f,c,p="row-major"){let m=i instanceof H,g=u instanceof x,w=f instanceof x;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="no-transpose"&&r!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(p!=="row-major"&&p!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(typeof t!="number")throw new Error("alpha must be a number.");if(Number.isNaN(t))throw new Error("alpha must not be NaN.");if(!Number.isFinite(t))throw new Error("alpha must be finite.");if(typeof l!="number")throw new Error("beta must be a number.");if(Number.isNaN(l))throw new Error("beta must not be NaN.");if(!Number.isFinite(l))throw new Error("beta must be finite.");if(!Number.isInteger(e)||!Number.isInteger(o)||!Number.isInteger(n)||!Number.isInteger(c)||!Number.isInteger(s))throw new Error("m, n, incx, incy, and lda must be integers.");if(n<=0||c<=0)throw new Error("incx and incy must be positive.");if(!m&&!(i instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!g&&!(u instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!w&&!(f instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(g!==w)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(g&&!m)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(g&&u._buf===f._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(m&&s!==i.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(m&&(i.rows<e||i.cols<o))throw new Error("A is too small for the given m and n.");if(e<0||o<0)throw new Error("m and n must be non-negative.");if(e===0||o===0)return w?{}:{y:f};(m?i.layout:p)==="column-major"&&([e,o]=[o,e],r=r==="no-transpose"?"transpose":"no-transpose");let h=r==="no-transpose",G=h?o:e,v=h?e:o;if(s<o)throw new Error("lda must be >= n.");if(!m&&i.length<(e-1)*s+o)throw new Error("A does not have enough elements for the given m, n, and lda.");if(u.length<(G-1)*n+1)throw new Error("x does not have enough elements for the given dimensions and incx.");if(f.length<(v-1)*c+1)throw new Error("y does not have enough elements for the given dimensions and incy.");let k=await B(a,h?"sgemv_n":"sgemv_t"),j=m?i._buf:b(i,"sgemv-A",!1),W=g?u._buf:b(u,"sgemv-x",!1),M=w?f._buf:b(f,"sgemv-y",!0),U=N([{value:e,type:"u32"},{value:o,type:"u32"},{value:t,type:"f32"},{value:l,type:"f32"},{value:n,type:"u32"},{value:c,type:"u32"},{value:s,type:"u32"}],"sgemv-params");try{let T=A(k.getBindGroupLayout(0),[j,W,M,U]),R=h?Math.min(e,a.limits.maxComputeWorkgroupsPerDimension):C(v),{commandEncoder:z,ts:Y}=L(k,T,R),Q=w?null:E(z,M);S(z);let O=await P(Y);if(w)return O!==void 0?{gpuTimeMs:O}:{};let nr=await _(Q,Float32Array);return O!==void 0?{y:nr,gpuTimeMs:O}:{y:nr}}finally{m||d(j),g||d(W),w||d(M),d(U)}}async function Xe(a,r,e,o,t,i,s,u,n,l,f,c="row-major"){let p=s instanceof x,m=l instanceof x,g=t instanceof H;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="lower"&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(c!=="row-major"&&c!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(!Number.isInteger(e)||!Number.isInteger(u)||!Number.isInteger(f)||!Number.isInteger(i))throw new Error("n, incx, incy, and lda must be integers.");if(typeof o!="number")throw new Error("alpha must be a number.");if(Number.isNaN(o))throw new Error("alpha must not be NaN.");if(!Number.isFinite(o))throw new Error("alpha must be finite.");if(typeof n!="number")throw new Error("beta must be a number.");if(Number.isNaN(n))throw new Error("beta must not be NaN.");if(!Number.isFinite(n))throw new Error("beta must be finite.");if(u<=0||f<=0)throw new Error("incx and incy must be positive.");if(i<e)throw new Error("lda must be >= n.");if(!g&&!(t instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!p&&!(s instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!m&&!(l instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(p!==m)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(p&&!g)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(p&&s._buf===l._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(g&&i!==t.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(g&&(t.rows<e||t.cols<e))throw new Error("A is too small for the given n.");if(e<0)throw new Error("n must be non-negative.");if(e===0)return m?{}:{y:l};if(!g&&t.length<(e-1)*i+e)throw new Error("A does not have enough elements for the given n and lda.");if(s.length<(e-1)*u+1)throw new Error("x does not have enough elements for the given n and incx.");if(l.length<(e-1)*f+1)throw new Error("y does not have enough elements for the given n and incy.");let y=(g?t.layout:c)==="column-major"?r==="upper":r==="lower",h=await B(a,"ssymv"),G=null,v=null,F=null,k=null;try{G=g?t._buf:b(t,"ssymv-A",!1),v=p?s._buf:b(s,"ssymv-x",!1),F=m?l._buf:b(l,"ssymv-y",!0),k=N([{value:e,type:"u32"},{value:o,type:"f32"},{value:n,type:"f32"},{value:u,type:"u32"},{value:f,type:"u32"},{value:i,type:"u32"},{value:y?0:1,type:"u32"}],"ssymv-params");let j=A(h.getBindGroupLayout(0),[G,v,F,k]),W=Math.min(e,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:M,ts:U}=L(h,j,W),T=m?null:E(M,F);S(M);let R=await P(U);if(m)return R!==void 0?{gpuTimeMs:R}:{};let z=await _(T,Float32Array);return R!==void 0?{y:z,gpuTimeMs:R}:{y:z}}finally{!g&&G&&d(G),!p&&v&&d(v),!m&&F&&d(F),k&&d(k)}}async function $e(a,r,e,o,t,i,s,u,n,l,f,c="row-major"){let p=u instanceof x,m=l instanceof x,g=i instanceof H,w=o==="unit";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="lower"&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(e!=="no-transpose"&&e!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(!w&&o!=="non-unit")throw new Error("diag must be 'unit' or 'non-unit'.");if(c!=="row-major"&&c!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(f)||!Number.isInteger(s))throw new Error("n, incx, incy, and lda must be integers.");if(n<=0||f<=0)throw new Error("incx and incy must be positive.");if(s<t)throw new Error("lda must be >= n.");if(!g&&!(i instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!p&&!(u instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!m&&!(l instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(p!==m)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(p&&u._buf===l._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(p&&!g)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(g&&m&&i._buf===l._buf)throw new Error("A and y must not reference the same GPU buffer.");if(g&&s!==i.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(g&&(i.rows<t||i.cols<t))throw new Error("A is too small for the given n.");if(t<0)throw new Error("n must be non-negative.");if(t===0)return m?{}:{y:l};if(!g&&i.length<(t-1)*s+t)throw new Error("A does not have enough elements for the given n and lda.");if(u.length<(t-1)*n+1)throw new Error("x does not have enough elements for the given n and incx.");if(l.length<(t-1)*f+1)throw new Error("y does not have enough elements for the given n and incy.");let h=(g?i.layout:c)==="column-major",G=h?r==="upper":r==="lower",v=h?e==="transpose":e==="no-transpose",F=await B(a,"strmv"),k=null,j=null,W=null,M=null;try{k=g?i._buf:b(i,"strmv-A",!1),j=p?u._buf:b(u,"strmv-x",!1),W=m?l._buf:b(l,"strmv-y",!0),M=N([{value:t,type:"u32"},{value:n,type:"u32"},{value:f,type:"u32"},{value:s,type:"u32"},{value:v?0:1,type:"u32"},{value:G?0:1,type:"u32"},{value:w?1:0,type:"u32"}],"strmv-params");let U=A(F.getBindGroupLayout(0),[k,j,W,M]),T=Math.min(t,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:R,ts:z}=L(F,U,T),Y=m?null:E(R,W);S(R);let Q=await P(z);if(m)return Q!==void 0?{gpuTimeMs:Q}:{};let O=await _(Y,Float32Array);return Q!==void 0?{y:O,gpuTimeMs:Q}:{y:O}}finally{!g&&k&&d(k),!p&&j&&d(j),!m&&W&&d(W),M&&d(M)}}var K=64;function Ye(a,r,e){let o=new ArrayBuffer(a*r),t=new DataView(o);for(let i=0;i<a;i++){let s=e(i),u=i*r;s.forEach((n,l)=>t.setUint32(u+l*4,n,!0))}return o}function Je(a,r,e){let o=a.createBuffer({label:e,size:r.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return a.queue.writeBuffer(o,0,r),o}async function rt(a,r,e,o,t,i,s,u,n,l="row-major"){let f=u instanceof x,c=i instanceof H,p=o==="unit";if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="lower"&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(e!=="no-transpose"&&e!=="transpose")throw new Error("trans must be 'no-transpose' or 'transpose'.");if(!p&&o!=="non-unit")throw new Error("diag must be 'unit' or 'non-unit'.");if(l!=="row-major"&&l!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(s))throw new Error("n, incx, and lda must be integers.");if(n<=0)throw new Error("incx must be positive.");if(s<t)throw new Error("lda must be >= n.");if(!c&&!(i instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!f&&!(u instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(f&&!c)throw new Error("A must be a GpuMatrix when x is a GpuVector.");if(c&&s!==i.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(c&&(i.rows<t||i.cols<t))throw new Error("A is too small for the given n.");if(t<0)throw new Error("n must be non-negative.");if(t===0)return f?{}:{x:u};if(!c&&i.length<(t-1)*s+t)throw new Error("A does not have enough elements for the given n and lda.");if(u.length<(t-1)*n+1)throw new Error("x does not have enough elements for the given n and incx.");let g=(c?i.layout:l)==="column-major",w=g?r==="upper":r==="lower",y=g?e==="transpose":e==="no-transpose",h=await B(a,"strsv_invert_block"),G=await B(a,"strsv_apply_inverse"),v=await B(a,"strsv_update"),F=y===w,k=[];for(let O=0;O<t;O+=K)k.push(O);F||k.reverse();let j=k.length,W=a.limits.maxComputeWorkgroupsPerDimension,M=a.limits.minUniformBufferOffsetAlignment,U=null,T=null,R=null,z=null,Y=null,Q=null;try{U=c?i._buf:b(i,"strsv-A",!1),T=f?u._buf:b(u,"strsv-x",!0),R=D(j*K*K*4,"strsv-Ainv");let O=Ye(j,M,X=>{let $=X*K,or=Math.min($+K,t);return[n,X,$,or]});z=Je(a,O,"strsv-apply-params");let nr=Ye(j,M,X=>{let $=X*K,or=Math.min($+K,t);return[t,n,s,y?0:1,w?0:1,$,or]});Y=Je(a,nr,"strsv-update-params");let{commandEncoder:rr,querySet:ar}=pr();Q=N([{value:t,type:"u32"},{value:s,type:"u32"},{value:y?0:1,type:"u32"},{value:w?0:1,type:"u32"},{value:p?1:0,type:"u32"}],"strsv-invert-params");let ot=A(h.getBindGroupLayout(0),[U,R,Q]);ir(rr,h,ot,{x:K,y:j},ar?{timestampWrites:{querySet:ar,beginningOfPassWriteIndex:0}}:void 0);for(let X=0;X<k.length;X++){let $=k[X],or=Math.min($+K,t),st=$/K,ut=X===k.length-1,xr=st*M,lt=A(G.getBindGroupLayout(0),[R,T,{buffer:z,offset:xr,size:16}]);ir(rr,G,lt,1,ut&&ar?{timestampWrites:{querySet:ar,endOfPassWriteIndex:1}}:void 0);let vr=F?t-or:$;if(vr===0)continue;let ft=A(v.getBindGroupLayout(0),[U,T,{buffer:Y,offset:xr,size:32}]),ct=Math.min(vr,W);ir(rr,v,ft,ct)}let it=cr(rr,ar),nt=f?null:E(rr,T);S(rr);let sr=await P(it);if(f)return sr!==void 0?{gpuTimeMs:sr}:{};let hr=await _(nt,Float32Array);return sr!==void 0?{x:hr,gpuTimeMs:sr}:{x:hr}}finally{!c&&U&&d(U),!f&&T&&d(T),R&&d(R),z&&d(z),Y&&d(Y),Q&&d(Q)}}async function et(a,r,e,o,t,i,s,u,n,l,f="row-major"){let c=n instanceof H;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(f!=="row-major"&&f!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(typeof o!="number")throw new Error("alpha must be a number.");if(Number.isNaN(o))throw new Error("alpha must not be NaN.");if(!Number.isFinite(o))throw new Error("alpha must be finite.");if(!Number.isInteger(r)||!Number.isInteger(e)||!Number.isInteger(i)||!Number.isInteger(u)||!Number.isInteger(l))throw new Error("m, n, incx, incy, and lda must be integers.");if(i<=0||u<=0)throw new Error("incx and incy must be positive.");if(!c&&!(n instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(c&&l!==n.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(c&&(n.rows<r||n.cols<e))throw new Error("A is too small for the given m and n.");(c?n.layout:f)==="column-major"&&([r,e]=[e,r],[t,s]=[s,t],[i,u]=[u,i]);let m=t instanceof x,g=s instanceof x;if(l<e)throw new Error("lda must be >= n.");if(!m&&!(t instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!g&&!(s instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(m!==g)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(m&&!c)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(c&&m&&n._buf===t._buf)throw new Error("A and x must not reference the same GPU buffer.");if(c&&g&&n._buf===s._buf)throw new Error("A and y must not reference the same GPU buffer.");if(r<0||e<0)throw new Error("m and n must be non-negative.");if(r===0||e===0)return c?{}:{A:n};if(!c&&n.length<(r-1)*l+e)throw new Error("A does not have enough elements for the given m, n, and lda.");if(t.length<(r-1)*i+1)throw new Error("x does not have enough elements for the given m and incx.");if(s.length<(e-1)*u+1)throw new Error("y does not have enough elements for the given n and incy.");let w=await B(a,"sger"),y=null,h=null,G=null,v=null;try{y=m?t._buf:b(t,"sger-x",!1),h=g?s._buf:b(s,"sger-y",!1),G=c?n._buf:b(n,"sger-A",!0),v=N([{value:r,type:"u32"},{value:e,type:"u32"},{value:o,type:"f32"},{value:i,type:"u32"},{value:u,type:"u32"},{value:l,type:"u32"}],"sger-params");let F=A(w.getBindGroupLayout(0),[y,h,G,v]),k=Math.min(r,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:j,ts:W}=L(w,F,k),M=c?null:E(j,G);S(j);let U=await P(W);if(c)return U!==void 0?{gpuTimeMs:U}:{};let T=await _(M,Float32Array);return U!==void 0?{A:T,gpuTimeMs:U}:{A:T}}finally{!m&&y&&d(y),!g&&h&&d(h),!c&&G&&d(G),v&&d(v)}}async function tt(a,r,e,o,t,i,s,u,n="row-major"){let l=t instanceof x,f=s instanceof H;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="lower"&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(n!=="row-major"&&n!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(!Number.isInteger(e)||!Number.isInteger(i)||!Number.isInteger(u))throw new Error("n, incx, and lda must be integers.");if(typeof o!="number")throw new Error("alpha must be a number.");if(Number.isNaN(o))throw new Error("alpha must not be NaN.");if(!Number.isFinite(o))throw new Error("alpha must be finite.");if(i<=0)throw new Error("incx must be positive.");if(u<e)throw new Error("lda must be >= n.");if(!f&&!(s instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!l&&!(t instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(l&&!f)throw new Error("A must be a GpuMatrix when x is a GpuVector.");if(f&&l&&s._buf===t._buf)throw new Error("A and x must not reference the same GPU buffer.");if(f&&u!==s.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(f&&(s.rows<e||s.cols<e))throw new Error("A is too small for the given n.");if(e<0)throw new Error("n must be non-negative.");if(e===0)return f?{}:{A:s};if(!f&&s.length<(e-1)*u+e)throw new Error("A does not have enough elements for the given n and lda.");if(t.length<(e-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");let p=(f?s.layout:n)==="column-major"?r==="upper":r==="lower",m=await B(a,"ssyr"),g=null,w=null,y=null;try{g=l?t._buf:b(t,"ssyr-x",!1),w=f?s._buf:b(s,"ssyr-A",!0),y=N([{value:e,type:"u32"},{value:o,type:"f32"},{value:i,type:"u32"},{value:u,type:"u32"},{value:p?0:1,type:"u32"}],"ssyr-params");let h=A(m.getBindGroupLayout(0),[g,w,y]),G=Math.min(e,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:v,ts:F}=L(m,h,G),k=f?null:E(v,w);S(v);let j=await P(F);if(f)return j!==void 0?{gpuTimeMs:j}:{};let W=await _(k,Float32Array);return j!==void 0?{A:W,gpuTimeMs:j}:{A:W}}finally{!l&&g&&d(g),!f&&w&&d(w),y&&d(y)}}async function at(a,r,e,o,t,i,s,u,n,l,f="row-major"){let c=t instanceof x,p=s instanceof x,m=n instanceof H;if(!(a instanceof GPUDevice))throw new Error("device must be a GPUDevice.");if(r!=="lower"&&r!=="upper")throw new Error("uplo must be 'lower' or 'upper'.");if(f!=="row-major"&&f!=="column-major")throw new Error("layout must be 'row-major' or 'column-major'.");if(!Number.isInteger(e)||!Number.isInteger(i)||!Number.isInteger(u)||!Number.isInteger(l))throw new Error("n, incx, incy, and lda must be integers.");if(typeof o!="number")throw new Error("alpha must be a number.");if(Number.isNaN(o))throw new Error("alpha must not be NaN.");if(!Number.isFinite(o))throw new Error("alpha must be finite.");if(i<=0||u<=0)throw new Error("incx and incy must be positive.");if(l<e)throw new Error("lda must be >= n.");if(!m&&!(n instanceof Float32Array))throw new Error("A must be a Float32Array or GpuMatrix.");if(!c&&!(t instanceof Float32Array))throw new Error("x must be a Float32Array or GpuVector.");if(!p&&!(s instanceof Float32Array))throw new Error("y must be a Float32Array or GpuVector.");if(c!==p)throw new Error("x and y must be the same type (both Float32Array or both GpuVector).");if(c&&!m)throw new Error("A must be a GpuMatrix when x and y are GpuVectors.");if(m&&c&&n._buf===t._buf)throw new Error("A and x must not reference the same GPU buffer.");if(m&&p&&n._buf===s._buf)throw new Error("A and y must not reference the same GPU buffer.");if(c&&t._buf===s._buf)throw new Error("x and y must not reference the same GPU buffer when both are GpuVectors.");if(m&&l!==n.lda)throw new Error("lda must match A.lda when A is a GpuMatrix.");if(m&&(n.rows<e||n.cols<e))throw new Error("A is too small for the given n.");if(e<0)throw new Error("n must be non-negative.");if(e===0)return m?{}:{A:n};if(!m&&n.length<(e-1)*l+e)throw new Error("A does not have enough elements for the given n and lda.");if(t.length<(e-1)*i+1)throw new Error("x does not have enough elements for the given n and incx.");if(s.length<(e-1)*u+1)throw new Error("y does not have enough elements for the given n and incy.");let w=(m?n.layout:f)==="column-major"?r==="upper":r==="lower",y=await B(a,"ssyr2"),h=null,G=null,v=null,F=null;try{h=c?t._buf:b(t,"ssyr2-x",!1),G=p?s._buf:b(s,"ssyr2-y",!1),v=m?n._buf:b(n,"ssyr2-A",!0),F=N([{value:e,type:"u32"},{value:o,type:"f32"},{value:i,type:"u32"},{value:u,type:"u32"},{value:l,type:"u32"},{value:w?0:1,type:"u32"}],"ssyr2-params");let k=A(y.getBindGroupLayout(0),[h,G,v,F]),j=Math.min(e,a.limits.maxComputeWorkgroupsPerDimension),{commandEncoder:W,ts:M}=L(y,k,j),U=m?null:E(W,v);S(W);let T=await P(M);if(m)return T!==void 0?{gpuTimeMs:T}:{};let R=await _(U,Float32Array);return T!==void 0?{A:R,gpuTimeMs:T}:{A:R}}finally{!c&&h&&d(h),!p&&G&&d(G),!m&&v&&d(v),F&&d(F)}}return bt(ea);})();
package/index.d.mts CHANGED
@@ -6,6 +6,7 @@ export { GpuMatrix } from "./src/classes/GpuMatrix.mjs";
6
6
  export {
7
7
  randomFloat32Array,
8
8
  randomFloat64Array,
9
+ randomTriangularFloat32Array,
9
10
  } from "./src/random/random.mjs";
10
11
  export { sscal } from "./src/sscal/sscal.mjs";
11
12
  export { sswap } from "./src/sswap/sswap.mjs";
@@ -22,6 +23,9 @@ export { sgemv } from "./src/sgemv/sgemv.mjs";
22
23
  export { ssymv } from "./src/ssymv/ssymv.mjs";
23
24
  export { strmv } from "./src/strmv/strmv.mjs";
24
25
  export { strsv } from "./src/strsv/strsv.mjs";
26
+ export { sger } from "./src/sger/sger.mjs";
27
+ export { ssyr } from "./src/ssyr/ssyr.mjs";
28
+ export { ssyr2 } from "./src/ssyr2/ssyr2.mjs";
25
29
 
26
30
  /**
27
31
  * Initializes the WebGPU device.
package/index.mjs CHANGED
@@ -4,6 +4,7 @@ export { GpuMatrix } from "./src/classes/GpuMatrix.mjs";
4
4
  export {
5
5
  randomFloat32Array,
6
6
  randomFloat64Array,
7
+ randomTriangularFloat32Array,
7
8
  } from "./src/random/random.mjs";
8
9
  export { sscal } from "./src/sscal/sscal.mjs";
9
10
  export { sswap } from "./src/sswap/sswap.mjs";
@@ -20,3 +21,6 @@ export { sgemv } from "./src/sgemv/sgemv.mjs";
20
21
  export { ssymv } from "./src/ssymv/ssymv.mjs";
21
22
  export { strmv } from "./src/strmv/strmv.mjs";
22
23
  export { strsv } from "./src/strsv/strsv.mjs";
24
+ export { sger } from "./src/sger/sger.mjs";
25
+ export { ssyr } from "./src/ssyr/ssyr.mjs";
26
+ export { ssyr2 } from "./src/ssyr2/ssyr2.mjs";