PageSourceSearch

https://kindredly.ai/js/ort.bundle.minDsxEvk2Y.js

js kindredly.ai collected 2026-10-02 01:14:10 UTC 397,558 bytes, 2,871 lines download raw bytes

1var Yh=Object.defineProperty;var Jh=(e,t,r)=>t in e?Yh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ms=(e,t,r)=>Jh(e,typeof t!="symbol"?t+"":t,r);/*!
2 * ONNX Runtime Web v1.22.0-dev.20250409-89f8206ba4
3 * Copyright (c) Microsoft Corporation. All rights reserved.
4 * Licensed under the MIT License.
5 */var Sa=Object.defineProperty,em=Object.getOwnPropertyDescriptor,tm=Object.getOwnPropertyNames,rm=Object.prototype.hasOwnProperty,im=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),U=(e,t)=>()=>(e&&(t=e(e=0)),t),Pt=(e,t)=>{for(var r in t)Sa(e,r,{get:t[r],enumerable:!0})},am=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of tm(t))!rm.call(e,n)&&n!==r&&Sa(e,n,{get:()=>t[n],enumerable:!(a=em(t,n))||a.enumerable});return e},nr=e=>am(Sa({},"__esModule",{value:!0}),e),jt,pt,kt,gs,Zl,Ql=U(()=>{jt=new Map,pt=[],kt=(e,t,r)=>{if(t&&typeof t.init=="function"&&typeof t.createInferenceSessionHandler=="function"){let a=jt.get(e);if(a===void 0)jt.set(e,{backend:t,priority:r});else{if(a.priority>r)return;if(a.priority===r&&a.backend!==t)throw new Error(`cannot register backend "${e}" using priority ${r}`)}if(r>=0){let n=pt.indexOf(e);n!==-1&&pt.splice(n,1);for(let i=0;i<pt.length;i++)if(jt.get(pt[i]).priority<=r){pt.splice(i,0,e);return}pt.push(e)}return}throw new TypeError("not a valid backend")},gs=async e=>{let t=jt.get(e);if(!t)return"backend not found.";if(t.initialized)return t.backend;if(t.aborted)return t.error;{let r=!!t.initPromise;try{return r||(t.initPromise=t.backend.init(e)),await t.initPromise,t.initialized=!0,t.backend}catch(a){return r||(t.error=`${a}`,t.aborted=!0),t.error}finally{delete t.initPromise}}},Zl=async e=>{let t=e.executionProviders||[],r=t.map(d=>typeof d=="string"?d:d.name),a=r.length===0?pt:r,n,i=[],s=new Set;for(let d of a){let l=await gs(d);typeof l=="string"?i.push({name:d,err:l}):(n||(n=l),n===l&&s.add(d))}if(!n)throw new Error(`no available backend found. ERR: ${i.map(d=>`[${d.name}] ${d.err}`).join(", ")}`);for(let{name:d,err:l}of i)r.includes(d)&&console.warn(`removing requested execution provider "${d}" from session options because it is not available: ${l}`);let u=t.filter(d=>s.has(typeof d=="string"?d:d.name));return[n,new Proxy(e,{get:(d,l)=>l==="executionProviders"?u:Reflect.get(d,l)})]}}),nm=U(()=>{Ql()}),Xl,sm=U(()=>{Xl="1.22.0-dev.20250409-89f8206ba4"}),li,Pe,Yl=U(()=>{sm(),li="warning",Pe={wasm:{},webgl:{},webgpu:{},versions:{common:Xl},set logLevel(e){if(e!==void 0){if(typeof e!="string"||["verbose","info","warning","error","fatal"].indexOf(e)===-1)throw new Error(`Unsupported logging level: ${e}`);li=e}},get logLevel(){return li}},Object.defineProperty(Pe,"logLevel",{enumerable:!0})}),ye,om=U(()=>{Yl(),ye=Pe}),Jl,ed,um=U(()=>{Jl=(e,t)=>{let r=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);r.width=e.dims[3],r.height=e.dims[2];let a=r.getContext("2d");if(a!=null){let n,i;(t==null?void 0:t.tensorLayout)!==void 0&&t.tensorLayout==="NHWC"?(n=e.dims[2],i=e.dims[3]):(n=e.dims[3],i=e.dims[2]);let s=(t==null?void 0:t.format)!==void 0?t.format:"RGB",u=t==null?void 0:t.norm,d,l;u===void 0||u.mean===void 0?d=[255,255,255,255]:typeof u.mean=="number"?d=[u.mean,u.mean,u.mean,u.mean]:(d=[u.mean[0],u.mean[1],u.mean[2],0],u.mean[3]!==void 0&&(d[3]=u.mean[3])),u===void 0||u.bias===void 0?l=[0,0,0,0]:typeof u.bias=="number"?l=[u.bias,u.bias,u.bias,u.bias]:(l=[u.bias[0],u.bias[1],u.bias[2],0],u.bias[3]!==void 0&&(l[3]=u.bias[3]));let c=i*n,f=0,m=c,g=c*2,_=-1;s==="RGBA"?(f=0,m=c,g=c*2,_=c*3):s==="RGB"?(f=0,m=c,g=c*2):s==="RBG"&&(f=0,g=c,m=c*2);for(let b=0;b<i;b++)for(let x=0;x<n;x++){let w=(e.data[f++]-l[0])*d[0],$=(e.data[m++]-l[1])*d[1],k=(e.data[g++]-l[2])*d[2],S=_===-1?255:(e.data[_++]-l[3])*d[3];a.fillStyle="rgba("+w+","+$+","+k+","+S+")",a.fillRect(x,b,1,1)}if("toDataURL"in r)return r.toDataURL();throw new Error("toDataURL is not supported")}else throw new Error("Can not access image data")},ed=(e,t)=>{let r=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d"),a;if(r!=null){let n,i,s;(t==null?void 0:t.tensorLayout)!==void 0&&t.tensorLayout==="NHWC"?(n=e.dims[2],i=e.dims[1],s=e.dims[3]):(n=e.dims[3],i=e.dims[2],s=e.dims[1]);let u=t!==void 0&&t.format!==void 0?t.format:"RGB",d=t==null?void 0:t.norm,l,c;d===void 0||d.mean===void 0?l=[255,255,255,255]:typeof d.mean=="number"?l=[d.mean,d.mean,d.mean,d.mean]:(l=[d.mean[0],d.mean[1],d.mean[2],255],d.mean[3]!==void 0&&(l[3]=d.mean[3])),d===void 0||d.bias===void 0?c=[0,0,0,0]:typeof d.bias=="number"?c=[d.bias,d.bias,d.bias,d.bias]:(c=[d.bias[0],d.bias[1],d.bias[2],0],d.bias[3]!==void 0&&(c[3]=d.bi
vendor: 11,489 bytes, line 5
5as[3]));let f=i*n;if(t!==void 0&&(t.format!==void 0&&s===4&&t.format!=="RGBA"||s===3&&t.format!=="RGB"&&t.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");let m=4,g=0,_=1,b=2,x=3,w=0,$=f,k=f*2,S=-1;u==="RGBA"?(w=0,$=f,k=f*2,S=f*3):u==="RGB"?(w=0,$=f,k=f*2):u==="RBG"&&(w=0,k=f,$=f*2),a=r.createImageData(n,i);for(let T=0;T<i*n;g+=m,_+=m,b+=m,x+=m,T++)a.data[g]=(e.data[w++]-c[0])*l[0],a.data[_]=(e.data[$++]-c[1])*l[1],a.data[b]=(e.data[k++]-c[2])*l[2],a.data[x]=S===-1?255:(e.data[S++]-c[3])*l[3]}else throw new Error("Can not access image data");return a}}),br,td,rd,id,ad,nd,lm=U(()=>{ka(),br=(e,t)=>{if(e===void 0)throw new Error("Image buffer must be defined");if(t.height===void 0||t.width===void 0)throw new Error("Image height and width must be defined");if(t.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");let{height:r,width:a}=t,n=t.norm??{mean:255,bias:0},i,s;typeof n.mean=="number"?i=[n.mean,n.mean,n.mean,n.mean]:i=[n.mean[0],n.mean[1],n.mean[2],n.mean[3]??255],typeof n.bias=="number"?s=[n.bias,n.bias,n.bias,n.bias]:s=[n.bias[0],n.bias[1],n.bias[2],n.bias[3]??0];let u=t.format!==void 0?t.format:"RGBA",d=t.tensorFormat!==void 0&&t.tensorFormat!==void 0?t.tensorFormat:"RGB",l=r*a,c=d==="RGBA"?new Float32Array(l*4):new Float32Array(l*3),f=4,m=0,g=1,_=2,b=3,x=0,w=l,$=l*2,k=-1;u==="RGB"&&(f=3,m=0,g=1,_=2,b=-1),d==="RGBA"?k=l*3:d==="RBG"?(x=0,$=l,w=l*2):d==="BGR"&&($=0,w=l,x=l*2);for(let S=0;S<l;S++,m+=f,_+=f,g+=f,b+=f)c[x++]=(e[m]+s[0])/i[0],c[w++]=(e[g]+s[1])/i[1],c[$++]=(e[_]+s[2])/i[2],k!==-1&&b!==-1&&(c[k++]=(e[b]+s[3])/i[3]);return d==="RGBA"?new Re("float32",c,[1,4,r,a]):new Re("float32",c,[1,3,r,a])},td=async(e,t)=>{let r=typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement,a=typeof ImageData<"u"&&e instanceof ImageData,n=typeof ImageBitmap<"u"&&e instanceof ImageBitmap,i=typeof e=="string",s,u=t??{},d=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},l=c=>typeof HTMLCanvasElement<"u"&&c instanceof HTMLCanvasElement||c instanceof OffscreenCanvas?c.getContext("2d"):null;if(r){let c=d();c.width=e.width,c.height=e.height;let f=l(c);if(f!=null){let m=e.height,g=e.width;if(t!==void 0&&t.resizedHeight!==void 0&&t.resizedWidth!==void 0&&(m=t.resizedHeight,g=t.resizedWidth),t!==void 0){if(u=t,t.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");u.tensorFormat="RGBA",u.height=m,u.width=g}else u.tensorFormat="RGBA",u.height=m,u.width=g;f.drawImage(e,0,0),s=f.getImageData(0,0,g,m).data}else throw new Error("Can not access image data")}else if(a){let c,f;if(t!==void 0&&t.resizedWidth!==void 0&&t.resizedHeight!==void 0?(c=t.resizedHeight,f=t.resizedWidth):(c=e.height,f=e.width),t!==void 0&&(u=t),u.format="RGBA",u.height=c,u.width=f,t!==void 0){let m=d();m.width=f,m.height=c;let g=l(m);if(g!=null)g.putImageData(e,0,0),s=g.getImageData(0,0,f,c).data;else throw new Error("Can not access image data")}else s=e.data}else if(n){if(t===void 0)throw new Error("Please provide image config with format for Imagebitmap");let c=d();c.width=e.width,c.height=e.height;let f=l(c);if(f!=null){let m=e.height,g=e.width;return f.drawImage(e,0,0,g,m),s=f.getImageData(0,0,g,m).data,u.height=m,u.width=g,br(s,u)}else throw new Error("Can not access image data")}else{if(i)return new Promise((c,f)=>{let m=d(),g=l(m);if(!e||!g)return f();let _=new Image;_.crossOrigin="Anonymous",_.src=e,_.onload=()=>{m.width=_.width,m.height=_.height,g.drawImage(_,0,0,m.width,m.height);let b=g.getImageData(0,0,m.width,m.height);u.height=m.height,u.width=m.width,c(br(b.data,u))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(s!==void 0)return br(s,u);throw new Error("Input data provided is not supported - aborted tensor creation")},rd=(e,t)=>{let{width:r,height:a,download:n,dispose:i}=t,s=[1,a,r,4];return new Re({location:"texture",type:"float32",texture:e,dims:s,download:n,dispose:i})},id=(e,t)=>{let{dataType:r,dims:a,download:n,dispose:i}=t;return new Re({location:"gpu-buffer",type:r??"float32",gpuBuffer:e,dims:a,download:n,dispose:i})},ad=(e,t)=>{let{dataType:r,dims:a,download:n,dispose:i}=t;return new Re({location:"ml-tensor",type:r??"float32",mlTensor:e,dims:a,download:n,dispose:i})},nd=(e,t,r)=>new Re({location:"cpu-pinned",type:e,data:t,dims:r??[t.length]})}),xt,er,di,sd,dm=U(()=>{xt=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),er=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),di=!1,sd=()=>{if(!di){di=!0;let e=typeof BigInt64Array<"u"&&BigInt64Array.from,t=typeof BigUint64Array<"u"&&BigUint64Array.from,r=globalThis.Float16Array,a=typeof r<"u"&&r.from;e&&(xt.set("int64",BigInt64Array),er.set(BigInt64Array,"int64")),t&&(xt.set("uint64",BigUint64Array),er.set(BigUint64Array,"uint64")),a?(xt.set("float16",r),er.set(r,"float16")):xt.set("float16",Uint16Array)}}}),od,ud,pm=U(()=>{ka(),od=e=>{let t=1;for(let r=0;r<e.length;r++){let a=e[r];if(typeof a!="number"||!Number.isSafeInteger(a))throw new TypeError(`dims[${r}] must be an integer, got: ${a}`);if(a<0)throw new RangeError(`dims[${r}] must be a non-negative integer, got: ${a}`);t*=a}return t},ud=(e,t)=>{switch(e.location){case"cpu":return new Re(e.type,e.data,t);case"cpu-pinned":return new Re({location:"cpu-pinned",data:e.data,type:e.type,dims:t});case"texture":return new Re({location:"texture",texture:e.texture,type:e.type,dims:t});case"gpu-buffer":return new Re({location:"gpu-buffer",gpuBuffer:e.gpuBuffer,type:e.type,dims:t});case"ml-tensor":return new Re({location:"ml-tensor",mlTensor:e.mlTensor,type:e.type,dims:t});default:throw new Error(`tensorReshape: tensor location ${e.location} is not supported`)}}}),Re,ka=U(()=>{um(),lm(),dm(),pm(),Re=class{constructor(e,t,r){sd();let a,n;if(typeof e=="object"&&"location"in e)switch(this.dataLocation=e.location,a=e.type,n=e.dims,e.location){case"cpu-pinned":{let s=xt.get(a);if(!s)throw new TypeError(`unsupported type "${a}" to create tensor from pinned buffer`);if(!(e.data instanceof s))throw new TypeError(`buffer should be of type ${s.name}`);this.cpuData=e.data;break}case"texture":{if(a!=="float32")throw new TypeError(`unsupported type "${a}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break}case"gpu-buffer":{if(a!=="float32"&&a!=="float16"&&a!=="int32"&&a!=="int64"&&a!=="uint32"&&a!=="uint8"&&a!=="bool"&&a!=="uint4"&&a!=="int4")throw new TypeError(`unsupported type "${a}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break}case"ml-tensor":{if(a!=="float32"&&a!=="float16"&&a!=="int32"&&a!=="int64"&&a!=="uint32"&&a!=="uint64"&&a!=="int8"&&a!=="uint8"&&a!=="bool"&&a!=="uint4"&&a!=="int4")throw new TypeError(`unsupported type "${a}" to create tensor from MLTensor`);this.mlTensorData=e.mlTensor,this.downloader=e.download,this.disposer=e.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let s,u;if(typeof e=="string")if(a=e,u=r,e==="string"){if(!Array.isArray(t))throw new TypeError("A string tensor's data must be a string array.");s=t}else{let d=xt.get(e);if(d===void 0)throw new TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t)){if(e==="float16"&&d===Uint16Array||e==="uint4"||e==="int4")throw new TypeError(`Creating a ${e} tensor from number array is not supported. Please use ${d.name} as data.`);e==="uint64"||e==="int64"?s=d.from(t,BigInt):s=d.from(t)}else if(t instanceof d)s=t;else if(t instanceof Uint8ClampedArray)if(e==="uint8")s=Uint8Array.from(t);else throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if(e==="float16"&&t instanceof Uint16Array&&d!==Uint16Array)s=new globalThis.Float16Array(t.buffer,t.byteOffset,t.length);else throw new TypeError(`A ${a} tensor's data must be type of ${d}`)}else if(u=t,Array.isArray(e)){if(e.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");let d=typeof e[0];if(d==="string")a="string",s=e;else if(d==="boolean")a="bool",s=Uint8Array.from(e);else throw new TypeError(`Invalid element type of data array: ${d}.`)}else if(e instanceof Uint8ClampedArray)a="uint8",s=Uint8Array.from(e);else{let d=er.get(e.constructor);if(d===void 0)throw new TypeError(`Unsupported type for tensor data: ${e.constructor}.`);a=d,s=e}if(u===void 0)u=[s.length];else if(!Array.isArray(u))throw new TypeError("A tensor's dims must be a number array");n=u,this.cpuData=s,this.dataLocation="cpu"}let i=od(n);if(this.cpuData&&i!==this.cpuData.length&&!((a==="uint4"||a==="int4")&&Math.ceil(i/2)===this.cpuData.length))throw new Error(`Tensor's size(${i}) does not match data length(${this.cpuData.length}).`);this.type=a,this.dims=n,this.size=i}static async fromImage(e,t){return td(e,t)}static fromTexture(e,t){return rd(e,t)}static fromGpuBuffer(e,t){return id(e,t)}static fromMLTensor(e,t){return ad(e,t)}static fromPinnedBuffer(e,t,r){return nd(e,t,r)}toDataURL(e){return Jl(this,e)}toImageData(e){return ed(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(e){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let t=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=t,e&&this.disposer&&(this.disposer(),this.disposer=void 0),t}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return ud(this,e)}}}),Ge,ld=U(()=>{ka(),Ge=Re}),sr,pi,Fe,Ue,dd=U(()=>{Yl(),sr=(e,t)=>
5{(typeof Pe.trace>"u"?!Pe.wasm.trace:!Pe.trace)||console.timeStamp(`${e}::ORT::${t}`)},pi=(e,t)=>{var n;let r=((n=new Error().stack)==null?void 0:n.split(/\r\n|\r|\n/g))||[],a=!1;for(let i=0;i<r.length;i++){if(a&&!r[i].includes("TRACE_FUNC")){let s=`FUNC_${e}::${r[i].trim().split(" ")[1]}`;t&&(s+=`::${t}`),sr("CPU",s);return}r[i].includes("TRACE_FUNC")&&(a=!0)}},Fe=e=>{(typeof Pe.trace>"u"?!Pe.wasm.trace:!Pe.trace)||pi("BEGIN",e)},Ue=e=>{(typeof Pe.trace>"u"?!Pe.wasm.trace:!Pe.trace)||pi("END",e)}}),pd,cm=U(()=>{Ql(),ld(),dd(),pd=class cd{constructor(t){this.handler=t}async run(t,r,a){Fe();let n={},i={};if(typeof t!="object"||t===null||t instanceof Ge||Array.isArray(t))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if(typeof r=="object"){if(r===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(r instanceof Ge)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(r)){if(r.length===0)throw new TypeError("'fetches' cannot be an empty array.");s=!1;for(let l of r){if(typeof l!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(l)===-1)throw new RangeError(`'fetches' contains invalid output name: ${l}.`);n[l]=null}if(typeof a=="object"&&a!==null)i=a;else if(typeof a<"u")throw new TypeError("'options' must be an object.")}else{let l=!1,c=Object.getOwnPropertyNames(r);for(let f of this.outputNames)if(c.indexOf(f)!==-1){let m=r[f];(m===null||m instanceof Ge)&&(l=!0,s=!1,n[f]=m)}if(l){if(typeof a=="object"&&a!==null)i=a;else if(typeof a<"u")throw new TypeError("'options' must be an object.")}else i=r}}else if(typeof r<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let l of this.inputNames)if(typeof t[l]>"u")throw new Error(`input '${l}' is missing in 'feeds'.`);if(s)for(let l of this.outputNames)n[l]=null;let u=await this.handler.run(t,n,i),d={};for(let l in u)if(Object.hasOwnProperty.call(u,l)){let c=u[l];c instanceof Ge?d[l]=c:d[l]=new Ge(c.type,c.data,c.dims)}return Ue(),d}async release(){return this.handler.dispose()}static async create(t,r,a,n){Fe();let i,s={};if(typeof t=="string"){if(i=t,typeof r=="object"&&r!==null)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(t instanceof Uint8Array){if(i=t,typeof r=="object"&&r!==null)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer){let c=t,f=0,m=t.byteLength;if(typeof r=="object"&&r!==null)s=r;else if(typeof r=="number"){if(f=r,!Number.isSafeInteger(f))throw new RangeError("'byteOffset' must be an integer.");if(f<0||f>=c.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${c.byteLength}).`);if(m=t.byteLength-f,typeof a=="number"){if(m=a,!Number.isSafeInteger(m))throw new RangeError("'byteLength' must be an integer.");if(m<=0||f+m>c.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${c.byteLength-f}].`);if(typeof n=="object"&&n!==null)s=n;else if(typeof n<"u")throw new TypeError("'options' must be an object.")}else if(typeof a<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof r<"u")throw new TypeError("'options' must be an object.");i=new Uint8Array(c,f,m)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");let[u,d]=await Zl(s),l=await u.createInferenceSessionHandler(i,d);return Ue(),new cd(l)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}}),Ta,fm=U(()=>{cm(),Ta=pd}),hm=U(()=>{}),mm=U(()=>{}),gm=U(()=>{}),_m=U(()=>{}),fd={};Pt(fd,{InferenceSession:()=>Ta,TRACE:()=>sr,TRACE_FUNC_BEGIN:()=>Fe,TRACE_FUNC_END:()=>Ue,Tensor:()=>Ge,env:()=>ye,registerBackend:()=>kt});var Ke=U(()=>{nm(),om(),fm(),ld(),hm(),mm(),dd(),gm(),_m()}),Ia=U(()=>{}),hd={};Pt(hd,{default:()=>md});var ci,fi,md,ym=U(()=>{var e;wf(),zt(),Ea(),ci="ort-wasm-proxy-worker",fi=((e=globalThis.self)==null?void 0:e.name)===ci,fi&&(self.onmessage=t=>{let{type:r,in:a}=t.data;
5try{switch(r){case"init-wasm":za(a.wasm).then(()=>{Fa(a).then(()=>{postMessage({type:r})},n=>{postMessage({type:r,err:n})})},n=>{postMessage({type:r,err:n})});break;case"init-ep":{let{epName:n,env:i}=a;Ka(i,n).then(()=>{postMessage({type:r})},s=>{postMessage({type:r,err:s})});break}case"copy-from":{let{buffer:n}=a,i=Wr(n);postMessage({type:r,out:i});break}case"create":{let{model:n,options:i}=a;Za(n,i).then(s=>{postMessage({type:r,out:s})},s=>{postMessage({type:r,err:s})});break}case"release":Qa(a),postMessage({type:r});break;case"run":{let{sessionId:n,inputIndices:i,inputs:s,outputIndices:u,options:d}=a;Xa(n,i,s,u,new Array(u.length).fill(null),d).then(l=>{l.some(c=>c[3]!=="cpu")?postMessage({type:r,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:r,out:l},Ja([...s,...l]))},l=>{postMessage({type:r,err:l})});break}case"end-profiling":Ya(a),postMessage({type:r});break;default:}}catch(n){postMessage({type:r,err:n})}}),md=fi?null:t=>new Worker(t??Be,{type:"module",name:ci})}),gd={};Pt(gd,{default:()=>_d});var hi,mi,_d,_s,bm=U(()=>{var e,t;mi=(hi=import.meta.url,async function(r={}){var hs;var a,n,i=r,s=new Promise((o,p)=>{a=o,n=p}),u=typeof window=="object",d=typeof WorkerGlobalScope<"u",l=d&&((hs=self.name)==null?void 0:hs.startsWith("em-pthread"));i.mountExternalData=(o,p)=>{o.startsWith("./")&&(o=o.substring(2)),(i.Eb||(i.Eb=new Map)).set(o,p)},i.unmountExternalData=()=>{delete i.Eb};var c=globalThis.SharedArrayBuffer??new WebAssembly.Memory({initial:0,maximum:0,pc:!0}).buffer.constructor;let f=o=>async(...p)=>{var h;try{if(i.Fb)throw Error("Session already started");let y=i.Fb={dc:p[0],errors:[]},v=await o(...p);if(i.Fb!==y)throw Error("Session mismatch");(h=i.Jb)==null||h.flush();let I=y.errors;if(0<I.length){let B=await Promise.all(I);if(B=B.filter(M=>M),0<B.length)throw Error(B.join(`
6`))}return v}finally{i.Fb=null}};i.jsepInit=(o,p)=>{if(o==="webgpu"){[i.Jb,i.Ub,i.Yb,i.Kb,i.Xb,i.jb,i.Zb,i.ac,i.Vb,i.Wb,i.$b]=p;let h=i.Jb;i.jsepRegisterBuffer=(y,v,I,B)=>h.registerBuffer(y,v,I,B),i.jsepGetBuffer=y=>h.getBuffer(y),i.jsepCreateDownloader=(y,v,I)=>h.createDownloader(y,v,I),i.jsepOnCreateSession=y=>{h.onCreateSession(y)},i.jsepOnReleaseSession=y=>{h.onReleaseSession(y)},i.jsepOnRunStart=y=>h.onRunStart(y),i.bc=(y,v)=>{h.upload(y,v)}}else if(o==="webnn"){let h=p[0];[i.nc,i.Nb,i.webnnEnsureTensor,i.Ob,i.webnnDownloadTensor]=p.slice(1),i.webnnReleaseTensorId=i.Nb,i.webnnUploadTensor=i.Ob,i.webnnOnRunStart=y=>h.onRunStart(y),i.webnnOnRunEnd=h.onRunEnd.bind(h),i.webnnRegisterMLContext=(y,v)=>{h.registerMLContext(y,v)},i.webnnOnReleaseSession=y=>{h.onReleaseSession(y)},i.webnnCreateMLTensorDownloader=(y,v)=>h.createMLTensorDownloader(y,v),i.webnnRegisterMLTensor=(y,v,I,B)=>h.registerMLTensor(y,v,I,B),i.webnnCreateMLContext=y=>h.createMLContext(y),i.webnnRegisterMLConstant=(y,v,I,B,M,L)=>h.registerMLConstant(y,v,I,B,M,i.Eb,L),i.webnnRegisterGraphInput=h.registerGraphInput.bind(h),i.webnnIsGraphInput=h.isGraphInput.bind(h),i.webnnCreateTemporaryTensor=h.createTemporaryTensor.bind(h),i.webnnIsInt64Supported=h.isInt64Supported.bind(h)}};let m=()=>{let o=(p,h,y)=>(...v)=>{let I=Xe,B=h==null?void 0:h();v=p(...v);let M=h==null?void 0:h();return B!==M&&(p=M,y(B),h=y=null),Xe!=I?new Promise((L,K)=>{ti={resolve:L,reject:K}}):v};(()=>{for(let p of["_OrtAppendExecutionProvider","_OrtCreateSession","_OrtRun","_OrtRunWithBinding","_OrtBindInput"])i[p]=o(i[p],()=>i[p],h=>i[p]=h)})(),f!==void 0&&(i._OrtRun=f(i._OrtRun),i._OrtRunWithBinding=f(i._OrtRunWithBinding)),m=void 0};i.asyncInit=()=>{m==null||m()};var g,_,b=Object.assign({},i),x=(o,p)=>{throw p},w="";(u||d)&&(d?w=self.location.href:typeof document<"u"&&document.currentScript&&(w=document.currentScript.src),hi&&(w=hi),w=w.startsWith("blob:")?"":w.slice(0,w.replace(/[?#].*/,"").lastIndexOf("/")+1),d&&(_=o=>{var p=new XMLHttpRequest;return p.open("GET",o,!1),p.responseType="arraybuffer",p.send(null),new Uint8Array(p.response)}),g=async o=>{if(D(o))return new Promise((h,y)=>{var v=new XMLHttpRequest;v.open("GET",o,!0),v.responseType="arraybuffer",v.onload=()=>{v.status==200||v.status==0&&v.response?h(v.response):y(v.status)},v.onerror=y,v.send(null)});var p=await fetch(o,{credentials:"same-origin"});if(p.ok)return p.arrayBuffer();throw Error(p.status+" : "+p.url)});var $=console.log.bind(console),k=console.error.bind(console),S=$,T=k;Object.assign(i,b),b=null;var E,z,A,O,q,X,H,Q,oe,te,V,W,le,ee=i.wasmBinary,ae=!1,D=o=>o.startsWith("file://");function P(){return E.buffer!=O.buffer&&fe(),O}function j(){return E.buffer!=O.buffer&&fe(),q}function se(){return E.buffer!=O.buffer&&fe(),X}function ke(){return E.buffer!=O.buffer&&fe(),H}function N(){return E.buffer!=O.buffer&&fe(),Q}function me(){return E.buffer!=O.buffer&&fe(),oe}function Ne(){return E.buffer!=O.buffer&&fe(),te}function Ce(){return E.buffer!=O.buffer&&fe(),le}if(l){let o=function(p){try{var h=p.data,y=h.Bb;if(y==="load"){let v=[];self.onmessage=I=>v.push(I),self.startWorker=()=>{postMessage({Bb:"loaded"});for(let I of v)o(I);self.onmessage=o};for(let I of h.Rb)i[I]&&!i[I].proxy||(i[I]=(...B)=>{postMessage({Bb:"callHandler",Qb:I,args:B})},I=="print"&&(S=i[I]),I=="printErr"&&(T=i[I]));E=h.kc,fe(),gt(h.lc)}else if(y==="run"){Df(h.Ab),ni(h.Ab,0,0,1,0,0),un(),Jr(h.Ab),xe||(rs(),xe=!0);try{Nf(h.fc,h.Hb)}catch(v){if(v!="unwind")throw v}}else h.target!=="setimmediate"&&(y==="checkMailbox"?xe&&ur():y&&(T(`worker: received unknown command ${y}`),T(h)))}catch(v){throw is(),v}};var gt,xe=!1;T=function(...p){p=p.join(" "),console.error(p)},self.alert=function(...p){postMessage({Bb:"alert",text:p.join(" "),ic:gr()})},self.onunhandledrejection=p=>{throw p.reason||p},self.onmessage=o}function fe(){var o=E.buffer;i.HEAP8=O=new Int8Array(o),i.HEAP16=X=new Int16Array(o),i.HEAPU8=q=new 
vendor: 7,026 bytes, line 6
6Uint8Array(o),i.HEAPU16=H=new Uint16Array(o),i.HEAP32=Q=new Int32Array(o),i.HEAPU32=oe=new Uint32Array(o),i.HEAPF32=te=new Float32Array(o),i.HEAPF64=le=new Float64Array(o),i.HEAP64=V=new BigInt64Array(o),i.HEAPU64=W=new BigUint64Array(o)}function Ze(){l?startWorker(i):Y.Ca()}l||(E=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0}),fe());var Ut,_t=0,qt=null;function en(){if(--_t==0&&qt){var o=qt;qt=null,o()}}function nt(o){throw T(o="Aborted("+o+")"),ae=!0,o=new WebAssembly.RuntimeError(o+". Build with -sASSERTIONS for more info."),n(o),o}function tn(){return{a:{L:Rf,Aa:Bf,b:Pf,$:cn,A:mn,pa:gn,X:yn,Z:bn,qa:$n,na:wn,ga:vn,ma:xn,J:Sn,Y:kn,V:Tn,oa:In,W:En,va:Uf,E:qf,Q:Wf,O:Vf,D:Hf,u:Gf,r:Ff,P:Kf,z:th,R:rh,ja:ih,T:ah,aa:nh,M:sh,F:oh,ia:Jr,sa:uh,t:lh,Ba:dh,w:fh,o:hh,l:gh,c:Qr,n:_h,j:$h,v:wh,p:vh,f:xh,s:Sh,m:kh,e:Th,k:Ih,i:Eh,g:zh,d:Ch,da:Ah,ea:Oh,fa:Bh,ba:Ln,ca:Vn,N:jn,xa:Dh,ua:Mh,h:Ph,C:Uh,G:qh,ta:Nh,x:Wh,ra:Lh,U:Vh,q:Rh,y:jh,K:Hh,S:Gh,za:Fh,ya:Kh,ka:Kn,la:Zn,_:Gr,B:Qn,I:Xn,ha:Yn,H:Jn,a:E,wa:Hr}}}var Lr={829644:(o,p,h,y,v)=>{if(i===void 0||!i.Eb)return 1;if((o=ve(Number(o>>>0))).startsWith("./")&&(o=o.substring(2)),!(o=i.Eb.get(o)))return 2;if(p=Number(p>>>0),h=Number(h>>>0),y=Number(y>>>0),p+h>o.byteLength)return 3;try{let I=o.subarray(p,p+h);switch(v){case 0:j().set(I,y>>>0);break;case 1:i.mc?i.mc(y,I):i.bc(y,I);break;default:return 4}return 0}catch{return 4}},830468:(o,p,h)=>{i.Ob(o,j().subarray(p>>>0,p+h>>>0))},830532:()=>i.nc(),830574:o=>{i.Nb(o)},830611:()=>{i.Vb()},830642:()=>{i.Wb()},830671:()=>{i.$b()},830696:o=>i.Ub(o),830729:o=>i.Yb(o),830761:(o,p,h)=>{i.Kb(Number(o),Number(p),Number(h),!0)},830824:(o,p,h)=>{i.Kb(Number(o),Number(p),Number(h))},830881:()=>typeof wasmOffsetConverter<"u",830938:o=>{i.jb("Abs",o,void 0)},830989:o=>{i.jb("Neg",o,void 0)},831040:o=>{i.jb("Floor",o,void 0)},831093:o=>{i.jb("Ceil",o,void 0)},831145:o=>{i.jb("Reciprocal",o,void 0)},831203:o=>{i.jb("Sqrt",o,void 0)},831255:o=>{i.jb("Exp",o,void 0)},831306:o=>{i.jb("Erf",o,void 0)},831357:o=>{i.jb("Sigmoid",o,void 0)},831412:(o,p,h)=>{i.jb("HardSigmoid",o,{alpha:p,beta:h})},831491:o=>{i.jb("Log",o,void 0)},831542:o=>{i.jb("Sin",o,void 0)},831593:o=>{i.jb("Cos",o,void 0)},831644:o=>{i.jb("Tan",o,void 0)},831695:o=>{i.jb("Asin",o,void 0)},831747:o=>{i.jb("Acos",o,void 0)},831799:o=>{i.jb("Atan",o,void 0)},831851:o=>{i.jb("Sinh",o,void 0)},831903:o=>{i.jb("Cosh",o,void 0)},831955:o=>{i.jb("Asinh",o,void 0)},832008:o=>{i.jb("Acosh",o,void 0)},832061:o=>{i.jb("Atanh",o,void 0)},832114:o=>{i.jb("Tanh",o,void 0)},832166:o=>{i.jb("Not",o,void 0)},832217:(o,p,h)=>{i.jb("Clip",o,{min:p,max:h})},832286:o=>{i.jb("Clip",o,void 0)},832338:(o,p)=>{i.jb("Elu",o,{alpha:p})},832396:o=>{i.jb("Gelu",o,void 0)},832448:o=>{i.jb("Relu",o,void 0)},832500:(o,p)=>{i.jb("LeakyRelu",o,{alpha:p})},832564:(o,p)=>{i.jb("ThresholdedRelu",o,{alpha:p})},832634:(o,p)=>{i.jb("Cast",o,{to:p})},832692:o=>{i.jb("Add",o,void 0)},832743:o=>{i.jb("Sub",o,void 0)},832794:o=>{i.jb("Mul",o,void 0)},832845:o=>{i.jb("Div",o,void 0)},832896:o=>{i.jb("Pow",o,void 0)},832947:o=>{i.jb("Equal",o,void 0)},833e3:o=>{i.jb("Greater",o,void 0)},833055:o=>{i.jb("GreaterOrEqual",o,void 0)},833117:o=>{i.jb("Less",o,void 0)},833169:o=>{i.jb("LessOrEqual",o,void 0)},833228:(o,p,h,y,v)=>{i.jb("ReduceMean",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},833403:(o,p,h,y,v)=>{i.jb("ReduceMax",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},833577:(o,p,h,y,v)=>{i.jb("ReduceMin",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},833751:(o,p,h,y,v)=>{i.jb("ReduceProd",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},833926:(o,p,h,y,v)=>{i.jb("ReduceSum",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834100:(o,p,h,y,v)=>{i.jb("ReduceL1",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834273:(o,p,h,y,v)=>{i.jb("ReduceL2",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834446:(o,p,h,y,v)=>{i.jb("ReduceLogSum",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834623:(o,p,h,y,v)=>{i.jb("ReduceSumSquare",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834803:(o,p,h,y,v)=>{i.jb("ReduceLogSumExp",o,{keepDims:!!p,noopWithEmptyAxes:!!h,axes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},834983:o=>{i.jb("Where",o,void 0)},835036:(o,p,h)=>{i.jb("Transpose",o,{perm:p?Array.from(N().subarray(Number(p)>>>0,Number(h)>>>0)):[]})},835160:(o,p,h,y)=>{i.jb("DepthToSpace",o,{blocksize:p,mode:ve(h),format:y?"NHWC":"NCHW"})},835293:(o,p,h,y)=>{i.jb("DepthToSpace",o,{blocksize:p,mode:ve(h),format:y?"NHWC":"NCHW"})},835426:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie,Ot)=>{i.jb("ConvTranspose",o,{format:L?"NHWC":"NCHW",autoPad:p,dilations:[h],group:y,kernelShape:[v],pads:[I,B],strides:[M],wIsConst:()=>!!P()[K>>>0],outputPadding:ne?Array.from(N().subarray(Number(ne)>>>0,Number(de)>>>0)):[],outputShape:ge?Array.from(N().subarray(Number(ge)>>>0,Number(Ie)>>>0)):[],activation:ve(Ot)})},835859:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>{i.jb("ConvTranspose",o,{format:M?"NHWC":"NCHW",autoPad:p,dilations:Array.from(N().subarray(Number(h)>>>0,2+(Number(h)>>>0)>>>0)),group:y,kernelShape:Array.from(N().subarray(Number(v)>>>0,2+(Number(v)>>>0)>>>0)),pads:Array.from(N().subarray(Number(I)>>>0,4+(Number(I)>>>0)>>>0)),strides:Array.from(N().subarray(Number(B)>>>0,2+(Number(B)>>>0)>>>0)),wIsConst:()=>!!P()[L>>>0],outputPadding:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],outputShape:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[],activation:ve(Ie)})},836520:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie,Ot)=>{i.jb("ConvTranspose",o,{format:L?"NHWC":"NCHW",autoPad:p,dilations:[h],group:y,kernelShape:[v],pads:[I,B],strides:[M],wIsConst:()=>!!P()[K>>>0],outputPadding:ne?Array.from(N().subarray(Number(ne)>>>0,Number(de)>>>0)):[],outputShape:ge?Array.from(N().subarray(Number(ge)>>>0,Number(Ie)>>>0)):[],activation:ve(Ot)})},836953:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>{i.jb("ConvTranspose",o,{format:M?"NHWC":"NCHW",autoPad:p,dilations:Array.from(N().subarray(Number(h)>>>0,2+(Number(h)>>>0)>>>0)),group:y,kernelShape:Array.from(N().subarray(Number(v)>>>0,2+(Number(v)>>>0)>>>0)),pads:Array.from(N().subarray(Number(I)>>>0,4+(Number(I)>>>0)>>>0)),strides:Array.from(N().subarray(Number(B)>>>0,2+(Number(B)>>>0)>>>0)),wIsConst:()=>!!P()[L>>>0],outputPadding:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],outputShape:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[],activation:ve(Ie)})},837614:(o,p)=>{i.jb("GlobalAveragePool",o,{format:p?"NHWC":"NCHW"})},837705:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>
6{i.jb("AveragePool",o,{format:Ie?"NHWC":"NCHW",auto_pad:p,ceil_mode:h,count_include_pad:y,storage_order:v,dilations:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[],kernel_shape:M?Array.from(N().subarray(Number(M)>>>0,Number(L)>>>0)):[],pads:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],strides:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[]})},838184:(o,p)=>{i.jb("GlobalAveragePool",o,{format:p?"NHWC":"NCHW"})},838275:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>{i.jb("AveragePool",o,{format:Ie?"NHWC":"NCHW",auto_pad:p,ceil_mode:h,count_include_pad:y,storage_order:v,dilations:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[],kernel_shape:M?Array.from(N().subarray(Number(M)>>>0,Number(L)>>>0)):[],pads:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],strides:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[]})},838754:(o,p)=>{i.jb("GlobalMaxPool",o,{format:p?"NHWC":"NCHW"})},838841:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>{i.jb("MaxPool",o,{format:Ie?"NHWC":"NCHW",auto_pad:p,ceil_mode:h,count_include_pad:y,storage_order:v,dilations:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[],kernel_shape:M?Array.from(N().subarray(Number(M)>>>0,Number(L)>>>0)):[],pads:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],strides:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[]})},839316:(o,p)=>{i.jb("GlobalMaxPool",o,{format:p?"NHWC":"NCHW"})},839403:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie)=>
vendor: 5,399 bytes, line 6
6{i.jb("MaxPool",o,{format:Ie?"NHWC":"NCHW",auto_pad:p,ceil_mode:h,count_include_pad:y,storage_order:v,dilations:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[],kernel_shape:M?Array.from(N().subarray(Number(M)>>>0,Number(L)>>>0)):[],pads:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],strides:de?Array.from(N().subarray(Number(de)>>>0,Number(ge)>>>0)):[]})},839878:(o,p,h,y,v)=>{i.jb("Gemm",o,{alpha:p,beta:h,transA:y,transB:v})},839982:o=>{i.jb("MatMul",o,void 0)},840036:(o,p,h,y)=>{i.jb("ArgMax",o,{keepDims:!!p,selectLastIndex:!!h,axis:y})},840144:(o,p,h,y)=>{i.jb("ArgMin",o,{keepDims:!!p,selectLastIndex:!!h,axis:y})},840252:(o,p)=>{i.jb("Softmax",o,{axis:p})},840315:(o,p)=>{i.jb("Concat",o,{axis:p})},840375:(o,p,h,y,v)=>{i.jb("Split",o,{axis:p,numOutputs:h,splitSizes:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},840531:o=>{i.jb("Expand",o,void 0)},840585:(o,p)=>{i.jb("Gather",o,{axis:Number(p)})},840656:(o,p)=>{i.jb("GatherElements",o,{axis:Number(p)})},840735:(o,p)=>{i.jb("GatherND",o,{batch_dims:Number(p)})},840814:(o,p,h,y,v,I,B,M,L,K,ne)=>{i.jb("Resize",o,{antialias:p,axes:h?Array.from(N().subarray(Number(h)>>>0,Number(y)>>>0)):[],coordinateTransformMode:ve(v),cubicCoeffA:I,excludeOutside:B,extrapolationValue:M,keepAspectRatioPolicy:ve(L),mode:ve(K),nearestMode:ve(ne)})},841176:(o,p,h,y,v,I,B)=>{i.jb("Slice",o,{starts:p?Array.from(N().subarray(Number(p)>>>0,Number(h)>>>0)):[],ends:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[],axes:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[]})},841440:o=>{i.jb("Tile",o,void 0)},841492:(o,p,h)=>{i.jb("InstanceNormalization",o,{epsilon:p,format:h?"NHWC":"NCHW"})},841606:(o,p,h)=>{i.jb("InstanceNormalization",o,{epsilon:p,format:h?"NHWC":"NCHW"})},841720:o=>{i.jb("Range",o,void 0)},841773:(o,p)=>{i.jb("Einsum",o,{equation:ve(p)})},841854:(o,p,h,y,v)=>{i.jb("Pad",o,{mode:p,value:h,pads:y?Array.from(N().subarray(Number(y)>>>0,Number(v)>>>0)):[]})},841997:(o,p,h,y,v,I)=>{i.jb("BatchNormalization",o,{epsilon:p,momentum:h,spatial:!!v,trainingMode:!!y,format:I?"NHWC":"NCHW"})},842166:(o,p,h,y,v,I)=>{i.jb("BatchNormalization",o,{epsilon:p,momentum:h,spatial:!!v,trainingMode:!!y,format:I?"NHWC":"NCHW"})},842335:(o,p,h)=>{i.jb("CumSum",o,{exclusive:Number(p),reverse:Number(h)})},842432:(o,p,h)=>{i.jb("DequantizeLinear",o,{axis:p,blockSize:h})},842522:(o,p,h,y,v)=>{i.jb("GridSample",o,{align_corners:p,mode:ve(h),padding_mode:ve(y),format:v?"NHWC":"NCHW"})},842692:(o,p,h,y,v)=>{i.jb("GridSample",o,{align_corners:p,mode:ve(h),padding_mode:ve(y),format:v?"NHWC":"NCHW"})},842862:(o,p)=>{i.jb("ScatterND",o,{reduction:ve(p)})},842947:(o,p,h,y,v,I,B,M,L)=>{i.jb("Attention",o,{numHeads:p,isUnidirectional:h,maskFilterValue:y,scale:v,doRotary:I,qkvHiddenSizes:B?Array.from(N().subarray(Number(M)>>>0,Number(M)+B>>>0)):[],pastPresentShareBuffer:!!L})},843219:o=>{i.jb("BiasAdd",o,void 0)},843274:o=>{i.jb("BiasSplitGelu",o,void 0)},843335:o=>{i.jb("FastGelu",o,void 0)},843391:(o,p,h,y,v,I,B,M,L,K,ne,de,ge,Ie,Ot,Xh)=>{i.jb("Conv",o,{format:de?"NHWC":"NCHW",auto_pad:p,dilations:h?Array.from(N().subarray(Number(h)>>>0,Number(y)>>>0)):[],group:v,kernel_shape:I?Array.from(N().subarray(Number(I)>>>0,Number(B)>>>0)):[],pads:M?Array.from(N().subarray(Number(M)>>>0,Number(L)>>>0)):[],strides:K?Array.from(N().subarray(Number(K)>>>0,Number(ne)>>>0)):[],w_is_const:()=>!!P()[Number(ge)>>>0],activation:ve(Ie),activation_params:Ot?Array.from(Ne().subarray(Number(Ot)>>>0,Number(Xh)>>>0)):[]})},843975:o=>{i.jb("Gelu",o,void 0)},844027:(o,p,h,y,v,I,B,M,L)=>{i.jb("GroupQueryAttention",o,{numHeads:p,kvNumHeads:h,scale:y,softcap:v,doRotary:I,rotaryInterleaved:B,smoothSoftmax:M,localWindowSize:L})},844244:(o,p,h,y)=>{i.jb("LayerNormalization",o,{axis:p,epsilon:h,simplified:!!y})},844355:(o,p,h,y)=>{i.jb("LayerNormalization",o,{axis:p,epsilon:h,simplified:!!y})},844466:(o,p,h,y,v,I)=>{i.jb("MatMulNBits",o,{k:p,n:h,accuracyLevel:y,bits:v,blockSize:I})},844593:(o,p,h,y,v,I)=>{i.jb("MultiHeadAttention",o,{numHeads:p,isUnidirectional:h,maskFilterValue:y,scale:v,doRotary:I})},844752:(o,p)=>{i.jb("QuickGelu",o,{alpha:p})},844816:(o,p,h,y,v)=>{i.jb("RotaryEmbedding",o,{interleaved:!!p,numHeads:h,rotaryEmbeddingDim:y,scale:v})},844955:(o,p,h)=>{i.jb("SkipLayerNormalization",o,{epsilon:p,simplified:!!h})},845057:(o,p,h)=>{i.jb("SkipLayerNormalization",o,{epsilon:p,simplified:!!h})},845159:(o,p,h,y)=>{i.jb("GatherBlockQuantized",o,{gatherAxis:p,quantizeAxis:h,blockSize:y})},845280:o=>{i.Zb(o)},845314:(o,p)=>i.ac(Number(o),Number(p),i.Fb.dc,i.Fb.errors)};function Bf(o,p,h){return Nn(async()=>{await i.Xb(Number(o),Number(p),Number(h))})}function Rf(){return typeof wasmOffsetConverter<"u"}class Vr{constructor(p){ms(this,"name","ExitStatus");this.message=`Program terminated with exit(${p})`,this.status=p}}var rn=o=>{o.terminate(),o.onmessage=()=>{}},jr=[],an=o=>{ot.length==0&&(dn(),ln(ot[0]));var p=ot.pop();if(!p)return 6;Wt.push(p),yt[o.Ab]=p,p.Ab=o.Ab;var h={Bb:"run",fc:o.ec,Hb:o.Hb,Ab:o.Ab};return p.postMessage(h,o.Mb),0},st=0,be=(o,p,...h)=>{for(var y=2*h.length,v=ui(),I=oi(8*y),B=I>>>3,M=0;M<h.length;M++){var L=h[M];typeof L=="bigint"?(V[B+2*M]=1n,V[B+2*M+1]=L):(V[B+2*M]=0n,Ce()[B+2*M+1>>>0]=L)}return o=as(o,0,y,I,p),yr(v),o};function Hr(o){if(l)return be(0,1,o);if(A=o,!(0<st)){for(var p of Wt)rn(p);for(p of ot)rn(p);ot=[],Wt=[],yt={},ae=!0}x(0,new Vr(o))}
6function nn(o){if(l)return be(1,0,o);Gr(o)}var Gr=o=>{if(A=o,l)throw nn(o),"unwind";Hr(o)},ot=[],Wt=[],sn=[],yt={},on=o=>{var p=o.Ab;delete yt[p],ot.push(o),Wt.splice(Wt.indexOf(o),1),o.Ab=0,ns(p)};function un(){sn.forEach(o=>o())}var ln=o=>new Promise(p=>{o.onmessage=v=>{var I=(v=v.data).Bb;if(v.Gb&&v.Gb!=gr()){var B=yt[v.Gb];B?B.postMessage(v,v.Mb):T(`Internal error! Worker sent a message "${I}" to target pthread ${v.Gb}, but that thread no longer exists!`)}else I==="checkMailbox"?ur():I==="spawnThread"?an(v):I==="cleanupThread"?on(yt[v.hc]):I==="loaded"?(o.loaded=!0,p(o)):I==="alert"?alert(`Thread ${v.ic}: ${v.text}`):v.target==="setimmediate"?o.postMessage(v):I==="callHandler"?i[v.Qb](...v.args):I&&T(`worker sent an unknown command ${I}`)},o.onerror=v=>{throw T(`worker sent an error! ${v.filename}:${v.lineno}: ${v.message}`),v};var h,y=[];for(h of[])i.propertyIsEnumerable(h)&&y.push(h);o.postMessage({Bb:"load",Rb:y,kc:E,lc:z})});function dn(){var o=new Worker((()=>{let p=URL;return import.meta.url>"file:"&&import.meta.url<"file;"?new p("ort.bundle.min.mjs",import.meta.url):new URL(import.meta.url)})(),{type:"module",workerData:"em-pthread",name:"em-pthread"});ot.push(o)}var Df=o=>{fe();var p=me()[o+52>>>2>>>0];o=me()[o+56>>>2>>>0],us(p,p-o),yr(p)},Nf=(o,p)=>{st=0,o=ls(o,p),0<st?A=o:si(o)};class Mf{constructor(p){this.Ib=p-24}}function Pf(o,p,h){var y=new Mf(o>>>=0);throw p>>>=0,h>>>=0,me()[y.Ib+16>>>2>>>0]=0,me()[y.Ib+4>>>2>>>0]=p,me()[y.Ib+8>>>2>>>0]=h,o}function pn(o,p,h,y){return l?be(2,1,o,p,h,y):cn(o,p,h,y)}function cn(o,p,h,y){if(o>>>=0,h>>>=0,y>>>=0,c===void 0)return 6;var v=[];return l&&v.length===0?pn(o,p>>>=0,h,y):(o={ec:h,Ab:o,Hb:y,Mb:v},l?(o.Bb="spawnThread",postMessage(o,v),0):an(o))}var fn=typeof TextDecoder<"u"?new TextDecoder:void 0,hn=(o,p=0,h=NaN)=>{var y=(p>>>=0)+h;for(h=p;o[h]&&!(h>=y);)++h;if(16<h-p&&o.buffer&&fn)return fn.decode(o.buffer instanceof ArrayBuffer?o.subarray(p,h):o.slice(p,h));for(y="";p<h;){var v=o[p++];if(128&v){var I=63&o[p++];if((224&v)==192)y+=String.fromCharCode((31&v)<<6|I);else{var B=63&o[p++];65536>(v=(240&v)==224?(15&v)<<12|I<<6|B:(7&v)<<18|I<<12|B<<6|63&o[p++])?y+=String.fromCharCode(v):(v-=65536,y+=String.fromCharCode(55296|v>>10,56320|1023&v))}}else y+=String.fromCharCode(v)}return y},ve=(o,p)=>(o>>>=0)?hn(j(),o,p):"";function mn(o,p,h){return l?be(3,1,o,p,h):0}function gn(o,p){if(l)return be(4,1,o,p)}var _n=o=>{for(var p=0,h=0;h<o.length;++h){var y=o.charCodeAt(h);127>=y?p++:2047>=y?p+=2:55296<=y&&57343>=y?(p+=4,++h):p+=3}return p},At=(o,p,h)=>{var y=j();if(p>>>=0,0<h){var v=p;h=p+h-1;for(var I=0;I<o.length;++I){var B=o.charCodeAt(I);if(55296<=B&&57343>=B&&(B=65536+((1023&B)<<10)|1023&o.charCodeAt(++I)),127>=B){if(p>=h)break;y[p++>>>0]=B}else{if(2047>=B){if(p+1>=h)break;y[p++>>>0]=192|B>>6}else{if(65535>=B){if(p+2>=h)break;y[p++>>>0]=224|B>>12}else{if(p+3>=h)break;y[p++>>>0]=240|B>>18,y[p++>>>0]=128|B>>12&63}y[p++>>>0]=128|B>>6&63}y[p++>>>0]=128|63&B}}y[p>>>0]=0,o=p-v}else o=0;return o};function yn(o,p){if(l)return be(5,1,o,p)}function bn(o,p,h){if(l)return be(6,1,o,p,h)}function $n(o,p,h){return l?be(7,1,o,p,h):0}function wn(o,p){if(l)return be(8,1,o,p)}function vn(o,p,h){if(l)return be(9,1,o,p,h)}function xn(o,p,h,y){if(l)return be(10,1,o,p,h,y)}function Sn(o,p,h,y){if(l)return be(11,1,o,p,h,y)}function kn(o,p,h,y){if(l)return be(12,1,o,p,h,y)}function Tn(o){if(l)return be(13,1,o)}function In(o,p){if(l)return be(14,1,o,p)}function En(o,p,h){if(l)return be(15,1,o,p,h)}var zn,ut,Uf=()=>nt(""),Qe=o=>{for(var p="";j()[o>>>0];)p+=zn[j()[o++>>>0]];return p},Fr={},Kr={};function et(o,p,h={}){return function(y,v,I={}){var B=v.name;if(!y)throw new ut(`type "${B}" must have a positive integer typeid pointer`);if(Kr.hasOwnProperty(y)){if(I.Sb)return;throw new ut(`Cannot register type '${B}' twice`)}Kr[y]=v,Fr.hasOwnProperty(y)&&(v=Fr[y],delete Fr[y],v.forEach(M=>M()))}(o,p,h)}var Cn=(o,p,h)=>{switch(p){case 1:return h?y=>P()[y>>>0]:y=>j()[y>>>0];case 2:return h?y=>se()[y>>>1>>>0]:y=>ke()[y>>>1>>>0];case 4:return h?y=>N()[y>>>2>>>0]:y=>me()[y>>>2>>>0];case 8:return h?y=>V[y>>>3]:y=>W[y>>>3];default:throw new TypeError(`invalid integer width (${p}): ${o}`)}};function qf(o,p,h){h>>>=0,et(o>>>=0,{name:p=Qe(p>>>0),fromWireType:y=>y,toWireType:function(y,v){if(typeof v!="bigint"&&typeof v!="number")throw v=v===null?"null":(y=typeof v)=="object"||y==="array"||y==="function"?v.toString():""+v,new TypeError(`Cannot convert "${v}" to ${this.name}`);return typeof v=="number"&&(v=BigInt(v)),v},Cb:lt,readValueFromPointer:Cn(p,h,p.indexOf("u")==-1),Db:null})}var lt=8;function Wf(o,p,h,y){et(o>>>=0,{name:p=Qe(p>>>0),fromWireType:function(v){return!!v},toWireType:function(v,I){return I?h:y},Cb:lt,readValueFromPointer:function(v){return this.fromWireType(j()[v>>>0])},Db:null})}var Zr=[],tt=[];function Qr(o){9<(o>>>=0)&&--tt[o+1]==0&&(tt[o]=void 0,Zr.push(o))}var Oe=o=>
6{if(!o)throw new ut("Cannot use deleted val. handle = "+o);return tt[o]},Me=o=>{switch(o){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let p=Zr.pop()||tt.length;return tt[p]=o,tt[p+1]=1,p}};function Xr(o){return this.fromWireType(me()[o>>>2>>>0])}var Lf={name:"emscripten::val",fromWireType:o=>{var p=Oe(o);return Qr(o),p},toWireType:(o,p)=>Me(p),Cb:lt,readValueFromPointer:Xr,Db:null};function Vf(o){return et(o>>>0,Lf)}var jf=(o,p)=>{switch(p){case 4:return function(h){return this.fromWireType(Ne()[h>>>2>>>0])};case 8:return function(h){return this.fromWireType(Ce()[h>>>3>>>0])};default:throw new TypeError(`invalid float width (${p}): ${o}`)}};function Hf(o,p,h){h>>>=0,et(o>>>=0,{name:p=Qe(p>>>0),fromWireType:y=>y,toWireType:(y,v)=>v,Cb:lt,readValueFromPointer:jf(p,h),Db:null})}function Gf(o,p,h,y,v){if(o>>>=0,h>>>=0,p=Qe(p>>>0),v===-1&&(v=4294967295),v=M=>M,y===0){var I=32-8*h;v=M=>M<<I>>>I}var B=p.includes("unsigned")?function(M,L){return L>>>0}:function(M,L){return L};et(o,{name:p,fromWireType:v,toWireType:B,Cb:lt,readValueFromPointer:Cn(p,h,y!==0),Db:null})}function Ff(o,p,h){function y(I){var B=me()[I>>>2>>>0];return I=me()[I+4>>>2>>>0],new v(P().buffer,I,B)}var v=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][p];et(o>>>=0,{name:h=Qe(h>>>0),fromWireType:y,Cb:lt,readValueFromPointer:y},{Sb:!0})}function Kf(o,p){et(o>>>=0,{name:p=Qe(p>>>0),fromWireType:function(h){for(var y,v=me()[h>>>2>>>0],I=h+4,B=I,M=0;M<=v;++M){var L=I+M;M!=v&&j()[L>>>0]!=0||(B=ve(B,L-B),y===void 0?y=B:(y+="\0",y+=B),B=L+1)}return Ye(h),y},toWireType:function(h,y){y instanceof ArrayBuffer&&(y=new Uint8Array(y));var v=typeof y=="string";if(!(v||y instanceof Uint8Array||y instanceof Uint8ClampedArray||y instanceof Int8Array))throw new ut("Cannot pass non-string to std::string");var I=v?_n(y):y.length,B=_r(4+I+1),M=B+4;if(me()[B>>>2>>>0]=I,v)At(y,M,I+1);else if(v)for(v=0;v<I;++v){var L=y.charCodeAt(v);if(255<L)throw Ye(B),new ut("String has UTF-16 code units that do not fit in 8 bits");j()[M+v>>>0]=L}else for(v=0;v<I;++v)j()[M+v>>>0]=y[v];return h!==null&&h.push(Ye,B),B},Cb:lt,readValueFromPointer:Xr,Db(h){Ye(h)}})}var An=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,Zf=(o,p)=>{for(var h=o>>1,y=h+p/2;!(h>=y)&&ke()[h>>>0];)++h;if(32<(h<<=1)-o&&An)return An.decode(j().slice(o,h));for(h="",y=0;!(y>=p/2);++y){var v=se()[o+2*y>>>1>>>0];if(v==0)break;h+=String.fromCharCode(v)}return h},Qf=(o,p,h)=>{if(h??(h=2147483647),2>h)return 0;var y=p;h=(h-=2)<2*o.length?h/2:o.length;for(var v=0;v<h;++v){var I=o.charCodeAt(v);se()[p>>>1>>>0]=I,p+=2}return se()[p>>>1>>>0]=0,p-y},Xf=o=>2*o.length,Yf=(o,p)=>{for(var h=0,y="";!(h>=p/4);){var v=N()[o+4*h>>>2>>>0];if(v==0)break;++h,65536<=v?(v-=65536,y+=String.fromCharCode(55296|v>>10,56320|1023&v)):y+=String.fromCharCode(v)}return y},Jf=(o,p,h)=>{if(p>>>=0,h??(h=2147483647),4>h)return 0;var y=p;h=y+h-4;for(var v=0;v<o.length;++v){var I=o.charCodeAt(v);if(55296<=I&&57343>=I&&(I=65536+((1023&I)<<10)|1023&o.charCodeAt(++v)),N()[p>>>2>>>0]=I,(p+=4)+4>h)break}return N()[p>>>2>>>0]=0,p-y},eh=o=>{for(var p=0,h=0;h<o.length;++h){var y=o.charCodeAt(h);55296<=y&&57343>=y&&++h,p+=4}return p};function th(o,p,h){if(o>>>=0,p>>>=0,h=Qe(h>>>=0),p===2)var y=Zf,v=Qf,I=Xf,B=M=>ke()[M>>>1>>>0];else p===4&&(y=Yf,v=Jf,I=eh,B=M=>me()[M>>>2>>>0]);et(o,{name:h,fromWireType:M=>{for(var L,K=me()[M>>>2>>>0],ne=M+4,de=0;de<=K;++de){var ge=M+4+de*p;de!=K&&B(ge)!=0||(ne=y(ne,ge-ne),L===void 0?L=ne:(L+="\0",L+=ne),ne=ge+p)}return Ye(M),L},toWireType:(M,L)=>{if(typeof L!="string")throw new ut(`Cannot pass non-string to C++ string type ${h}`);var K=I(L),ne=_r(4+K+p);return me()[ne>>>2>>>0]=K/p,v(L,ne+4,K+p),M!==null&&M.push(Ye,ne),ne},Cb:lt,readValueFromPointer:Xr,Db(M){Ye(M)}})}function rh(o,p){et(o>>>=0,{Tb:!0,name:p=Qe(p>>>0),Cb:0,fromWireType:()=>{},toWireType:()=>{}})}function ih(o){ni(o>>>0,!d,1,!u,131072,!1),un()}var Yr=o=>{if(!ae)try{if(o(),!(0<st))try{l?si(A):Gr(A)}catch(p){p instanceof Vr||p=="unwind"||x(0,p)}}catch(p){p instanceof Vr||p=="unwind"||x(0,p)}};function Jr(o){o>>>
6=0,typeof Atomics.jc=="function"&&(Atomics.jc(N(),o>>>2,o).value.then(ur),o+=128,Atomics.store(N(),o>>>2,1))}var ur=()=>{var o=gr();o&&(Jr(o),Yr(os))};function ah(o,p){(o>>>=0)==p>>>0?setTimeout(ur):l?postMessage({Gb:o,Bb:"checkMailbox"}):(o=yt[o])&&o.postMessage({Bb:"checkMailbox"})}var ei=[];function nh(o,p,h,y,v){for(p>>>=0,y/=2,ei.length=y,h=v>>>0>>>3,v=0;v<y;v++)ei[v]=V[h+2*v]?V[h+2*v+1]:Ce()[h+2*v+1>>>0];return(p?Lr[p]:Qh[o])(...ei)}var sh=()=>{st=0};function oh(o){o>>>=0,l?postMessage({Bb:"cleanupThread",hc:o}):on(yt[o])}function uh(o){}var lr=(o,p)=>{var h=Kr[o];if(h===void 0)throw o=ts(o),h=Qe(o),Ye(o),new ut(`${p} has unknown type ${h}`);return h},On=(o,p,h)=>{var y=[];return o=o.toWireType(y,h),y.length&&(me()[p>>>2>>>0]=Me(y)),o};function lh(o,p,h){return p>>>=0,h>>>=0,o=Oe(o>>>0),p=lr(p,"emval::as"),On(p,h,o)}function dh(o,p){return p>>>=0,o=Oe(o>>>0),(p=lr(p,"emval::as")).toWireType(null,o)}var dr=o=>{try{o()}catch(p){nt(p)}},dt=0,Xe=null,Bn=0,pr=[],Rn={},Dn={},ph=0,ti=null,ch=[];function Nn(o){return function(p){if(!ae){if(dt===0){var h=!1,y=!1;p((v=0)=>{if(!ae&&(Bn=v,h=!0,y)){dt=2,dr(()=>cs(Xe)),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.resume(),v=!1;try{var I=function(){var L=N()[Xe+8>>>2>>>0];return L=Y[Dn[L]],--st,L()}()}catch(L){I=L,v=!0}var B=!1;if(!Xe){var M=ti;M&&(ti=null,(v?M.reject:M.resolve)(I),B=!0)}if(v&&!B)throw I}}),y=!0,h||(dt=1,Xe=function(){var v=_r(65548),I=v+12;me()[v>>>2>>>0]=I,me()[v+4>>>2>>>0]=I+65536,I=pr[0];var B=Rn[I];return B===void 0&&(B=ph++,Rn[I]=B,Dn[B]=I),I=B,N()[v+8>>>2>>>0]=I,v}(),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.pause(),dr(()=>ds(Xe)))}
vendor: 4,577 bytes, lines 6-11
6else dt===2?(dt=0,dr(fs),Ye(Xe),Xe=null,ch.forEach(Yr)):nt(`invalid state: ${dt}`);return Bn}}(p=>{o().then(p)})}function fh(o){return o>>>=0,Nn(async()=>{var p=await Oe(o);return Me(p)})}var cr=[];function hh(o,p,h,y){return h>>>=0,y>>>=0,(o=cr[o>>>0])(null,p=Oe(p>>>0),h,y)}var mh={},fr=o=>{var p=mh[o];return p===void 0?Qe(o):p};function gh(o,p,h,y,v){return h>>>=0,y>>>=0,v>>>=0,(o=cr[o>>>0])(p=Oe(p>>>0),p[h=fr(h)],y,v)}var Mn=()=>globalThis;function _h(o){return(o>>>=0)==0?Me(Mn()):(o=fr(o),Me(Mn()[o]))}var yh=o=>{var p=cr.length;return cr.push(o),p},bh=(o,p)=>{for(var h=Array(o),y=0;y<o;++y)h[y]=lr(me()[p+4*y>>>2>>>0],"parameter "+y);return h},Pn=(o,p)=>Object.defineProperty(p,"name",{value:o});function $h(o,p,h){var y=(p=bh(o,p>>>0)).shift();o--;var v=`return function (obj, func, destructorsRef, args) {
7`,I=0,B=[];h===0&&B.push("obj");for(var M=["retType"],L=[y],K=0;K<o;++K)B.push("arg"+K),M.push("argType"+K),L.push(p[K]),v+=`  var arg${K} = argType${K}.readValueFromPointer(args${I?"+"+I:""});
8`,I+=p[K].Cb;return v+=`  var rv = ${h===1?"new func":"func.call"}(${B.join(", ")});
9`,y.Tb||(M.push("emval_returnValue"),L.push(On),v+=`  return emval_returnValue(retType, destructorsRef, rv);
10`),M.push(v+`};
11`),o=function(ne){var de=Function;if(!(de instanceof Function))throw new TypeError(`new_ called with constructor type ${typeof de} which is not a function`);var ge=Pn(de.name||"unknownFunctionName",function(){});return ge.prototype=de.prototype,ge=new ge,(ne=de.apply(ge,ne))instanceof Object?ne:ge}(M)(...L),h=`methodCaller<(${p.map(ne=>ne.name).join(", ")}) => ${y.name}>`,yh(Pn(h,o))}function wh(o){return o=fr(o>>>0),Me(i[o])}function vh(o,p){return p>>>=0,o=Oe(o>>>0),p=Oe(p),Me(o[p])}function xh(o){9<(o>>>=0)&&(tt[o+1]+=1)}function Sh(){return Me([])}function kh(o){o=Oe(o>>>0);for(var p=Array(o.length),h=0;h<o.length;h++)p[h]=o[h];return Me(p)}function Th(o){return Me(fr(o>>>0))}function Ih(){return Me({})}function Eh(o){for(var p=Oe(o>>>=0);p.length;){var h=p.pop();p.pop()(h)}Qr(o)}function zh(o,p,h){p>>>=0,h>>>=0,o=Oe(o>>>0),p=Oe(p),h=Oe(h),o[p]=h}function Ch(o,p){return p>>>=0,o=(o=lr(o>>>0,"_emval_take_value")).readValueFromPointer(p),Me(o)}function Ah(o,p){o=-9007199254740992>o||9007199254740992<o?NaN:Number(o),p>>>=0,o=new Date(1e3*o),N()[p>>>2>>>0]=o.getUTCSeconds(),N()[p+4>>>2>>>0]=o.getUTCMinutes(),N()[p+8>>>2>>>0]=o.getUTCHours(),N()[p+12>>>2>>>0]=o.getUTCDate(),N()[p+16>>>2>>>0]=o.getUTCMonth(),N()[p+20>>>2>>>0]=o.getUTCFullYear()-1900,N()[p+24>>>2>>>0]=o.getUTCDay(),o=(o.getTime()-Date.UTC(o.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,N()[p+28>>>2>>>0]=o}var Un=o=>o%4==0&&(o%100!=0||o%400==0),qn=[0,31,60,91,121,152,182,213,244,274,305,335],Wn=[0,31,59,90,120,151,181,212,243,273,304,334];function Oh(o,p){o=-9007199254740992>o||9007199254740992<o?NaN:Number(o),p>>>=0,o=new Date(1e3*o),N()[p>>>2>>>0]=o.getSeconds(),N()[p+4>>>2>>>0]=o.getMinutes(),N()[p+8>>>2>>>0]=o.getHours(),N()[p+12>>>2>>>0]=o.getDate(),N()[p+16>>>2>>>0]=o.getMonth(),N()[p+20>>>2>>>0]=o.getFullYear()-1900,N()[p+24>>>2>>>0]=o.getDay();var h=(Un(o.getFullYear())?qn:Wn)[o.getMonth()]+o.getDate()-1|0;N()[p+28>>>2>>>0]=h,N()[p+36>>>2>>>0]=-60*o.getTimezoneOffset(),h=new Date(o.getFullYear(),6,1).getTimezoneOffset();var y=new Date(o.getFullYear(),0,1).getTimezoneOffset();o=0|(h!=y&&o.getTimezoneOffset()==Math.min(y,h)),N()[p+32>>>2>>>0]=o}function Bh(o){o>>>=0;var p=new Date(N()[o+20>>>2>>>0]+1900,N()[o+16>>>2>>>0],N()[o+12>>>2>>>0],N()[o+8>>>2>>>0],N()[o+4>>>2>>>0],N()[o>>>2>>>0],0),h=N()[o+32>>>2>>>0],y=p.getTimezoneOffset(),v=new Date(p.getFullYear(),6,1).getTimezoneOffset(),I=new Date(p.getFullYear(),0,1).getTimezoneOffset(),B=Math.min(I,v);return 0>h?N()[o+32>>>2>>>0]=+(v!=I&&B==y):0<h!=(B==y)&&(v=Math.max(I,v),p.setTime(p.getTime()+6e4*((0<h?B:v)-y))),N()[o+24>>>2>>>0]=p.getDay(),h=(Un(p.getFullYear())?qn:Wn)[p.getMonth()]+p.getDate()-1|0,N()[o+28>>>2>>>0]=h,N()[o>>>2>>>0]=p.getSeconds(),N()[o+4>>>2>>>0]=p.getMinutes(),N()[o+8>>>2>>>0]=p.getHours(),N()[o+12>>>2>>>0]=p.getDate(),N()[o+16>>>2>>>0]=p.getMonth(),N()[o+20>>>2>>>0]=p.getYear(),o=p.getTime(),BigInt(isNaN(o)?-1:o/1e3)}function Ln(o,p,h,y,v,I,B){return l?be(16,1,o,p,h,y,v,I,B):-52}function Vn(o,p,h,y,v,I){if(l)return be(17,1,o,p,h,y,v,I)}var Lt={},Rh=()=>performance.timeOrigin+performance.now();function jn(o,p){if(l)return be(18,1,o,p);if(Lt[o]&&(clearTimeout(Lt[o].id),delete Lt[o]),!p)return 0;var h=setTimeout(()=>{delete Lt[o],Yr(()=>ss(o,performance.timeOrigin+performance.now()))},p);return Lt[o]={id:h,qc:p},0}function Dh(o,p,h,y){o>>>=0,p>>>=0,h>>>=0,y>>>=0;
11var v=new Date().getFullYear(),I=new Date(v,0,1).getTimezoneOffset();v=new Date(v,6,1).getTimezoneOffset();var B=Math.max(I,v);me()[o>>>2>>>0]=60*B,N()[p>>>2>>>0]=+(I!=v),o=(p=M=>{var L=Math.abs(M);return`UTC${0<=M?"-":"+"}${String(Math.floor(L/60)).padStart(2,"0")}${String(L%60).padStart(2,"0")}`})(I),p=p(v),v<I?(At(o,h,17),At(p,y,17)):(At(o,y,17),At(p,h,17))}var Nh=()=>Date.now();function Mh(o,p,h){return 0<=o&&3>=o?(o===0?o=Date.now():o=performance.timeOrigin+performance.now(),V[h>>>0>>>3]=BigInt(Math.round(1e6*o)),0):28}var ri=[],Hn=(o,p)=>{ri.length=0;for(var h;h=j()[o++>>>0];){var y=h!=105;p+=(y&=h!=112)&&p%8?4:0,ri.push(h==112?me()[p>>>2>>>0]:h==106?V[p>>>3]:h==105?N()[p>>>2>>>0]:Ce()[p>>>3>>>0]),p+=y?8:4}return ri};function Ph(o,p,h){return o>>>=0,p=Hn(p>>>0,h>>>0),Lr[o](...p)}function Uh(o,p,h){return o>>>=0,p=Hn(p>>>0,h>>>0),Lr[o](...p)}var qh=()=>{};function Wh(o,p){return T(ve(o>>>0,p>>>0))}var Lh=()=>{throw st+=1,"unwind"};function Vh(){return 4294901760}var jh=()=>navigator.hardwareConcurrency;function Hh(){return nt("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER"),0}function Gh(o){o>>>=0;var p=j().length;if(o<=p||4294901760<o)return!1;for(var h=1;4>=h;h*=2){var y=p*(1+.2/h);y=Math.min(y,o+100663296);e:{y=(Math.min(4294901760,65536*Math.ceil(Math.max(o,y)/65536))-E.buffer.byteLength+65535)/65536|0;try{E.grow(y),fe();var v=1;break e}catch{}v=void 0}if(v)return!0}return!1}var hr=()=>(nt("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0),Vt={},Gn=o=>{o.forEach(p=>{hr()})};function Fh(){var o=Error().stack.toString().split(`
12`);return o[0]=="Error"&&o.shift(),Gn(o),Vt.Lb=hr(),Vt.cc=o,Vt.Lb}function Kh(o,p,h){if(o>>>=0,p>>>=0,Vt.Lb==o)var y=Vt.cc;else(y=Error().stack.toString().split(`
13`))[0]=="Error"&&y.shift(),Gn(y);for(var v=3;y[v]&&hr()!=o;)++v;for(o=0;o<h&&y[o+v];++o)N()[p+4*o>>>2>>>0]=hr();return o}var ii,ai={},Fn=()=>{if(!ii){var o,p={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"};for(o in ai)ai[o]===void 0?delete p[o]:p[o]=ai[o];var h=[];for(o in p)h.push(`${o}=${p[o]}`);ii=h}return ii};function Kn(o,p){if(l)return be(19,1,o,p);o>>>=0,p>>>=0;var h=0;return Fn().forEach((y,v)=>{var I=p+h;for(v=me()[o+4*v>>>2>>>0]=I,I=0;I<y.length;++I)P()[v++>>>0]=y.charCodeAt(I);P()[v>>>0]=0,h+=y.length+1}),0}function Zn(o,p){if(l)return be(20,1,o,p);o>>>=0,p>>>=0;var h=Fn();me()[o>>>2>>>0]=h.length;var y=0;return h.forEach(v=>y+=v.length+1),me()[p>>>2>>>0]=y,0}function Qn(o){return l?be(21,1,o):52}function Xn(o,p,h,y){return l?be(22,1,o,p,h,y):52}function Yn(o,p,h,y){return l?be(23,1,o,p,h,y):70}var Zh=[null,[],[]];function Jn(o,p,h,y){if(l)return be(24,1,o,p,h,y);p>>>=0,h>>>=0,y>>>=0;for(var v=0,I=0;I<h;I++){var B=me()[p>>>2>>>0],M=me()[p+4>>>2>>>0];p+=8;for(var L=0;L<M;L++){var K=j()[B+L>>>0],ne=Zh[o];K===0||K===10?((o===1?S:T)(hn(ne)),ne.length=0):ne.push(K)}v+=M}return me()[y>>>2>>>0]=v,0}l||function(){for(var o=i.numThreads-1;o--;)dn();jr.unshift(()=>{_t++,function(p){l?p():Promise.all(ot.map(ln)).then(p)}(()=>en())})}();for(var es=Array(256),mr=0;256>mr;++mr)es[mr]=String.fromCharCode(mr);zn=es,ut=i.BindingError=class extends Error{constructor(o){super(o),this.name="BindingError"}},i.InternalError=class extends Error{constructor(o){super(o),this.name="InternalError"}},tt.push(0,1,void 0,1,null,1,!0,1,!1,1),i.count_emval_handles=()=>tt.length/2-5-Zr.length;var Y,Qh=[Hr,nn,pn,mn,gn,yn,bn,$n,wn,vn,xn,Sn,kn,Tn,In,En,Ln,Vn,jn,Kn,Zn,Qn,Xn,Yn,Jn];(async function(){function o(y,v){return Y=y.exports,Y=function(){var I=Y,B={};for(let[M,L]of Object.entries(I))B[M]=typeof L=="function"?(...K)=>{pr.push(M);try{return L(...K)}finally{ae||(pr.pop(),Xe&&dt===1&&pr.length===0&&(dt=0,st+=1,dr(ps),typeof Fibers<"u"&&Fibers.rc()))}}:L;return B}(),Y=function(){var I=Y,B=L=>K=>L(K)>>>0,M=L=>()=>L()>>>0;return(I=Object.assign({},I)).Da=B(I.Da),I.fb=M(I.fb),I.hb=B(I.hb),I.tb=B(I.tb),I.ub=M(I.ub),I.__cxa_get_exception_ptr=B(I.__cxa_get_exception_ptr),I}(),sn.push(Y.ib),z=v,en(),Y}_t++;var p=tn();if(i.instantiateWasm)return new Promise(y=>{i.instantiateWasm(p,(v,I)=>{o(v,I),y(v.exports)})});if(l)return new Promise(y=>{gt=v=>
vendor: 4,113 bytes, line 13
13{var I=new WebAssembly.Instance(v,tn());y(o(I,v))}});Ut??(Ut=i.locateFile?i.locateFile?i.locateFile("ort-wasm-simd-threaded.jsep.wasm",w):w+"ort-wasm-simd-threaded.jsep.wasm":new URL("/assets/ort-wasm-simd-threaded.jsepB0T3yYHD.wasm",import.meta.url).href);try{var h=await async function(y){var v=Ut;if(!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!D(v))try{var I=fetch(v,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(I,y)}catch(B){T(`wasm streaming compile failed: ${B}`),T("falling back to ArrayBuffer instantiation")}return async function(B,M){try{var L=await async function(K){if(!ee)try{var ne=await g(K);return new Uint8Array(ne)}catch{}if(K==Ut&&ee)K=new Uint8Array(ee);else{if(!_)throw"both async and sync fetching of the wasm failed";K=_(K)}return K}(B);return await WebAssembly.instantiate(L,M)}catch(K){T(`failed to asynchronously prepare wasm: ${K}`),nt(K)}}(v,y)}(p);return o(h.instance,h.module)}catch(y){return n(y),Promise.reject(y)}})();var ts=o=>(ts=Y.Da)(o),rs=()=>(rs=Y.Ea)();i._OrtInit=(o,p)=>(i._OrtInit=Y.Fa)(o,p),i._OrtGetLastError=(o,p)=>(i._OrtGetLastError=Y.Ga)(o,p),i._OrtCreateSessionOptions=(o,p,h,y,v,I,B,M,L,K)=>(i._OrtCreateSessionOptions=Y.Ha)(o,p,h,y,v,I,B,M,L,K),i._OrtAppendExecutionProvider=(o,p,h,y,v)=>(i._OrtAppendExecutionProvider=Y.Ia)(o,p,h,y,v),i._OrtAddFreeDimensionOverride=(o,p,h)=>(i._OrtAddFreeDimensionOverride=Y.Ja)(o,p,h),i._OrtAddSessionConfigEntry=(o,p,h)=>(i._OrtAddSessionConfigEntry=Y.Ka)(o,p,h),i._OrtReleaseSessionOptions=o=>(i._OrtReleaseSessionOptions=Y.La)(o),i._OrtCreateSession=(o,p,h)=>(i._OrtCreateSession=Y.Ma)(o,p,h),i._OrtReleaseSession=o=>(i._OrtReleaseSession=Y.Na)(o),i._OrtGetInputOutputCount=(o,p,h)=>(i._OrtGetInputOutputCount=Y.Oa)(o,p,h),i._OrtGetInputOutputMetadata=(o,p,h,y)=>(i._OrtGetInputOutputMetadata=Y.Pa)(o,p,h,y),i._OrtFree=o=>(i._OrtFree=Y.Qa)(o),i._OrtCreateTensor=(o,p,h,y,v,I)=>(i._OrtCreateTensor=Y.Ra)(o,p,h,y,v,I),i._OrtGetTensorData=(o,p,h,y,v)=>(i._OrtGetTensorData=Y.Sa)(o,p,h,y,v),i._OrtReleaseTensor=o=>(i._OrtReleaseTensor=Y.Ta)(o),i._OrtCreateRunOptions=(o,p,h,y)=>(i._OrtCreateRunOptions=Y.Ua)(o,p,h,y),i._OrtAddRunConfigEntry=(o,p,h)=>(i._OrtAddRunConfigEntry=Y.Va)(o,p,h),i._OrtReleaseRunOptions=o=>(i._OrtReleaseRunOptions=Y.Wa)(o),i._OrtCreateBinding=o=>(i._OrtCreateBinding=Y.Xa)(o),i._OrtBindInput=(o,p,h)=>(i._OrtBindInput=Y.Ya)(o,p,h),i._OrtBindOutput=(o,p,h,y)=>(i._OrtBindOutput=Y.Za)(o,p,h,y),i._OrtClearBoundOutputs=o=>(i._OrtClearBoundOutputs=Y._a)(o),i._OrtReleaseBinding=o=>(i._OrtReleaseBinding=Y.$a)(o),i._OrtRunWithBinding=(o,p,h,y,v)=>(i._OrtRunWithBinding=Y.ab)(o,p,h,y,v),i._OrtRun=(o,p,h,y,v,I,B,M)=>(i._OrtRun=Y.bb)(o,p,h,y,v,I,B,M),i._OrtEndProfiling=o=>(i._OrtEndProfiling=Y.cb)(o),i._JsepOutput=(o,p,h)=>(i._JsepOutput=Y.db)(o,p,h),i._JsepGetNodeName=o=>(i._JsepGetNodeName=Y.eb)(o);var gr=()=>(gr=Y.fb)(),Ye=i._free=o=>(Ye=i._free=Y.gb)(o),_r=i._malloc=o=>(_r=i._malloc=Y.hb)(o),ni=(o,p,h,y,v,I)=>(ni=Y.kb)(o,p,h,y,v,I),is=()=>(is=Y.lb)(),as=(o,p,h,y,v)=>(as=Y.mb)(o,p,h,y,v),ns=o=>(ns=Y.nb)(o),si=o=>(si=Y.ob)(o),ss=(o,p)=>(ss=Y.pb)(o,p),os=()=>(os=Y.qb)(),us=(o,p)=>(us=Y.rb)(o,p),yr=o=>(yr=Y.sb)(o),oi=o=>(oi=Y.tb)(o),ui=()=>(ui=Y.ub)(),ls=i.dynCall_ii=(o,p)=>(ls=i.dynCall_ii=Y.vb)(o,p),ds=o=>(ds=Y.wb)(o),ps=()=>(ps=Y.xb)(),cs=o=>(cs=Y.yb)(o),fs=()=>(fs=Y.zb)();return i.stackSave=()=>ui(),i.stackRestore=o=>yr(o),i.stackAlloc=o=>oi(o),i.setValue=function(o,p,h="i8"){switch(h.endsWith("*")&&(h="*"),h){case"i1":case"i8":P()[o>>>0]=p;break;case"i16":se()[o>>>1>>>0]=p;break;case"i32":N()[o>>>2>>>0]=p;break;case"i64":V[o>>>3]=BigInt(p);break;case"float":Ne()[o>>>2>>>0]=p;break;case"double":Ce()[o>>>3>>>0]=p;break;case"*":me()[o>>>2>>>0]=p;break;default:nt(`invalid type for setValue: ${h}`)}},i.getValue=function(o,p="i8"){switch(p.endsWith("*")&&(p="*"),p){case"i1":case"i8":return P()[o>>>0];case"i16":return se()[o>>>1>>>0];case"i32":return N()[o>>>2>>>0];case"i64":return V[o>>>3];case"float":return Ne()[o>>>2>>>0];case"double":return Ce()[o>>>3>>>0];case"*":return me()[o>>>2>>>0];default:nt(`invalid type for getValue: ${p}`)}}
13,i.UTF8ToString=ve,i.stringToUTF8=At,i.lengthBytesUTF8=_n,function o(){if(0<_t)qt=o;else if(l)a(i),Ze();else{for(;0<jr.length;)jr.shift()(i);0<_t?qt=o:(i.calledRun=!0,ae||(Ze(),a(i)))}}(),i.PTR_SIZE=4,s}),_d=mi,_s=(t=(e=globalThis.self)==null?void 0:e.name)==null?void 0:t.startsWith("em-pthread"),_s&&mi()}),gi,ua,ys,Be,yd,$r,bs,$s,_i,ws,yi,bd,bi,$d,Ea=U(()=>{Ia(),gi=typeof location>"u"?void 0:location.origin,ua=import.meta.url>"file:"&&import.meta.url<"file;",ys=()=>{{if(ua){let e=URL;return new URL(new e("ort.bundle.min.mjs",import.meta.url).href,gi).href}return import.meta.url}},Be=ys(),yd=()=>{if(Be&&!Be.startsWith("blob:"))return Be.substring(0,Be.lastIndexOf("/")+1)},$r=(e,t)=>{try{let r=t??Be;return(r?new URL(e,r):new URL(e)).origin===gi}catch{return!1}},bs=(e,t)=>{let r=t??Be;try{return(r?new URL(e,r):new URL(e)).href}catch{return}},$s=(e,t)=>`${t??"./"}${e}`,_i=async e=>{let t=await(await fetch(e,{credentials:"same-origin"})).blob();return URL.createObjectURL(t)},ws=async e=>(await import(e)).default,yi=(ym(),nr(hd)).default,bd=async()=>{if(!Be)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if($r(Be))return[void 0,yi()];let e=await _i(Be);return[e,yi(e)]},bi=(bm(),nr(gd)).default,$d=async(e,t,r)=>{if(!e&&!t&&bi&&Be&&$r(Be))return[void 0,bi];{let a="ort-wasm-simd-threaded.jsep.mjs",n=e??bs(a,t),i=r&&n&&!$r(n,t),s=i?await _i(n):n??$s(a,t);return[i?s:void 0,await ws(s)]}}}),$i,wr,Ht,wi,vs,xs,Ss,za,_e,zt=U(()=>{Ea(),wr=!1,Ht=!1,wi=!1,vs=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},xs=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},Ss=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},za=async e=>{if(wr)return Promise.resolve();if(Ht)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(wi)throw new Error("previous call to 'initializeWebAssembly()' failed.");Ht=!0;let t=e.initTimeout,r=e.numThreads;if(e.simd!==!1){if(e.simd==="relaxed"){if(!Ss())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!xs())throw new Error("WebAssembly SIMD is not supported in the current environment.")}let a=vs();r>1&&!a&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+r+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),e.numThreads=r=1);let n=e.wasmPaths,i=typeof n=="string"?n:void 0,s=n==null?void 0:n.mjs,u=(s==null?void 0:s.href)??s,d=n==null?void 0:n.wasm,l=(d==null?void 0:d.href)??d,c=e.wasmBinary,[f,m]=await $d(u,i,r>1),g=!1,_=[];if(t>0&&_.push(new Promise(b=>{setTimeout(()=>{g=!0,b()},t)})),_.push(new Promise((b,x)=>{let w={numThreads:r};if(c)w.wasmBinary=c;else if(l||i)w.locateFile=$=>l??i+$;else if(u&&u.indexOf("blob:")!==0)w.locateFile=$=>new URL($,u).href;else if(f){let $=yd();$&&(w.locateFile=k=>$+k)}m(w).then($=>{Ht=!1,wr=!0,$i=$,b(),f&&URL.revokeObjectURL(f)},$=>{Ht=!1,wi=!0,x($)})})),await Promise.race(_),g)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},_e=()=>{if(wr&&$i)return $i;throw new Error("WebAssembly is not initialized yet.")}}),He,Dr,he,Ca=U(()=>{zt(),He=(e,t)=>{let r=_e(),a=r.lengthBytesUTF8(e)+1,n=r._malloc(a);return r.stringToUTF8(e,n,a),t.push(n),n},Dr=(e,t,r,a)=>{if(typeof e=="object"&&e!==null){if(r.has(e))throw new Error("Circular reference in options");r.add(e)}Object.entries(e).forEach(([n,i])=>{let s=t?t+n:n;if(typeof i=="object")Dr(i,s+".",r,a);else if(typeof i=="string"||typeof i=="number")a(s,i.toString());else if(typeof i=="boolean")a(s,i?"1":"0");else throw new Error(`Can't handle extra config type: ${typeof i}`)})},he=e=>{let t=_e(),r=t.stackSave();try{let a=t.PTR_SIZE,n=t.stackAlloc(2*a);t._OrtGetLastError(n,n+a);let i=Number(t.getValue(n,a===4?"i32":"i64")),s=t.getValue(n+a,"*"),u=s?t.UTF8ToString(s):"";throw new Error(`${e} ERROR_CODE: ${i}, ERROR_MESSAGE: ${u}`)}finally{t.stackRestore(r)}}}),wd,$m=U(()=>{zt(),Ca(),wd=e=>{let t=_e(),r=0,a=[],n=e||{};
13try{if((e==null?void 0:e.logSeverityLevel)===void 0)n.logSeverityLevel=2;else if(typeof e.logSeverityLevel!="number"||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if((e==null?void 0:e.logVerbosityLevel)===void 0)n.logVerbosityLevel=0;else if(typeof e.logVerbosityLevel!="number"||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);(e==null?void 0:e.terminate)===void 0&&(n.terminate=!1);let i=0;return(e==null?void 0:e.tag)!==void 0&&(i=He(e.tag,a)),r=t._OrtCreateRunOptions(n.logSeverityLevel,n.logVerbosityLevel,!!n.terminate,i),r===0&&he("Can't create run options."),(e==null?void 0:e.extra)!==void 0&&Dr(e.extra,"",new WeakSet,(s,u)=>{let d=He(s,a),l=He(u,a);t._OrtAddRunConfigEntry(r,d,l)!==0&&he(`Can't set a run config entry: ${s} - ${u}.`)}),[r,a]}catch(i){throw r!==0&&t._OrtReleaseRunOptions(r),a.forEach(s=>t._free(s)),i}}}),ks,Ts,Is,Gt,Es,vd,wm=U(()=>{zt(),Ca(),ks=e=>{switch(e){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}},Ts=e=>{switch(e){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}},Is=e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});let t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly="1"),e.executionProviders&&e.executionProviders.some(r=>(typeof r=="string"?r:r.name)==="webgpu")&&(e.enableMemPattern=!1)},Gt=(e,t,r,a)=>{let n=He(t,a),i=He(r,a);_e()._OrtAddSessionConfigEntry(e,n,i)!==0&&he(`Can't set a session config entry: ${t} - ${r}.`)},Es=async(e,t,r)=>{for(let a of t){let n=typeof a=="string"?a:a.name,i=[];switch(n){case"webnn":if(n="WEBNN",typeof a!="string"){let c=a==null?void 0:a.deviceType;c&&Gt(e,"deviceType",c,r)}break;case"webgpu":if(n="JS",typeof a!="string"){let c=a;if(c!=null&&c.preferredLayout){if(c.preferredLayout!=="NCHW"&&c.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${c.preferredLayout}`);Gt(e,"preferredLayout",c.preferredLayout,r)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${n}`)}let s=He(n,r),u=i.length,d=0,l=0;if(u>0){d=_e()._malloc(u*_e().PTR_SIZE),r.push(d),l=_e()._malloc(u*_e().PTR_SIZE),r.push(l);for(let c=0;c<u;c++)_e().setValue(d+c*_e().PTR_SIZE,i[c][0],"*"),_e().setValue(l+c*_e().PTR_SIZE,i[c][1],"*")}await _e()._OrtAppendExecutionProvider(e,s,d,l,u)!==0&&he(`Can't append execution provider: ${n}.`)}},vd=async e=>{let t=_e(),r=0,a=[],n=e||{};Is(n);try{let i=ks(n.graphOptimizationLevel??"all"),s=Ts(n.executionMode??"sequential"),u=typeof n.logId=="string"?He(n.logId,a):0,d=n.logSeverityLevel??2;if(!Number.isInteger(d)||d<0||d>4)throw new Error(`log serverity level is not valid: ${d}`);let l=n.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw new Error(`log verbosity level is not valid: ${l}`);let c=typeof n.optimizedModelFilePath=="string"?He(n.optimizedModelFilePath,a):0;if(r=t._OrtCreateSessionOptions(i,!!n.enableCpuMemArena,!!n.enableMemPattern,s,!!n.enableProfiling,0,u,d,l,c),r===0&&he("Can't create session options."),n.executionProviders&&await Es(r,n.executionProviders,a),n.enableGraphCapture!==void 0){if(typeof n.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${n.enableGraphCapture}`);Gt(r,"enableGraphCapture",n.enableGraphCapture.toString(),a)}if(n.freeDimensionOverrides)for(let[f,m]of Object.entries(n.freeDimensionOverrides)){if(typeof f!="string")throw new Error(`free dimension override name must be a string: ${f}`);if(typeof m!="number"||!Number.isInteger(m)||m<0)throw new Error(`free dimension override value must be a non-negative integer: ${m}`);let g=He(f,a);t._OrtAddFreeDimensionOverride(r,g,m)!==0&&he(`Can't set a free dimension override: ${f} - ${m}.`)}return n.extra!==void 0&&Dr(n.extra,"",new WeakSet,(f,m)=>{Gt(r,f,m,a)}),[r,a]}catch(i){throw r!==0&&t._OrtReleaseSessionOptions(r)!==0&&he("Can't release session options."),a.forEach(s=>t._free(s)),i}}}),Rt,it,St,Aa,Nr,Oa,Ba,la,J=U(()=>{Rt=e=>{switch(e){case"int8":return 3;case"uint8":return 2;case"bool":return 9;
vendor: 4,691 bytes, line 13
13case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw new Error(`unsupported data type: ${e}`)}},it=e=>{switch(e){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw new Error(`unsupported data type: ${e}`)}},St=(e,t)=>{let r=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][e],a=typeof t=="number"?t:t.reduce((n,i)=>n*i,1);return r>0?Math.ceil(a*r):void 0},Aa=e=>{switch(e){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"bool":return Uint8Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},Nr=e=>{switch(e){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${e}`)}},Oa=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",Ba=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint64"||e==="int8"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",la=e=>{switch(e){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw new Error(`unsupported data location: ${e}`)}}}),Ra,xd=U(()=>{Ia(),Ra=async e=>{if(typeof e=="string"){let t=await fetch(e);if(!t.ok)throw new Error(`failed to load external data file: ${e}`);let r=t.headers.get("Content-Length"),a=r?parseInt(r,10):0;if(a<1073741824)return new Uint8Array(await t.arrayBuffer());{if(!t.body)throw new Error(`failed to load external data file: ${e}, no response body.`);let n=t.body.getReader(),i;try{i=new ArrayBuffer(a)}catch(u){if(u instanceof RangeError){let d=Math.ceil(a/65536);i=new WebAssembly.Memory({initial:d,maximum:d}).buffer}else throw u}let s=0;for(;;){let{done:u,value:d}=await n.read();if(u)break;let l=d.byteLength;new Uint8Array(i,s,l).set(d),s+=l}return new Uint8Array(i,0,a)}}else return e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof Uint8Array?e:new Uint8Array(e)}}),zs,Cs,As,Os,Da,Bs,ue,at=U(()=>{J(),zs=["V","I","W","E","F"],Cs=(e,t)=>{`${zs[e]}${new Date().toISOString()}${t}`},Da=(e,t)=>{As=e,Os=t},Bs=(e,t)=>{let r=Nr(e),a=Nr(As);r>=a&&Cs(r,typeof t=="function"?t():t)},ue=(...e)=>{Os&&Bs(...e)}}),Rs,Nt,C,Mr,Sd,kd,Td,re=U(()=>{Rs=class{static calcMatMulShape(e,t){return e[1]!==t[0]?void 0:[e[0],t[1]]}},Nt=class{static calcShape(e,t,r=!1){let a=e.length,n=t.length;if(a===0)return t;if(n===0)return e;let i=Math.max(e.length,t.length),s=new Array(i);if(r){if(a<2||n<2)return;let u=Rs.calcMatMulShape([e[a-2],e[a-1]],[t[n-2],t[n-1]]);if(u===void 0)return;[s[i-2],s[i-1]]=u}for(let u=r?3:1;u<=i;u++){let d=a-u<0?1:e[a-u],l=n-u<0?1:t[n-u];if(d!==l&&d>1&&l>1)return;let c=Math.max(d,l);if(d&&l)s[i-u]=Math.max(d,l);else{if(c>1)return;s[i-u]=0}}return s}static isValidBroadcast(e,t){let r=e.length,a=t.length;if(r>a)return!1;for(let n=1;n<=r;n++)if(e[r-n]!==1&&e[r-n]!==t[a-n])return!1;return!0}},C=class Br{static size(t){return Br.getSizeFromDimensionRange(t,0,t.length)}static convertShape(t,r=4){let a=t.length;if(a===0)return[];let n=new Array(a),i=a-1;for(;i>=0;){if(t[i]%r===0){n[i]=t[i]/r;break}if(r%t[i]!==0)throw new Error("cannot convert shape");n[i]=1,r/=t[i],i--}for(i--;i>=0;i--)n[i]=t[i];return n}static sizeFromDimension(t,r){if(r<0||r>t.length)throw new Error(`invalid dimension of ${r} for sizeFromDimension as Tensor has ${t.length} dimensions.`);return Br.getSizeFromDimensionRange(t,r,t.length)}static sizeToDimension(t,r){if(r<0||r>t.length)throw new Error(`invalid dimension of ${r} for sizeToDimension as Tensor has ${t.length} dimensions.`);return Br.getSizeFromDimensionRange(t,0,r)}static getSizeFromDimensionRange(t,r,a){let n=1;for(let i=r;i<a;i++){if(t[i]<0)throw new Error("cannot get valid size from specified dimension range. Most likely the range contains 
13negative values in them.");n*=Number(t[i])}return n}static computeStrides(t){let r=t.length;if(r===0)return[];if(r===1)return[1];let a=new Array(r);a[r-1]=1,a[r-2]=t[r-1];for(let n=r-3;n>=0;--n)a[n]=a[n+1]*t[n+1];return a}static normalizeAxis(t,r){if(t<-r&&t>=r)throw new Error("unsupported axis for this operation.");return t<0?t+r:t}static normalizeAxes(t,r){return t.map(a=>this.normalizeAxis(a,r??t.length))}static sortBasedOnPerm(t,r){return r?r.map(a=>t[a]):t.slice().reverse()}static padShape(t,r){let a=t.length;return t.map((n,i)=>n+r[i]+r[i+a])}static areEqual(t,r){return t.length!==r.length?!1:t.every((a,n)=>a===r[n])}},Mr=class tr{static adjustPoolAttributes(t,r,a,n,i,s){if(!t&&a.length!==r.length-2)throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions");if(t)for(let u=0;u<r.length-2;u++)u>=a.length?a.push(r[u+2]):a[u]=r[u+2];for(let u=0;u<a.length;u++)if(u<n.length){if(n[u]<0)throw new Error("strides should be greater than or equal to 1")}else n.push(1);for(let u=0;u<a.length;u++)if(u<i.length){if(i[u]<0)throw new Error("dilations should be greater than or equal to 1")}else i.push(1);for(let u=0;u<a.length*2;u++)if(u<s.length){if(s[u]<0)throw new Error("pad should be greater than or equal to 1")}else s.push(0);for(let u=0;u<a.length;u++){if(a[u]<=0)throw new Error("kernel shapes need to be greater than 0");if(s[u]>=a[u]||s[u+a.length]>=a[u])throw new Error("pads should be smaller than kernel")}}static adjustPadsBasedOnAutoPad(t,r,a,n,i,s,u){if(u){if(i.length!==2*(t.length-2))throw new Error("length of pads should be twice the length of data dimensions");if(r.length!==t.length-2)throw new Error("length of strides should be the length of data dimensions");if(n.length!==t.length-2)throw new Error("length of kernel shapes should be the length of data dimensions");for(let d=0;d<t.length-2;d++)tr.adjustPadAndReturnShape(t[d+(s?1:2)],r[d],a[d],n[d],i,d,d+t.length-2,u)}}static computePoolOutputShape(t,r,a,n,i,s,u){if(r.length<=0)throw new Error("input shape must be of size greater than 0");let d=[r[0],r[1]];return tr.computeShapeHelper(t,r,d,a,n,i,s,u),d}static computeConvOutputShape(t,r,a,n,i,s,u){if(t.length<=0||r.length<=0)throw new Error("invalid input tensor dims or invalid filter tensor dims");let d=[t[0],r[0]];return tr.computeShapeHelper(!1,t,d,a,n,i,s,u),d}static computeShapeHelper(t,r,a,n,i,s,u,d){if(t)for(let l=0;l<r.length-2;l++)a.push(1);else for(let l=0;l<r.length-2;l++)a.push(tr.adjustPadAndReturnShape(r[l+2],n[l],i[l],s[l],u,l,l+r.length-2,d))}static adjustPadAndReturnShape(t,r,a,n,i,s,u,d){let l=a*(n-1)+1;if(d&&d!=="NOTSET")switch(d){case"VALID":return i[s]=0,i[u]=0,Math.floor((t-l)/r+1);case"SAME_LOWER":case"SAME_UPPER":if(a!==1)throw new Error("Dilation not supported for SAME_UPPER or SAME_LOWER");{let c=((t+r-1)/r-1)*r+n-t;return i[s]=Math.floor(d==="SAME_LOWER"?(c+1)/2:c/2),i[u]=c-i[s],Math.floor((t+c-n)/r+1)}default:throw new Error("Unsupported AutoPad type")}else return Math.floor((t+i[s]+i[u]-l)/r+1)}},Sd=class{static getShapeOfGemmResult(e,t,r,a,n){if(e.length!==2||r.length!==2)throw new Error("shape need to be of size 2");let i,s,u;t?(i=e[1],s=e[0]):(i=e[0],s=e[1]);let d=-1;if(a?(u=r[0],d=1):(u=r[1],d=0),r[d]!==s)throw new Error("dimension mismatch");if(i<=0||u<=0||s<=0)throw new Error("invalid shape specified");if(n&&!Nt.isValidBroadcast(n,[i,u]))throw new Error("gemm: invalid bias shape for broadcast");return[i,u,s]}},kd=-34028234663852886e22,Td=34028234663852886e22}),Na,Id=U(()=>{J(),Na=(e,t)=>new(Aa(t))(e)}),da,vi,Ds,xi,Ns,Si,ki,Ti,Ms,Ed,vm=U(()=>{at(),da=(e,t=!0)=>{if(e.byteLength%8!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 8 (BigInt).");let r=e.byteLength/8,a=new BigInt64Array(e.buffer,e.byteOffset,r),n=new Int32Array(r);for(let i=0;i<r;i++){let s=a[i];if(s>2147483647n||s<-2147483648n)throw new Error(`Overflow occurred when converting BigInt to Int32 at index ${i}: ${s}`);n[i]=Number(s)}return t?new Uint8Array(n.buffer):n},vi=(e,t=!0)=>{if(e.byteLength%4!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 4 (Int32).");let r=e.byteLength/4,a=new Int32Array(e.buffer,e.byteOffset,r),n=BigInt64Array.from(a,BigInt);return t?new Uint8Array(n.buffer):n},Ds=1,xi=()=>Ds++,Ns=new Map([["float32",32],["float16",16],["int32",32],["uint32",32],["int64",64],["uint64",64],["int8",8],["uint8",8],["int4",4],["uint4",4]]),Si=(e,t)=>{let r=Ns.get(e);if(!r)throw new Error("Unsupported data type.");return t.length>0?Math.ceil(t.reduce((a,n)=>a*n)*r/8):0},ki=class{constructor(e){this.shouldConvertInt64toInt32=!1,this.isInt64ToInt32Converted=!1;let{sessionId:t,context:r,tensor:a,dataType:n,shape:i,shouldConvertInt64toInt32:s=!1}=e;this.sessionId=t,this.mlContext=r,this.mlTensor=a,this.dataType=n,this.tensorShape=i,this.shouldConvertInt64toInt32=s}get tensor(){return this.mlTensor}get type(){return this.dataType}get shape(){return this.tensorShape}get byteLength(){return Si(this.dataType,this.tensorShape)}destroy(){ue("verbose",()=>"[WebNN] TensorWrapper.destroy"),this.mlTensor.destroy()}write(e){this.mlContext.writeTensor(this.mlTensor,e)}async read(e,t){if(e){let r=await this.mlContext.readTensor(this.mlTensor),a=vi(new Uint8Array(r));if(t){(t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)).set(a);return}else return a.buffer}else return t?this.mlContext.readTensor(this.mlTensor,t):this.mlContext.readTensor(this.mlTensor)}canReuseTensor(e,t,r){return this.mlContext===e&&this.dataType===t&&this.tensorShape.length===r.length&&this.tensorShape.every((a,n)=>a===r[n])}setIsInt64ToInt32Converted(e){this.isInt64ToInt32Converted=e}},Ti=class{constructor(e,t){this.tensorManager=e,this.wrapper=t}get tensorWrapper(){return this.wrapper}releaseTensor(){this.tensorWrapper&&(this.tensorManager.releaseTensor(this.tensorWrapper),this.wrapper=void 0)}async ensureTensor(e,t,r,a){let n=t,i=this.tensorManager.getMLContext(e),s=n==="int64"&&!i.opSupportLimits().input.dataTypes.includes("int64");if(s&&(n="int32",ue("verbose",()=>"[WebNN] TensorIdTracker.ensureTensor: convert dataType from int64 to int32")),this.wrapper){if(this.wrapper.canReuseTensor(i,n,r))return this.wrapper.tensor;if(a){if(this.wrapper.byteLength!==Si(n,r))throw new Error("Unable to copy data to tensor with different size.");this.activeUpload=new Uint8Array(await this.wrapper.read())}this.tensorManager.releaseTensor(this.wrapper)}let u=typeof MLTensorUsage>"u"?void 0:MLTensorUsage.READ|MLTensorUsage.WRITE;return this.wrapper=await this.tensorManager.getCachedTensor(e,n,r,u,!0,!0,s),a&&this.activeUpload&&(this.wrapper.write(this.activeUpload),this.activeUpload=void 0),this.wrapper.tensor}upload(e){let t=e;if(this.wrapper)if(this.wrapper.shouldConvertInt64toInt32&&(t=da(e,!0),this.wrapper.setIsInt64ToInt32Converted(!0)),t.byteLength===this.wrapper.byteLength){this.wrapper.write(t);return}else ue("verbose",()=>"Data size does not match tensor size. Releasing tensor."),this.releaseTensor();this.activeUpload?this.activeUpload.set(t):this.activeUpload=new Uint8Array(t)}async download(e){var t,r,a;if(this.activeUpload){let n=(t=this.wrapper)!=null&&t.isInt64ToInt32Converted?vi(this.activeUpload):this.activeUpload;if(e){e instanceof ArrayBuffer?new Uint8Array(e).set(n):new Uint8Array(e.buffer,e.byteOffset,e.byteLength).set(n);return}else return n.buffer}if(!this.wrapper)throw new Error("Tensor has not been created.");return e?this.wrapper.read((r=this.wrapper)==null?void 0:r.shouldConvertInt64toInt32,e):this.wrapper.read((a=this.wrapper)==null?void 0:a.shouldConvertInt64toInt32)}},Ms=class{constructor(e){this.backend=e,this.tensorTrackersById=new Map,this.freeTensors=[],this.externalTensors=new Set}getMLContext(e){let t=this.backend.getMLContext(e);if(!t)throw new Error("MLContext not found for session.");return t}reserveTensorId(){let e=xi();return this.tensorTrackersById.set(e,new Ti(this)),e}releaseTensorId(e){let t=this.tensorTrackersById.get(e);t&&(this.tensorTrackersById.delete(e),t.tensorWrapper&&this.releaseTensor(t.tensorWrapper))}async ensureTensor(e,t,r,a,n){ue("verbose",()=>`[WebNN] TensorManager.ensureTensor {tensorId: ${t}, dataType: ${r}, shape: ${a}, copyOld: ${n}}`);let i=this.tensorTrackersById.get(t);if(!i)throw new Error("Tensor not found.");return i.ensureTensor(e,r,a,n)}upload(e,t){let r=this.tensorTrackersById.get(e);if(!r)throw new Error("Tensor not found.");r.upload(t)}async download(e,t){ue("verbose",()=>`[WebNN] TensorManager.download {tensorId: ${e}, dstBuffer: ${t==null?void 0:t.byteLength}}`);let r=this.tensorTrackersById.get(e);if(!r)throw new Error("Tensor not found.");return r.download(t)}releaseTensorsForSession(e){for(let t of this.freeTensors)t.sessionId===e&&t.destroy();this.freeTensors=this.freeTensors.filter(t=>t.sessionId!==e)}registerTensor(e,t,r,a){let n=this.getMLContext(e),i=xi(),s=new ki({sessionId:e,context:n,tensor:t,dataType:r,shape:a});return this.tensorTrackersById.set(i,new Ti(this,s)),this.externalTensors.add(s),i}async getCachedTensor(e,t,r,a,n,i,s=!1){let u=this.getMLContext(e);for(let[l,c]of this.freeTensors.entries())if(c.canReuseTensor(u,t,r)){ue("verbose",()=>`[WebNN] Reusing tensor {dataType: ${t}, shape: ${r}}`);let f=this.freeTensors.splice(l,1)[0];return f.sessionId=e,f}ue("verbose",()=>`[WebNN] MLContext.createTensor {dataType: ${t}, shape: ${r}}`);let d=await u.createTensor({dataType:t,shape:r,dimensions:r,usage:a,writable:n,readable:i});return new ki({sessionId:e,context:u,tensor:d,dataType:t,shape:r,shouldConvertInt64toInt32:s})}releaseTensor(e){this.externalTensors.has(e)&&this.externalTensors.delete(e),this.freeTensors.push(e)}},Ed=(...e)=>new Ms(...e)}
13),vr,Ps,zd,xm=U(()=>{J(),zt(),Id(),vm(),at(),vr=new Map([[1,"float32"],[10,"float16"],[6,"int32"],[12,"uint32"],[7,"int64"],[13,"uint64"],[22,"int4"],[21,"uint4"],[3,"int8"],[2,"uint8"],[9,"uint8"]]),Ps=(e,t)=>{if(e===t)return!0;if(e===void 0||t===void 0)return!1;let r=Object.keys(e).sort(),a=Object.keys(t).sort();return r.length===a.length&&r.every((n,i)=>n===a[i]&&e[n]===t[n])},zd=class{constructor(e){this.tensorManager=Ed(this),this.mlContextBySessionId=new Map,this.sessionIdsByMLContext=new Map,this.mlContextCache=[],this.sessionGraphInputs=new Map,this.temporaryGraphInputs=[],this.temporarySessionTensorIds=new Map,Da(e.logLevel,!!e.debug)}get currentSessionId(){if(this.activeSessionId===void 0)throw new Error("No active session");return this.activeSessionId}onRunStart(e){ue("verbose",()=>`[WebNN] onRunStart {sessionId: ${e}}`),this.activeSessionId=e}onRunEnd(e){ue("verbose",()=>`[WebNN] onRunEnd {sessionId: ${e}}`);let t=this.temporarySessionTensorIds.get(e);if(t){for(let r of t)ue("verbose",()=>`[WebNN] releasing temporary tensor {tensorId: ${r}}`),this.tensorManager.releaseTensorId(r);this.temporarySessionTensorIds.delete(e),this.activeSessionId=void 0}}async createMLContext(e){if(e instanceof GPUDevice){let r=this.mlContextCache.findIndex(a=>a.gpuDevice===e);if(r!==-1)return this.mlContextCache[r].mlContext;{let a=await navigator.ml.createContext(e);return this.mlContextCache.push({gpuDevice:e,mlContext:a}),a}}else if(e===void 0){let r=this.mlContextCache.findIndex(a=>a.options===void 0&&a.gpuDevice===void 0);if(r!==-1)return this.mlContextCache[r].mlContext;{let a=await navigator.ml.createContext();return this.mlContextCache.push({mlContext:a}),a}}let t=this.mlContextCache.findIndex(r=>Ps(r.options,e));if(t!==-1)return this.mlContextCache[t].mlContext;{let r=await navigator.ml.createContext(e);return this.mlContextCache.push({options:e,mlContext:r}),r}}registerMLContext(e,t){this.mlContextBySessionId.set(e,t);let r=this.sessionIdsByMLContext.get(t);r||(r=new Set,this.sessionIdsByMLContext.set(t,r)),r.add(e),this.temporaryGraphInputs.length>0&&(this.sessionGraphInputs.set(e,this.temporaryGraphInputs),this.temporaryGraphInputs=[])}onReleaseSession(e){this.sessionGraphInputs.delete(e);let t=this.mlContextBySessionId.get(e);if(!t)return;this.tensorManager.releaseTensorsForSession(e),this.mlContextBySessionId.delete(e);let r=this.sessionIdsByMLContext.get(t);if(r.delete(e),r.size===0){this.sessionIdsByMLContext.delete(t);let a=this.mlContextCache.findIndex(n=>n.mlContext===t);a!==-1&&this.mlContextCache.splice(a,1)}}getMLContext(e){return this.mlContextBySessionId.get(e)}reserveTensorId(){return this.tensorManager.reserveTensorId()}releaseTensorId(e){ue("verbose",()=>`[WebNN] releaseTensorId {tensorId: ${e}}`),this.tensorManager.releaseTensorId(e)}async ensureTensor(e,t,r,a,n){let i=vr.get(r);if(!i)throw new Error(`Unsupported ONNX data type: ${r}`);return this.tensorManager.ensureTensor(e??this.currentSessionId,t,i,a,n)}async createTemporaryTensor(e,t,r){ue("verbose",()=>`[WebNN] createTemporaryTensor {onnxDataType: ${t}, shape: ${r}}`);let a=vr.get(t);if(!a)throw new Error(`Unsupported ONNX data type: ${t}`);let n=this.tensorManager.reserveTensorId();await this.tensorManager.ensureTensor(e,n,a,r,!1);let i=this.temporarySessionTensorIds.get(e);return i?i.push(n):this.temporarySessionTensorIds.set(e,[n]),n}uploadTensor(e,t){if(!_e().shouldTransferToMLTensor)throw new Error("Trying to upload to a MLTensor while shouldTransferToMLTensor is false");ue("verbose",()=>`[WebNN] uploadTensor {tensorId: ${e}, data: ${t.byteLength}}`),this.tensorManager.upload(e,t)}async downloadTensor(e,t){return this.tensorManager.download(e,t)}createMLTensorDownloader(e,t){return async()=>{let r=await this.tensorManager.download(e);return Na(r,t)}}registerMLTensor(e,t,r,a){let n=vr.get(r);if(!n)throw new Error(`Unsupported ONNX data type: ${r}`);let i=this.tensorManager.registerTensor(e,t,n,a);return ue("verbose",()=>`[WebNN] registerMLTensor {tensor: ${t}, dataType: ${n}, dimensions: ${a}} -> {tensorId: ${i}}`),i}registerMLConstant(e,t,r,a,n,i,s=!1){if(!i)throw new Error("External mounted files are not available.");let u=e;e.startsWith("./")&&(u=e.substring(2));let d=i.get(u);if(!d)throw new Error(`File with name ${u} not found in preloaded files.`);if(t+r>d.byteLength)throw new Error("Out of bounds: data offset and length exceed the external file data size.");let l=d.slice(t,t+r).buffer,c;switch(n.dataType){case"float32":c=new Float32Array(l);break;case"float16":c=typeof Float16Array<"u"&&Float16Array.from?new Float16Array(l):new Uint16Array(l);break;case"int32":c=new Int32Array(l);break;case"uint32":c=new Uint32Array(l);break;case"int64":s?(c=da(new Uint8Array(l),!1),n.dataType="int32"):c=new BigInt64Array(l);break;case"uint64":c=new BigUint64Array(l);break;case"int8":c=new Int8Array(l);break;case"int4":case"uint4":case"uint8":c=new Uint8Array(l);break;default:throw new Error(`Unsupported data type: ${n.dataType} in creating WebNN Constant from external data.`)}return ue("verbose",()=>`[WebNN] registerMLConstant {dataType: ${n.dataType}, shape: ${n.shape}}} ${s?"(Note: it was int64 data type and registered to int32 as workaround)":""}`),a.constant(n,c)}registerGraphInput(e){this.temporaryGraphInputs.push(e)}isGraphInput(e,t){let r=this.sessionGraphInputs.get(e);return r?r.includes(t):!1}isInt64Supported(e){var t;return!!((t=this.mlContextBySessionId.get(e))!=null&&t.opSupportLimits().input.dataTypes.includes("int64"))}flush(){}}}),Ma=U(()=>{}),Ii,xr,Sr,Us,qs,Ei,pa,Ws,Cd,Sm=U(()=>{at(),Ma(),Ii=new Map([[64,250],[128,200],[256,200],[512,200],[2048,230],[4096,200
13],[8192,50],[16384,50],[32768,50],[65536,50],[131072,50],[262144,50],[524288,50],[1048576,50],[2097152,30],[4194304,20],[8388608,10],[12582912,10],[16777216,10],[26214400,15],[33554432,22],[44236800,2],[58982400,6],[67108864,6],[134217728,6],[167772160,6]]),xr=[],Sr=e=>Math.ceil(Number(e)/16)*16,Us=e=>{for(let t=0;t<xr.length;t++){let r=xr[t];if(e<=r)return r}return Math.ceil(e/16)*16},qs=1,Ei=()=>qs++,pa=async(e,t,r,a)=>{let n=Sr(r),i=e.device.createBuffer({size:n,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});try{let s=e.getCommandEncoder();e.endComputePass(),s.copyBufferToBuffer(t,0,i,0,n),e.flush(),await i.mapAsync(GPUMapMode.READ);let u=i.getMappedRange();if(a){let d=a();return d.set(new Uint8Array(u,0,r)),d}else return new Uint8Array(u.slice(0,r))}finally{i.destroy()}},Ws=class{constructor(e){this.backend=e,this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.buffersPending=[],this.capturedPendingBuffers=new Map;for(let[t]of Ii)xr.push(t),this.freeBuffers.set(t,[]),this.freeUniformBuffers.set(t,[]);this.sessionCount=0}upload(e,t){let r=t.buffer,a=t.byteOffset,n=t.byteLength,i=Sr(n),s=this.storageCache.get(e);if(!s)throw new Error("gpu data for uploading does not exist");if(Number(s.originalSize)!==n)throw new Error(`inconsistent data size. gpu data size=${s.originalSize}, data size=${n}`);let u=this.backend.device.createBuffer({mappedAtCreation:!0,size:i,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC}),d=u.getMappedRange();new Uint8Array(d).set(new Uint8Array(r,a,n)),u.unmap();let l=this.backend.device.createCommandEncoder();l.copyBufferToBuffer(u,0,s.gpuData.buffer,0,i),this.backend.device.queue.submit([l.finish()]),u.destroy(),ue("verbose",()=>`[WebGPU] GpuDataManager.upload(id=${e})`)}memcpy(e,t){let r=this.storageCache.get(e);if(!r)throw new Error("source gpu data for memcpy does not exist");let a=this.storageCache.get(t);if(!a)throw new Error("destination gpu data for memcpy does not exist");if(r.originalSize!==a.originalSize)throw new Error("inconsistent source and destination gpu data size");let n=Sr(r.originalSize),i=this.backend.getCommandEncoder();this.backend.endComputePass(),i.copyBufferToBuffer(r.gpuData.buffer,0,a.gpuData.buffer,0,n)}registerExternalBuffer(e,t,r){let a;if(r){if(a=r[0],e===r[1])return ue("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${t}) => id=${a}, buffer is the same, skip.`),a;if(this.backend.capturedCommandList.has(this.backend.currentSessionId))throw new Error(`Registering a different external buffer under graph capture mode is not supported yet.
14             Please use the previous external buffer!`)}else a=Ei();return this.storageCache.set(a,{gpuData:{id:a,type:0,buffer:e},originalSize:t}),ue("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${t}) => id=${a}, registered.`),a}unregisterExternalBuffer(e){e!==void 0&&(this.storageCache.delete(e),ue("verbose",()=>`[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${e}`))}create(e,t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST){let r=Us(e),a,n=(t&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE,i=(t&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM;if(n||i){let u=(n?this.freeBuffers:this.freeUniformBuffers).get(r);u?u.length>0?a=u.pop():a=this.backend.device.createBuffer({size:r,usage:t}):a=this.backend.device.createBuffer({size:r,usage:t})}else a=this.backend.device.createBuffer({size:r,usage:t});let s={id:Ei(),type:0,buffer:a};return this.storageCache.set(s.id,{gpuData:s,originalSize:Number(e)}),ue("verbose",()=>`[WebGPU] GpuDataManager.create(size=${e}) => id=${s.id}`),s}get(e){var t;return(t=this.storageCache.get(e))==null?void 0:t.gpuData}release(e){let t=typeof e=="bigint"?Number(e):e,r=this.storageCache.get(t);if(!r){if(this.storageCache.size===0)return 0;throw new Error("releasing data does not exist")}return ue("verbose",()=>`[WebGPU] GpuDataManager.release(id=${t}), gpuDataId=${r.gpuData.id}`),this.storageCache.delete(t),this.buffersPending.push(r.gpuData.buffer),r.originalSize}async download(e,t){let r=this.storageCache.get(Number(e));if(!r)throw new Error("data does not exist");await pa(this.backend,r.gpuData.buffer,r.originalSize,t)}refreshPendingBuffers(){if(this.buffersPending.length!==0)if(this.backend.sessionStatus==="default"){for(let e of this.buffersPending){let t=Ii.get(e.size);
vendor: 17,887 bytes, lines 14-121
14if((e.usage&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE){let r=this.freeBuffers.get(e.size)||[];t===void 0||r.length>=t?e.destroy():r.push(e)}else if((e.usage&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM){let r=this.freeUniformBuffers.get(e.size)||[];t===void 0||r.length>=t?e.destroy():r.push(e)}else e.destroy()}this.buffersPending=[]}else{let e=this.capturedPendingBuffers.get(this.backend.currentSessionId);e||(e=[],this.capturedPendingBuffers.set(this.backend.currentSessionId,e));for(let t of this.buffersPending)e.push(t);this.buffersPending=[]}}dispose(){this.freeBuffers.forEach(e=>{e.forEach(t=>{t.destroy()})}),this.freeUniformBuffers.forEach(e=>{e.forEach(t=>{t.destroy()})}),this.storageCache.forEach(e=>{e.gpuData.buffer.destroy()}),this.capturedPendingBuffers.forEach(e=>{e.forEach(t=>{t.destroy()})}),this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.capturedPendingBuffers=new Map}onCreateSession(){this.sessionCount+=1}onReleaseSession(e){let t=this.capturedPendingBuffers.get(e);t&&(t.forEach(r=>{r.destroy()}),this.capturedPendingBuffers.delete(e)),this.sessionCount-=1,this.sessionCount===0&&(ue("warning",()=>"[WebGPU] Clearing webgpu buffer cache"),this.storageCache.forEach(r=>{r.gpuData.buffer.destroy()}),this.storageCache=new Map)}},Cd=(...e)=>new Ws(...e)}),Ls,ce,we=U(()=>{Ls=class{constructor(e){Object.assign(this,e)}get cacheKey(){return this.key||(this.key=Object.getOwnPropertyNames(this).sort().map(e=>`${this[e]}`).join(";")),this.key}},ce=e=>new Ls(e)}),Mt,kr,Se,Ee,Z,$e,ca,Dt,ht,F,Ft,R,G,Ad,Pa,Vs,Od,ie=U(()=>{J(),re(),Mt=64,kr=(e,t)=>{if(t===3)throw new Error("vec3 has same alignment as vec4, use vec4 instead");switch(Number(e)){case 10:return t>1?`vec${t}<f16>`:"f16";case 1:return t>1?`vec${t}<f32>`:"f32";case 6:return t>1?`vec${t}<i32>`:"i32";case 12:return t>1?`vec${t}<u32>`:"u32";case 7:if(t>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2<u32>","i32"];case 13:if(t>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2<u32>","u32"];case 9:if(t!==4)throw new Error("bool must be vec4");return["u32","vec4<bool>"];case 22:return"i32";case 21:return"u32";default:throw new Error(`Unknown data type: ${e}`)}},Se=(e,t=1)=>{let r=kr(e,t);return typeof r=="string"?r:r[0]},Ee=(e,t=1)=>{let r=kr(e,t);return typeof r=="string"?r:r[1]},Z=(...e)=>{let t=[];return e.forEach(r=>{r.length!==0&&t.push({type:12,data:r},{type:12,data:C.computeStrides(r)})}),t},$e=e=>e%4===0?4:e%2===0?2:1,ca=(e="f32",t,r="0")=>!t||t===1?`${e}(${r})`:`vec${t}<${e}>(${r})`,Dt=(e,t,r)=>e==="f32"?r:t===1?`f32(${r})`:`vec${t}<f32>(${r})`,ht=(e,t)=>t===4?`(${e}.x + ${e}.y + ${e}.z + ${e}.w)`:t===2?`(${e}.x + ${e}.y)`:t===3?`(${e}.x + ${e}.y + ${e}.z)`:e,F=(e,t,r,a)=>e.startsWith("uniforms.")&&r>4?typeof t=="string"?a==="f16"?`${e}[(${t}) / 8][(${t}) % 8 / 4][(${t}) % 8 % 4]`:`${e}[(${t}) / 4][(${t}) % 4]`:a==="f16"?`${e}[${Math.floor(t/8)}][${Math.floor(t%8/4)}][${t%8%4}]`:`${e}[${Math.floor(t/4)}][${t%4}]`:r>1?`${e}[${t}]`:e,Ft=(e,t,r,a,n)=>{let i=typeof r=="number",s=i?r:r.length,u=[...new Array(s).keys()],d=s<2?"u32":s<=4?`vec${s}<u32>`:`array<u32, ${s}>`,l=kr(t,n),c=typeof l=="string"?l:l[1],f=typeof l=="string"?l:l[0],m={indices:d,value:c,storage:f,tensor:t},g=D=>typeof D=="string"?D:`${D}u`,_={offsetToIndices:!1,indicesToOffset:!1,broadcastedIndicesToOffset:!1,set:!1,setByIndices:!1,get:!1,getByIndices:!1},b=i?"uniforms.":"",x=`${b}${e}_shape`,w=`${b}${e}_strides`,$="";for(let D=0;D<s-1;D++)$+=`
15    let dim${D} = current / ${F(w,D,s)};
16    let rest${D} = current % ${F(w,D,s)};
17    indices[${D}] = dim${D};
18    current = rest${D};
19    `;$+=`indices[${s-1}] = current;`;let k=s<2?"":`
20  fn o2i_${e}(offset: u32) -> ${m.indices} {
21    var indices: ${m.indices};
22    var current = offset;
23    ${$}
24    return indices;
25  }`,S=D=>(_.offsetToIndices=!0,s<2?D:`o2i_${e}(${D})`),T=[];if(s>=2)for(let D=s-1;D>=0;D--)T.push(`${F(w,D,s)} * (indices[${D}])`);let E=s<2?"":`
26  fn i2o_${e}(indices: ${m.indices}) -> u32 {
27    return ${T.join("+")};
28  }`,z=D=>(_.indicesToOffset=!0,s<2?D:`i2o_${e}(${D})`),A=(...D)=>s===0?"0u":`${m.indices}(${D.map(g).join(",")})`,O=(D,P)=>s<2?`${D}`:`${F(D,P,s)}`,q=(D,P,j)=>s<2?`${D}=${j};`:`${F(D,P,s)}=${j};`,X={},H=(D,P)=>{_.broadcastedIndicesToOffset=!0;let j=`${P.name}broadcastedIndicesTo${e}Offset`;if(j in X)return`${j}(${D})`;let se=[];for(let ke=s-1;ke>=0;ke--){let N=P.indicesGet("outputIndices",ke+P.rank-s);se.push(`${O(w,ke)} * (${N} % ${O(x,ke)})`)}return X[j]=`fn ${j}(outputIndices: ${P.type.indices}) -> u32 {
29             return ${se.length>0?se.join("+"):"0u"};
30           }`,`${j}(${D})`},Q=(D,P)=>(()=>{if(m.storage===m.value)return`${e}[${D}]=${P};`;if(m.storage==="vec2<u32>"&&m.value==="i32")return`${e}[${D}]=vec2<u32>(u32(${P}), select(0u, 0xFFFFFFFFu, ${P} < 0));`;if(m.storage==="vec2<u32>"&&m.value==="u32")return`${e}[${D}]=vec2<u32>(u32(${P}), 0u);`;if(m.storage==="u32"&&m.value==="vec4<bool>")return`${e}[${D}]=dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(${P}));`;throw new Error(`not supported combination of storage type ${m.storage} and value type ${m.value} yet`)})(),oe=D=>(()=>{if(m.storage===m.value)return`${e}[${D}]`;if(m.storage==="vec2<u32>"&&m.value==="i32")return`i32(${e}[${D}].x)`;if(m.storage==="vec2<u32>"&&m.value==="u32")return`u32(${e}[${D}].x)`;if(m.storage==="u32"&&m.value==="vec4<bool>")return`vec4<bool>(bool(${e}[${D}] & 0xFFu), bool(${e}[${D}] & 0xFF00u), bool(${e}[${D}] & 0xFF0000u), bool(${e}[${D}] & 0xFF000000u))`;throw new Error(`not supported combination of storage type ${m.storage} and value type ${m.value} yet`)})(),te=s<2?"":`
31  fn get_${e}ByIndices(indices: ${m.indices}) -> ${c} {
32    return ${oe(`i2o_${e}(indices)`)};
33  }`,V=s<2?"":(()=>{let D=u.map(j=>`d${j}: u32`).join(", "),P=u.map(j=>`d${j}`).join(", ");return`
34  fn get_${e}(${D}) -> ${c} {
35    return get_${e}ByIndices(${A(P)});
36  }`})(),W=(...D)=>{if(D.length!==s)throw new Error(`indices length must be ${s}`);let P=D.map(g).join(",");return s===0?oe("0u"):s===1?oe(P[0]):(_.get=!0,_.getByIndices=!0,_.indicesToOffset=!0,`get_${e}(${P})`)},le=D=>s<2?oe(D):(_.getByIndices=!0,_.indicesToOffset=!0,`get_${e}ByIndices(${D})`),ee=s<2?"":`
37  fn set_${e}ByIndices(indices: ${m.indices}, value: ${c}) {
38    ${Q(`i2o_${e}(indices)`,"value")}
39  }`,ae=s<2?"":(()=>{let D=u.map(j=>`d${j}: u32`).join(", "),P=u.map(j=>`d${j}`).join(", ");return`
40  fn set_${e}(${D}, value: ${c}) {
41    set_${e}ByIndices(${A(P)}, value);
42  }`})();return{impl:()=>{let D=[],P=!1;return _.offsetToIndices&&(D.push(k),P=!0),_.indicesToOffset&&(D.push(E),P=!0),_.broadcastedIndicesToOffset&&(Object.values(X).forEach(j=>D.push(j)),P=!0),_.set&&(D.push(ae),P=!0),_.setByIndices&&(D.push(ee),P=!0),_.get&&(D.push(V),P=!0),_.getByIndices&&(D.push(te),P=!0),!i&&P&&D.unshift(`const ${x} = ${m.indices}(${r.join(",")});`,`const ${w} = ${m.indices}(${C.computeStrides(r).join(",")});`),D.join(`
43`)},type:m,offsetToIndices:S,indicesToOffset:z,broadcastedIndicesToOffset:H,indices:A,indicesGet:O,indicesSet:q,set:(...D)=>{if(D.length!==s+1)throw new Error(`indices length must be ${s}`);let P=D[s];if(typeof P!="string")throw new Error("value must be string");let j=D.slice(0,s).map(g).join(",");return s===0?Q("0u",P):s===1?Q(j[0],P):(_.set=!0,_.setByIndices=!0,_.indicesToOffset=!0,`set_${e}(${j}, ${P})`)},setByOffset:Q,setByIndices:(D,P)=>s<2?Q(D,P):(_.setByIndices=!0,_.indicesToOffset=!0,`set_${e}ByIndices(${D}, ${P});`),get:W,getByOffset:oe,getByIndices:le,usage:a,name:e,strides:w,shape:x,rank:s}},R=(e,t,r,a=1)=>Ft(e,t,r,"input",a),G=(e,t,r,a=1)=>Ft(e,t,r,"output",a),Ad=(e,t,r)=>Ft(e,t,r,"atomicOutput",1),Pa=(e,t,r,a=1)=>Ft(e,t,r,"internal",a),Vs=class{constructor(e,t){this.normalizedDispatchGroup=e,this.limits=t,this.internalVariables=[],this.variables=[],this.uniforms=[],this.variableIndex=0}guardAgainstOutOfBoundsWorkgroupSizes(e){return`if (global_idx >= ${typeof e=="number"?`${e}u`:e}) { return; }`}mainStart(e=Mt){let t=typeof e=="number"?e:e[0],r=typeof e=="number"?1:e[1],a=typeof e=="number"?1:e[2];if(t>this.limits.maxComputeWorkgroupSizeX||r>this.limits.maxComputeWorkgroupSizeY||a>this.limits.maxComputeWorkgroupSizeZ)throw new Error(`workgroup size [${t}, ${r}, ${a}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`);if(t*r*a>this.limits.maxComputeInvocationsPerWorkgroup)throw new Error(`workgroup size [${t}, ${r}, ${a}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`);let n=this.normalizedDispatchGroup[1]===1&&this.normalizedDispatchGroup[2]===1,i=n?`@builtin(global_invocation_id) global_id : vec3<u32>,
44    @builtin(workgroup_id) workgroup_id : vec3<u32>,
45    @builtin(local_invocation_index) local_idx : u32,
46    @builtin(local_invocation_id) local_id : vec3<u32>`:`@builtin(global_invocation_id) global_id : vec3<u32>,
47                                             @builtin(local_invocation_id) local_id : vec3<u32>,
48    @builtin(local_invocation_index) local_idx : u32,
49    @builtin(workgroup_id) workgroup_id : vec3<u32>,
50    @builtin(num_workgroups) num_workgroups : vec3<u32>`,s=n?`let global_idx = global_id.x;
51         let workgroup_index = workgroup_id.x;`:`let workgroup_index = workgroup_id.z * num_workgroups[0] * num_workgroups[1] +
52             workgroup_id.y * num_workgroups[0] + workgroup_id.x;
53         let global_idx = workgroup_index * ${t*r*a}u + local_idx;`;return`@compute @workgroup_size(${t}, ${r}, ${a})
54  fn main(${i}) {
55    ${s}
56  `}appendVariableUniforms(e){e.rank!==0&&(e.shape.startsWith("uniforms.")&&this.uniforms.push({name:e.shape.replace("uniforms.",""),type:"u32",length:e.rank}),e.strides.startsWith("uniforms.")&&this.uniforms.push({name:e.strides.replace("uniforms.",""),type:"u32",length:e.rank}))}declareVariable(e,t){if(e.usage==="internal")throw new Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead.");this.variables.push(e),this.appendVariableUniforms(e);let r=e.usage==="input"?"read":"read_write",a=e.usage==="atomicOutput"?"atomic<i32>":e.type.storage;return`@group(0) @binding(${t}) var<storage, ${r}> ${e.name}: array<${a}>;`}declareVariables(...e){return e.map(t=>this.declareVariable(t,this.variableIndex++)).join(`
57`)}registerInternalVariable(e){if(e.usage!=="internal")throw new Error("cannot use input or output variable with registerInternalVariable(). use declareVariables() instead.");this.internalVariables.push(e),this.appendVariableUniforms(e)}registerInternalVariables(...e){return e.forEach(t=>this.registerInternalVariable(t)),this}registerUniform(e,t,r=1){return this.uniforms.push({name:e,type:t,length:r}),this}registerUniforms(e){return this.uniforms=this.uniforms.concat(e),this}uniformDeclaration(){if(this.uniforms.length===0)return"";let e=[];for(let{name:t,type:r,length:a}of this.uniforms)if(a&&a>4)r==="f16"?e.push(`@align(16) ${t}:array<mat2x4<${r}>, ${Math.ceil(a/8)}>`):e.push(`${t}:array<vec4<${r}>, ${Math.ceil(a/4)}>`);else{let n=a==null||a===1?r:`vec${a}<${r}>`;e.push(`${t}:${n}`)}return`
58      struct Uniforms { ${e.join(", ")} };
59      @group(0) @binding(${this.variableIndex}) var<uniform> uniforms: Uniforms;`}get additionalImplementations(){return this.uniformDeclaration()+this.variables.map(e=>e.impl()).join(`
60`)+this.internalVariables.map(e=>e.impl()).join(`
61`)}get variablesInfo(){if(this.uniforms.length===0)return;let e=t=>[12,10,1,6][["u32","f16","f32","i32"].indexOf(t)];return this.uniforms.map(t=>[e(t.type),t.length??1])}},Od=(e,t)=>new Vs(e,t)}),js,zi,Hs,Gs,Fs,Ks,De,Bd,Rd,mt=U(()=>{J(),re(),we(),ie(),js=(e,t)=>{if(!e||e.length!==1)throw new Error("Transpose requires 1 input.");if(t.length!==0&&t.length!==e[0].dims.length)throw new Error(`perm size ${t.length} does not match input rank ${e[0].dims.length}`)},zi=(e,t)=>t.length!==0?t:[...new Array(e).keys()].reverse(),Hs=(e,t)=>C.sortBasedOnPerm(e,zi(e.length,t)),Gs=(e,t,r,a)=>{let n=`fn perm(i: ${a.type.indices}) -> ${r.type.indices} {
62    var a: ${r.type.indices};`;for(let i=0;i<t;++i)n+=`a[${e[i]}]=i[${i}];`;return n+="return a;}"},Fs=(e,t)=>{let r=[],a=[];for(let n=0;n<e.length;++n)e[n]!==1&&r.push(e[n]),e[t[n]]!==1&&a.push(t[n]);return{newShape:r,newPerm:a}},Ks=(e,t)=>{let r=0;for(let a=0;a<e.length;++a)if(t[e[a]]!==1){if(e[a]<r)return!1;r=e[a]}return!0},De=(e,t)=>{let r=e.dataType,a=e.dims.length,n=zi(a,t),i=Hs(e.dims,n),s=e.dims,u=i,d=a<2||Ks(n,e.dims),l;if(d)return l=_=>{let b=R("input",r,s,4),x=G("output",r,u,4);return`
63  ${_.registerUniform("output_size","u32").declareVariables(b,x)}
64  ${_.mainStart()}
65    ${_.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
66    output[global_idx] = input[global_idx];
67  }`},{name:"TransposeCopy",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let _=C.size(i);return{outputs:[{dims:i,dataType:e.dataType}],dispatchGroup:{x:Math.ceil(_/64/4)},programUniforms:[{type:12,data:Math.ceil(_/4)}]}},getShaderSource:l};let{newShape:c,newPerm:f}=Fs(e.dims,n),m=C.areEqual(f,[2,3,1]),g=C.areEqual(f,[3,1,2]);if(c.length===2||m||g){s=m?[c[0],c[1]*c[2]]:g?[c[0]*c[1],c[2]]:c,u=[s[1],s[0]];let _=16;return l=b=>{let x=R("a",r,s.length),w=G("output",r,u.length);return`
68  ${b.registerUniform("output_size","u32").declareVariables(x,w)}
69  var<workgroup> tile : array<array<${w.type.value}, ${_+1}>, ${_}>;
70  ${b.mainStart([_,_,1])}
71    let stride = (uniforms.output_shape[1] - 1) / ${_} + 1;
72    let workgroup_id_x = workgroup_index % stride;
73    let workgroup_id_y = workgroup_index / stride;
74    let input_col = workgroup_id_y * ${_}u + local_id.x;
75    let input_row = workgroup_id_x * ${_}u + local_id.y;
76    if (input_row < uniforms.a_shape[0] && input_col < uniforms.a_shape[1]) {
77      tile[local_id.y][local_id.x] = ${x.getByIndices(`${x.type.indices}(input_row, input_col)`)};
78    }
79    workgroupBarrier();
80
81    let output_col = workgroup_id_x * ${_}u + local_id.x;
82    let output_row = workgroup_id_y * ${_}u + local_id.y;
83    if (output_row < uniforms.output_shape[0] && output_col < uniforms.output_shape[1]) {
84      ${w.setByIndices(`${w.type.indices}(output_row, output_col)`,"tile[local_id.x][local_id.y]")}
85    }
86  }`},{name:"TransposeShared",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let b=C.size(i);return{outputs:[{dims:i,dataType:e.dataType}],dispatchGroup:{x:Math.ceil(u[1]/_),y:Math.ceil(u[0]/_)},programUniforms:[{type:12,data:b},...Z(s,u)]}},getShaderSource:l}}return l=_=>{let b=R("a",r,s.length),x=G("output",r,u.length);return`
87  ${_.registerUniform("output_size","u32").declareVariables(b,x)}
88
89  ${Gs(n,a,b,x)}
90
91  ${_.mainStart()}
92    ${_.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
93
94    let indices = ${x.offsetToIndices("global_idx")};
95    let aIndices = perm(indices);
96
97    ${x.setByOffset("global_idx",b.getByIndices("aIndices"))}
98  }`},{name:"Transpose",shaderCache:{hint:`${t}`,inputDependencies:["rank"]},getRunData:()=>{let _=C.size(i);return{outputs:[{dims:i,dataType:e.dataType}],dispatchGroup:{x:Math.ceil(_/64)},programUniforms:[{type:12,data:_},...Z(s,u)]}},getShaderSource:l}},Bd=(e,t)=>{js(e.inputs,t.perm),e.compute(De(e.inputs[0],t.perm))},Rd=e=>ce({perm:e.perm})}),Zs,Qs,Xs,Ys,Js,eo,to,ro,io,ao,qe,Dd,Nd,Md,Pd,Ud,qd,Wd,Ld,Vd,jd,km=U(()=>{J(),re(),ie(),Ua(),mt(),Zs={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate * candidate",logSumExp:"bestValue + exp(candidate)",l1:"bestValue + abs(candidate)",l2:"bestValue + candidate * candidate",logSum:"bestValue + candidate"},Qs={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate",logSumExp:"bestValue + candidate",l1:"bestValue + candidate",l2:"bestValue + candidate",logSum:"bestValue + candidate"},Xs={max:"_A[offset]",min:"_A[offset]",mean:"0",sum:"0",prod:"1",sumSquare:"0",logSumExp:"0",l1:"0",l2:"0",logSum:"0"},Ys={max:"bestValue",min:"bestValue",sum:"bestValue",prod:"bestValue",sumSquare:"bestValue",logSumExp:"log(bestValue)",l1:"bestValue",l2:"sqrt(bestValue)",logSum:"log(bestValue)"},Js=(e,t)=>{let r=[];for(let a=t-e;a<t;++a)r.push(a);return r},eo=(e,t)=>{let r=[],a=e.length;for(let i=0;i<a;i++)t.indexOf(i)===-1&&r.push(e[i]);let n=t.map(i=>e[i]);return[r,n]},to=(e,t)=>{let r=e.length+t.length,a=[],n=0;for(let i=0;i<r;i++)t.indexOf(i)===-1?a.push(e[n++]):a.push(1);return a},ro=(e,t)=>{for(let r=0;r<e.length;++r)if(e[e.length-r-1]!==t-1-r)return!1;return!0},io=(e,t)=>{let r=[];if(!ro(e,t)){for(let a=0;a<t;++a)e.indexOf(a)===-1&&r.push(a);e.forEach(a=>r.push(a))}return r},ao=(e,t,r,a,n,i,s)=>{let u=r[0].dims,d=C.size(i),l=C.size(s),c=R("_A",r[0].dataType,u),f=G("output",n,i),m=64;d===1&&(m=256);let g=`
99          var<workgroup> aBestValues : array<f32, ${m}>;
100       `,_=b=>`
101        ${b.registerUniform("reduceSize","u32").declareVariables(c,f)}
102        ${g}
103        fn DIV_CEIL(a : u32, b : u32) -> u32 {
104          return ((a - 1u) / b + 1u);
105         }
106         ${b.mainStart(m)}
107
108          let outputIndex = global_idx / ${m};
109          let offset = outputIndex * uniforms.reduceSize;
110
111          var bestValue = f32(${Xs[a]});
112          let Length = uniforms.reduceSize;
113          for (var k = local_idx; k < Length; k = k + ${m}) {
114           let candidate = f32(${c.getByOffset("offset + k")});
115           bestValue = ${Zs[a]};
116          }
117          aBestValues[local_idx] = bestValue;
118          workgroupBarrier();
119
120         var reduceSize = min(Length, ${m}u);
121         for (var currentSize = reduceSize / 2u; reduceSize > 1u;
122             currentSize = reduceSize / 2u) {
123           let interval = DIV_CEIL(reduceSize, 2u);
124           if (local_idx < currentSize) {
125            let candidate = aBestValues[local_idx + interval];
126            bestValue = ${Qs[a]};
127            aBestValues[local_idx] = bestValue;
128           }
129           reduceSize = interval;
130           workgroupBarrier();
131         }
132
133         if (local_idx == 0u) {
134          ${f.setByOffset("outputIndex",`${a==="mean"?`${f.type.storage}(bestValue / f32(uniforms.reduceSize))`:`${f.type.storage}(${Ys[a]})`}`)};
135         }
136        }`;return{name:e,shaderCache:{hint:`${t};${m}`,inputDependencies:["type"]},getShaderSource:_,getRunData:()=>({outputs:[{dims:i,dataType:n}],dispatchGroup:{x:d},programUniforms:[{type:12,data:l}]})}},qe=(e,t,r,a)=>{let n=e.inputs.length===1?r:fa(e.inputs,r),i=n.axes;i.length===0&&!n.noopWithEmptyAxes&&(i=e.inputs[0].dims.map((g,_)=>_));let s=C.normalizeAxes(i,e.inputs[0].dims.length),u=s,d=e.inputs[0],l=io(u,e.inputs[0].dims.length);l.length>0&&(d=e.compute(De(e.inputs[0],l),{inputs:[0],outputs:[-1]})[0],u=Js(u.length,d.dims.length));let[c,f]=eo(d.dims,u),m=c;n.keepDims&&(m=to(c,s)),e.compute(ao(t,n.cacheKey,[d],a,e.inputs[0].dataType,m,f),{inputs:[d]})},Dd=(e,t)=>{qe(e,"ReduceMeanShared",t,"mean")},Nd=(e,t)=>{qe(e,"ReduceL1Shared",t,"l1")},Md=(e,t)=>{qe(e,"ReduceL2Shared",t,"l2")},Pd=(e,t)=>{qe(e,"ReduceLogSumExpShared",t,"logSumExp")},Ud=(e,t)=>{qe(e,"ReduceMaxShared",t,"max")},qd=(e,t)=>{qe(e,"ReduceMinShared",t,"min")},Wd=(e,t)=>{qe(e,"ReduceProdShared",t,"prod")},Ld=(e,t)=>{qe(e,"ReduceSumShared",t,"sum")},Vd=(e,t)=>{qe(e,"ReduceSumSquareShared",t,"sumSquare")},jd=(e,t)=>{qe(e,"ReduceLogSumShared",t,"logSum")}}),We,no,Pr,fa,Le,so,oo,uo,lo,po,co,fo,ho,mo,go,Ve,Hd,Gd,Fd,Kd,Zd,Qd,Xd,Yd,Jd,ep,Ua=U(()=>{J(),re(),we(),ie(),km(),We=e=>{if(!e||e.length===0||e.length>2)throw new Error("Reduce op requires 1 or 2 inputs.");if(e.length===2&&e[1].dims.length!==1)throw new Error("Invalid axes input dims.")},no=e=>["","",`var value = ${e.getByIndices("input_indices")};`,""],Pr=(e,t,r,a,n,i,s=!1,u=!1)=>{let d=[],l=r[0].dims,c=l.length,f=C.normalizeAxes(n,c),m=!u&&f.length===0;l.forEach((b,x)=>{m||f.indexOf(x)>=0?s&&d.push(1):d.push(b)});let g=d.length,_=C.size(d);return{name:e,shaderCache:t,getShaderSource:b=>{let x=[],w=R("_A",r[0].dataType,c),$=G("output",i,g),k=a(w,$,f),S=k[2];for(let T=0,E=0;T<c;T++)m||f.indexOf(T)>=0?(s&&E++,S=`for(var j${T}: u32 = 0; j${T} < ${l[T]}; j${T}++) {
137                  ${k[2].includes("last_index")?`let last_index = j${T};`:""}
138                  ${w.indicesSet("input_indices",T,`j${T}`)}
139                  ${S}
140                }`):(x.push(`${w.indicesSet("input_indices",T,$.indicesGet("output_indices",E))};`),E++);return`
141
142        ${b.registerUniform("output_size","u32").declareVariables(w,$)}
143
144        ${b.mainStart()}
145          ${b.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
146          var input_indices: ${w.type.indices};
147          let output_indices = ${$.offsetToIndices("global_idx")};
148
149          ${x.join(`
150`)}
151          ${k[0]}       // init ops for reduce max/min
152          ${k[1]}
153          ${S}
154          ${k[3]}
155          ${k.length===4?$.setByOffset("global_idx","value"):k.slice(4).join(`
156`)}
157        }`},getRunData:()=>({outputs:[{dims:d,dataType:i}],dispatchGroup:{x:Math.ceil(_/64)},programUniforms:[{type:12,data:_},...Z(l,d)]})}},fa=(e,t)=>{let r=[];return e[1].dims[0]>0&&e[1].getBigInt64Array().forEach(a=>r.push(Number(a))),ce({axes:r,keepDims:t.keepDims,noopWithEmptyAxes:t.noopWithEmptyAxes})},Le=(e,t,r,a)=>{let n=e.inputs,i=n.length===1?r:fa(n,r);e.compute(Pr(t,{hint:i.cacheKey,inputDependencies:["rank"]},[n[0]],i.noopWithEmptyAxes&&i.axes.length===0?no:a,i.axes,n[0].dataType,i.keepDims,i.noopWithEmptyAxes),{inputs:[0]})},so=(e,t)=>{We(e.inputs),Le(e,"ReduceLogSum",t,(r,a)=>[`var value = ${a.type.storage}(0);`,"",`value += ${r.getByIndices("input_indices")};`,"value = log(value);"])},oo=(e,t)=>{We(e.inputs),Le(e,"ReduceL1",t,(r,a)=>[`var value = ${a.type.storage}(0);`,"",`value += abs(${r.getByIndices("input_indices")});`,""])},uo=(e,t)=>
vendor: 37,543 bytes, lines 157-519
157{We(e.inputs),Le(e,"ReduceL2",t,(r,a)=>[`var t = ${a.type.value}(0); var value = ${a.type.value}(0);`,"",`t = ${r.getByIndices("input_indices")}; value += (t * t);`,"value = sqrt(value);"])},lo=(e,t)=>{We(e.inputs),Le(e,"ReduceLogSumExp",t,(r,a)=>[`var value = ${a.type.storage}(0);`,"",`value += exp(${r.getByIndices("input_indices")});`,"value = log(value);"])},po=(e,t)=>{We(e.inputs),Le(e,"ReduceMax",t,(r,a,n)=>{let i=[];for(let s=0;s<r.rank;s++)(n.indexOf(s)>=0||n.length===0)&&i.push(r.indicesSet("input_indices",s,0));return[`${i.join(`
158`)}`,`var value = ${r.getByIndices("input_indices")};`,`value = max(value, ${r.getByIndices("input_indices")});`,""]})},co=(e,t)=>{We(e.inputs),Le(e,"ReduceMean",t,(r,a,n)=>{let i=1;for(let s=0;s<r.rank;s++)(n.indexOf(s)>=0||n.length===0)&&(i*=e.inputs[0].dims[s]);return["var sum = f32(0);","",`sum += f32(${r.getByIndices("input_indices")});`,`let value = ${a.type.value}(sum / ${i});`]})},fo=(e,t)=>{We(e.inputs),Le(e,"ReduceMin",t,(r,a,n)=>{let i=[];for(let s=0;s<r.rank;s++)(n.indexOf(s)>=0||n.length===0)&&i.push(`input_indices[${s}] = 0;`);return[`${i.join(`
159`)}`,`var value = ${r.getByIndices("input_indices")};`,`value = min(value, ${r.getByIndices("input_indices")});`,""]})},ho=(e,t)=>{We(e.inputs),Le(e,"ReduceProd",t,(r,a)=>[`var value = ${a.type.storage}(1);`,"",`value *= ${r.getByIndices("input_indices")};`,""])},mo=(e,t)=>{We(e.inputs),Le(e,"ReduceSum",t,(r,a)=>[`var value = ${a.type.storage}(0);`,"",`value += ${r.getByIndices("input_indices")};`,""])},go=(e,t)=>{We(e.inputs),Le(e,"ReduceSumSquare",t,(r,a)=>[`var t = ${a.type.value}(0); var value = ${a.type.value}(0);`,"",`t = ${r.getByIndices("input_indices")}; value += t * t;`,""])},Ve=(e,t,r)=>{if(t.length===0)return r;let a=1,n=1;for(let i=0;i<t.length;i++)t.indexOf(i)===-1?a*=e[i]:n*=e[i];return n<32&&a>1024},Hd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?co(e,t):Dd(e,t)},Gd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?oo(e,t):Nd(e,t)},Fd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?uo(e,t):Md(e,t)},Kd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?lo(e,t):Pd(e,t)},Zd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?po(e,t):Ud(e,t)},Qd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?fo(e,t):qd(e,t)},Xd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?ho(e,t):Wd(e,t)},Yd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?mo(e,t):Ld(e,t)},Jd=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?go(e,t):Vd(e,t)},ep=(e,t)=>{Ve(e.inputs[0].dims,t.axes,t.noopWithEmptyAxes)?so(e,t):jd(e,t)}}),Ci,tp,rp,ha,Tm=U(()=>{J(),we(),Ua(),Ci=e=>{if(!e||e.length===0||e.length>2)throw new Error("ArgMinMaxOp op requires 1 or 2 inputs.");if(e[0].dataType!==1)throw new Error("Invalid input type.")},tp=(e,t)=>{Ci(e.inputs);let r=(a,n,i)=>{let s=[];for(let u=0;u<a.rank;u++)(i.indexOf(u)>=0||i.length===0)&&s.push(`input_indices[${u}] = 0;`);return[`${s.join(`
160`)}`,`var value = ${a.getByIndices("input_indices")};
161var best_index : i32 = 0;`,`if (${a.getByIndices("input_indices")} ${t.selectLastIndex>0?"<=":"<"} value) {
162         value = ${a.getByIndices("input_indices")};
163         best_index = i32(last_index);
164       }`,"",n.setByOffset("global_idx","best_index")]};e.compute(Pr("ArgMin",{hint:t.cacheKey,inputDependencies:["rank"]},[e.inputs[0]],r,[t.axis],7,t.keepDims),{inputs:[0]})},rp=(e,t)=>{Ci(e.inputs);let r=(a,n,i)=>{let s=[];for(let u=0;u<a.rank;u++)(i.indexOf(u)>=0||i.length===0)&&s.push(`input_indices[${u}] = 0;`);return[`${s.join(`
165`)}`,`var value = ${a.getByIndices("input_indices")};
166var best_index : i32 = 0;`,`if (${a.getByIndices("input_indices")} ${t.selectLastIndex>0?">=":">"} value) {
167         value = ${a.getByIndices("input_indices")};
168         best_index = i32(last_index);
169       }`,"",n.setByOffset("global_idx","best_index")]};e.compute(Pr("argMax",{hint:t.cacheKey,inputDependencies:["rank"]},[e.inputs[0]],r,[t.axis],7,t.keepDims),{inputs:[0]})},ha=e=>ce(e)}),_o,Tr,yo,bo,$o,or,wo,ip,qa=U(()=>{J(),re(),Ma(),ie(),_o=(e,t)=>{let r=e[0],a=e[1],n=e[2],i=e[3],s=e[4],u=e[5];if(s&&u)throw new Error("Attention cannot have both past and attention_bias");if(r.dims.length!==3)throw new Error('Input "input" must have 3 dimensions');let d=r.dims[0],l=r.dims[1],c=r.dims[2];if(n.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimensions');if(a.dims.length!==2)throw new Error('Input "weights" is expected to have 2 dimensions');if(a.dims[0]!==c)throw new Error("Input 1 dimension 0 should have same length as dimension 2 of input 0");if(n.dims[0]!==a.dims[1])throw new Error('Input "bias" dimension 0 should have same length as dimension 1 of input "weights"');let f=n.dims[0]/3,m=f,g=m;if(t.qkvHiddenSizes.length>0){if(t.qkvHiddenSizes.length!==3)throw new Error("qkv_hidden_sizes attribute should have 3 elements");for(let k of t.qkvHiddenSizes)if(k%t.numHeads!==0)throw new Error("qkv_hidden_sizes should be divisible by num_heads");f=t.qkvHiddenSizes[0],m=t.qkvHiddenSizes[1],g=t.qkvHiddenSizes[2]}let _=l;if(f!==m)throw new Error("qkv_hidden_sizes first element should be same as the second");if(n.dims[0]!==f+m+g)throw new Error('Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes');let b=0;if(s){if(m!==g)throw new Error('Input "past" expect k_hidden_size == v_hidden_size');if(s.dims.length!==5)throw new Error('Input "past" must have 5 dimensions');if(s.dims[0]!==2)throw new Error('Input "past" first dimension must be 2');if(s.dims[1]!==d)throw new Error('Input "past" second dimension must be batch_size');if(s.dims[2]!==t.numHeads)throw new Error('Input "past" third dimension must be num_heads');if(s.dims[4]!==m/t.numHeads)throw new Error('Input "past" fifth dimension must be k_hidden_size / num_heads');t.pastPresentShareBuffer||(b=s.dims[3])}let x=_+b,w=-1,$=0;if(i)throw new Error("Mask not supported");if(s)throw new Error("past is not supported");if(u){if(u.dims.length!==4)throw new Error('Input "attention_bias" must have 4 dimensions');if(u.dims[0]!==d||u.dims[1]!==t.numHeads||u.dims[2]!==l||u.dims[3]!==x)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:d,sequenceLength:l,pastSequenceLength:b,kvSequenceLength:_,totalSequenceLength:x,maxSequenceLength:w,inputHiddenSize:c,hiddenSize:f,vHiddenSize:g,headSize:Math.floor(f/t.numHeads),vHeadSize:Math.floor(g/t.numHeads),numHeads:t.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:t.maskFilterValue,maskType:$,scale:t.scale,broadcastResPosBias:!1,passPastInKv:!1,qkvFormat:1}},Tr=(e,t,r)=>t&&e?`
170      let total_sequence_length_input = u32(${t.getByOffset("0")});
171      let present_sequence_length = max(total_sequence_length_input, uniforms.past_sequence_length);
172      let is_subsequent_prompt: bool = sequence_length > 1 && sequence_length != total_sequence_length_input;
173      let is_first_prompt: bool = is_subsequent_prompt == false && sequence_length == total_sequence_length_input;
174      total_sequence_length = u32(${e==null?void 0:e.getByOffset("batchIdx")}) + 1;
175      var past_sequence_length: u32 = 0;
176      if (is_first_prompt == false) {
177        past_sequence_length = total_sequence_length - sequence_length;
178      }
179       `:`
180    ${r?"let past_sequence_length = uniforms.past_sequence_length":""};
181    let present_sequence_length = total_sequence_length;
182    `,yo=(e,t,r,a,n,i,s,u)=>{let d=$e(s?1:i),l=64,c=i/d;c<l&&(l=32);let f=Math.ceil(i/d/l),m=[{type:12,data:t},{type:12,data:r},{type:12,data:a},{type:12,data:n},{type:12,data:c},{type:12,data:f}],g=Se(e.dataType,d),_=Ee(1,d),b=["type"];s&&b.push("type"),u&&b.push("type");let x=w=>{let $=G("x",e.dataType,e.dims,d),k=[$],S=s?R("seq_lens",s.dataType,s.dims):void 0;S&&k.push(S);let T=u?R("total_sequence_length_input",u.dataType,u.dims):void 0;T&&k.push(T);let E=Ee(e.dataType),z=[{name:"batch_size",type:"u32"},{name:"num_heads",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"sequence_length",type:"u32"},{name:"total_sequence_length",type:"u32"},{name:"elements_per_thread",type:"u32"}];return`
183  var<workgroup> thread_max: array<f32, ${l}>;
184  var<workgroup> thread_sum: array<f32, ${l}>;
185  ${w.registerUniforms(z).declareVariables(...k)}
186  ${w.mainStart([l,1,1])}
187    let batchIdx = workgroup_id.z / uniforms.num_heads;
188    let headIdx = workgroup_id.z % uniforms.num_heads;
189    let sequence_length = uniforms.sequence_length;
190    var total_sequence_length = uniforms.total_sequence_length;
191    ${Tr(S,T,!1)}
192    let local_offset = local_idx * uniforms.elements_per_thread;
193    let offset = (global_idx / ${l}) * uniforms.total_sequence_length + local_offset;
194    let seq_causal_length = ${s?"u32(past_sequence_length + workgroup_id.y + 1)":"total_sequence_length"};
195    var thread_max_vector = ${_}(-3.402823e+38f);
196    for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
197      thread_max_vector = max(${_}(x[offset + i]), thread_max_vector);
198    }
199    thread_max[local_idx] = ${(()=>{switch(d){case 1:return"thread_max_vector";case 2:return"max(thread_max_vector.x, thread_max_vector.y)";case 4:return"max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))";default:throw new Error(`Unsupported components: ${d}`)}})()};
200    workgroupBarrier();
201
202    var max_value =  f32(-3.402823e+38f);
203    for (var i = 0u; i < ${l}; i++) {
204      max_value = max(thread_max[i], max_value);
205    }
206
207    var sum_vector = ${_}(0);
208    for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
209      sum_vector += exp(${_}(x[offset + i]) - max_value);
210    }
211    thread_sum[local_idx] = ${(()=>{switch(d){case 1:return"sum_vector";case 2:return"sum_vector.x + sum_vector.y";case 4:return"sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w";default:throw new Error(`Unsupported components: ${d}`)}})()};
212    workgroupBarrier();
213
214    var sum: f32 = 0;
215    for (var i = 0u; i < ${l}; i++) {
216      sum += thread_sum[i];
217    }
218
219    if (sum == 0) {
220      for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
221        x[offset + i] = ${$.type.value}(${E}(1.0) / ${E}(seq_causal_length));
222      }
223    } else {
224      for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
225        var f32input = ${_}(x[offset + i]);
226        x[offset + i] = ${$.type.value}(exp(f32input - max_value) / sum);
227      }
228    }
229      ${s?`
230        for (var total_seq_id: u32 = seq_causal_length; total_seq_id + local_offset < uniforms.total_sequence_length; total_seq_id++) {
231          x[offset + total_seq_id] = ${$.type.value}(${E}(0));
232        }`:""};
233  }`};return{name:"AttentionProbsSoftmax",shaderCache:{hint:`${l};${g};${d}`,inputDependencies:b},getShaderSource:x,getRunData:()=>({outputs:[],dispatchGroup:{x:1,y:n,z:t*r},programUniforms:m})}},bo=(e,t,r,a,n,i,s,u,d)=>{let l=s+i.kvSequenceLength,c=[i.batchSize,i.numHeads,i.sequenceLength,l],f=e>1&&a,m=i.kvNumHeads?i.kvNumHeads:i.numHeads,g=f?[i.batchSize,m,l,i.headSize]:void 0,_=i.nReps?i.nReps:1,b=i.scale===0?1/Math.sqrt(i.headSize):i.scale,x=$e(i.headSize),w=i.headSize/x,$=12,k={x:Math.ceil(l/$),y:Math.ceil(i.sequenceLength/$),z:i.batchSize*i.numHeads},S=[{type:12,data:i.sequenceLength},{type:12,data:w},{type:12,data:l},{type:12,data:i.numHeads},{type:12,data:i.headSize},{type:1,data:b},{type:12,data:s},{type:12,data:i.kvSequenceLength},{type:12,data:_}],T=f&&a&&C.size(a.dims)>0,E=["type","type"];T&&E.push("type"),n&&E.push("type"),u&&E.push("type"),d&&E.push("type");let z=[{dims:c,dataType:t.dataType,gpuDataType:0}];f&&z.push({dims:g,dataType:t.dataType,gpuDataType:0});let A=O=>{let q=R("q",t.dataType,t.dims,x),X=R("key",r.dataType,r.dims,x),H=[q,X];if(T){let ee=R("past_key",a.dataType,a.dims,x);H.push(ee)}n&&H.push(R("attention_bias",n.dataType,n.dims));let Q=u?R("seq_lens",u.dataType,u.dims):void 0;Q&&H.push(Q);let oe=d?R("total_sequence_length_input",d.dataType,d.dims):void 0;oe&&H.push(oe);let te=G("output",t.dataType,c),V=[te];f&&V.push(G("present_key",t.dataType,g,x));let W=Ee(1,x),le=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"alpha",type:"f32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return`
234  const TILE_SIZE = ${$}u;
235
236  var<workgroup> tileQ: array<${q.type.storage}, ${$*$}>;
237  var<workgroup> tileK: array<${q.type.storage}, ${$*$}>;
238  ${O.registerUniforms(le).declareVariables(...H,...V)}
239  ${O.mainStart([$,$,1])}
240    // x holds the N and y holds the M
241    let headIdx = workgroup_id.z % uniforms.num_heads;
242    let kvHeadIdx = ${_===1?"headIdx":"headIdx / uniforms.n_reps"};
243    let kv_num_heads = ${_===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"};
244    let batchIdx = workgroup_id.z / uniforms.num_heads;
245    let m = workgroup_id.y * TILE_SIZE;
246    let n = workgroup_id.x * TILE_SIZE;
247    let sequence_length = uniforms.M;
248    var total_sequence_length = uniforms.N;
249    ${Tr(Q,oe,!0)}
250    let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx;
251    let qOffset = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K;
252    ${T&&f?"let pastKeyOffset = absKvHeadIdx * uniforms.past_sequence_length * uniforms.K;":""};
253    let kOffset = absKvHeadIdx * uniforms.kv_sequence_length * uniforms.K;
254    ${f?"let presentKeyOffset = absKvHeadIdx * uniforms.N * uniforms.K;":""}
255    var value = ${W}(0);
256    for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
257      if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) {
258        tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x];
259      }
260      if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) {
261        var idx = TILE_SIZE * local_id.y + local_id.x;
262      ${T&&f?`
263              if (n + local_id.y < past_sequence_length) {
264                tileK[idx] = past_key[pastKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x];
265              } else if (n + local_id.y - past_sequence_length < uniforms.kv_sequence_length) {
266                tileK[idx] = key[kOffset + (n + local_id.y - past_sequence_length) * uniforms.K + w + local_id.x];
267              }`:`
268          if (n + local_id.y < uniforms.kv_sequence_length) {
269            tileK[idx] = key[kOffset + (n + local_id.y) * uniforms.K + w + local_id.x];
270          }`}
271      ${f?`if (n + local_id.y < present_sequence_length) {
272        present_key[presentKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x] = tileK[idx];
273      }`:""}
274      }
275      workgroupBarrier();
276
277      for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) {
278          value += ${W}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]);
279      }
280
281      workgroupBarrier();
282    }
283
284    if (global_id.y < uniforms.M && global_id.x < total_sequence_length) {
285      let headOffset = workgroup_id.z * uniforms.M * uniforms.N;
286      let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x;
287      var sum: f32 = ${(()=>{switch(x){case 1:return"value";case 2:return"value.x + value.y";case 4:return"value.x + value.y + value.z + value.w";default:throw new Error(`Unsupported components: ${x}`)}})()};
288        output[outputIdx] = ${te.type.value} (sum * uniforms.alpha) + ${n?"attention_bias[outputIdx]":"0.0"};
289    }
290  }`};return{name:"AttentionProbs",shaderCache:{hint:`${x};${n!==void 0};${a!==void 0};${e}`,inputDependencies:E},getRunData:()=>({outputs:z,dispatchGroup:k,programUniforms:S}),getShaderSource:A}},$o=(e,t,r,a,n,i,s=void 0,u=void 0)=>{let d=i+n.kvSequenceLength,l=n.nReps?n.nReps:1,c=n.vHiddenSize*l,f=e>1&&a,m=n.kvNumHeads?n.kvNumHeads:n.numHeads,g=f?[n.batchSize,m,d,n.headSize]:void 0,_=[n.batchSize,n.sequenceLength,c],b=12,x={x:Math.ceil(n.vHeadSize/b),y:Math.ceil(n.sequenceLength/b),z:n.batchSize*n.numHeads},w=[{type:12,data:n.sequenceLength},{type:12,data:d},{type:12,data:n.vHeadSize},{type:12,data:n.numHeads},{type:12,data:n.headSize},{type:12,data:c},{type:12,data:i},{type:12,data:n.kvSequenceLength},{type:12,data:l}],$=f&&a&&C.size(a.dims)>0,k=["type","type"];$&&k.push("type"),s&&k.push("type"),u&&k.push("type");let S=[{dims:_,dataType:t.dataType,gpuDataType:0}];f&&S.push({dims:g,dataType:t.dataType,gpuDataType:0});let T=E=>{let z=R("probs",t.dataType,t.dims),A=R("v",r.dataType,r.dims),O=[z,A];$&&O.push(R("past_value",a.dataType,a.dims));let q=s?R("seq_lens",s.dataType,s.dims):void 0;s&&O.push(q);let X=u?R("total_sequence_length_input",u.dataType,u.dims):void 0;u&&O.push(X);let H=[G("output",t.dataType,_)];f&&H.push(G("present_value",t.dataType,g));let Q=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"v_hidden_size",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return`
291  const TILE_SIZE = ${b}u;
292  var<workgroup> tileQ: array<${z.type.value}, ${b*b}>;
293  var<workgroup> tileV: array<${z.type.value}, ${b*b}>;
294  ${E.registerUniforms(Q).declareVariables(...O,...H)}
295  ${E.mainStart([b,b,1])}
296   let headIdx = workgroup_id.z % uniforms.num_heads;
297   let batchIdx = workgroup_id.z / uniforms.num_heads;
298   let kvHeadIdx = ${l===1?"headIdx":"headIdx / uniforms.n_reps"};
299   let kv_num_heads = ${l===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"};
300   let m = global_id.y;
301   let n = global_id.x;
302   let sequence_length = uniforms.M;
303   var total_sequence_length = uniforms.K;
304   ${Tr(q,X,!0)}
305   let offsetA = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K;
306   let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; // kvHeadIdx is relative to the batch
307   ${$&&f?"let pastValueOffset = absKvHeadIdx * uniforms.N * uniforms.past_sequence_length + n;":""};
308   let vOffset = absKvHeadIdx * uniforms.N * uniforms.kv_sequence_length + n;
309   ${f?"let presentValueOffset = absKvHeadIdx * uniforms.N * uniforms.K + n;":""}
310   var value = ${z.type.storage}(0);
311   for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
312      if (m < uniforms.M && w + local_id.x < uniforms.K) {
313        tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x];
314      }
315      if (n < uniforms.N && w + local_id.y < uniforms.K) {
316        var idx = TILE_SIZE * local_id.y + local_id.x;
317        ${$&&f?`
318        if (w + local_id.y < past_sequence_length) {
319          tileV[idx] = past_value[pastValueOffset + (w + local_id.y) * uniforms.N];
320        } else if (w + local_id.y - past_sequence_length < uniforms.kv_sequence_length) {
321          tileV[idx] = v[vOffset + (w + local_id.y - past_sequence_length) * uniforms.N];
322        }
323      `:`
324            if (w + local_id.y < uniforms.kv_sequence_length) {
325              tileV[idx] = v[vOffset + (w + local_id.y) * uniforms.N];
326            }`}
327        ${f?`
328            if (w + local_id.y < present_sequence_length) {
329          present_value[presentValueOffset + (w + local_id.y) * uniforms.N] = tileV[idx];
330        }`:""}
331      }
332     workgroupBarrier();
333     for (var k: u32 = 0u; k < TILE_SIZE && w+k < total_sequence_length; k++) {
334       value += tileQ[TILE_SIZE * local_id.y + k] * tileV[TILE_SIZE * k + local_id.x];
335     }
336     workgroupBarrier();
337   }
338
339   // we need to transpose output from BNSH_v to BSND_v
340   if (m < uniforms.M && n < uniforms.N) {
341     let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size
342       + headIdx * uniforms.N + n;
343     output[outputIdx] = value;
344   }
345  }`};return{name:"AttentionScore",shaderCache:{hint:`${a!==void 0};${e}`,inputDependencies:k},getRunData:()=>({outputs:S,dispatchGroup:x,programUniforms:w}),getShaderSource:T}},or=(e,t,r,a,n,i,s,u,d,l,c=void 0,f=void 0)=>{let m=Math.min(e.outputCount,1+(s?1:0)+(u?1:0)),g=m>1?l.pastSequenceLength:0,_=g+l.kvSequenceLength,b=d&&C.size(d.dims)>0?d:void 0,x=[t,r];m>1&&s&&C.size(s.dims)>0&&x.push(s),b&&x.push(b),c&&x.push(c),f&&x.push(f);let w=e.compute(bo(m,t,r,s,b,l,g,c,f),{inputs:x,outputs:m>1?[-1,1]:[-1]})[0];e.compute(yo(w,l.batchSize,l.numHeads,g,l.sequenceLength,_,c,f),{inputs:c&&f?[w,c,f]:[w],outputs:[]});let $=[w,a];m>1&&u&&C.size(u.dims)>0&&$.push(u),c&&$.push(c),f&&$.push(f),e.compute($o(m,w,a,u,l,g,c,f),{inputs:$,outputs:m>1?[0,2]:[0]})},wo=(e,t)=>{let r=[t.batchSize,t.numHeads,t.sequenceLength,t.headSize],a=t.sequenceLength,n=t.inputHiddenSize,i=t.headSize,s=12,u={x:Math.ceil(t.headSize/s),y:Math.ceil(t.sequenceLength/s),z:t.batchSize*t.numHeads},d=[e.inputs[0],e.inputs[1],e.inputs[2]],l=[{type:12,data:a},{type:12,data:n},{type:12,data:i},{type:12,data:t.numHeads},{type:12,data:t.headSize},{type:12,data:t.hiddenSize},{type:12,data:t.hiddenSize+t.hiddenSize+t.vHiddenSize}],c=f=>{let m=G("output_q",d[0].dataType,r),g=G("output_k",d[0].dataType,r),_=G("output_v",d[0].dataType,r),b=R("input",d[0].dataType,d[0].dims),x=R("weight",d[1].dataType,d[1].dims),w=R("bias",d[2].dataType,d[2].dims),$=b.type.storage,k=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"hidden_size",type:"u32"},{name:"ldb",type:"u32"}];return`
346  const TILE_SIZE = ${s}u;
347  var<workgroup> tileInput: array<${$}, ${s*s}>;
348  var<workgroup> tileWeightQ: array<${$}, ${s*s}>;
349  var<workgroup> tileWeightK: array<${$}, ${s*s}>;
350  var<workgroup> tileWeightV: array<${$}, ${s*s}>;
351  ${f.registerUniforms(k).declareVariables(b,x,w,m,g,_)}
352  ${f.mainStart([s,s,1])}
353    let batchIndex = workgroup_id.z / uniforms.num_heads;
354    let headNumber = workgroup_id.z % uniforms.num_heads;
355    let m = global_id.y;
356    let n = global_id.x;
357
358    let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K;
359    let biasOffsetQ = headNumber * uniforms.head_size;
360    let biasOffsetK = uniforms.hidden_size + biasOffsetQ;
361    let biasOffsetV = uniforms.hidden_size + biasOffsetK;
362
363    var valueQ = ${$}(0);
364    var valueK = ${$}(0);
365    var valueV = ${$}(0);
366    for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
367      if (m < uniforms.M && w + local_id.x < uniforms.K) {
368        tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x];
369      }
370      if (n < uniforms.N && w + local_id.y < uniforms.K) {
371        let offset = n + (w + local_id.y) * uniforms.ldb;
372        tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset];
373        tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset];
374        tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset];
375      }
376      workgroupBarrier();
377      for (var k: u32 = 0u; k<TILE_SIZE && w+k < uniforms.K; k++) {
378        let inputTileOffset = TILE_SIZE * local_id.y + k;
379        let weightTileOffset = TILE_SIZE * k + local_id.x;
380        valueQ += tileInput[inputTileOffset] * tileWeightQ[weightTileOffset];
381        valueK += tileInput[inputTileOffset] * tileWeightK[weightTileOffset];
382        valueV += tileInput[inputTileOffset] * tileWeightV[weightTileOffset];
383      }
384
385      workgroupBarrier();
386    }
387
388    let headOffset = (m * uniforms.N + n) % uniforms.head_size;
389    valueQ += bias[headOffset + biasOffsetQ];
390    valueK += bias[headOffset + biasOffsetK];
391    valueV += bias[headOffset + biasOffsetV];
392
393    let offset = workgroup_id.z * uniforms.M * uniforms.N;
394    if (m < uniforms.M && n < uniforms.N) {
395      let outputIdx = offset + m * uniforms.N + n;
396      output_q[outputIdx] = valueQ;
397      output_k[outputIdx] = valueK;
398      output_v[outputIdx] = valueV;
399    }
400  }`};return e.compute({name:"AttentionPrepare",shaderCache:{inputDependencies:["type","type","type"]},getRunData:()=>({outputs:[{dims:r,dataType:e.inputs[0].dataType,gpuDataType:0},{dims:r,dataType:e.inputs[0].dataType,gpuDataType:0},{dims:r,dataType:e.inputs[0].dataType,gpuDataType:0}],dispatchGroup:u,programUniforms:l}),getShaderSource:c},{inputs:d,outputs:[-1,-1,-1]})},ip=(e,t)=>{let r=_o(e.inputs,t),[a,n,i]=wo(e,r);return or(e,a,n,i,e.inputs[4],void 0,void 0,void 0,e.inputs[5],r)}}),vo,xo,So,ap,Im=U(()=>{Ke(),J(),re(),we(),ie(),vo=(e,t)=>{if(!e||e.length!==5)throw new Error("BatchNormalization requires 5 inputs");let r=(a,n,i)=>{let s=n.length;if(s!==a.length)throw new Error(`${i}: num dimensions != ${s}`);n.forEach((u,d)=>{if(u!==a[d])throw new Error(`${i}: dim[${d}] do not match`)})};if(e[0].dims.length>1){let a=t.format==="NHWC"?t.spatial?e[0].dims.slice(-1):e[0].dims.slice(-1).concat(e[0].dims.slice(1,e[0].dims.length-1)):e[0].dims.slice(1,t.spatial?2:void 0);r(e[1].dims,a,"Invalid input scale"),r(e[2].dims,a,"Invalid input B"),r(e[3].dims,a,"Invalid input mean"),r(e[4].dims,a,"Invalid input var")}else r(e[1].dims,[1],"Invalid input scale"),r(e[2].dims,[1],"Invalid input B"),r(e[3].dims,[1],"Invalid input mean"),r(e[4].dims,[1],"Invalid input var")},xo=(e,t)=>{let{epsilon:r,spatial:a,format:n}=t,i=e[0].dims,s=a?$e(i[i.length-1]):1,u=n==="NHWC"&&i.length>1?s:1,d=C.size(i)/s,l=a,c=l?i.length:i,f=R("x",e[0].dataType,e[0].dims,s),m=R("scale",e[1].dataType,e[1].dims,u),g=R("bias",e[2].dataType,e[2].dims,u),_=R("inputMean",e[3].dataType,e[3].dims,u),b=R("inputVar",e[4].dataType,e[4].dims,u),x=G("y",e[0].dataType,c,s),w=()=>{let k="";if(a)k=`let cOffset = ${i.length===1?"0u":n==="NHWC"?`outputIndices[${i.length-1}] / ${s}`:"outputIndices[1]"};`;else if(n==="NCHW")k=`
401            ${x.indicesSet("outputIndices","0","0")}
402            let cOffset = ${x.indicesToOffset("outputIndices")};`;else{k=`var cIndices = ${m.type.indices}(0);
403                       cIndices[0] = outputIndices[${i.length-1}];`;for(let S=1;S<m.rank;S++)k+=`cIndices[${S}] = outputIndices[${S}];`;k+=`let cOffset = ${m.indicesToOffset("cIndices")};`}return k},$=k=>`
404  const epsilon = ${r};
405  ${k.registerUniform("outputSize","u32").declareVariables(f,m,g,_,b,x)}
406  ${k.mainStart()}
407  ${k.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
408    var outputIndices = ${x.offsetToIndices(`global_idx * ${s}`)};
409    ${w()}
410    let scale = ${m.getByOffset("cOffset")};
411    let bias = ${g.getByOffset("cOffset")};
412    let inputMean = ${_.getByOffset("cOffset")};
413    let inputVar = ${b.getByOffset("cOffset")};
414    let x = ${f.getByOffset("global_idx")};
415    let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias;
416    ${x.setByOffset("global_idx","value")}
417  }`;return{name:"BatchNormalization",shaderCache:{hint:`${t.epsilon}_${t.format}_${a}_${s}`,inputDependencies:l?["rank","type","type","type","type"]:void 0},getShaderSource:$,getRunData:()=>({outputs:[{dims:e[0].dims,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(d/64)},programUniforms:l?[{type:12,data:d},...Z(i)]:[{type:12,data:d}]})}},So=e=>ce(e),ap=(e,t)=>{let{inputs:r,outputCount:a}=e,n=So({...t,outputCount:a});if(ye.webgpu.validateInputContent&&vo(r,n),t.trainingMode)throw new Error("BatchNormalization trainingMode is not supported yet.");e.compute(xo(r,n))}}),ko,To,np,Em=U(()=>{re(),ie(),ko=e=>{if(e[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![320,640,1280].includes(e[0].dims[2]))throw new Error("number of channels should be 320, 640 or 1280");if(e[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(e[0].dims[2]!==e[1].dims[0])throw new Error("last dimension of input and bias are not the same")},To=e=>{let t=e[0].dims,r=e[0].dims[2],a=C.size(t)/4,n=e[0].dataType,i=R("input",n,t,4),s=R("bias",n,[r],4),u=R("residual",n,t,4),d=G("output",n,t,4);return{name:"BiasAdd",getRunData:()=>({outputs:[{dims:t,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)}}),getShaderSource:l=>`
418  const channels = ${r}u / 4;
419  ${l.declareVariables(i,s,u,d)}
420
421  ${l.mainStart()}
422    ${l.guardAgainstOutOfBoundsWorkgroupSizes(a)}
423    let value = ${i.getByOffset("global_idx")}
424      + ${s.getByOffset("global_idx % channels")} + ${u.getByOffset("global_idx")};
425    ${d.setByOffset("global_idx","value")}
426  }`}},np=e=>{ko(e.inputs),e.compute(To(e.inputs))}}),Io,pe,sp,op,up,lp,dp,pp,cp,fp,hp,Eo,mp,gp,_p,yp,rr,bp,Rr,$p,wp,vp,xp,Sp,kp,Tp,Ip,Ep,zp,Cp,Ap,Op,Bp,Rp,Dp,Ai,Np,ma,ga,Mp,Pp,Up,zo,Co,qp,Wa=U(()=>{J(),re(),we(),ie(),Io=(e,t,r,a,n,i,s)=>{let u=Math.ceil(t/4),d="";typeof n=="string"?d=`${n}(a)`:d=n("a");let l=R("inputData",r,[u],4),c=G("outputData",a,[u],4),f=[{name:"vec_size",type:"u32"}];return s&&f.push(...s),`
427      ${e.registerUniforms(f).declareVariables(l,c)}
428
429  ${i??""}
430
431  ${e.mainStart()}
432    ${e.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
433
434    let a = ${l.getByOffset("global_idx")};
435    ${c.setByOffset("global_idx",d)}
436  }`},pe=(e,t,r,a,n,i=e.dataType,s,u)=>{let d=[{type:12,data:Math.ceil(C.size(e.dims)/4)}];return s&&d.push(...s),{name:t,shaderCache:{hint:n,inputDependencies:["type"]},getShaderSource:l=>Io(l,C.size(e.dims),e.dataType,i,r,a,u),getRunData:l=>({outputs:[{dims:e.dims,dataType:i}],dispatchGroup:{x:Math.ceil(C.size(l[0].dims)/64/4)},programUniforms:d})}},sp=e=>{e.compute(pe(e.inputs[0],"Abs","abs"))},op=e=>{e.compute(pe(e.inputs[0],"Acos","acos"))},up=e=>{e.compute(pe(e.inputs[0],"Acosh","acosh"))},lp=e=>{e.compute(pe(e.inputs[0],"Asin","asin"))},dp=e=>{e.compute(pe(e.inputs[0],"Asinh","asinh"))},pp=e=>{e.compute(pe(e.inputs[0],"Atan","atan"))},cp=e=>{e.compute(pe(e.inputs[0],"Atanh","atanh"))},fp=e=>ce(e),hp=(e,t)=>{let r;switch(t.to){case 10:r="vec4<f16>";break;case 1:r="vec4<f32>";break;case 12:r="vec4<u32>";break;case 6:r="vec4<i32>";break;case 9:r="vec4<bool>";break;default:throw new RangeError(`not supported type (specified in attribute 'to' from 'Cast' operator): ${t.to}`)}e.compute(pe(e.inputs[0],"Cast",r,void 0,t.cacheKey,t.to))},Eo=e=>{let t,r,a=e.length>=2&&e[1].data!==0,n=e.length>=3&&e[2].data!==0;switch(e[0].dataType){case 1:t=a?e[1].getFloat32Array()[0]:-34028234663852886e22,r=n?e[2].getFloat32Array()[0]:34028234663852886e22;break;case 10:t=a?e[1].getUint16Array()[0]:64511,r=n?e[2].getUint16Array()[0]:31743;break;default:throw new Error("Unsupport data type")}return ce({min:t,max:r})},mp=(e,t)=>{let r=t||Eo(e.inputs),a=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"Clip",n=>`clamp(${n}, vec4<${a}>(uniforms.min), vec4<${a}>(uniforms.max))`,void 0,r.cacheKey,void 0,[{type:e.inputs[0].dataType,data:r.min},{type:e.inputs[0].dataType,data:r.max}],[{name:"min",type:a},{name:"max",type:a}]),{inputs:[0]})},gp=e=>{e.compute(pe(e.inputs[0],"Ceil","ceil"))},_p=e=>{e.compute(pe(e.inputs[0],"Cos","cos"))},yp=e=>{e.compute(pe(e.inputs[0],"Cosh","cosh"))},rr=e=>ce(e),bp=(e,t)=>{let r=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"Elu",a=>`elu_vf32(${a})`,`
437  const elu_alpha_ = ${r}(${t.alpha});
438
439  fn elu_f32(a: ${r}) -> ${r} {
440  return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0);
441  }
442
443  fn elu_vf32(v: vec4<${r}>) -> vec4<${r}> {
444  return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w));
445  }`,t.cacheKey))},Rr=(e="f32")=>`
446const r0: ${e} = 0.3275911;
447const r1: ${e} = 0.254829592;
448const r2: ${e} = -0.284496736;
449const r3: ${e} = 1.421413741;
450const r4: ${e} = -1.453152027;
451const r5: ${e} = 1.061405429;
452
453fn erf_vf32(v: vec4<${e}>) -> vec4<${e}> {
454  let absv = abs(v);
455  let x = 1.0 / (1.0 + r0 * absv);
456  return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv));
457}`,$p=e=>{let t=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"Erf",r=>`erf_vf32(${r})`,Rr(t)))},wp=e=>{e.compute(pe(e.inputs[0],"Exp","exp"))},vp=e=>{e.compute(pe(e.inputs[0],"Floor","floor"))},xp=e=>{let t=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"Gelu",r=>`0.5 * ${r} * (1.0 + erf_vf32(${r} * 0.7071067811865475))`,Rr(t)))},Sp=(e,t)=>{let r=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"LeakyRelu",a=>`select(leaky_relu_alpha_ * ${a}, ${a}, ${a} >= vec4<${r}>(0.0))`,`const leaky_relu_alpha_ = ${r}(${t.alpha});`,t.cacheKey))},kp=e=>{e.compute(pe(e.inputs[0],"Not",t=>`!${t}`))},Tp=e=>{e.compute(pe(e.inputs[0],"Neg",t=>`-${t}`))},Ip=e=>{e.compute(pe(e.inputs[0],"Reciprocal",t=>`1.0/${t}`))},Ep=e=>{let t=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"Relu",r=>`select(vec4<${t}>(0.0), ${r}, ${r} > vec4<${t}>(0.0))`))},zp=e=>{e.compute(pe(e.inputs[0],"Sigmoid",t=>`(1.0 / (1.0 + exp(-${t})))`))},Cp=e=>ce(e),Ap=(e,t)=>{let r=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"HardSigmoid",a=>`max(vec4<${r}>(0.0), min(vec4<${r}>(1.0), ${t.alpha} * ${a} + vec4<${r}>(${t.beta})))`,void 0,t.cacheKey))},Op=e=>{e.compute(pe(e.inputs[0],"Sin","sin"))},Bp=e=>{e.compute(pe(e.inputs[0],"Sinh","sinh"))},Rp=e=>{e.compute(pe(e.inputs[0],"Sqrt","sqrt"))},Dp=e=>{e.compute(pe(e.inputs[0],"Tan","tan"))},Ai=e=>`sign(${e}) * (1 - exp(-2 * abs(${e}))) / (1 + exp(-2 * abs(${e})))`,Np=e=>{e.compute(pe(e.inputs[0],"Tanh",Ai))},ma=(e="f32")=>`
458const fast_gelu_a: ${e} = 0.5;
459const fast_gelu_b: ${e} = 0.7978845608028654;
460const fast_gelu_c: ${e} = 0.035677408136300125;
461
462fn tanh_v(v: vec4<${e}>) -> vec4<${e}> {
463  return ${Ai("v")};
464}
465`,ga=e=>`(fast_gelu_a + fast_gelu_a * tanh_v(${e} * (fast_gelu_c * ${e} * ${e} + fast_gelu_b))) * ${e}`,Mp=e=>{let t=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"FastGelu",ga,ma(t),void 0,e.inputs[0].dataType))},Pp=(e,t)=>{let r=Ee(e.inputs[0].dataType);return e.compute(pe(e.inputs[0],"ThresholdedRelu",a=>`select(vec4<${r}>(0.0), ${a}, ${a} > thresholded_relu_alpha_)`,`const thresholded_relu_alpha_ = vec4<${r}>(${t.alpha});`,t.cacheKey)),0},Up=e=>{e.compute(pe(e.inputs[0],"Log","log"))},zo=(e,t)=>`
466const alpha = vec4<${e}>(${t});
467const one = ${e}(1.0);
468const zero = ${e}(0.0);
469
470fn quick_gelu_impl(x: vec4<${e}>) -> vec4<${e}> {
471  let v = x *alpha;
472  var x1 : vec4<${e}>;
473  for (var i = 0; i < 4; i = i + 1) {
474    if (v[i] >= zero) {
475      x1[i] = one / (one + exp(-v[i]));
476    } else {
477      x1[i] = one - one / (one + exp(v[i]));
478    }
479  }
480  return x * x1;
481}
482`,Co=e=>`quick_gelu_impl(${e})`,qp=(e,t)=>{let r=Ee(e.inputs[0].dataType);e.compute(pe(e.inputs[0],"QuickGelu",Co,zo(r,t.alpha),t.cacheKey,e.inputs[0].dataType))}}),Ao,Oo,Wp,zm=U(()=>{re(),ie(),Wa(),Ao=e=>{if(e[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![2560,5120,10240].includes(e[0].dims[2]))throw new Error("hidden state should be 2560, 5120 or 10240");if(e[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(e[0].dims[2]!==e[1].dims[0])throw new Error("last dimension of input and bias are not the same")},Oo=e=>{let t=e[0].dims.slice();t[2]=t[2]/2;let r=R("input",e[0].dataType,e[0].dims,4),a=R("bias",e[0].dataType,[e[0].dims[2]],4),n=G("output",e[0].dataType,t,4),i=C.size(t)/4,s=Se(e[0].dataType);return{name:"BiasSplitGelu",getRunData:()=>({outputs:[{dims:t,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(i/64)}}),getShaderSource:u=>`
483  const M_SQRT2 = sqrt(2.0);
484  const halfChannels = ${e[0].dims[2]/4/2}u;
485
486  ${u.declareVariables(r,a,n)}
487
488  ${Rr(s)}
489
490  ${u.mainStart()}
491    ${u.guardAgainstOutOfBoundsWorkgroupSizes(i)}
492    let biasIdx = global_idx % halfChannels;
493    let batchIndex = global_idx / halfChannels;
494    let inputOffset = biasIdx + batchIndex * halfChannels * 2;
495    let valueLeft = input[inputOffset] + bias[biasIdx];
496    let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels];
497    let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1);
498
499    ${n.setByOffset("global_idx","valueLeft * geluRight")}
500  }`}},Wp=e=>{Ao(e.inputs),e.compute(Oo(e.inputs))}}),Bo,Ro,je,Lp,Vp,jp,Hp,Gp,Fp,Kp,Zp,Qp,Xp,Cm=U(()=>{J(),re(),ie(),Bo=(e,t,r,a,n,i,s,u,d,l,c,f)=>{let m,g;typeof u=="string"?m=g=($,k)=>`${u}((${$}),(${k}))`:typeof u=="function"?m=g=u:(m=u.scalar,g=u.vector);let _=G("outputData",c,a.length,4),b=R("aData",d,t.length,4),x=R("bData",l,r.length,4),w;if(n)if(i){let $=C.size(t)===1,k=C.size(r)===1,S=t.length>0&&t[t.length-1]%4===0,T=r.length>0&&r[r.length-1]%4===0;$||k?w=_.setByOffset("global_idx",g($?`${b.type.value}(${b.getByOffset("0")}.x)`:b.getByOffset("global_idx"),k?`${x.type.value}(${x.getByOffset("0")}.x)`:x.getByOffset("global_idx"))):w=`
501            let outputIndices = ${_.offsetToIndices("global_idx * 4u")};
502            let offsetA = ${b.broadcastedIndicesToOffset("outputIndices",_)};
503            let offsetB = ${x.broadcastedIndicesToOffset("outputIndices",_)};
504            ${_.setByOffset("global_idx",g(s||S?b.getByOffset("offsetA / 4u"):`${b.type.value}(${b.getByOffset("offsetA / 4u")}[offsetA % 4u])`,s||T?x.getByOffset("offsetB / 4u"):`${x.type.value}(${x.getByOffset("offsetB / 4u")}[offsetB % 4u])`))}
505          `}else w=_.setByOffset("global_idx",g(b.getByOffset("global_idx"),x.getByOffset("global_idx")));else{if(!i)throw new Error("no necessary to use scalar implementation for element-wise binary op implementation.");let $=(k,S,T="")=>{let E=`aData[indexA${S}][componentA${S}]`,z=`bData[indexB${S}][componentB${S}]`;return`
506            let outputIndices${S} = ${_.offsetToIndices(`global_idx * 4u + ${S}u`)};
507            let offsetA${S} = ${b.broadcastedIndicesToOffset(`outputIndices${S}`,_)};
508            let offsetB${S} = ${x.broadcastedIndicesToOffset(`outputIndices${S}`,_)};
509            let indexA${S} = offsetA${S} / 4u;
510            let indexB${S} = offsetB${S} / 4u;
511            let componentA${S} = offsetA${S} % 4u;
512            let componentB${S} = offsetB${S} % 4u;
513            ${k}[${S}] = ${T}(${m(E,z)});
514          `};c===9?w=`
515            var data = vec4<u32>(0);
516            ${$("data",0,"u32")}
517            ${$("data",1,"u32")}
518            ${$("data",2,"u32")}
519            ${$("data",3,"u32")}
520            outputData[global_idx] = dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(data));`:w=`
521            ${$("outputData[global_idx]",0)}
522            ${$("outputData[global_idx]",1)}
523            ${$("outputData[global_idx]",2)}
524            ${$("outputData[global_idx]",3)}
525          `}return`
526        ${e.registerUniform("vec_size","u32").declareVariables(b,x,_)}
527
528        ${f??""}
529
530        ${e.mainStart()}
531        ${e.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
532        ${w}
533      }`},Ro=(e,t,r,a,n,i,s=r.dataType)=>{let u=r.dims.map(b=>Number(b)??1),d=a.dims.map(b=>Number(b)??1),l=!C.areEqual(u,d),c=u,f=C.size(u),m=!1,g=!1,_=[l];if(l){let b=Nt.calcShape(u,d,!1);if(!b)throw new Error("Can't perform binary op on the given tensors");c=b.slice(),f=C.size(c);let x=C.size(u)===1,w=C.size(d)===1,$=u.length>0&&u[u.length-1]%4===0,k=d.length>0&&d[d.length-1]%4===0;_.push(x),_.push(w),_.push($),_.push(k);let S=1;for(let T=1;T<c.length;T++){let E=u[u.length-T],z=d[d.length-T];if(E===z)S*=E;else break}S%4===0?(g=!0,m=!0):(x||w||$||k)&&(m=!0)}else m=!0;return _.push(m),{name:e,shaderCache:{hint:t+_.map(b=>b.toString()).join("_"),inputDependencies:["rank","rank"]},getShaderSource:b=>Bo(b,u,d,c,m,l,g,n,r.dataType,a.dataType,s,i),getRunData:()=>({outputs:[{dims:c,dataType:s}],dispatchGroup:{x:Math.ceil(f/64/4)},programUniforms:[{type:12,data:Math.ceil(C.size(c)/4)},...Z(u,d,c)]})}},je=(e,t,r,a,n,i)=>{e.compute(Ro(t,n??"",e.inputs[0],e.inputs[1],r,a,i))},Lp=e=>{je(e,"Add",(t,r)=>`${t}+${r}`)},Vp=e=>{je(e,"Div",(t,r)=>`${t}/${r}`)},jp=e=>{je(e,"Equal",{scalar:(t,r)=>`u32(${t}==${r})`,vector:(t,r)=>`vec4<u32>(${t}==${r})`},void 0,void 0,9)},Hp=e=>{je(e,"Mul",(t,r)=>`${t}*${r}`)},Gp=e=>{let t=R("input",e.inputs[0].dataType,e.inputs[0].dims).type.value;je(e,"Pow",{scalar:(r,a)=>`pow_custom(${r},${a})`,vector:(r,a)=>`pow_vector_custom(${r},${a})`},`
534    fn pow_custom(a : ${t}, b : ${t}) -> ${t} {
535      if (b == ${t}(0.0)) {
536        return ${t}(1.0);
537      } else if (a < ${t}(0.0) && f32(b) != floor(f32(b))) {
538        return ${t}(pow(f32(a), f32(b))); // NaN
539      }
540      return select(sign(a), ${t}(1.0), round(f32(abs(b) % ${t}(2.0))) != 1.0) * ${t}(${t==="i32"?"round":""}(pow(f32(abs(a)), f32(b))));
541    }
542    fn pow_vector_custom(a : vec4<${t}>, b : vec4<${t}>) -> vec4<${t}> {
543      // TODO: implement vectorized pow
544      return vec4<${t}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w));
545    }
546      `)},Fp=e=>{je(e,"Sub",(t,r)=>`${t}-${r}`)},Kp=e=>{je(e,"Greater",{scalar:(t,r)=>`u32(${t}>${r})`,vector:(t,r)=>`vec4<u32>(${t}>${r})`},void 0,void 0,9)},Zp=e=>{je(e,"Less",{scalar:(t,r)=>`u32(${t}<${r})`,vector:(t,r)=>`vec4<u32>(${t}<${r})`},void 0,void 0,9)},Qp=e=>{je(e,"GreaterOrEqual",{scalar:(t,r)=>`u32(${t}>=${r})`,vector:(t,r)=>`vec4<u32>(${t}>=${r})`},void 0,void 0,9)},Xp=e=>{je(e,"LessOrEqual",{scalar:(t,r)=>`u32(${t}<=${r})`,vector:(t,r)=>`vec4<u32>(${t}<=${r})`},void 0,void 0,9)}}),Do,No,Mo,Po,Yp,Jp,Am=U(()=>{J(),re(),we(),ie(),Do=(e,t)=>{if(!e||e.length<1)throw new Error("too few inputs");let r=0,a=e[r],n=a.dataType,i=a.dims.length;e.forEach((s,u)=>{if(u!==r){if(s.dataType!==n)throw new Error("input tensors should be one type");if(s.dims.length!==i)throw new Error("input tensors should have the same shape");s.dims.forEach((d,l)=>{if(l!==t&&d!==a.dims[l])throw new Error("non concat dimensions must match")})}})},No=(e,t)=>`
547  fn calculateInputIndex(index: u32) -> u32 {
548    let sizeInConcatAxis = array<u32, ${e}u>(${t});
549    for (var i: u32 = 0u; i < ${e}; i += 1u ) {
550      if (index < sizeInConcatAxis[i]) {
551        return i;
552      }
553    }
554    return ${e}u;
555  }`,Mo=(e,t)=>{let r=e.length,a=[];for(let n=0;n<r;++n){let i=t.setByOffset("global_idx",e[n].getByIndices("indices"));r===1?a.push(i):n===0?a.push(`if (inputIndex == ${n}u) { ${i} }`):n===r-1?a.push(`else { ${i} }`):a.push(`else if (inputIndex == ${n}) { ${i} }`)}return a.join(`
556`)},Po=(e,t,r,a)=>{let n=C.size(r),i=new Array(e.length),s=new Array(e.length),u=0,d=[],l=[],c=[{type:12,data:n}];for(let b=0;b<e.length;++b)u+=e[b].dims[t],i[b]=u,l.push(e[b].dims.length),s[b]=R(`input${b}`,a,l[b]),d.push("rank"),c.push({type:12,data:i[b]});for(let b=0;b<e.length;++b)c.push(...Z(e[b].dims));c.push(...Z(r));let f=G("output",a,r.length),m=f.indicesGet("indices",t),g=Array.from(Array(i.length).keys()).map(b=>`uniforms.sizeInConcatAxis${b}`).join(","),_=b=>`
557
558  ${(()=>{b.registerUniform("outputSize","u32");for(let x=0;x<e.length;x++)b.registerUniform(`sizeInConcatAxis${x}`,"u32");return b.declareVariables(...s,f)})()}
559
560  ${No(i.length,g)}
561
562  ${b.mainStart()}
563    ${b.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
564
565    var indices = ${f.offsetToIndices("global_idx")};
566
567    let inputIndex = calculateInputIndex(${m});
568    if (inputIndex != 0u) {
569      let sizeInConcatAxis = array<u32, ${i.length}u>(${g});
570      ${m} -= sizeInConcatAxis[inputIndex - 1u];
571    }
572
573    ${Mo(s,f)}
574  }`;return{name:"Concat",shaderCache:{hint:`${t}`,inputDependencies:d},getRunData:()=>({outputs:[{dims:r,dataType:a}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:c}),getShaderSource:_}}
574,Yp=(e,t)=>{let r=e.inputs,a=r[0].dims,n=C.normalizeAxis(t.axis,a.length);Do(r,n);let i=a.slice();i[n]=r.reduce((u,d)=>u+(d.dims.length>n?d.dims[n]:0),0);let s=r.filter(u=>C.size(u.dims)>0);e.compute(Po(s,n,i,r[0].dataType),{inputs:s})},Jp=e=>ce({axis:e.axis})}),Tt,It,Et,La,Ct=U(()=>{J(),re(),Tt=(e,t,r="f32")=>{switch(e.activation){case"Relu":return`value = max(value, ${t}(0.0));`;case"Sigmoid":return`value = (${t}(1.0) / (${t}(1.0) + exp(-value)));`;case"Clip":return`value = clamp(value, ${t}(${r}(uniforms.clip_min)), ${t}(${r}(uniforms.clip_max)));`;case"HardSigmoid":return`value = max(${t}(0.0), min(${t}(1.0), ${r}(uniforms.alpha) * value + ${r}(uniforms.beta)));`;case"LeakyRelu":return`value = select(${r}(uniforms.alpha) * value, value, value >= ${t}(0.0));`;case"Tanh":return`let e2x = exp(-2.0 * abs(value));
575              value = sign(value) * (1.0 - e2x) / (1.0 + e2x);
576        `;case"":return"";default:throw new Error(`Unsupported activation ${e.activation}`)}},It=(e,t)=>{e.activation==="Clip"?t.push({type:1,data:e.clipMax},{type:1,data:e.clipMin}):e.activation==="HardSigmoid"?t.push({type:1,data:e.alpha},{type:1,data:e.beta}):e.activation==="LeakyRelu"&&t.push({type:1,data:e.alpha})},Et=(e,t)=>{e.activation==="Clip"?t.push({name:"clip_max",type:"f32"},{name:"clip_min",type:"f32"}):e.activation==="HardSigmoid"?t.push({name:"alpha",type:"f32"},{name:"beta",type:"f32"}):e.activation==="LeakyRelu"&&t.push({name:"alpha",type:"f32"})},La=e=>{let t=(e==null?void 0:e.activation)||"";if(t==="HardSigmoid"){let[r,a]=(e==null?void 0:e.activation_params)||[.2,.5];return{activation:t,alpha:r,beta:a}}else if(t==="Clip"){let[r,a]=(e==null?void 0:e.activation_params)||[kd,Td];return{activation:t,clipMax:a,clipMin:r}}else if(t==="LeakyRelu"){let[r]=(e==null?void 0:e.activation_params)||[.01];return{activation:t,alpha:r}}return{activation:t}}}),Te,ec,Va=U(()=>{Te=(e,t)=>{switch(e){case 1:return t;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${e}-component is not supported.`)}},ec=e=>`
577      ${e?"value = value + getBiasByOutputCoords(coords);":""}
578      `}),tc,Om=U(()=>{tc=e=>`
579fn getIndexFromCoords4D(coords : vec4<i32>, shape : vec4<i32>) -> i32 {
580  return dot(coords, vec4<i32>(
581      shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));
582}
583fn getOutputIndexFromCoords(coords : vec4<i32>) -> i32 {
584  return dot(coords, vec4<i32>(
585    i32(${e}.x), i32(${e}.y), i32(${e}.z), 1));
586}
587`}),ar,ja,Ha=U(()=>{J(),re(),ie(),Ct(),ar=(e,t,r,a,n)=>{let i=a-r;return`
588      ${Array.from({length:r}).map((s,u)=>`
589      if (${F(t.shape,u,t.rank)} != 1) {
590        ${t.indicesSet(e,u,F(n,u+i,a))}
591      } else {
592        ${t.indicesSet(e,u,0)}
593      }`).join("")}
594`},ja=(e,t,r,a,n=!1,i)=>{let s=e[0].dims,u=e[1].dims,d=s[s.length-2],l=u[u.length-1],c=s[s.length-1],f=$e(l),m=$e(c),g=$e(d),_=C.size(r)/f/g,b=e.length>2,x=a?a.slice(0,-2):r.slice(0,-2),w=[C.size(x),d,l],$=[{type:12,data:_},{type:12,data:d},{type:12,data:l},{type:12,data:c}];It(t,$),$.push(...Z(x,s,u)),b&&$.push(...Z(e[2].dims)),$.push(...Z(w));let k=S=>{let T=Pa("batch_dims",e[0].dataType,x.length),E=R("a",e[0].dataType,s.length,m),z=R("b",e[1].dataType,u.length,f),A=G("output",e[0].dataType,w.length,f),O=Se(A.type.tensor),q=Tt(t,A.type.value,O),X=[E,z],H="";if(b){let te=n?f:1;X.push(R("bias",e[2].dataType,e[2].dims.length,te)),H=`${n?`value += bias[col / ${te}];`:`value += ${A.type.value}(bias[row + i]);`}`}let Q=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"}];Et(t,Q);let oe=()=>{let te=`var a_data: ${E.type.value};`;for(let V=0;V<m;V++)te+=`
595              let b_data${V} = b[(b_offset + (k + ${V}) * uniforms.N + col) / ${f}];`;for(let V=0;V<g;V++){te+=`a_data = a[(a_offset + (row + ${V}) * uniforms.K + k) / ${m}];`;for(let W=0;W<m;W++)te+=`
596            values[${V}] = fma(${z.type.value}(a_data${m===1?"":`[${W}]`}), b_data${W}, values[${V}]);
597`}return te};return`
598  ${S.registerUniforms(Q).registerInternalVariables(T).declareVariables(...X,A)}
599  ${S.mainStart()}
600    ${S.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
601    let col = (global_idx % (uniforms.N / ${f})) * ${f};
602    var index1 = global_idx / (uniforms.N / ${f});
603    let stride1 = uniforms.M / ${g};
604    let row = (index1 % stride1) * ${g};
605    let batch = index1 / stride1;
606
607    ${r.length===2?"":`let batch_indices = ${T.offsetToIndices("batch")};`}
608
609    var a_indices: ${E.type.indices};
610    ${ar("a_indices",E,E.rank-2,T.rank,"batch_indices")}
611    ${E.indicesSet("a_indices",E.rank-2,0)}
612    ${E.indicesSet("a_indices",E.rank-1,0)}
613    let a_offset = ${E.indicesToOffset("a_indices")};
614
615    var b_indices: ${z.type.indices};
616    ${ar("b_indices",z,z.rank-2,T.rank,"batch_indices")}
617    ${z.indicesSet("b_indices",z.rank-2,0)}
618    ${z.indicesSet("b_indices",z.rank-1,0)}
619    let b_offset = ${z.indicesToOffset("b_indices")};
620    var values: array<${A.type.value}, ${g}>;
621    for (var k: u32 = 0u; k < uniforms.K; k = k + ${m}) {
622      ${oe()}
623    }
624    for (var i = 0u; i < ${g}u; i++) {
625      var value = values[i];
626      ${H}
627      ${q}
628      let cur_indices = ${A.type.indices}(batch, row + i, col);
629      let offset = ${A.indicesToOffset("cur_indices")};
630      ${A.setByOffset(`offset / ${f}`,"value")};
631    }
632  }
633  `};return{name:"MatMulNaive",shaderCache:{hint:`${t.activation};${f};${m};${g};${n}`,inputDependencies:b?["rank","rank","rank"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:i?i(r):r,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(_/64)},programUniforms:$}),getShaderSource:k}}}),Uo,qo,_a,Oi,Wo,ya,Lo,Ur,Ga=U(()=>{J(),re(),ie(),Ct(),Ha(),Va(),Uo=(e,t)=>e?`
634        mm_Asub[inputRow][inputCol] = mm_readA(batch,
635          kStart + inputRow,
636          globalRowStart / innerElementSize + inputCol${t?", batchIndices":""});
637        `:`
638        mm_Asub[inputRow][inputCol] = mm_readA(batch,
639          globalRow + innerRow,
640          kStart / innerElementSize + inputCol${t?", batchIndices":""});
641        `,qo=(e,t)=>e?`
642        let ACached0 = mm_Asub[k * innerElementSize][localRow];
643        let ACached1 = mm_Asub[k * innerElementSize + 1][localRow];
644        let ACached2 = mm_Asub[k * innerElementSize + 2][localRow];
645        ${t===3?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"}
646        for (var i = 0; i < rowPerThread; i = i + 1) {
647          acc[i] = BCached0 * ACached0[i] + acc[i];
648          acc[i] = BCached1 * ACached1[i] + acc[i];
649          acc[i] = BCached2 * ACached2[i] + acc[i];
650          ${t===3?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"}
651        }`:`
652        for (var i = 0; i < rowPerThread; i = i + 1) {
653          let ACached = mm_Asub[tileRow + i][k];
654          acc[i] = BCached0 * ACached.x + acc[i];
655          acc[i] = BCached1 * ACached.y + acc[i];
656          acc[i] = BCached2 * ACached.z + acc[i];
657          ${t===3?"":"acc[i] = BCached3 * ACached.w + acc[i];"}
658        }`,_a=(e,t,r="f32",a,n=!1,i=32,s=!1,u=32)=>{let d=t[1]*e[1],l=t[0]*e[0],c=n?d:i,f=n?i:d,m=c/t[0],g=i/t[1];if(!((n&&m===4&&e[1]===4||!n&&(m===3||m===4))&&c%t[0]===0&&i%t[1]===0&&e[0]===4))throw new Error(`If transposeA ${n} is true, innerElementSize ${m} and workPerThread[1] ${e[1]} must be 4.
659      Otherwise, innerElementSize ${m} must be 3 or 4.
660  tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}. tileInner ${i} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${e[0]} must be 4.`);return`
661var<workgroup> mm_Asub: array<array<vec${m}<${r}>, ${c/m}>, ${f}>;
662var<workgroup> mm_Bsub: array<array<vec4<${r}>, ${l/e[0]}>, ${i}>;
663
664const rowPerThread = ${e[1]};
665const colPerThread = ${e[0]};
666const innerElementSize = ${m};
667const tileInner = ${i};
668
669@compute @workgroup_size(${t[0]}, ${t[1]}, ${t[2]})
670fn main(@builtin(local_invocation_id) localId : vec3<u32>,
671        @builtin(global_invocation_id) globalId : vec3<u32>,
672        @builtin(workgroup_id) workgroupId : vec3<u32>) {
673  let localRow = i32(localId.y);
674  let tileRow = localRow * rowPerThread;
675  let tileCol = i32(localId.x);
676
677  let globalRow =i32(globalId.y) * rowPerThread;
678  let globalCol = i32(globalId.x);
679  let batch = ${s?"0":"i32(globalId.z)"};
680  ${a?`let batchIndices = ${a.offsetToIndices("u32(batch)")};`:""}
681  let globalRowStart = i32(workgroupId.y) * ${d};
682
683  let num_tiles = ${s?`${Math.ceil(u/i)}`:"(uniforms.dim_inner - 1) / tileInner + 1"};
684  var kStart = ${s?`i32(globalId.z) * ${u}`:"0"};
685
686  var acc: array<vec4<${r}>, rowPerThread>;
687
688  // Loop over shared dimension.
689  let tileRowB = localRow * ${g};
690  for (var t = 0; t < num_tiles; t = t + 1) {
691      // Load one tile of A into local memory.
692      for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
693          let inputRow = tileRow + innerRow;
694          let inputCol = tileCol;
695          ${Uo(n,a)}
696      }
697
698      // Load one tile of B into local memory.
699      for (var innerRow = 0; innerRow < ${g}; innerRow = innerRow + 1) {
700          let inputRow = tileRowB + innerRow;
701          let inputCol = tileCol;
702          mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${a?", batchIndices":""});
703      }
704      kStart = kStart + tileInner;
705      workgroupBarrier();
706
707      // Compute acc values for a single thread.
708      for (var k = 0; k < tileInner / innerElementSize; k = k + 1) {
709          let BCached0 = mm_Bsub[k * innerElementSize][tileCol];
710          let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol];
711          let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol];
712          ${m===3?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"}
713
714          ${qo(n,m)}
715      }
716
717      workgroupBarrier();
718  }
719
720  for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
721      mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);
722  }
723}`},Oi=(e,t)=>e?`
724            mm_Asub[inputRow][inputCol] = mm_readA(batch,
725              kStart + inputRow,
726              globalRowStart + inputCol${t?", batchIndices":""});
727            `:`
728            mm_Asub[inputRow][inputCol] = mm_readA(batch,
729              globalRowStart + inputRow,
730              kStart + inputCol${t?", batchIndices":""});
731            `,Wo=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];",ya=(e,t,r="f32",a,n=!1,i=32,s=!1,u=32,d=!1)=>{let l=e[1]*t[1],c=e[0]*t[0],f=n?l:i,m=n?i:l;if(!(m%t[1]===0&&f%t[0]===0&&i%t[1]===0))throw new Error(`tileAHight ${m} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${f} must be divisible by workgroupSize[0]${t[0]}, tileInner ${i} must be divisible by workgroupSize[1]${t[1]}`);let g=m/t[1],_=f/t[0],b=i/t[1],x=d?`
732    let localRow = i32(localId.y);
733    let localCol = i32(localId.x);
734    let globalRowStart = i32(workgroupId.y) * ${l};
735    let globalColStart = i32(workgroupId.x) * ${c};
736
737    // Loop over shared dimension.
738    for (var t = 0; t < num_tiles; t = t + 1) {
739      // Load one tile of A into local memory.
740      for (var inputRow = localRow; inputRow < ${m}; inputRow = inputRow + ${t[1]}) {
741        for (var inputCol = localCol; inputCol < ${f}; inputCol = inputCol + ${t[0]}) {
742          ${Oi(n,a)}
743        }
744      }
745      // Load one tile of B into local memory.
746      for (var inputRow = localRow; inputRow < ${i}; inputRow = inputRow + ${t[1]}) {
747            for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t[0]}) {
748          mm_Bsub[inputRow][inputCol] = mm_readB(batch,
749            kStart + inputRow,
750            globalColStart + inputCol${a?", batchIndices":""});
751        }
752      }
753      kStart = kStart + tileInner;
754      workgroupBarrier();
755
756      // Compute acc values for a single thread.
757      var BCached : array<${r}, colPerThread>;
758      for (var k = 0; k < tileInner; k = k + 1) {
759        for (var inner = 0; inner < colPerThread; inner = inner + 1) {
760          BCached[inner] = mm_Bsub[k][localCol + inner * ${t[0]}];
761        }
762        for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
763          let ACached = ${n?`mm_Asub[k][localRow + innerRow * ${t[1]}];`:`mm_Asub[localRow + innerRow * ${t[1]}][k];`}
764          for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
765            acc[innerRow][innerCol] = acc[innerRow][innerCol] +
766                ACached * BCached[innerCol];
767          }
768        }
769      }
770      workgroupBarrier();
771    }
772    for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
773      let gRow = globalRowStart + localRow + innerRow * ${t[1]};
774      for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
775        let gCol = globalColStart + localCol + innerCol * ${t[0]};
776        mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);
777      }
778    }
779    `:`
780let tileRow = i32(localId.y) * rowPerThread;
781let tileCol = i32(localId.x) * colPerThread;
782
783let globalRow = i32(globalId.y) * rowPerThread;
784let globalCol = i32(globalId.x) * colPerThread;
785let globalRowStart = i32(workgroupId.y) * ${l};
786
787let tileRowA = i32(localId.y) * ${g};
788let tileColA = i32(localId.x) * ${_};
789let tileRowB = i32(localId.y) * ${b};
790// Loop over shared dimension.
791for (var t = 0; t < num_tiles; t = t + 1) {
792  // Load one tile of A into local memory.
793  for (var innerRow = 0; innerRow < ${g}; innerRow = innerRow + 1) {
794    for (var innerCol = 0; innerCol < ${_}; innerCol = innerCol + 1) {
795      let inputRow = tileRowA + innerRow;
796      let inputCol = tileColA + innerCol;
797      ${Oi(n,a)}
798    }
799  }
800
801  // Load one tile of B into local memory.
802  for (var innerRow = 0; innerRow < ${b}; innerRow = innerRow + 1) {
803    for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
804      let inputRow = tileRowB + innerRow;
805      let inputCol = tileCol + innerCol;
806      mm_Bsub[inputRow][inputCol] = mm_readB(batch,
807        kStart + inputRow,
808        globalCol + innerCol${a?", batchIndices":""});
809    }
810  }
811  kStart = kStart + tileInner;
812  workgroupBarrier();
813
814  // Compute acc values for a single thread.
815  var BCached : array<${r}, colPerThread>;
816  for (var k = 0; k < tileInner; k = k + 1) {
817    for (var inner = 0; inner < colPerThread; inner = inner + 1) {
818      BCached[inner] = mm_Bsub[k][tileCol + inner];
819    }
820
821    for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
822      ${Wo(n)}
823      for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
824        acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];
825      }
826    }
827  }
828
829  workgroupBarrier();
830}
831
832for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
833  for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
834    mm_write(batch, globalRow + innerRow, globalCol + innerCol,
835        acc[innerRow][innerCol]);
836  }
837}
838`;return`
839  var<workgroup> mm_Asub : array<array<${r}, ${f}>, ${m}>;
840  var<workgroup> mm_Bsub : array<array<${r}, ${c}>, ${i}>;
841  const rowPerThread = ${e[1]};
842  const colPerThread = ${e[0]};
843  const tileInner = ${i};
844
845@compute @workgroup_size(${t[0]}, ${t[1]}, ${t[2]})
846fn main(@builtin(local_invocation_id) localId : vec3<u32>,
847        @builtin(global_invocation_id) globalId : vec3<u32>,
848        @builtin(workgroup_id) workgroupId : vec3<u32>) {
849    let batch = ${s?"0":"i32(globalId.z)"};
850    ${a?`let batchIndices = ${a.offsetToIndices("u32(batch)")};`:""}
851    let num_tiles = ${s?`${Math.ceil(u/i)}`:"(uniforms.dim_inner - 1) / tileInner + 1"};
852    var kStart = ${s?`i32(globalId.z) * ${u}`:"0"};
853
854    var acc : array<array<${r}, colPerThread>, rowPerThread>;
855    ${x}
856  }
857`},Lo=(e,t,r,a,n=!1)=>{let[i,s,u,d]=a,l=Se(a[0].type.tensor);return`
858    fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${i.type.indices}) -> ${Te(e,l)} {
859      var value = ${Te(e,l)}(0.0);
860      let col = colIn * ${e};
861      if(row < uniforms.dim_a_outer && col < uniforms.dim_inner)
862      {
863        var aIndices: ${s.type.indices};
864        ${ar("aIndices",s,s.rank-2,i.rank,"batchIndices")}
865        ${s.indicesSet("aIndices",s.rank-2,"u32(row)")}
866        ${s.indicesSet("aIndices",s.rank-1,"u32(colIn)")}
867        value = ${s.getByIndices("aIndices")};
868      }
869      return value;
870    }
871
872    fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${i.type.indices}) -> ${Te(e,l)} {
873      var value = ${Te(e,l)}(0.0);
874      let col = colIn * ${e};
875      if(row < uniforms.dim_inner && col < uniforms.dim_b_outer)
876      {
877        var bIndices: ${u.type.indices};
878        ${ar("bIndices",u,u.rank-2,i.rank,"batchIndices")}
879        ${u.indicesSet("bIndices",u.rank-2,"u32(row)")}
880        ${u.indicesSet("bIndices",u.rank-1,"u32(colIn)")}
881        value = ${u.getByIndices("bIndices")};
882      }
883      return value;
884    }
885
886    fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${Te(e,l)}) {
887      let col = colIn * ${e};
888      if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) {
889        var value = valueIn;
890        let coords = vec3<i32>(batch, row, colIn);
891        ${t?`value = value + ${n?"bias[colIn]":`${Te(e,l)}(bias[row])`};`:""}
892        ${r}
893        ${d.setByIndices("vec3<u32>(coords)","value")}
894      }
895    }
896    `},Ur=(e,t,r,a,n=!1,i)=>{let s=e[0].dims,u=e[1].dims,d=s.slice(0,-2),l=u.slice(0,-2),c=a?a.slice(0,-2):r.slice(0,-2),f=C.size(c),m=s[s.length-2],g=s[s.length-1],_=u[u.length-1],b=g%4===0&&_%4===0,x=m<=8?[4,1,1]:[4,4,1],w=[8,8,1],$=[Math.ceil(_/w[0]/x[0]),Math.ceil(m/w[1]/x[1]),Math.ceil(f/w[2]/x[2])],k=b?4:1,S=[...d,m,g/k],T=S.length,E=[...l,g,_/k],z=E.length,A=[f,m,_/k],O=[{type:6,data:m},{type:6,data:_},{type:6,data:g}];It(t,O),O.push(...Z(c,S,E));let q=["rank","rank"],X=e.length>2;X&&(O.push(...Z(e[2].dims)),q.push("rank")),O.push(...Z(A));let H=Q=>{let oe=c.length,te=Pa("batchDims",e[0].dataType,oe,1),V=Se(e[0].dataType),W=R("a",e[0].dataType,T,k),le=R("b",e[1].dataType,z,k),ee=G("result",e[0].dataType,A.length,k),ae=[W,le];if(X){let ke=n?k:1;ae.push(R("bias",e[2].dataType,e[2].dims.length,ke))}let D=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"}];Et(t,D);let P=Se(ee.type.tensor),j=Tt(t,ee.type.value,P),se=Lo(k,X,j,[te,W,le,ee],n);return`
897  ${Q.registerUniforms(D).registerInternalVariables(te).declareVariables(...ae,ee)}
898  ${se}
899  ${b?_a(x,w,V,te):ya(x,w,V,te)}
900                   `};return{name:"MatMul",shaderCache:{hint:`${x};${t.activation};${b};${n}`,inputDependencies:q},getRunData:()=>({outputs:[{dims:i?i(r):r,dataType:e[0].dataType}],dispatchGroup:{x:$[0],y:$[1],z:$[2]},programUniforms:O}),getShaderSource:H}}}),Vo,rc,Bm=U(()=>{J(),at(),ie(),Ct(),Va(),Om(),Ga(),Vo=(e,t,r,a,n=!1,i,s=4,u=4,d=4,l="f32")=>{let c=O=>{switch(O){case 1:return"resData = x[xIndex];";case 3:return`resData = vec3<${l}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`;case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${O} is not supported.`)}},f=O=>{switch(O){case 1:return"return w[row * i32(uniforms.w_shape[3]) + colIn];";case 4:return"return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];";default:throw new Error(`innerElementSize ${O} is not supported.`)}},m=e?`
901    let coord = vec4<i32>(batch, xRow, xCol, xCh);
902    `:`
903    let coord = vec4<i32>(batch, xCh, xRow, xCol);
904    `,g=e?`
905    let coords = vec4<i32>(
906      batch,
907      row / outWidth,
908      row % outWidth,
909      col);
910    `:`
911    let coords = vec4<i32>(
912      batch,
913      row,
914      col / outWidth,
915      col % outWidth);
916    `,_=e?"i32(uniforms.x_shape[1])":"i32(uniforms.x_shape[2])",b=e?"i32(uniforms.x_shape[2])":"i32(uniforms.x_shape[3])",x=e?"row":"col",w=e?"col":"row",$=`
917    let inChannels = i32(uniforms.w_shape[2]);
918    let outWidth = ${e?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"};
919    let outRow = ${x} / outWidth;
920    let outCol = ${x} % outWidth;
921
922    let WRow = ${w} / (i32(uniforms.w_shape[1]) * inChannels);
923    let WCol = ${w} / inChannels % i32(uniforms.w_shape[1]);
924    let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0];
925    let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1];
926    let xCh = ${w} % inChannels;
927    var resData = ${Te(s,l)}(0.0);
928    // The bounds checking is always needed since we use it to pad zero for
929    // the 'same' padding type.
930    if (xRow >= 0 && xRow < ${_} && xCol >= 0 && xCol < ${b}) {
931      ${m}
932      let xIndex = getIndexFromCoords4D(coord, vec4<i32>(uniforms.x_shape));
933      ${c(s)}
934    }
935    return resData;`,k=e?t&&a?`
936    let col = colIn * ${s};
937    ${$}`:`
938    let col = colIn * ${s};
939    if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) {
940      ${$}
941    }
942    return ${Te(s,l)}(0.0);`:a&&r?`
943    let col = colIn * ${s};
944    ${$}`:`
945    let col = colIn * ${s};
946    if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {
947      ${$}
948    }
949    return ${Te(s,l)}(0.0);`,S=e?a&&r?f(u):`
950    let col = colIn * ${u};
951    if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {
952      ${f(u)}
953    }
954    return ${Te(u,l)}(0.0);`:`
955    let col = colIn * ${u};
956    if (row < uniforms.dim_inner && col < uniforms.dim_a_outer) {
957      ${f(u)}
958    }
959    return ${Te(u,l)}(0.0);`,T=Te(d,l),E=Te(e?s:u,l),z=Te(e?u:s,l),A=Tt(i,T,l);return`
960    fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${E} {
961      ${e?k:S}
962    }
963
964    fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${z} {
965      ${e?S:k}
966    }
967
968    fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${T}) {
969      let col = colIn * ${d};
970      if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer)
971      {
972      var value = valueIn;
973      let outWidth = ${e?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"};
974      ${g}
975      ${ec(n)}
976      ${A}
977      setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);
978      }
979    }`},rc=(e,t,r,a,n,i,s,u,d)=>{let l=t.format==="NHWC",c=l?e[0].dims[3]:e[0].dims[1],f=r[0],m=l?r[2]:r[3],g=l?r[1]:r[2],_=l?r[3]:r[1],b=l&&(c%4===0||c%3===0)&&_%4===0,x=l?_:m*g,w=l?m*g:_,$=[8,8,1],k=a<=8?[4,1,1]:[4,4,1],S=[Math.ceil(x/$[0]/k[0]),Math.ceil(w/$[1]/k[1]),Math.ceil(f/$[2]/k[2])];ue("verbose",()=>`[conv2d_mm_webgpu] dispatch = ${S}`);let T=b?l&&c%4!==0?3:4:1,E=$[1]*k[1],z=$[0]*k[0],A=Math.max($[0]*T,$[1]),O=a%E===0,q=n%z===0,X=i%A===0,H=b?[T,4,4]:[1,1,1],Q=[{type:6,data:a},{type:6,data:n},{type:6,data:i},{type:6,data:[t.pads[0],t.pads[1]]},{type:6,data:t.strides},{type:6,data:t.dilations}];It(t,Q),Q.push(...Z(e[0].dims,e[1].dims));let oe=["rank","rank"];s&&(Q.push(...Z(e[2].dims)),oe.push("rank")),Q.push(...Z(r));let te=V=>{let W=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"},{name:"pad",type:"i32",length:2},{name:"stride",type:"i32",length:2},{name:"dilation",type:"i32",length:2}];Et(t,W);let le=b?4:1,ee=Se(e[0].dataType),ae=`
980      fn setOutputAtIndex(flatIndex : i32, value : ${b?`vec4<${ee}>`:ee}) {
981        result[flatIndex] = ${b?`vec4<${ee}>`:ee}(value);
982      }
983      fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${b?`vec4<${ee}>`:ee}) {
984        let flatIndex = getOutputIndexFromCoords(vec4<i32>(d0, d1, d2, d3));
985        setOutputAtIndex(flatIndex ${b?"/ 4":""}, value);
986      }`,D=R("x",e[0].dataType,e[0].dims.length,T===3?1:T),P=R("w",e[1].dataType,e[1].dims.length,le),j=[D,P],se=G("result",e[0].dataType,r.length,le);if(s){let ke=R("bias",e[2].dataType,e[2].dims.length,le);j.push(ke),ae+=`
987        fn getBiasByOutputCoords(coords : vec4<i32>) -> ${b?`vec4<${ee}>`:ee} {
988          return bias[coords.${l?"w":"y"}${b?"/ 4":""}];
989        }`}return`
990        ${tc("uniforms.result_strides")}
991        //struct Uniforms { xShape : vec4<i32>, wShape : vec4<i32>, outShape : vec4<i32>,
992        //  outShapeStrides: vec3<i32>, filterDims : vec2<i32>, pad : vec2<i32>, stride : vec2<i32>,
993        //  dilation : vec2<i32>, dimAOuter : i32, dimBOuter : i32, dimInner : i32 };
994        ${V.registerUniforms(W).declareVariables(...j,se)}
995        ${ae}
996        ${Vo(l,O,q,X,s,t,H[0],H[1],H[2],ee)}
997        ${b?_a(k,$,ee,void 0,!l,A):ya(k,$,ee,void 0,!l,A,!1,void 0,u)}`};return{name:"Conv2DMatMul",shaderCache:{hint:`${t.cacheKey};${T};${b};${O};${q};${X};${E};${z};${A}`,inputDependencies:oe},getRunData:()=>({outputs:[{dims:d?d(r):r,dataType:e[0].dataType}],dispatchGroup:{x:S[0],y:S[1],z:S[2]},programUniforms:Q}),getShaderSource:te}}}),jo,Bi,Kt,Ho,Ri,Go,ic,ac,Rm=U(()=>{J(),at(),re(),ie(),Ct(),Va(),jo=e=>{let t=1;for(let r=0;r<e.length;r++)t*=e[r];return t},Bi=e=>typeof e=="number"?[e,e,e]:e,Kt=(e,t)=>t<=1?e:e+(e-1)*(t-1),Ho=(e,t,r,a=1)=>{let n=Kt(t,a);return Math.floor((e[0]*(r-1)-r+n)/2)},Ri=(e,t,r,a,n)=>{n==null&&(n=Ho(e,t[0],a[0]));let i=[0,0,0,r];for(let s=0;s<3;s++)e[s]+2*n>=t[s]&&(i[s]=Math.trunc((e[s]-t[s]+2*n)/a[s]+1));return i},Go=(e,t,r,a,n,i,s,u,d,l)=>{let c,f,m,g;if(e==="VALID"&&(e=0),typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e};let _=Ri([t,r,a,1],[u,d,l],1,[n,i,s],e);f=_[0],m=_[1],g=_[2]}else if(Array.isArray(e)){if(!e.every((b,x,w)=>b===w[0]))throw Error(`Unsupported padding parameter: ${e}`);c={top:e[0],bottom:e[1],left:e[2],right:e[3],front:e[4],back:e[5]};let _=Ri([t,r,a,1],[u,d,l],1,[n,i,s],e[0]);f=_[0],m=_[1],g=_[2]}else if(e==="SAME_UPPER"){f=Math.ceil(t/n),m=Math.ceil(r/i),g=Math.ceil(a/s);let _=(f-1)*n+u-t,b=(m-1)*i+d-r,x=(g-1)*s+l-a,w=Math.floor(_/2),$=_-w,k=Math.floor(b/2),S=b-k,T=Math.floor(x/2),E=x-T;c={top:k,bottom:S,left:T,right:E,front:w,back:$}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:f,outHeight:m,outWidth:g}},ic=(e,t,r,a,n,i=!1,s="channelsLast")=>{let u,d,l,c,f;if(s==="channelsLast")[u,d,l,c,f]=e;else if(s==="channelsFirst")[u,f,d,l,c]=e;else throw new Error(`Unknown dataFormat ${s}`);let[m,,g,_,b]=t,[x,w,$]=Bi(r),[k,S,T]=Bi(a),E=Kt(g,k),z=Kt(_,S),A=Kt(b,T),{padInfo:O,outDepth:q,outHeight:X,outWidth:H}=Go(n,d,l,c,x,w,$,E,z,A),Q=i?m*f:m,oe=[0,0,0,0,0];return s==="channelsFirst"?oe=[u,Q,q,X,H]:s==="channelsLast"&&(oe=[u,q,X,H,Q]),{batchSize:u,dataFormat:s,inDepth:d,inHeight:l,inWidth:c,inChannels:f,outDepth:q,outHeight:X,outWidth:H,outChannels:Q,padInfo:O,strideDepth:x,strideHeight:w,strideWidth:$,filterDepth:g,filterHeight:_,filterWidth:b,effectiveFilterDepth:E,effectiveFilterHeight:z,effectiveFilterWidth:A,dilationDepth:k,dilationHeight:S,dilationWidth:T,inShape:e,outShape:oe,filterShape:t}},ac=(e,t,r,a,n,i)=>{let s=i==="channelsLast";s?e[0].dims[3]:e[0].dims[1];let u=[64,1,1],d={x:r.map((x,w)=>w)},l=[Math.ceil(jo(d.x.map(x=>r[x]))/u[0]),1,1];ue("verbose",()=>`[conv3d_naive_webgpu] dispatch = ${l}`);let c=1,f=C.size(r),m=[{type:12,data:f},{type:12,data:a},{type:12,data:n},{type:12,data:t.strides},{type:12,data:t.dilations}];It(t,m),m.push(...Z(e[0].dims,e[1].dims));let g=["rank","rank"],_=e.length===3;_&&(m.push(...Z(e[2].dims)),g.push("rank")),m.push(...Z(r));let b=x=>{let w=[{name:"output_size",type:"u32"},{name:"filter_dims",type:"u32",length:a.length},{name:"pads",type:"u32",length:n.length},{name:"strides",type:"u32",length:t.strides.length},{name:"dilations",type:"u32",length:t.dilations.length}];Et(t,w);let $=1,k=Se(e[0].dataType),S=R("x",e[0].dataType,e[0].dims.length,c),T=R("W",e[1].dataType,e[1].dims.length,$),E=[S,T],z=G("result",e[0].dataType,r.length,$),A="";if(_){let X=R("bias",e[2].dataType,e[2].dims.length,$);E.push(X),A+=`
998        fn getBiasByOutputCoords(coords : array<u32, 5>) -> ${k} {
999          return bias[${s?F("coords",4,5):F("coords",1,5)}];
1000        }`}let O=Te(c,k),q=Tt(t,O,k);return`
1001            ${A}
1002            fn getX(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 {
1003              let aIndices = array<u32, 5>(d0, d1, d2, d3, d4);
1004              return ${S.getByIndices("aIndices")};
1005            }
1006            fn getW(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 {
1007              let aIndices = array<u32, 5>(d0, d1, d2, d3, d4);
1008              return ${T.getByIndices("aIndices")};
1009            }
1010          ${x.registerUniforms(w).declareVariables(...E,z)}
1011          ${x.mainStart()}
1012          ${x.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1013              let coords = ${z.offsetToIndices("global_idx")};
1014              let batch = ${F("coords",0,S.rank)};
1015              let d2 = ${s?F("coords",S.rank-1,S.rank):F("coords",1,S.rank)};
1016              let xFRCCorner = vec3<u32>
1016(${s?F("coords",1,S.rank):F("coords",2,S.rank)},
1017              ${s?F("coords",2,S.rank):F("coords",3,S.rank)},
1018              ${s?F("coords",3,S.rank):F("coords",4,S.rank)}) * uniforms.strides - uniforms.pads;
1019              let xFCorner = xFRCCorner.x;
1020              let xRCorner = xFRCCorner.y;
1021              let xCCorner = xFRCCorner.z;
1022              let xShapeY = ${s?F("uniforms.x_shape",1,S.rank):F("uniforms.x_shape",2,S.rank)};
1023              let xShapeZ = ${s?F("uniforms.x_shape",2,S.rank):F("uniforms.x_shape",3,S.rank)};
1024              let xShapeW = ${s?F("uniforms.x_shape",3,S.rank):F("uniforms.x_shape",4,S.rank)};
1025              let xShapeU = ${s?F("uniforms.x_shape",4,S.rank):F("uniforms.x_shape",1,S.rank)};
1026              let inputDepthNearestVec4 = (xShapeU / 4) * 4;
1027              let inputDepthVec4Remainder = xShapeU % 4;
1028
1029              var value = 0.0;
1030              for (var wF = 0u; wF < uniforms.filter_dims[0]; wF++) {
1031                let xF = xFCorner + wF * uniforms.dilations[0];
1032                if (xF < 0 || xF >= xShapeY) {
1033                  continue;
1034                }
1035
1036                for (var wR = 0u; wR < uniforms.filter_dims[1]; wR++) {
1037                  let xR = xRCorner + wR * uniforms.dilations[1];
1038                  if (xR < 0 || xR >= xShapeZ) {
1039                    continue;
1040                  }
1041
1042                  for (var wC = 0u; wC < uniforms.filter_dims[2]; wC++) {
1043                    let xC = xCCorner + wC * uniforms.dilations[2];
1044                    if (xC < 0 || xC >= xShapeW) {
1045                      continue;
1046                    }
1047
1048                    for (var d1 = 0u; d1 < inputDepthNearestVec4; d1 += 4) {
1049                      ${s?`let xValues = vec4<f32>(
1050                               getX(batch, xF, xR, xC, d1),
1051                               getX(batch, xF, xR, xC, d1 + 1),
1052                               getX(batch, xF, xR, xC, d1 + 2),
1053                               getX(batch, xF, xR, xC, d1 + 3));
1054                            `:`let xValues = vec4<f32>(
1055                               getX(batch, d1, xF, xR, xC),
1056                               getX(batch, d1 + 1, xF, xR, xC),
1057                               getX(batch, d1 + 2, xF, xR, xC),
1058                               getX(batch, d1 + 3, xF, xR, xC));
1059                            `}
1060                            let wValues = vec4<f32>(
1061                              getW(d2, d1, wF, wR, wC),
1062                              getW(d2, d1 + 1, wF, wR, wC),
1063                              getW(d2, d1 + 2, wF, wR, wC),
1064                              getW(d2, d1 + 3, wF, wR, wC));
1065                      value += dot(xValues, wValues);
1066                    }
1067                    if (inputDepthVec4Remainder == 1) {
1068                        ${s?`value += getX(batch, xF, xR, xC, inputDepthNearestVec4)
1069                          * getW(d2, inputDepthNearestVec4, wF, wR, wC);`:`value += getX(batch, inputDepthNearestVec4, xF, xR, xC)
1070                          * getW(d2, inputDepthNearestVec4, wF, wR, wC);`}
1071                    } else if (inputDepthVec4Remainder == 2) {
1072                      ${s?`let xValues = vec2<f32>(
1073                        getX(batch, xF, xR, xC, inputDepthNearestVec4),
1074                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1));
1075                      `:`let xValues = vec2<f32>(
1076                        getX(batch, inputDepthNearestVec4, xF, xR, xC),
1077                        getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC));
1078                    `}
1079                    let wValues = vec2<f32>(
1080                      getW(d2, inputDepthNearestVec4, wF, wR, wC),
1081                      getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC));
1082                      value += dot(xValues, wValues);
1083                    } else if (inputDepthVec4Remainder == 3) {
1084                      ${s?`let xValues = vec3<f32>(
1085                        getX(batch, xF, xR, xC, inputDepthNearestVec4),
1086                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),
1087                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2));
1088                      `:`let xValues = vec3<f32>(
1089                        getX(batch, inputDepthNearestVec4, xF, xR, xC),
1090                        getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC),
1091                        getX(batch, inputDepthNearestVec4 + 2, xF, xR, xC));
1092                    `}
1093                    let wValues = vec3<f32>(
1094                      getW(d2, inputDepthNearestVec4, wF, wR, wC),
1095                      getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC),
1096                      getW(d2, inputDepthNearestVec4 + 2, wF, wR, wC));
1097                      value += dot(xValues, wValues);
1098                    }
1099                  }
1100                }
1101              }
1102              ${_?"value = value + getBiasByOutputCoords(coords)":""};
1103              ${q}
1104              result[global_idx] = f32(value);
1105          }`};return{name:"Conv3DNaive",shaderCache:{hint:`${t.cacheKey};${s};${c};${_}`,inputDependencies:g},getRunData:()=>({outputs:[{dims:r,dataType:e[0].dataType}],dispatchGroup:{x:l[0],y:l[1],z:l[2]},programUniforms:m}),getShaderSource:b}}}),nc,sc,Dm=U(()=>{J(),re(),ie(),Ct(),nc=(e,t,r,a)=>{let n=e.length>2,i=n?"value += b[output_channel];":"",s=e[0].dims,u=e[1].dims,d=t.format==="NHWC",l=d?r[3]:r[1],c=l/t.group,f=d&&c>=4?$e(l):1,m=C.size(r)/f,g=[{type:12,data:m},{type:12,data:t.dilations},{type:12,data:[t.strides[0],t.strides[1]]},{type:12,data:[t.pads[0],t.pads[1]]},{type:12,data:c}];It(t,g),g.push(...Z(s,[u[0],u[1],u[2],u[3]/f]));let _=n?["rank","rank","rank"]:["rank","rank"];g.push(...Z([r[0],r[1],r[2],r[3]/f]));let b=x=>{let w=G("output",e[0].dataType,r.length,f),$=Se(w.type.tensor),k=Tt(t,w.type.value,$),S=R("x",e[0].dataType,s.length),T=R("w",e[1].dataType,u.length,f),E=[S,T];n&&E.push(R("b",e[2].dataType,e[2].dims,f));let z=[{name:"output_size",type:"u32"},{name:"dilations",type:"u32",length:t.dilations.length},{name:"strides",type:"u32",length:2},{name:"pads",type:"u32",length:2},{name:"output_channels_per_group",type:"u32"}];Et(t,z);let A=d?`
1106      for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[0]; wHeight++) {
1107        let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0];
1108
1109        if (xHeight < 0u || xHeight >= uniforms.x_shape[1]) {
1110          continue;
1111        }
1112
1113        for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[1]; wWidth++) {
1114          let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1];
1115          if (xWidth < 0u || xWidth >= uniforms.x_shape[2]) {
1116            continue;
1117          }
1118
1119          for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[2]; wInChannel++) {
1120            let input_channel = in_channel_offset + wInChannel;
1121            let xVal = ${S.get("batch","xHeight","xWidth","input_channel")};
1122            let wVal = ${T.get("wHeight","wWidth","wInChannel","output_channel")};
1123            value += xVal * wVal;
1124          }
1125        }
1126      }
1127      `:`
1128      for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) {
1129        let input_channel = in_channel_offset + wInChannel;
1130        for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) {
1131          let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0];
1132
1133          if (xHeight < 0u || xHeight >= uniforms.x_shape[2]) {
1134            continue;
1135          }
1136
1137          for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) {
1138            let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1];
1139            if (xWidth < 0u || xWidth >= uniforms.x_shape[3]) {
1140              continue;
1141            }
1142
1143            let xVal = ${S.get("batch","input_channel","xHeight","xWidth")};
1144            let wVal = ${T.get("output_channel","wInChannel","wHeight","wWidth")};
1145            value += xVal * wVal;
1146          }
1147        }
1148      }
1149      `;return`
1150  ${x.registerUniforms(z).declareVariables(...E,w)}
1151
1152  ${x.mainStart()}
1153    ${x.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1154
1155    let outputIndices = ${w.offsetToIndices("global_idx")};
1156    let batch: u32 = outputIndices[0];
1157    let output_channel: u32 = outputIndices[${d?3:1}];
1158    let xRCCorner: vec2<u32> = vec2<u32>(outputIndices[${d?1:2}], outputIndices[${d?2:3}]) * uniforms.strides - uniforms.pads;
1159    let group_id: u32 = output_channel * ${f} / uniforms.output_channels_per_group;
1160    var in_channel_offset = group_id * uniforms.w_shape[${d?2:1}];
1161
1162    var value: ${w.type.value} = ${w.type.value}(0);
1163    ${A}
1164    ${i}
1165    ${k}
1166    ${w.setByOffset("global_idx","value")}
1167  }`};
vendor: 4,267 bytes, lines 1167-1212
1167return{name:"GroupedConv",shaderCache:{hint:`${t.cacheKey}_${f}`,inputDependencies:_},getRunData:()=>({outputs:[{dims:a?a(r):r,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:g}),getShaderSource:b}},sc=(e,t,r,a)=>{let n=e.length>2,i=$e(r[3]),s=$e(r[2]),u=C.size(r)/i/s,d=[e[0].dims[0],e[0].dims[1],e[0].dims[2],e[0].dims[3]/i],l=[e[1].dims[0],e[1].dims[1],e[1].dims[2],e[1].dims[3]/i],c=[r[0],r[1],r[2],r[3]/i],f=[{type:12,data:u},{type:6,data:[t.strides[0],t.strides[1]]},{type:6,data:[t.pads[0],t.pads[1]]}];It(t,f),f.push(...Z(d,l,c));let m=(s-1)*t.strides[1]+l[1],g=_=>{let b=G("output",e[0].dataType,c.length,i),x=Se(b.type.tensor),w=Tt(t,b.type.value,x),$=R("x",e[0].dataType,d.length,i),k=R("w",e[1].dataType,l.length,i),S=[$,k];n&&S.push(R("b",e[2].dataType,e[2].dims,i));let T=n?"value += b[output_channel];":"",E=[{name:"output_size",type:"u32"},{name:"strides",type:"i32",length:2},{name:"pads",type:"i32",length:2}];return Et(t,E),`
1168  ${_.registerUniforms(E).declareVariables(...S,b)}
1169  ${_.mainStart()}
1170    ${_.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1171    let width0 = uniforms.output_shape[3];
1172    let output_channel = global_idx % width0;
1173    var index1 = global_idx / width0;
1174    let width1 = uniforms.output_shape[2] / ${s}u;
1175    let col = (index1 % width1) * ${s}u;
1176    index1 = index1 / width1;
1177    let row = index1 % uniforms.output_shape[1];
1178    let batch = index1 / uniforms.output_shape[1];
1179
1180    let x_corner = vec2<i32>(i32(row), i32(col)) * uniforms.strides - uniforms.pads;
1181
1182    var x_vals: array<${$.type.value}, ${m}>;
1183    var values: array<${b.type.value}, ${s}>;
1184    let input_channel = output_channel;
1185    // Use constant instead of uniform can give better performance for w's height/width.
1186    for (var w_height: u32 = 0u; w_height < ${l[0]}; w_height++) {
1187      let x_height = x_corner.x + i32(w_height);
1188      if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) {
1189        for (var i = 0; i < ${m}; i++) {
1190          let x_width = x_corner.y + i;
1191          if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) {
1192            x_vals[i] = ${$.get("batch","u32(x_height)","u32(x_width)","input_channel")};
1193          } else {
1194            x_vals[i] = ${$.type.value}(0);
1195          }
1196        }
1197        for (var w_width: u32 = 0u; w_width < ${l[1]}; w_width++) {
1198          let w_val = ${k.get("w_height","w_width","0","output_channel")};
1199          for (var i = 0u; i < ${s}u; i++) {
1200            values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]);
1201          }
1202        }
1203      }
1204    }
1205
1206    for (var i = 0u; i < ${s}u; i++) {
1207      var value = values[i];
1208      ${T}
1209      ${w}
1210      ${b.set("batch","row","col + i","output_channel","value")};
1211    }
1212  }`};return{name:"GroupedConv-Vectorize",shaderCache:{hint:`${t.cacheKey};${i};${s};${m};${l[0]};${l[1]}`,inputDependencies:n?["rank","rank","type"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:a?a(r):r,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(u/64)},programUniforms:f}),getShaderSource:g}}}),Fo,Ir,Ko,Er,ba,Di,Zo,Qo,$a,Nm=U(()=>{re(),Bm(),Rm(),Ga(),Dm(),Ct(),Ha(),mt(),Fo=(e,t,r,a,n,i)=>{let s=e[0],u=e.slice(i?1:2,i?3:4),d=u.length,l=t[0],c=t.slice(2).map((m,g)=>m+(m-1)*(r[g]-1)),f=u.map((m,g)=>m+a[g]+a[g+d]).map((m,g)=>Math.floor((m-c[g]+n[g])/n[g]));return f.splice(0,0,s),f.splice(i?3:1,0,l),f},Ir=[2,3,1,0],Ko=(e,t)=>{if(!e||e.length!==2&&e.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(e[0].dims.length>5)throw new Error("greater than 5D is not supported");if(e[0].dims.length!==e[1].dims.length)throw new Error("filter does not have same dimension as input");let r=e[0].dims[t.format==="NHWC"?e[0].dims.length-1:1],a=e[1].dims[1]*t.group;if(r!==a)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");if(e.length===3&&(e[2].dims.length!==1||e[1].dims[0]!==e[2].dims[0]))throw new Error("invalid bias");let n=e[0].dims.length-2;if(t.dilations.length!==n)throw new Error(`dilations should be ${n}D`);if(t.strides.length!==n)throw new Error(`strides should be ${n}D`);if(t.pads.length!==n*2)throw new Error(`pads should be ${n*2}D`);if(t.kernelShape.length!==0&&t.kernelShape.length!==e[1].dims.length-2)throw new Error("invalid kernel shape")},Er=(e,t)=>
vendor: 34,960 bytes, lines 1212-1453
1212{let r=e.kernelShape.slice();r.length<t[1].dims.length-2&&r.push(...Array(t[1].dims.length-2-r.length).fill(0));for(let i=2;i<t[1].dims.length;++i)r[i-2]===0&&(r[i-2]=t[1].dims[i]);let a=e.pads.slice();Mr.adjustPadsBasedOnAutoPad(t[0].dims,e.strides,e.dilations,r,a,e.format==="NHWC",e.autoPad);let n=Object.assign({},e);return Object.assign(n,{kernelShape:r,pads:a}),n},ba=e=>{let t=La(e),r=e.format,a=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][e.auto_pad],n=e.dilations,i=e.group,s=e.kernel_shape,u=e.pads,d=e.strides,l=e.w_is_const();return{autoPad:a,format:r,dilations:n,group:i,kernelShape:s,pads:u,strides:d,wIsConst:l,...t,cacheKey:`${e.format};${t.activation};`}},Di=(e,t,r,a)=>{let n=r.format==="NHWC",i=Fo(t[0].dims,t[1].dims,r.dilations,r.pads,r.strides,n);if(r.group!==1){let E=[t[0]];if(n){let z=e.kernelCustomData.wT??e.compute(De(t[1],Ir),{inputs:[1],outputs:[r.wIsConst?-2:-1]})[0];r.wIsConst&&!e.kernelCustomData.wT&&(e.kernelCustomData.wT=z),E.push(z)}else E.push(t[1]);t.length===3&&E.push(t[2]),!e.adapterInfo.isArchitecture("ampere")&&n&&t[1].dims[0]===r.group&&t[1].dims[1]===1&&r.dilations[0]===1&&r.dilations[1]===1?e.compute(sc(E,r,i,a),{inputs:E}):e.compute(nc(E,r,i,a),{inputs:E});return}let s=t.length===3,u=t[0].dims[n?1:2],d=t[0].dims[n?2:3],l=t[0].dims[n?3:1],c=t[1].dims[2],f=t[1].dims[3],m=i[n?1:2],g=i[n?2:3],_=i[n?3:1],b=n&&c===u&&f===d&&r.pads[0]===0&&r.pads[1]===0;if(b||c===1&&f===1&&r.dilations[0]===1&&r.dilations[1]===1&&r.strides[0]===1&&r.strides[1]===1&&r.pads[0]===0&&r.pads[1]===0){let E=i[0],z,A,O,q=[];if(n){let Q=e.kernelCustomData.wT??e.compute(De(t[1],Ir),{inputs:[1],outputs:[r.wIsConst?-2:-1]})[0];if(r.wIsConst&&!e.kernelCustomData.wT&&(e.kernelCustomData.wT=Q),b){let oe=u*d*l;z=t[0].reshape([1,E,oe]),A=Q.reshape([1,oe,_]),O=[1,E,_]}else z=t[0].reshape([E,u*d,l]),A=Q.reshape([1,l,_]),O=[E,m*g,_];q.push(z),q.push(A)}else z=t[0].reshape([E,l,u*d]),A=t[1].reshape([1,_,l]),O=[E,_,m*g],q.push(A),q.push(z);s&&q.push(t[2]);let X=O[2],H=q[0].dims[q[0].dims.length-1];X<8&&H<8?e.compute(ja(q,r,i,O,n,a),{inputs:q}):e.compute(Ur(q,r,i,O,n,a),{inputs:q});return}let x=!0,w=e.kernelCustomData.wT??e.compute(De(t[1],Ir),{inputs:[1],outputs:[r.wIsConst?-2:-1]})[0];r.wIsConst&&!e.kernelCustomData.wT&&(e.kernelCustomData.wT=w);let $=[t[0],w];s&&$.push(t[2]);let k=n?m*g:_,S=n?_:m*g,T=c*f*l;e.compute(rc($,r,i,k,S,T,s,x,a),{inputs:$})},Zo=(e,t)=>{let r=t.format==="NHWC",a=[e.inputs[0].reshape(r?[e.inputs[0].dims[0],1,e.inputs[0].dims[1],e.inputs[0].dims[2]]:[e.inputs[0].dims[0],e.inputs[0].dims[1],1,e.inputs[0].dims[2]]),e.inputs[1].reshape([e.inputs[1].dims[0],e.inputs[1].dims[1],1,e.inputs[1].dims[2]])];e.inputs.length===3&&a.push(e.inputs[2]);let n=[0,t.pads[0],0,t.pads[1]],i=[1].concat(t.strides),s=[1].concat(t.dilations),u=[1].concat(t.kernelShape),d=Er({...t,pads:n,strides:i,dilations:s,kernelShape:u},a);Di(e,a,d,l=>r?[l[0],l[2],l[3]]:[l[0],l[1],l[3]])},Qo=(e,t,r)=>{let a=r.format==="NHWC"?"channelsLast":"channelsFirst",n=Er(r,t),i=r.autoPad==="NOTSET"?r.pads:r.autoPad,s=ic(t[0].dims,t[1].dims,r.strides,r.dilations,i,!1,a);e.compute(ac(t,n,s.outShape,[s.filterDepth,s.filterHeight,s.filterWidth],[s.padInfo.front,s.padInfo.top,s.padInfo.left],a))},$a=(e,t)=>{if(Ko(e.inputs,t),e.inputs[0].dims.length===3)Zo(e,t);else if(e.inputs[0].dims.length===5)Qo(e,e.inputs,t);else{let r=Er(t,e.inputs);Di(e,e.inputs,r)}}}),oc,Mm=U(()=>{J(),at(),re(),ie(),oc=(e,t,r)=>{let a=e.length>2,n=t.outputShape,i=t.format==="NHWC",s=t.group,u=e[1].dims,d=u[2]/s,l=u[3],c=i?$e(d):1,f=i&&l===1&&d>=4,m=f?Math.floor(d/4)*4:Math.floor(d/c)*c,g=d-m,_=i?$e(l):1,b=i?l===1?c:_:1,x=C.size(n)/_,w=[Math.ceil(x/64),1,1];ue("verbose",()=>`[conv2d_backprop_webgpu] dispatch = ${w}`);let $=["rank","rank"],k=[t.strides[0],t.strides[1]],S=[t.kernelShape[i?1:2],t.kernelShape[i?2:3]],T=[t.dilations[0],t.dilations[1]],E=[S[0]+(t.dilations[0]<=1?0:(t.kernelShape[i?1:2]-1)*(t.dilations[0]-1)),S[1]+(t.dilations[1]<=1?0:(t.kernelShape[i?2:3]-1)*(t.dilations[1]-1))],z=[E[0]-1-Math.floor((t.pads[0]+t.pads[2])/2),E[1]-1-Math.floor((t.pads[1]+t.pads[3])/2)],A=[{type:12,data:x},{type:12,data:k},{type:12,data:S},{type:12,data:T},{type:12,data:E},{type:6,data:z},{type:12,data:m},{type:12,data:d},{type:12,data:l},...Z(e[0].dims,e[1].dims)];a&&(A.push(...Z(e[2].dims)),$.push("rank")),A.push(...Z(n));let O=q=>{let X=[{name:"output_size",type:"u32"},{name:"strides",type:"u32",length:k.length},{name:"filter_dims",type:"u32",length:S.length},{name:"dilations",type:"u32",length:S.length},{name:"effective_filter_dims",type:"u32",length:E.length},{name:"pads",type:"i32",length:z.length},{name:"input_channels_per_group_int",type:"u32"},{name:"input_channels_per_group",type:"u32"},{name:"output_channels_per_group",type:"u32"}],H=Se(e[0].dataType),Q=i?1:2,oe=i?2:3,te=i?3:1,V=R("W",e[1].dataType,e[1].dims.length,b),W=R("Dy",e[0].dataType,e[0].dims.length,c),le=[W,V];a&&le.push(R("bias",e[2].dataType,[n[te]].length,_));let ee=G("result",e[0].dataType,n.length,_),ae=()=>{let j="";if(f)c===4?j+=`
1213        let xValue = ${W.getByOffset("x_offset")};
1214        let wValue = ${V.getByOffset("w_offset")};
1215        dotProd = dotProd + dot(xValue, wValue);
1216        x_offset += 1u;
1217        w_offset += 1u;`:c===2?j+=`
1218          dotProd = dotProd + dot(vec4<${H}>(${W.getByOffset("x_offset")}, ${W.getByOffset("x_offset + 1u")}), vec4<${H}>(${V.getByOffset("w_offset")}, ${V.getByOffset("w_offset + 1u")}));
1219          x_offset += 2u;
1220          w_offset += 2u;`:c===1&&(j+=`
1221          dotProd = dotProd + dot(vec4<${H}>(${W.getByOffset("x_offset")}, ${W.getByOffset("x_offset + 1u")}, ${W.getByOffset("x_offset + 2u")}, ${W.getByOffset("x_offset + 3u")}), vec4<${H}>(${V.getByOffset("w_offset")}, ${V.getByOffset("w_offset + 1u")}, ${V.getByOffset("w_offset + 2u")}, ${V.getByOffset("w_offset + 3u")}));
1222          x_offset += 4u;
1223          w_offset += 4u;`);else if(j+=`
1224                  let xValue = ${i?W.getByOffset(`${W.indicesToOffset(`${W.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${c}`):W.get("batch","inputChannel","idyR","idyC")};
1225        `,c===1)j+=`
1226          let w_offset = ${V.indicesToOffset(`${V.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel, wOutChannel)`)};
1227          let wValue = ${V.getByOffset(`w_offset / ${b}`)};
1228          dotProd = dotProd + xValue * wValue;`;else for(let se=0;se<c;se++)j+=`
1229            let wValue${se} = ${V.getByOffset(`${V.indicesToOffset(`${V.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel + ${se}, wOutChannel)`)} / ${b}`)};
1230            dotProd = dotProd + xValue[${se}] * wValue${se};`;return j},D=()=>{if(g===0)return"";if(!f)throw new Error(`packInputAs4 ${f} is not true.`);let j="";if(c===1){j+="dotProd = dotProd";for(let se=0;se<g;se++)j+=`
1231            + ${W.getByOffset(`x_offset + ${se}`)} * ${V.getByOffset(`w_offset + ${se}`)}`;j+=";"}else if(c===2){if(g!==2)throw new Error(`Invalid inputChannelsRemainder ${g}.`);j+=`
1232          let xValue = ${W.getByOffset("x_offset")};
1233          let wValue = ${V.getByOffset("w_offset")};
1234          dotProd = dotProd + dot(xValue, wValue);`}return j},P=`
1235            let outputIndices = ${ee.offsetToIndices(`global_idx * ${_}`)};
1236            let batch = ${ee.indicesGet("outputIndices",0)};
1237            let d1 = ${ee.indicesGet("outputIndices",te)};
1238            let r = ${ee.indicesGet("outputIndices",Q)};
1239            let c = ${ee.indicesGet("outputIndices",oe)};
1240            let dyCorner = vec2<i32>(i32(r), i32(c)) - uniforms.pads;
1241            let dyRCorner = dyCorner.x;
1242            let dyCCorner = dyCorner.y;
1243            let groupId = d1 / uniforms.output_channels_per_group;
1244            let wOutChannel = d1 - groupId * uniforms.output_channels_per_group;
1245            // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
1246            // ? = to be determined. : = across all values in that axis.
1247            var dotProd = ${ee.type.value}(0.0);
1248            var wR: u32 = 0;
1249            if (uniforms.dilations.x == 1) {
1250              // Minimum wR >= 0 that satisfies (dyRCorner + wR) % (uniforms.strides.x) == 0
1251              wR = u32(((dyRCorner + i32(uniforms.strides.x) - 1) / i32(uniforms.strides.x)) * i32(uniforms.strides.x) - dyRCorner);
1252            }
1253            for (; wR < uniforms.effective_filter_dims.x; wR = wR + 1) {
1254              if (wR % uniforms.dilations.x != 0) {
1255                continue;
1256              }
1257              let dyR = (${H}(dyRCorner) + ${H}(wR)) / ${H}(uniforms.strides[0]);
1258              let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x;
1259              if (dyR < 0.0 || dyR >= ${H}(uniforms.Dy_shape[${Q}]) || fract(dyR) > 0.0 ||
1260                  wRPerm < 0) {
1261                continue;
1262              }
1263              let idyR: u32 = u32(dyR);
1264              var wC: u32 = 0;
1265              if (uniforms.dilations.y == 1) {
1266                // Minimum wC >= 0 that satisfies (dyCCorner + wC) % (uniforms.strides.y) == 0
1267                wC = u32(((dyCCorner + i32(uniforms.strides.y) - 1) / i32(uniforms.strides.y)) * i32(uniforms.strides.y) - dyCCorner);
1268              }
1269              for (; wC < uniforms.effective_filter_dims.y; wC = wC + 1) {
1270                if (wC % uniforms.dilations.y != 0) {
1271                  continue;
1272                }
1273                let dyC = (${H}(dyCCorner) + ${H}(wC)) / ${H}(uniforms.strides.y);
1274                let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y;
1275                if (dyC < 0.0 || dyC >= ${H}(uniforms.Dy_shape[${oe}]) ||
1276                    fract(dyC) > 0.0 || wCPerm < 0) {
1277                  continue;
1278                }
1279                let idyC: u32 = u32(dyC);
1280                var inputChannel = groupId * uniforms.input_channels_per_group;
1281                ${f?`
1282                var x_offset = ${W.indicesToOffset(`${W.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${c};
1283                var w_offset = ${V.indicesToOffset(`${V.type.indices}(wRPerm, wCPerm, inputChannel, wOutChannel)`)} / ${b};
1284                  `:""}
1285                for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group_int; d2 = d2 + ${f?4:c}) {
1286                  ${ae()}
1287                  inputChannel = inputChannel + ${f?4:c};
1288                }
1289                ${D()}
1290                wC = wC + uniforms.strides.y - 1;
1291              }
1292              wR = wR + uniforms.strides[0] - 1;
1293            }
1294            let value = dotProd${a?` + bias[d1 / ${_}]`:""};
1295            ${ee.setByOffset("global_idx","value")};
1296          `;return`
1297    ${q.registerUniforms(X).declareVariables(...le,ee)}
1298      ${q.mainStart()}
1299      ${q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")};
1300    ${P}}`};return{name:"ConvTranspose2D",shaderCache:{hint:`${t.cacheKey};${c}${b}${_}${f}${g}`,inputDependencies:$},getRunData:()=>({dispatchGroup:{x:w[0],y:w[1],z:w[2]},outputs:[{dims:r?r(n):n,dataType:e[0].dataType}],programUniforms:A}),getShaderSource:O}}}),Xo,Yo,Jo,Ni,uc,eu,Mi,tu,lc,Pm=U(()=>{Mm(),Ct(),mt(),Xo=(e,t,r,a,n,i)=>(e-1)*t+r+(a-1)*n+1-i,Yo=(e,t,r,a,n)=>{let i=Math.floor(e/2);t==="SAME_UPPER"?(r[a]=i,r[n]=e-i):t==="SAME_LOWER"&&(r[a]=e-i,r[n]=i)},Jo=(e,t,r,a,n,i,s,u,d,l)=>{let c=e.length-2,f=l.length===0;d.length<c&&d.push(...Array(c-d.length).fill(0));let m=e[0],g=t[u?3:1]*n;for(let _=0,b=e.length-c-(u?1:0);_<c;++_,++b){let x=e[b],w=f?x*s[_]:l[_],$=Xo(x,s[_],i[_],t[b],r[_],w);Yo($,a,i,_,_+c),f&&l.push(s[_]*(x-1)+d[_]+(t[b]-1)*r[_]+1-i[_]-i[_+c])}l.splice(0,0,m),l.splice(u?3:1,0,g)},Ni=(e,t)=>{let r=e.kernelShape.slice();if(e.kernelShape.length===0||e.kernelShape.reduce((f,m)=>f*m,1)===0){r.length=0;for(let f=2;f<t[1].dims.length;++f)r.push(t[1].dims[f])}let a=e.format==="NHWC";r.splice(0,0,t[1].dims[0]),r.splice(a?3:1,0,t[1].dims[1]);let n=e.pads.slice(),i=e.outputShape.slice(),s=e.outputPadding.slice(),u=t[0].dims,d=e.dilations.slice();if(d.reduce((f,m)=>f+m,0)===0){let f=t[0].dims.length-2;d=new Array(f).fill(1)}let l=e.strides.slice();if(l.reduce((f,m)=>f+m,0)===0){let f=t[0].dims.length-2;l=new Array(f).fill(1)}Jo(u,r,d,e.autoPad,e.group,n,l,a,s,i);let c=Object.assign({},e);return Object.assign(c,{kernelShape:r,pads:n,outputPadding:s,outputShape:i,dilations:d,strides:l}),c},uc=e=>{let t=La(e),r=e.format,a=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][typeof e.autoPad>"u"?0:e.autoPad],n=e.dilations,i=e.group,s=e.kernelShape,u=e.pads,d=e.strides,l=e.wIsConst(),c=e.outputPadding,f=e.outputShape;return{autoPad:a,format:r,dilations:n,group:i,kernelShape:s,outputPadding:c,outputShape:f,pads:u,strides:d,wIsConst:l,...t,cacheKey:`${e.format};${t.activation};`}},eu=(e,t)=>{if(!e||e.length!==2&&e.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(e[0].dims.length!==4&&e[0].dims.length!==3)throw new Error("currently only support 2-dimensional conv");if(e[0].dims.length!==e[1].dims.length)throw new Error("filter does not have same dimension as input");let r=e[0].dims[t.format==="NHWC"?e[0].dims.length-1:1],a=e[1].dims[0];if(r!==a)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");let n=e[1].dims[1]*t.group;if(e.length===3&&(e[2].dims.length!==1||e[2].dims[0]!==n))throw new Error("invalid bias");let i=e[0].dims.length-2;if(t.dilations.reduce((s,u)=>s+u,0)>0&&t.dilations.length!==i)throw new Error(`dilations should be ${i}D`);if(t.strides.reduce((s,u)=>s+u,0)>0&&t.strides.length!==i)throw new Error(`strides should be ${i}D`);if(t.pads.reduce((s,u)=>s+u,0)>0&&t.pads.length!==i*2)throw new Error(`pads should be ${i*2}D`);if(t.outputPadding.length!==i&&t.outputPadding.length!==0)throw new Error(`output_padding should be ${i}D`);if(t.kernelShape.reduce((s,u)=>s+u,0)>0&&t.kernelShape.length!==0&&t.kernelShape.length!==e[1].dims.length-2)throw new Error("invalid kernel shape");if(t.outputShape.length!==0&&t.outputShape.length!==e[0].dims.length-2)throw new Error("invalid output shape")},Mi=(e,t,r,a)=>{let n=e.kernelCustomData.wT??e.compute(De(t[1],[2,3,0,1]),{inputs:[1],outputs:[r.wIsConst?-2:-1]})[0];r.wIsConst&&!e.kernelCustomData.wT&&(e.kernelCustomData.wT=n);let i=[t[0],n];t.length===3&&i.push(t[2]),e.compute(oc(i,r,a),{inputs:i})},tu=(e,t)=>{let r=t.format==="NHWC",a=[e.inputs[0].reshape(r?[e.inputs[0].dims[0],1,e.inputs[0].dims[1],e.inputs[0].dims[2]]:[e.inputs[0].dims[0],e.inputs[0].dims[1],1,e.inputs[0].dims[2]]),e.inputs[1].reshape([e.inputs[1].dims[0],e.inputs[1].dims[1],1,e.inputs[1].dims[2]])];e.inputs.length===3&&a.push(e.inputs[2]);let n=t.kernelShape;(n.length===0||n[0]===0)&&(n=[e.inputs[1].dims[2]]);let i=t.dilations;(i.length===0||i[0]===0)&&(i=[1]);let s=t.strides;(s.length===0||s[0]===0)&&(s=[1]);let u=t.pads;u.length===0&&(u=[0,0]),u=[0,u[0],0,u[1]],s=[1].concat(s),i=[1].concat(i),n=[1].concat(n);let d=t.outputPadding;d=[0].concat(d);let l=Ni({...t,pads:u,strides:s,dilations:i,kernelShape:n,outputPadding:d},a);Mi(e,a,l,c=>r?[c[0],c[2],c[3]]:[c[0],c[1],c[3]])},lc=(e,t)=>{if(eu(e.inputs,t),e.inputs[0].dims.length===3)tu(e,t);else{let r=Ni(t,e.inputs);Mi(e,e.inputs,r)}}}),ru,dc,pc,Um=U(()=>{J(),re(),we(),ie(),ru=(e,t,r,a)=>{let n=C.size(t),i=t.length,s=R("input",e,i),u=G("output",e,i),d=r.dataType===6?r.getInt32Array()[0]:Number(r.getBigInt64Array()[0]),l=C.normalizeAxis(d,i),c=f=>{let m=` i32(${s.indicesGet("inputIndices","uniforms.axis")}) `,g=F("uniforms.input_shape","uniforms.axis",i),_=a.reverse?m+(a.exclusive?" + 1":""):"0",b=a.reverse?g:m+(a.exclusive?"":" + 1");return`
1301                ${f.registerUniform("outputSize","u32").registerUniform("axis","u32").declareVariables(s,u)}
1302                ${f.mainStart()}
1303                  ${f.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1304                  var inputIndices = ${u.offsetToIndices("global_idx")};
1305                  var sum = ${u.type.value}(0);
1306                  let first : i32 = ${_};
1307                  let last : i32 = ${b};
1308                  for (var i : i32 = first; i < last; i++) {
1309                    ${s.indicesSet("inputIndices","uniforms.axis","u32(i)")};
1310                    sum = sum + ${s.getByIndices("inputIndices")};
1311                  }
1312                  ${u.setByOffset("global_idx","sum")};
1313                }`};return{name:"CumSum",shaderCache:{hint:a.cacheKey,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:t,dataType:e}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:[{type:12,data:n},{type:12,data:l},...Z(t,t)]}),getShaderSource:c}},dc=(e,t)=>{let r=e.inputs[0].dims,a=e.inputs[0].dataType,n=e.inputs[1];e.compute(ru(a,r,n,t),{inputs:[0]})},pc=e=>{let t=e.exclusive===1,r=e.reverse===1;return ce({exclusive:t,reverse:r})}}),iu,au,nu,cc,fc,qm=U(()=>{J(),re(),we(),ie(),iu=e=>{if(!e||e.length!==1)throw new Error("DepthToSpace requires 1 input.");if(e[0].dims.length!==4)throw new Error("DepthToSpace requires 4D input.")},au=(e,t,r,a)=>{let n=[];n.push(`fn perm(i: ${a.type.indices}) -> ${r.type.indices} {
1314    var a: ${r.type.indices};`);for(let i=0;i<t;++i)n.push(r.indicesSet("a",e[i],`i[${i}]`));return n.push("return a;}"),n.join(`
1315`)},nu=(e,t)=>{let r,a,n,i,s,u,d=t.format==="NHWC",l=t.blocksize,c=t.mode==="DCR";d?([r,a,n,i]=e.dims,s=c?[r,a,n,l,l,i/l**2]:[r,a,n,i/l**2,l,l],u=c?[0,1,3,2,4,5]:[0,1,4,2,5,3]):([r,a,n,i]=[e.dims[0],e.dims[2],e.dims[3],e.dims[1]],s=c?[r,l,l,i/l**2,a,n]:[r,i/l**2,l,l,a,n],u=c?[0,3,4,1,5,2]:[0,1,4,2,5,3]);let f=e.reshape(s),m=f.dims.length,g=e.dataType,_=R("a",g,m),b=G("output",g,m),x=w=>`
1316  ${w.registerUniform("output_size","u32").declareVariables(_,b)}
1317
1318  ${au(u,m,_,b)}
1319
1320  ${w.mainStart()}
1321    ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1322
1323    let indices = ${b.offsetToIndices("global_idx")};
1324    let aIndices = perm(indices);
1325
1326    ${b.setByOffset("global_idx",_.getByIndices("aIndices"))}
1327  }`;return{name:"DepthToSpace",shaderCache:{hint:`${e.dims};${t.blocksize};${t.mode}`,inputDependencies:["rank"]},getRunData:w=>{let $=d?[r,a*l,n*l,i/l**2]:[r,i/l**2,a*l,n*l],k=C.size($),S=f.dims,T=C.sortBasedOnPerm(S,u);return{outputs:[{dims:$,dataType:w[0].dataType}],dispatchGroup:{x:Math.ceil(k/64)},programUniforms:[{type:12,data:k},...Z(S,T)]}},getShaderSource:x}},cc=(e,t)=>{iu(e.inputs),e.compute(nu(e.inputs[0],t))},fc=e=>ce({blocksize:e.blocksize,mode:e.mode,format:e.format})}),zr,Zt,Pi,su,ou,uu,lu,Ui,du,hc,mc,Wm=U(()=>{J(),re(),we(),ie(),zr="[a-zA-Z]|\\.\\.\\.",Zt="("+zr+")+",Pi="^"+Zt+"$",su="("+Zt+",)*"+Zt,ou="^"+su+"$",uu=class{constructor(e=-1){this.symbolToIndices=new Map,this.inputIndex=e}addSymbol(e,t){let r=this.symbolToIndices.get(e);r===void 0?r=[t]:r.push(t),this.symbolToIndices.set(e,r)}},lu=class{constructor(e,t){var n;this.equation=t,this.hasEllipsis=!1,this.symbolToInfo=new Map,this.lhs=new Array,this.outputDims=[];let[r,a]=t.includes("->")?t.split("->",2):[t,""];if(!r.match(RegExp(ou)))throw new Error("Invalid LHS term");if(r.split(",").forEach((i,s)=>{let u=e[s].dims.slice();if(!i.match(RegExp(Pi)))throw new Error("Invalid LHS term");let d=this.processTerm(i,!0,u,s);this.lhs.push(d)}),a==="")a+=[...this.symbolToInfo.entries()].filter(([i,s])=>s.count===1||i==="...").map(([i])=>i).join("");else if(!a.match(RegExp(Zt)))throw new Error("Invalid RHS");(n=a.match(RegExp(zr,"g")))==null||n.forEach(i=>{if(i==="...")this.outputDims=this.outputDims.concat(this.ellipsisDims);else{let s=this.symbolToInfo.get(i);if(s===void 0)throw new Error("Invalid RHS symbol");this.outputDims.push(s.dimValue)}}),this.rhs=this.processTerm(a,!1,this.outputDims)}addSymbol(e,t,r){let a=this.symbolToInfo.get(e);if(a!==void 0){if(a.dimValue!==t&&a.count!==1)throw new Error("Dimension mismatch");a.count++,a.inputIndices.push(r)}else a={count:1,dimValue:t,inputIndices:[r]};this.symbolToInfo.set(e,a)}processTerm(e,t,r,a=-1){let n=r.length,i=!1,s=[],u=0;if(!e.match(RegExp(Pi))&&!t&&e!=="")throw new Error("Invalid LHS term");let d=e.match(RegExp(zr,"g")),l=new uu(a);return d==null||d.forEach((c,f)=>{if(c==="..."){if(i)throw new Error("Only one ellipsis is allowed per input term");i=!0;let m=n-d.length+1;if(m<0)throw new Error("Ellipsis out of bounds");if(s=r.slice(u,u+m),this.hasEllipsis){if(this.ellipsisDims.length!==s.length||this.ellipsisDims.toString()!==s.toString())throw new Error("Ellipsis dimensions mismatch")}else if(t)this.hasEllipsis=!0,this.ellipsisDims=s;else throw new Error("Ellipsis must be specified in the LHS");for(let g=0;g<s.length;g++){let _=String.fromCharCode(48+g);l.addSymbol(_,f+g),this.addSymbol(_,r[u++],a)}}else l.addSymbol(c,f+(this.hasEllipsis?this.ellipsisDims.length-1:0)),this.addSymbol(c,r[u++],a)}),l}},Ui=e=>e+"_max",du=(e,t,r,a)=>{let n=e.map(l=>l.length).map((l,c)=>R(`input${c}`,t,l)),i=C.size(a),s=G("output",t,a.length),u=[...r.symbolToInfo.keys()].filter(l=>!r.rhs.symbolToIndices.has(l)),d=l=>{let c=[],f="var prod = 1.0;",m="var sum = 0.0;",g="sum += prod;",_=[],b=[],x=[],w=[],$=r.symbolToInfo.size===r.rhs.symbolToIndices.size;r.symbolToInfo.forEach((S,T)=>{var E;if(r.rhs.symbolToIndices.has(T)){let z=(E=r.rhs.symbolToIndices.get(T))==null?void 0:E[0];z!==void 0&&r.lhs.forEach((A,O)=>{if(S.inputIndices.includes(O)){let q=A.symbolToIndices.get(T);if(q===void 0)throw new Error("Invalid symbol error");q.forEach(X=>{c.push(`${n[O].indicesSet(`input${O}Indices`,X,s.indicesGet("outputIndices",z))}`)})}})}else r.lhs.forEach((z,A)=>{if(S.inputIndices.includes(A)){let O=z.symbolToIndices.get(T);if(O===void 0)throw new Error("Invalid symbol error");O.forEach(q=>{_.push(`${n[A].indicesSet(`input${A}Indices`,q,`${T}`)}`)}),w.push(`prod *= ${n[A].getByIndices(`input${A}Indices`)};`)}}),b.push(`for(var ${T}: u32 = 0; ${T} < uniforms.${Ui(T)}; ${T}++) {`),x.push("}")});let k=$?[...c,`let sum = ${n.map((S,T)=>S.getByIndices(`input${T}Indices`)).join(" * ")};`]:[...c,m,...b,..._,f,...w,g,...x];return`
1328            ${l.registerUniforms(u.map(S=>({name:`${Ui(S)}`,type:"u32"}))).registerUniform("outputSize","u32").declareVariables(...n,s)}
1329
1330            ${l.mainStart()}
1331            ${l.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1332            var outputIndices = ${s.offsetToIndices("global_idx")};
1333            ${n.map((S,T)=>`var input${T}Indices: ${n[T].type.indices};`).join(`
1334`)}
1335            ${k.join(`
1336`)};
1337            ${s.setByOffset("global_idx","sum")};
1338          }`};return{name:"Einsum",shaderCache:{hint:r.equation,inputDependencies:e.map(()=>"rank")},getRunData:()=>{let l=u.filter(f=>r.symbolToInfo.has(f)).map(f=>{var m;return{type:12,data:((m=r.symbolToInfo.get(f))==null?void 0:m.dimValue)||0}});l.push({type:12,data:i});let c=e.map((f,m)=>[...Z(f)]).reduce((f,m)=>f.concat(m),l);return c.push(...Z(a)),{outputs:[{dims:a,dataType:t}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:c}},getShaderSource:d}},hc=(e,t)=>{let r=new lu(e.inputs,t.equation),a=r.outputDims,n=e.inputs.map((i,s)=>i.dims);e.compute(du(n,e.inputs[0].dataType,r,a))},mc=e=>{let t=e.equation.replace(/\s+/g,"");return ce({equation:t})}}),pu,qi,cu,fu,gc,Lm=U(()=>{J(),re(),ie(),pu=e=>{if(!e||e.length!==2)throw new Error("Expand requires 2 input.");let t=e[0].dims,r=Array.from(e[1].getBigInt64Array(),Number),a=r.length<t.length?0:r.length-t.length,n=t.length<r.length?0:t.length-r.length;for(;a<r.length&&n<t.length;++a,++n)if(r[a]!==t[n]&&r[a]!==1&&t[n]!==1)throw new Error("Expand requires shape to be broadcastable to input")},qi=(e,t)=>{let r=e.length-t.length,a=[];for(let n=0;n<r;++n)a.push(e[n]);for(let n=0;n<t.length;++n)a.push(t[n]===1?e[n+r]:t[n]);return a},cu=(e,t)=>e.length>t.length?qi(e,t):qi(t,e),fu=e=>{let t=e[0].dims,r=Array.from(e[1].getBigInt64Array(),Number),a=cu(t,r),n=e[0].dataType,i=n===9||C.size(t)===1,s=n===9||t.length>0&&t[t.length-1]%4===0?4:1,u=i||a.length>0&&a[a.length-1]%4===0?4:1,d=Math.ceil(C.size(a)/u),l=f=>{let m=R("input",n,t.length,s),g=G("output",n,a.length,u),_;if(n===9){let b=(x,w,$="")=>`
1339          let outputIndices${w} = ${g.offsetToIndices(`outputOffset + ${w}u`)};
1340          let offset${w} = ${m.broadcastedIndicesToOffset(`outputIndices${w}`,g)};
1341          let index${w} = offset${w} / 4u;
1342          let component${w} = offset${w} % 4u;
1343          ${x}[${w}] = ${$}(${m.getByOffset(`index${w}`)}[component${w}]);
1344        `;_=`
1345        let outputOffset = global_idx * ${u};
1346        var data = vec4<u32>(0);
1347        ${b("data",0,"u32")}
1348        ${b("data",1,"u32")}
1349        ${b("data",2,"u32")}
1350        ${b("data",3,"u32")}
1351        ${g.setByOffset("global_idx","data")}
1352      }`}else _=`
1353        let outputIndices = ${g.offsetToIndices(`global_idx * ${u}`)};
1354        let inputOffset = ${m.broadcastedIndicesToOffset("outputIndices",g)};
1355        let data = ${g.type.value}(${m.getByOffset(`inputOffset / ${s}`)});
1356        ${g.setByOffset("global_idx","data")}
1357      }`;return`
1358    ${f.registerUniform("vec_size","u32").declareVariables(m,g)}
1359    ${f.mainStart()}
1360    ${f.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
1361    ${_}`},c=[{type:12,data:d},...Z(t,a)];return{name:"Expand",shaderCache:{hint:`${a.length};${s}${u}`,inputDependencies:["rank"]},getShaderSource:l,getRunData:()=>({outputs:[{dims:a,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(d/64)},programUniforms:c})}},gc=e=>{pu(e.inputs),e.compute(fu(e.inputs),{inputs:[0]})}}),hu,_c,Vm=U(()=>{J(),re(),ie(),Wa(),hu=e=>{let t=e[0].dataType,r=C.size(e[0].dims),a=C.size(e[1].dims),n=a%4===0,i=s=>{let u=R("x",t,[1],4),d=R("bias",t,[1],4),l=G("y",t,[1],4),c=[{name:"output_vec_size",type:"u32"},{name:"bias_size",type:"u32"}],f=g=>`
1362      let bias${g}_offset: u32 = (global_idx * 4 + ${g}) % uniforms.bias_size;
1363      let bias${g} = ${d.getByOffset(`bias${g}_offset / 4`)}[bias${g}_offset % 4];`,m=n?`
1364      let bias = ${d.getByOffset("global_idx % (uniforms.bias_size / 4)")};`:`${f(0)}${f(1)}${f(2)}${f(3)}
1365      let bias = ${u.type.value}(bias0, bias1, bias2, bias3);`;return`${s.registerUniforms(c).declareVariables(u,d,l)}
1366
1367    ${ma(Ee(t))}
1368
1369    ${s.mainStart(Mt)}
1370      ${s.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")}
1371
1372      let x = ${u.getByOffset("global_idx")};
1373      ${m}
1374      let x_in = x + bias;
1375      ${l.setByOffset("global_idx",ga("x_in"))}
1376    }`};return{name:"FastGeluWithBias",shaderCache:{hint:`${n}`,inputDependencies:["type","type"]},getShaderSource:i,getRunData:s=>({outputs:[{dims:s[0].dims,dataType:s[0].dataType}],programUniforms:[{type:12,data:Math.ceil(r/4)},{type:12,data:a}],dispatchGroup:{x:Math.ceil(r/Mt/4)}})}},_c=e=>{e.inputs.length<2||C.size(e.inputs[1].dims)===0?Mp(e):e.compute(hu(e.inputs))}}),mu,gu,yc,bc,jm=U(()=>{J(),re(),we(),ie(),mu=e=>{if(!e||e.length!==2)throw new Error("Gather requires 2 inputs.")},gu=(e,t)=>{let r=e[0].dims,a=e[1].dims,n=r.length,i=C.normalizeAxis(t.axis,n),s=r.slice(0);s.splice(i,1,...a);let u=r[i],d=e[0].dataType===9?4:1,l=Math.ceil(C.size(s)/d),c=[{type:12,data:l},{type:6,data:u},{type:12,data:i},...Z(e[0].dims,e[1].dims,s)],f=m=>{let g=R("data",e[0].dataType,e[0].dims.length,d),_=R("inputIndices",e[1].dataType,e[1].dims.length),b=G("output",e[0].dataType,s.length,d),x=$=>{let k=a.length,S=`var indicesIndices${$}  = ${_.type.indices}(0);`;for(let T=0;T<k;T++)S+=`${k>1?`indicesIndices${$}[${T}]`:`indicesIndices${$}`} = ${s.length>1?`outputIndices${$}[uniforms.axis + ${T}]`:`outputIndices${$}`};`;S+=`
1377          var idx${$} = ${_.getByIndices(`indicesIndices${$}`)};
1378          if (idx${$} < 0) {
1379            idx${$} = idx${$} + uniforms.axisDimLimit;
1380          }
1381          var dataIndices${$} : ${g.type.indices};
1382        `;for(let T=0,E=0;T<n;T++)T===i?(S+=`${n>1?`dataIndices${$}[${T}]`:`dataIndices${$}`} = u32(idx${$});`,E+=k):(S+=`${n>1?`dataIndices${$}[${T}]`:`dataIndices${$}`} = ${s.length>1?`outputIndices${$}[${E}]`:`outputIndices${$}`};`,E++);return S},w;if(e[0].dataType===9){let $=(k,S,T="")=>`
1383          let outputIndices${S} = ${b.offsetToIndices(`outputOffset + ${S}u`)};
1384          ${x(S)};
1385          let offset${S} = ${g.indicesToOffset(`dataIndices${S}`)};
1386          let index${S} = offset${S} / 4u;
1387          let component${S} = offset${S} % 4u;
1388          ${k}[${S}] = ${T}(${g.getByOffset(`index${S}`)}[component${S}]);
1389        `;w=`
1390        let outputOffset = global_idx * ${d};
1391        var value = vec4<u32>(0);
1392        ${$("value",0,"u32")}
1393        ${$("value",1,"u32")}
1394        ${$("value",2,"u32")}
1395        ${$("value",3,"u32")}
1396        ${b.setByOffset("global_idx","value")}
1397      `}else w=`
1398      let outputIndices = ${b.offsetToIndices("global_idx")};
1399      ${x("")};
1400      let value = ${g.getByIndices("dataIndices")};
1401      ${b.setByOffset("global_idx","value")};
1402      `;return`
1403      ${m.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(g,_,b)}
1404      ${m.mainStart()}
1405        ${m.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1406        ${w}
1407      }`};return{name:"Gather",shaderCache:{hint:t.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:s,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:c}),getShaderSource:f}},yc=e=>ce({axis:e.axis}),bc=(e,t)=>{let r=e.inputs;mu(r),e.compute(gu(e.inputs,t))}}),_u,$c,wc,Hm=U(()=>{J(),re(),ie(),_u=(e,t,r,a,n,i,s,u,d)=>{let l=[{type:12,data:i},{type:12,data:a},{type:12,data:n},{type:12,data:r},{type:12,data:s},{type:12,data:u},{type:12,data:d}],c=[i];l.push(...Z(t.dims,c));let f=m=>{let g=R("indices_data",t.dataType,t.dims.length),_=G("input_slice_offsets_data",12,1,1),b=[g,_],x=[{name:"output_size",type:"u32"},{name:"batch_dims",type:"u32"},{name:"input_dims",type:"u32",length:n.length},{name:"sizes_from_slice_dims_data",type:"u32",length:r.length},{name:"num_slices_per_batch",type:"u32"},{name:"input_batch_stride",type:"u32"},{name:"num_slice_dims",type:"u32"}];return`
1408  ${m.registerUniforms(x).declareVariables(...b)}
1409  ${m.mainStart()}
1410    ${m.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1411    let batch_idx = global_idx / uniforms.num_slices_per_batch;
1412    let base_offset = batch_idx * uniforms.input_batch_stride;
1413
1414    let slice_indices_base_offset = global_idx * uniforms.num_slice_dims;
1415    var relative_slice_offset = 0;
1416    for (var dim_idx = 0u; dim_idx < uniforms.num_slice_dims; dim_idx ++) {
1417      var index = i32(indices_data[dim_idx + slice_indices_base_offset].x);
1418      let input_dim_idx = uniforms.batch_dims + dim_idx;
1419      if (index < 0) {
1420        ${n.length===1?"index += i32(uniforms.input_dims);":"index += i32(uniforms.input_dims[input_dim_idx]);"}
1421      }
1422      ${r.length===1?"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data);":"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data[dim_idx]);"}
1423    }
1424
1425    input_slice_offsets_data[global_idx] =  base_offset + u32(relative_slice_offset);
1426  }`};return e.compute({name:"computeSliceOffsets",shaderCache:{hint:`${n.length}_${r.length}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:c,dataType:e.inputs[1].dataType}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:l}),getShaderSource:f},{inputs:[t],outputs:[-1]})[0]},$c=(e,t)=>{let r=e.inputs,a=r[0].dims,n=r[0].dataType,i=r[1].dims,s=i[i.length-1],u=C.sizeToDimension(i,i.length-1),d=C.sizeFromDimension(a,t.batchDims+s),l=C.sizeToDimension(a,t.batchDims),c=C.sizeFromDimension(a,t.batchDims),f=u/l,m=new Array(s),g=d;for(let S=0;S<s;++S)m[s-1-S]=g,g*=a[t.batchDims+s-1-S];let _=_u(e,r[1],m,t.batchDims,a,u,f,c,s),b=t.batchDims+s;if(b>a.length)throw new Error("last dimension of indices must not be larger than rank of input tensor");let x=i.slice(0,-1).concat(a.slice(b)),w=C.size(x),$=[{type:12,data:w},{type:12,data:d},...Z(r[0].dims,_.dims,x)],k=S=>{let T=R("data",r[0].dataType,r[0].dims.length),E=R("slice_offsets",12,_.dims.length),z=G("output",r[0].dataType,x.length);return`
1427          ${S.registerUniform("output_size","u32").registerUniform("slice_size","u32").declareVariables(T,E,z)}
1428            ${S.mainStart()}
1429            ${S.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1430          let slice_offset = slice_offsets[global_idx / uniforms.slice_size];
1431          output[global_idx] = data[u32(slice_offset) + global_idx % uniforms.slice_size];
1432        }`};e.compute({name:"GatherND",shaderCache:{hint:t.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:x,dataType:n}],dispatchGroup:{x:Math.ceil(w/64)},programUniforms:$}),getShaderSource:k},{inputs:[r[0],_]})},wc=e=>({batchDims:e.batch_dims,cacheKey:""})}),yu,bu,vc,xc,Gm=U(()=>{J(),re(),we(),ie(),yu=(e,t)=>{if(e.length<3||e.length>4)throw new Error("GatherBlockQuantized requires 3 or 4 inputs.");let r=C.normalizeAxis(t.quantizeAxis,e[0].dims.length),a=t.blockSize,n=e[0],i=e[2],s=e.length===4?e[3]:void 0;if(i.dims.length!==n.dims.length||!n.dims.map((u,d)=>d===r?Math.ceil(u/a)===i.dims[d]:u===i.dims[d]).reduce((u,d)=>u&&d,!0))throw new Error("Scales must have the same rank as the input tensor and the dims should match except on gatherAxis.");if(s){if(s.dataType!==n.dataType)throw new Error("Zero point must have the same data type as the input tensor.");if(s.dims.length!==i.dims.length||!s.dims.map((u,d)=>u===i.dims[d]).reduce((u,d)=>u&&d,!0))throw new Error("Zero point must have the same rank as the input tensor and the dims should match except on quantizeAxis.")}},bu=(e,t)=>{let r=e[0].dims,a=e[1].dims,n=r.length,i=C.normalizeAxis(t.gatherAxis,n),s=C.normalizeAxis(t.quantizeAxis,n),u=r.slice(0);u.splice(i,1,...a);let d=C.size(u),l=e[2].dataType,c=e[0].dataType===22,f=[{type:12,data:d},{type:12,data:s},{type:12,data:i},{type:12,data:t.blockSize},...Z(...e.map((g,_)=>g.dims),u)],m=g=>{let _=R("data",e[0].dataType,e[0].dims.length),b=R("inputIndices",e[1].dataType,e[1].dims.length),x=R("scales",e[2].dataType,e[2].dims.length),w=e.length>3?R("zeroPoint",e[3].dataType,e[3].dims.length):void 0,$=G("output",l,u.length),k=[_,b,x];w&&k.push(w);let S=[{name:"output_size",type:"u32"},{name:"quantize_axis",type:"u32"},{name:"gather_axis",type:"u32"},{name:"block_size",type:"u32"}];return`
1433        ${g.registerUniforms(S).declareVariables(...k,$)}
1434        ${g.mainStart()}
1435        let output_indices = ${$.offsetToIndices("global_idx")};
1436        var indices_indices = ${b.type.indices}(0);
1437        ${a.length>1?`
1438          for (var i: u32 = 0; i < ${a.length}; i++) {
1439            let index = ${$.indicesGet("output_indices","uniforms.gather_axis + i")};
1440            ${b.indicesSet("indices_indices","i","index")};
1441          }`:`indices_indices = ${$.indicesGet("output_indices","uniforms.gather_axis")};`};
1442        var data_indices = ${_.type.indices}(0);
1443        for (var i: u32 = 0; i < uniforms.gather_axis; i++) {
1444          let index = ${$.indicesGet("output_indices","i")};
1445          ${_.indicesSet("data_indices","i","index")};
1446        }
1447        var index_from_indices = ${b.getByIndices("indices_indices")};
1448        if (index_from_indices < 0) {
1449          index_from_indices += ${r[i]};
1450        }
1451        ${_.indicesSet("data_indices","uniforms.gather_axis","u32(index_from_indices)")};
1452        for (var i = uniforms.gather_axis + 1; i < ${u.length}; i++) {
1453          let index = ${$.indicesGet("output_indices",`i + ${a.length} - 1`)};
1454          ${_.indicesSet("data_indices","i","index")};
1455        }
1456        let data_offset = ${_.indicesToOffset("data_indices")};
1457        let data_index = data_offset % 8;
1458        // Convert 4-bit packed data to 8-bit packed data.
1459        let packed_4bit_quantized_data = ${_.getByOffset("data_offset / 8")};
1460        let packed_8bit_quantized_data = (packed_4bit_quantized_data >> (4 * (data_index % 2))) & 0x0f0f0f0f;
1461        let quantized_data_vec = ${c?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_quantized_data));
1462        let quantized_data = quantized_data_vec[data_index / 2];
1463        var scale_indices = data_indices;
1464        let quantize_axis_index = ${x.indicesGet("data_indices","uniforms.quantize_axis")} / uniforms.block_size;
1465        ${x.indicesSet("scale_indices","uniforms.quantize_axis","quantize_axis_index")};
1466        var scale = ${x.getByIndices("scale_indices")};
1467        ${w?`
1468              let zero_point_indices = scale_indices;
1469              let zero_point_offset = ${w.indicesToOffset("zero_point_indices")};
1470              let zero_point_index = zero_point_offset % 8;
1471              let packed_4bit_zero_points = ${w.getByOffset("zero_point_offset / 8")};
1472              let packed_8bit_zero_points = (packed_4bit_zero_points >> (4 * (zero_point_index % 2))) & 0x0f0f0f0f;
1473              let zero_point_vec = ${c?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_zero_points));
1474              let zero_point = zero_point_vec[zero_point_index / 2];`:"var zero_point = 0"};
1475        let dequantized_data = ${Ee(l)}(quantized_data - zero_point) * scale;
1476        ${$.setByOffset("global_idx","dequantized_data")};
1477    }`};return{name:"GatherBlockQuantized",shaderCache:{hint:`${t.cacheKey};${e.filter((g,_)=>_!==1).map(g=>g.dims.join("_")).join(";")}`,inputDependencies:Array.from({length:e.length},(g,_)=>"rank")},getRunData:()=>({outputs:[{dims:u,dataType:l}],dispatchGroup:{x:Math.ceil(d/64)},programUniforms:f}),getShaderSource:m}},vc=(e,t)=>{let r=e.inputs;yu(r,t),e.compute(bu(e.inputs,t))},xc=e=>ce({blockSize:e.blockSize,gatherAxis:e.gatherAxis,quantizeAxis:e.quantizeAxis})}),$u,wu,Sc,kc,Fm=U(()=>{J(),re(),we(),ie(),$u=e=>{if(!e||e.length!==2)throw new Error("GatherElements requires 2 inputs.");if(e[0].dims.length<1)throw new Error("GatherElements requires that the data input be rank >= 1.");if(e[0].dims.length!==e[1].dims.length)throw new Error(`GatherElements requires that the data input and
1478                     indices input tensors be of same rank.`)},wu=(e,t)=>{let r=e[0].dims,a=e[0].dataType,n=r.length,i=e[1].dims,s=e[1].dataType,u=C.normalizeAxis(t.axis,n),d=r[u],l=i.slice(0),c=C.size(l),f=R("input",a,n),m=R("indicesInput",s,i.length),g=G("output",a,l.length),_=[{type:12,data:c},{type:6,data:d},{type:12,data:u}];return _.push(...Z(r,i,l)),{name:"GatherElements",shaderCache:{inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:l,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:_}),getShaderSource:b=>`
1479      ${b.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(f,m,g)}
1480      ${b.mainStart()}
1481      ${b.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1482
1483      let outputIndices = ${g.offsetToIndices("global_idx")};
1484
1485      var idx = ${m.getByOffset("global_idx")};
1486      if (idx < 0) {
1487        idx = idx + uniforms.axisDimLimit;
1488      }
1489      var inputIndices = ${f.type.indices}(outputIndices);
1490      ${f.indicesSet("inputIndices","uniforms.axis","u32(idx)")};
1491      let value = ${f.getByIndices("inputIndices")};
1492
1493      ${g.setByOffset("global_idx","value")};
1494  }`}},Sc=e=>ce({axis:e.axis}),kc=(e,t)=>{let r=e.inputs;$u(r),e.compute(wu(e.inputs,t))}}),vu,xu,Tc,Ic,Km=U(()=>{J(),re(),ie(),vu=e=>{if(!e)throw new Error("Input is missing");if(e.length<2||e.length>3)throw new Error("Invaid input number.");if(e.length===3&&e[2].dims.length>2)throw new Error("Invalid input shape of C");if(e[0].dataType!==e[1].dataType||e.length===3&&e[0].dataType!==e[2].dataType)throw new Error("Input types are mismatched")},xu=(e,t)=>{let r=e[0].dims.slice(),a=e[1].dims.slice(),[n,i,s]=Sd.getShapeOfGemmResult(r,t.transA,a,t.transB,e.length===3?e[2].dims:void 0),u=[n,i];if(!u)throw new Error("Can't use gemm on the given tensors");let d=16,l=Math.ceil(i/d),c=Math.ceil(n/d),f=!0,m=C.size(u),g=[{type:12,data:f?l:m},{type:12,data:n},{type:12,data:i},{type:12,data:s},{type:1,data:t.alpha},{type:1,data:t.beta}],_=["type","type"];e.length===3&&(g.push(...Z(e[2].dims)),_.push("rank")),g.push(...Z(u));let b=w=>{let $="";t.transA&&t.transB?$="value += a[k * uniforms.M + m] * b[n * uniforms.K + k];":t.transA&&!t.transB?$="value += a[k * uniforms.M + m] * b[k * uniforms.N + n];":!t.transA&&t.transB?$="value += a[m * uniforms.K + k] * b[n * uniforms.K + k];":!t.transA&&!t.transB&&($="value += a[m * uniforms.K + k] * b[k * uniforms.N + n];");let k=t.alpha===1?"":"value *= uniforms.alpha;",S=R("a",e[0].dataType,e[0].dims),T=R("b",e[1].dataType,e[1].dims),E=S.type.value,z=null,A=[S,T];e.length===3&&(z=R("c",e[2].dataType,e[2].dims.length),A.push(z));let O=G("output",e[0].dataType,u.length);A.push(O);let q=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}];return`
1495  ${w.registerUniforms(q).declareVariables(...A)}
1496
1497  ${w.mainStart()}
1498    ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1499
1500    let m = global_idx / uniforms.N;
1501    let n = global_idx % uniforms.N;
1502
1503    var value = ${E}(0);
1504    for (var k: u32 = 0u; k < uniforms.K; k++) {
1505      ${$}
1506    }
1507
1508    ${k}
1509    ${z!=null?`let cOffset = ${z.broadcastedIndicesToOffset("vec2(m, n)",O)}; value += ${E}(uniforms.beta) * ${z.getByOffset("cOffset")};`:""}
1510    output[global_idx] = value;
1511  }`},x=w=>{let $=R("a",e[0].dataType,e[0].dims),k=R("b",e[1].dataType,e[1].dims),S=null,T=[$,k];e.length===3&&(S=R("c",e[2].dataType,e[2].dims.length),T.push(S));let E=G("output",e[0].dataType,u.length);T.push(E);let z=[{name:"num_tile_n",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}],A="",O="";t.transA&&t.transB?(O=`
1512      var col = tile_row_start + local_id.x;
1513      var row = k_start + local_id.y;
1514      if (col < uniforms.M && row < uniforms.K) {
1515        tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col];
1516      } else {
1517        tile_a[local_id.y][local_id.x] = ${$.type.value}(0);
1518      }
1519
1520      col = k_start + local_id.x;
1521      row = tile_col_start + local_id.y;
1522      if (col < uniforms.K && row < uniforms.N) {
1523        tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col];
1524      } else {
1525        tile_b[local_id.y][local_id.x] = ${k.type.value}(0);
1526      }
1527      `,A="value += tile_a[k][local_id.y] * tile_b[local_id.x][k];"):t.transA&&!t.transB?(O=`
1528      var col = tile_row_start + local_id.x;
1529      var row = k_start + local_id.y;
1530      if (col < uniforms.M && row < uniforms.K) {
1531        tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col];
1532      } else {
1533        tile_a[local_id.y][local_id.x] = ${$.type.value}(0);
1534      }
1535
1536      col = tile_col_start + local_id.x;
1537      row = k_start + local_id.y;
1538      if (col < uniforms.N && row < uniforms.K) {
1539        tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col];
1540      } else {
1541        tile_b[local_id.y][local_id.x] = ${k.type.value}(0);
1542      }
1543      `,A="value += tile_a[k][local_id.y] * tile_b[k][local_id.x];"):!t.transA&&t.transB?(O=`
1544      var col = k_start + local_id.x;
1545      var row = tile_row_start + local_id.y;
1546      if (col < uniforms.K && row < uniforms.M) {
1547        tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col];
1548      } else {
1549        tile_a[local_id.y][local_id.x] = ${$.type.value}(0);
1550      }
1551
1552      col = k_start + local_id.x;
1553      row = tile_col_start + local_id.y;
1554      if (col < uniforms.K && row < uniforms.N) {
1555        tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col];
1556      } else {
1557        tile_b[local_id.y][local_id.x] = ${k.type.value}(0);
1558      }
1559      `,A="value += tile_a[local_id.y][k] * tile_b[local_id.x][k];"):!t.transA&&!t.transB&&(O=`
1560      var col = k_start + local_id.x;
1561      var row = tile_row_start + local_id.y;
1562      if (col < uniforms.K && row < uniforms.M) {
1563        tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col];
1564      } else {
1565        tile_a[local_id.y][local_id.x] = ${$.type.value}(0);
1566      }
1567
1568      col = tile_col_start + local_id.x;
1569      row = k_start + local_id.y;
1570      if (col < uniforms.N && row < uniforms.K) {
1571        tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col];
1572      } else {
1573        tile_b[local_id.y][local_id.x] = ${k.type.value}(0);
1574      }
1575      `,A="value += tile_a[local_id.y][k] * tile_b[k][local_id.x];");let q=t.alpha===1?"":"value *= uniforms.alpha;";return`
1576  ${w.registerUniforms(z).declareVariables(...T)}
1577  var<workgroup> tile_a: array<array<${$.type.storage}, ${d}>, ${d}>;
1578  var<workgroup> tile_b: array<array<${k.type.storage}, ${d}>, ${d}>;
1579  ${w.mainStart([d,d,1])}
1580    let tile_col_start = (workgroup_index % uniforms.num_tile_n) * ${d};
1581    let tile_row_start = (workgroup_index / uniforms.num_tile_n) * ${d};
1582    let num_tiles = (uniforms.K - 1) / ${d} + 1;
1583    var k_start = 0u;
1584    var value = ${E.type.value}(0);
1585    for (var t: u32 = 0u; t < num_tiles; t++) {
1586      ${O}
1587      k_start = k_start + ${d};
1588      workgroupBarrier();
1589
1590      for (var k: u32 = 0u; k < ${d}; k++) {
1591        ${A}
1592      }
1593      workgroupBarrier();
1594    }
1595
1596    ${q}
1597    let m = tile_row_start + local_id.y;
1598    let n = tile_col_start + local_id.x;
1599    ${S!=null?`let cOffset = ${S.broadcastedIndicesToOffset("vec2(m, n)",E)}; value += ${E.type.value}(uniforms.beta) * ${S.getByOffset("cOffset")};`:""}
1600    if (m < uniforms.M && n < uniforms.N) {
1601      output[m * uniforms.N + n] = value;
1602    }
1603  }`};
vendor: 5,298 bytes, lines 1603-1706
1603return f?{name:"GemmShared",shaderCache:{hint:`${t.cacheKey}`,inputDependencies:_},getRunData:()=>({outputs:[{dims:u,dataType:e[0].dataType}],dispatchGroup:{x:l*c},programUniforms:g}),getShaderSource:x}:{name:"Gemm",shaderCache:{hint:`${t.cacheKey}`,inputDependencies:_},getRunData:()=>({outputs:[{dims:u,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:g}),getShaderSource:b}},Tc=e=>{let t=e.transA,r=e.transB,a=e.alpha,n=e.beta;return{transA:t,transB:r,alpha:a,beta:n,cacheKey:`${e.transA};${e.transB};${e.alpha===1}`}},Ic=(e,t)=>{vu(e.inputs),e.compute(xu(e.inputs,t))}}),Je,rt,bt,$t,Su,ku,Tu,Iu,Eu,zu,Cu,Au,Ec,zc,Zm=U(()=>{J(),re(),we(),ie(),[Je,rt,bt,$t]=[0,1,2,3],Su=e=>{if(e[0].dims.length!==4)throw new Error("only 4-D tensor is supported.");if(e[0].dims.length!==e[1].dims.length)throw new Error("input dimensions must be equal to grid dimensions");if(e[0].dims.length-2!==e[1].dims[e[1].dims.length-1])throw new Error(`last dimension of grid must be equal to ${e[0].dims.length-2}`);if(e[0].dims[0]!==e[1].dims[0])throw new Error("grid batch size must match input batch size")},ku=`
1604  fn gs_get_cubic_coeffs(x: f32) -> vec4<f32> {
1605    let cubic_alpha = -0.75f;
1606    let x_abs = abs(x);
1607    var coeffs: vec4<f32>;
1608    coeffs[0] = (((cubic_alpha * (x_abs + 1) - 5 * cubic_alpha) * (x_abs + 1) + 8 * cubic_alpha) * (x_abs + 1) - 4 * cubic_alpha);
1609    coeffs[1] = (((cubic_alpha + 2) * x_abs - (cubic_alpha + 3)) * x_abs * x_abs + 1);
1610    coeffs[2] = (((cubic_alpha + 2) * (1 - x_abs) - (cubic_alpha + 3)) * (1 - x_abs) * (1 - x_abs) + 1);
1611    coeffs[3] = (((cubic_alpha * (2 - x_abs) - 5 * cubic_alpha) * (2 - x_abs) + 8 * cubic_alpha) * (2 - x_abs) - 4 * cubic_alpha);
1612    return coeffs;
1613  }
1614`,Tu=e=>`
1615  fn gs_bicubic_interpolate(p: mat4x4<${e}>, x: f32, y: f32) -> ${e} {
1616    var v: vec4<f32>;
1617    var coeffs = gs_get_cubic_coeffs(x);
1618    for (var i = 0; i < 4; i++) {
1619      v[i] = coeffs[0] * p[i][0] + coeffs[1] * p[i][1] + coeffs[2] * p[i][2] + coeffs[3] * p[i][3];
1620    }
1621    coeffs = gs_get_cubic_coeffs(y);
1622    let pixel = ${e}(coeffs[0] * v[0] + coeffs[1] * v[1] + coeffs[2] * v[2] + coeffs[3] * v[3]);
1623    return pixel;
1624  }
1625`,Iu=e=>`
1626  fn gs_denormalize(n: f32, length: i32) -> f32 {
1627    ${e.alignCorners===0?`
1628    // alignCorners: false => [-1, 1] to [-0.5, length - 0.5]
1629    return ((n + 1.0) * f32(length) - 1.0) / 2.0;
1630    `:`
1631    // alignCorners: true => [-1, 1] to [0, length - 1]
1632    return (n + 1.0) / 2.0 * (f32(length - 1));
1633    `}
1634  }
1635`,Eu=e=>`
1636  ${e.paddingMode==="reflection"?`
1637      fn gs_reflect(x: i32, x_min: f32, x_max: f32) -> u32 {
1638        var dx = 0.0;
1639        var fx = f32(x);
1640        let range = x_max - x_min;
1641        if (fx < x_min) {
1642          dx = x_min - fx;
1643          let n = u32(dx / range);
1644          let r = dx - f32(n) * range;
1645          if (n % 2 == 0) {
1646            fx = x_min + r;
1647          } else {
1648            fx = x_max - r;
1649          }
1650        } else if (fx > x_max) {
1651          dx = fx - x_max;
1652          let n = u32(dx / range);
1653          let r = dx - f32(n) * range;
1654          if (n % 2 == 0) {
1655            fx = x_max - r;
1656          } else {
1657            fx = x_min + r;
1658          }
1659        }
1660        return u32(fx);
1661      }`:""}
1662`,zu=(e,t,r)=>`
1663  fn pixel_at_grid(r: i32, c: i32, H: i32, W: i32, batch: u32, channel: u32, border: vec4<f32>) -> ${t} {
1664     var pixel = ${t}(0);
1665     var indices = vec4<u32>(0);
1666     indices[${Je}] = batch;
1667     indices[${rt}] = channel;`+(()=>{switch(r.paddingMode){case"zeros":return`
1668          if (r >= 0 && r < H && c >=0 && c < W) {
1669            indices[${bt}] = u32(r);
1670            indices[${$t}] = u32(c);
1671          } else {
1672            return ${t}(0);
1673          }
1674        `;case"border":return`
1675          indices[${bt}] = u32(clamp(r, 0, H - 1));
1676          indices[${$t}] = u32(clamp(c, 0, W - 1));
1677        `;case"reflection":return`
1678          indices[${bt}] = gs_reflect(r, border[1], border[3]);
1679          indices[${$t}] = gs_reflect(c, border[0], border[2]);
1680        `;default:throw new Error(`padding mode ${r.paddingMode} is not supported`)}})()+`
1681    return ${e.getByIndices("indices")};
1682  }
1683`,Cu=(e,t,r)=>(()=>{switch(r.mode){case"nearest":return`
1684          let result = pixel_at_grid(i32(round(y)), i32(round(x)), H_in, W_in, indices[${Je}], indices[${rt}], border);
1685        `;case"bilinear":return`
1686          let x1 = i32(floor(x));
1687          let y1 = i32(floor(y));
1688          let x2 = x1 + 1;
1689          let y2 = y1 + 1;
1690
1691          let p11 = pixel_at_grid(y1, x1, H_in, W_in, indices[${Je}], indices[${rt}], border);
1692          let p12 = pixel_at_grid(y1, x2, H_in, W_in, indices[${Je}], indices[${rt}], border);
1693          let p21 = pixel_at_grid(y2, x1, H_in, W_in, indices[${Je}], indices[${rt}], border);
1694          let p22 = pixel_at_grid(y2, x2, H_in, W_in, indices[${Je}], indices[${rt}], border);
1695
1696          let dx2 = ${t}(f32(x2) - x);
1697          let dx1 = ${t}(x - f32(x1));
1698          let dy2 = ${t}(f32(y2) - y);
1699          let dy1 = ${t}(y - f32(y1));
1700          let result = dy2 * (dx2 * p11 + dx1 * p12) + dy1 * (dx2 * p21 + dx1 * p22);
1701        `;case"bicubic":return`
1702          let x0 = i32(floor(x)) - 1;
1703          let y0 = i32(floor(y)) - 1;
1704          var p: mat4x4<${t}>;
1705          for (var h = 0; h < 4; h++) {
1706            for (var w = 0; w < 4; w++) {
1707              p[h][w] = pixel_at_grid(h + y0, w + x0, H_in, W_in, indices[${Je}], indices[${rt}], border);
1708            }
1709          }
1710
1711          let dx = x - f32(x0 + 1);
1712          let dy = y - f32(y0 + 1);
1713          let result = gs_bicubic_interpolate(p, dx, dy);
1714        `;default:throw new Error(`mode ${r.mode} is not supported`)}})()+`${e.setByOffset("global_idx","result")}`,Au=(e,t)=>{let r=R("x",e[0].dataType,e[0].dims.length),a=[e[1].dims[0],e[1].dims[1],e[1].dims[2]],n=R("grid",e[1].dataType,a.length,2),i=[e[0].dims[0],e[0].dims[1],e[1].dims[1],e[1].dims[2]];t.format==="NHWC"&&(i=[e[0].dims[0],e[1].dims[1],e[1].dims[2],e[0].dims[3]],[Je,rt,bt,$t]=[0,3,1,2]);let s=G("output",e[0].dataType,i.length),u=r.type.value,d=C.size(i),l=[{type:12,data:d},...Z(e[0].dims,a,i)],c=f=>`
1715  ${f.registerUniform("output_size","u32").declareVariables(r,n,s)}
1716  ${ku}
1717  ${Tu(u)}
1718  ${Iu(t)}
1719  ${Eu(t)}
1720  ${zu(r,u,t)}
1721
1722  ${f.mainStart()}
1723    ${f.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1724      let H_in = i32(uniforms.x_shape[${bt}]);
1725      let W_in = i32(uniforms.x_shape[${$t}]);
1726
1727      ${t.alignCorners===0?`
1728      let x_min = -0.5;
1729      let x_max = f32(W_in) - 0.5;
1730      let y_min = -0.5;
1731      let y_max = f32(H_in) - 0.5;
1732      `:`
1733      let x_min = 0.0;
1734      let x_max = f32(W_in) - 1.0;
1735      let y_min = 0.0;
1736      let y_max = f32(H_in) - 1.0;
1737      `};
1738      let border = vec4<f32>(x_min, y_min, x_max, y_max);
1739
1740      let indices = ${s.offsetToIndices("global_idx")};
1741      var grid_indices = vec3<u32>(indices[${Je}], indices[${bt}], indices[${$t}]);
1742      let nxy = ${n.getByIndices("grid_indices")};
1743      var x = gs_denormalize(f32(nxy[0]), W_in);
1744      var y = gs_denormalize(f32(nxy[1]), H_in);
1745
1746      ${Cu(s,u,t)}
1747  }`;return{name:"GridSample",shaderCache:{hint:`${t.cacheKey}`,inputDependencies:["type","type"]},getRunData:f=>{let m=C.size(i);return{outputs:[{dims:i,dataType:f[0].dataType}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:l}},getShaderSource:c}},Ec=(e,t)=>{Su(e.inputs),e.compute(Au(e.inputs,t))},zc=e=>ce({alignCorners:e.align_corners,mode:e.mode,paddingMode:e.padding_mode,format:e.format})}),ze,Ou,Cc,Wi,Bu,ir,Ac,Oc=U(()=>{J(),re(),we(),Ma(),qa(),ie(),mt(),ze=(e,t)=>e.length>t&&e[t].dims.length>0?e[t]:void 0,Ou=(e,t)=>{let r=e[0],a=ze(e,1),n=ze(e,2),i=ze(e,3),s=ze(e,4),u=ze(e,5),d=ze(e,6),l=ze(e,7);if(r.dims.length!==3&&r.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let c=r.dims[0],f=r.dims[1],m=r.dims.length===3?r.dims[2]:t.numHeads*r.dims[4],g=f,_=0,b=0,x=Math.floor(m/t.numHeads);if(d&&l&&C.size(d.dims)&&C.size(l.dims)){if(d.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(d.dims[0]!==c||d.dims[1]!==t.numHeads||d.dims[3]!==x)throw new Error('Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)');if(l.dims[0]!==c||l.dims[1]!==t.numHeads||l.dims[3]!==x)throw new Error('Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)');if(d.dims[2]!==l.dims[2])throw new Error('Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)');if(l.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');_=d.dims[2],b=d.dims[2]}else if(d&&C.size(d.dims)||l&&C.size(l.dims))throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let w;if(a&&C.size(a.dims)>0){if(r.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(a.dims.length<3||a.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(r.dims[0]!==a.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(a.dims.length===3){if(a.dims[2]!==r.dims[2])throw new Error('Input "query" and "key" shall have same dim 2 (hidden_size)');w=2,g=a.dims[1]}else if(a.dims.length===5){if(a.dims[2]!==t.numHeads||a.dims[3]!==2||a.dims[4]!==x)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(n)throw new Error('Expect "value" be none when "key" has packed kv format.');w=5,g=a.dims[1]}else{if(a.dims[1]!==t.numHeads||a.dims[3]!==x)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');w=0,g=a.dims[2]}}else{if(r.dims.length!==5)throw new Error('Input "query" is expected to have 5 dimensions when key is empty');if(r.dims[2]!==t.numHeads||r.dims[3]!==3)throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');w=3}if(i&&C.size(i.dims)>0){if(i.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimension');
vendor: 5,370 bytes, lines 1747-1774
1747if(a&&a.dims.length===5&&a.dims[3]===2)throw new Error("bias is not allowed for packed kv.")}let $=_+g,k=0;if(s&&C.size(s.dims)>0){k=8;let z=s.dims;throw z.length===1?z[0]===c?k=1:z[0]===3*c+2&&(k=3):z.length===2&&z[0]===c&&z[1]===$&&(k=5),k===8?new Error('Input "key_padding_mask" shape shall be (batch_size) or (batch_size, total_sequence_length)'):new Error("Mask not supported")}let S=!1,T=m;if(n&&C.size(n.dims)>0){if(n.dims.length!==3&&n.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(r.dims[0]!==n.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(n.dims.length===3){if(g!==n.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');T=n.dims[2]}else{if(g!==n.dims[2])throw new Error('Input "key" and "value" shall have the same dim 2 (kv_sequence_length)');T=n.dims[1]*n.dims[3],S=!0}}let E=!1;if(s&&C.size(s.dims)>0)throw new Error("Key padding mask is not supported");if(u&&C.size(u.dims)>0){if(u.dims.length!==4)throw new Error('Input "attention_bias" is expected to have 4 dimensions');if(u.dims[0]!==c||u.dims[1]!==t.numHeads||u.dims[2]!==f||u.dims[3]!==$)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:c,sequenceLength:f,pastSequenceLength:_,kvSequenceLength:g,totalSequenceLength:$,maxSequenceLength:b,inputHiddenSize:0,hiddenSize:m,vHiddenSize:T,headSize:x,vHeadSize:Math.floor(T/t.numHeads),numHeads:t.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:t.maskFilterValue,maskType:k,scale:t.scale,broadcastResPosBias:E,passPastInKv:S,qkvFormat:w}},Cc=e=>ce({...e}),Wi=ce({perm:[0,2,1,3]}),Bu=(e,t,r,a,n,i,s)=>{let u=[a,n,i],d=C.size(u),l=[{type:12,data:d},{type:12,data:s},{type:12,data:i}],c=f=>{let m=G("qkv_with_bias",t.dataType,u),g=R("qkv",t.dataType,u),_=R("bias",r.dataType,u),b=[{name:"output_size",type:"u32"},{name:"bias_offset",type:"u32"},{name:"hidden_size",type:"u32"}];return`
1748  ${f.registerUniforms(b).declareVariables(g,_,m)}
1749  ${f.mainStart()}
1750    ${f.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1751    let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset;
1752
1753    qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx];
1754  }`};return e.compute({name:"MultiHeadAttentionAddBias",shaderCache:{inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:u,dataType:t.dataType,gpuDataType:0}],dispatchGroup:{x:Math.ceil(d/64)},programUniforms:l}),getShaderSource:c},{inputs:[t,r],outputs:[-1]})[0]},ir=(e,t,r,a,n,i,s,u)=>{let d=i;if(s&&C.size(s.dims)>0){if(a===1)throw new Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV");return d=Bu(e,i,s,t,a,r*n,u),d=d.reshape([t,a,r,n]),r===1||a===1?d:e.compute(De(d,Wi.perm),{inputs:[d],outputs:[-1]})[0]}else return i.dims.length===3&&(d=i.reshape([t,a,r,n])),r===1||a===1?d:e.compute(De(d,Wi.perm),{inputs:[d],outputs:[-1]})[0]},Ac=(e,t)=>{let r=Ou(e.inputs,t),a=e.inputs[0],n=ze(e.inputs,1),i=ze(e.inputs,2),s=ze(e.inputs,3),u=ze(e.inputs,4),d=ze(e.inputs,5),l=ze(e.inputs,6),c=ze(e.inputs,7);if(a.dims.length===5)throw new Error("Packed QKV is not implemented");if((n==null?void 0:n.dims.length)===5)throw new Error("Packed KV is not implemented");let f=n&&i&&n.dims.length===4&&i.dims.length===4,m=ir(e,r.batchSize,r.numHeads,r.sequenceLength,r.headSize,a,s,0);if(f)return or(e,m,n,i,u,void 0,l,c,d,r);if(!n||!i)throw new Error("key and value must be provided");let g=ir(e,r.batchSize,r.numHeads,r.kvSequenceLength,r.headSize,n,s,r.hiddenSize),_=ir(e,r.batchSize,r.numHeads,r.kvSequenceLength,r.vHeadSize,i,s,2*r.hiddenSize);or(e,m,g,_,u,void 0,l,c,d,r)}}),Ru,Du,Nu,Mu,wa,Bc,Rc,Dc=U(()=>{J(),re(),we(),ie(),Ru=e=>{if(!e||e.length<1)throw new Error("too few inputs")},Du=(e,t)=>{let r=[],a=t.numOutputs;return e[1].dims[0]>0&&(e[1].getBigInt64Array().forEach(n=>r.push(Number(n))),a=r.length),ce({numOutputs:a,axis:t.axis,splitSizes:r})},Nu=e=>`
1755fn calculateOutputIndex(index: u32) -> u32 {
1756    for (var i: u32 = 0u; i < ${e}u; i += 1u ) {
1757    if (index < ${F("uniforms.size_in_split_axis","i",e)}) {
1758        return i;
1759    }
1760    }
1761    return ${e}u;
1762}`,Mu=e=>{let t=e.length,r=[];for(let a=0;a<t;++a){let n=e[a].setByIndices("indices","input[global_idx]");t===1?r.push(n):a===0?r.push(`if (output_number == ${a}u) { ${n} }`):a===t-1?r.push(`else { ${n} }`):r.push(`else if (output_number == ${a}) { ${n} }`)}return`
1763      fn writeBufferData(output_number: u32, indices: ${e[0].type.indices}, global_idx: u32) {
1764        ${r.join(`
1765`)}
1766      }`},wa=(e,t)=>{let r=e[0].dims,a=C.size(r),n=e[0].dataType,i=C.normalizeAxis(t.axis,r.length),s=new Array(t.numOutputs),u=R("input",n,r.length),d=new Array(t.numOutputs),l=[],c=[],f=0,m=[{type:12,data:a}];for(let _=0;_<t.numOutputs;_++){f+=t.splitSizes[_],d[_]=f;let b=r.slice();b[i]=t.splitSizes[_],c.push(b),s[_]=G(`output${_}`,n,b.length),l.push({dims:c[_],dataType:e[0].dataType})}m.push({type:12,data:d},...Z(r,...c));let g=_=>`
1767  ${_.registerUniform("input_size","u32").registerUniform("size_in_split_axis","u32",d.length).declareVariables(u,...s)}
1768  ${Nu(d.length)}
1769  ${Mu(s)}
1770
1771  ${_.mainStart()}
1772    ${_.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")}
1773
1774    var indices = ${u.offsetToIndices("global_idx")};
1775    var index = ${u.indicesGet("indices",i)};
1776    let output_number = calculateOutputIndex(index);
1777    if (output_number != 0) {
1778      index -= ${F("uniforms.size_in_split_axis","output_number - 1u",d.length)};
1779      ${u.indicesSet("indices",i,"index")};
1780    }
1781    writeBufferData(output_number, indices, global_idx);
1782  }`;return{name:"Split",shaderCache:{hint:t.cacheKey,inputDependencies:["rank"]},getShaderSource:g,getRunData:()=>({outputs:l,dispatchGroup:{x:Math.ceil(a/64)},programUniforms:m})}},Bc=(e,t)=>{Ru(e.inputs);let r=e.inputs.length===1?t:Du(e.inputs,t);e.compute(wa(e.inputs,r),{inputs:[0]})},Rc=e=>{let t=e.axis,r=e.splitSizes,a=e.numOutputs<0?r.length:e.numOutputs;if(a!==r.length)throw new Error("numOutputs and splitSizes lengh must be equal");return ce({axis:t,numOutputs:a,splitSizes:r})}}),Pu,qr,Nc,Mc=U(()=>{J(),re(),we(),ie(),Pu=(e,t)=>{let[r,a,n,i]=e,{numHeads:s,rotaryEmbeddingDim:u}=t;if(r.dims.length!==3&&r.dims.length!==4)throw new Error(`Input 'x' is expected to have 3 or 4 dimensions, got ${r.dims.length}`);if(!C.areEqual(a.dims,[])&&!C.areEqual(a.dims,[1])&&a.dims.length!==2)throw new Error(`Input 'position_ids' is expected to have 0, 1, or 2 dimensions, got ${a.dims.length}`);if(n.dims.length!==2)throw new Error(`Input 'cos_cache' is expected to have 2 dimensions, got ${n.dims.length}`);if(i.dims.length!==2)throw new Error(`Input 'sin_cache' is expected to have 2 dimensions, got ${i.dims.length}`);if(!C.areEqual(n.dims,i.dims))throw new Error("Inputs 'cos_cache' and 'sin_cache' are expected to have the same shape");if(u>0&&s===0)throw new Error("num_heads must be provided if rotary_embedding_dim is specified");let d=r.dims[0],l=r.dims[r.dims.length-2],c=n.dims[0],f=C.sizeFromDimension(r.dims,1)/l,m=u===0?n.dims[1]*2:f/s;if(u>m)throw new Error("rotary_embedding_dim must be less than or equal to head_size");if(a.dims.length===2){if(d!==a.dims[0])throw new Error(`Input 'position_ids' dimension 0 should be of size batch_size, got ${a.dims[0]}`);if(l!==a.dims[1])throw new Error(`Input 'position_ids' dimension 1 should be of size sequence_length, got ${a.dims[1]}`)}if(m/2!==n.dims[1]&&u/2!==n.dims[1])throw new Error(`Input 'cos_cache' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${n.dims[1]}`);if(l>c)throw new Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported")},qr=(e,t)=>{let{interleaved:r,numHeads:a,rotaryEmbeddingDim:n,scale:i}=t,s=e[0].dims[0],u=C.sizeFromDimension(e[0].dims,1),d=e[0].dims[e[0].dims.length-2],l=u/d,c=e[2].dims[1],f=n===0?c*2:l/a,m=new Array(s,d,l/f,f-c),g=C.computeStrides(m),_=[{type:1,data:i},{type:12,data:m},{type:12,data:g},...e[0].dims.length===3?new Array({type:12,data:[u,l,f,1]}):[],...e[0].dims.length===4?new Array({type:12,data:[u,f,d*f,1]}):[],...Z(e[0].dims,e[1].dims,e[2].dims,e[3].dims,e[0].dims)],b=x=>{let w=R("input",e[0].dataType,e[0].dims.length),$=R("position_ids",e[1].dataType,e[1].dims.length),k=R("cos_cache",e[2].dataType,e[2].dims.length),S=R("sin_cache",e[3].dataType,e[3].dims.length),T=G("output",e[0].dataType,e[0].dims.length);return x.registerUniforms([{name:"scale",type:"f32"},{name:"global_shape",type:"u32",length:m.length},{name:"global_strides",type:"u32",length:g.length},{name:"input_output_strides",type:"u32",length:g.length}]),`
1783        ${x.declareVariables(w,$,k,S,T)}
1784
1785        ${x.mainStart(Mt)}
1786          let half_rotary_emb_dim = uniforms.${k.name}_shape[1];
1787          let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape;
1788          let size = uniforms.global_shape[0] * uniforms.global_strides[0];
1789          ${x.guardAgainstOutOfBoundsWorkgroupSizes("size")}
1790
1791          if (bsnh[3] < half_rotary_emb_dim) {
1792            let position_ids_idx =
1793                ${$.broadcastedIndicesToOffset("bsnh.xy",G("",$.type.tensor,2))};
1794            let position_id =
1795                u32(${$.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0);
1796            let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${r});
1797            let j = i + select(half_rotary_emb_dim, 1, ${r});
1798            let re = ${w.getByOffset("i")}
1798 * ${k.get("position_id","bsnh[3]")} -
1799                ${w.getByOffset("j")} * ${S.get("position_id","bsnh[3]")};
1800            ${T.setByOffset("i","re")}
1801            let im = ${w.getByOffset("i")} * ${S.get("position_id","bsnh[3]")} +
1802                ${w.getByOffset("j")} * ${k.get("position_id","bsnh[3]")};
1803            ${T.setByOffset("j","im")}
1804          } else {
1805            let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim;
1806            ${T.setByOffset("k",w.getByOffset("k"))}
1807          }
1808        }`};return{name:"RotaryEmbedding",shaderCache:{hint:ce({interleaved:r}).cacheKey,inputDependencies:["rank","rank","rank","rank"]},getShaderSource:b,getRunData:()=>({outputs:[{dims:e[0].dims,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(C.size(m)/Mt)},programUniforms:_})}},Nc=(e,t)=>{Pu(e.inputs,t),e.compute(qr(e.inputs,t))}}),Uu,qu,Li,Wu,Pc,Qm=U(()=>{we(),J(),qa(),Oc(),Dc(),mt(),Mc(),ie(),Uu=(e,t)=>{if(t.doRotary&&e.length<=7)throw new Error("cos_cache and sin_cache inputs are required if do_rotary is specified");let r=e[0],a=e[1],n=e[2],i=e[3],s=e[4];if(t.doRotary!==0&&e.length<=7)throw new Error("cos_cast and sin_cache are expected if do_rotary attribute is non-zero");if(t.localWindowSize!==-1)throw new Error("Local attention is not supported");if(t.softcap!==0)throw new Error("Softcap is not supported");if(t.rotaryInterleaved!==0)throw new Error("Rotary interleaved is not supported");if(t.smoothSoftmax)throw new Error("Smooth softmax is not supported");if(r.dims.length!==3&&r.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let u=!1,d=r.dims[0],l=r.dims[1],c=r.dims.length===3?u?r.dims[2]/3:r.dims[2]:t.numHeads*r.dims[4],f=l,m=0,g=!a||a.dims.length===0,_=Math.floor(g?c/(t.numHeads+2*t.kvNumHeads):c/t.numHeads);g&&(c=_*t.numHeads);let b=i&&i.dims.length!==0,x=s&&s.dims.length!==0;if(b&&i.dims.length===4&&i.dims[0]===d&&i.dims[1]!==t.kvNumHeads&&i.dims[2]===t.kvNumHeads&&i.dims[3]===_)throw new Error("BSNH pastKey/pastValue is not supported");if(b&&x){if(i.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(s.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');m=i.dims[2]}else if(b||x)throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let w=1;if(a&&a.dims.length>0){if(r.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(a.dims.length<3||a.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(r.dims[0]!==a.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(a.dims.length===3){if(r.dims[2]%a.dims[2]!==0)throw new Error('Dimension 2 of "query" should be a multiple of "key"');f=a.dims[1]}else if(a.dims.length===5){if(a.dims[2]!==t.numHeads||a.dims[3]!==2||a.dims[4]!==_)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(n)throw new Error('Expect "value" be none when "key" has packed kv format.');f=a.dims[1]}else{if(a.dims[1]!==t.numHeads||a.dims[3]!==_)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');f=a.dims[2]}}else{if(r.dims.length!==3&&r.dims.length!==5)throw new Error('Input "query" is expected to have 3 or 5 dimensions when key is empty');if(r.dims.length===5&&(r.dims[2]!==t.numHeads||r.dims[3]!==3))throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');w=3}let $=0,k=!1,S=t.kvNumHeads?_*t.kvNumHeads:c;if(n&&n.dims.length>0){if(n.dims.length!==3&&n.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(r.dims[0]!==n.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(n.dims.length===3){if(f!==n.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');S=n.dims[2]}else{if(f!==n.dims[2])throw new Error('Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)');S=n.dims[1]*n.dims[3],k=!0}}let T=e.length>4?e[5]:void 0;if(T&&T.dims.length!==1&&T.dims[0]!==d)throw new Error('Input "seqlens" is expected to have 1 dimension and the same dim 0 as batch_size');return{batchSize:d,sequenceLength:l,pastSequenceLength:m,kvSequenceLength:f,totalSequenceLength:-1,maxSequenceLength:-1,inputHiddenSize:0,hiddenSize:c,vHiddenSize:S,headSize:_,vHeadSize:Math.floor(S/t.kvNumHeads),numHeads:t.numHeads,kvNumHeads:t.kvNumHeads,nReps:t.numHeads/t.kvNumHeads,pastPresentShareBuffer:!1,maskType:$,scale:t.scale,broadcastResPosBias:!1,passPastInKv:k,qkvFormat:w}},qu=ce({perm:[0,2,1,3]}),Li=(e,t,r)=>{let a=t,n=r.kvNumHeads;return t.dims.length===3&&r.kvSequenceLength!==0&&(a=t.reshape([r.batchSize,r.kvSequenceLength,n,r.headSize]),a=e.compute(De(a,qu.perm),{inputs:[a],outputs:[-1]})[0]),a},Wu=(e,t,r,a)=>{let n=7,i=["type","type"],s=[e*t],u=e*t,d=[{type:12,data:u},{type:12,data:t},{type:12,data:e}],l=c=>{let f=R("seq_lens",r.dataType,r.dims),m=R("total_seq_lens",a.dataType,a.dims),g=G("pos_ids",n,s),_=[{name:"output_size",type:"u32"},{name:"sequence_length",type:"u32"},{name:"batch_size",type:"u32"}];return`
1809  ${c.registerUniforms(_).declareVariables(f,m,g)}
1810  ${c.mainStart()}
1811    ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1812    let total_sequence_length = u32(${m.getByOffset("0")});
1813    let is_subsequent_prompt = uniforms.sequence_length > 1 && uniforms.sequence_length != total_sequence_length;
1814    let is_first_prompt = !is_subsequent_prompt && uniforms.sequence_length == total_sequence_length;
1815    let batch_idx = global_idx / uniforms.sequence_length;
1816    let sequence_idx = i32(global_idx % uniforms.sequence_length);
1817    var pos_id: i32 = 0;
1818    let seqlen = ${f.getByOffset("batch_idx")};
1819    let total_seqlen = seqlen + 1;
1820    if (is_first_prompt) {
1821      if (sequence_idx < total_seqlen) {
1822        pos_id = sequence_idx;
1823      } else {
1824        pos_id = 1;
1825      }
1826      ${g.setByOffset("global_idx","pos_id")}
1827    } else if (is_subsequent_prompt) {
1828      let past_seqlen = total_seqlen - i32(uniforms.sequence_length);
1829      if (past_seqlen + sequence_idx < total_seqlen) {
1830        pos_id = past_seqlen + sequence_idx;
1831      } else {
1832        pos_id = 1;
1833      }
1834      ${g.setByOffset("global_idx","pos_id")}
1835    } else if (global_idx < uniforms.batch_size) {
1836      ${g.setByOffset("global_idx","seqlen")}
1837    };
1838  }
1839  `};return{name:"GeneratePositionIds",shaderCache:{hint:`${e};${t}`,inputDependencies:i},getRunData:()=>({outputs:[{dims:s,dataType:n}],dispatchGroup:{x:Math.ceil(u/64)},programUniforms:d}),getShaderSource:l}},Pc=(e,t)=>{var S;
vendor: 13,105 bytes, lines 1839-1952
1839let r=Uu(e.inputs,t);if(e.inputs[0].dims.length===5)throw new Error("Packed QKV is not implemented");if(((S=e.inputs[1])==null?void 0:S.dims.length)===5)throw new Error("Packed KV is not implemented");let a=e.inputs[0],n=e.inputs[1]&&e.inputs[1].dims.length>0?e.inputs[1]:void 0,i=e.inputs[2]&&e.inputs[2].dims.length>0?e.inputs[2]:void 0,s=e.inputs[3]&&e.inputs[3].dims.length!==0?e.inputs[3]:void 0,u=e.inputs[4]&&e.inputs[4].dims.length!==0?e.inputs[4]:void 0,d=e.inputs.length>4?e.inputs[5]:void 0,l=e.inputs.length>5?e.inputs[6]:void 0,c=r.kvNumHeads?r.kvNumHeads:r.numHeads,f=ce({axis:2,numOutputs:3,splitSizes:[r.numHeads*r.headSize,c*r.headSize,c*r.headSize]}),[m,g,_]=!n&&!i?e.compute(wa([a],f),{inputs:[a],outputs:[-1,-1,-1]}):[a,n,i],b,x;if(t.doRotary){let T=e.compute(Wu(r.batchSize,r.sequenceLength,d,l),{inputs:[d,l],outputs:[-1]})[0],E=e.inputs[7],z=e.inputs[8],A=ce({interleaved:t.rotaryInterleaved!==0,numHeads:r.numHeads,rotaryEmbeddingDim:0,scale:t.scale}),O=[m,T,E,z],q=[-1];b=e.compute(qr(O,A),{inputs:O,outputs:q})[0],O.splice(0,1,g);let X=ce({interleaved:t.rotaryInterleaved!==0,numHeads:r.kvNumHeads,rotaryEmbeddingDim:0,scale:t.scale});x=e.compute(qr(O,X),{inputs:O,outputs:q})[0]}let w=ir(e,r.batchSize,r.numHeads,r.sequenceLength,r.headSize,t.doRotary?b:m,void 0,0),$=Li(e,t.doRotary?x:g,r),k=Li(e,_,r);or(e,w,$,k,void 0,void 0,s,u,void 0,r,d,l)}}),Vi,Lu,Vu,Uc,Xm=U(()=>{J(),re(),mt(),ie(),Vi=(e,t,r,a,n,i,s,u)=>{let d=$e(i),l=d===1?"f32":`vec${d}f`,c=d===1?"vec2f":`mat2x${d}f`,f=n*s,m=64;f===1&&(m=256);let g=[n,s,i/d],_=[n,s,2],b=["rank","type","type"],x=[];x.push(...Z(g,_));let w=$=>{let k=R("x",t.dataType,3,d),S=R("scale",r.dataType,r.dims),T=R("bias",a.dataType,a.dims),E=G("output",1,3,2),z=[k,S,T,E];return`
1840  var<workgroup> workgroup_shared : array<${c}, ${m}>;
1841  const workgroup_size = ${m}u;
1842  ${$.declareVariables(...z)}
1843  ${$.mainStart(m)}
1844    let batch = workgroup_index / uniforms.x_shape[1];
1845    let channel = workgroup_index % uniforms.x_shape[1];
1846    let hight = uniforms.x_shape[2];
1847    // initialize workgroup memory
1848    var sum = ${l}(0);
1849    var squared_sum = ${l}(0);
1850    for (var h = local_idx; h < hight; h += workgroup_size) {
1851      let value = ${l}(${k.get("batch","channel","h")});
1852      sum += value;
1853      squared_sum += value * value;
1854    }
1855    workgroup_shared[local_idx] = ${c}(sum, squared_sum);
1856    workgroupBarrier();
1857
1858    for (var currSize = workgroup_size >> 1;  currSize > 0; currSize = currSize >> 1) {
1859      if (local_idx < currSize) {
1860        workgroup_shared[local_idx] = workgroup_shared[local_idx] + workgroup_shared[local_idx + currSize];
1861      }
1862      workgroupBarrier();
1863    }
1864    if (local_idx == 0) {
1865      let sum_final = ${ht("workgroup_shared[0][0]",d)} / f32(hight * ${d});
1866      let squared_sum_final = ${ht("workgroup_shared[0][1]",d)} / f32(hight * ${d});
1867
1868      let inv_std_dev = inverseSqrt(squared_sum_final - sum_final * sum_final + f32(${u}));
1869      let channel_scale = inv_std_dev * f32(scale[channel]);
1870      let channel_shift = f32(bias[channel]) - sum_final * channel_scale;
1871      output[workgroup_index] = vec2f(channel_scale, channel_shift);
1872    }
1873  }`};return e.compute({name:"InstanceNormComputeChannelScaleShift",shaderCache:{hint:`${d};${u};${m}`,inputDependencies:b},getRunData:()=>({outputs:[{dims:_,dataType:1}],dispatchGroup:{x:f},programUniforms:x}),getShaderSource:w},{inputs:[t,r,a],outputs:[-1]})[0]},Lu=(e,t,r)=>{let a=t[0].dims,n=a,i=2,s=a[0],u=a[1],d=C.sizeFromDimension(a,i),l=$e(d),c=C.size(n)/l,f=Vi(e,t[0],t[1],t[2],s,d,u,r.epsilon),m=[s,u,d/l],g=[s,u],_=["type","none"],b=x=>{let w=R("x",t[0].dataType,m.length,l),$=R("scale_shift",1,g.length,2),k=G("output",t[0].dataType,m.length,l),S=[w,$,k];return`
1874  ${x.registerUniform("output_size","u32").declareVariables(...S)}
1875  ${x.mainStart()}
1876  ${x.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1877      let outputIndices = ${k.offsetToIndices("global_idx")};
1878      let batch = outputIndices[0];
1879      let channel = outputIndices[1];
1880      let scale_shift = ${$.getByIndices("vec2<u32>(batch, channel)")};
1881      let value = ${w.getByOffset("global_idx")} * ${k.type.value}(scale_shift.x) + ${k.type.value}(scale_shift.y);
1882      ${k.setByOffset("global_idx","value")};
1883  }`};e.compute({name:"InstanceNormalization",shaderCache:{hint:`${l}`,inputDependencies:_},getRunData:()=>({outputs:[{dims:n,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:[{type:12,data:c},...Z(m,g,m)]}),getShaderSource:b},{inputs:[t[0],f]})},Vu=(e,t,r)=>{let a=t[0].dims,n=a,i=a[0],s=a[a.length-1],u=C.sizeFromDimension(a,1)/s,d=$e(s),l=C.size(n)/d,c=[{type:12,data:u},{type:12,data:Math.floor(s/d)}],f=["type","type"],m=!1,g=[0,a.length-1];for(let w=0;w<a.length-2;w++)m=m||a[w+1]!==1,g.push(w+1);m=m&&a[a.length-1]!==1;let _=m?e.compute(De(e.inputs[0],g),{inputs:[e.inputs[0]],outputs:[-1]})[0]:e.inputs[0].reshape(Array.from({length:a.length},(w,$)=>a[g[$]])),b=Vi(e,_,t[1],t[2],i,u,s,r.epsilon),x=w=>{let $=Se(t[0].dataType),k=d===1?"vec2f":`mat${d}x2f`,S=z=>{let A=z===0?"x":"y",O=d===1?"f32":`vec${d}f`;switch(d){case 1:return`${$}(${O}(scale.${A}))`;case 2:return`vec2<${$}>(${O}(scale[0].${A}, scale[1].${A}))`;case 4:return`vec4<${$}>(${O}(scale[0].${A}, scale[1].${A}, scale[2].${A}, scale[3].${A}))`;default:throw new Error(`Not supported compoents ${d}`)}},T=R("input",t[0].dataType,t[0].dims,d),E=G("output",t[0].dataType,n,d);return`
1884  @group(0) @binding(0) var<storage, read> input : array<${T.type.storage}>;
1885  @group(0) @binding(1) var<storage, read> scale_input : array<${k}>;
1886  @group(0) @binding(2) var<storage, read_write> output : array<${E.type.storage}>;
1887  struct Uniforms {H: u32, C : u32};
1888  @group(0) @binding(3) var<uniform> uniforms: Uniforms;
1889
1890  ${w.mainStart()}
1891    let current_image_number = global_idx / (uniforms.C * uniforms.H);
1892    let current_channel_number = global_idx % uniforms.C;
1893
1894    let scale_offset = current_image_number * uniforms.C + current_channel_number;
1895    let scale = scale_input[scale_offset];
1896    output[global_idx] = fma(input[global_idx], ${S(0)}, ${S(1)});
1897  }`};e.compute({name:"InstanceNormalizationNHWC",shaderCache:{hint:`${d}`,inputDependencies:f},getRunData:()=>({outputs:[{dims:n,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:c}),getShaderSource:x},{inputs:[t[0],b]})},Uc=(e,t)=>{t.format==="NHWC"?Vu(e,e.inputs,t):Lu(e,e.inputs,t)}}),ju,Hu,qc,Ym=U(()=>{J(),re(),ie(),ju=e=>{if(!e||e.length<2)throw new Error("layerNorm requires at least 2 inputs.")},Hu=(e,t,r)=>{let a=t.simplified,n=e[0].dims,i=e[1],s=!a&&e[2],u=n,d=C.normalizeAxis(t.axis,n.length),l=C.sizeToDimension(n,d),c=C.sizeFromDimension(n,d),f=C.size(i.dims),m=s?C.size(s.dims):0;if(f!==c||s&&m!==c)throw new Error(`Size of X.shape()[axis:] == ${c}.
1898       Size of scale and bias (if provided) must match this.
1899       Got scale size of ${f} and bias size of ${m}`);let g=[];for(let T=0;T<n.length;++T)T<d?g.push(n[T]):g.push(1);let _=$e(c),b=["type","type"],x=[{type:12,data:l},{type:1,data:c},{type:12,data:Math.floor(c/_)},{type:1,data:t.epsilon}];s&&b.push("type");let w=r>1,$=r>2,k=T=>{let E=Se(e[0].dataType),z=[R("x",e[0].dataType,e[0].dims,_),R("scale",i.dataType,i.dims,_)];s&&z.push(R("bias",s.dataType,s.dims,_)),z.push(G("output",e[0].dataType,u,_)),w&&z.push(G("mean_data_output",1,g)),$&&z.push(G("inv_std_output",1,g));let A=[{name:"norm_count",type:"u32"},{name:"norm_size",type:"f32"},{name:"norm_size_vectorized",type:"u32"},{name:"epsilon",type:"f32"}];return`
1900  ${T.registerUniforms(A).declareVariables(...z)}
1901  ${T.mainStart()}
1902    ${T.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")}
1903    let offset = global_idx * uniforms.norm_size_vectorized;
1904    var mean_vector = ${ca("f32",_)};
1905    var mean_square_vector = ${ca("f32",_)};
1906
1907    for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) {
1908      let value = ${Dt(E,_,"x[h + offset]")};
1909      mean_vector += value;
1910      mean_square_vector += value * value;
1911    }
1912    let mean = ${ht("mean_vector",_)} / uniforms.norm_size;
1913    let inv_std_dev = inverseSqrt(${ht("mean_square_vector",_)} / uniforms.norm_size ${a?"":"- mean * mean"} + uniforms.epsilon);
1914
1915    for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) {
1916      let f32input = ${Dt(E,_,"x[j + offset]")};
1917      let f32scale = ${Dt(E,_,"scale[j]")};
1918      output[j + offset] = ${z[0].type.value}((f32input ${a?"":"- mean"}) * inv_std_dev * f32scale
1919        ${s?`+ ${Dt(E,_,"bias[j]")}`:""}
1920      );
1921    }
1922
1923    ${w?"mean_data_output[global_idx] = mean":""};
1924    ${$?"inv_std_output[global_idx] = inv_std_dev":""};
1925  }`},S=[{dims:u,dataType:e[0].dataType}];return w&&S.push({dims:g,dataType:1}),$&&S.push({dims:g,dataType:1}),{name:"LayerNormalization",shaderCache:{hint:`${_};${r};${a}`,inputDependencies:b},getRunData:()=>({outputs:S,dispatchGroup:{x:Math.ceil(l/64)},programUniforms:x}),getShaderSource:k}},qc=(e,t)=>{ju(e.inputs),e.compute(Hu(e.inputs,t,e.outputCount))}}),Gu,Wc,Jm=U(()=>{re(),Ha(),Ga(),Gu=e=>{if(!e||e.length!==2)throw new Error("MatMul requires 2 inputs.");if(e[0].dims[e[0].dims.length-1]!==e[1].dims[e[1].dims.length-2])throw new Error("shared dimension does not match.")},Wc=e=>{Gu(e.inputs);let t=Nt.calcShape(e.inputs[0].dims,e.inputs[1].dims,!0);if(!t)throw new Error("Can't use matmul on the given tensors");let r=t[t.length-1],a=e.inputs[0].dims[e.inputs[0].dims.length-1];if(r<8&&a<8)e.compute(ja(e.inputs,{activation:""},t));else{let n=t[t.length-2],i=C.size(e.inputs[0].dims.slice(0,-2)),s=C.size(e.inputs[1].dims.slice(0,-2));if(i!==1&&n===1&&s===1){let u=e.inputs[0].reshape([1,i,a]),d=e.inputs[1].reshape([1,a,r]),l=[1,i,r],c=[u,d];e.compute(Ur(c,{activation:""},t,l),{inputs:c})}else e.compute(Ur(e.inputs,{activation:""},t))}}}),Fu,Ku,Zu,Lc,Vc,eg=U(()=>{J(),re(),we(),ie(),Fu=(e,t)=>{if(e.length<3||e.length>4)throw new Error("MatMulNBits requires 3 or 4 inputs");let r=e[0],a=r.dims.length;if(r.dims[a-1]!==t.k)throw new Error("The last dim of input shape does not match the k value");let n=Math.floor((t.k+t.blockSize-1)/t.blockSize),i=t.blockSize/8*t.bits,s=e[1];if(!C.areEqual(s.dims,[t.n,n,i]))throw new Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize");let u=e[2].dims;if(C.size(u)!==t.n*n)throw new Error("scales input size error.");if(e.length===4){let d=e[3].dims,l=t.bits>4?t.n*n:t.n*Math.floor((n+1)/2);if(C.size(d)!==l)throw new Error("zeroPoints input size error.")}},Ku=(e,t)=>{let r=e[0].dims,a=r.length,n=r[a-2],i=t.k,s=t.n,u=r.slice(0,a-2),d=C.size(u),l=e[1].dims[2]/4,c=e[0].dataType,f=$e(t.k),m=$e(l),g=$e(s),_=u.concat([n,s]),b=n>1&&s/g%2===0?2:1,x=C.size(_)/g/b,w=64,$=[],k=[d,n,i/f],S=C.convertShape(e[1].dims).slice();S.splice(-1,1,l/m),$.push(...Z(k)),$.push(...Z(S)),$.push(...Z(e[2].dims)),e.length===4&&$.push(...Z(C.convertShape(e[3].dims)));let T=[d,n,s/g];$.push(...Z(T));let E=z=>{let A=k.length,O=R("a",e[0].dataType,A,f),q=R("b",12,S.length,m),X=R("scales",e[2].dataType,e[2].dims.length),H=[O,q,X],Q=e.length===4?R("zero_points",12,e[3].dims.length):void 0;Q&&H.push(Q);let oe=T.length,te=G("output",e[0].dataType,oe,g),V=Se(e[0].dataType),W=(()=>{switch(f){case 1:return`array<${V}, 8>`;case 2:return`mat4x2<${V}>`;case 4:return`mat2x4<${V}>`;default:throw new Error(`${f}-component is not supported.`)}})(),le=()=>{let D=`
1926          // reuse a data
1927            var input_offset = ${O.indicesToOffset(`${O.type.indices}(batch, row, word_offset)`)};
1928            var a_data: ${W};
1929            for (var j: u32 = 0; j < ${8/f}; j++) {
1930              a_data[j] = ${O.getByOffset("input_offset")};
1931              input_offset++;
1932            }
1933          `;for(let P=0;P<g*b;P++)D+=`
1934            b_value = ${m===1?`b${P}_data`:`b${P}_data[i]`};
1935            b_value_lower = unpack4xU8(b_value & b_mask);
1936            b_value_upper = unpack4xU8((b_value >> 4) & b_mask);
1937            b_quantized_values = ${W}(${Array.from({length:4},(j,se)=>`${V}(b_value_lower[${se}]), ${V}(b_value_upper[${se}])`).join(", ")});
1938            b_dequantized_values = ${f===1?`${W}(${Array.from({length:8},(j,se)=>`(b_quantized_values[${se}] - ${Q?`zero_point${P}`:"zero_point"}) * scale${P}`).join(", ")});`:`(b_quantized_values - ${W}(${Array(8).fill(`${Q?`zero_point${P}`:"zero_point"}`).join(",")})) * scale${P};`};
1939            workgroup_shared[local_id.x * ${b} + ${Math.floor(P/g)}]${g>1?`[${P%g}]`:""} += ${Array.from({length:8/f},(j,se)=>`${f===1?`a_data[${se}] * b_dequantized_values[${se}]`:`dot(a_data[${se}], b_dequantized_values[${se}])`}`).join(" + ")};
1940          `;return D},ee=()=>{let D=`
1941            var col_index = col * ${g};
1942            ${Q?`
1943            let zero_point_bytes_per_col = (nBlocksPerCol + 1) / 2;
1944            var zero_point_byte_count: u32;
1945            var zero_point_word_index: u32;
1946            var zero_point_byte_offset: u32;
1947            let zero_point_nibble_offset: u32 = block & 0x1u;
1948            var zero_point_bits_offset: u32;
1949            var zero_point_word: u32;`:`
1950            // The default zero point is 8 for unsigned 4-bit quantization.
1951            let zero_point = ${V}(8);`}
1952            `;
vendor: 4,459 bytes, lines 1952-2015
1952for(let P=0;P<g*b;P++)D+=`
1953            let scale${P} = ${X.getByOffset("col_index * nBlocksPerCol + block")};
1954            ${Q?`
1955            zero_point_byte_count = col_index * zero_point_bytes_per_col + (block >> 0x1u);
1956            zero_point_word_index = zero_point_byte_count >> 0x2u;
1957            zero_point_byte_offset = zero_point_byte_count & 0x3u;
1958            zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2);
1959            zero_point_word = ${Q.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;
1960            let zero_point${P} = ${V}((zero_point_word) & 0xFu);`:""}
1961            col_index += 1;`;return D},ae=()=>{let D=`col_index = col * ${g};`;for(let P=0;P<g*b;P++)D+=`
1962            let b${P}_data = ${q.getByIndices(`${q.type.indices}(col_index, block, word)`)};
1963            col_index += 1;`;return D+=`
1964            var b_value: u32;
1965            let b_mask: u32 = 0x0F0F0F0Fu;
1966            var b_value_lower: vec4<u32>;
1967            var b_value_upper: vec4<u32>;
1968            var b_quantized_values: ${W};
1969            var b_dequantized_values: ${W};`,D};return`
1970        var<workgroup> workgroup_shared: array<${te.type.value}, ${b*w}>;
1971        ${z.declareVariables(...H,te)}
1972        ${z.mainStart([w,1,1])}
1973          let output_indices = ${te.offsetToIndices(`(global_idx / ${w}) * ${b}`)};
1974          let col = output_indices[2];
1975          let row = output_indices[1];
1976          let batch = output_indices[0];
1977          let nBlocksPerCol = uniforms.b_shape[1];
1978
1979          for (var block = local_id.x; block < nBlocksPerCol; block += ${w}) {
1980            //process one block
1981            var word_offset: u32 = block * ${t.blockSize/f};
1982            ${ee()}
1983            for (var word: u32 = 0; word < ${l}; word += ${m}) {
1984              ${ae()}
1985              for (var i: u32 = 0; i < ${m}; i++) {
1986                ${le()}
1987                word_offset += ${8/f};
1988              }
1989            }
1990          }
1991          workgroupBarrier();
1992
1993          if (local_id.x < ${b}) {
1994            var output_value: ${te.type.value} = ${te.type.value}(0);
1995            var workgroup_shared_offset: u32 = local_id.x;
1996            for (var b: u32 = 0u; b < ${w}u; b++) {
1997              output_value += workgroup_shared[workgroup_shared_offset];
1998              workgroup_shared_offset += ${b};
1999            }
2000            ${te.setByIndices(`${te.type.indices}(batch, row, col + local_id.x)`,"output_value")};
2001          }
2002        }`};return{name:"MatMulNBits",shaderCache:{hint:`${t.blockSize};${t.bits};${f};${m};${g};${b};${w}`,inputDependencies:Array(e.length).fill("rank")},getRunData:()=>({outputs:[{dims:_,dataType:c}],dispatchGroup:{x},programUniforms:$}),getShaderSource:E}},Zu=(e,t)=>{let r=e[0].dims,a=r.length,n=r[a-2],i=t.k,s=t.n,u=r.slice(0,a-2),d=C.size(u),l=e[1].dims[2]/4,c=e[0].dataType,f=$e(t.k),m=$e(l),g=u.concat([n,s]),_=128,b=s%8===0?8:s%4===0?4:1,x=_/b,w=x*m*8,$=w/f,k=w/t.blockSize,S=C.size(g)/b,T=[],E=[d,n,i/f],z=C.convertShape(e[1].dims).slice();z.splice(-1,1,l/m),T.push(...Z(E)),T.push(...Z(z)),T.push(...Z(e[2].dims)),e.length===4&&T.push(...Z(C.convertShape(e[3].dims)));let A=[d,n,s];T.push(...Z(A));let O=q=>{let X=E.length,H=R("a",e[0].dataType,X,f),Q=R("b",12,z.length,m),oe=R("scales",e[2].dataType,e[2].dims.length),te=[H,Q,oe],V=e.length===4?R("zero_points",12,e[3].dims.length):void 0;V&&te.push(V);let W=A.length,le=G("output",e[0].dataType,W),ee=Se(e[0].dataType),ae=()=>{switch(f){case 1:return`
2003          let a_data0 = vec4<${ee}>(sub_a[word_offset], sub_a[word_offset + 1], sub_a[word_offset + 2], sub_a[word_offset + 3]);
2004          let a_data1 = vec4<${ee}>(sub_a[word_offset + 4], sub_a[word_offset + 5], sub_a[word_offset + 6], sub_a[word_offset + 7]);`;case 2:return`
2005          let a_data0 = vec4<${ee}>(sub_a[word_offset], sub_a[word_offset + 1]);
2006          let a_data1 = vec4<${ee}>(sub_a[word_offset + 2], sub_a[word_offset + 3]);`;case 4:return`
2007          let a_data0 = sub_a[word_offset];
2008          let a_data1 = sub_a[word_offset + 1];`;default:throw new Error(`${f}-component is not supported.`)}};return`
2009        var<workgroup> sub_a: array<${H.type.value}, ${$}>;
2010        var<workgroup> inter_results: array<array<${le.type.value}, ${x}>, ${b}>;
2011        ${q.declareVariables(...te,le)}
2012        ${q.mainStart([x,b,1])}
2013          let output_indices = ${le.offsetToIndices(`workgroup_index * ${b}`)};
2014          let col = output_indices[2];
2015          let row = output_indices[1];
2016          let batch = output_indices[0];
2017          let n_blocks_per_col = uniforms.b_shape[1];
2018          let num_tiles =  (n_blocks_per_col - 1) / ${k} + 1;
2019
2020          // Loop over shared dimension.
2021          for (var tile: u32 = 0; tile < num_tiles; tile += 1) {
2022            let a_col_start = tile * ${$};
2023            // load one tile A data into shared memory.
2024            for (var a_offset = local_idx; a_offset < ${$}; a_offset += ${_})
2025            {
2026              let a_col = a_col_start + a_offset;
2027              if (a_col < uniforms.a_shape[2])
2028              {
2029                sub_a[a_offset] = ${H.getByIndices(`${H.type.indices}(batch, row, a_col)`)};
2030              } else {
2031                sub_a[a_offset] = ${H.type.value}(0);
2032              }
2033            }
2034            workgroupBarrier();
2035
2036            // each thread process one block
2037            let b_row = col + local_id.y;
2038            let block = tile * ${k} + local_id.x;
2039            ${V?`
2040            let zero_point_bytes_per_col = (n_blocks_per_col + 1) / 2;
2041            let zero_point_byte_count = b_row * zero_point_bytes_per_col + (block >> 0x1u);
2042            let zero_point_word_index = zero_point_byte_count >> 0x2u;
2043            let zero_point_byte_offset = zero_point_byte_count & 0x3u;
2044            let zero_point_nibble_offset: u32 = block & 0x1u;
2045            let zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2);
2046            let zero_point_word = ${V.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;
2047            let zero_point = ${ee}((zero_point_word) & 0xFu);`:`
2048            // The default zero point is 8 for unsigned 4-bit quantization.
2049            let zero_point = ${ee}(8);`}
2050            let scale = ${oe.getByOffset("b_row * n_blocks_per_col + block")};
2051            let b_data = ${Q.getByIndices(`${Q.type.indices}(b_row, block, 0)`)};
2052            var word_offset = local_id.x * ${t.blockSize/f};
2053            for (var i: u32 = 0; i < ${m}; i++) {
2054              ${ae()}
2055              let b_value = ${m===1?"b_data":"b_data[i]"};
2056              let b_value_lower = unpack4xU8(b_value & 0x0F0F0F0Fu);
2057              let b_value_upper = unpack4xU8((b_value >> 4) & 0x0F0F0F0Fu);
2058              let b_quantized_values = mat2x4<${ee}>(${Array.from({length:4},(D,P)=>`${ee}(b_value_lower[${P}]), ${ee}(b_value_upper[${P}])`).join(", ")});
2059              let b_dequantized_values = (b_quantized_values - mat2x4<${ee}>(${Array(8).fill("zero_point").join(",")})) * scale;
2060              inter_results[local_id.y][local_id.x] += ${Array.from({length:2},(D,P)=>`${`dot(a_data${P}, b_dequantized_values[${P}])`}`).join(" + ")};
2061              word_offset += ${8/f};
2062            }
2063            workgroupBarrier();
2064          }
2065
2066          if (local_idx < ${b}) {
2067            var output_value: ${le.type.value} = ${le.type.value}(0);
2068            for (var b = 0u; b < ${x}; b++) {
2069              output_value += inter_results[local_idx][b];
2070            }
2071            if (col + local_idx < uniforms.output_shape[2])
2072            {
2073              ${le.setByIndices(`${le.type.indices}(batch, row, col + local_idx)`,"output_value")}
2074            }
2075          }
2076        }`};return{name:"BlockwiseMatMulNBits32",shaderCache:{hint:`${t.blockSize};${f};${m};${x};${b}`,inputDependencies:Array(e.length).fill("rank")},getRunData:()=>({outputs:[{dims:g,dataType:c}],dispatchGroup:{x:S},programUniforms:T}),getShaderSource:O}},Lc=(e,t)=>{Fu(e.inputs,t),t.blockSize===32&&e.adapterInfo.isVendor("intel")&&e.adapterInfo.isArchitecture("gen-12lp")?e.compute(Zu(e.inputs,t)):e.compute(Ku(e.inputs,t))},Vc=e=>ce(e)}),Qu,Xu,Yu,Ju,el,tl,rl,il,jc,tg=U(()=>{J(),re(),ie(),Qu=e=>{if(!e||e.length<1)throw new Error("Too few inputs");if(e[0].dataType!==1&&e[0].dataType!==10)throw new Error("Input type must be float or float16.");if(e.length>=2){let t=e[0].dims.length*2===e[1].dims[0];if(e.length===4&&(t=e[3].dims[0]*2===e[1].dims[0]),!t)throw new Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes].")}},Xu=(e,t,r)=>{let a="";for(let n=t-1;n>=0;--n)a+=`
2077            k = i32(${e.indicesGet("indices",n)}) - ${F("uniforms.pads",n,r)};
2078            if (k < 0) {
2079              break;
2080            }
2081            if (k >= i32(${F("uniforms.x_shape",n,t)})) {
2082              break;
2083            }
2084            offset += k * i32(${F("uniforms.x_strides",n,t)}
2084);
2085        `;return`
2086          value = ${e.type.value}(uniforms.constant_value);
2087          for (var i = 0; i < 1; i++) {
2088            var offset = 0;
2089            var k = 0;
2090            ${a}
2091            value = x[offset];
2092          }
2093      `},Yu=(e,t,r)=>{let a="";for(let n=t-1;n>=0;--n)a+=`
2094                k = i32(${e.indicesGet("indices",n)}) - ${F("uniforms.pads",n,r)};
2095                if (k < 0) {
2096                  k = -k;
2097                }
2098                {
2099                  let _2n_1 = 2 * (i32(${F("uniforms.x_shape",n,t)}) - 1);
2100                  k = k % _2n_1;
2101                  if(k >= i32(${F("uniforms.x_shape",n,t)})) {
2102                    k = _2n_1 - k;
2103                  }
2104                }
2105                offset += k * i32(${F("uniforms.x_strides",n,t)});
2106            `;return`
2107              var offset = 0;
2108              var k = 0;
2109              ${a}
2110              value = x[offset];
2111          `},Ju=(e,t,r)=>{let a="";for(let n=t-1;n>=0;--n)a+=`
2112                k = i32(${e.indicesGet("indices",n)}) - ${F("uniforms.pads",n,r)};
2113                if (k < 0) {
2114                  k = 0;
2115                }
2116                if (k >= i32(${F("uniforms.x_shape",n,t)})) {
2117                  k = i32(${F("uniforms.x_shape",n,t)}) - 1;
2118                }
2119                offset += k * i32(${F("uniforms.x_strides",n,t)});
2120            `;return`
2121              var offset = 0;
2122              var k = 0;
2123              ${a}
2124              value = x[offset];
2125          `},el=(e,t,r)=>{let a="";for(let n=t-1;n>=0;--n)a+=`
2126                k = i32(${e.indicesGet("indices",n)}) - ${F("uniforms.pads",n,r)};
2127                if (k < 0)  {
2128                  k += i32(${F("uniforms.x_shape",n,t)}]);
2129                }
2130                if (k >= i32(${F("uniforms.x_shape",n,t)})) {
2131                  k -= i32(${F("uniforms.x_shape",n,t)});
2132                }
2133                offset += k * i32(${F("uniforms.x_strides",n,t)});
2134            `;return`
2135              var offset = 0;
2136              var k = 0;
2137              ${a}
2138              value = x[offset];
2139          `},tl=(e,t,r)=>{switch(r.mode){case 0:return Xu(e,t,r.pads.length);case 1:return Yu(e,t,r.pads.length);case 2:return Ju(e,t,r.pads.length);case 3:return el(e,t,r.pads.length);default:throw new Error("Invalid mode")}},rl=(e,t)=>{let r=C.padShape(e[0].dims.slice(),t.pads),a=e[0].dims,n=C.size(r),i=[{type:12,data:n},{type:6,data:t.pads}],s=e.length>=3&&e[2].data;t.mode===0&&i.push({type:s?e[2].dataType:1,data:t.value}),i.push(...Z(e[0].dims,r));let u=["rank"],d=l=>{let c=G("output",e[0].dataType,r.length),f=R("x",e[0].dataType,a.length),m=f.type.value,g=tl(c,a.length,t),_=[{name:"output_size",type:"u32"},{name:"pads",type:"i32",length:t.pads.length}];return t.mode===0&&_.push({name:"constant_value",type:s?m:"f32"}),`
2140            ${l.registerUniforms(_).declareVariables(f,c)}
2141            ${l.mainStart()}
2142            ${l.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2143
2144            let indices = ${c.offsetToIndices("global_idx")};
2145
2146            var value = ${m}(0);
2147            ${g}
2148            output[global_idx] = value;
2149        }`};return{name:"Pad",shaderCache:{hint:`${t.mode}${s}`,inputDependencies:u},getRunData:()=>({outputs:[{dims:r,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(C.size(r)/64)},programUniforms:i}),getShaderSource:d}},il=(e,t)=>{if(e.length>1){let r=e[1].getBigInt64Array(),a=e.length>=3&&e[2].data?e[2].dataType===10?e[2].getUint16Array()[0]:e[2].getFloat32Array()[0]:0,n=e[0].dims.length,i=new Int32Array(2*n).fill(0);if(e.length>=4){let u=e[3].getBigInt64Array();for(let d=0;d<u.length;d++)i[Number(u[d])]=Number(r[d]),i[Number(u[d])+n]=Number(r[d+u.length])}else r.forEach((u,d)=>i[Number(d)]=Number(u));let s=[];return i.forEach(u=>s.push(u)),{mode:t.mode,value:a,pads:s}}else return t},jc=(e,t)=>{Qu(e.inputs);let r=il(e.inputs,t);e.compute(rl(e.inputs,r),{inputs:[0]})}}),Qt,ji,Hi,Gi,Fi,al,nl,Ki,Zi,Hc,Gc,Qi,Fc,Kc,Xi,Zc,Qc,Xc,Yc,rg=U(()=>{Ke(),J(),re(),ie(),Qt=e=>{if(ye.webgpu.validateInputContent&&(!e||e.length!==1))throw new Error("Pool ops requires 1 input.")},ji=(e,t,r)=>{let a=t.format==="NHWC",n=e.dims.slice();a&&n.splice(1,0,n.pop());let i=Object.hasOwnProperty.call(t,"dilations"),s=t.kernelShape.slice(),u=t.strides.slice(),d=i?t.dilations.slice():[],l=t.pads.slice();Mr.adjustPoolAttributes(r,n,s,u,d,l);let c=Mr.computePoolOutputShape(r,n,u,d,s,l,t.autoPad),f=Object.assign({},t);i?Object.assign(f,{kernelShape:s,strides:u,pads:l,dilations:d,cacheKey:t.cacheKey}):Object.assign(f,{kernelShape:s,strides:u,pads:l,cacheKey:t.cacheKey});let m=c.slice();return m.push(m.splice(1,1)[0]),[f,a?m:c]},Hi=(e,t)=>{let r=t.format==="NHWC",a=C.size(e),n=C.size(t.kernelShape),i=[{type:12,data:a},{type:12,data:n}],s=[{name:"outputSize",type:"u32"},{name:"kernelSize",type:"u32"}];if(t.kernelShape.length<=2){let u=t.kernelShape[t.kernelShape.length-1],d=t.strides[t.strides.length-1],l=t.pads[t.pads.length/2-1],c=t.pads[t.pads.length-1],f=!!(l+c);i.push({type:12,data:u},{type:12,data:d}
vendor: 4,358 bytes, lines 2149-2229
2149,{type:12,data:l},{type:12,data:c}),s.push({name:"kw",type:"u32"},{name:"sw",type:"u32"},{name:"pwStart",type:"u32"},{name:"pwEnd",type:"u32"});let m=!1;if(t.kernelShape.length===2){let g=t.kernelShape[t.kernelShape.length-2],_=t.strides[t.strides.length-2],b=t.pads[t.pads.length/2-2],x=t.pads[t.pads.length-2];m=!!(b+x),i.push({type:12,data:g},{type:12,data:_},{type:12,data:b},{type:12,data:x}),s.push({name:"kh",type:"u32"},{name:"sh",type:"u32"},{name:"phStart",type:"u32"},{name:"phEnd",type:"u32"})}return[i,s,!0,f,m]}else{if(r)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let u=C.computeStrides(t.kernelShape);i.push({type:12,data:u},{type:12,data:t.pads},{type:12,data:t.strides}),s.push({name:"kernelStrides",type:"u32",length:u.length},{name:"pads",type:"u32",length:t.pads.length},{name:"strides",type:"u32",length:t.strides.length});let d=t.pads.reduce((l,c)=>l+c);return[i,s,!!d,!1,!1]}},Gi=(e,t,r,a,n,i,s,u,d,l,c,f)=>{let m=n.format==="NHWC",g=t.type.value,_=G("output",t.type.tensor,a);if(n.kernelShape.length<=2){let b="",x="",w="",$=r-(m?2:1);if(c?b=`
2150                for (var i: u32 = 0u; i < uniforms.kw; i++) {
2151                  xIndices[${$}] = indices[${$}] * uniforms.sw - uniforms.pwStart + i;
2152                  if (xIndices[${$}] < 0 || xIndices[${$}]
2153                      >= uniforms.x_shape[${$}]) {
2154                    pad++;
2155                    continue;
2156                  }
2157                  let x_val = x[${t.indicesToOffset("xIndices")}];
2158                  ${i}
2159                }`:b=`
2160                for (var i: u32 = 0u; i < uniforms.kw; i++) {
2161                  xIndices[${$}] = indices[${$}] * uniforms.sw - uniforms.pwStart + i;
2162                  let x_val = x[${t.indicesToOffset("xIndices")}];
2163                  ${i}
2164                }`,n.kernelShape.length===2){let k=r-(m?3:2);f?x=`
2165                for (var j: u32 = 0u; j < uniforms.kh; j++) {
2166                  xIndices[${k}] = indices[${k}] * uniforms.sh - uniforms.phStart + j;
2167                  if (xIndices[${k}] < 0 || xIndices[${k}] >= uniforms.x_shape[${k}]) {
2168                    pad += i32(uniforms.kw);
2169                    continue;
2170                  }
2171              `:x=`
2172                for (var j: u32 = 0u; j < uniforms.kh; j++) {
2173                  xIndices[${k}] = indices[${k}] * uniforms.sh - uniforms.phStart + j;
2174                `,w=`
2175              }
2176            `}return`
2177            ${e.registerUniforms(d).declareVariables(t,_)}
2178
2179            ${e.mainStart()}
2180              ${e.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2181
2182              let indices = ${_.offsetToIndices("global_idx")};
2183              var xIndices = ${_.offsetToIndices("global_idx")};
2184
2185              var value = ${g}(${u});
2186              var pad = 0;
2187              ${x}
2188              ${b}
2189              ${w}
2190              ${s}
2191
2192              output[global_idx] = value;
2193            }`}else{if(m)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let b=n.kernelShape.length,x=n.pads.length,w="";return l?w=`
2194                if (xIndices[j] >= uniforms.x_shape[j]) {
2195                  pad++;
2196                  isPad = true;
2197                  break;
2198                }
2199              }
2200              if (!isPad) {
2201                let x_val = x[${t.indicesToOffset("xIndices")}];
2202                ${i}
2203              }`:w=`
2204              }
2205              let x_val = x[${t.indicesToOffset("xIndices")}];
2206              ${i}
2207            `,`
2208            ${e.registerUniforms(d).declareVariables(t,_)}
2209
2210            ${e.mainStart()}
2211              ${e.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2212              let indices = ${_.offsetToIndices("global_idx")};
2213              var xIndices = ${_.offsetToIndices("global_idx")};
2214
2215              var offsets: array<u32, ${b}>;
2216
2217              var value = ${g}(${u});
2218              var pad = 0;
2219              var isPad = false;
2220
2221              for (var i: u32 = 0u; i < uniforms.kernelSize; i++) {
2222                var offset = i;
2223                for (var j = 0u; j < ${b-1}u; j++) {
2224                  offsets[j] = offset / ${F("uniforms.kernelStrides","j",b)};
2225                  offset -= offsets[j] * ${F("uniforms.kernelStrides","j",b)};
2226                }
2227                offsets[${b-1}] = offset;
2228
2229                isPad = false;
2230                for (var j = ${r-b}u; j < ${r}u; j++) {
2231                  xIndices[j] = indices[j] * ${F("uniforms.strides",`j - ${r-b}u`,b)}
2232                    + offsets[j - ${r-b}u] - ${F("uniforms.pads","j - 2u",x)};
2233                  ${w}
2234              }
2235              ${s}
2236
2237              output[global_idx] = value;
2238            }`}},Fi=e=>`${e.format};${e.ceilMode};${e.autoPad};${e.kernelShape.length}`,al=e=>`${Fi(e)};${e.countIncludePad}`,nl=e=>`${Fi(e)};${e.storageOrder};${e.dilations}`,Ki=e=>({format:e.format,autoPad:["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][e.auto_pad],ceilMode:e.ceil_mode,kernelShape:e.kernel_shape,strides:e.strides,pads:e.pads}),Zi=(e,t,r,a)=>{let[n,i]=ji(t,a,r),s=R("x",t.dataType,t.dims.length),u=s.type.value,d="value += x_val;",l="";n.countIncludePad?l+=`value /= ${u}(uniforms.kernelSize);`:l+=`value /= ${u}(i32(uniforms.kernelSize) - pad);`;let[c,f,m,g,_]=Hi(i,n);c.push(...Z(t.dims,i));let b=["rank"];return{name:e,shaderCache:{hint:`${a.cacheKey};${m};${g};${_}`,inputDependencies:b},getRunData:()=>({outputs:[{dims:i,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(C.size(i)/64)},programUniforms:c}),getShaderSource:x=>Gi(x,s,t.dims.length,i.length,n,d,l,0,f,m,g,_)}},Hc=e=>{let t=e.count_include_pad!==0,r=Ki(e);if(r.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for AveragePool");let a={countIncludePad:t,...r,cacheKey:""};return{...a,cacheKey:al(a)}},Gc=(e,t)=>{Qt(e.inputs),e.compute(Zi("AveragePool",e.inputs[0],!1,t))},Qi={autoPad:"",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[]},Fc=e=>{let t=e.format;return{format:t,...Qi,cacheKey:t}},Kc=(e,t)=>{Qt(e.inputs),e.compute(Zi("GlobalAveragePool",e.inputs[0],!0,t))},Xi=(e,t,r,a)=>{let[n,i]=ji(t,a,r),s=`
2239      value = max(x_val, value);
2240    `,u="",d=R("x",t.dataType,t.dims.length),l=["rank"],[c,f,m,g,_]=Hi(i,n);return c.push(...Z(t.dims,i)),{name:e,shaderCache:{hint:`${a.cacheKey};${m};${g};${_}`,inputDependencies:l},getRunData:()=>({outputs:[{dims:i,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(C.size(i)/64)},programUniforms:c}),getShaderSource:b=>Gi(b,d,t.dims.length,i.length,n,s,u,t.dataType===10?-65504:-1e5,f,m,g,_)}},Zc=(e,t)=>{Qt(e.inputs),e.compute(Xi("MaxPool",e.inputs[0],!1,t))},Qc=e=>{let t=e.storage_order,r=e.dilations,a=Ki(e);if(t!==0)throw new Error("column major storage order is not yet supported for MaxPool");if(a.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for MaxPool");let n={storageOrder:t,dilations:r,...a,cacheKey:""};return{...n,cacheKey:nl(n)}},Xc=e=>{let t=e.format;return{format:t,...Qi,cacheKey:t}},Yc=(e,t)=>{Qt(e.inputs),e.compute(Xi("GlobalMaxPool",e.inputs[0],!0,t))}}),sl,ol,Jc,ef,ig=U(()=>{J(),re(),we(),ie(),sl=(e,t)=>{if(e.length<2||e.length>3)throw new Error("DequantizeLinear requires 2 or 3 inputs.");if(e.length===3&&e[1].dims===e[2].dims)throw new Error("x-scale and x-zero-point must have the same shape.");if(e.length===3&&e[0].dataType!==e[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(e[0].dataType===6&&e.length>2)throw new Error("In the case of dequantizing int32 there is no zero point.");if(e[1].dims.length!==0&&e[1].dims.length!==1&&e[1].dims.length!==e[0].dims.length)throw new Error("scale input must be a scalar, a 1D tensor, or have the same rank as the input tensor.");if(e.length>2){if(e[0].dataType!==e[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(e[1].dims.length!==e[2].dims.length)throw new Error("scale and zero-point inputs must have the same rank.");if(!e[1].dims.map((r,a)=>r===e[2].dims[a]).reduce((r,a)=>r&&a,!0))throw new Error("scale and zero-point inputs must have the same shape.")}if(t.blockSize>0){if(e[1].dims.length===0||e[1].dims.length===1&&e[1].dims[0]===1)throw new Error("blockSize must be set only for block quantization.");if(!e[1].dims.map((n,i)=>i===t.axis||n===e[0].dims[i]).reduce((n,i)=>n&&i,!0))throw new Error("For block qunatization, scale input shape to match the input shape except for the axis");if(e[1].dims.length!==e[0].dims.length)throw new Error("For block qunatization the scale input rank must be the same as the x rank.");let r=e[0].dims[t.axis],a=e[1].dims[t.axis];if(t.blockSize<Math.ceil(r/a)||t.blockSize>Math.ceil(r/(a-1)-1))throw new Error("blockSize must be with in the range [ceil(dI / Si), ceil(dI / (Si - 1) - 1)].")}},ol=(e,t)=>{let r=C.normalizeAxis(t.axis,e[0].dims.length),a=e[0].dataType,n=a===3,i=e[0].dims,s=e[1].dataType,u=C.size(i),d=a===3||a===2,l=d?[Math.ceil(C.size(e[0].dims)/4)]:e[0].dims,c=e[1].dims,f=e.length>2?e[2]:void 0,m=f?d?[Math.ceil(C.size(f.dims)/4)]:f.dims:void 0,g=c.length===0||c.length===1&&c[0]===1,_=g===!1&&c.length===1,b=$e(u),x=g&&(!d||b===4),w=x?b:1,$=x&&!d?b:1,k=R("input",d?12:a,l.length,$),S=R("scale",s,c.length),T=f?R("zero_point",d?12:a,m.length):void 0,E=G("output",s,i.length,w),z=[k,S];T&&z.push(T);let A=[l,c];f&&A.push(m);let O=[{type:12,data:u/w},{type:12,data:r},{type:12,data:t.blockSize},...Z(...A,i)],q=X=>{let H=[{name:"output_size",type:"u32"},{name:"axis",type:"u32"},{name:"block_size",type:"u32"}];return`
2241      ${X.registerUniforms(H).declareVariables(...z,E)}
2242      ${X.mainStart()}
2243          ${X.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2244          let output_indices = ${E.offsetToIndices("global_idx")};
2245
2246          // Set input x
2247          ${d?`
2248            let input = ${k.getByOffset("global_idx / 4")};
2249            let x_vec = ${n?"unpack4xI8(input)":"unpack4xU8(input)"};
2250            let x_value = ${w===1?"x_vec[global_idx % 4]":"x_vec"};`:`let x_value = ${k.getByOffset("global_idx")};`};
2251
2252          // Set scale input
2253          ${g?`let scale_value= ${S.getByOffset("0")}`:_?`
2254            let scale_index = ${E.indicesGet("output_indices","uniforms.axis")};
2255            let scale_value= ${S.getByOffset("scale_index")};`:`
2256            var scale_indices: ${S.type.indices} = output_indices;
2257            let index = ${S.indicesGet("scale_indices","uniforms.axis")} / uniforms.block_size;
2258            ${S.indicesSet("scale_indices","uniforms.axis","index")};
2259            let scale_value= ${S.getByIndices("scale_indices")};`};
2260
2261          // Set zero-point input
2262          ${T?g?d?`
2263                let zero_point_input = ${T.getByOffset("0")};
2264                let zero_point_vec =  ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2265                let zero_point_value= zero_point_vec[0]`:`let zero_point_value = ${T.getByOffset("0")}`:_?d?`
2266                let zero_point_index = ${E.indicesGet("output_indices","uniforms.axis")};
2267                let zero_point_input = ${T.getByOffset("zero_point_index / 4")};
2268                let zero_point_vec =  ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2269                let zero_point_value = zero_point_vec[zero_point_index % 4]`:`
2270                let zero_point_index = ${E.indicesGet("output_indices","uniforms.axis")};
2271                let zero_point_value = ${T.getByOffset("zero_point_index")};`:d?`
2272                let zero_point_offset = ${S.indicesToOffset("scale_indices")};
2273                let zero_point_input = ${T.getByOffset("zero_point_offset / 4")};
2274                let zero_point_vec = ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2275                let zero_point_value = zero_point_vec[zero_point_offset % 4];`:`let zero_point_value = ${T.getByIndices("scale_indices")};`:`let zero_point_value = ${d?n?"i32":"u32":k.type.value}(0);`};
2276      // Compute and write output
2277      ${E.setByOffset("global_idx",`${E.type.value}(x_value - zero_point_value) * scale_value`)};
2278      }`};return{name:"DequantizeLinear",shaderCache:{hint:t.cacheKey,inputDependencies:T?["rank","rank","rank"]:["rank","rank"]},getShaderSource:q,getRunData:()=>({outputs:[{dims:i,dataType:s}],dispatchGroup:{x:Math.ceil(u/w/64),y:1,z:1},programUniforms:O})}},Jc=(e,t)=>
vendor: 4,345 bytes, lines 2278-2330
2278{sl(e.inputs,t),e.compute(ol(e.inputs,t))},ef=e=>ce({axis:e.axis,blockSize:e.blockSize})}),ul,ll,tf,ag=U(()=>{Ke(),J(),ie(),ul=(e,t,r)=>{let a=e===t,n=e<t&&r<0,i=e>t&&r>0;if(a||n||i)throw new Error("Range these inputs' contents are invalid.")},ll=(e,t,r,a)=>{let n=Math.abs(Math.ceil((t-e)/r)),i=[n],s=n,u=[{type:12,data:s},{type:a,data:e},{type:a,data:r},...Z(i)],d=l=>{let c=G("output",a,i.length),f=c.type.value,m=[{name:"outputSize",type:"u32"},{name:"start",type:f},{name:"delta",type:f}];return`
2279        ${l.registerUniforms(m).declareVariables(c)}
2280        ${l.mainStart()}
2281        ${l.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2282        output[global_idx] = uniforms.start + ${f}(global_idx) * uniforms.delta;
2283      }`};return{name:"Range",shaderCache:{hint:`${a}`},getShaderSource:d,getRunData:()=>({outputs:[{dims:i,dataType:a}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:u})}},tf=e=>{let t=0,r=0,a=0;e.inputs[0].dataType===6?(t=e.inputs[0].getInt32Array()[0],r=e.inputs[1].getInt32Array()[0],a=e.inputs[2].getInt32Array()[0]):e.inputs[0].dataType===1&&(t=e.inputs[0].getFloat32Array()[0],r=e.inputs[1].getFloat32Array()[0],a=e.inputs[2].getFloat32Array()[0]),ye.webgpu.validateInputContent&&ul(t,r,a),e.compute(ll(t,r,a,e.inputs[0].dataType),{inputs:[]})}}),dl,Yi,Ji,pl,rf,af,ng=U(()=>{J(),re(),we(),ie(),dl=(e,t,r,a)=>{if(e!=="none"&&a!=="i32"&&a!=="u32"&&a!=="f32")throw new Error(`Input ${a} is not supported with reduction ${e}.`);let n=`{
2284                var oldValue = 0;
2285                loop {
2286                  let newValueF32 =`,i=`;
2287                  let newValue = bitcast<i32>(newValueF32);
2288                  let res = atomicCompareExchangeWeak(&${t}, oldValue, newValue);
2289                  if res.exchanged {
2290                    break;
2291                  }
2292                  oldValue = res.old_value;
2293                }
2294              }`;switch(e){case"none":return`${t}=${r};`;case"add":return a==="i32"||a==="u32"?`atomicAdd(&${t}, bitcast<${a}>(${r}));`:`
2295              ${n}bitcast<${a}>(oldValue) + (${r})${i}`;case"max":return a==="i32"||a==="u32"?`atomicMax(&${t}, bitcast<${a}>(${r}));`:`
2296                ${n}max(bitcast<f32>(oldValue), (${r}))${i}`;case"min":return a==="i32"||a==="u32"?`atomicMin(&${t}, bitcast<${a}>(${r}));`:`${n}min(bitcast<${a}>(oldValue), (${r}))${i}`;case"mul":return`${n}(bitcast<${a}>(oldValue) * (${r}))${i}`;default:throw new Error(`Reduction ${e} is not supported.`)}},Yi=(e,t)=>`${e===1?`
2297    let element_count_dim = uniforms.output_strides;
2298    let dim_value = uniforms.output_shape;`:`
2299    let element_count_dim = uniforms.output_strides[${t?"i - indices_start":"i"}];
2300    let dim_value = uniforms.output_shape[${t?"i - indices_start":"i"} + uniforms.last_index_dimension];`}
2301    
2302    if (index >= 0) {
2303      if (index >= i32(dim_value)) {
2304        index = i32(dim_value - 1);
2305      }
2306    } else {
2307      if (index < -i32(dim_value)) {
2308        index = 0;
2309      } else {
2310        index += i32(dim_value);
2311      }
2312    }
2313    data_offset += u32((u32(index) * element_count_dim));`,Ji=(e,t,r)=>`for (var i = 0u; i < uniforms.num_updates_elements; i++) {
2314        let value = updates[uniforms.num_updates_elements * ${r?"global_idx":"idx"} + i];
2315        ${dl(e.reduction,"output[data_offset + i]","value",t)}
2316      }`,pl=(e,t)=>{let r=e[0].dims,a=e[1].dims,n=r,i=1,s=Math.ceil(C.size(a)/i),u=a[a.length-1],d=C.sizeFromDimension(r,u),l=C.sizeFromDimension(a,0)/u,c=[{type:12,data:s},{type:12,data:u},{type:12,data:d},...Z(e[1].dims,e[2].dims,n)],f=m=>{let g=R("indices",e[1].dataType,e[1].dims.length),_=R("updates",e[2].dataType,e[2].dims.length,i),b=t.reduction!=="none"&&t.reduction!==""?Ad("output",e[0].dataType,n.length):G("output",e[0].dataType,n.length,i);return`
2317      ${m.registerUniform("output_size","u32").registerUniform("last_index_dimension","u32").registerUniform("num_updates_elements","u32").declareVariables(g,_,b)}
2318      ${m.mainStart()}
2319        ${m.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2320  var hasDuplicates = false;
2321  if (${t.reduction==="none"}) {
2322    for (var i = 0; i < ${l}; i = i + 1) {
2323      for (var j = i + 1; j < ${l}; j = j + 1) {
2324        var index_i = i32(indices[i].x);
2325        var index_j = i32(indices[j].x);
2326        if (index_i == index_j) {
2327          hasDuplicates = true;
2328          break;
2329        }
2330      }
2331      if (hasDuplicates) {
2332        break;
2333      }
2334    }
2335  }
2336
2337  if (${t.reduction==="none"} && hasDuplicates) {
2338    if (global_idx != 0u) {
2339      return;
2340    }
2341    // Process each index-update pair individually when duplicates exist
2342    for (var idx = 0u; idx < ${l}u; idx++) {
2343      var data_offset = 0u;
2344      for (var i = 0u; i < uniforms.last_index_dimension; i++) {
2345        var index = i32(indices[idx * uniforms.last_index_dimension + i].x);
2346        ${Yi(r.length,!1)}
2347      }
2348      ${Ji(t,b.type.value,!1)}
2349    }
2350    return;
2351  }
2352
2353  var data_offset = 0u;
2354  var indices_start = uniforms.last_index_dimension * global_idx;
2355  var indices_end = indices_start + uniforms.last_index_dimension;
2356  for (var i = indices_start; i < indices_end; i++) {
2357    var index = i32(indices[i].x);
2358    ${Yi(r.length,!0)}
2359  }
2360  ${Ji(t,b.type.value,!0)}
2361  }`};return{name:"ScatterND",shaderCache:{hint:`${t.cacheKey}_${t.reduction}`,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:n,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:c}),getShaderSource:f}},rf=e=>ce({reduction:e.reduction}),af=(e,t)=>{e.compute(pl(e.inputs,t),{inputs:[e.inputs[1],e.inputs[2]],outputs:[]})}}),cl,fl,hl,ea,ml,gl,_l,yl,bl,$l,wl,vl,ta,xl,Sl,kl,Tl,Il,nf,sf,sg=U(()=>{J(),re(),we(),ie(),cl=(e,t)=>{if(e.every(r=>r>0||(()=>{throw new Error("Resize requires scales input values to be positive")})),e.length>0){if(t.mode==="linear"){if(!(e.length===2||e.length===3||e.length===4&&e[0]===1&&e[1]===1||e.length===4&&e[0]===1&&e[3]===1||e.length===5&&e[0]===1&&e[1]===1))throw new Error(`For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and
2362            one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1`)}else if(t.mode==="cubic"&&!(e.length===2||e.length===4&&e[0]===1&&e[1]===1||e.length===4&&e[0]===1&&e[3]===1))throw new Error("Resize requires scales input size to be 2 or 4 for cubic mode")}},fl=(e,t,r)=>{t.every(n=>n>=0&&n<r||(()=>{throw new Error("Resize requires axes input values to be positive and less than rank")}));let a=new Array(r).fill(1);return t.forEach((n,i)=>a[n]=e[i]),a},hl=(e,t,r,a,n,i)=>{let[s,u,d]=r>10?[1,2,3]:[-1,e.length>1?1:-1,-1],l=e[0].dims.length;if(s>0&&e.length>s&&e[s].dims.length>0)e[s].getFloat32Array().forEach(c=>i.push(c));else if(t.coordinateTransformMode==="tf_crop_and_resize")throw new Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize");if(u>0&&e.length>u&&e[u].dims.length===1&&e[u].dims[0]>0){if(e[u].getFloat32Array().forEach(c=>a.push(c)),a.length!==0&&a.length!==l&&r>=18&&a.length!==t.axes.length)throw new Error("Resize requires scales input size to be same as input rank or axes size for opset 18 and up");cl(a,t),t.axes.length>0&&fl(a,t.axes,l).forEach((c,f)=>a[f]=c)}if(d>0&&e.length>d&&e[d].dims.length===1&&e[d].dims[0]>0&&(e[d].getBigInt64Array().forEach(c=>n.push(Number(c))),n.length!==0&&n.length!==l&&r>=18&&n.length!==t.axes.length))throw new Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up");if(t.axes.length>0){if(a.length!==0&&a.length!==t.axes.length)throw new Error('Resize requires "scales" input size to be of axes rank when axes attributes is specified');if(n.length!==0&&n.length!==t.axes.length)throw new Error('Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified')}if(typeof a<"u"&&typeof n<"u"&&a.length>0&&n.length>l)throw new Error("Resize requires only of scales or sizes to be specified")},ea=(e,t,r,a)=>`
2363  // The whole part and the fractional part are calculated separately due to inaccuracy of floating
2364  // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an
2365  // offset-by-one error later in floor().
2366  let big = (${e}) * (${t});
2367  let whole = ${a}(big / (${r}));
2368  let fract = ${a}(big % (${r})) / ${a}(${r});
2369  return whole + fract;
2370`,ml=(e,t)=>`fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32,
2371     lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${t} { `+(()=>{switch(e){case"asymmetric":return`
2372          if (xScale < 1.0 || floor(xScale) != xScale) {
2373            return ${t}(xResized) / ${t}(xScale);
2374          } else {
2375            ${ea("xResized","lengthOriginal","lengthResized",t)}
2376          }
2377        `;case"pytorch_half_pixel":return`if (lengthResized > 1) {
2378                    return (${t}(xResized) + 0.5) / ${t}(xScale) - 0.5;
2379                  } else {
2380                    return 0.0;
2381                  }`;case"tf_half_pixel_for_nn":return`return (${t}(xResized) + 0.5) / ${t}(xScale);`;case"align_corners":return`if (lengthResized == 1) {
2382                    return 0.0;
2383                  } else {
2384                    ${ea("xResized","lengthOriginal - 1","lengthResized - 1",t)}
2385                  }`;case"tf_crop_and_resize":return`if (lengthResized > 1) {
2386                    return ${t}(roiStart) * ${t}(lengthOriginal - 1) +
2387                        (${t}(xResized) * ${t}(roiEnd - roiStart) * ${t}(lengthOriginal - 1)) /
2388                        ${t}(lengthResized - 1);
2389                  } else {
2390                    return 0.5 * ${t}(roiStart + roiEnd) * ${t}(lengthOriginal - 1);
2391                  }`;case"half_pixel_symmetric":return`const outputWidth = ${t}xScale * ${t}(lengthResized);
2392                  const adjustment = ${t}(lengthResized) / outputWidth;
2393                  const center = ${t}(lengthOriginal) / 2;
2394                  const offset = center * (1 - adjustment);
2395                  return offset + ((${t}(xResized) + 0.5) / ${t}(xScale)) - 0.5;`;case"half_pixel":return`return ((${t}(xResized) + 0.5) / ${t}(xScale)) - 0.5;`;default:throw new Error(`Coordinate transform mode ${e} is not supported`)}})()+"}",gl=(e,t,r)=>`fn getNearestPixelFromOriginal(xOriginal: ${r}, isDownSample: bool) -> ${r} {`+(()=>{switch(e){case"round_prefer_ceil":return"if (fract(xOriginal) == 0.5) {             return ceil(xOriginal);           } else {             return round(xOriginal);           }";case"floor":return"return floor(xOriginal);";case"ceil":return"return ceil(xOriginal);";case"round_prefer_floor":return"if (fract(xOriginal) == 0.5) {                     return floor(xOriginal);                   } else {                     return round(xOriginal);                   }";case"simple":default:if(t<11)return"if (isDownSample)                     {                       return ceil(xOriginal);                     } else {                       return xOriginal;                     }";throw new Error(`Nearest mode ${e} is not supported`)}})()+"}",_l=(e,t,r)=>{let a=new Array(r).fill(0).concat(new Array(r).fill(1)),n=e.length===0?a:e.slice();return t.length>0?(t.forEach((i,s)=>{a[i]=n[s],a[s+r]=n[t.length+s]}),a):n},yl=(e,t,r,a)=>{let n=[];if(r.length>0)if(a.length>0){if(e.forEach(i=>
vendor: 4,611 bytes, lines 2395-2469
2395n.push(i)),Math.max(...a)>e.length)throw new Error("axes is out of bound");a.forEach((i,s)=>n[i]=r[s])}else r.forEach(i=>n.push(i));else{if(t.length===0)throw new Error("Resize requires either scales or sizes.");n=e.map((i,s)=>Math.round(i*t[s]))}return n},bl=(e,t,r)=>{let a=(()=>{switch(r.keepAspectRatioPolicy){case"not_larger":return r.axes.length>0?Math.min(...r.axes.map(i=>t[i]),Number.MAX_VALUE):Math.min(...t,Number.MAX_VALUE);case"not_smaller":return r.axes.length>0?Math.max(...r.axes.map(i=>t[i]),Number.MIN_VALUE):Math.max(...t,Number.MIN_VALUE);default:throw new Error(`Keep aspect ratio policy ${r.keepAspectRatioPolicy} is not supported`)}})();t.fill(1,0,t.length);let n=e.slice();return r.axes.length>0?(r.axes.forEach(i=>t[i]=a),r.axes.forEach(i=>n[i]=Math.round(e[i]*t[i]))):(t.fill(a,0,t.length),n.forEach((i,s)=>n[s]=Math.round(i*t[s]))),n},$l=(e,t,r,a,n)=>`
2396    fn calculateOriginalIndicesFromOutputIndices(output_indices: ${e.type.indices}) -> array<${e.type.value}, ${r.length}> {
2397      var original_indices: array<${e.type.value}, ${r.length}>;
2398      for (var i:u32 = 0; i < ${r.length}; i++) {
2399        var output_index = ${e.indicesGet("output_indices","i")};
2400        var scale = ${F("uniforms.scales","i",a)};
2401        var roi_low = ${F("uniforms.roi","i",n)};
2402        var roi_hi = ${F("uniforms.roi",`i + ${t.length}`,n)};
2403        if (scale == 1.0) {
2404          original_indices[i] = ${e.type.value}(output_index);
2405        } else {
2406          var input_shape_i = ${F("uniforms.input_shape","i",t.length)};
2407          var output_shape_i = ${F("uniforms.output_shape","i",r.length)};
2408          original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,
2409                                                                           input_shape_i, roi_low, roi_hi);
2410        }
2411      }
2412      return original_indices;
2413    }`,wl=(e,t,r,a,n,i,s)=>`
2414    fn calculateInputIndicesFromOutputIndices(output_indices: ${t.type.indices}) -> ${e.type.indices} {
2415      var input_indices: ${e.type.indices};
2416      for (var i:u32 = 0; i < ${a.length}; i++) {
2417        var output_index = ${t.indicesGet("output_indices","i")};
2418        var input_index: u32;
2419        var scale = ${F("uniforms.scales","i",n)};
2420        if (scale == 1.0) {
2421          input_index = output_index;
2422        } else {
2423          var roi_low = ${F("uniforms.roi","i",i)};
2424          var roi_hi = ${F("uniforms.roi",`i + ${r.length}`,i)};
2425          var input_shape_i = ${F("uniforms.input_shape","i",r.length)};
2426          var output_shape_i = ${F("uniforms.output_shape","i",a.length)};
2427          var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,
2428                                                                        input_shape_i, roi_low, roi_hi);
2429          if (!${s} || (original_idx >= 0 && original_idx < ${t.type.value}(input_shape_i))) {
2430            if (original_idx < 0) {
2431              input_index = 0;
2432            } else if (original_idx > ${t.type.value}(input_shape_i - 1)) {
2433              input_index = input_shape_i - 1;
2434            } else {
2435              input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1));
2436            }
2437          } else {
2438            input_index = u32(original_idx);
2439          }
2440        }
2441        ${e.indicesSet("input_indices","i","input_index")}
2442      }
2443      return input_indices;
2444    }`,vl=(e,t)=>`
2445    fn checkInputIndices(input_indices: ${e.type.indices}) -> bool {
2446      for (var i:u32 = 0; i < ${t.length}; i++) {
2447        var input_index = ${e.indicesGet("input_indices","i")};
2448        if (input_index < 0 || input_index >= ${F("uniforms.input_shape","i",t.length)}) {
2449          return false;
2450        }
2451      }
2452      return true;
2453    }`,ta=(e,t,r,a)=>e.rank>a?`
2454    ${e.indicesSet("input_indices",t,"channel")};
2455    ${e.indicesSet("input_indices",r,"batch")};
2456`:"",xl=(e,t,r,a,n)=>{let[i,s,u,d]=r.length===2?[-1,0,1,-1]:[0,2,3,1],l=e.type.value;return`
2457    fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${l} {
2458      var input_indices: ${e.type.indices};
2459      ${e.indicesSet("input_indices",s,`max(0, min(row, ${r[s]} - 1))`)};
2460      ${e.indicesSet("input_indices",u,`max(0, min(col, ${r[u]} - 1))`)};
2461      ${ta(e,d,i,2)}
2462      return ${e.getByIndices("input_indices")};
2463    }
2464
2465    fn bilinearInterpolation(output_indices: ${t.type.indices}) -> ${l} {
2466      var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);
2467      var row:${l} = originalIndices[${s}];
2468      var col:${l} = originalIndices[${u}];
2469      ${a?`if (row < 0 || row > (${r[s]}
vendor: 8,925 bytes, lines 2469-2631
2469 - 1) || col < 0 || col > (${r[u]} - 1)) {
2470        return ${n};
2471      }`:""};
2472      row = max(0, min(row, ${r[s]} - 1));
2473      col = max(0, min(col, ${r[u]} - 1));
2474      var row1: u32 = u32(row);
2475      var col1: u32 = u32(col);
2476      var row2: u32 = u32(row + 1);
2477      var col2: u32 = u32(col + 1);
2478      var channel: u32 = ${r.length>2?`u32(originalIndices[${d}])`:"0"};
2479      var batch: u32 =  ${r.length>2?`u32(originalIndices[${i}])`:"0"};
2480      var x11: ${l} = getInputValue(batch, channel, row1, col1);
2481      var x12: ${l} = getInputValue(batch, channel, row1, col2);
2482      var x21: ${l} = getInputValue(batch, channel, row2, col1);
2483      var x22: ${l} = getInputValue(batch, channel, row2, col2);
2484      var dx1: ${l} = abs(row - ${l}(row1));
2485      var dx2: ${l} = abs(${l}(row2) - row);
2486      var dy1: ${l} = abs(col - ${l}(col1));
2487      var dy2: ${l} = abs(${l}(col2) - col);
2488      if (row1 == row2) {
2489        dx1 = 0.5;
2490        dx2 = 0.5;
2491      }
2492      if (col1 == col2) {
2493        dy1 = 0.5;
2494        dy2 = 0.5;
2495      }
2496      return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1);
2497    }`},Sl=(e,t,r,a,n,i,s,u,d,l)=>{let c=r.length===2,[f,m]=c?[0,1]:[2,3],g=e.type.value,_=b=>{let x=b===f?"row":"col";return`
2498      fn ${x}CubicInterpolation(input_indices: ${e.type.indices}, output_indices: ${t.type.indices}) -> ${g} {
2499        var output_index = ${t.indicesGet("output_indices",b)};
2500        var originalIdx: ${g} = getOriginalCoordinateFromResizedCoordinate(output_index, ${n[b]},
2501        ${a[b]}, ${r[b]}, ${i[b]}, ${i[b]} + ${r.length});
2502        var fractOriginalIdx: ${g} = originalIdx - floor(originalIdx);
2503        var coefs = getCubicInterpolationCoefs(fractOriginalIdx);
2504
2505        if (${u} && (originalIdx < 0 || originalIdx > (${r[b]} - 1))) {
2506          return ${d};
2507        }
2508        var data: array<${g}, 4> = array<${g}, 4>(0.0, 0.0, 0.0, 0.0);
2509        for (var i: i32 = -1; i < 3; i++) {
2510          var ${x}: ${g} = originalIdx + ${g}(i);
2511          if (${x} < 0 || ${x} >= ${r[b]}) {
2512            ${l?`coefs[i + 1] = 0.0;
2513                        continue;`:u?`return ${d};`:`${x} = max(0, min(${x}, ${r[b]} - 1));`};
2514          }
2515        var input_indices_copy: ${e.type.indices} = input_indices;
2516          ${e.indicesSet("input_indices_copy",b,`u32(${x})`)};
2517          data[i + 1] = ${b===f?e.getByIndices("input_indices_copy"):"rowCubicInterpolation(input_indices_copy, output_indices)"};
2518        }
2519        return cubicInterpolation1D(data, coefs);
2520      }`};return`
2521    ${_(f)};
2522    ${_(m)};
2523  fn getCubicInterpolationCoefs(s: ${g}) -> array<${g}, 4> {
2524    var absS = abs(s);
2525    var coeffs: array<${g}, 4> = array<${g}, 4>(0.0, 0.0, 0.0, 0.0);
2526    var oneMinusAbsS: ${g} = 1.0 - absS;
2527    var twoMinusAbsS: ${g} = 2.0 - absS;
2528    var onePlusAbsS: ${g} = 1.0 + absS;
2529    coeffs[0] = ((${s} * onePlusAbsS - 5 * ${s}) * onePlusAbsS + 8 * ${s}) * onePlusAbsS - 4 * ${s};
2530    coeffs[1] = ((${s} + 2) * absS - (${s} + 3)) * absS * absS + 1;
2531    coeffs[2] = ((${s} + 2) * oneMinusAbsS - (${s} + 3)) * oneMinusAbsS * oneMinusAbsS + 1;
2532    coeffs[3] = ((${s} * twoMinusAbsS - 5 * ${s}) * twoMinusAbsS + 8 * ${s}) * twoMinusAbsS - 4 * ${s};
2533    return coeffs;
2534  }
2535
2536  fn cubicInterpolation1D(x: array<${g}, 4>, coefs: array<${g}, 4>) -> ${g} {
2537    var coefsSum: ${g} = coefs[0] + coefs[1] + coefs[2] + coefs[3];
2538    return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum;
2539  }
2540
2541  fn bicubicInterpolation(output_indices: ${t.type.indices}) -> ${g} {
2542    var input_indices: ${e.type.indices} = output_indices;
2543    return colCubicInterpolation(input_indices, output_indices);
2544  }
2545    `},kl=(e,t,r,a,n)=>{let[i,s,u,d,l]=r.length===3?[-1,0,1,2,-1]:[0,2,3,4,1],c=e.type.value;return`
2546    fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${c} {
2547      var input_indices: ${e.type.indices};
2548      ${e.indicesSet("input_indices",s,`max(0, min(depth, ${r[s]} - 1))`)};
2549      ${e.indicesSet("input_indices",u,`max(0, min(height, ${r[u]} - 1))`)};
2550      ${e.indicesSet("input_indices",d,`max(0, min(width, ${r[d]} - 1))`)};
2551      ${ta(e,l,i,3)}
2552      return ${e.getByIndices("input_indices")};
2553    }
2554
2555    fn trilinearInterpolation(output_indices: ${t.type.indices}) -> ${c} {
2556      var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);
2557      var depth:${c} = originalIndices[${s}];
2558      var height:${c} = originalIndices[${u}];
2559      var width:${c} = originalIndices[${d}];
2560      ${a?`if (depth < 0 || depth > (${r[s]} - 1) || height < 0 || height > (${r[u]} - 1) || width < 0 || (width > ${r[d]} - 1)) {
2561      return ${n};
2562        }`:""};
2563
2564    depth = max(0, min(depth, ${r[s]} - 1));
2565      height = max(0, min(height, ${r[u]} - 1));
2566      width = max(0, min(width, ${r[d]} - 1));
2567      var depth1: u32 = u32(depth);
2568      var height1: u32 = u32(height);
2569      var width1: u32 = u32(width);
2570      var depth2: u32 = u32(depth + 1);
2571      var height2: u32 = u32(height + 1);
2572      var width2: u32 = u32(width + 1);
2573      var channel: u32 = ${r.length>3?`u32(originalIndices[${l}])`:"0"};
2574      var batch: u32 =  ${r.length>3?`u32(originalIndices[${i}])`:"0"};
2575
2576      var x111: ${c} = getInputValue(batch, channel, depth1, height1, width1);
2577      var x112: ${c} = getInputValue(batch, channel, depth1, height1, width2);
2578      var x121: ${c} = getInputValue(batch, channel, depth1, height2, width1);
2579      var x122: ${c} = getInputValue(batch, channel, depth1, height2, width2);
2580      var x211: ${c} = getInputValue(batch, channel, depth2, height1, width1);
2581      var x212: ${c} = getInputValue(batch, channel, depth2, height1, width2);
2582      var x221: ${c} = getInputValue(batch, channel, depth2, height2, width1);
2583      var x222: ${c} = getInputValue(batch, channel, depth2, height2, width2);
2584      var dx1: ${c} = abs(depth - ${c}(depth1));
2585      var dx2: ${c} = abs(${c}(depth2) - depth);
2586      var dy1: ${c} = abs(height - ${c}(height1));
2587      var dy2: ${c} = abs(${c}(height2) - height);
2588      var dz1: ${c} = abs(width - ${c}(width1));
2589      var dz2: ${c} = abs(${c}(width2) - width);
2590      if (depth1 == depth2) {
2591        dx1 = 0.5;
2592        dx2 = 0.5;
2593      }
2594      if (height1 == height2) {
2595        dy1 = 0.5;
2596        dy2 = 0.5;
2597      }
2598      if (width1 == width2) {
2599        dz1 = 0.5;
2600        dz2 = 0.5;
2601      }
2602      return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 +
2603              x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1);
2604    }`},Tl=(e,t,r,a,n,i)=>{let s=e.dims,u=_l(i,t.axes,s.length),d=yl(s,a,n,t.axes),l=a.slice();a.length===0&&(l=s.map(($,k)=>$===0?1:d[k]/$),t.keepAspectRatioPolicy!=="stretch"&&(d=bl(s,l,t)));let c=G("output",e.dataType,d.length),f=R("input",e.dataType,s.length),m=C.size(d),g=s.length===d.length&&s.every(($,k)=>$===d[k]),_=t.coordinateTransformMode==="tf_crop_and_resize",b=t.extrapolationValue,x=f.type.value,w=$=>`
2605      ${g?"":`
2606      ${ml(t.coordinateTransformMode,x)};
2607      ${(()=>{switch(t.mode){case"nearest":return`
2608              ${vl(f,s)};
2609              ${gl(t.nearestMode,r,x)};
2610              ${wl(f,c,s,d,l.length,u.length,_)};
2611              `;case"linear":return`
2612              ${$l(c,s,d,l.length,u.length)};
2613              ${(()=>{if(s.length===2||s.length===4)return`${xl(f,c,s,_,b)}`;if(s.length===3||s.length===5)return`${kl(f,c,s,_,b)}`;throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode.")})()};
2614            `;case"cubic":return`
2615            ${(()=>{if(s.length===2||s.length===4)return`${Sl(f,c,s,d,l,u,t.cubicCoeffA,_,t.extrapolationValue,t.excludeOutside)}`;throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode.")})()};
2616            `;default:throw Error("Invalid resize mode")}})()};
2617      `}
2618      ${$.registerUniform("output_size","u32").registerUniform("scales","f32",l.length).registerUniform("roi","f32",u.length).declareVariables(f,c)}
2619      ${$.mainStart()}
2620        ${$.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2621        ${g?"output[global_idx] = input[global_idx];":`
2622        let output_indices = ${c.offsetToIndices("global_idx")};
2623        var input_indices: ${f.type.indices};
2624        ${(()=>{switch(t.mode){case"nearest":return`input_indices = calculateInputIndicesFromOutputIndices(output_indices);
2625                if (checkInputIndices(input_indices)) {
2626                  output[global_idx] = ${f.getByIndices("input_indices")};
2627                } else {
2628                  output[global_idx] = ${t.extrapolationValue};
2629                }`;case"linear":return`output[global_idx] = ${s.length===2||s.length===4?"bilinearInterpolation":"trilinearInterpolation"}(output_indices);`;case"cubic":return"output[global_idx] = bicubicInterpolation(output_indices);";default:throw Error(`Unsupported resize mode: ${t.mode}`)}})()};
2630`}
2631      }`;
vendor: 18,175 bytes, lines 2631-2823
2631return{name:"Resize",shaderCache:{hint:`${t.cacheKey}|${r}|${l.length>0?t.mode==="cubic"?l:l.length:""}|${n.length>0?n:""}|${u.length>0?u:""}|${g}|${t.mode==="nearest"?s.length:s}`,inputDependencies:["rank"]},getShaderSource:w,getRunData:()=>({outputs:[{dims:d,dataType:e.dataType}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:[{type:12,data:m},{type:1,data:l},{type:1,data:u},...Z(s,d)]})}},Il=e=>{let t=e.customDataBuffer;return new Uint32Array(t,t.byteOffset,1)[0]},nf=(e,t)=>{let r=[],a=[],n=[],i=Il(e);if(t.antialias!==0)throw Error("Only default value (0) for Antialias attribute is supported");hl(e.inputs,t,i,r,a,n),e.compute(Tl(e.inputs[0],t,i,r,a,n),{inputs:[0]})},sf=e=>{let t=e.antialias,r=e.axes,a=e.coordinateTransformMode,n=e.cubicCoeffA,i=e.excludeOutside!==0,s=e.extrapolationValue,u=e.keepAspectRatioPolicy,d=e.mode,l=e.nearestMode===""?"simple":e.nearestMode;return ce({antialias:t,axes:r,coordinateTransformMode:a,cubicCoeffA:n,excludeOutside:i,extrapolationValue:s,keepAspectRatioPolicy:u,mode:d,nearestMode:l})}}),El,zl,of,og=U(()=>{J(),re(),ie(),El=e=>{if(!e||e.length<3)throw new Error("layerNorm requires at least 3 inputs.");let t=e[0],r=e[1],a=e[2];if(t.dataType!==r.dataType||t.dataType!==a.dataType)throw new Error("All inputs must have the same data type");if(t.dims.length!==3&&t.dims.length!==2)throw new Error("Input must be 2D or 3D");if(r.dims.length!==3&&r.dims.length!==2)throw new Error("Skip must be 2D or 3D");let n=t.dims[t.dims.length-1],i=t.dims[t.dims.length-2];if(r.dims[r.dims.length-1]!==n)throw new Error("Skip must have the same hidden size as input");if(r.dims[r.dims.length-2]!==i)throw new Error("Skip must have the same sequence length as input");if(a.dims.length!==1)throw new Error("Gamma must be 1D");if(a.dims[a.dims.length-1]!==n)throw new Error("Gamma must have the same hidden size as input");if(e.length>3){let s=e[3];if(s.dims.length!==1)throw new Error("Beta must be 1D");if(s.dims[s.dims.length-1]!==n)throw new Error("Beta must have the same hidden size as input")}if(e.length>4){let s=e[4];if(s.dims.length!==1)throw new Error("Bias must be 1D");if(s.dims[s.dims.length-1]!==n)throw new Error("Bias must have the same hidden size as input")}},zl=(e,t,r,a)=>{let n=t.simplified,i=e[0].dims,s=C.size(i),u=i,d=s,l=i.slice(-1)[0],c=a?i.slice(0,-1).concat(1):[],f=!n&&e.length>3,m=e.length>4,g=a&&r>1,_=a&&r>2,b=r>3,x=64,w=$e(l),$=[{type:12,data:d},{type:12,data:w},{type:12,data:l},{type:1,data:t.epsilon}],k=T=>{let E=[{name:"output_size",type:"u32"},{name:"components",type:"u32"},{name:"hidden_size",type:"u32"},{name:"epsilon",type:"f32"}],z=[R("x",e[0].dataType,e[0].dims,w),R("skip",e[1].dataType,e[1].dims,w),R("gamma",e[2].dataType,e[2].dims,w)];f&&z.push(R("beta",e[3].dataType,e[3].dims,w)),m&&z.push(R("bias",e[4].dataType,e[4].dims,w)),z.push(G("output",e[0].dataType,u,w)),g&&z.push(G("mean_output",1,c)),_&&z.push(G("inv_std_output",1,c)),b&&z.push(G("input_skip_bias_sum",e[0].dataType,u,w));let A=Se(e[0].dataType),O=Se(1,w);return`
2632
2633      ${T.registerUniforms(E).declareVariables(...z)}
2634      var<workgroup> sum_shared : array<${O}, ${x}>;
2635      var<workgroup> sum_squared_shared : array<${O}, ${x}>;
2636
2637      ${T.mainStart([x,1,1])}
2638        let ix = local_id.x;
2639        let iy = global_id.x / ${x};
2640
2641        let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components;
2642        var stride = hidden_size_vectorized / ${x};
2643        let offset = ix * stride + iy * hidden_size_vectorized;
2644        let offset1d = stride * ix;
2645        if (ix == ${x-1}) {
2646          stride = hidden_size_vectorized - stride * ix;
2647        }
2648        for (var i: u32 = 0; i < stride; i++) {
2649          let skip_value = skip[offset + i];
2650          let bias_value = ${m?"bias[offset1d + i]":A+"(0.0)"};
2651          let input_value = x[offset + i];
2652          let value = input_value + skip_value + bias_value;
2653          ${b?"input_skip_bias_sum[offset + i] = value;":""}
2654          output[offset + i] = value;
2655          let f32_value = ${Dt(A,w,"value")};
2656          sum_shared[ix] += f32_value;
2657          sum_squared_shared[ix] += f32_value * f32_value;
2658        }
2659        workgroupBarrier();
2660
2661        var reduce_size : u32 = ${x};
2662        for (var curr_size = reduce_size >> 1;  curr_size > 0; curr_size = reduce_size >> 1) {
2663          reduce_size = curr_size + (reduce_size & 1);
2664          if (ix < curr_size) {
2665            sum_shared[ix] += sum_shared[ix + reduce_size];
2666            sum_squared_shared[ix] += sum_squared_shared[ix + reduce_size];
2667          }
2668          workgroupBarrier();
2669        }
2670
2671        let sum = sum_shared[0];
2672        let square_sum = sum_squared_shared[0];
2673        let mean = ${ht("sum",w)} / f32(uniforms.hidden_size);
2674        let inv_std_dev = inverseSqrt(${ht("square_sum",w)} / f32(uniforms.hidden_size) ${n?"":"- mean * mean"} + uniforms.epsilon);
2675        ${g?"mean_output[global_idx] = mean;":""}
2676        ${_?"inv_std_output[global_idx] = inv_std_dev;":""}
2677
2678        for (var i: u32 = 0; i < stride; i++) {
2679          output[offset + i] = (output[offset + i] ${n?"":`- ${A}(mean)`}) *
2680            ${A}(inv_std_dev) * gamma[offset1d + i]
2681            ${f?"+ beta[offset1d + i]":""};
2682        }
2683      }`},S=[{dims:u,dataType:e[0].dataType}];return r>1&&S.push({dims:c,dataType:1}),r>2&&S.push({dims:c,dataType:1}),r>3&&S.push({dims:i,dataType:e[0].dataType}),{name:"SkipLayerNormalization",shaderCache:{hint:`${w};${g};${_};${b}`,inputDependencies:e.map((T,E)=>"type")},getShaderSource:k,getRunData:()=>({outputs:S,dispatchGroup:{x:Math.ceil(d/l)},programUniforms:$})}},of=(e,t)=>{El(e.inputs);let r=[0];e.outputCount>1&&r.push(-3),e.outputCount>2&&r.push(-3),e.outputCount>3&&r.push(3),e.compute(zl(e.inputs,t,e.outputCount,!1),{outputs:r})}}),Cl,Xt,Al,ra,Ol,Bl,uf,lf,ug=U(()=>{J(),re(),we(),ie(),Cl=(e,t)=>{if(!e||e.length<1)throw new Error("too few inputs");if(t.axes.length!==0){if(t.axes.length!==t.starts.length||t.axes.length!==t.ends.length)throw new Error("axes, starts and ends must have the same length")}else if(t.starts.length!==t.ends.length)throw new Error("starts and ends must have the same length");e.slice(1).forEach((r,a)=>{if(e[a+1].dataType!==6&&e[a+1].dataType!==7)throw new Error(`Input ${a} must be an array of int32 or int64`)})},Xt=(e,t)=>{let r=[];if(e.length>t)if(e[t].dataType===7)e[t].getBigInt64Array().forEach(a=>r.push(Number(a)));else if(e[t].dataType===6)e[t].getInt32Array().forEach(a=>r.push(Number(a)));else throw new Error(`Input ${t} must be an array of int32 or int64`);return r},Al=(e,t)=>{if(e.length>1){let r=Xt(e,1),a=Xt(e,2),n=Xt(e,3);return n.length===0&&(n=[...Array(e[0].dims.length).keys()]),ce({starts:r,ends:a,axes:n})}else return t},ra=(e,t,r,a,n)=>{let i=e;return e<0&&(i+=r[a[t]]),n[t]<0?Math.max(0,Math.min(i,r[a[t]]-1)):Math.max(0,Math.min(i,r[a[t]]))},Ol=(e,t,r)=>`fn calculateInputIndices(output_indices: ${t.type.indices}) -> ${e.type.indices} {
2684          var input_indices: ${e.type.indices};
2685          var carry = 0u;
2686          for (var i = ${r.length}; i >= 0; i--) {
2687            let input_shape_i = ${F("uniforms.input_shape","i",r.length)};
2688            let steps_i = ${F("uniforms.steps","i",r.length)};
2689            let signs_i = ${F("uniforms.signs","i",r.length)};
2690            let starts_i = ${F("uniforms.starts","i",r.length)};
2691            var output_index = ${t.indicesGet("output_indices","i")};
2692            var input_index = output_index * steps_i + starts_i + carry;
2693            carry = input_index / input_shape_i;
2694            input_index = input_index % input_shape_i;
2695            if (signs_i < 0) {
2696              input_index = input_shape_i - input_index - 1u + starts_i;
2697            }
2698            ${e.indicesSet("input_indices","i","input_index")};
2699          }
2700          return input_indices;
2701      }`,Bl=(e,t)=>{let r=e[0].dims,a=C.size(r),n=t.axes.length>0?C.normalizeAxes(t.axes,r.length):[...Array(r.length).keys()],i=Xt(e,4);i.forEach(w=>w!==0||(()=>{throw new Error("step cannot be 0")})),i.length===0&&(i=Array(n.length).fill(1));let s=t.starts.map((w,$)=>ra(w,$,r,n,i)),u=t.ends.map((w,$)=>ra(w,$,r,n,i));if(n.length!==s.length||n.length!==u.length)throw new Error("start, ends and axes should have the same number of elements");if(n.length!==r.length)for(let w=0;w<r.length;++w)n.includes(w)||(s.splice(w,0,0),u.splice(w,0,r[w]),i.splice(w,0,1));let d=i.map(w=>Math.sign(w));i.forEach((w,$,k)=>{if(w<0){let S=(u[$]-s[$])/w,T=s[$],E=T+S*i[$];s[$]=E,u[$]=T,k[$]=-w}});let l=r.slice(0);n.forEach((w,$)=>{l[w]=Math.ceil((u[w]-s[w])/i[w])});let c={dims:l,dataType:e[0].dataType},f=G("output",e[0].dataType,l.length),m=R("input",e[0].dataType,e[0].dims.length),g=C.size(l),_=[{name:"outputSize",type:"u32"},{name:"starts",type:"u32",length:s.length},{name:"signs",type:"i32",length:d.length},{name:"steps",type:"u32",length:i.length}],b=[{type:12,data:g},{type:12,data:s},{type:6,data:d},{type:12,data:i},...Z(e[0].dims,l)],x=w=>`
2702      ${w.registerUniforms(_).declareVariables(m,f)}
2703        ${Ol(m,f,r)}
2704        ${w.mainStart()}
2705          ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2706          let output_indices = ${f.offsetToIndices("global_idx")};
2707          let input_indices = calculateInputIndices(output_indices);
2708          ${f.setByOffset("global_idx",m.getByIndices("input_indices"))}
2709      }`;return{name:"Slice",shaderCache:{hint:`${d.length}_${s.length}_${i.length}`,inputDependencies:["rank"]},getShaderSource:x,getRunData:()=>({outputs:[c],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:b})}},uf=(e,t)=>{Cl(e.inputs,t);let r=Al(e.inputs,t);e.compute(Bl(e.inputs,r),{inputs:[0]})},lf=e=>{let t=e.starts,r=e.ends,a=e.axes;return ce({starts:t,ends:r,axes:a})}}),Rl,Dl,df,pf,lg=U(()=>{J(),re(),we(),mt(),ie(),Rl=e=>{if(!e||e.length!==1)throw new Error("Softmax op requires 1 input.")},Dl=(e,t)=>{let r=e.inputs[0],a=r.dims,n=C.size(a),i=a.length,s=C.normalizeAxis(t.axis,i),u=s<a.length-1,d,l=[];u?(l=Array.from({length:i},(z,A)=>A),l[s]=i-1,l[i-1]=s,d=e.compute(De(r,l),{inputs:[r],outputs:[-1]})[0]):d=r;let c=d.dims,f=c[i-1],m=n/f,g=$e(f),_=f/g,b=64;m===1&&(b=256);let x=(z,A)=>A===4?`max(max(${z}.x, ${z}.y), max(${z}.z, ${z}.w))`:A===2?`max(${z}.x, ${z}.y)`:A===3?`max(max(${z}.x, ${z}.y), ${z}.z)`:z,w=R("x",d.dataType,d.dims,g),$=G("result",d.dataType,d.dims,g),k=w.type.value,S=Se(d.dataType)==="f32"?`var threadMax = ${k}(-3.402823e+38f);`:`var threadMax = ${k}(-65504.0h);`,T=z=>`
2710      var<workgroup> rowMaxShared : ${k};
2711      var<workgroup> rowSumShared : ${k};
2712      var<workgroup> threadShared : array<${k}, ${b}>;
2713
2714      fn getValue(row: i32, col: i32, row_stride: i32) -> ${k} {
2715        let index = row * row_stride + col;
2716        return x[index];
2717      }
2718
2719      fn setValue(row: i32, col: i32, row_stride: i32, value: ${k}) {
2720        let index = row * row_stride + col;
2721        result[index] = value;
2722      }
2723      ${z.registerUniform("packedCols","i32").declareVariables(w,$)}
2724      ${z.mainStart(b)}
2725        let gindex = i32(global_idx);
2726        let lindex = i32(local_idx);
2727        const wg = ${b};
2728        let row = gindex / wg;
2729        let cols = uniforms.packedCols;
2730        let row_stride : i32 = uniforms.packedCols;
2731
2732        // find the rows max
2733        ${S}
2734        for (var col = lindex; col < cols; col += wg) {
2735          let value = getValue(row, col, row_stride);
2736          threadMax = max(threadMax, value);
2737        }
2738        if (lindex < cols) {
2739          threadShared[lindex] = threadMax;
2740        }
2741        workgroupBarrier();
2742
2743        var reduceSize = min(cols, wg);
2744        for (var currSize = reduceSize >> 1;  currSize > 0; currSize = reduceSize >> 1) {
2745          reduceSize = currSize + (reduceSize & 1);
2746          if (lindex < currSize) {
2747            threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]);
2748          }
2749          workgroupBarrier();
2750        }
2751        if (lindex == 0) {
2752          rowMaxShared = ${k}(${x("threadShared[0]",g)});
2753        }
2754        workgroupBarrier();
2755
2756        // find the rows sum
2757        var threadSum = ${k}(0.0);
2758        for (var col = lindex; col < cols; col += wg) {
2759          let subExp = exp(getValue(row, col, row_stride) - rowMaxShared);
2760          threadSum += subExp;
2761        }
2762        threadShared[lindex] = threadSum;
2763        workgroupBarrier();
2764
2765        for (var currSize = wg >> 1;  currSize > 0; currSize = currSize >> 1) {
2766          if (lindex < currSize) {
2767            threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize];
2768          }
2769          workgroupBarrier();
2770        }
2771        if (lindex == 0) {
2772          rowSumShared = ${k}(${ht("threadShared[0]",g)});
2773        }
2774        workgroupBarrier();
2775
2776        // calculate final value for each element in the row
2777        for (var col = lindex; col < cols; col += wg) {
2778          let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared;
2779          setValue(row, col, row_stride, value);
2780        }
2781      }`,E=e.compute({name:"Softmax",shaderCache:{hint:`${g};${b}`,inputDependencies:["type"]},getRunData:()=>({outputs:[{dims:c,dataType:d.dataType}],dispatchGroup:{x:m},programUniforms:[{type:6,data:_}]}),getShaderSource:T},{inputs:[d],outputs:[u?-1:0]})[0];u&&e.compute(De(E,l),{inputs:[E]})},df=(e,t)=>{Rl(e.inputs),Dl(e,t)},pf=e=>ce({axis:e.axis})}),ia,Nl,Ml,Pl,cf,dg=U(()=>{J(),re(),ie(),ia=e=>Array.from(e.getBigInt64Array(),Number),Nl=e=>{if(!e||e.length!==2)throw new Error("Tile requires 2 inputs.");if(e[0].dataType!==1&&e[0].dataType!==10&&e[0].dataType!==6&&e[0].dataType!==12)throw new Error("Tile only support float, float16, int32, and uint32 data types");if(e[1].dataType!==7)throw new Error("Tile `repeats` input should be of int64 data type");if(e[1].dims.length!==1)throw new Error("Tile `repeats` input should be 1-D");if(ia(e[1]).length!==e[0].dims.length)throw new Error("Tile `repeats` input should have same number of elements as rank of input data tensor")},Ml=(e,t)=>{let r=[];for(let a=0;a<e.length;++a)r.push(e[a]*t[a]);return r},Pl=(e,t)=>{let r=e[0].dims,a=t??ia(e[1]),n=Ml(r,a),i=C.size(n),s=e[0].dataType,u=R("input",s,r.length),d=G("output",s,n.length),l=c=>`
2782      const inputShape = ${u.indices(...r)};
2783      ${c.registerUniform("output_size","u32").declareVariables(u,d)}
2784      ${c.mainStart()}
2785      ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2786      let output_indices = ${d.offsetToIndices("global_idx")};
2787      var input_indices: ${u.type.indices};
2788      for (var i = 0; i < ${r.length}; i++) {
2789        let input_dim_i = ${u.indicesGet("uniforms.input_shape","i")};
2790        let input_dim_value = ${d.indicesGet("output_indices","i")}  % input_dim_i;
2791
2792        ${u.indicesSet("input_indices","i","input_dim_value")}
2793      }
2794      ${d.setByOffset("global_idx",u.getByIndices("input_indices"))}
2795    }`;return{name:"Tile",shaderCache:{hint:`${a}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:n,dataType:e[0].dataType}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:[{type:12,data:i},...Z(e[0].dims,n)]}),getShaderSource:l}},cf=e=>{Nl(e.inputs),e.compute(Pl(e.inputs),{inputs:[0]})}}),Ul,ql,ff,pg=U(()=>{J(),re(),ie(),Ul=(e,t,r,a,n)=>{let i=G("output_data",n,r.length,4),s=R("a_data",t[1].dataType,t[1].dims.length,4),u=R("b_data",t[2].dataType,t[2].dims.length,4),d=R("c_data",t[0].dataType,t[0].dims.length,4),l,c=(f,m,g)=>`select(${m}, ${f}, ${g})`;if(!a)l=i.setByOffset("global_idx",c(s.getByOffset("global_idx"),u.getByOffset("global_idx"),d.getByOffset("global_idx")));else{let f=(m,g,_="")=>{let b=`a_data[index_a${g}][component_a${g}]`,x=`b_data[index_b${g}][component_b${g}]`,w=`bool(c_data[index_c${g}] & (0xffu << (component_c${g} * 8)))`;return`
2796            let output_indices${g} = ${i.offsetToIndices(`global_idx * 4u + ${g}u`)};
2797            let offset_a${g} = ${s.broadcastedIndicesToOffset(`output_indices${g}`,i)};
2798            let offset_b${g} = ${u.broadcastedIndicesToOffset(`output_indices${g}`,i)};
2799            let offset_c${g} = ${d.broadcastedIndicesToOffset(`output_indices${g}`,i)};
2800            let index_a${g} = offset_a${g} / 4u;
2801            let index_b${g} = offset_b${g} / 4u;
2802            let index_c${g} = offset_c${g} / 4u;
2803            let component_a${g} = offset_a${g} % 4u;
2804            let component_b${g} = offset_b${g} % 4u;
2805            let component_c${g} = offset_c${g} % 4u;
2806            ${m}[${g}] = ${_}(${c(b,x,w)});
2807          `};n===9?l=`
2808            var data = vec4<u32>(0);
2809            ${f("data",0,"u32")}
2810            ${f("data",1,"u32")}
2811            ${f("data",2,"u32")}
2812            ${f("data",3,"u32")}
2813            output_data[global_idx] = dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(data));`:l=`
2814            ${f("output_data[global_idx]",0)}
2815            ${f("output_data[global_idx]",1)}
2816            ${f("output_data[global_idx]",2)}
2817            ${f("output_data[global_idx]",3)}
2818          `}return`
2819        ${e.registerUniform("vec_size","u32").declareVariables(d,s,u,i)}
2820        ${e.mainStart()}
2821        ${e.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
2822        ${l}
2823      }`},ql=e=>{let t=e[1].dims,r=e[2].dims,a=e[0].dims,n=e[1].dataType,i=!(C.areEqual(t,r)&&C.areEqual(r,a)),s=t,u=C.size(t);if(i){let l=Nt.calcShape(Nt.calcShape(t,r,!1),a,!1);if(!l)throw new Error("Can't perform where op on the given tensors");s=l,u=C.size(s)}let d=Math.ceil(u/4);return{name:"Where",shaderCache:{inputDependencies:["rank","rank","rank"]},getShaderSource:l=>Ul(l,e,s,i,n),getRunData:()=>({outputs:[{dims:s,dataType:n}],dispatchGroup:{x:Math.ceil(u/64/4)},programUniforms:[{type:12,data:d},...Z(a,t,r,s)]})}},ff=e=>{e.compute(ql(e.inputs))}}),hf,cg=U(()=>{Tm(),qa(),Im(),Em(),zm(),Cm(),Am(),Nm(),Pm(),Um(),qm(),Wm(),Lm(),Vm(),jm(),Hm(),Gm(),Fm(),Km(),Zm(),Qm(),Xm(),Ym(),Jm(),eg(),Oc(),tg(),rg(),ig(),ag(),ng(),Ua(),sg(),Mc(),og(),ug(),lg(),Dc(),dg(),mt(),Wa(),pg(),hf=new Map([["Abs",[sp]],["Acos",[op]],["Acosh",[up]],["Add",[Lp]],["ArgMax",[rp,ha]],["ArgMin",[tp,ha]],["Asin",[lp]],["Asinh",[dp]],["Atan",[pp]],["Atanh",[cp]],["Attention",[ip]],["AveragePool",[Gc,Hc]],["BatchNormalization",[ap]],["BiasAdd",[np]],["BiasSplitGelu",[Wp]],["Cast",[hp,fp]],["Ceil",[gp]],["Clip",[mp]],["Concat",[Yp,Jp]],["Conv",[$a,ba
2823]],["ConvTranspose",[lc,uc]],["Cos",[_p]],["Cosh",[yp]],["CumSum",[dc,pc]],["DepthToSpace",[cc,fc]],["DequantizeLinear",[Jc,ef]],["Div",[Vp]],["Einsum",[hc,mc]],["Elu",[bp,rr]],["Equal",[jp]],["Erf",[$p]],["Exp",[wp]],["Expand",[gc]],["FastGelu",[_c]],["Floor",[vp]],["FusedConv",[$a,ba]],["Gather",[bc,yc]],["GatherElements",[kc,Sc]],["GatherBlockQuantized",[vc,xc]],["GatherND",[$c,wc]],["Gelu",[xp]],["Gemm",[Ic,Tc]],["GlobalAveragePool",[Kc,Fc]],["GlobalMaxPool",[Yc,Xc]],["Greater",[Kp]],["GreaterOrEqual",[Qp]],["GridSample",[Ec,zc]],["GroupQueryAttention",[Pc]],["HardSigmoid",[Ap,Cp]],["InstanceNormalization",[Uc]],["LayerNormalization",[qc]],["LeakyRelu",[Sp,rr]],["Less",[Zp]],["LessOrEqual",[Xp]],["Log",[Up]],["MatMul",[Wc]],["MatMulNBits",[Lc,Vc]],["MaxPool",[Zc,Qc]],["Mul",[Hp]],["MultiHeadAttention",[Ac,Cc]],["Neg",[Tp]],["Not",[kp]],["Pad",[jc]],["Pow",[Gp]],["QuickGelu",[qp,rr]],["Range",[tf]],["Reciprocal",[Ip]],["ReduceMin",[Qd]],["ReduceMean",[Hd]],["ReduceMax",[Zd]],["ReduceSum",[Yd]],["ReduceProd",[Xd]],["ReduceL1",[Gd]],["ReduceL2",[Fd]],["ReduceLogSum",[ep]],["ReduceLogSumExp",[Kd]],["ReduceSumSquare",[Jd]],["Relu",[Ep]],["Resize",[nf,sf]],["RotaryEmbedding",[Nc]],["ScatterND",[af,rf]],["Sigmoid",[zp]],["Sin",[Op]],["Sinh",[Bp]],["Slice",[uf,lf]],["SkipLayerNormalization",[of]],["Split",[Bc,Rc]],["Sqrt",[Rp]],["Softmax",[df,pf]],["Sub",[Fp]],["Tan",[Dp]],["Tanh",[Np]],["ThresholdedRelu",[Pp,rr]],["Tile",[cf]],["Transpose",[Bd,Rd]],["Where",[ff]]])}),mf,fg=U(()=>{Ke(),at(),ie(),mf=class{constructor(e){this.backend=e,this.repo=new Map,this.attributesBound=!1}getArtifact(e){return this.repo.get(e)}setArtifact(e,t){this.repo.set(e,t)}run(e,t,r,a,n){Fe(e.programInfo.name);let i=this.backend.device,s=this.backend.getComputePassEncoder();this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2);let u=[];for(let l of t)u.push({binding:u.length,resource:{buffer:l.buffer}});for(let l of r)u.push({binding:u.length,resource:{buffer:l.buffer}});n&&u.push({binding:u.length,resource:n});let d=i.createBindGroup({layout:e.computePipeline.getBindGroupLayout(0),entries:u,label:e.programInfo.name});if(this.backend.sessionStatus==="capturing"){let l={kernelId:this.backend.currentKernelId,computePipeline:e.computePipeline,bindGroup:d,dispatchGroup:a};this.backend.capturedCommandList.get(this.backend.currentSessionId).push(l)}s.setPipeline(e.computePipeline),s.setBindGroup(0,d),s.dispatchWorkgroups(...a),this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2+1),this.backend.pendingDispatchNumber++,(this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber||this.backend.queryType==="at-passes")&&this.backend.endComputePass(),this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber&&this.backend.flush(),Ue(e.programInfo.name)}dispose(){}build(e,t){Fe(e.name);let r=this.backend.device,a=[];[{feature:"shader-f16",extension:"f16"},{feature:"subgroups",extension:"subgroups"}].forEach(l=>{r.features.has(l.feature)&&a.push(`enable ${l.extension};`)});let n=Od(t,this.backend.device.limits),i=e.getShaderSource(n),s=`${a.join(`
2824`)}
2825${n.additionalImplementations}
2826${i}`,u=r.createShaderModule({code:s,label:e.name});ue("verbose",()=>`[WebGPU] ${e.name} shader code: ${s}`);let d=r.createComputePipeline({compute:{module:u,entryPoint:"main"},layout:"auto",label:e.name});return Ue(e.name),{programInfo:e,computePipeline:d,uniformVariablesInfo:n.variablesInfo}}normalizeDispatchGroupSize(e){let t=typeof e=="number"?e:e.x,r=typeof e=="number"?1:e.y||1,a=typeof e=="number"?1:e.z||1,n=this.backend.device.limits.maxComputeWorkgroupsPerDimension;if(t<=n&&r<=n&&a<=n)return[t,r,a];let i=t*r*a,s=Math.ceil(Math.sqrt(i));if(s>n){if(s=Math.ceil(Math.cbrt(i)),s>n)throw new Error("Total dispatch size exceeds WebGPU maximum.");return[s,s,s]}else return[s,s,1]}}}),gf={};Pt(gf,{WebGpuBackend:()=>_f});var Wl,Ll,Vl,_f,hg=U(()=>{Ke(),J(),at(),Id(),Sm(),cg(),fg(),Wl=(e,t)=>{if(t.length!==e.length)throw new Error(`inputDependencies length ${t.length} is not equal to inputTensors length ${e.length}.`);let r=[];for(let a=0;a<e.length;++a){let n=e[a].dataType;switch(t[a]){case"none":{r.push("");break}case"type":{r.push(`${n}`);break}case"rank":{let i=e[a].dims.length;r.push(`${n};${i}`);break}case"dims":{let i=e[a].dims.join(",");r.push(`${n};${i}`);break}default:throw new Error(`unsupported input dependency: ${t[a]}`)}}return r.join("|")},Ll=(e,t,r)=>{var n,i;let a=e.name;return(n=e.shaderCache)!=null&&n.hint&&(a+="["+e.shaderCache.hint+"]"),a+=":"+r+`:${Wl(t,((i=e.shaderCache)==null?void 0:i.inputDependencies)??new Array(t.length).fill("dims"))}`,a},Vl=class{constructor(e){e&&(this.architecture=e.architecture,this.vendor=e.vend
vendor: 1,773 bytes, line 2826
2826or)}isArchitecture(e){return this.architecture===e}isVendor(e){return this.vendor===e}},_f=class{constructor(){this.currentSessionId=null,this.currentKernelId=null,this.commandEncoder=null,this.computePassEncoder=null,this.maxDispatchNumber=16,this.pendingDispatchNumber=0,this.pendingKernels=[],this.pendingQueries=new Map,this.sessionStatus="default",this.capturedCommandList=new Map,this.capturedPendingKernels=new Map,this.sessionExternalDataMapping=new Map}get currentKernelCustomData(){if(this.currentKernelId===null)throw new Error("currentKernelCustomData(): currentKernelId is null. (should not happen)");let e=this.kernelCustomData.get(this.currentKernelId);return e||(e={},this.kernelCustomData.set(this.currentKernelId,e)),e}async initialize(e,t){this.env=e;let r=[],a={requiredLimits:{maxComputeWorkgroupStorageSize:t.limits.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:t.limits.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:t.limits.maxStorageBufferBindingSize,maxBufferSize:t.limits.maxBufferSize,maxComputeInvocationsPerWorkgroup:t.limits.maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupSizeX:t.limits.maxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY:t.limits.maxComputeWorkgroupSizeY,maxComputeWorkgroupSizeZ:t.limits.maxComputeWorkgroupSizeZ},requiredFeatures:r},n=i=>t.features.has(i)&&r.push(i)&&!0;n("chromium-experimental-timestamp-query-inside-passes")||n("timestamp-query"),n("shader-f16"),n("subgroups"),this.device=await t.requestDevice(a),this.adapterInfo=new Vl(t.info||await t.requestAdapterInfo()),this.gpuDataManager=Cd(this),this.programManager=new mf(this),this.kernels=new Map,this.kernelPersistentData=new Map,this.kernelCustomData=new Map,Da(e.logLevel,!!e.debug),this.device.onuncapturederror=i=>
2826{i.error instanceof GPUValidationError&&console.error(`An uncaught WebGPU validation error was raised: ${i.error.message}`)},Object.defineProperty(this.env.webgpu,"device",{value:this.device,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(this.env.webgpu,"adapter",{value:t,writable:!1,enumerable:!0,configurable:!1}),this.setQueryType()}dispose(){typeof this.querySet<"u"&&this.querySet.destroy(),this.gpuDataManager.dispose()}getCommandEncoder(){return this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder()),this.commandEncoder}getComputePassEncoder(){if(!this.computePassEncoder){let e=this.getCommandEncoder(),t={};this.queryType==="at-passes"&&(t.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:this.pendingDispatchNumber*2,endOfPassWriteIndex:this.pendingDispatchNumber*2+1}),this.computePassEncoder=e.beginComputePass(t)}return this.computePassEncoder}endComputePass(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}flush(){if(!this.commandEncoder)return;Fe(),this.endComputePass();let e;this.queryType!=="none"&&(this.commandEncoder.resolveQuerySet(this.querySet,0,this.pendingDispatchNumber*2,this.queryResolveBuffer,0),e=this.device.createBuffer({size:this.pendingDispatchNumber*2*8,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),this.pendingQueries.set(e,this.pendingKernels),this.pendingKernels=[],this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.pendingDispatchNumber*2*8)),this.device.queue.submit([this.commandEncoder.finish()]),this.gpuDataManager.refreshPendingBuffers(),this.commandEncoder=null,this.pendingDispatchNumber=0,this.queryType!=="none"&&e.mapAsync(GPUMapMode.READ).then(()=>{var a;let t=new BigUint64Array(e.getMappedRange()),r=this.pendingQueries.get(e);for(let n=0;n<t.length/2;n++){let i=r[n],s=i.kernelId,u=this.kernels.get(s),d=u.kernelType,l=u.kernelName,c=i.programName,f=i.inputTensorViews,m=i.outputTensorViews,g=t[n*2],_=t[n*2+1];typeof this.queryTimeBase>"u"&&(this.queryTimeBase=g);let b=Number(g-this.queryTimeBase),x=Number(_-this.queryTimeBase);if(!Number.isSafeInteger(b)||!Number.isSafeInteger(x))throw new RangeError("incorrect timestamp range");if((a=this.env.webgpu.profiling)!=null&&a.ondata)this.env.webgpu.profiling.ondata({version:1,inputsMetadata:f.map(w=>({dims:w.dims,dataType:it(w.dataType)})),outputsMetadata:m.map(w=>({dims:w.dims,dataType:it(w.dataType)})),kernelId:s,kernelType:d,kernelName:l,programName:c,startTime:b,endTime:x});else{let w="";f.forEach((k,S)=>{w+=`input[${S}]: [${k.dims}
2826] | ${it(k.dataType)}, `});let $="";m.forEach((k,S)=>{$+=`output[${S}]: [${k.dims}] | ${it(k.dataType)}, `}),`${s}${d}${l}${c}${w}${$}`,x-b}sr("GPU",`${c}::${g}::${_}`)}e.unmap(),this.pendingQueries.delete(e)}),Ue()}run(e,t,r,a,n,i){Fe(e.name);let s=[];for(let $=0;$<t.length;++$){let k=t[$].data;if(k===0)continue;let S=this.gpuDataManager.get(k);if(!S)throw new Error(`no GPU data for input: ${k}`);s.push(S)}let{outputs:u,dispatchGroup:d,programUniforms:l}=e.getRunData(t),c=r.length===0?u.map(($,k)=>k):r;if(c.length!==u.length)throw new Error(`Output size ${c.length} must be equal to ${u.length}.`);let f=[],m=[];for(let $=0;$<u.length;++$){if(!Number.isInteger(c[$])||c[$]<-3||c[$]>=i)throw new Error(`Invalid output index: ${c[$]}`);if(c[$]===-3)continue;let k=c[$]===-1,S=c[$]===-2,T=k||S?n(u[$].dataType,u[$].dims):a(c[$],u[$].dataType,u[$].dims);if(f.push(T),T.data===0)continue;let E=this.gpuDataManager.get(T.data);if(!E)throw new Error(`no GPU data for output: ${T.data}`);if(k&&this.temporaryData.push(E),S){let z=this.kernelPersistentData.get(this.currentKernelId);z||(z=[],this.kernelPersistentData.set(this.currentKernelId,z)),z.push(E)}m.push(E)}if(s.length!==t.length||m.length!==f.length){if(m.length===0)return Ue(e.name),f;throw new Error(`Program ${e.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.`)}let g;if(l){let $=0,k=[];l.forEach(z=>{let A=typeof z.data=="number"?[z.data]:z.data;if(A.length===0)return;let O=z.type===10?2:4,q,X;z.type===10?(X=A.length>4?16:A.length>2?8:A.length*O,q=A.length>4?16:O*A.length):(X=A.length<=2?A.length*O:16,q=16),$=Math.ceil($/X)*X,k.push($);let H=z.type===10?8:4;$+=A.length>4?Math.ceil(A.length/H)*q:A.length*O});let S=16;$=Math.ceil($/S)*S;let T=new ArrayBuffer($);l.forEach((z,A)=>{let O=k[A],q=typeof z.data=="number"?[z.data]:z.data;if(z.type===6)new Int32Array(T,O,q.length).set(q);else if(z.type===12)new Uint32Array(T,O,q.length).set(q);else if(z.type===10)new Uint16Array(T,O,q.length).set(q);else if(z.type===1)new Float32Array(T,O,q.length).set(q);else throw new Error(`Unsupported uniform type: ${it(z.type)}`)});let E=this.gpuDataManager.create($,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.device.queue.writeBuffer(E.buffer,0,T,0,$),this.gpuDataManager.release(E.id),g={offset:0,size:$,buffer:E.buffer}}let _=this.programManager.normalizeDispatchGroupSize(d),b=_[1]===1&&_[2]===1,x=Ll(e,t,b),w=this.programManager.getArtifact(x);if(w||(w=this.programManager.build(e,_),this.programManager.setArtifact(x,w),ue("info",()=>`[artifact] key: ${x}, programName: ${e.name}`)),l&&w.uniformVariablesInfo){if(l.length!==w.uniformVariablesInfo.length)throw new Error(`Uniform variables count mismatch: expect ${w.uniformVariablesInfo.length}, got ${l.length} in program "${w.programInfo.name}".`);for(let $=0;$<l.length;$++){let k=l[$],S=k.type,T=typeof k.data=="number"?1:k.data.length,[E,z]=w.uniformVariablesInfo[$];if(S!==E||T!==z)throw new Error(`Uniform variable ${$} mismatch: expect type ${E} with size ${z}, got type ${S} with size ${T} in program "${w.programInfo.name}".`)}}if(ue("info",()=>`[ProgramManager] run "${e.name}" (key=${x}) with ${_[0]}x${_[1]}x${_[2]}`),this.queryType!=="none"||this.sessionStatus==="capturing"){let $={kernelId:this.currentKernelId,programName:w.programInfo.name,inputTensorViews:t,outputTensorViews:f};this.pendingKernels.push($),this.sessionStatus==="capturing"&&this.capturedPendingKernels.get(this.currentSessionId).push($)}return this.programManager.run(w,s,m,_,g),Ue(e.name),f}upload(e,t){this.gpuDataManager.upload(e,t)}memcpy(e,t){this.gpuDataManager.memcpy(e,t)}async download(e,t){await this.gpuDataManager.download(e,t)}alloc(e){return this.gpuDataManager.create(e).id}free(e){return this.gpuDataManager.release(e)}createKernel(e,t,r,a){let n=hf.get(e);if(!n)throw new Error(`kernel not implemented: ${e}`);let i={kernelType:e,kernelName:a,kernelEntry:n[0],attributes:[n[1],r]};this.kernels.set(t,i)}releaseKernel(e){let t=this.kernelPersistentData.get(e);if(t){for(let r of t)this.gpuDataManager.release(r.id);this.kernelPersistentData.delete(e)}this.kernelCustomData.delete(e),this.kernels.delete(e)}computeKernel(e,t,r){let a=this.kernels.get(e);if(!a)throw new Error(`kernel not created: ${e}`);let n=a.kernelType,i=a.kernelName,s=a.kernelEntry,u=a.attributes;if(this.currentKernelId!==null)throw new Error(`kernel "[${n}] ${i}" is not allowed to be called recursively`);this.currentKernelId=e,u[0]&&(u[1]=u[0](u[1]),u[0]=void 0),ue("info",()=>`[WebGPU] Start to run kernel "[${n}] ${i}"...`);let d=this.env.debug;this.temporaryData=[];try{return d&&this.device.pushErrorScope("validation"),s(t,u[1]),0}
2826catch(l){return r.push(Promise.resolve(`[WebGPU] Kernel "[${n}] ${i}" failed. ${l}`)),1}finally{d&&r.push(this.device.popErrorScope().then(l=>l?`GPU validation error for kernel "[${n}] ${i}": ${l.message}`:null));for(let l of this.temporaryData)this.gpuDataManager.release(l.id);this.temporaryData=[],this.currentKernelId=null}}registerBuffer(e,t,r,a){let n=this.sessionExternalDataMapping.get(e);n||(n=new Map,this.sessionExternalDataMapping.set(e,n));let i=n.get(t),s=this.gpuDataManager.registerExternalBuffer(r,a,i);return n.set(t,[s,r]),s}unregisterBuffers(e){let t=this.sessionExternalDataMapping.get(e);t&&(t.forEach(r=>this.gpuDataManager.unregisterExternalBuffer(r[0])),this.sessionExternalDataMapping.delete(e))}getBuffer(e){let t=this.gpuDataManager.get(e);if(!t)throw new Error(`no GPU data for buffer: ${e}`);return t.buffer}createDownloader(e,t,r){return async()=>{let a=await pa(this,e,t);return Na(a.buffer,r)}}writeTimestamp(e){this.queryType==="inside-passes"&&this.computePassEncoder.writeTimestamp(this.querySet,e)}setQueryType(){var e;this.queryType="none",(((e=this.env.webgpu.profiling)==null?void 0:e.mode)==="default"||(typeof this.env.trace>"u"?this.env.wasm.trace:this.env.trace))&&(this.device.features.has("chromium-experimental-timestamp-query-inside-passes")?this.queryType="inside-passes":this.device.features.has("timestamp-query")&&(this.queryType="at-passes"),this.queryType!=="none"&&typeof this.querySet>"u"&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxDispatchNumber*2}),this.queryResolveBuffer=this.device.createBuffer({size:this.maxDispatchNumber*2*8,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE})))}captureBegin(){ue("info","captureBegin"),this.capturedCommandList.get(this.currentSessionId)||this.capturedCommandList.set(this.currentSessionId,[]),this.capturedPendingKernels.get(this.currentSessionId)||this.capturedPendingKernels.set(this.currentSessionId,[]),this.flush(),this.sessionStatus="capturing"}captureEnd(){ue("info","captureEnd"),this.flush(),this.sessionStatus="default"}replay(){ue("info","replay"),this.sessionStatus="replaying";let e=this.capturedCommandList.get(this.currentSessionId),t=this.capturedPendingKernels.get(this.currentSessionId),r=e.length;this.pendingKernels=[];for(let a=0;a<r;a++){let n=this.getComputePassEncoder(),i=e[a];this.writeTimestamp(this.pendingDispatchNumber*2),n.setPipeline(i.computePipeline),n.setBindGroup(0,i.bindGroup),n.dispatchWorkgroups(...i.dispatchGroup),this.writeTimestamp(this.pendingDispatchNumber*2+1),this.pendingDispatchNumber++,this.queryType!=="none"&&this.pendingKernels.push(t[a]),(this.pendingDispatchNumber>=this.maxDispatchNumber||this.queryType==="at-passes")&&this.endComputePass(),this.pendingDispatchNumber>=this.maxDispatchNumber&&this.flush()}this.flush(),this.sessionStatus="default"}onCreateSession(){this.gpuDataManager.onCreateSession()}onReleaseSession(e){this.unregisterBuffers(e),this.capturedCommandList.has(e)&&this.capturedCommandList.delete(e),this.capturedPendingKernels.has(e)&&this.capturedPendingKernels.delete(e),this.gpuDataManager.onReleaseSession(e)}onRunStart(e){this.currentSessionId=e,this.setQueryType()}}}),yf={};Pt(yf,{init:()=>bf});var Cr,jl,bf,mg=U(()=>{J(),at(),re(),xm(),Cr=class $f{constructor(t,r,a,n){this.module=t,this.dataType=r,this.data=a,this.dims=n}getFloat32Array(){if(this.dataType!==1)throw new Error("Invalid data type");let t=C.size(this.dims);return t===0?new Float32Array:new Float32Array(this.module.HEAP8.buffer,this.data,t)}getBigInt64Array(){if(this.dataType!==7)throw new Error("Invalid data type");let t=C.size(this.dims);return t===0?new BigInt64Array:new BigInt64Array(this.module.HEAP8.buffer,this.data,t)}getInt32Array(){if(this.dataType!==6)throw new Error("Invalid data type");let t=C.size(this.dims);return t===0?new Int32Array:new Int32Array(this.module.HEAP8.buffer,this.data,t)}getUint16Array(){if(this.dataType!==10&&this.dataType!==4)throw new Error("Invalid data type");let t=C.size(this.dims);return t===0?new Uint16Array:new Uint16Array(this.module.HEAP8.buffer,this.data,t)}reshape(t){if(C.size(t)!==C.size(this.dims))throw new Error("Invalid new shape");return new $f(this.module,this.dataType,this.data,t)}},jl=class{constructor(e,t,r){this.module=e,this.backend=t,this.customDataOffset=0,this.customDataSize=0,this.adapterInfo=t.adapterInfo;let a=e.PTR_SIZE,n=r/e.PTR_SIZE,i=a===4?"i32":"i64";this.opKernelContext=Number(e.getValue(a*n++,i));let s=Number(e.getValue(a*n++,i));this.outputCount=Number(e.getValue(a*n++,i)),this.customDataOffset=Number(e.getValue(a*n++,"*")),this.customDataSize=Number(e.getValue(a*n++,i));let u=[];for(let d=0;d<s;d++){let l=Number(e.getValue(a*n++,i)),c=Number(e.getValue(a*n++,"*")),f=Number(e.getValue(a*n++,i)),m=[];for(let g=0;g<f;g++)m.push(Number(e.getValue(a*n++,i)));u.push(new Cr(e,l,c,m))}this.inputs=u}get kernelCustomData(){return this.backend.currentKernelCustomData}get customDataBuffer(){return this.module.HEAPU8.subarray(this.customDataOffset,this.customDataOffset+this.customDataSize)}compute(e,t){var s;let r=((s=t==null?void 0:t.inputs)==null?void 0:s.map(u=>typeof u=="number"?this.inputs[u]:u))??this.inputs,a=(t==null?void 0:t.outputs)??[],n=(u,d,l)=>new Cr(this.module,d,this.output(u,l),l),i=(u,d)=>{let l=St(u,d);if(!l)throw new Error(`Unsupported data type: ${u}`);let c=l>0?this.backend.gpuDataManager.create(l).id:0;return new Cr(this.module,u,c,d)};return this.backend.run(e,r,a,n,i,this.outputCount)}output(e,t){let r=this.module.stackSave();try{let a=this.module.PTR_SIZE,n=a===4?"i32":"i64",i=this.module.stackAlloc((1+t.length)*a);this.module.setValue(i,t.length,n);for(let s=0;s<t.length;s++)this.module.setValue(i+a*(s+1),t[s],n);
2826return this.module._JsepOutput(this.opKernelContext,e,i)}catch(a){throw new Error(`Failed to generate kernel's output[${e}] with dims [${t}]. If you are running with pre-allocated output, please make sure the output type/dims are correct. Error: ${a}`)}finally{this.module.stackRestore(r)}}},bf=async(e,t,r,a)=>{let n=t.jsepInit;if(!n)throw new Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support.");if(e==="webgpu"){let i=(hg(),nr(gf)).WebGpuBackend,s=new i;await s.initialize(r,a),n("webgpu",[s,u=>s.alloc(Number(u)),u=>s.free(u),(u,d,l,c=!1)=>{if(c)ue("verbose",()=>`[WebGPU] jsepCopyGpuToGpu: src=${Number(u)}, dst=${Number(d)}, size=${Number(l)}`),s.memcpy(Number(u),Number(d));else{ue("verbose",()=>`[WebGPU] jsepCopyCpuToGpu: dataOffset=${Number(u)}, gpuDataId=${Number(d)}, size=${Number(l)}`);let f=t.HEAPU8.subarray(Number(u>>>0),Number(u>>>0)+Number(l));s.upload(Number(d),f)}},async(u,d,l)=>{ue("verbose",()=>`[WebGPU] jsepCopyGpuToCpu: gpuDataId=${u}, dataOffset=${d}, size=${l}`),await s.download(Number(u),()=>t.HEAPU8.subarray(Number(d)>>>0,Number(d+l)>>>0))},(u,d,l)=>s.createKernel(u,Number(d),l,t.UTF8ToString(t._JsepGetNodeName(Number(d)))),u=>s.releaseKernel(u),(u,d,l,c)=>{ue("verbose",()=>`[WebGPU] jsepRun: sessionHandle=${l}, kernel=${u}, contextDataOffset=${d}`);let f=new jl(t,s,Number(d));return s.computeKernel(Number(u),f,c)},()=>s.captureBegin(),()=>s.captureEnd(),()=>s.replay()])}else{let i=new zd(r);n("webnn",[i,()=>i.reserveTensorId(),s=>i.releaseTensorId(s),async(s,u,d,l,c)=>i.ensureTensor(s,u,d,l,c),(s,u)=>{i.uploadTensor(s,u)},async(s,u)=>i.downloadTensor(s,u)])}}}),Hl,Fa,Ka,ct,Gl,aa,Wr,Za,Qa,na,Xa,Ya,Ja,wf=U(()=>{$m(),wm(),J(),zt(),Ca(),xd(),Hl=(e,t)=>{_e()._OrtInit(e,t)!==0&&he("Can't initialize onnxruntime.")},Fa=async e=>{Hl(e.wasm.numThreads,Nr(e.logLevel))},Ka=async(e,t)=>{var r,a;(a=(r=_e()).asyncInit)==null||a.call(r);{let n=(mg(),nr(yf)).init;if(t==="webgpu"){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not supported in current environment");let i=e.webgpu.adapter;if(i){if(typeof i.limits!="object"||typeof i.features!="object"||typeof i.requestDevice!="function")throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let s=e.webgpu.powerPreference;if(s!==void 0&&s!=="low-power"&&s!=="high-performance")throw new Error(`Invalid powerPreference setting: "${s}"`);let u=e.webgpu.forceFallbackAdapter;if(u!==void 0&&typeof u!="boolean")throw new Error(`Invalid forceFallbackAdapter setting: "${u}"`);if(i=await navigator.gpu.requestAdapter({powerPreference:s,forceFallbackAdapter:u}),!i)throw new Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}await n("webgpu",_e(),e,i)}if(t==="webnn"){if(typeof navigator>"u"||!navigator.ml)throw new Error("WebNN is not supported in current environment");await n("webnn",_e(),e)}}},ct=new Map,Gl=e=>{let t=_e(),r=t.stackSave();try{let a=t.PTR_SIZE,n=t.stackAlloc(2*a);t._OrtGetInputOutputCount(e,n,n+a)!==0&&he("Can't get session input/output count.");let i=a===4?"i32":"i64";return[Number(t.getValue(n,i)),Number(t.getValue(n+a,i))]}finally{t.stackRestore(r)}},aa=(e,t)=>{let r=_e(),a=r.stackSave(),n=0;try{let i=r.PTR_SIZE,s=r.stackAlloc(2*i);r._OrtGetInputOutputMetadata(e,t,s,s+i)!==0&&he("Can't get session input/output metadata.");let u=Number(r.getValue(s,"*"));n=Number(r.getValue(s+i,"*"));let d=r.HEAP32[n/4];if(d===0)return[u,0];let l=r.HEAPU32[n/4+1],c=[];for(let f=0;f<l;f++){let m=Number(r.getValue(n+8+f*i,"*"));c.push(m!==0?r.UTF8ToString(m):Number(r.getValue(n+8+(f+l)*i,"*")))}return[u,d,c]}finally{r.stackRestore(a),n!==0&&r._OrtFree(n)}},Wr=e=>{let t=_e(),r=t._malloc(e.byteLength);if(r===0)throw new Error(`Can't create a session. failed to allocate a buffer of size ${e.byteLength}.`);return t.HEAPU8.set(e,r),[r,e.byteLength]},Za=async(e,t)=>{var f,m,g,_;let r,a,n=_e();Array.isArray(e)?[r,a]=e:e.buffer===n.HEAPU8.buffer?[r,a]=[e.byteOffset,e.byteLength]:[r,a]=Wr(e);let i=0,s=0,u=0,d=[],l=[],c=[];
2826try{if([s,d]=await vd(t),(t==null?void 0:t.externalData)&&n.mountExternalData){let A=[];for(let O of t.externalData){let q=typeof O=="string"?O:O.path;A.push(Ra(typeof O=="string"?O:O.data).then(X=>{n.mountExternalData(q,X)}))}await Promise.all(A)}for(let A of(t==null?void 0:t.executionProviders)??[])if((typeof A=="string"?A:A.name)==="webnn"){if(n.shouldTransferToMLTensor=!1,typeof A!="string"){let O=A,q=O==null?void 0:O.context,X=O==null?void 0:O.gpuDevice,H=O==null?void 0:O.deviceType,Q=O==null?void 0:O.powerPreference;q?n.currentContext=q:X?n.currentContext=await n.webnnCreateMLContext(X):n.currentContext=await n.webnnCreateMLContext({deviceType:H,powerPreference:Q})}else n.currentContext=await n.webnnCreateMLContext();break}i=await n._OrtCreateSession(r,a,s),(f=n.webgpuOnCreateSession)==null||f.call(n,i),i===0&&he("Can't create a session."),(m=n.jsepOnCreateSession)==null||m.call(n),n.currentContext&&(n.webnnRegisterMLContext(i,n.currentContext),n.currentContext=void 0,n.shouldTransferToMLTensor=!0);let[b,x]=Gl(i),w=!!(t!=null&&t.enableGraphCapture),$=[],k=[],S=[],T=[],E=[];for(let A=0;A<b;A++){let[O,q,X]=aa(i,A);O===0&&he("Can't get an input name."),l.push(O);let H=n.UTF8ToString(O);$.push(H),S.push(q===0?{name:H,isTensor:!1}:{name:H,isTensor:!0,type:it(q),shape:X})}for(let A=0;A<x;A++){let[O,q,X]=aa(i,A+b);O===0&&he("Can't get an output name."),c.push(O);let H=n.UTF8ToString(O);k.push(H),T.push(q===0?{name:H,isTensor:!1}:{name:H,isTensor:!0,type:it(q),shape:X});{if(w&&(t==null?void 0:t.preferredOutputLocation)===void 0){E.push("gpu-buffer");continue}let Q=typeof(t==null?void 0:t.preferredOutputLocation)=="string"?t.preferredOutputLocation:((g=t==null?void 0:t.preferredOutputLocation)==null?void 0:g[H])??"cpu";if(Q!=="cpu"&&Q!=="cpu-pinned"&&Q!=="gpu-buffer"&&Q!=="ml-tensor")throw new Error(`Not supported preferred output location: ${Q}.`);if(w&&Q!=="gpu-buffer")throw new Error(`Not supported preferred output location: ${Q}. Only 'gpu-buffer' location is supported when enableGraphCapture is true.`);E.push(Q)}}let z=null;return E.some(A=>A==="gpu-buffer"||A==="ml-tensor")&&(u=n._OrtCreateBinding(i),u===0&&he("Can't create IO binding."),z={handle:u,outputPreferredLocations:E,outputPreferredLocationsEncoded:E.map(A=>la(A))}),ct.set(i,[i,l,c,z,w,!1]),[i,$,k,S,T]}catch(b){throw l.forEach(x=>n._OrtFree(x)),c.forEach(x=>n._OrtFree(x)),u!==0&&n._OrtReleaseBinding(u)!==0&&he("Can't release IO binding."),i!==0&&n._OrtReleaseSession(i)!==0&&he("Can't release session."),b}finally{n._free(r),s!==0&&n._OrtReleaseSessionOptions(s)!==0&&he("Can't release session options."),d.forEach(b=>n._free(b)),(_=n.unmountExternalData)==null||_.call(n)}},Qa=e=>{var d,l,c;let t=_e(),r=ct.get(e);if(!r)throw new Error(`cannot release session. invalid session id: ${e}`);let[a,n,i,s,u]=r;s&&(u&&t._OrtClearBoundOutputs(s.handle)!==0&&he("Can't clear bound outputs."),t._OrtReleaseBinding(s.handle)!==0&&he("Can't release IO binding.")),(d=t.jsepOnReleaseSession)==null||d.call(t,e),(l=t.webnnOnReleaseSession)==null||l.call(t,e),(c=t.webgpuOnReleaseSession)==null||c.call(t,e),n.forEach(f=>t._OrtFree(f)),i.forEach(f=>t._OrtFree(f)),t._OrtReleaseSession(a)!==0&&he("Can't release session."),ct.delete(e)},na=async(e,t,r,a,n,i,s=!1)=>{if(!e){t.push(0);return}let u=_e(),d=u.PTR_SIZE,l=e[0],c=e[1],f=e[3],m=f,g,_;if(l==="string"&&(f==="gpu-buffer"||f==="ml-tensor"))throw new Error("String tensor is not supported on GPU.");if(s&&f!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${i} when enableGraphCapture is true.`);if(f==="gpu-buffer"){let w=e[2].gpuBuffer;_=St(Rt(l),c);{let $=u.jsepRegisterBuffer;if(!$)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');g=$(a,i,w,_)}}else if(f==="ml-tensor"){let w=e[2].mlTensor;_=St(Rt(l),c);let $=u.webnnRegisterMLTensor;if(!$)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');g=$(a,w,Rt(l),c)}else{let w=e[2];if(Array.isArray(w)){_=d*w.length,g=u._malloc(_),r.push(g);for(let $=0;$<w.length;$++){if(typeof w[$]!="string")throw new TypeError(`tensor data at index ${$} is not a string`);u.setValue(g+$*d,He(w[$],r),"*")}}else{let $=u.webnnIsGraphInput;if(l!=="string"&&$){let k=u.UTF8ToString(n);if($(a,k)){let S=Rt(l);_=St(S,c),m="ml-tensor";let T=u.webnnCreateTemporaryTensor,E=u.webnnUploadTensor;if(!T||!E)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');let z=await T(a,S,c);
vendor: 1,305 bytes, line 2826
2826E(z,new Uint8Array(w.buffer,w.byteOffset,w.byteLength)),g=z}else _=w.byteLength,g=u._malloc(_),r.push(g),u.HEAPU8.set(new Uint8Array(w.buffer,w.byteOffset,_),g)}else _=w.byteLength,g=u._malloc(_),r.push(g),u.HEAPU8.set(new Uint8Array(w.buffer,w.byteOffset,_),g)}}let b=u.stackSave(),x=u.stackAlloc(4*c.length);try{c.forEach(($,k)=>u.setValue(x+k*d,$,d===4?"i32":"i64"));let w=u._OrtCreateTensor(Rt(l),g,_,x,c.length,la(m));w===0&&he(`Can't create tensor for input/output. session=${a}, index=${i}.`),t.push(w)}finally{u.stackRestore(b)}},Xa=async(e,t,r,a,n,i)=>{var X,H,Q,oe;let s=_e(),u=s.PTR_SIZE,d=ct.get(e);if(!d)throw new Error(`cannot run inference. invalid session id: ${e}`);let l=d[0],c=d[1],f=d[2],m=d[3],g=d[4],_=d[5],b=t.length,x=a.length,w=0,$=[],k=[],S=[],T=[],E=s.stackSave(),z=s.stackAlloc(b*u),A=s.stackAlloc(b*u),O=s.stackAlloc(x*u),q=s.stackAlloc(x*u);try{[w,$]=wd(i);for(let W=0;W<b;W++)await na(r[W],k,T,e,c[t[W]],t[W],g);for(let W=0;W<x;W++)await na(n[W],S,T,e,f[a[W]],b+a[W],g);for(let W=0;W<b;W++)s.setValue(z+W*u,k[W],"*"),s.setValue(A+W*u,c[t[W]],"*");for(let W=0;W<x;W++)s.setValue(O+W*u,S[W],"*"),s.setValue(q+W*u,f[a[W]],"*");if(m&&!_){let{handle:W,outputPreferredLocations:le,outputPreferredLocationsEncoded:ee}=m;if(c.length!==b)throw new Error(`input count from feeds (${b}
2826) is expected to be always equal to model's input count (${c.length}).`);for(let ae=0;ae<b;ae++){let D=t[ae];await s._OrtBindInput(W,c[D],k[ae])!==0&&he(`Can't bind input[${ae}] for session=${e}.`)}for(let ae=0;ae<x;ae++){let D=a[ae];(X=n[ae])!=null&&X[3]?s._OrtBindOutput(W,f[D],S[ae],0)!==0&&he(`Can't bind pre-allocated output[${ae}] for session=${e}.`):s._OrtBindOutput(W,f[D],0,ee[D])!==0&&he(`Can't bind output[${ae}] to ${le[ae]} for session=${e}.`)}ct.set(e,[l,c,f,m,g,!0])}(H=s.jsepOnRunStart)==null||H.call(s,l),(Q=s.webnnOnRunStart)==null||Q.call(s,l);let te;m?te=await s._OrtRunWithBinding(l,m.handle,x,O,w):te=await s._OrtRun(l,A,z,b,q,x,O,w),te!==0&&he("failed to call OrtRun().");let V=[];for(let W=0;W<x;W++){let le=Number(s.getValue(O+W*u,"*"));if(le===S[W]){V.push(n[W]);continue}let ee=s.stackSave(),ae=s.stackAlloc(4*u),D=!1,P,j=0;try{s._OrtGetTensorData(le,ae,ae+u,ae+2*u,ae+3*u)!==0&&he(`Can't access output tensor data on index ${W}.`);let se=u===4?"i32":"i64",ke=Number(s.getValue(ae,se));j=s.getValue(ae+u,"*");let N=s.getValue(ae+u*2,"*"),me=Number(s.getValue(ae+u*3,se)),Ne=[];for(let xe=0;xe<me;xe++)Ne.push(Number(s.getValue(N+xe*u,se)));s._OrtFree(N)!==0&&he("Can't free memory for tensor dims.");let Ce=Ne.reduce((xe,fe)=>xe*fe,1);P=it(ke);let gt=m==null?void 0:m.outputPreferredLocations[a[W]];if(P==="string"){if(gt==="gpu-buffer"||gt==="ml-tensor")throw new Error("String tensor is not supported on GPU.");let xe=[];for(let fe=0;fe<Ce;fe++){let Ze=s.getValue(j+fe*u,"*"),Ut=s.getValue(j+(fe+1)*u,"*"),_t=fe===Ce-1?void 0:Ut-Ze;xe.push(s.UTF8ToString(Ze,_t))}V.push([P,Ne,xe,"cpu"])}else if(gt==="gpu-buffer"&&Ce>0){let xe=s.jsepGetBuffer;if(!xe)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let fe=xe(j),Ze=St(ke,Ce);if(Ze===void 0||!Oa(P))throw new Error(`Unsupported data type: ${P}`);D=!0,V.push([P,Ne,{gpuBuffer:fe,download:s.jsepCreateDownloader(fe,Ze,P),dispose:()=>{s._OrtReleaseTensor(le)!==0&&he("Can't release tensor.")}},"gpu-buffer"])}else if(gt==="ml-tensor"&&Ce>0){let xe=s.webnnEnsureTensor,fe=s.webnnIsInt64Supported;if(!xe||!fe)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(St(ke,Ce)===void 0||!Ba(P))throw new Error(`Unsupported data type: ${P}`);if(P==="int64"&&!fe(e))throw new Error('preferredLocation "ml-tensor" for int64 output is not supported by current WebNN Context.');let Ze=await xe(e,j,ke,Ne,!1);D=!0,V.push([P,Ne,{mlTensor:Ze,download:s.webnnCreateMLTensorDownloader(j,P),dispose:()=>{s.webnnReleaseTensorId(j),s._OrtReleaseTensor(le)}},"ml-tensor"])}else{let xe=Aa(P),fe=new xe(Ce);new Uint8Array(fe.buffer,fe.byteOffset,fe.byteLength).set(s.HEAPU8.subarray(j,j+fe.byteLength)),V.push([P,Ne,fe,"cpu"])}}finally{s.stackRestore(ee),P==="string"&&j&&s._free(j),D||s._OrtReleaseTensor(le),(oe=s.webnnOnRunEnd)==null||oe.call(s,l)}}return m&&!g&&(s._OrtClearBoundOutputs(m.handle)!==0&&he("Can't clear bound outputs."),ct.set(e,[l,c,f,m,g,!1])),V}finally{s.stackRestore(E),k.forEach(te=>s._OrtReleaseTensor(te)),S.forEach(te=>s._OrtReleaseTensor(te)),T.forEach(te=>s._free(te)),w!==0&&s._OrtReleaseRunOptions(w),$.forEach(te=>s._free(te))}},Ya=e=>{let t=_e(),r=ct.get(e);if(!r)throw new Error("invalid session id");let a=r[0],n=t._OrtEndProfiling(a);n===0&&he("Can't get an profile file name."),t._OrtFree(n)},Ja=e=>{let t=[];for(let r of e){let a=r[2];!Array.isArray(a)&&"buffer"in a&&t.push(a.buffer)}return t}}),ft,Ae,Bt,Yt,Jt,Ar,sa,Or,wt,vt,Fl,vf,xf,Sf,kf,Tf,If,Ef,zf=U(()=>{Ke(),wf(),zt(),Ea(),ft=()=>!!ye.wasm.proxy&&typeof document<"u",Bt=!1,Yt=!1,Jt=!1,Or=new Map,wt=(e,t)=>{let r=Or.get(e);r?r.push(t):Or.set(e,[t])},vt=()=>{if(Bt||!Yt||Jt||!Ae)throw new Error("worker not ready")},Fl=e=>{switch(e.data.type){case"init-wasm":Bt=!1,e.data.err?(Jt=!0,sa[1](e.data.err)):(Yt=!0,sa[0]()),Ar&&(URL.revokeObjectURL(Ar),Ar=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let t=Or.get(e.data.type);e.data.err?t.shift()[1](e.data.err):t.shift()[0](e.data.out);break}}},vf=async()=>{if(!Yt){if(Bt)throw new Error("multiple calls to 'initWasm()' detected.");
vendor: 4,351 bytes, line 2826
2826if(Jt)throw new Error("previous call to 'initWasm()' failed.");if(Bt=!0,ft())return new Promise((e,t)=>{Ae==null||Ae.terminate(),bd().then(([r,a])=>{try{Ae=a,Ae.onerror=i=>t(i),Ae.onmessage=Fl,sa=[e,t];let n={type:"init-wasm",in:ye};!n.in.wasm.wasmPaths&&(r||ua)&&(n.in.wasm.wasmPaths={wasm:new URL("/assets/ort-wasm-simd-threaded.jsepB0T3yYHD.wasm",import.meta.url).href}),Ae.postMessage(n),Ar=r}catch(n){t(n)}},t)});try{await za(ye.wasm),await Fa(ye),Yt=!0}catch(e){throw Jt=!0,e}finally{Bt=!1}}},xf=async e=>{if(ft())return vt(),new Promise((t,r)=>{wt("init-ep",[t,r]);let a={type:"init-ep",in:{epName:e,env:ye}};Ae.postMessage(a)});await Ka(ye,e)},Sf=async e=>ft()?(vt(),new Promise((t,r)=>{wt("copy-from",[t,r]);let a={type:"copy-from",in:{buffer:e}};Ae.postMessage(a,[e.buffer])})):Wr(e),kf=async(e,t)=>{if(ft()){if(t!=null&&t.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return vt(),new Promise((r,a)=>{wt("create",[r,a]);let n={type:"create",in:{model:e,options:{...t}}},i=[];e instanceof Uint8Array&&i.push(e.buffer),Ae.postMessage(n,i)})}else return Za(e,t)},Tf=async e=>{if(ft())return vt(),new Promise((t,r)=>{wt("release",[t,r]);let a={type:"release",in:e};Ae.postMessage(a)});Qa(e)},If=async(e,t,r,a,n,i)=>{if(ft()){if(r.some(s=>s[3]!=="cpu"))throw new Error("input tensor on GPU is not supported for proxy.");if(n.some(s=>s))throw new Error("pre-allocated output tensor is not supported for proxy.");return vt(),new Promise((s,u)=>{wt("run",[s,u]);let d=r,l={type:"run",in:{sessionId:e,inputIndices:t,inputs:d,outputIndices:a,options:i}};Ae.postMessage(l,Ja(d))})}else return Xa(e,t,r,a,n,i)},Ef=async e=>{if(ft())return vt(),new Promise((t,r)=>{wt("end-profiling",[t,r]);let a={type:"end-profiling",in:e};Ae.postMessage(a)});Ya(e)}}),oa,Kl,Cf,gg=U(()=>{Ke(),zf(),J(),Ia(),xd(),oa=(e,t)=>{switch(e.location){case"cpu":return[e.type,e.dims,e.data,"cpu"];case"gpu-buffer":return[e.type,e.dims,{gpuBuffer:e.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[e.type,e.dims,{mlTensor:e.mlTensor},"ml-tensor"];default:throw new Error(`invalid data location: ${e.location} for ${t()}`)}},Kl=e=>{switch(e[3]){case"cpu":return new Ge(e[0],e[2],e[1]);case"gpu-buffer":{let t=e[0];if(!Oa(t))throw new Error(`not supported data type: ${t} for deserializing GPU tensor`);let{gpuBuffer:r,download:a,dispose:n}=e[2];return Ge.fromGpuBuffer(r,{dataType:t,dims:e[1],download:a,dispose:n})}case"ml-tensor":{let t=e[0];if(!Ba(t))throw new Error(`not supported data type: ${t} for deserializing MLTensor tensor`);let{mlTensor:r,download:a,dispose:n}=e[2];return Ge.fromMLTensor(r,{dataType:t,dims:e[1],download:a,dispose:n})}default:throw new Error(`invalid data location: ${e[3]}`)}},Cf=class{async fetchModelAndCopyToWasmMemory(e){return Sf(await Ra(e))}async loadModel(e,t){Fe();let r;typeof e=="string"?r=await this.fetchModelAndCopyToWasmMemory(e):r=e,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await kf(r,t),Ue()}async dispose(){return Tf(this.sessionId)}async run(e,t,r){Fe();let a=[],n=[];Object.entries(e).forEach(f=>{let m=f[0],g=f[1],_=this.inputNames.indexOf(m);if(_===-1)throw new Error(`invalid input '${m}'`);a.push(g),n.push(_)});let i=[],s=[];Object.entries(t).forEach(f=>{let m=f[0],g=f[1],_=this.outputNames.indexOf(m);if(_===-1)throw new Error(`invalid output '${m}'`);i.push(g),s.push(_)});let u=a.map((f,m)=>oa(f,()=>`input "${this.inputNames[n[m]]}"`)),d=i.map((f,m)=>f?oa(f,()=>`output "${this.outputNames[s[m]]}"`):null),l=await If(this.sessionId,n,u,s,d,r),c={};for(let f=0;f<l.length;f++)c[this.outputNames[s[f]]]=i[f]??Kl(l[f]);return Ue(),c}startProfiling(){}endProfiling(){Ef(this.sessionId)}}}),Af={};Pt(Af,{OnnxruntimeWebAssemblyBackend:()=>xa,initializeFlags:()=>va,wasmBackend:()=>Of});var va,xa,Of,_g=U(()=>{Ke(),zf(),gg(),va=()=>{(typeof ye.wasm.initTimeout!="number"||ye.wasm.initTimeout<0)&&(ye.wasm.initTimeout=0);let e=ye.wasm.simd;if(typeof e!="boolean"&&e!==void 0&&e!=="fixed"&&e!=="relaxed"&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${e}". Reset it to \`false\` and ignore SIMD feature checking.`),ye.wasm.simd=!1),typeof ye.wasm.proxy!="boolean"&&(ye.wasm.proxy=!1),typeof ye.wasm.trace!="boolean"&&(ye.wasm.trace=!1),typeof ye.wasm.numThreads!="number"||!Number.isInteger(ye.w
2826asm.numThreads)||ye.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)ye.wasm.numThreads=1;else{let t=typeof navigator>"u"?im("node:os").cpus().length:navigator.hardwareConcurrency;ye.wasm.numThreads=Math.min(4,Math.ceil((t||1)/2))}},xa=class{async init(e){va(),await vf(),await xf(e)}async createInferenceSessionHandler(e,t){let r=new Cf;return await r.loadModel(e,t),r}},Of=new xa});Ke();Ke();Ke();var yg="1.22.0-dev.20250409-89f8206ba4",bg=fd;{let e=(_g(),nr(Af)).wasmBackend;kt("webgpu",e,5),kt("webnn",e,5),kt("cpu",e,10),kt("wasm",e,10)}Object.defineProperty(ye.versions,"web",{value:yg,enumerable:!0});/**
2827* @license
2828* Copyright 2021 Google LLC. All Rights Reserved.
2829* Licensed under the Apache License, Version 2.0 (the "License");
2830* you may not use this file except in compliance with the License.
2831* You may obtain a copy of the License at
2832*
2833* http://www.apache.org/licenses/LICENSE-2.0
2834*
2835* Unless required by applicable law or agreed to in writing, software
2836* distributed under the License is distributed on an "AS IS" BASIS,
2837* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2838* See the License for the specific language governing permissions and
2839* limitations under the License.
2840* =============================================================================
2841*//**
2842 * @license
2843 * Copyright 2020 Google LLC. All Rights Reserved.
2844 * Licensed under the Apache License, Version 2.0 (the "License");
2845 * you may not use this file except in compliance with the License.
2846 * You may obtain a copy of the License at
2847 *
2848 * http://www.apache.org/licenses/LICENSE-2.0
2849 *
2850 * Unless required by applicable law or agreed to in writing, software
2851 * distributed under the License is distributed on an "AS IS" BASIS,
2852 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2853 * See the License for the specific language governing permissions and
2854 * limitations under the License.
2855 * =============================================================================
2856 *//**
2857 * @license
2858 * Copyright 2019 Google LLC. All Rights Reserved.
2859 * Licensed under the Apache License, Version 2.0 (the "License");
2860 * you may not use this file except in compliance with the License.
2861 * You may obtain a copy of the License at
2862 *
2863 * http://www.apache.org/licenses/LICENSE-2.0
2864 *
2865 * Unless required by applicable law or agreed to in writing, software
2866 * distributed under the License is distributed on an "AS IS" BASIS,
2867 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2868 * See the License for the specific language governing permissions and
2869 * limitations under the License.
2870 * =============================================================================
2871 */const wg=Object.freeze(Object.defineProperty({__proto__:null,get InferenceSession(){return Ta},get TRACE(){return sr},get TRACE_FUNC_BEGIN(){return Fe},get TRACE_FUNC_END(){return Ue},get Tensor(){return Ge},default:bg,get env(){return ye},get registerBackend(){return kt}},Symbol.toStringTag,{value:"Module"}));export{wg as _};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.