@slexisvn/mlfw 0.1.2 → 0.1.3

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.
@@ -9,7 +9,7 @@ var SS=Object.defineProperty;var l=(r,e)=>SS(r,"name",{value:e,configurable:!0})
9
9
  `,t),t<0&&(t=r.length);continue}if(n==="("&&r[t+1]===";"){t=r.indexOf(";)",t+2),t=t<0?r.length:t+2;continue}if(n==="("||n===")"){e.push(n),t++;continue}if(n==='"'){let o=t+1;for(;o<r.length&&r[o]!=='"';)o++;e.push(r.substring(t,o+1)),t=o+1;continue}let s=t;for(;s<r.length&&r[s]>" "&&r[s]!=="("&&r[s]!==")";)s++;e.push(r.substring(t,s)),t=s}return e}function g2(r){let e=0,t=l(()=>r[e++],"eat"),n=l(()=>r[e],"peek"),s=l(y=>{if(t()!==y)throw new Error("expected "+y+" at "+(e-1))},"expect");s("("),s("module");let o=[],i=1,a=256,u="",p=[],c=[],h=[],f=[],d=-1,m=-1;for(;n()!==")";){if(n()!=="("){e++;continue}e++;let y=t();if(y==="memory"){for(;n()==="(";)g();n()!==")"&&(i=parseInt(t())||1),n()!==")"&&(a=parseInt(t())||256),s(")")}else if(y==="import"){let _=t().replace(/"/g,""),b=t().replace(/"/g,"");s("("),s("func"),n().startsWith("$")&&e++;let w=[],T=[];for(;n()==="(";){e++;let S=t();if(S==="param")for(;n()!==")";){let x=t();x==="f32"?w.push(Rc):x==="f64"?w.push(Bc):x==="i32"?w.push(Oc):x==="v128"&&w.push(Mc)}else if(S==="result")for(;n()!==")";){let x=t();x==="f32"?T.push(Rc):x==="f64"?T.push(Bc):x==="i32"?T.push(Oc):x==="v128"&&T.push(Mc)}s(")")}s(")"),s(")"),o.push({module:_,name:b,params:w,results:T})}else if(y==="func"){for(;n()==="(";){let b=e;e++;let w=t();if(w==="export")u=t().replace(/"/g,""),s(")");else if(w==="param"){let T="";for(;n()!==")";){let S=t();if(S.startsWith("$")){T=S.replace("$","");continue}let x=null;S==="i32"?x=Oc:S==="i64"?x=nw:S==="f32"?x=Rc:S==="f64"?x=Bc:S==="v128"&&(x=Mc),x!==null&&(p.push(x),c.push(T),T="")}s(")")}else if(w==="result"){for(;n()!==")";)t();s(")")}else if(w==="local"){for(;n()!==")";){let T=t();T.startsWith("$")?f.push(T.replace("$","")):T==="i32"?h.push(Oc):T==="i64"?h.push(nw):T==="f32"?h.push(Rc):T==="f64"?h.push(Bc):T==="v128"&&h.push(Mc)}s(")")}else{e=b;break}}d=e;let _=1;for(;_>0;){let b=t();b==="("?_++:b===")"&&_--}m=e-1}else g()}function g(){if(n()!=="("){e++;return}let y=0;do{let _=t();_==="("?y++:_===")"&&y--}while(y>0)}return l(g,"skipSExpr"),{imports:o,memMin:i,memMax:a,funcExportName:u,funcParams:p,funcParamNames:c,funcLocals:h,funcLocalNames:f,bodyTokens:r.slice(d,m)}}function y2(r,e,t){let n=[],s=0,o=l(()=>r[s],"peek"),i=l(()=>r[s++],"eat"),a=[],u=-1;for(let y of e.values())y>u&&(u=y);function p(y){let _=y.replace("$","");if(e.has(_))return e.get(_);let b=parseInt(_,10);if(!isNaN(b))return b>u&&(u=b),b;let w=u+1;return u=w,e.set(_,w),w}l(p,"localIdx");function c(){return o()&&o().startsWith("$")?i().replace("$",""):""}l(c,"eatLabel");function h(y,_){let b=y.indexOf(_);return b>=0?y.substring(b+_.length):""}l(h,"extractName");function f(){for(;s<r.length&&o()!==")";){let y=o();if(y==="("){s++;let _=i();if(_==="i32.const")n.push(65),n.push(...p2(parseInt(i()))),m(")");else if(_==="i64.const")n.push(66),n.push(...f2(i())),m(")");else if(_==="f32.const")n.push(67),n.push(...h2(parseFloat(i()))),m(")");else if(_==="f64.const")n.push(68),n.push(...d2(parseFloat(i()))),m(")");else if(_==="local.get")n.push(32),n.push(...re(p(i()))),m(")");else if(_==="local.set")n.push(33),n.push(...re(p(i()))),m(")");else if(_==="block"){let b=i().replace("$","");a.push(b),n.push(2,ew),f(),n.push(11),a.pop(),m(")")}else if(_==="loop"){let b=i().replace("$","");a.push(b),n.push(3,ew),f(),n.push(11),a.pop(),m(")")}else if(_==="if"){let b=ew;if(o()==="("){let w=s;if(s++,o()==="result"){i();let T=i();b=T==="f32"?Rc:T==="f64"?Bc:T==="v128"?Mc:T==="i64"?nw:Oc,m(")")}else s=w}for(n.push(4,b),a.push("_if");s<r.length&&o()!==")"&&o()==="(";){let w=s;s++;let T=i();if(T==="then")f(),m(")");else if(T==="else")n.push(5),f(),m(")");else{s=w;break}}n.push(11),a.pop(),m(")")}else s-=2,g();continue}if(s++,y==="br_if")n.push(13),n.push(...re(d(c())));else if(y==="br")n.push(12),n.push(...re(d(c())));else if(y.startsWith("call")){n.push(16);let _=h(y,"math_")||(o()&&o().startsWith("$")?h(i(),"math_"):""),b=t.get(_);if(b===void 0)throw new Error(`WAT encoder: call to unresolved import '${_}'`);n.push(...re(b))}else y==="local.get"?(n.push(32),n.push(...re(p(c())))):y==="local.set"?(n.push(33),n.push(...re(p(c())))):y.endsWith(".extract_lane")||y.endsWith(".replace_lane")?(n.push(...tw.get(y)),n.push(parseInt(i(),10))):tw.has(y)&&n.push(...tw.get(y))}}l(f,"emitBlock");function d(y){for(let _=a.length-1;_>=0;_--)if(a[_]===y)return a.length-1-_;return 0}l(d,"resolveBr");function m(y){if(i()!==y)throw new Error("expect "+y)}l(m,"expect");function g(){if(o()!=="("){s++;return}let y=0;do{let _=i();_==="("?y++:_===")"&&y--}while(y>0)}return l(g,"skipSExpr"),f(),n}function Nu(r){let e=m2(r),t=g2(e),n=new Map,s=t.funcParams.length;for(let x=0;x<t.funcParamNames.length;x++)t.funcParamNames[x]&&n.set(t.funcParamNames[x],x);for(let x=0;x<t.funcLocalNames.length;x++)n.set(t.funcLocalNames[x],s+x);let o=new Map;for(let x=0;x<t.imports.length;x++)o.set(t.imports[x].name,x);let i=[],a=new Map;function u(x,k){let A=x.join(",")+">"+k.join(",");if(a.has(A))return a.get(A);let N=i.length;return i.push({params:x,results:k}),a.set(A,N),N}l(u,"getType");for(let x of t.imports)x.typeIdx=u(x.params,x.results);let p=u(t.funcParams,[]),c=vu(s2,Zi(i.map(x=>[c2,...re(x.params.length),...x.params,...re(x.results.length),...x.results]))),h=[];t.imports.length>0&&(h=vu(o2,Zi(t.imports.map(x=>[...Sd(x.module),...Sd(x.name),0,...re(x.typeIdx)]))));let f=vu(i2,Zi([[...re(p)]])),d=vu(a2,Zi([[1,...re(t.memMin),...re(t.memMax)]])),m=t.imports.length,g=vu(u2,Zi([[...Sd("memory"),2,...re(0)],[...Sd(t.funcExportName),0,...re(m)]])),y=[];if(t.funcLocals.length>0){let x=[],k=t.funcLocals[0],A=1;for(let N=1;N<t.funcLocals.length;N++)t.funcLocals[N]===k?A++:(x.push([...re(A),k]),k=t.funcLocals[N],A=1);x.push([...re(A),k]),Ws(y,Zi(x))}else y.push(0);let _=y2(t.bodyTokens,n,o),b=[];Ws(b,y),Ws(b,_),b.push(11);let w=[];Ws(w,re(b.length)),Ws(w,b);let T=vu(l2,Zi([w])),S=[];for(let x of[n2,r2,c,h,f,d,g,T])Ws(S,x);return new Uint8Array(S)}var n2,r2,s2,o2,i2,a2,u2,l2,Oc,nw,Bc,Rc,Mc,c2,ew,tw,kd=M(()=>{"use strict";n2=[0,97,115,109],r2=[1,0,0,0],s2=1,o2=2,i2=3,a2=5,u2=7,l2=10,Oc=127,nw=126,Bc=124,Rc=125,Mc=123,c2=96,ew=64;l(re,"uleb");l(p2,"sleb");l(f2,"slebBig");l(Sd,"encStr");l(h2,"encF32");l(d2,"encF64");l(Ws,"pushAll");l(vu,"section");l(Zi,"vec");tw=new Map([["i32.const",[65]],["f32.const",[67]],["local.get",[32]],["local.set",[33]],["i32.add",[106]],["i32.sub",[107]],["i32.mul",[108]],["i32.div_s",[109]],["i32.rem_s",[111]],["i32.eq",[70]],["i32.ne",[71]],["i32.lt_s",[72]],["i32.gt_s",[74]],["i32.le_s",[76]],["i32.ge_s",[78]],["i32.eqz",[69]],["i32.lt_u",[73]],["i32.gt_u",[75]],["i32.le_u",[77]],["i32.ge_u",[79]],["i32.and",[113]],["i32.or",[114]],["i32.xor",[115]],["i32.shl",[116]],["i32.shr_s",[117]],["i32.shr_u",[118]],["i32.reinterpret_f32",[188]],["f32.reinterpret_i32",[190]],["i32.trunc_f32_s",[168]],["f32.add",[146]],["f32.sub",[147]],["f32.mul",[148]],["f32.div",[149]],["f32.neg",[140]],["f32.abs",[139]],["f32.ceil",[141]],["f32.floor",[142]],["f32.sqrt",[145]],["f32.min",[150]],["f32.max",[151]],["f32.eq",[91]],["f32.ne",[92]],["f32.lt",[93]],["f32.gt",[94]],["f32.le",[95]],["f32.ge",[96]],["f32.convert_i32_s",[178]],["f64.add",[160]],["f64.sub",[161]],["f64.mul",[162]],["f64.div",[163]],["f64.min",[164]],["f64.max",[165]],["f64.neg",[154]],["f64.abs",[153]],["f64.ceil",[155]],["f64.floor",[156]],["f64.sqrt",[159]],["f64.eq",[97]],["f64.ne",[98]],["f64.lt",[99]],["f64.gt",[100]],["f64.le",[101]],["f64.ge",[102]],["f64.convert_i32_s",[183]],["f64.promote_f32",[187]],["f32.demote_f64",[182]],["i32.trunc_f64_s",[170]],["i64.load",[41,3,0]],["i64.store",[55,3,0]],["i64.add",[124]],["i64.sub",[125]],["i64.mul",[126]],["i64.div_s",[127]],["i64.rem_s",[129]],["i64.and",[131]],["i64.or",[132]],["i64.xor",[133]],["i64.shl",[134]],["i64.shr_s",[135]],["i64.shr_u",[136]],["i64.eqz",[80]],["i64.eq",[81]],["i64.ne",[82]],["i64.lt_s",[83]],["i64.gt_s",[85]],["i64.le_s",[87]],["i64.ge_s",[89]],["i64.extend_i32_s",[172]],["i32.wrap_i64",[167]],["f64.convert_i64_s",[185]],["i64.trunc_f64_s",[176]],["f32.convert_i64_s",[180]],["i64.trunc_f32_s",[174]],["select",[27]],["f32.load",[42,2,0]],["f32.store",[56,2,0]],["f64.load",[43,3,0]],["f64.store",[57,3,0]],["i32.load",[40,2,0]],["i32.store",[54,2,0]],["i32.load8_s",[44,0,0]],["i32.load8_u",[45,0,0]],["i32.store8",[58,0,0]],["i32.load16_s",[46,1,0]],["i32.load16_u",[47,1,0]],["i32.store16",[59,1,0]],["v128.load",[253,...re(0),4,0]],["v128.store",[253,...re(11),4,0]],["v128.bitselect",[253,...re(82)]],["v128.and",[253,...re(78)]],["v128.or",[253,...re(80)]],["v128.not",[253,...re(77)]],["f32x4.splat",[253,...re(19)]],["i32x4.splat",[253,...re(17)]],["f32x4.add",[253,...re(228)]],["f32x4.sub",[253,...re(229)]],["f32x4.mul",[253,...re(230)]],["f32x4.div",[253,...re(231)]],["f32x4.neg",[253,...re(225)]],["f32x4.abs",[253,...re(224)]],["f32x4.sqrt",[253,...re(227)]],["f32x4.ceil",[253,...re(103)]],["f32x4.floor",[253,...re(104)]],["f32x4.min",[253,...re(232)]],["f32x4.max",[253,...re(233)]],["f32x4.eq",[253,...re(65)]],["f32x4.ne",[253,...re(66)]],["f32x4.lt",[253,...re(67)]],["f32x4.gt",[253,...re(68)]],["f32x4.le",[253,...re(69)]],["f32x4.ge",[253,...re(70)]],["f32x4.extract_lane",[253,...re(31)]],["f32x4.replace_lane",[253,...re(32)]],["i32x4.add",[253,...re(174)]],["i32x4.sub",[253,...re(177)]],["i32x4.mul",[253,...re(181)]],["i32x4.abs",[253,...re(160)]],["i32x4.min_s",[253,...re(182)]],["i32x4.max_s",[253,...re(184)]],["i32x4.eq",[253,...re(55)]],["i32x4.ne",[253,...re(56)]],["i32x4.lt_s",[253,...re(57)]],["i32x4.gt_s",[253,...re(58)]],["i32x4.le_s",[253,...re(59)]],["i32x4.ge_s",[253,...re(60)]],["i32x4.extract_lane",[253,...re(27)]],["i32x4.replace_lane",[253,...re(28)]],["f64x2.splat",[253,...re(20)]],["f64x2.add",[253,...re(240)]],["f64x2.sub",[253,...re(241)]],["f64x2.mul",[253,...re(242)]],["f64x2.div",[253,...re(243)]],["f64x2.neg",[253,...re(237)]],["f64x2.abs",[253,...re(236)]],["f64x2.sqrt",[253,...re(239)]],["f64x2.min",[253,...re(244)]],["f64x2.max",[253,...re(245)]],["f64x2.eq",[253,...re(71)]],["f64x2.ne",[253,...re(72)]],["f64x2.lt",[253,...re(73)]],["f64x2.gt",[253,...re(74)]],["f64x2.le",[253,...re(75)]],["f64x2.ge",[253,...re(76)]],["f64x2.extract_lane",[253,...re(33)]],["f64x2.replace_lane",[253,...re(34)]]]);l(m2,"tokenize");l(g2,"parseModule");l(y2,"encodeBody");l(Nu,"encodeWat")});function Lv(r){let{source:e,name:t,metadata:n}=r,{bufferOffsets:s,imports:o}=n,i=[...s.entries()],a=Nu(e),u=[];if(u.push("(async () => {"),u.push(""),u.push("const binary = new Uint8Array(["+a.join(",")+"]);"),u.push(""),o&&o.size>0){u.push("const mathImports = {");for(let[c]of o)c==="fmod"?u.push(" fmod: (a, b) => a % b,"):c==="rsqrt"?u.push(" rsqrt: x => 1 / Math.sqrt(x),"):u.push(` ${c}: Math.${c},`);u.push("};"),u.push("const { instance } = await WebAssembly.instantiate(binary, { math: mathImports });")}else u.push("const { instance } = await WebAssembly.instantiate(binary);");u.push("const memory = instance.exports.memory;"),u.push("");for(let[c,h]of i)u.push(`// ${c}: new Float32Array(memory.buffer, ${h}, N).set(data);`);u.push(""),u.push(`instance.exports.${t}(${i.map(([,c])=>c).join(", ")});`),u.push("");let p=i[i.length-1];return p&&(u.push(`const result = new Float32Array(memory.buffer, ${p[1]}, N);`),u.push("console.log(result);")),u.push("})();"),u.join(`
10
10
  `)}var Cv=M(()=>{"use strict";kd();l(Lv,"buildSnippet")});function Dv(r){let{source:e,name:t,metadata:n}=r,{bindings:s,dispatchSize:o}=n,i=[];i.push("(async () => {"),i.push("const adapter = await navigator.gpu.requestAdapter();"),i.push("const device = await adapter.requestDevice();"),i.push(""),i.push("const wgsl = "+JSON.stringify(e)+";"),i.push(""),i.push("const pipeline = device.createComputePipeline({"),i.push(' layout: "auto",'),i.push(" compute: { module: device.createShaderModule({ code: wgsl }), entryPoint: "+JSON.stringify(t)+" }"),i.push("});"),i.push(""),i.push("const entries = [];"),i.push("const gpuBuffers = [];"),i.push("");for(let a of s)a.name==="_shapes"?_2(i,a):a.packed?b2(i,a):a.mode==="read_write"?w2(i,a):T2(i,a),i.push("");return i.push("const bindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries });"),i.push("const encoder = device.createCommandEncoder();"),i.push("const pass = encoder.beginComputePass();"),i.push("pass.setPipeline(pipeline);"),i.push("pass.setBindGroup(0, bindGroup);"),i.push(`pass.dispatchWorkgroups(${o[0]}, ${o[1]}, ${o[2]});`),i.push("pass.end();"),i.push(""),x2(i,s),i.push(""),i.push("gpuBuffers.forEach(b => b.destroy());"),i.push("device.destroy();"),i.push("})();"),i.join(`
11
11
  `)}function _2(r,e){r.push(`// binding ${e.index}: uniform (_shapes)`),r.push("{"),r.push(" const shapeData = new Uint32Array([/* shape values */]);"),r.push(" const size = Math.max(Math.ceil(shapeData.byteLength / 16) * 16, 16);"),r.push(" const buf = device.createBuffer({ size, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });"),r.push(" device.queue.writeBuffer(buf, 0, shapeData);"),r.push(" entries.push({ binding: "+e.index+", resource: { buffer: buf } });"),r.push(" gpuBuffers.push(buf);"),r.push("}")}function b2(r,e){let t=e.mode==="read_write",n=t?"GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST":"GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST";if(r.push(`// binding ${e.index}: packed ${e.name} (${e.packed.length} buffers, ${e.packedSize} elems)`),r.push("{"),r.push(` const buf = device.createBuffer({ size: ${e.packedSize*4}, usage: ${n}, mappedAtCreation: true });`),r.push(" const mapped = new Float32Array(buf.getMappedRange());"),t)r.push(" mapped.fill(0);");else for(let s of e.packed)r.push(` // mapped.set(${s.name}_data, ${s.offset}); // size=${s.size}`);r.push(" buf.unmap();"),r.push(" entries.push({ binding: "+e.index+", resource: { buffer: buf } });"),r.push(" gpuBuffers.push(buf);"),r.push("}")}function w2(r,e){r.push(`// binding ${e.index}: output ${e.name}`),r.push("{"),r.push(" const size = N * 4; // N = output element count"),r.push(" const buf = device.createBuffer({ size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, mappedAtCreation: true });"),r.push(" new Float32Array(buf.getMappedRange()).fill(0);"),r.push(" buf.unmap();"),r.push(" entries.push({ binding: "+e.index+", resource: { buffer: buf } });"),r.push(" gpuBuffers.push(buf);"),r.push("}")}function T2(r,e){r.push(`// binding ${e.index}: input ${e.name}`),r.push("{"),r.push(` const data = ${e.name}_data; // Float32Array`),r.push(" const buf = device.createBuffer({ size: Math.max(data.byteLength, 4), usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, mappedAtCreation: true });"),r.push(" new Float32Array(buf.getMappedRange()).set(data);"),r.push(" buf.unmap();"),r.push(" entries.push({ binding: "+e.index+", resource: { buffer: buf } });"),r.push(" gpuBuffers.push(buf);"),r.push("}")}function x2(r,e){if(e.filter(n=>n.mode==="read_write").length===0){r.push("device.queue.submit([encoder.finish()]);");return}for(let n=0;n<e.length;n++){let s=e[n];if(s.mode==="read_write")if(s.packed)for(let o of s.packed)r.push("{"),r.push(` const rb = device.createBuffer({ size: ${o.size*4}, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });`),r.push(` encoder.copyBufferToBuffer(gpuBuffers[${n}], ${o.offset*4}, rb, 0, ${o.size*4});`),r.push(" device.queue.submit([encoder.finish()]);"),r.push(" await rb.mapAsync(GPUMapMode.READ);"),r.push(` console.log("${o.name}:", new Float32Array(rb.getMappedRange()));`),r.push(" rb.unmap(); rb.destroy();"),r.push("}");else r.push("{"),r.push(` const src = gpuBuffers[${n}];`),r.push(" const rb = device.createBuffer({ size: src.size, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });"),r.push(" encoder.copyBufferToBuffer(src, 0, rb, 0, src.size);"),r.push(" device.queue.submit([encoder.finish()]);"),r.push(" await rb.mapAsync(GPUMapMode.READ);"),r.push(` console.log("${s.name}:", new Float32Array(rb.getMappedRange()));`),r.push(" rb.unmap(); rb.destroy();"),r.push("}")}}var Pv=M(()=>{"use strict";l(Dv,"buildSnippet");l(_2,"emitShapeBinding");l(b2,"emitPackedBinding");l(w2,"emitOutputBinding");l(T2,"emitInputBinding");l(x2,"emitReadback")});function $v(r){let{source:e,name:t,metadata:n}=r,{blockDim:s,gridDim:o,sharedMemBytes:i,params:a}=n,u=[];return u.push(e),u.push(""),u.push("// Launch:"),u.push(`// dim3 block(${s[0]}, ${s[1]}, ${s[2]});`),u.push(`// dim3 grid(${o[0]}, ${o[1]}, ${o[2]});`),i>0?u.push(`// ${t}<<<grid, block, ${i}>>>(${a.join(", ")});`):u.push(`// ${t}<<<grid, block>>>(${a.join(", ")});`),u.join(`
12
- `)}var Fv=M(()=>{"use strict";l($v,"buildSnippet")});function vd(r,e){zv.set(r,e),e.runtimeKind&&e.snippet&&Vv.set(e.runtimeKind,e.snippet)}function Gv(r){return zv.get(r)||null}function jv(r){return Vv.get(r)||null}var zv,Vv,qv=M(()=>{"use strict";Ks();Tv();Av();Ov();Mv();Ev();Cv();Pv();Fv();zv=new Map,Vv=new Map;l(vd,"registerCodegen");l(Gv,"getCodegenEntry");l(jv,"getSnippetBuilder");vd(Ot.CPU,{runtimeKind:"js",snippet:Iv,compile(r,e){return{source:new yd(e).generate(r),metadata:{kind:"js",paramCount:r.params.length}}}});vd(Ot.WASM,{runtimeKind:"wasm",snippet:Lv,compile(r,e){let t=new bd(e).generate(r),n={kind:"wasm",memoryPages:t.memoryPages,bufferOffsets:t.bufferOffsets,imports:t.imports,params:t.params,bufferMap:r.bufferMap};return t.parallel&&(n.parallel=t.parallel),{source:t.wat,metadata:n}}});vd(Ot.WEBGPU,{runtimeKind:"webgpu",snippet:Dv,compile(r,e){let t=new xd(e).generate(r);return{source:t.source,metadata:{kind:"webgpu",workgroupSize:t.workgroupSize,dispatchSize:t.dispatchSize,sharedMemBytes:t.sharedMemBytes,params:t.params,bindings:t.bindings}}}});vd(Ot.CUDA,{runtimeKind:"cuda",snippet:$v,compile(r,e,t){if(t&&t.matmulBackend==="cublas"&&r.cublasInfo)return{source:"",metadata:{kind:"cuda",cublas:r.cublasInfo,outputIndices:[r.cublasInfo.cIdx]}};let n=new _d(e).generate(r);return{source:n.source,metadata:{kind:"cuda",blockDim:n.blockDim,gridDim:n.gridDim,sharedMemBytes:n.sharedMemBytes,params:n.params,outputIndices:n.outputIndices,scratch:n.scratch}}}})});function Uv(r){let e=[],t=[r.body];for(;t.length>0;){let m=t.pop();if(m){if(m.type==="BlockNode"){e.push(m),t.push(m.body);continue}if(m.body&&t.push(m.body),m.stmts)for(let g of m.stmts)t.push(g);m.thenBody&&t.push(m.thenBody),m.elseBody&&t.push(m.elseBody)}}let n=null;for(let m of e)if(m.name.includes("matmul"))m.reads.length>=2&&m.writes.length>=1&&(n=m);else return null;if(!n)return null;let s=n.reads[0].buffer,o=n.reads[1].buffer,i=n.writes[0].buffer;if(s.dtype!=="f32"||o.dtype!=="f32"||i.dtype!=="f32"||s.shape.length!==2||o.shape.length!==2||i.shape.length!==2)return null;let a=i.shape[0],u=i.shape[1],p=s.shape[1];if(![a,u,p].every(m=>typeof m=="number"))return null;let c=[];for(let[,m]of r.bufferMap)c.push(m.name);let h=c.indexOf(s.name),f=c.indexOf(o.name),d=c.indexOf(i.name);return h<0||f<0||d<0?null:{M:a,N:u,K:p,aIdx:h,bIdx:f,cIdx:d}}var Ic,Hs,Ec=M(()=>{"use strict";qv();l(Uv,"detectPureMatmul");Ic=class{static{l(this,"CompiledKernel")}constructor(e,t,n,s={}){this.name=e,this.source=t,this.target=n,this.metadata=s}snippet(){let e=jv(this.metadata.kind);if(!e)throw new Error(`No snippet for kind: ${this.metadata.kind}`);return e(this)}},Hs=class{static{l(this,"BackendPipeline")}constructor(e,t={}){this.target=e,this.matmulBackend=t.matmulBackend||"native",this.context=t.context||null}compile(e){let t=this.context&&this.context.getCodegenEntry(this.target.kind)||Gv(this.target.kind);if(!t)throw new Error(`Unsupported target kind: ${this.target.kind}`);let{source:n,metadata:s}=t.compile(e,this.target,this);return new Ic(e.name,n,this.target,s)}compileAll(e){return e.map(t=>this.compile(t))}}});function Wv(r,e){Kv.set(r,e)}function Hv(r){return Kv.get(r)||null}var Kv,rw=M(()=>{"use strict";Kv=new Map;l(Wv,"registerMeasurer");l(Hv,"getMeasurer")});var Yv={};nt(Yv,{runWasmParallel:()=>S2});async function S2(r,e,t,n,s){let{exports:o,memory:i,bufferOffsets:a}=r,u=o[e],p=[...a.values()],c=Math.min(p.length,t.length);for(let f=0;f<c;f++){let d=t[f];ArrayBuffer.isView(d)&&new d.constructor(i.buffer,p[f],d.length).set(d)}let h=p.slice(0,c);if(n)for(let f of n)h.push(f);h.push(0,s.extent),u(...h);for(let f=0;f<c;f++){let d=t[f];ArrayBuffer.isView(d)&&d.set(new d.constructor(i.buffer,p[f],d.length))}}var Jv=M(()=>{"use strict";l(S2,"runWasmParallel")});var Nd={};nt(Nd,{deviceClipGradNorm:()=>A2,measureCudaKernel:()=>v2,runCudaKernel:()=>k2,runCudaPlan:()=>N2});function k2(){throw new Error("CUDA runtime is not available in the browser")}function v2(){throw new Error("CUDA runtime is not available in the browser")}function N2(){throw new Error("CUDA runtime is not available in the browser")}function A2(){throw new Error("CUDA runtime is not available in the browser")}var Ad=M(()=>{"use strict";l(k2,"runCudaKernel");l(v2,"measureCudaKernel");l(N2,"runCudaPlan");l(A2,"deviceClipGradNorm")});function ii(){return Zv}function O2(r){Zv=r}var Qi,ks,Od,sw,Ys,Au,Zv,ar=M(()=>{"use strict";Nn();Qi=class{static{l(this,"Device")}type;index;constructor(e,t=0){this.type=e,this.index=t}dispatchKey(){return ja(this.type)}equals(e){return this.type===e.type&&this.index===e.index}hash(){let e=2166136261;for(let t=0;t<this.type.length;t++)e=(e^this.type.charCodeAt(t))*16777619&2147483647;return e=(e^this.index)*16777619&2147483647,e}toString(){return this.index===0?this.type:`${this.type}:${this.index}`}},ks=new Qi("cpu"),Od=new Qi("gpu"),sw=new Qi("wasm"),Ys=new Qi("webgpu"),Au=new Qi("meta"),Zv=ks;l(ii,"getDefaultDevice");l(O2,"setDefaultDevice")});function Xv(r){let e=Qv.get(r)??null;return e||(e=Nt.findOp(r),e&&Qv.set(r,e)),e||null}var Qv,eN=M(()=>{"use strict";$i();Qv=new Map;l(Xv,"getHandle")});function vs(r,e){return r<0?e+r:r}function xn(r){let e=r.length,t=new Array(e),n=1;for(let s=e-1;s>=0;s--)t[s]=n,n*=r[s];return t}function cn(r){let e=1;for(let t=0;t<r.length;t++)e*=r[t];return e}function ow(r,e){let t=r.length;if(t===0)return!0;let n=1;for(let s=t-1;s>=0;s--){let o=r[s];if(o===0)return!0;if(o!==1&&e[s]!==n)return!1;n*=o}return!0}function Ou(r,e){let t=r.length,n=e.length,s=Math.max(t,n),o=new Array(s);for(let i=0;i<s;i++){let a=i<t?r[t-1-i]:1,u=i<n?e[n-1-i]:1;if(a===u)o[s-1-i]=a;else if(a===1)o[s-1-i]=u;else if(u===1)o[s-1-i]=a;else return null}return o}function Bd(r,e){let t=r.length,n=e.length;if(t===1&&n===1)return[];let s=t===1?[1,r[0]]:[...r],o=n===1?[e[0],1]:[...e],i=s.length,a=o.length,u=Ou(s.slice(0,i-2),o.slice(0,a-2));if(u===null)return null;let p=[...u,s[i-2],o[a-1]],c=new Set;return n===1&&c.add(p.length-1),t===1&&c.add(p.length-2),p.filter((h,f)=>!c.has(f))}function tN(r,e,t){let n=cn(r),s=-1,o=1,i=new Array(t.length);for(let a=0;a<t.length;a++){let u=t[a];if(u===-1){if(s!==-1)return null;s=a,i[a]=-1}else i[a]=u,o*=u}if(s!==-1){if(o===0||(i[s]=n/o|0,i[s]*o!==n))return null}else if(cn(i)!==n)return null;return ow(r,e)?{sizes:i,strides:xn(i),needsCopy:!1}:{sizes:i,strides:xn(i),needsCopy:!0}}var jr=M(()=>{"use strict";l(vs,"normalizeAxis");l(xn,"computeStrides");l(cn,"computeNumel");l(ow,"isContiguous");l(Ou,"broadcastShapes");l(Bd,"matmulOutputShape");l(tN,"inferReshape")});function nN(r,e){if(r.length<4)return!1;let t=r.length,n=1,s=t===4?B2:R2;if(!s)return!1;for(let o=t-1;o>=0;o--){let i=s[o];if(i===void 0||r[i]===0||e[i]!==n)return!1;n*=r[i]}return!0}var B2,R2,iw=M(()=>{"use strict";B2=Object.freeze([0,2,3,1]),R2=Object.freeze([0,2,3,4,1]);l(nN,"isChannelsLast")});var Bt,Oo=M(()=>{"use strict";Nn();jr();iw();iw();Bt=class{static{l(this,"TensorImpl")}_storage;_storageOffset;_sizes;_strides;_dtype;_device;_numel;_keySet;_autogradMeta;_version;_contiguousCache;constructor(e,t,n,s,o,i){this._storage=e,this._storageOffset=t,this._sizes=Object.freeze([...n]),this._strides=Object.freeze(s?[...s]:xn(n)),this._dtype=o,this._device=i,this._numel=cn(n),this._keySet=Pr.fromKey(ja(i.type)),this._autogradMeta=null,this._version=0,this._contiguousCache=null}get storage(){return this._storage}get storageOffset(){return this._storageOffset}size(e){let t=e<0?this._sizes.length+e:e;return this._sizes[t]}stride(e){let t=e<0?this._strides.length+e:e;return this._strides[t]}sizes(){return this._sizes}strides(){return this._strides}dim(){return this._sizes.length}numel(){return this._numel}get dtype(){return this._dtype}get device(){return this._device}isContiguous(e){return!e||e==="contiguous"?(this._contiguousCache===null&&(this._contiguousCache=ow(this._sizes,this._strides)),this._contiguousCache):e==="channels_last"?nN(this._sizes,this._strides):!1}setSizesAndStrides(e,t){this._sizes=Object.freeze([...e]),this._strides=Object.freeze(t?[...t]:xn(e)),this._numel=cn(e),this._contiguousCache=null}setStorageOffset(e){this._storageOffset=e}bumpVersion(){this._version++}get version(){return this._version}get autogradMeta(){return this._autogradMeta}setAutogradMeta(e){this._autogradMeta=e,this._updateKeySet()}keySet(){return this._keySet}addKeyToSet(e){this._keySet=this._keySet.add(e)}removeKeyFromSet(e){this._keySet=this._keySet.remove(e)}_updateKeySet(){let e=Pr.fromKey(ja(this._device.type));if(this._autogradMeta&&this._autogradMeta.requiresGrad){let t=ja(this._device.type);e=e.add(RS(t))}this._keySet=e}get isMeta(){return this._storage&&this._storage.isMeta}shallowCopyFrom(e){this._storage=e._storage,this._storageOffset=e._storageOffset,this._sizes=e._sizes,this._strides=e._strides,this._dtype=e._dtype,this._device=e._device,this._numel=e._numel,this._keySet=e._keySet,this._contiguousCache=null}}});var Bu,aw=M(()=>{"use strict";Bu=class{static{l(this,"AutogradMeta")}_grad;_gradFn;_outputNr;_requiresGrad;_retainGrad;_gradAccumulator;_versionAtCreation;constructor(){this._grad=null,this._gradFn=null,this._outputNr=0,this._requiresGrad=!1,this._retainGrad=!1,this._gradAccumulator=null,this._versionAtCreation=0}get grad(){return this._grad}set grad(e){this._grad=e}get gradFn(){return this._gradFn}setGradFn(e,t){this._gradFn=e,this._outputNr=t??0}get outputNr(){return this._outputNr}get requiresGrad(){return this._requiresGrad}set requiresGrad(e){this._requiresGrad=e}get retainGrad(){return this._retainGrad}set retainGrad(e){this._retainGrad=e}get isLeaf(){return this._gradFn===null}get versionAtCreation(){return this._versionAtCreation}set versionAtCreation(e){this._versionAtCreation=e}getGradAccumulator(){if(this._gradAccumulator){let e=this._gradAccumulator instanceof WeakRef?this._gradAccumulator.deref():this._gradAccumulator;if(e)return e}return null}setGradAccumulator(e){this._gradAccumulator=typeof WeakRef<"u"?new WeakRef(e):e}clearGrad(){this._grad=null}clearGradFn(){this._gradFn=null,this._outputNr=0}}});function sN(r,e,t,n,s,o){let i=e[s];if(s===e.length-1){let u=new Array(i);if(o)for(let p=0;p<i;p++)u[p]=md(o,r[n+p*t[s]]);else for(let p=0;p<i;p++)u[p]=r[n+p*t[s]];return u}let a=new Array(i);for(let u=0;u<i;u++)a[u]=sN(r,e,t,n+u*t[s],s+1,o);return a}function M2(){if(!uw)throw new Error("Autograd engine not initialized. Import autograd/engine.js first.");return uw}function oN(r){uw=r}var rN,We,uw,jn=M(()=>{"use strict";Oo();aw();xu();rN=new Set(["f16","bf16","i64"]),We=class r{static{l(this,"Tensor")}_impl;constructor(e){this._impl=e}get impl(){return this._impl}get shape(){return this._impl.sizes()}get strides(){return this._impl.strides()}get dtype(){return this._impl.dtype}get device(){return this._impl.device}get ndim(){return this._impl.dim()}get rank(){return this._impl.dim()}get numel(){return this._impl.numel()}get length(){return this._impl.numel()}get isContiguous(){return this._impl.isContiguous()}get dispatchKeySet(){return this._impl.keySet()}get storage(){return this._impl.storage}get storageOffset(){return this._impl.storageOffset}get data(){let e=this._impl.storage;if(!e||e.isMeta)return null;let t=e.data,n=this._impl.storageOffset;return t&&n===0&&this._impl.isContiguous()&&t.length===this.numel,t}get requiresGrad(){let e=this._impl.autogradMeta;return e?e.requiresGrad:!1}get gradFn(){let e=this._impl.autogradMeta;return e?e.gradFn:null}get grad(){let e=this._impl.autogradMeta;return e?e.grad:null}set grad(e){this._ensureAutogradMeta().grad=e}get isLeaf(){let e=this._impl.autogradMeta;return e?e.isLeaf:!0}get version(){return this._impl.version}requiresGrad_(e=!0){let t=this._ensureAutogradMeta();return t.requiresGrad=e,this._impl._updateKeySet(),this}retainGrad(){return this._ensureAutogradMeta().retainGrad=!0,this}detach(){let e=new Bt(this._impl.storage,this._impl.storageOffset,this._impl.sizes(),this._impl.strides(),this._impl.dtype,this._impl.device);return new r(e)}item(){if(this.numel!==1)throw new Error(`item() requires tensor with exactly 1 element, got ${this.numel}`);let t=this._impl.storage.data[this._impl.storageOffset];return rN.has(this._impl.dtype)?md(this._impl.dtype,t):t}toArray(){let e=this.shape,t=this.strides,n=this._impl.storage.data,s=this._impl.storageOffset,o=rN.has(this._impl.dtype)?this._impl.dtype:null;return e.length===0?o?md(o,n[s]):n[s]:sN(n,e,t,s,0,o)}toString(){return`Tensor(shape=[${this.shape.join(", ")}], dtype=${this.dtype}, device=${this.device})`}*[Symbol.iterator](){let e=this.shape[0];if(e===void 0)throw new Error("Cannot iterate over a 0-d tensor");for(let t=0;t<e;t++)yield this._select(0,t)}_select(e,t){let n=this._impl.sizes(),s=this._impl.strides(),o=[],i=[];for(let p=0;p<n.length;p++)p!==e&&(o.push(n[p]),i.push(s[p]));let a=this._impl.storageOffset+t*s[e],u=new Bt(this._impl.storage,a,o,i,this._impl.dtype,this._impl.device);return new r(u)}_ensureAutogradMeta(){if(!this._impl.autogradMeta){let e=new Bu;e.versionAtCreation=this._impl.version,this._impl.setAutogradMeta(e)}return this._impl.autogradMeta}backward(e){let{backward:t}=M2();t(this,e)}};l(sN,"_toNestedArray");uw=null;l(M2,"require_autograd_engine");l(oN,"setAutogradEngine")});function Dt(r){return E2[r]||Float32Array}function Rd(r,e){if(r===e)return r;let t=Ru.get(r)??0,n=Ru.get(e)??0;return t>=n?r:e}function Xe(r,e){let t=uN.get(r);t||(t=new Set,uN.set(r,t)),t.add(e)}function Xi(r){return I2(r)}var W,I2,E2,iN,aN,Ru,uN,ts=M(()=>{"use strict";Oe();W=zn,I2=Gs,E2=Object.freeze({[W.F16]:Uint16Array,[W.BF16]:Uint16Array,[W.F32]:Float32Array,[W.F64]:Float64Array,[W.I8]:Int8Array,[W.I16]:Int16Array,[W.I32]:Int32Array,[W.I64]:BigInt64Array,[W.UI8]:Uint8Array,[W.BOOL]:Uint8Array,[W.INDEX]:Int32Array});l(Dt,"typedArrayCtor");iN=[W.F16,W.BF16,W.F32,W.F64],aN=[W.UI8,W.I8,W.I16,W.I32,W.I64],Ru=new Map;for(let r=0;r<iN.length;r++)Ru.set(iN[r],100+r);for(let r=0;r<aN.length;r++)Ru.set(aN[r],r);Ru.set(W.BOOL,-1);Ru.set(W.INDEX,50);l(Rd,"resultDtype");uN=new Map;l(Xe,"_addCastPair");Xe(W.BOOL,W.I8);Xe(W.BOOL,W.I16);Xe(W.BOOL,W.I32);Xe(W.BOOL,W.I64);Xe(W.BOOL,W.F16);Xe(W.BOOL,W.F32);Xe(W.BOOL,W.F64);Xe(W.UI8,W.I16);Xe(W.UI8,W.I32);Xe(W.UI8,W.I64);Xe(W.UI8,W.F16);Xe(W.UI8,W.F32);Xe(W.UI8,W.F64);Xe(W.I8,W.I16);Xe(W.I8,W.I32);Xe(W.I8,W.I64);Xe(W.I8,W.F16);Xe(W.I8,W.F32);Xe(W.I8,W.F64);Xe(W.I16,W.I32);Xe(W.I16,W.I64);Xe(W.I16,W.F32);Xe(W.I16,W.F64);Xe(W.I32,W.I64);Xe(W.I32,W.F64);Xe(W.F16,W.F32);Xe(W.F16,W.F64);Xe(W.BF16,W.F32);Xe(W.BF16,W.F64);Xe(W.BOOL,W.BF16);Xe(W.UI8,W.BF16);Xe(W.I8,W.BF16);Xe(W.F32,W.F64);l(Xi,"dtypeSize")});function lw(r){return lN.get(r)||lN.get("cpu")}var Md,Id,lN,Lc,cN=M(()=>{"use strict";ts();ar();Md=class{static{l(this,"CPUAllocator")}allocate(e,t){let n=Dt(t);return new n(e)}free(e){}},Id=class{static{l(this,"MetaAllocator")}allocate(){return null}free(e){}},lN=new Map([["cpu",new Md],["wasm",new Md],["meta",new Id],["lazy",new Id]]);l(lw,"getAllocator");Lc=class r{static{l(this,"StorageImpl")}static#e=null;_data;_nbytes;_device;_allocator;_refCount;static setHostReadHook(e){r.#e=e}constructor(e,t,n,s){this._data=e,this._nbytes=t,this._device=n,this._allocator=s,this._refCount=1}static allocate(e,t,n){let s=lw(n.type),o=Xi(t),i=Math.max(Math.ceil(e/o),1),a=s.allocate(i,t);return new r(a,e,n,s)}static fromData(e,t){let n=e?e.byteLength:0,s=lw(t.type);return new r(e,n,t,s)}retain(){return this._refCount++,this}release(){this._refCount--,this._refCount===0&&(this._allocator&&this._data&&this._allocator.free(this._data),this._data=null)}get refCount(){return this._refCount}get data(){return r.#e&&this._data&&r.#e(this._data),this._data}get rawData(){return this._data}get nbytes(){return this._nbytes}get device(){return this._device}get isValid(){return this._refCount>0&&this._data!==null}get isMeta(){return this._data===null}resize(e,t){if(e<=this._nbytes&&this._data)return;let n=Xi(t),s=Math.max(Math.ceil(e/n),1),o=this._allocator.allocate(s,t);if(this._data&&o){let i=Math.min(this._data.length,o.length);for(let a=0;a<i;a++)o[a]=this._data[a]}this._allocator&&this._data&&this._allocator.free(this._data),this._data=o,this._nbytes=e}clone(){let e=lw(this._device.type),t=null;if(this._data){r.#e&&r.#e(this._data);let n=this._data.constructor;t=new n(this._data.length),t.set(this._data)}return new r(t,this._nbytes,this._device,e)}}});var En,ea=M(()=>{"use strict";cN();En=class r{static{l(this,"Storage")}_impl;constructor(e){this._impl=e}static allocate(e,t,n){return new r(Lc.allocate(e,t,n))}static fromData(e,t){return new r(Lc.fromData(e,t))}get impl(){return this._impl}get data(){return this._impl.data}get rawData(){return this._impl.rawData}get nbytes(){return this._impl.nbytes}get device(){return this._impl.device}get isValid(){return this._impl.isValid}get isMeta(){return this._impl.isMeta}retain(){return this._impl.retain(),this}release(){this._impl.release()}clone(){return new r(this._impl.clone())}resize(e,t){this._impl.resize(e,t)}}});function Pt(r,e){let t=e?.dtype??W.F32,n=e?.device??ii(),s=e?.requiresGrad??!1;if(ArrayBuffer.isView(r)&&"length"in r)return L2(r,e?.shape,t,n,s);if(Array.isArray(r)){let{flat:o,shape:i}=D2(r),a=e?.shape??i;return C2(o,a,t,n,s)}if(typeof r=="number")return pN(r,t,n,s);throw new Error("Unsupported data type for tensor()")}function ta(r,e,t,n){let s=n?.device??ii(),o=n?.requiresGrad??!1,i=xn(e),a=En.fromData(r,s),u=n?.offset??0,p=new Bt(a,u,e,i,t,s),c=new We(p);return o&&c.requiresGrad_(!0),c}function Dc(r,e){let t=e?.dtype??W.F32,n=e?.device??ii();return pN(r,t,n,e?.requiresGrad??!1)}function pN(r,e,t,n){let s=Dt(e),o=new s(1),i=o;i[0]=cw.has(e)?dd(e,r):r;let a=En.fromData(o,t),u=new Bt(a,0,[],[],e,t),p=new We(u);return n&&p.requiresGrad_(!0),p}function L2(r,e,t,n,s){let o=Dt(t),i=new o(r.length),a=i;if(cw.has(t))for(let d=0;d<r.length;d++)a[d]=dd(t,r[d]);else for(let d=0;d<r.length;d++)a[d]=r[d];let u=e??[r.length],p=xn(u),c=En.fromData(i,n),h=new Bt(c,0,u,p,t,n),f=new We(h);return s&&f.requiresGrad_(!0),f}function C2(r,e,t,n,s){let o=Dt(t),i=new o(r.length),a=i;if(cw.has(t))for(let f=0;f<r.length;f++)a[f]=dd(t,r[f]);else for(let f=0;f<r.length;f++)a[f]=r[f];let u=xn(e),p=En.fromData(i,n),c=new Bt(p,0,e,u,t,n),h=new We(c);return s&&h.requiresGrad_(!0),h}function D2(r){let e=[],t=r;for(;Array.isArray(t);)e.push(t.length),t=t[0];let n=[];return fN(r,n,e,0),{flat:n,shape:e}}function fN(r,e,t,n){if(n===t.length-1){for(let s=0;s<r.length;s++)e.push(r[s]);return}for(let s=0;s<r.length;s++)fN(r[s],e,t,n+1)}var cw,qr=M(()=>{"use strict";jn();Oo();ea();ts();ar();jr();xu();l(Pt,"tensor");l(ta,"fromBuffer");l(Dc,"scalar");cw=new Set(["f16","bf16","i64"]);l(pN,"_fromScalar");l(L2,"_fromTypedArray");l(C2,"_fromFlatArray");l(D2,"_flattenNested");l(fN,"_recurFlatten")});var Ft={};nt(Ft,{_dispatch:()=>ot,abs:()=>Pc,add:()=>ae,argmax:()=>Ud,argmin:()=>kN,argsort:()=>LN,batch_norm:()=>fw,broadcast_in_dim:()=>ON,cat:()=>sa,ceil:()=>wN,chunk:()=>BN,clamp:()=>Vd,clone:()=>AN,contiguous:()=>ci,conv2d:()=>hw,cos:()=>mN,cumsum:()=>IN,div:()=>$t,dot:()=>NN,embedding:()=>z2,eq:()=>$c,erf:()=>gN,erfc:()=>yN,exp:()=>Kr,expand:()=>Lu,fill:()=>F2,flip:()=>MN,floor:()=>bN,gamma:()=>Cd,gather:()=>jd,ge:()=>zd,gelu:()=>Dd,gt:()=>Iu,index_select:()=>li,layer_norm:()=>pw,le:()=>Fd,lgamma:()=>_N,log:()=>Zs,log_softmax:()=>Hd,lt:()=>xN,matmul:()=>lt,max:()=>Qs,maximum:()=>ai,mean:()=>lr,min:()=>SN,minimum:()=>Ld,mul:()=>ee,narrow:()=>Un,ne:()=>TN,neg:()=>Ur,one_hot:()=>Gd,pad:()=>na,permute:()=>Eu,pool2d:()=>Yd,pow:()=>Js,prod:()=>vN,relu:()=>Mu,remainder:()=>$2,repeat:()=>Du,reshape:()=>Cn,roll:()=>RN,rsqrt:()=>hN,scatter:()=>qd,scatter_add:()=>ra,select:()=>Ut,sigmoid:()=>ur,sign:()=>$d,silu:()=>Pd,sin:()=>dN,slice:()=>Kd,softmax:()=>Ro,sort:()=>EN,split:()=>Bo,sqrt:()=>ui,squeeze:()=>Cu,stack:()=>Wr,sub:()=>Pe,sum:()=>ht,tanh:()=>Ns,tile:()=>Wd,topk:()=>CN,transpose:()=>gt,unsqueeze:()=>Sr,where:()=>qn});function P2(r){return typeof r=="object"&&r!==null&&"_impl"in r}function Ln(r,e){return P2(r)?r:Dc(r,{dtype:e.dtype,device:e.device})}function ot(r,...e){let t=Xv(r);if(!t)return Nt.callOp(r,...e);let n=pb(e,t.schema);return Nt.dispatch(t,n,...e)}function se(r,...e){return ot(r,...e)}function Ed(r,...e){return ot(r,...e)}function ae(r,e){return se("add",r,Ln(e,r))}function Pe(r,e){return se("sub",r,Ln(e,r))}function ee(r,e){return se("mul",r,Ln(e,r))}function $t(r,e){return se("div",r,Ln(e,r))}function Ur(r){return se("neg",r)}function Js(r,e){return se("pow",r,Ln(e,r))}function $2(r,e){return se("rem",r,Ln(e,r))}function ai(r,e){return se("maximum",r,Ln(e,r))}function Ld(r,e){return se("minimum",r,Ln(e,r))}function Kr(r){return se("exp",r)}function Zs(r){return se("log",r)}function ui(r){return se("sqrt",r)}function hN(r){return se("rsqrt",r)}function Pc(r){return se("abs",r)}function dN(r){return se("sin",r)}function mN(r){return se("cos",r)}function Ns(r){return se("tanh",r)}function gN(r){return se("erf",r)}function yN(r){return se("erfc",r)}function _N(r){return se("lgamma",r)}function Cd(r){return se("gamma",r)}function ur(r){return se("sigmoid",r)}function Mu(r){return se("relu",r)}function Dd(r){return se("gelu",r)}function Pd(r){return se("silu",r)}function $d(r){return se("sign",r)}function bN(r){return se("floor",r)}function wN(r){return se("ceil",r)}function $c(r,e){return se("eq",r,Ln(e,r))}function TN(r,e){return se("ne",r,Ln(e,r))}function xN(r,e){return se("lt",r,Ln(e,r))}function Fd(r,e){return se("le",r,Ln(e,r))}function Iu(r,e){return se("gt",r,Ln(e,r))}function zd(r,e){return se("ge",r,Ln(e,r))}function qn(r,e,t){return se("where",r,e,t)}function Vd(r,e,t){return se("clamp",r,Ln(e,r),Ln(t,r))}function na(r,e,t,n=0){return se("pad",r,Ln(n,r),e,t)}function Gd(r,e){return se("one_hot",r,e)}function li(r,e,t){return se("index_select",r,t,e)}function jd(r,e,t){return se("gather",r,t,e)}function ra(r,e,t,n){return se("scatter_add",r,t,n,e)}function qd(r,e,t,n){return se("scatter",r,e,t,n)}function ht(r,e,t){return se("sum",r,e,t)}function lr(r,e,t){return se("mean",r,e,t)}function Qs(r,e,t){return se("max",r,e,t)}function SN(r,e,t){return se("min",r,e,t)}function Ud(r,e,t){return se("argmax",r,e,t)}function kN(r,e,t){return se("argmin",r,e,t)}function vN(r,e,t){return se("prod",r,e,t)}function lt(r,e){let t=dw();if(t){let n=t(r,e);if(n!==null)return n}return se("matmul",r,e)}function NN(r,e){return se("dot",r,e)}function sa(r,e){return se("cat",r,e)}function Wr(r,e){return se("stack",r,e)}function AN(r){return se("clone",r)}function F2(r,e){return se("fill",r,e)}function Cn(r,e){return se("reshape",r,e)}function gt(r,e,t){return se("transpose",r,e,t)}function Eu(r,e){return se("permute",r,e)}function ON(r,e,t){return se("broadcast_in_dim",r,e,t)}function Lu(r,e){return se("expand",r,e)}function Kd(r,e,t,n=null,s=1){return se("slice",r,e,t,n,s)}function Sr(r,e){return se("unsqueeze",r,e)}function Cu(r,e=null){return se("squeeze",r,e)}function Un(r,e,t,n){return se("narrow",r,e,t,n)}function Ut(r,e,t){return se("select",r,e,t)}function ci(r){return se("contiguous",r)}function Du(r,e){return se("repeat",r,e)}function Wd(r,e){return se("tile",r,e)}function Bo(r,e,t=0){if(typeof e!="number")return Ed("split",r,e,t);let n=r.shape.length,s=t<0?n+t:t,o=r.shape[s],i=[];for(let a=0;a<o;a+=e)i.push(Math.min(e,o-a));return Ed("split",r,i,t)}function BN(r,e,t=0){return Ed("chunk",r,e,t)}function RN(r,e,t=0){return se("roll",r,e,t)}function MN(r,e){return se("flip",r,Array.isArray(e)?e:[e])}function IN(r,e=0){return se("cumsum",r,e)}function EN(r,e=-1,t=!1){return se("sort",r,e,t)}function LN(r,e=-1,t=!1){return se("argsort",r,e,t)}function CN(r,e,t=-1,n=!0){return Ed("topk",r,e,t,n)}function Ro(r,e){return se("softmax",r,e)}function Hd(r,e){return se("log_softmax",r,e)}function pw(r,e,t,n,s){return se("layer_norm",r,e,t,n,s)}function fw(r,e,t,n,s,o,i){return se("batch_norm",r,e,t,n,s,o,i)}function hw(r,e,t,n,s,o){return se("conv2d",r,e,t,n,s,o)}function Yd(r,e,t,n,s){return se("pool2d",r,e,t,n,s)}function z2(r,e){return se("embedding",r,e)}var be=M(()=>{"use strict";$i();eN();qr();Kn();l(P2,"hasTensorImpl");l(Ln,"_asTensor");l(ot,"_dispatch");l(se,"_dispatchTensor");l(Ed,"_dispatchTensorArray");l(ae,"add");l(Pe,"sub");l(ee,"mul");l($t,"div");l(Ur,"neg");l(Js,"pow");l($2,"remainder");l(ai,"maximum");l(Ld,"minimum");l(Kr,"exp");l(Zs,"log");l(ui,"sqrt");l(hN,"rsqrt");l(Pc,"abs");l(dN,"sin");l(mN,"cos");l(Ns,"tanh");l(gN,"erf");l(yN,"erfc");l(_N,"lgamma");l(Cd,"gamma");l(ur,"sigmoid");l(Mu,"relu");l(Dd,"gelu");l(Pd,"silu");l($d,"sign");l(bN,"floor");l(wN,"ceil");l($c,"eq");l(TN,"ne");l(xN,"lt");l(Fd,"le");l(Iu,"gt");l(zd,"ge");l(qn,"where");l(Vd,"clamp");l(na,"pad");l(Gd,"one_hot");l(li,"index_select");l(jd,"gather");l(ra,"scatter_add");l(qd,"scatter");l(ht,"sum");l(lr,"mean");l(Qs,"max");l(SN,"min");l(Ud,"argmax");l(kN,"argmin");l(vN,"prod");l(lt,"matmul");l(NN,"dot");l(sa,"cat");l(Wr,"stack");l(AN,"clone");l(F2,"fill");l(Cn,"reshape");l(gt,"transpose");l(Eu,"permute");l(ON,"broadcast_in_dim");l(Lu,"expand");l(Kd,"slice");l(Sr,"unsqueeze");l(Cu,"squeeze");l(Un,"narrow");l(Ut,"select");l(ci,"contiguous");l(Du,"repeat");l(Wd,"tile");l(Bo,"split");l(BN,"chunk");l(RN,"roll");l(MN,"flip");l(IN,"cumsum");l(EN,"sort");l(LN,"argsort");l(CN,"topk");l(Ro,"softmax");l(Hd,"log_softmax");l(pw,"layer_norm");l(fw,"batch_norm");l(hw,"conv2d");l(Yd,"pool2d");l(z2,"embedding")});var $N={};nt($N,{create:()=>DN,default:()=>V2,globals:()=>PN});var DN,PN,V2,FN=M(()=>{DN=l(()=>{throw new Error('mlfw: the "webgpu" npm package is not available in the browser; use navigator.gpu instead')},"create"),PN=void 0,V2={create:DN,globals:PN}});var XN={};nt(XN,{ensureWebGPUEager:()=>H2,flushWebGPUEager:()=>ZN,instantiateWebGPU:()=>q2,prewarmPipelines:()=>YN,recordWebGPUEager:()=>Gc,resetDevice:()=>G2,runWebGPUKernel:()=>U2,runWebGPUPlan:()=>K2,webgpuEagerOp:()=>Z2,webgpuEagerReady:()=>Y2,webgpuRNN:()=>tC});function $u(r){switch(Mn(r)){case"i32":return Int32Array;case"u32":return Uint32Array;case"f16":return Uint16Array;default:return Float32Array}}function Qd(r,e,t,n){if(t==="bf16")for(let s=0;s<e.length;s++)r[n+s]=fd(e[s]);else if(t==="i64")for(let s=0;s<e.length;s++)r[n+s]=Number(BigInt.asIntN(32,e[s]));else r.set(e,n)}function bw(r,e,t,n,s){if(t==="bf16")for(let o=0;o<s;o++)r[o]=hd(e[n+o]);else if(t==="i64")for(let o=0;o<s;o++)r[o]=BigInt(e[n+o]);else r.set(e.subarray(n,n+s))}function eo(r){return Math.ceil(r/4)*4}async function ww(){return kt||Fc||(Fc=(async()=>{let r=typeof navigator<"u"&&navigator.gpu;if(!r)try{let i=await Promise.resolve().then(()=>(FN(),$N));qN=i,r=i.create([]),i.globals&&(zc=i.globals.GPUBufferUsage,Jd=i.globals.GPUMapMode,Zd=i.globals.GPUShaderStage)}catch{throw new Error('WebGPU not available: install the "webgpu" npm package or run in a browser with WebGPU support')}!zc&&typeof GPUBufferUsage<"u"&&(zc=GPUBufferUsage,Jd=GPUMapMode,Zd=GPUShaderStage);let e=await r.requestAdapter();if(!e)throw new Error("WebGPU: no adapter found");let t=e.limits||{},n={},s=["maxStorageBuffersPerShaderStage","maxStorageBufferBindingSize","maxBufferSize","maxBindingsPerBindGroup"];for(let i of s)t[i]!==void 0&&(n[i]=t[i]);let o=[];return e.features&&e.features.has("shader-f16")&&o.push("shader-f16"),kt=await e.requestDevice({requiredLimits:n,requiredFeatures:o}),!zN&&typeof process<"u"&&process.on&&(zN=!0,process.on("exit",()=>{kt&&(kt.destroy(),kt=null)})),kt})(),Fc)}function Fu(){return zc}function Tw(){return Jd.READ}function G2(){kt&&(kt.destroy(),kt=null),Fc=null,zc=null,Jd=null,Zd=null,qN=null}function j2(r){return r.name==="_shapes"?"uniform":r.mode==="read_write"?"storage":"read-only-storage"}function UN(r,e){let t=r.createShaderModule({code:e.source}),n=[];for(let i of e.metadata.bindings)n.push({binding:i.index,visibility:Zd.COMPUTE,buffer:{type:j2(i)}});let s=r.createBindGroupLayout({entries:n}),o=r.createPipelineLayout({bindGroupLayouts:[s]});return{shaderModule:t,bindGroupLayout:s,pipelineLayout:o}}function KN(r,e){let{shaderModule:t,bindGroupLayout:n,pipelineLayout:s}=UN(r,e);return{pipeline:r.createComputePipeline({layout:s,compute:{module:t,entryPoint:e.name}}),bindGroupLayout:n}}function WN(r,e){let t=Xd.get(e);return t||(t=KN(r,e),Xd.set(e,t)),t}async function q2(r){let e=await ww(),{pipeline:t,bindGroupLayout:n}=KN(e,r);return{device:e,pipeline:t,bindGroupLayout:n,kernel:r,workgroupSize:r.metadata.workgroupSize,dispatchSize:r.metadata.dispatchSize,bindings:r.metadata.bindings}}function HN(r){let e=new Map,t=0;for(let n of r)if(n.name!=="_shapes")if(n.packed)for(let s of n.packed)e.set(s.name,s.argIndex!==void 0?s.argIndex:t++);else e.set(n.name,n.argIndex!==void 0?n.argIndex:t++);return e}async function U2(r,e,t){let{device:n,pipeline:s,bindGroupLayout:o,bindings:i,dispatchSize:a}=r,u=Fu(),p=[],c=[],h=HN(i);for(let y=0;y<i.length;y++){let _=i[y];if(_.name==="_shapes"){let v=new Uint32Array(t||[]),O=Math.max(Math.ceil(v.byteLength/16)*16,16),R=n.createBuffer({size:O,usage:u.UNIFORM|u.COPY_DST});n.queue.writeBuffer(R,0,v),p.push(R),c.push({binding:_.index,resource:{buffer:R}});continue}let b=bs(_.dtype),w=$u(_.dtype);if(_.packed){let v=eo(_.packedSize*b),R=_.mode==="read_write"?u.STORAGE|u.COPY_SRC|u.COPY_DST:u.STORAGE|u.COPY_DST,B=n.createBuffer({size:Math.max(v,4),usage:R,mappedAtCreation:!0}),E=new w(B.getMappedRange());for(let z of _.packed){let D=h.get(z.name),J=e[D];J&&Qd(E,J,z.dtype,z.offset)}B.unmap(),p.push(B),c.push({binding:_.index,resource:{buffer:B}});continue}let T=h.get(_.name),S=e[T],x=eo(S.length*b),A=_.mode==="read_write"?u.STORAGE|u.COPY_SRC|u.COPY_DST:u.STORAGE|u.COPY_DST,N=n.createBuffer({size:Math.max(x,4),usage:A,mappedAtCreation:!0});Qd(new w(N.getMappedRange()),S,_.dtype,0),N.unmap(),p.push(N),c.push({binding:_.index,resource:{buffer:N}})}let f=n.createBindGroup({layout:o,entries:c}),d=n.createCommandEncoder(),m=d.beginComputePass();m.setPipeline(s),m.setBindGroup(0,f),m.dispatchWorkgroups(a[0],a[1],a[2]),m.end();let g=[];for(let y=0;y<i.length;y++){let _=i[y];if(_.name==="_shapes"||_.mode!=="read_write")continue;let b=p[y],w=bs(_.dtype),T=$u(_.dtype);if(_.packed)for(let S of _.packed){let x=S.offset*w,k=eo(S.size*w),A=n.createBuffer({size:k,usage:u.MAP_READ|u.COPY_DST});d.copyBufferToBuffer(b,x,A,0,k),g.push({readBuf:A,tensorIdx:h.get(S.name),size:S.size,dtype:S.dtype,ViewCtor:T})}else{let S=b.size,x=n.createBuffer({size:S,usage:u.MAP_READ|u.COPY_DST});d.copyBufferToBuffer(b,0,x,0,S),g.push({readBuf:x,tensorIdx:h.get(_.name),size:e[h.get(_.name)].length,dtype:_.dtype,ViewCtor:T})}}n.queue.submit([d.finish()]);for(let y of g){await y.readBuf.mapAsync(Tw());let _=new y.ViewCtor(y.readBuf.getMappedRange());bw(e[y.tensorIdx],_,y.dtype,0,y.size),y.readBuf.unmap(),y.readBuf.destroy()}for(let y of p)y.destroy()}async function YN(r,e){if(typeof r.createComputePipelineAsync!="function")return;let t=[],n=new Set;for(let s of e){if(!s||n.has(s)||Xd.has(s))continue;n.add(s);let{shaderModule:o,bindGroupLayout:i,pipelineLayout:a}=UN(r,s);t.push(r.createComputePipelineAsync({layout:a,compute:{module:o,entryPoint:s.name}}).then(u=>Xd.set(s,{pipeline:u,bindGroupLayout:i}),()=>{}))}t.length>0&&await Promise.all(t)}async function K2(r,e,t){let n=await ww(),s=Fu();await YN(n,t.map(b=>b.kernel));let o=new Set;for(let b of t)for(let w of b.outputSlots)o.add(w);let i=new Array(r.numSlots).fill(null),a=new Array(r.numSlots).fill("f32");for(let b=0;b<r.numSlots;b++){let w=e[b];if(!w)continue;let T=w.dtype||"f32";a[b]=T;let S=Math.max(eo(w.data.length*bs(T)),4),x=!o.has(b),k=n.createBuffer({size:S,usage:s.STORAGE|s.COPY_DST|s.COPY_SRC,mappedAtCreation:x});x&&(Qd(new($u(T))(k.getMappedRange()),w.data,T,0),k.unmap()),i[b]=k}let u=32,p=[],c=[],h={encoder:n.createCommandEncoder(),pending:0},f=l(()=>{++h.pending>=u&&(n.queue.submit([h.encoder.finish()]),h.encoder=n.createCommandEncoder(),h.pending=0)},"maybeFlush"),d=l(b=>{let w=h.encoder,{pipeline:T,bindGroupLayout:S}=WN(n,b.kernel),x=b.inputSlots.concat(b.outputSlots),k=[],A=[],N=0;for(let B of b.kernel.metadata.bindings)if(B.name==="_shapes"){let E=new Uint32Array(b.shapeValues||[]),z=Math.max(Math.ceil(E.byteLength/16)*16,16),D=n.createBuffer({size:z,usage:s.UNIFORM|s.COPY_DST});n.queue.writeBuffer(D,0,E),p.push(D),k.push({binding:B.index,resource:{buffer:D}})}else if(B.packed){let E=bs(B.dtype),z=n.createBuffer({size:Math.max(eo(B.packedSize*E),4),usage:s.STORAGE|s.COPY_DST|s.COPY_SRC});c.push(z);let D=B.mode==="read_write";for(let J of B.packed){let j=x[J.argIndex],U=eo(J.size*E);D?A.push({slot:j,src:z,srcOff:J.offset*E,bytes:U}):w.copyBufferToBuffer(i[j],0,z,J.offset*E,U)}k.push({binding:B.index,resource:{buffer:z}})}else k.push({binding:B.index,resource:{buffer:i[x[N++]]}});let v=n.createBindGroup({layout:S,entries:k}),O=w.beginComputePass();O.setPipeline(T),O.setBindGroup(0,v);let R=b.kernel.metadata.dispatchSize;O.dispatchWorkgroups(R[0],R[1],R[2]),O.end();for(let B of A)w.copyBufferToBuffer(B.src,B.srcOff,i[B.slot],0,B.bytes);f()},"encodeStep"),m=r.scanLoops?[...r.scanLoops].sort((b,w)=>b.loopStart-w.loopStart):r.scanLoop?[r.scanLoop]:null;if(m&&m.length){let b=0;for(let w of m){for(;b<w.loopStart;b++)d(t[b]);for(let T of w.carry)h.encoder.copyBufferToBuffer(i[T.initSlot],0,i[T.a],0,T.bytes);for(let T=0;T<w.T;T++){for(let S of w.xs)h.encoder.copyBufferToBuffer(i[S.xsSlot],T*S.stepBytes,i[S.xtSlot],0,S.stepBytes);for(let S=w.loopStart;S<w.loopEnd;S++)d(t[S]);for(let S of w.ys)h.encoder.copyBufferToBuffer(i[S.ytSlot],0,i[S.ysSlot],T*S.stepBytes,S.stepBytes);for(let S of w.carry){let x=i[S.a];i[S.a]=i[S.b],i[S.b]=x}}for(let T of w.carry)h.encoder.copyBufferToBuffer(i[T.a],0,i[T.finalSlot],0,T.bytes);b=w.loopEnd}for(;b<t.length;b++)d(t[b])}else for(let b of t)d(b);let g=h.encoder,y=new Set(r.argSlots),_=[];for(let b=0;b<r.numSlots;b++){if(!i[b]||!o.has(b)||!y.has(b))continue;let w=e[b],T=Math.max(eo(w.data.length*bs(a[b])),4),S=n.createBuffer({size:T,usage:s.MAP_READ|s.COPY_DST});g.copyBufferToBuffer(i[b],0,S,0,T),_.push({rb:S,dtype:a[b],size:w.data.length,dst:w.data})}n.queue.submit([g.finish()]);for(let b of _)await b.rb.mapAsync(Tw()),bw(b.dst,new($u(b.dtype))(b.rb.getMappedRange()),b.dtype,0,b.size),b.rb.unmap(),b.rb.destroy();for(let b of i)b&&b.destroy();for(let b of p)b.destroy();for(let b of c)b.destroy()}function JN(r){let e=_w.get(r);if(e&&e.length)return e.pop();let t=Fu();return kt.createBuffer({size:r,usage:t.STORAGE|t.COPY_SRC|t.COPY_DST})}function VN(r,e){let t=_w.get(e);t||(t=[],_w.set(e,t)),t.push(r)}async function H2(){return await ww(),As||(As=kt.createCommandEncoder()),kt}function Y2(){return!!kt&&!!As}function GN(r,e,t){let n=Vc.get(r);if(n)return n.buf;let s=Fu(),o=Math.max(eo(r.length*bs(e)),4);if(t){let a=kt.createBuffer({size:o,usage:s.STORAGE|s.COPY_SRC|s.COPY_DST,mappedAtCreation:!0});return Qd(new($u(e))(a.getMappedRange()),r,e,0),a.unmap(),Vc.set(r,{buf:a,bytes:o,dtype:e,persistent:t}),a}let i=JN(o);return Vc.set(r,{buf:i,bytes:o,dtype:e,persistent:!1}),i}function Gc(r,e,t){let{pipeline:n,bindGroupLayout:s}=WN(kt,r),{bindings:o,dispatchSize:i}=r.metadata,a=HN(o),u=Fu(),p=[],c=[];for(let d of o){if(d.name==="_shapes"){let y=new Uint32Array(t||[]),_=Math.max(Math.ceil(y.byteLength/16)*16,16),b=kt.createBuffer({size:_,usage:u.UNIFORM|u.COPY_DST});kt.queue.writeBuffer(b,0,y),gw.push(b),p.push({binding:d.index,resource:{buffer:b}});continue}if(d.packed){let y=bs(d.dtype),_=Math.max(eo(d.packedSize*y),4),b=JN(_);yw.push({buf:b,bytes:_});let w=d.mode==="read_write";for(let T of d.packed){let S=GN(e[a.get(T.name)],T.dtype,!w),x=eo(T.size*y);w?c.push({pbuf:b,off:T.offset*y,sub:S,bytes:x}):As.copyBufferToBuffer(S,0,b,T.offset*y,x)}p.push({binding:d.index,resource:{buffer:b}});continue}let m=e[a.get(d.name)],g=GN(m,d.dtype,d.mode!=="read_write");p.push({binding:d.index,resource:{buffer:g}})}let h=kt.createBindGroup({layout:s,entries:p}),f=As.beginComputePass();f.setPipeline(n),f.setBindGroup(0,h),f.dispatchWorkgroups(i[0],i[1],i[2]),f.end();for(let d of c)As.copyBufferToBuffer(d.pbuf,d.off,d.sub,0,d.bytes);++mw>=W2&&(kt.queue.submit([As.finish()]),As=kt.createCommandEncoder(),mw=0)}async function ZN(){if(!kt)return;let r=Fu(),e=[];for(let[t,n]of Vc){if(n.persistent)continue;let s=kt.createBuffer({size:n.bytes,usage:r.MAP_READ|r.COPY_DST});As.copyBufferToBuffer(n.buf,0,s,0,n.bytes),e.push({rb:s,ha:t,buf:n.buf,bytes:n.bytes,dtype:n.dtype})}kt.queue.submit([As.finish()]),As=kt.createCommandEncoder(),mw=0;for(let t of gw)t.destroy();gw.length=0,await Promise.all(e.map(t=>t.rb.mapAsync(Tw())));for(let t of e)bw(t.ha,new($u(t.dtype))(t.rb.getMappedRange()),t.dtype,0,t.ha.length),t.rb.unmap(),t.rb.destroy();for(let t of yw)VN(t.buf,t.bytes);yw.length=0;for(let t of e)VN(t.buf,t.bytes),Vc.delete(t.ha)}function J2(r,e,t,n,s){let o=`${r.join(",")}|${e.join(",")}|${t}|${n}`,i=jN.get(o);if(i)return i;let a=Mn(n),u="";for(let c=r.length-1;c>=0;c--)u+=` let idx${c} = rem % ${r[c]}u; rem = rem / ${r[c]}u; src = src + idx${c} * ${e[c]}u;
12
+ `)}var Fv=M(()=>{"use strict";l($v,"buildSnippet")});function vd(r,e){zv.set(r,e),e.runtimeKind&&e.snippet&&Vv.set(e.runtimeKind,e.snippet)}function Gv(r){return zv.get(r)||null}function jv(r){return Vv.get(r)||null}var zv,Vv,qv=M(()=>{"use strict";Ks();Tv();Av();Ov();Mv();Ev();Cv();Pv();Fv();zv=new Map,Vv=new Map;l(vd,"registerCodegen");l(Gv,"getCodegenEntry");l(jv,"getSnippetBuilder");vd(Ot.CPU,{runtimeKind:"js",snippet:Iv,compile(r,e){return{source:new yd(e).generate(r),metadata:{kind:"js",paramCount:r.params.length}}}});vd(Ot.WASM,{runtimeKind:"wasm",snippet:Lv,compile(r,e){let t=new bd(e).generate(r),n={kind:"wasm",memoryPages:t.memoryPages,bufferOffsets:t.bufferOffsets,imports:t.imports,params:t.params,bufferMap:r.bufferMap};return t.parallel&&(n.parallel=t.parallel),{source:t.wat,metadata:n}}});vd(Ot.WEBGPU,{runtimeKind:"webgpu",snippet:Dv,compile(r,e){let t=new xd(e).generate(r);return{source:t.source,metadata:{kind:"webgpu",workgroupSize:t.workgroupSize,dispatchSize:t.dispatchSize,sharedMemBytes:t.sharedMemBytes,params:t.params,bindings:t.bindings}}}});vd(Ot.CUDA,{runtimeKind:"cuda",snippet:$v,compile(r,e,t){if(t&&t.matmulBackend==="cublas"&&r.cublasInfo)return{source:"",metadata:{kind:"cuda",cublas:r.cublasInfo,outputIndices:[r.cublasInfo.cIdx]}};let n=new _d(e).generate(r);return{source:n.source,metadata:{kind:"cuda",blockDim:n.blockDim,gridDim:n.gridDim,sharedMemBytes:n.sharedMemBytes,params:n.params,outputIndices:n.outputIndices,scratch:n.scratch}}}})});function Uv(r){let e=[],t=[r.body];for(;t.length>0;){let m=t.pop();if(m){if(m.type==="BlockNode"){e.push(m),t.push(m.body);continue}if(m.body&&t.push(m.body),m.stmts)for(let g of m.stmts)t.push(g);m.thenBody&&t.push(m.thenBody),m.elseBody&&t.push(m.elseBody)}}let n=null;for(let m of e)if(m.name.includes("matmul"))m.reads.length>=2&&m.writes.length>=1&&(n=m);else return null;if(!n)return null;let s=n.reads[0].buffer,o=n.reads[1].buffer,i=n.writes[0].buffer;if(s.dtype!=="f32"||o.dtype!=="f32"||i.dtype!=="f32"||s.shape.length!==2||o.shape.length!==2||i.shape.length!==2)return null;let a=i.shape[0],u=i.shape[1],p=s.shape[1];if(![a,u,p].every(m=>typeof m=="number"))return null;let c=[];for(let[,m]of r.bufferMap)c.push(m.name);let h=c.indexOf(s.name),f=c.indexOf(o.name),d=c.indexOf(i.name);return h<0||f<0||d<0?null:{M:a,N:u,K:p,aIdx:h,bIdx:f,cIdx:d}}var Ic,Hs,Ec=M(()=>{"use strict";qv();l(Uv,"detectPureMatmul");Ic=class{static{l(this,"CompiledKernel")}constructor(e,t,n,s={}){this.name=e,this.source=t,this.target=n,this.metadata=s}snippet(){let e=jv(this.metadata.kind);if(!e)throw new Error(`No snippet for kind: ${this.metadata.kind}`);return e(this)}},Hs=class{static{l(this,"BackendPipeline")}constructor(e,t={}){this.target=e,this.matmulBackend=t.matmulBackend||"native",this.context=t.context||null}compile(e){let t=this.context&&this.context.getCodegenEntry(this.target.kind)||Gv(this.target.kind);if(!t)throw new Error(`Unsupported target kind: ${this.target.kind}`);let{source:n,metadata:s}=t.compile(e,this.target,this);return new Ic(e.name,n,this.target,s)}compileAll(e){return e.map(t=>this.compile(t))}}});function Wv(r,e){Kv.set(r,e)}function Hv(r){return Kv.get(r)||null}var Kv,rw=M(()=>{"use strict";Kv=new Map;l(Wv,"registerMeasurer");l(Hv,"getMeasurer")});var Yv={};nt(Yv,{runWasmParallel:()=>S2});async function S2(r,e,t,n,s){let{exports:o,memory:i,bufferOffsets:a}=r,u=o[e],p=[...a.values()],c=Math.min(p.length,t.length);for(let f=0;f<c;f++){let d=t[f];ArrayBuffer.isView(d)&&new d.constructor(i.buffer,p[f],d.length).set(d)}let h=p.slice(0,c);if(n)for(let f of n)h.push(f);h.push(0,s.extent),u(...h);for(let f=0;f<c;f++){let d=t[f];ArrayBuffer.isView(d)&&d.set(new d.constructor(i.buffer,p[f],d.length))}}var Jv=M(()=>{"use strict";l(S2,"runWasmParallel")});var Nd={};nt(Nd,{deviceClipGradNorm:()=>A2,measureCudaKernel:()=>v2,runCudaKernel:()=>k2,runCudaPlan:()=>N2});function k2(){throw new Error("CUDA runtime is not available in the browser")}function v2(){throw new Error("CUDA runtime is not available in the browser")}function N2(){throw new Error("CUDA runtime is not available in the browser")}function A2(){throw new Error("CUDA runtime is not available in the browser")}var Ad=M(()=>{"use strict";l(k2,"runCudaKernel");l(v2,"measureCudaKernel");l(N2,"runCudaPlan");l(A2,"deviceClipGradNorm")});function ii(){return Zv}function O2(r){Zv=r}var Qi,ks,Od,sw,Ys,Au,Zv,ar=M(()=>{"use strict";Nn();Qi=class{static{l(this,"Device")}type;index;constructor(e,t=0){this.type=e,this.index=t}dispatchKey(){return ja(this.type)}equals(e){return this.type===e.type&&this.index===e.index}hash(){let e=2166136261;for(let t=0;t<this.type.length;t++)e=(e^this.type.charCodeAt(t))*16777619&2147483647;return e=(e^this.index)*16777619&2147483647,e}toString(){return this.index===0?this.type:`${this.type}:${this.index}`}},ks=new Qi("cpu"),Od=new Qi("gpu"),sw=new Qi("wasm"),Ys=new Qi("webgpu"),Au=new Qi("meta"),Zv=ks;l(ii,"getDefaultDevice");l(O2,"setDefaultDevice")});function Xv(r){let e=Qv.get(r)??null;return e||(e=Nt.findOp(r),e&&Qv.set(r,e)),e||null}var Qv,eN=M(()=>{"use strict";$i();Qv=new Map;l(Xv,"getHandle")});function vs(r,e){return r<0?e+r:r}function xn(r){let e=r.length,t=new Array(e),n=1;for(let s=e-1;s>=0;s--)t[s]=n,n*=r[s];return t}function cn(r){let e=1;for(let t=0;t<r.length;t++)e*=r[t];return e}function ow(r,e){let t=r.length;if(t===0)return!0;let n=1;for(let s=t-1;s>=0;s--){let o=r[s];if(o===0)return!0;if(o!==1&&e[s]!==n)return!1;n*=o}return!0}function Ou(r,e){let t=r.length,n=e.length,s=Math.max(t,n),o=new Array(s);for(let i=0;i<s;i++){let a=i<t?r[t-1-i]:1,u=i<n?e[n-1-i]:1;if(a===u)o[s-1-i]=a;else if(a===1)o[s-1-i]=u;else if(u===1)o[s-1-i]=a;else return null}return o}function Bd(r,e){let t=r.length,n=e.length;if(t===1&&n===1)return[];let s=t===1?[1,r[0]]:[...r],o=n===1?[e[0],1]:[...e],i=s.length,a=o.length,u=Ou(s.slice(0,i-2),o.slice(0,a-2));if(u===null)return null;let p=[...u,s[i-2],o[a-1]],c=new Set;return n===1&&c.add(p.length-1),t===1&&c.add(p.length-2),p.filter((h,f)=>!c.has(f))}function tN(r,e,t){let n=cn(r),s=-1,o=1,i=new Array(t.length);for(let a=0;a<t.length;a++){let u=t[a];if(u===-1){if(s!==-1)return null;s=a,i[a]=-1}else i[a]=u,o*=u}if(s!==-1){if(o===0||(i[s]=n/o|0,i[s]*o!==n))return null}else if(cn(i)!==n)return null;return ow(r,e)?{sizes:i,strides:xn(i),needsCopy:!1}:{sizes:i,strides:xn(i),needsCopy:!0}}var jr=M(()=>{"use strict";l(vs,"normalizeAxis");l(xn,"computeStrides");l(cn,"computeNumel");l(ow,"isContiguous");l(Ou,"broadcastShapes");l(Bd,"matmulOutputShape");l(tN,"inferReshape")});function nN(r,e){if(r.length<4)return!1;let t=r.length,n=1,s=t===4?B2:R2;if(!s)return!1;for(let o=t-1;o>=0;o--){let i=s[o];if(i===void 0||r[i]===0||e[i]!==n)return!1;n*=r[i]}return!0}var B2,R2,iw=M(()=>{"use strict";B2=Object.freeze([0,2,3,1]),R2=Object.freeze([0,2,3,4,1]);l(nN,"isChannelsLast")});var Bt,Oo=M(()=>{"use strict";Nn();jr();iw();iw();Bt=class{static{l(this,"TensorImpl")}_storage;_storageOffset;_sizes;_strides;_dtype;_device;_numel;_keySet;_autogradMeta;_version;_contiguousCache;constructor(e,t,n,s,o,i){this._storage=e,this._storageOffset=t,this._sizes=Object.freeze([...n]),this._strides=Object.freeze(s?[...s]:xn(n)),this._dtype=o,this._device=i,this._numel=cn(n),this._keySet=Pr.fromKey(ja(i.type)),this._autogradMeta=null,this._version=0,this._contiguousCache=null}get storage(){return this._storage}get storageOffset(){return this._storageOffset}size(e){let t=e<0?this._sizes.length+e:e;return this._sizes[t]}stride(e){let t=e<0?this._strides.length+e:e;return this._strides[t]}sizes(){return this._sizes}strides(){return this._strides}dim(){return this._sizes.length}numel(){return this._numel}get dtype(){return this._dtype}get device(){return this._device}isContiguous(e){return!e||e==="contiguous"?(this._contiguousCache===null&&(this._contiguousCache=ow(this._sizes,this._strides)),this._contiguousCache):e==="channels_last"?nN(this._sizes,this._strides):!1}setSizesAndStrides(e,t){this._sizes=Object.freeze([...e]),this._strides=Object.freeze(t?[...t]:xn(e)),this._numel=cn(e),this._contiguousCache=null}setStorageOffset(e){this._storageOffset=e}bumpVersion(){this._version++}get version(){return this._version}get autogradMeta(){return this._autogradMeta}setAutogradMeta(e){this._autogradMeta=e,this._updateKeySet()}keySet(){return this._keySet}addKeyToSet(e){this._keySet=this._keySet.add(e)}removeKeyFromSet(e){this._keySet=this._keySet.remove(e)}_updateKeySet(){let e=Pr.fromKey(ja(this._device.type));if(this._autogradMeta&&this._autogradMeta.requiresGrad){let t=ja(this._device.type);e=e.add(RS(t))}this._keySet=e}get isMeta(){return this._storage&&this._storage.isMeta}shallowCopyFrom(e){this._storage=e._storage,this._storageOffset=e._storageOffset,this._sizes=e._sizes,this._strides=e._strides,this._dtype=e._dtype,this._device=e._device,this._numel=e._numel,this._keySet=e._keySet,this._contiguousCache=null}}});var Bu,aw=M(()=>{"use strict";Bu=class{static{l(this,"AutogradMeta")}_grad;_gradFn;_outputNr;_requiresGrad;_retainGrad;_gradAccumulator;_versionAtCreation;constructor(){this._grad=null,this._gradFn=null,this._outputNr=0,this._requiresGrad=!1,this._retainGrad=!1,this._gradAccumulator=null,this._versionAtCreation=0}get grad(){return this._grad}set grad(e){this._grad=e}get gradFn(){return this._gradFn}setGradFn(e,t){this._gradFn=e,this._outputNr=t??0}get outputNr(){return this._outputNr}get requiresGrad(){return this._requiresGrad}set requiresGrad(e){this._requiresGrad=e}get retainGrad(){return this._retainGrad}set retainGrad(e){this._retainGrad=e}get isLeaf(){return this._gradFn===null}get versionAtCreation(){return this._versionAtCreation}set versionAtCreation(e){this._versionAtCreation=e}getGradAccumulator(){if(this._gradAccumulator){let e=this._gradAccumulator instanceof WeakRef?this._gradAccumulator.deref():this._gradAccumulator;if(e)return e}return null}setGradAccumulator(e){this._gradAccumulator=typeof WeakRef<"u"?new WeakRef(e):e}clearGrad(){this._grad=null}clearGradFn(){this._gradFn=null,this._outputNr=0}}});function sN(r,e,t,n,s,o){let i=e[s];if(s===e.length-1){let u=new Array(i);if(o)for(let p=0;p<i;p++)u[p]=md(o,r[n+p*t[s]]);else for(let p=0;p<i;p++)u[p]=r[n+p*t[s]];return u}let a=new Array(i);for(let u=0;u<i;u++)a[u]=sN(r,e,t,n+u*t[s],s+1,o);return a}function M2(){if(!uw)throw new Error("Autograd engine not initialized. Import autograd/engine.js first.");return uw}function oN(r){uw=r}var rN,We,uw,jn=M(()=>{"use strict";Oo();aw();xu();rN=new Set(["f16","bf16","i64"]),We=class r{static{l(this,"Tensor")}_impl;constructor(e){this._impl=e}get impl(){return this._impl}get shape(){return this._impl.sizes()}get strides(){return this._impl.strides()}get dtype(){return this._impl.dtype}get device(){return this._impl.device}get ndim(){return this._impl.dim()}get rank(){return this._impl.dim()}get numel(){return this._impl.numel()}get length(){return this._impl.numel()}get isContiguous(){return this._impl.isContiguous()}get dispatchKeySet(){return this._impl.keySet()}get storage(){return this._impl.storage}get storageOffset(){return this._impl.storageOffset}get data(){let e=this._impl.storage;if(!e||e.isMeta)return null;let t=e.data,n=this._impl.storageOffset;return t&&n===0&&this._impl.isContiguous()&&t.length===this.numel,t}get requiresGrad(){let e=this._impl.autogradMeta;return e?e.requiresGrad:!1}get gradFn(){let e=this._impl.autogradMeta;return e?e.gradFn:null}get grad(){let e=this._impl.autogradMeta;return e?e.grad:null}set grad(e){this._ensureAutogradMeta().grad=e}get isLeaf(){let e=this._impl.autogradMeta;return e?e.isLeaf:!0}get version(){return this._impl.version}requiresGrad_(e=!0){let t=this._ensureAutogradMeta();return t.requiresGrad=e,this._impl._updateKeySet(),this}retainGrad(){return this._ensureAutogradMeta().retainGrad=!0,this}detach(){let e=new Bt(this._impl.storage,this._impl.storageOffset,this._impl.sizes(),this._impl.strides(),this._impl.dtype,this._impl.device);return new r(e)}item(){if(this.numel!==1)throw new Error(`item() requires tensor with exactly 1 element, got ${this.numel}`);let t=this._impl.storage.data[this._impl.storageOffset];return rN.has(this._impl.dtype)?md(this._impl.dtype,t):t}toArray(){let e=this.shape,t=this.strides,n=this._impl.storage.data,s=this._impl.storageOffset,o=rN.has(this._impl.dtype)?this._impl.dtype:null;return e.length===0?o?md(o,n[s]):n[s]:sN(n,e,t,s,0,o)}toString(){return`Tensor(shape=[${this.shape.join(", ")}], dtype=${this.dtype}, device=${this.device})`}*[Symbol.iterator](){let e=this.shape[0];if(e===void 0)throw new Error("Cannot iterate over a 0-d tensor");for(let t=0;t<e;t++)yield this._select(0,t)}_select(e,t){let n=this._impl.sizes(),s=this._impl.strides(),o=[],i=[];for(let p=0;p<n.length;p++)p!==e&&(o.push(n[p]),i.push(s[p]));let a=this._impl.storageOffset+t*s[e],u=new Bt(this._impl.storage,a,o,i,this._impl.dtype,this._impl.device);return new r(u)}_ensureAutogradMeta(){if(!this._impl.autogradMeta){let e=new Bu;e.versionAtCreation=this._impl.version,this._impl.setAutogradMeta(e)}return this._impl.autogradMeta}backward(e){let{backward:t}=M2();t(this,e)}};l(sN,"_toNestedArray");uw=null;l(M2,"require_autograd_engine");l(oN,"setAutogradEngine")});function Dt(r){return E2[r]||Float32Array}function Rd(r,e){if(r===e)return r;let t=Ru.get(r)??0,n=Ru.get(e)??0;return t>=n?r:e}function Xe(r,e){let t=uN.get(r);t||(t=new Set,uN.set(r,t)),t.add(e)}function Xi(r){return I2(r)}var W,I2,E2,iN,aN,Ru,uN,ts=M(()=>{"use strict";Oe();W=zn,I2=Gs,E2=Object.freeze({[W.F16]:Uint16Array,[W.BF16]:Uint16Array,[W.F32]:Float32Array,[W.F64]:Float64Array,[W.I8]:Int8Array,[W.I16]:Int16Array,[W.I32]:Int32Array,[W.I64]:BigInt64Array,[W.UI8]:Uint8Array,[W.BOOL]:Uint8Array,[W.INDEX]:Int32Array});l(Dt,"typedArrayCtor");iN=[W.F16,W.BF16,W.F32,W.F64],aN=[W.UI8,W.I8,W.I16,W.I32,W.I64],Ru=new Map;for(let r=0;r<iN.length;r++)Ru.set(iN[r],100+r);for(let r=0;r<aN.length;r++)Ru.set(aN[r],r);Ru.set(W.BOOL,-1);Ru.set(W.INDEX,50);l(Rd,"resultDtype");uN=new Map;l(Xe,"_addCastPair");Xe(W.BOOL,W.I8);Xe(W.BOOL,W.I16);Xe(W.BOOL,W.I32);Xe(W.BOOL,W.I64);Xe(W.BOOL,W.F16);Xe(W.BOOL,W.F32);Xe(W.BOOL,W.F64);Xe(W.UI8,W.I16);Xe(W.UI8,W.I32);Xe(W.UI8,W.I64);Xe(W.UI8,W.F16);Xe(W.UI8,W.F32);Xe(W.UI8,W.F64);Xe(W.I8,W.I16);Xe(W.I8,W.I32);Xe(W.I8,W.I64);Xe(W.I8,W.F16);Xe(W.I8,W.F32);Xe(W.I8,W.F64);Xe(W.I16,W.I32);Xe(W.I16,W.I64);Xe(W.I16,W.F32);Xe(W.I16,W.F64);Xe(W.I32,W.I64);Xe(W.I32,W.F64);Xe(W.F16,W.F32);Xe(W.F16,W.F64);Xe(W.BF16,W.F32);Xe(W.BF16,W.F64);Xe(W.BOOL,W.BF16);Xe(W.UI8,W.BF16);Xe(W.I8,W.BF16);Xe(W.F32,W.F64);l(Xi,"dtypeSize")});function lw(r){return lN.get(r)||lN.get("cpu")}var Md,Id,lN,Lc,cN=M(()=>{"use strict";ts();ar();Md=class{static{l(this,"CPUAllocator")}allocate(e,t){let n=Dt(t);return new n(e)}free(e){}},Id=class{static{l(this,"MetaAllocator")}allocate(){return null}free(e){}},lN=new Map([["cpu",new Md],["wasm",new Md],["meta",new Id],["lazy",new Id]]);l(lw,"getAllocator");Lc=class r{static{l(this,"StorageImpl")}static#e=null;_data;_nbytes;_device;_allocator;_refCount;static setHostReadHook(e){r.#e=e}constructor(e,t,n,s){this._data=e,this._nbytes=t,this._device=n,this._allocator=s,this._refCount=1}static allocate(e,t,n){let s=lw(n.type),o=Xi(t),i=Math.max(Math.ceil(e/o),1),a=s.allocate(i,t);return new r(a,e,n,s)}static fromData(e,t){let n=e?e.byteLength:0,s=lw(t.type);return new r(e,n,t,s)}retain(){return this._refCount++,this}release(){this._refCount--,this._refCount===0&&(this._allocator&&this._data&&this._allocator.free(this._data),this._data=null)}get refCount(){return this._refCount}get data(){return r.#e&&this._data&&r.#e(this._data),this._data}get rawData(){return this._data}get nbytes(){return this._nbytes}get device(){return this._device}get isValid(){return this._refCount>0&&this._data!==null}get isMeta(){return this._data===null}resize(e,t){if(e<=this._nbytes&&this._data)return;let n=Xi(t),s=Math.max(Math.ceil(e/n),1),o=this._allocator.allocate(s,t);if(this._data&&o){let i=Math.min(this._data.length,o.length);for(let a=0;a<i;a++)o[a]=this._data[a]}this._allocator&&this._data&&this._allocator.free(this._data),this._data=o,this._nbytes=e}clone(){let e=lw(this._device.type),t=null;if(this._data){r.#e&&r.#e(this._data);let n=this._data.constructor;t=new n(this._data.length),t.set(this._data)}return new r(t,this._nbytes,this._device,e)}}});var En,ea=M(()=>{"use strict";cN();En=class r{static{l(this,"Storage")}_impl;constructor(e){this._impl=e}static allocate(e,t,n){return new r(Lc.allocate(e,t,n))}static fromData(e,t){return new r(Lc.fromData(e,t))}get impl(){return this._impl}get data(){return this._impl.data}get rawData(){return this._impl.rawData}get nbytes(){return this._impl.nbytes}get device(){return this._impl.device}get isValid(){return this._impl.isValid}get isMeta(){return this._impl.isMeta}retain(){return this._impl.retain(),this}release(){this._impl.release()}clone(){return new r(this._impl.clone())}resize(e,t){this._impl.resize(e,t)}}});function Pt(r,e){let t=e?.dtype??W.F32,n=e?.device??ii(),s=e?.requiresGrad??!1;if(ArrayBuffer.isView(r)&&"length"in r)return L2(r,e?.shape,t,n,s);if(Array.isArray(r)){let{flat:o,shape:i}=D2(r),a=e?.shape??i;return C2(o,a,t,n,s)}if(typeof r=="number")return pN(r,t,n,s);throw new Error("Unsupported data type for tensor()")}function ta(r,e,t,n){let s=n?.device??ii(),o=n?.requiresGrad??!1,i=xn(e),a=En.fromData(r,s),u=n?.offset??0,p=new Bt(a,u,e,i,t,s),c=new We(p);return o&&c.requiresGrad_(!0),c}function Dc(r,e){let t=e?.dtype??W.F32,n=e?.device??ii();return pN(r,t,n,e?.requiresGrad??!1)}function pN(r,e,t,n){let s=Dt(e),o=new s(1),i=o;i[0]=cw.has(e)?dd(e,r):r;let a=En.fromData(o,t),u=new Bt(a,0,[],[],e,t),p=new We(u);return n&&p.requiresGrad_(!0),p}function L2(r,e,t,n,s){let o=Dt(t),i=new o(r.length),a=i;if(cw.has(t))for(let d=0;d<r.length;d++)a[d]=dd(t,r[d]);else for(let d=0;d<r.length;d++)a[d]=r[d];let u=e??[r.length],p=xn(u),c=En.fromData(i,n),h=new Bt(c,0,u,p,t,n),f=new We(h);return s&&f.requiresGrad_(!0),f}function C2(r,e,t,n,s){let o=Dt(t),i=new o(r.length),a=i;if(cw.has(t))for(let f=0;f<r.length;f++)a[f]=dd(t,r[f]);else for(let f=0;f<r.length;f++)a[f]=r[f];let u=xn(e),p=En.fromData(i,n),c=new Bt(p,0,e,u,t,n),h=new We(c);return s&&h.requiresGrad_(!0),h}function D2(r){let e=[],t=r;for(;Array.isArray(t);)e.push(t.length),t=t[0];let n=[];return fN(r,n,e,0),{flat:n,shape:e}}function fN(r,e,t,n){if(n===t.length-1){for(let s=0;s<r.length;s++)e.push(r[s]);return}for(let s=0;s<r.length;s++)fN(r[s],e,t,n+1)}var cw,qr=M(()=>{"use strict";jn();Oo();ea();ts();ar();jr();xu();l(Pt,"tensor");l(ta,"fromBuffer");l(Dc,"scalar");cw=new Set(["f16","bf16","i64"]);l(pN,"_fromScalar");l(L2,"_fromTypedArray");l(C2,"_fromFlatArray");l(D2,"_flattenNested");l(fN,"_recurFlatten")});var Ft={};nt(Ft,{_dispatch:()=>ot,abs:()=>Pc,add:()=>ae,argmax:()=>Ud,argmin:()=>kN,argsort:()=>LN,batch_norm:()=>fw,broadcast_in_dim:()=>ON,cat:()=>sa,ceil:()=>wN,chunk:()=>BN,clamp:()=>Vd,clone:()=>AN,contiguous:()=>ci,conv2d:()=>hw,cos:()=>mN,cumsum:()=>IN,div:()=>$t,dot:()=>NN,embedding:()=>z2,eq:()=>$c,erf:()=>gN,erfc:()=>yN,exp:()=>Kr,expand:()=>Lu,fill:()=>F2,flip:()=>MN,floor:()=>bN,gamma:()=>Cd,gather:()=>jd,ge:()=>zd,gelu:()=>Dd,gt:()=>Iu,index_select:()=>li,layer_norm:()=>pw,le:()=>Fd,lgamma:()=>_N,log:()=>Zs,log_softmax:()=>Hd,lt:()=>xN,matmul:()=>lt,max:()=>Qs,maximum:()=>ai,mean:()=>lr,min:()=>SN,minimum:()=>Ld,mul:()=>ee,narrow:()=>Un,ne:()=>TN,neg:()=>Ur,one_hot:()=>Gd,pad:()=>na,permute:()=>Eu,pool2d:()=>Yd,pow:()=>Js,prod:()=>vN,relu:()=>Mu,remainder:()=>$2,repeat:()=>Du,reshape:()=>Cn,roll:()=>RN,rsqrt:()=>hN,scatter:()=>qd,scatter_add:()=>ra,select:()=>Ut,sigmoid:()=>ur,sign:()=>$d,silu:()=>Pd,sin:()=>dN,slice:()=>Kd,softmax:()=>Ro,sort:()=>EN,split:()=>Bo,sqrt:()=>ui,squeeze:()=>Cu,stack:()=>Wr,sub:()=>Pe,sum:()=>ht,tanh:()=>Ns,tile:()=>Wd,topk:()=>CN,transpose:()=>gt,unsqueeze:()=>Sr,where:()=>qn});function P2(r){return typeof r=="object"&&r!==null&&"_impl"in r}function Ln(r,e){return P2(r)?r:Dc(r,{dtype:e.dtype,device:e.device})}function ot(r,...e){let t=Xv(r);if(!t)return Nt.callOp(r,...e);let n=pb(e,t.schema);return Nt.dispatch(t,n,...e)}function se(r,...e){return ot(r,...e)}function Ed(r,...e){return ot(r,...e)}function ae(r,e){return se("add",r,Ln(e,r))}function Pe(r,e){return se("sub",r,Ln(e,r))}function ee(r,e){return se("mul",r,Ln(e,r))}function $t(r,e){return se("div",r,Ln(e,r))}function Ur(r){return se("neg",r)}function Js(r,e){return se("pow",r,Ln(e,r))}function $2(r,e){return se("rem",r,Ln(e,r))}function ai(r,e){return se("maximum",r,Ln(e,r))}function Ld(r,e){return se("minimum",r,Ln(e,r))}function Kr(r){return se("exp",r)}function Zs(r){return se("log",r)}function ui(r){return se("sqrt",r)}function hN(r){return se("rsqrt",r)}function Pc(r){return se("abs",r)}function dN(r){return se("sin",r)}function mN(r){return se("cos",r)}function Ns(r){return se("tanh",r)}function gN(r){return se("erf",r)}function yN(r){return se("erfc",r)}function _N(r){return se("lgamma",r)}function Cd(r){return se("gamma",r)}function ur(r){return se("sigmoid",r)}function Mu(r){return se("relu",r)}function Dd(r){return se("gelu",r)}function Pd(r){return se("silu",r)}function $d(r){return se("sign",r)}function bN(r){return se("floor",r)}function wN(r){return se("ceil",r)}function $c(r,e){return se("eq",r,Ln(e,r))}function TN(r,e){return se("ne",r,Ln(e,r))}function xN(r,e){return se("lt",r,Ln(e,r))}function Fd(r,e){return se("le",r,Ln(e,r))}function Iu(r,e){return se("gt",r,Ln(e,r))}function zd(r,e){return se("ge",r,Ln(e,r))}function qn(r,e,t){return se("where",r,e,t)}function Vd(r,e,t){return se("clamp",r,Ln(e,r),Ln(t,r))}function na(r,e,t,n=0){return se("pad",r,Ln(n,r),e,t)}function Gd(r,e){return se("one_hot",r,e)}function li(r,e,t){return se("index_select",r,t,e)}function jd(r,e,t){return se("gather",r,t,e)}function ra(r,e,t,n){return se("scatter_add",r,t,n,e)}function qd(r,e,t,n){return se("scatter",r,e,t,n)}function ht(r,e,t){return se("sum",r,e,t)}function lr(r,e,t){return se("mean",r,e,t)}function Qs(r,e,t){return se("max",r,e,t)}function SN(r,e,t){return se("min",r,e,t)}function Ud(r,e,t){return se("argmax",r,e,t)}function kN(r,e,t){return se("argmin",r,e,t)}function vN(r,e,t){return se("prod",r,e,t)}function lt(r,e){let t=dw();if(t){let n=t(r,e);if(n!==null)return n}return se("matmul",r,e)}function NN(r,e){return se("dot",r,e)}function sa(r,e){return se("cat",r,e)}function Wr(r,e){return se("stack",r,e)}function AN(r){return se("clone",r)}function F2(r,e){return se("fill",r,e)}function Cn(r,e){return se("reshape",r,e)}function gt(r,e,t){return se("transpose",r,e,t)}function Eu(r,e){return se("permute",r,e)}function ON(r,e,t){return se("broadcast_in_dim",r,e,t)}function Lu(r,e){return se("expand",r,e)}function Kd(r,e,t,n=null,s=1){return se("slice",r,e,t,n,s)}function Sr(r,e){return se("unsqueeze",r,e)}function Cu(r,e=null){return se("squeeze",r,e)}function Un(r,e,t,n){return se("narrow",r,e,t,n)}function Ut(r,e,t){return se("select",r,e,t)}function ci(r){return se("contiguous",r)}function Du(r,e){return se("repeat",r,e)}function Wd(r,e){return se("tile",r,e)}function Bo(r,e,t=0){if(typeof e!="number")return Ed("split",r,e,t);let n=r.shape.length,s=t<0?n+t:t,o=r.shape[s],i=[];for(let a=0;a<o;a+=e)i.push(Math.min(e,o-a));return Ed("split",r,i,t)}function BN(r,e,t=0){return Ed("chunk",r,e,t)}function RN(r,e,t=0){return se("roll",r,e,t)}function MN(r,e){return se("flip",r,Array.isArray(e)?e:[e])}function IN(r,e=0){return se("cumsum",r,e)}function EN(r,e=-1,t=!1){return se("sort",r,e,t)}function LN(r,e=-1,t=!1){return se("argsort",r,e,t)}function CN(r,e,t=-1,n=!0){return Ed("topk",r,e,t,n)}function Ro(r,e){return se("softmax",r,e)}function Hd(r,e){return se("log_softmax",r,e)}function pw(r,e,t,n,s){return se("layer_norm",r,e,t,n,s)}function fw(r,e,t,n,s,o,i){return se("batch_norm",r,e,t,n,s,o,i)}function hw(r,e,t,n,s,o){return se("conv2d",r,e,t,n,s,o)}function Yd(r,e,t,n,s){return se("pool2d",r,e,t,n,s)}function z2(r,e){return se("embedding",r,e)}var be=M(()=>{"use strict";$i();eN();qr();Kn();l(P2,"hasTensorImpl");l(Ln,"_asTensor");l(ot,"_dispatch");l(se,"_dispatchTensor");l(Ed,"_dispatchTensorArray");l(ae,"add");l(Pe,"sub");l(ee,"mul");l($t,"div");l(Ur,"neg");l(Js,"pow");l($2,"remainder");l(ai,"maximum");l(Ld,"minimum");l(Kr,"exp");l(Zs,"log");l(ui,"sqrt");l(hN,"rsqrt");l(Pc,"abs");l(dN,"sin");l(mN,"cos");l(Ns,"tanh");l(gN,"erf");l(yN,"erfc");l(_N,"lgamma");l(Cd,"gamma");l(ur,"sigmoid");l(Mu,"relu");l(Dd,"gelu");l(Pd,"silu");l($d,"sign");l(bN,"floor");l(wN,"ceil");l($c,"eq");l(TN,"ne");l(xN,"lt");l(Fd,"le");l(Iu,"gt");l(zd,"ge");l(qn,"where");l(Vd,"clamp");l(na,"pad");l(Gd,"one_hot");l(li,"index_select");l(jd,"gather");l(ra,"scatter_add");l(qd,"scatter");l(ht,"sum");l(lr,"mean");l(Qs,"max");l(SN,"min");l(Ud,"argmax");l(kN,"argmin");l(vN,"prod");l(lt,"matmul");l(NN,"dot");l(sa,"cat");l(Wr,"stack");l(AN,"clone");l(F2,"fill");l(Cn,"reshape");l(gt,"transpose");l(Eu,"permute");l(ON,"broadcast_in_dim");l(Lu,"expand");l(Kd,"slice");l(Sr,"unsqueeze");l(Cu,"squeeze");l(Un,"narrow");l(Ut,"select");l(ci,"contiguous");l(Du,"repeat");l(Wd,"tile");l(Bo,"split");l(BN,"chunk");l(RN,"roll");l(MN,"flip");l(IN,"cumsum");l(EN,"sort");l(LN,"argsort");l(CN,"topk");l(Ro,"softmax");l(Hd,"log_softmax");l(pw,"layer_norm");l(fw,"batch_norm");l(hw,"conv2d");l(Yd,"pool2d");l(z2,"embedding")});var $N={};nt($N,{create:()=>DN,default:()=>V2,globals:()=>PN});var DN,PN,V2,FN=M(()=>{"use strict";DN=l(()=>{throw new Error('mlfw: the "webgpu" npm package is not available in the browser; use navigator.gpu instead')},"create"),PN=void 0,V2={create:DN,globals:PN}});var XN={};nt(XN,{ensureWebGPUEager:()=>H2,flushWebGPUEager:()=>ZN,instantiateWebGPU:()=>q2,prewarmPipelines:()=>YN,recordWebGPUEager:()=>Gc,resetDevice:()=>G2,runWebGPUKernel:()=>U2,runWebGPUPlan:()=>K2,webgpuEagerOp:()=>Z2,webgpuEagerReady:()=>Y2,webgpuRNN:()=>tC});function $u(r){switch(Mn(r)){case"i32":return Int32Array;case"u32":return Uint32Array;case"f16":return Uint16Array;default:return Float32Array}}function Qd(r,e,t,n){if(t==="bf16")for(let s=0;s<e.length;s++)r[n+s]=fd(e[s]);else if(t==="i64")for(let s=0;s<e.length;s++)r[n+s]=Number(BigInt.asIntN(32,e[s]));else r.set(e,n)}function bw(r,e,t,n,s){if(t==="bf16")for(let o=0;o<s;o++)r[o]=hd(e[n+o]);else if(t==="i64")for(let o=0;o<s;o++)r[o]=BigInt(e[n+o]);else r.set(e.subarray(n,n+s))}function eo(r){return Math.ceil(r/4)*4}async function ww(){return kt||Fc||(Fc=(async()=>{let r=typeof navigator<"u"&&navigator.gpu;if(!r)try{let i=await Promise.resolve().then(()=>(FN(),$N));qN=i,r=i.create([]),i.globals&&(zc=i.globals.GPUBufferUsage,Jd=i.globals.GPUMapMode,Zd=i.globals.GPUShaderStage)}catch{throw new Error('WebGPU not available: install the "webgpu" npm package or run in a browser with WebGPU support')}!zc&&typeof GPUBufferUsage<"u"&&(zc=GPUBufferUsage,Jd=GPUMapMode,Zd=GPUShaderStage);let e=await r.requestAdapter();if(!e)throw new Error("WebGPU: no adapter found");let t=e.limits||{},n={},s=["maxStorageBuffersPerShaderStage","maxStorageBufferBindingSize","maxBufferSize","maxBindingsPerBindGroup"];for(let i of s)t[i]!==void 0&&(n[i]=t[i]);let o=[];return e.features&&e.features.has("shader-f16")&&o.push("shader-f16"),kt=await e.requestDevice({requiredLimits:n,requiredFeatures:o}),!zN&&typeof process<"u"&&process.on&&(zN=!0,process.on("exit",()=>{kt&&(kt.destroy(),kt=null)})),kt})(),Fc)}function Fu(){return zc}function Tw(){return Jd.READ}function G2(){kt&&(kt.destroy(),kt=null),Fc=null,zc=null,Jd=null,Zd=null,qN=null}function j2(r){return r.name==="_shapes"?"uniform":r.mode==="read_write"?"storage":"read-only-storage"}function UN(r,e){let t=r.createShaderModule({code:e.source}),n=[];for(let i of e.metadata.bindings)n.push({binding:i.index,visibility:Zd.COMPUTE,buffer:{type:j2(i)}});let s=r.createBindGroupLayout({entries:n}),o=r.createPipelineLayout({bindGroupLayouts:[s]});return{shaderModule:t,bindGroupLayout:s,pipelineLayout:o}}function KN(r,e){let{shaderModule:t,bindGroupLayout:n,pipelineLayout:s}=UN(r,e);return{pipeline:r.createComputePipeline({layout:s,compute:{module:t,entryPoint:e.name}}),bindGroupLayout:n}}function WN(r,e){let t=Xd.get(e);return t||(t=KN(r,e),Xd.set(e,t)),t}async function q2(r){let e=await ww(),{pipeline:t,bindGroupLayout:n}=KN(e,r);return{device:e,pipeline:t,bindGroupLayout:n,kernel:r,workgroupSize:r.metadata.workgroupSize,dispatchSize:r.metadata.dispatchSize,bindings:r.metadata.bindings}}function HN(r){let e=new Map,t=0;for(let n of r)if(n.name!=="_shapes")if(n.packed)for(let s of n.packed)e.set(s.name,s.argIndex!==void 0?s.argIndex:t++);else e.set(n.name,n.argIndex!==void 0?n.argIndex:t++);return e}async function U2(r,e,t){let{device:n,pipeline:s,bindGroupLayout:o,bindings:i,dispatchSize:a}=r,u=Fu(),p=[],c=[],h=HN(i);for(let y=0;y<i.length;y++){let _=i[y];if(_.name==="_shapes"){let v=new Uint32Array(t||[]),O=Math.max(Math.ceil(v.byteLength/16)*16,16),R=n.createBuffer({size:O,usage:u.UNIFORM|u.COPY_DST});n.queue.writeBuffer(R,0,v),p.push(R),c.push({binding:_.index,resource:{buffer:R}});continue}let b=bs(_.dtype),w=$u(_.dtype);if(_.packed){let v=eo(_.packedSize*b),R=_.mode==="read_write"?u.STORAGE|u.COPY_SRC|u.COPY_DST:u.STORAGE|u.COPY_DST,B=n.createBuffer({size:Math.max(v,4),usage:R,mappedAtCreation:!0}),E=new w(B.getMappedRange());for(let z of _.packed){let D=h.get(z.name),J=e[D];J&&Qd(E,J,z.dtype,z.offset)}B.unmap(),p.push(B),c.push({binding:_.index,resource:{buffer:B}});continue}let T=h.get(_.name),S=e[T],x=eo(S.length*b),A=_.mode==="read_write"?u.STORAGE|u.COPY_SRC|u.COPY_DST:u.STORAGE|u.COPY_DST,N=n.createBuffer({size:Math.max(x,4),usage:A,mappedAtCreation:!0});Qd(new w(N.getMappedRange()),S,_.dtype,0),N.unmap(),p.push(N),c.push({binding:_.index,resource:{buffer:N}})}let f=n.createBindGroup({layout:o,entries:c}),d=n.createCommandEncoder(),m=d.beginComputePass();m.setPipeline(s),m.setBindGroup(0,f),m.dispatchWorkgroups(a[0],a[1],a[2]),m.end();let g=[];for(let y=0;y<i.length;y++){let _=i[y];if(_.name==="_shapes"||_.mode!=="read_write")continue;let b=p[y],w=bs(_.dtype),T=$u(_.dtype);if(_.packed)for(let S of _.packed){let x=S.offset*w,k=eo(S.size*w),A=n.createBuffer({size:k,usage:u.MAP_READ|u.COPY_DST});d.copyBufferToBuffer(b,x,A,0,k),g.push({readBuf:A,tensorIdx:h.get(S.name),size:S.size,dtype:S.dtype,ViewCtor:T})}else{let S=b.size,x=n.createBuffer({size:S,usage:u.MAP_READ|u.COPY_DST});d.copyBufferToBuffer(b,0,x,0,S),g.push({readBuf:x,tensorIdx:h.get(_.name),size:e[h.get(_.name)].length,dtype:_.dtype,ViewCtor:T})}}n.queue.submit([d.finish()]);for(let y of g){await y.readBuf.mapAsync(Tw());let _=new y.ViewCtor(y.readBuf.getMappedRange());bw(e[y.tensorIdx],_,y.dtype,0,y.size),y.readBuf.unmap(),y.readBuf.destroy()}for(let y of p)y.destroy()}async function YN(r,e){if(typeof r.createComputePipelineAsync!="function")return;let t=[],n=new Set;for(let s of e){if(!s||n.has(s)||Xd.has(s))continue;n.add(s);let{shaderModule:o,bindGroupLayout:i,pipelineLayout:a}=UN(r,s);t.push(r.createComputePipelineAsync({layout:a,compute:{module:o,entryPoint:s.name}}).then(u=>Xd.set(s,{pipeline:u,bindGroupLayout:i}),()=>{}))}t.length>0&&await Promise.all(t)}async function K2(r,e,t){let n=await ww(),s=Fu();await YN(n,t.map(b=>b.kernel));let o=new Set;for(let b of t)for(let w of b.outputSlots)o.add(w);let i=new Array(r.numSlots).fill(null),a=new Array(r.numSlots).fill("f32");for(let b=0;b<r.numSlots;b++){let w=e[b];if(!w)continue;let T=w.dtype||"f32";a[b]=T;let S=Math.max(eo(w.data.length*bs(T)),4),x=!o.has(b),k=n.createBuffer({size:S,usage:s.STORAGE|s.COPY_DST|s.COPY_SRC,mappedAtCreation:x});x&&(Qd(new($u(T))(k.getMappedRange()),w.data,T,0),k.unmap()),i[b]=k}let u=32,p=[],c=[],h={encoder:n.createCommandEncoder(),pending:0},f=l(()=>{++h.pending>=u&&(n.queue.submit([h.encoder.finish()]),h.encoder=n.createCommandEncoder(),h.pending=0)},"maybeFlush"),d=l(b=>{let w=h.encoder,{pipeline:T,bindGroupLayout:S}=WN(n,b.kernel),x=b.inputSlots.concat(b.outputSlots),k=[],A=[],N=0;for(let B of b.kernel.metadata.bindings)if(B.name==="_shapes"){let E=new Uint32Array(b.shapeValues||[]),z=Math.max(Math.ceil(E.byteLength/16)*16,16),D=n.createBuffer({size:z,usage:s.UNIFORM|s.COPY_DST});n.queue.writeBuffer(D,0,E),p.push(D),k.push({binding:B.index,resource:{buffer:D}})}else if(B.packed){let E=bs(B.dtype),z=n.createBuffer({size:Math.max(eo(B.packedSize*E),4),usage:s.STORAGE|s.COPY_DST|s.COPY_SRC});c.push(z);let D=B.mode==="read_write";for(let J of B.packed){let j=x[J.argIndex],U=eo(J.size*E);D?A.push({slot:j,src:z,srcOff:J.offset*E,bytes:U}):w.copyBufferToBuffer(i[j],0,z,J.offset*E,U)}k.push({binding:B.index,resource:{buffer:z}})}else k.push({binding:B.index,resource:{buffer:i[x[N++]]}});let v=n.createBindGroup({layout:S,entries:k}),O=w.beginComputePass();O.setPipeline(T),O.setBindGroup(0,v);let R=b.kernel.metadata.dispatchSize;O.dispatchWorkgroups(R[0],R[1],R[2]),O.end();for(let B of A)w.copyBufferToBuffer(B.src,B.srcOff,i[B.slot],0,B.bytes);f()},"encodeStep"),m=r.scanLoops?[...r.scanLoops].sort((b,w)=>b.loopStart-w.loopStart):r.scanLoop?[r.scanLoop]:null;if(m&&m.length){let b=0;for(let w of m){for(;b<w.loopStart;b++)d(t[b]);for(let T of w.carry)h.encoder.copyBufferToBuffer(i[T.initSlot],0,i[T.a],0,T.bytes);for(let T=0;T<w.T;T++){for(let S of w.xs)h.encoder.copyBufferToBuffer(i[S.xsSlot],T*S.stepBytes,i[S.xtSlot],0,S.stepBytes);for(let S=w.loopStart;S<w.loopEnd;S++)d(t[S]);for(let S of w.ys)h.encoder.copyBufferToBuffer(i[S.ytSlot],0,i[S.ysSlot],T*S.stepBytes,S.stepBytes);for(let S of w.carry){let x=i[S.a];i[S.a]=i[S.b],i[S.b]=x}}for(let T of w.carry)h.encoder.copyBufferToBuffer(i[T.a],0,i[T.finalSlot],0,T.bytes);b=w.loopEnd}for(;b<t.length;b++)d(t[b])}else for(let b of t)d(b);let g=h.encoder,y=new Set(r.argSlots),_=[];for(let b=0;b<r.numSlots;b++){if(!i[b]||!o.has(b)||!y.has(b))continue;let w=e[b],T=Math.max(eo(w.data.length*bs(a[b])),4),S=n.createBuffer({size:T,usage:s.MAP_READ|s.COPY_DST});g.copyBufferToBuffer(i[b],0,S,0,T),_.push({rb:S,dtype:a[b],size:w.data.length,dst:w.data})}n.queue.submit([g.finish()]);for(let b of _)await b.rb.mapAsync(Tw()),bw(b.dst,new($u(b.dtype))(b.rb.getMappedRange()),b.dtype,0,b.size),b.rb.unmap(),b.rb.destroy();for(let b of i)b&&b.destroy();for(let b of p)b.destroy();for(let b of c)b.destroy()}function JN(r){let e=_w.get(r);if(e&&e.length)return e.pop();let t=Fu();return kt.createBuffer({size:r,usage:t.STORAGE|t.COPY_SRC|t.COPY_DST})}function VN(r,e){let t=_w.get(e);t||(t=[],_w.set(e,t)),t.push(r)}async function H2(){return await ww(),As||(As=kt.createCommandEncoder()),kt}function Y2(){return!!kt&&!!As}function GN(r,e,t){let n=Vc.get(r);if(n)return n.buf;let s=Fu(),o=Math.max(eo(r.length*bs(e)),4);if(t){let a=kt.createBuffer({size:o,usage:s.STORAGE|s.COPY_SRC|s.COPY_DST,mappedAtCreation:!0});return Qd(new($u(e))(a.getMappedRange()),r,e,0),a.unmap(),Vc.set(r,{buf:a,bytes:o,dtype:e,persistent:t}),a}let i=JN(o);return Vc.set(r,{buf:i,bytes:o,dtype:e,persistent:!1}),i}function Gc(r,e,t){let{pipeline:n,bindGroupLayout:s}=WN(kt,r),{bindings:o,dispatchSize:i}=r.metadata,a=HN(o),u=Fu(),p=[],c=[];for(let d of o){if(d.name==="_shapes"){let y=new Uint32Array(t||[]),_=Math.max(Math.ceil(y.byteLength/16)*16,16),b=kt.createBuffer({size:_,usage:u.UNIFORM|u.COPY_DST});kt.queue.writeBuffer(b,0,y),gw.push(b),p.push({binding:d.index,resource:{buffer:b}});continue}if(d.packed){let y=bs(d.dtype),_=Math.max(eo(d.packedSize*y),4),b=JN(_);yw.push({buf:b,bytes:_});let w=d.mode==="read_write";for(let T of d.packed){let S=GN(e[a.get(T.name)],T.dtype,!w),x=eo(T.size*y);w?c.push({pbuf:b,off:T.offset*y,sub:S,bytes:x}):As.copyBufferToBuffer(S,0,b,T.offset*y,x)}p.push({binding:d.index,resource:{buffer:b}});continue}let m=e[a.get(d.name)],g=GN(m,d.dtype,d.mode!=="read_write");p.push({binding:d.index,resource:{buffer:g}})}let h=kt.createBindGroup({layout:s,entries:p}),f=As.beginComputePass();f.setPipeline(n),f.setBindGroup(0,h),f.dispatchWorkgroups(i[0],i[1],i[2]),f.end();for(let d of c)As.copyBufferToBuffer(d.pbuf,d.off,d.sub,0,d.bytes);++mw>=W2&&(kt.queue.submit([As.finish()]),As=kt.createCommandEncoder(),mw=0)}async function ZN(){if(!kt)return;let r=Fu(),e=[];for(let[t,n]of Vc){if(n.persistent)continue;let s=kt.createBuffer({size:n.bytes,usage:r.MAP_READ|r.COPY_DST});As.copyBufferToBuffer(n.buf,0,s,0,n.bytes),e.push({rb:s,ha:t,buf:n.buf,bytes:n.bytes,dtype:n.dtype})}kt.queue.submit([As.finish()]),As=kt.createCommandEncoder(),mw=0;for(let t of gw)t.destroy();gw.length=0,await Promise.all(e.map(t=>t.rb.mapAsync(Tw())));for(let t of e)bw(t.ha,new($u(t.dtype))(t.rb.getMappedRange()),t.dtype,0,t.ha.length),t.rb.unmap(),t.rb.destroy();for(let t of yw)VN(t.buf,t.bytes);yw.length=0;for(let t of e)VN(t.buf,t.bytes),Vc.delete(t.ha)}function J2(r,e,t,n,s){let o=`${r.join(",")}|${e.join(",")}|${t}|${n}`,i=jN.get(o);if(i)return i;let a=Mn(n),u="";for(let c=r.length-1;c>=0;c--)u+=` let idx${c} = rem % ${r[c]}u; rem = rem / ${r[c]}u; src = src + idx${c} * ${e[c]}u;
13
13
  `;return i={name:"contig",source:`@group(0) @binding(0) var<storage, read> inp : array<${a}>;
14
14
  @group(0) @binding(1) var<storage, read_write> outp : array<${a}>;
15
15
  @compute @workgroup_size(64)