@kubohiroya/turbowarp-teachable-machine 3.4.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -69,7 +69,7 @@ That download, and the artifact a composite runtime fetches, is the version-pinn
69
69
  jsDelivr:
70
70
 
71
71
  ```text
72
- https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@3.4.1/dist/tm.js
72
+ https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@3.5.0/dist/tm.js
73
73
  ```
74
74
 
75
75
  The standalone extension loads one reviewed browser runtime that contains one TensorFlow.js 4.22.0
@@ -81,13 +81,13 @@ Composite runtimes can load or embed the same artifact without rewriting a minif
81
81
  bundle:
82
82
 
83
83
  ```text
84
- https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@3.4.1/dist/runtime.js
84
+ https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@3.5.0/dist/runtime.js
85
85
  ```
86
86
 
87
87
  To add the published package to another project:
88
88
 
89
89
  ```sh
90
- pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@3.4.1
90
+ pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@3.5.0
91
91
  ```
92
92
 
93
93
  ### Offline PoseNet bundle API
@@ -458,11 +458,33 @@ Camera Source is not required. It is a separate extension, and this one is also
458
458
  URL, so when it is absent the extension opens and stops its own camera exactly as before. Nothing
459
459
  in a project needs to change for either configuration.
460
460
 
461
+ 3.5.0 changes what the stage shows and what the model is fed. The preview is the camera's own
462
+ video rather than a 320×240 readback canvas scaled to fit, so it carries the camera's resolution
463
+ and aspect ratio. The model is fed the whole square centre crop as a tensor; the canvas used to
464
+ hold only its top 240 rows, so a quarter of the subject's height never reached it. Blocks,
465
+ opcodes and the composition API are unchanged, and a project needs no edit — but a pose model
466
+ will see a subject it was not seeing before, which is the point.
467
+
461
468
  Leasing is fixed in 3.4.1. In 3.4.0 a leased start threw `Webcam canvas does not provide a 2D
462
469
  context` and recognition never began, because the upstream camera helper builds its readback canvas
463
470
  in the same branch that opens the device — the branch a supplied element skips. Use 3.4.1 wherever
464
471
  Camera Source is loaded; 3.4.0 is unaffected only when it is not.
465
472
 
473
+ ## Camera preview and what the model sees
474
+
475
+ The preview on the stage is the camera's own video element, at the camera's resolution and aspect
476
+ ratio. It used to be a 320×240 readback canvas scaled to fit, so a 1080p camera looked like a
477
+ 320×240 one and a 16:9 camera was shown in a 4:3 window.
478
+
479
+ The model is fed a square centre crop of the frame, mirrored, as a tensor. `fromPixels` uploads
480
+ the video to a texture on the WebGL and WebGPU backends and the crop and mirroring are tensor ops,
481
+ so no Canvas2D stage sits between the camera and the model. The square also makes PoseNet's
482
+ padding zero, where the old 4:3 canvas was padded back to square and left the subject about 25%
483
+ smaller than the frames the model was trained on. The crop is the whole square now: the readback
484
+ canvas held only its top 240 rows and discarded the rest.
485
+
486
+ The pose overlay spans the preview and its keypoints are in the camera frame's own coordinates.
487
+
466
488
  The extension performs pose, image, or audio classification in the browser and does not upload
467
489
  camera frames or microphone audio. It does fetch its runtime libraries and the published model. Stop
468
490
  recognition and the camera when the project no longer needs them.
@@ -1,4 +1,4 @@
1
- /*! @license Includes TensorFlow.js WASM backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v3.4.1/THIRD_PARTY_NOTICES.md. */
1
+ /*! @license Includes TensorFlow.js WASM backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v3.5.0/THIRD_PARTY_NOTICES.md. */
2
2
  (function(i){var ki=Object.create,wr=Object.defineProperty,Si=Object.getOwnPropertyDescriptor,Mi=Object.getOwnPropertyNames,Ai=Object.getPrototypeOf,Fr=Object.prototype.hasOwnProperty,dn=(t,a)=>()=>(a||(t((a={exports:{}}).exports,a),t=null),a.exports),xi=(t,a,u,d)=>{if(a&&typeof a=="object"||typeof a=="function")for(var r=Mi(a),n=0,o=r.length,p;n<o;n++)p=r[n],!Fr.call(t,p)&&p!==u&&wr(t,p,{get:(l=>a[l]).bind(null,p),enumerable:!(d=Si(a,p))||d.enumerable});return t},Nr=(t,a,u)=>(u=t!=null?ki(Ai(t)):{},xi(a||!t||!t.__esModule||!Fr.call(t,"default")?wr(u,"default",{value:t,enumerable:!0}):u,t)),G;(function(t){t[t.float32=0]="float32",t[t.int32=1]="int32",t[t.bool=2]="bool",t[t.string=3]="string",t[t.complex64=4]="complex64"})(G||(G={}));var qe;(function(t){t[t.linear=0]="linear",t[t.relu=1]="relu",t[t.relu6=2]="relu6",t[t.prelu=3]="prelu",t[t.leakyrelu=4]="leakyrelu",t[t.sigmoid=5]="sigmoid",t[t.elu=6]="elu"})(qe||(qe={}));var Cr;function Di(t){Cr=t.wasm.cwrap(i._FusedMatMul,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function wi(t){const{inputs:a,backend:u,attrs:d}=t,{a:r,b:n,bias:o,preluActivationWeights:p}=a;if(r.dtype!=="float32"||n.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");const{transposeA:l,transposeB:s,activation:e,leakyreluAlpha:m}=d,f=u.dataIdMap.get(r.dataId).id,g=u.dataIdMap.get(n.dataId).id;let h=0;if(o!=null){const B=u.dataIdMap.get(o.dataId);if(B.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${B.shape.length}.`);h=B.id}const b=p==null?0:u.dataIdMap.get(p.dataId).id,y=qe[e];if(y==null)throw new Error(`${e} activation not yet supported for FusedConv2D in the wasm backend.`);const k=l?r.shape[2]:r.shape[1],I=s?n.shape[1]:n.shape[2],M=i.broadcast_util.assertAndGetBroadcastShape(r.shape.slice(0,-2),n.shape.slice(0,-2)),D=u.makeOutput([...M,k,I],r.dtype),F=u.dataIdMap.get(D.dataId).id,E=new Uint8Array(new Int32Array(r.shape).buffer),O=new Uint8Array(new Int32Array(n.shape).buffer);return Cr(f,E,r.shape.length,g,O,n.shape.length,l,s,y,h,b,m||0,F),D}var Fi={kernelName:i._FusedMatMul,backendName:"wasm",setupFunc:Di,kernelFunc:wi};function W(t,a){let u;function d(n){u=n.wasm.cwrap(t,null,["number","number","number"])}function r(n){const{backend:o,inputs:{x:p}}=n,l=o.dataIdMap.get(p.dataId).id,s=o.makeOutput(p.shape,a||p.dtype),e=o.dataIdMap.get(s.dataId).id;return i.util.sizeFromShape(s.shape)===0||u(l,G[p.dtype],e),s}return{kernelName:t,backendName:"wasm",setupFunc:d,kernelFunc:r}}var Ni=W(i.Abs),Ci=W(i.Acos),Ri=W(i.Acosh);function Y(t,a,u){let d;function r(o){d=o.wasm.cwrap(t,null,["number","array","number","number","array","number","number","number"])}function n(o){const{backend:p,inputs:l}=o,{a:s,b:e}=l,m=p.dataIdMap.get(s.dataId).id,f=p.dataIdMap.get(e.dataId).id,g=u??s.dtype,h=i.backend_util.assertAndGetBroadcastShape(s.shape,e.shape),b=p.makeOutput(h,g);if(i.util.sizeFromShape(h)===0)return b;const y=new Uint8Array(new Int32Array(s.shape).buffer),k=new Uint8Array(new Int32Array(e.shape).buffer),I=p.dataIdMap.get(b.dataId).id;return d(m,y,s.shape.length,f,k,e.shape.length,G[s.dtype],I),b}return{kernelName:t,backendName:"wasm",setupFunc:r,kernelFunc:n}}var _i=!0,Pi=Y(i.Add,_i),Rr;function Ei(t){Rr=t.wasm.cwrap(i.AddN,null,["array","number","number","number"])}function Bi(t){const{inputs:a,backend:u}=t,d=u.makeOutput(a[0].shape,a[0].dtype);if(i.util.sizeFromShape(d.shape)===0)return d;const r=a.map(p=>u.dataIdMap.get(p.dataId).id),n=new Uint8Array(new Int32Array(r).buffer),o=u.dataIdMap.get(d.dataId).id;return Rr(n,r.length,G[d.dtype],o),d}var Ti={kernelName:i.AddN,backendName:"wasm",setupFunc:Ei,kernelFunc:Bi};function on(t){const{inputs:{x:a},backend:u}=t;if(a.dtype==="string")return(0,i.tensor)(u.readSync(a.dataId),a.shape,a.dtype);const d=u.makeOutput(a.shape,a.dtype),r=u.typedArrayFromHeap(a);return u.typedArrayFromHeap(d).set(r),d}var Oi={kernelName:i.Identity,backendName:"wasm",kernelFunc:on},_r;function Wi(t){_r=t.wasm.cwrap(i.Transpose,null,["number","array","number","number","number","array","number"])}function Ie(t){const{inputs:a,backend:u,attrs:d}=t,[r,n]=Hi(a.x.shape,d.perm);let o=!0;for(let h=0;h<n.length;h++)n[h]!==h&&(o=!1);const p=zi(a.x.shape,d.perm),l={dataId:a.x.dataId,shape:r,dtype:a.x.dtype};if(o){const h=on({inputs:a,backend:u});return h.shape=p,h}const s=u.makeOutput(p,l.dtype),e=u.dataIdMap.get(l.dataId).id,m=u.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(n).buffer),g=new Uint8Array(new Int32Array(l.shape).buffer);return _r(e,g,l.shape.length,G[l.dtype],m,f,n.length),s}function zi(t,a){const u=new Array(t.length);for(let d=0;d<u.length;d++)u[d]=t[a[d]];return u}function Hi(t,a){const u=[],d=[];for(let r=0;r<t.length;++r)t[r]!==1&&u.push(t[r]),t[a[r]]!==1&&d.push(a[r]);for(let r=0;r<d.length;++r){let n=-1;for(let o=0;o<d.length;++o)d[o]>=r&&(n===-1||d[n]>d[o])&&(n=o);d[n]=r}return[u,d]}var Li={kernelName:i.Transpose,backendName:"wasm",kernelFunc:Ie,setupFunc:Wi};function ke(t,a,u){const d=t.shape,r=t.shape.length,n=i.util.parseAxisParam(a,d);let o=n;const p=i.backend_util.getAxesPermutation(o,r);let l=null,s=!1;if(p!=null){const e=new Array(r);for(let f=0;f<e.length;f++)e[f]=d[p[f]];o=i.backend_util.getInnerMostAxes(o.length,r),l=Ie({inputs:{x:t},attrs:{perm:p},backend:u});const m=u.dataIdMap.get(t.dataId).id;u.dataIdMap.get(l.dataId).id!==m&&(s=!0)}return{transposed:l,originalAxes:n,axes:o,inputWasTransposed:s}}var Pr;function Gi(t){Pr=t.wasm.cwrap(i.All,null,["number, number, number"])}function $i(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("all",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;Pr(p,y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Vi={kernelName:i.All,backendName:"wasm",setupFunc:Gi,kernelFunc:$i},Er;function Ui(t){Er=t.wasm.cwrap(i.Any,null,["number, number, number"])}function qi(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("any",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;Er(p,y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Ki={kernelName:i.Any,backendName:"wasm",setupFunc:Ui,kernelFunc:qi};function Br(t){let a;function u(r){a=r.wasm.cwrap(t,null,["number","number","number","number","number"])}function d(r){const{backend:n,inputs:o,attrs:p}=r,{axis:l}=p,{x:s}=o,e=n.dataIdMap.get(s.dataId).id;let m=e,f=s;const{transposed:g,axes:h,inputWasTransposed:b}=ke(s,l,n);if(b){const F=n.dataIdMap.get(g.dataId).id;F!==e&&(f=g,m=F)}const y=f.shape.slice(0,-1),k=n.makeOutput(y,"int32"),I=n.dataIdMap.get(k.dataId).id,M=i.util.sizeFromShape(k.shape),D=f.shape[h[0]];return a(m,G[f.dtype],M,D,I),b&&n.disposeData(g.dataId),k}return{kernelName:t,backendName:"wasm",setupFunc:u,kernelFunc:d}}var Xi=Br(i.ArgMax),Ji=Br(i.ArgMin),Qi=W(i.Asin),Yi=W(i.Asinh),Zi=W(i.Atan),ji=Y(i.Atan2,!1),es=W(i.Atanh),Tr;function ns(t){Tr=t.wasm.cwrap(i.AvgPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ts(t){const{inputs:a,attrs:u,backend:d}=t,r=a.x,n=d.dataIdMap.get(r.dataId).id,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=u,e=i.backend_util.computePool2DInfo(r.shape,o,p,1,l,s),m=e.filterHeight,f=e.filterWidth,g=e.padInfo.top,h=e.padInfo.right,b=e.padInfo.bottom,y=e.padInfo.left,k=e.strideHeight,I=e.strideWidth,M=e.inChannels;if(e.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${e.dataFormat}'. Please use 'channelsLast'.`);if(e.dilationWidth!==1||e.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${e.dilationHeight}, ${e.dilationWidth}].`);const D=d.makeOutput(e.outShape,"float32"),F=d.dataIdMap.get(D.dataId).id;return Tr(n,r.shape[0],r.shape[1],r.shape[2],m,f,g,h,b,y,k,I,M,F),D}var as={kernelName:i.AvgPool,backendName:"wasm",setupFunc:ns,kernelFunc:ts},Or;function rs(t){Or=t.wasm.cwrap("AvgPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function us(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,dimRoundingMode:l,dataFormat:s}=d,e=i.backend_util.computePool3DInfo(r.shape,n,o,1,p,l,s),m=u.makeOutput(e.outShape,r.dtype);return Or(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var is={kernelName:i.AvgPool3D,backendName:"wasm",setupFunc:rs,kernelFunc:us},Wr;function ss(t){Wr=t.wasm.cwrap("AvgPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ds(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool3DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return Wr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left,e.filterDepth,e.filterHeight,e.filterWidth),m}var os={kernelName:i.AvgPool3DGrad,backendName:"wasm",setupFunc:ss,kernelFunc:ds},zr;function ps(t){zr=t.wasm.cwrap("AvgPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ls(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l}=d,s=i.backend_util.computePool2DInfo(n.shape,o,p,1,l),e=u.makeOutput(n.shape,n.dtype);return zr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inChannels,s.inHeight,s.inWidth,s.outHeight,s.outWidth,s.strideHeight,s.strideWidth,s.dilationHeight,s.dilationWidth,s.effectiveFilterHeight,s.effectiveFilterWidth,s.padInfo.top,s.padInfo.left,s.filterHeight,s.filterWidth),e}var cs={kernelName:i.AvgPoolGrad,backendName:"wasm",setupFunc:ps,kernelFunc:ls};function ue(t){const{inputs:a,attrs:u}=t,{x:d}=a,{shape:r}=u,n=i.util.sizeFromShape(d.shape),o=i.util.inferFromImplicitShape(r,n);return i.util.assert(n===i.util.sizeFromShape(o),()=>`new shape: ${o}, old shape: ${d.shape}. New shape and old shape must have the same number of elements.`),t.backend.incRef(d.dataId),{dataId:d.dataId,shape:o,dtype:d.dtype}}var ms={kernelName:i.Reshape,backendName:"wasm",kernelFunc:ue},Hr;function hs(t){Hr=t.wasm.cwrap(i.BatchMatMul,null,["number","array","number","number","array","number","number","number","number"])}function gs(t){const{inputs:a,backend:u,attrs:d}=t,{a:r,b:n}=a,{transposeA:o,transposeB:p}=d;if(r.dtype!=="float32"||n.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");const l=r.shape.length,s=n.shape.length,e=o?r.shape[l-2]:r.shape[l-1],m=p?n.shape[s-1]:n.shape[s-2],f=o?r.shape[l-1]:r.shape[l-2],g=p?n.shape[s-2]:n.shape[s-1],h=r.shape.slice(0,-2),b=n.shape.slice(0,-2),y=i.util.sizeFromShape(h),k=i.util.sizeFromShape(b),I=i.broadcast_util.assertAndGetBroadcastShape(r.shape.slice(0,-2),n.shape.slice(0,-2)).concat([f,g]);i.util.assert(e===m,()=>`Error in matMul: inner shapes (${e}) and (${m}) of Tensors with shapes ${r.shape} and ${n.shape} and transposeA=${o} and transposeB=${p} must match.`);const M=o?[y,e,f]:[y,f,e],D=p?[k,g,m]:[k,m,g],F=ue({inputs:{x:r},backend:u,attrs:{shape:M}}),E=ue({inputs:{x:n},backend:u,attrs:{shape:D}}),O=u.dataIdMap.get(F.dataId).id,B=u.dataIdMap.get(E.dataId).id,K=o?F.shape[2]:F.shape[1],X=p?E.shape[1]:E.shape[2],U=Math.max(y,k),q=u.makeOutput([U,K,X],F.dtype),Z=u.dataIdMap.get(q.dataId).id,ie=new Uint8Array(new Int32Array(F.shape).buffer),le=new Uint8Array(new Int32Array(E.shape).buffer);return Hr(O,ie,F.shape.length,B,le,E.shape.length,o,p,Z),u.disposeData(F.dataId),u.disposeData(E.dataId),q.shape=I,q}var fs={kernelName:i.BatchMatMul,backendName:"wasm",setupFunc:hs,kernelFunc:gs};function bs(t,a,u,d){const r=i.util.getArrayFromDType(u,i.util.sizeFromShape(a));if(d&&u!=="string"){let n=0;t.forEach(o=>{const p=i.util.sizeFromShape(o.shape);r.set(o.vals,n),n+=p})}else{let n=0;t.forEach(o=>{const p=u==="string"?i.backend_util.fromUint8ToStringArray(o.vals):o.vals;let l=0;for(let s=0;s<o.shape[0];++s){const e=s*a[1]+n;for(let m=0;m<o.shape[1];++m)r[e+m]=p[l++]}n+=o.shape[1]})}return r}function vs(t,a,u,d){if(t===a||t<a&&u<0||a<t&&u>1)return i.util.makeZerosTypedArray(0,d);const r=Math.abs(Math.ceil((a-t)/u)),n=i.util.makeZerosTypedArray(r,d);a<t&&u===1&&(u=-1),n[0]=t;for(let o=1;o<n.length;o++)n[o]=n[o-1]+u;return n}function Lr(t,a,u,d,r){const n=i.slice_util.isSliceContinous(d,a,u),o=i.util.sizeFromShape(u),p=i.util.computeStrides(d);if(n){const m=i.slice_util.computeFlatOffset(a,p);return r==="string"?t.slice(m,m+o):t.subarray(m,m+o)}const l=r==="string"?i.backend_util.fromUint8ToStringArray(t):t,s=(0,i.buffer)(d,r,l),e=(0,i.buffer)(u,r);for(let m=0;m<e.size;++m){const f=e.indexToLoc(m),g=f.map((h,b)=>h+a[b]);e.set(s.get(...g),...f)}return r==="string"?i.backend_util.fromStringArrayToUint8(e.values):e.values}var ys=class{constructor(t,a,u,d,r,n){this.separator=i.util.encodeString(t),this.nGramWidths=a,this.leftPad=i.util.encodeString(u),this.rightPad=i.util.encodeString(d),this.padWidth=r,this.preserveShort=n}getPadWidth(t){return Math.min(this.padWidth<0?t-1:this.padWidth,t-1)}getNumNGrams(t,a){const u=this.getPadWidth(a);return Math.max(0,t+2*u-a+1)}createNGrams(t,a,u,d,r,n){for(let o=0;o<r;++o){const p=this.getPadWidth(n),l=Math.max(0,p-o),s=Math.max(0,p-(r-(o+1))),e=n-(l+s),m=a+(l>0?0:o-p);let f=0;f+=l*this.leftPad.length;for(let k=0;k<e;++k)f+=t[m+k].length;f+=s*this.rightPad.length;const g=l+s+e-1;f+=g*this.separator.length,u[d+o]=new Uint8Array(f);const h=u[d+o];let b=0;const y=k=>k.forEach(I=>h[b++]=I);for(let k=0;k<l;++k)y(this.leftPad),y(this.separator);for(let k=0;k<e-1;++k)y(t[m+k]),y(this.separator);if(e>0){y(t[m+e-1]);for(let k=0;k<s;++k)y(this.separator),y(this.rightPad)}else{for(let k=0;k<s-1;++k)y(this.rightPad),y(this.separator);y(this.rightPad)}}}compute(t,a){const u=t.length,d=a.length;if(d>0){let p=a[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let l=1;l<d;++l){let s=a[l]>=p;if(s=s&&a[l]<=u,!s)throw new Error(`Invalid split value ${a[l]}, must be in [${p}, ${u}]`);p=a[l]}if(p!==u)throw new Error(`Last split value must be data size. Expected ${u}, got ${p}`)}const r=d-1,n=i.util.getArrayFromDType("int32",d);if(u===0||d===0){const p=new Array(u);for(let l=0;l<=r;++l)n[l]=0;return[p,n]}n[0]=0;for(let p=1;p<=r;++p){const l=a[p]-a[p-1];let s=0;this.nGramWidths.forEach(e=>{s+=this.getNumNGrams(l,e)}),this.preserveShort&&l>0&&s===0&&(s=1),n[p]=n[p-1]+s}const o=new Array(n[r]);for(let p=0;p<r;++p){const l=a[p];let s=n[p];if(this.nGramWidths.forEach(e=>{const m=a[p+1]-a[p],f=this.getNumNGrams(m,e);this.createNGrams(t,l,o,s,f,e),s+=f}),this.preserveShort&&s===n[p]){const e=a[p+1]-a[p];if(e===0)continue;const m=e+2*this.padWidth;this.createNGrams(t,l,o,s,1,m)}}return[o,n]}};function Is(t,a,u,d,r,n,o,p){return new ys(u,d,r,n,o,p).compute(t,a)}function ks(t,a,u,d){if(!t.length)return;if(a.length===0){for(let n=0;n<t.length;++n)d.push(t.subarray(n,n+1));return}if(a.length===1){const n=a[0];let o=t.indexOf(n);for(;o!==-1;){const p=t.subarray(0,o);(!u||p.length!==0)&&d.push(p),t=t.subarray(o+1),o=t.indexOf(n)}(!u||t.length!==0)&&d.push(t);return}let r=0;for(let n=0;n<t.length+1;n++)if(n===t.length||a.indexOf(t[n])!==-1){const o=t.subarray(r,n);(!u||o.length!==0)&&d.push(o),r=n+1}}function Ss(t,a,u){const d=t.length,r=[];let n=0,o=0;const p=new Array(d);for(let f=0;f<d;++f){const g=r.length;ks(t[f],a,u,r);const h=r.length-g;p[f]=h,n+=h,o=Math.max(o,h)}const l=i.util.getArrayFromDType("int32",n*2),s=new Array(n),e=[d,o];let m=0;for(let f=0;f<d;++f)for(let g=0;g<p[f];++g)l[m*2]=f,l[m*2+1]=g,s[m]=r[m],++m;return[l,s,e]}function Ms(t,a){const u=i.util.getArrayFromDType("int32",t.length);for(let d=0;d<t.length;++d)u[d]=i.util.fingerPrint64(t[d]).modulo(a).getLowBitsUnsigned();return u}function As(t,a,u,d){const r=i.util.parseAxisParam(a,u)[0],n=[1,u[0],1];for(let h=0;h<r;h++)n[0]*=u[h];n[1]=u[r];for(let h=r+1;h<u.length;h++)n[2]*=u[h];const o=new Map,p=new Int32Array(u[r]),l=new i.TensorBuffer(n,d,t),s=[],e=n[0]===1&&n[2]===1;for(let h=0;h<u[r];h++){let b;if(e)b=t[h].toString();else{const k=[];for(let I=0;I<n[0];I++)for(let M=0;M<n[2];M++)k.push(l.get(I,h,M));b=k.join(",")}const y=o.get(b);if(y!=null)p[h]=y;else{const k=o.size;o.set(b,k),p[h]=k,s.push(h)}}const m=n.slice();m[1]=o.size;const f=new i.TensorBuffer(m,d);s.forEach((h,b)=>{for(let y=0;y<n[0];y++)for(let k=0;k<n[2];k++)f.set(l.get(y,h,k),y,b,k)});const g=u.slice();return g[r]=m[1],{outputValues:f.values,outputShape:g,indices:p}}function De(t){const{inputs:{x:a},attrs:{begin:u,size:d},backend:r}=t,[n,o]=i.slice_util.parseSliceParams(a,u,d),p=i.slice_util.isSliceContinous(a.shape,n,o),l=r.readSync(a.dataId),s=r.makeOutput(o,a.dtype),e=i.util.computeStrides(a.shape),m=r.dataIdMap.get(s.dataId);if(p){const h=i.slice_util.computeFlatOffset(n,e);return a.dtype==="string"?m.stringBytes=l.slice(h,h+i.util.sizeFromShape(o)):r.typedArrayFromHeap(s).set(l.subarray(h,h+i.util.sizeFromShape(o))),s}if(a.dtype==="string")return m.stringBytes=Lr(l,n,o,a.shape,a.dtype),s;const f=r.typedArrayFromHeap(s),g=a.shape.length;if(g===2)xs(l,e[0],f,n,o);else if(g===3)Ds(l,e[0],e[1],f,n,o);else if(g===4)ws(l,e[0],e[1],e[2],f,n,o);else{const h=Lr(l,n,o,a.shape,a.dtype);f.set(h)}return s}function xs(t,a,u,d,r){let n=0;const o=d[0],p=d[1],l=o+r[0];for(let s=o;s<l;s++){const e=s*a+p;u.set(t.subarray(e,e+r[1]),n),n+=r[1]}}function Ds(t,a,u,d,r,n){let o=0;const p=r[0],l=r[1],s=r[2],e=p+n[0],m=l+n[1];for(let f=p;f<e;f++)for(let g=l;g<m;g++){const h=f*a+g*u+s;d.set(t.subarray(h,h+n[2]),o),o+=n[2]}}function ws(t,a,u,d,r,n,o){let p=0;const l=n[0],s=n[1],e=n[2],m=l+o[0],f=s+o[1],g=e+o[2],h=n[3];for(let b=l;b<m;b++)for(let y=s;y<f;y++)for(let k=e;k<g;k++){const I=b*a+y*u+k*d+h;r.set(t.subarray(I,I+o[3]),p),p+=o[3]}}var Fs={kernelName:i.Slice,backendName:"wasm",kernelFunc:De};function Ns(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{blockShape:n,crops:o}=d,p=n.reduce((k,I)=>k*I),l=i.backend_util.getReshaped(r.shape,n,p),s=i.backend_util.getPermuted(l.length,n.length),e=i.backend_util.getReshapedPermuted(r.shape,n,p),m=i.backend_util.getSliceBeginCoords(o,n.length),f=i.backend_util.getSliceSize(e,o,n.length),g=ue({inputs:{x:r},backend:u,attrs:{shape:l}}),h=Ie({inputs:{x:g},backend:u,attrs:{perm:s}}),b=ue({inputs:{x:h},backend:u,attrs:{shape:e}}),y=De({inputs:{x:b},backend:u,attrs:{begin:m,size:f}});return u.disposeData(g.dataId),u.disposeData(h.dataId),u.disposeData(b.dataId),y}var Cs={kernelName:i.BatchToSpaceND,backendName:"wasm",kernelFunc:Ns},Gr;function Rs(t){Gr=t.wasm.cwrap(i.Bincount,null,["number","number","boolean","number","number","number"])}function _s(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,weights:n}=u,{size:o}=d,p=n.shape.reduce((m,f)=>m*f,1)!==0,l=r.shape.length===1?[o]:[r.shape[0],o],s=a.makeOutput(l,n.dtype);function e(m){return a.dataIdMap.get(m.dataId).id}return Gr(e(r),o,p,e(n),G[n.dtype],e(s)),s}var Ps={kernelName:i.Bincount,backendName:"wasm",setupFunc:Rs,kernelFunc:_s},Es=!0,Bs=Y(i.BitwiseAnd,Es);function Ts(t){const{inputs:a,backend:u}=t,{s0:d,s1:r}=a,n=u.typedArrayFromHeap(d),o=u.typedArrayFromHeap(r),p=i.backend_util.assertAndGetBroadcastShape(Array.from(n),Array.from(o));return u.makeOutput([p.length],"int32",void 0,new Int32Array(p))}var Os={kernelName:i.BroadcastArgs,backendName:"wasm",kernelFunc:Ts};function Se(t){const{inputs:{x:a},attrs:{dtype:u},backend:d}=t,r=d.makeOutput(a.shape,u),n=d.typedArrayFromHeap(a);return d.typedArrayFromHeap(r).set(n),r}var Ws={kernelName:i.Cast,backendName:"wasm",kernelFunc:Se},zs=W(i.Ceil),$r;function Hs(t){$r=t.wasm.cwrap(i.ClipByValue,null,["number","number","number","number"])}function Ls(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{clipValueMin:n,clipValueMax:o}=d,p=u.dataIdMap.get(r.dataId).id,l=u.makeOutput(r.shape,r.dtype),s=u.dataIdMap.get(l.dataId).id;return $r(p,n,o,s),l}var Gs={kernelName:i.ClipByValue,backendName:"wasm",setupFunc:Hs,kernelFunc:Ls};function Vr(t){const{inputs:a,backend:u}=t,d=i.util.parseAxisParam(t.attrs.axis,a[0].shape)[0],r=a.map(g=>g.shape);i.backend_util.assertParamsConsistent(r,d);let n=i.backend_util.computeOutShape(a.map(g=>g.shape),d);const o=a.filter(g=>i.util.sizeFromShape(g.shape)>0);if(o.length===1)return on({inputs:{x:o[0]},backend:u});const p=u.makeOutput(n,a[0].dtype);if(i.util.sizeFromShape(n)===0)return p;if(o[0].dtype==="string"){const g=o.map(I=>{const M=[-1,i.util.sizeFromShape(I.shape.slice(d))];return ue({inputs:{x:I},backend:u,attrs:{shape:M}})}),h=g.map(I=>({vals:u.readSync(I.dataId),shape:I.shape}));n=i.backend_util.computeOutShape(g.map(I=>I.shape),1);const b=g[0].shape[0]===1,y=bs(h,n,a[0].dtype,b);p.shape=i.backend_util.computeOutShape(o.map(I=>I.shape),d);const k=u.dataIdMap.get(p.dataId);return k.stringBytes=i.backend_util.fromStringArrayToUint8(y),g.forEach(I=>u.disposeData(I.dataId)),p}const l=i.util.sizeFromShape(o[0].shape.slice(0,d));let s=0;const e=o.map(g=>{const h=i.util.sizeFromShape(g.shape.slice(d));return s+=h,h}),m=o.map(g=>u.typedArrayFromHeap(g)),f=u.typedArrayFromHeap(p);for(let g=0;g<l;g++){let h=g*s;for(let b=0;b<m.length;b++){const y=e[b],k=g*y,I=m[b].subarray(k,k+y);f.set(I,h),h+=y}}return p}var $s={kernelName:i.Concat,backendName:"wasm",kernelFunc:Vr},Ur;function Vs(t){Ur=t.wasm.cwrap(i.Conv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Us(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n}=a,o=d.dataIdMap.get(r.dataId).id,p=d.dataIdMap.get(n.dataId).id,{strides:l,dilations:s,pad:e,dimRoundingMode:m,dataFormat:f}=u,g=i.backend_util.convertConv2DDataFormat(f),h=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,s,e,m,!1,g),b=h.filterHeight,y=h.filterWidth,k=h.padInfo.top,I=h.padInfo.right,M=h.padInfo.bottom,D=h.padInfo.left,F=h.dilationHeight,E=h.dilationWidth,O=h.strideHeight,B=h.strideWidth,K=h.inChannels,X=h.outChannels,U=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);const q=d.makeOutput(h.outShape,"float32"),Z=d.dataIdMap.get(q.dataId).id;return Ur(o,r.shape[0],r.shape[1],r.shape[2],p,b,y,k,I,M,D,U,F,E,O,B,K,X,Z),q}var qs={kernelName:i.Conv2D,backendName:"wasm",setupFunc:Vs,kernelFunc:Us},qr;function Ks(t){qr=t.wasm.cwrap(i.Conv2DBackpropInput,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Xs(t){const{backend:a,inputs:u,attrs:d}=t,{dy:r,filter:n}=u,{strides:o,pad:p,dataFormat:l,dimRoundingMode:s,inputShape:e}=d,m=1,f=i.backend_util.convertConv2DDataFormat(l),g=i.backend_util.computeConv2DInfo(e,n.shape,o,m,p,s,!1,f),{batchSize:h,filterHeight:b,filterWidth:y,inChannels:k,inHeight:I,inWidth:M,outChannels:D,outHeight:F,outWidth:E,strideHeight:O,strideWidth:B}=g,K=b-1-g.padInfo.top,X=y-1-g.padInfo.left,U=g.dataFormat==="channelsLast",q=i.util.computeStrides(g.inShape),Z=i.util.computeStrides(r.shape),[ie,le,Q]=i.util.computeStrides(n.shape),j=q[0],ge=U?q[1]:q[2],$=U?q[2]:1,ce=U?1:q[1],me=Z[0],se=U?Z[1]:Z[2],ee=U?Z[2]:1,Te=U?1:Z[1],Fe=a.makeOutput(g.inShape,"float32"),Oe=a.dataIdMap.get(Fe.dataId).id,Je=a.dataIdMap.get(r.dataId).id,Qe=a.dataIdMap.get(n.dataId).id;return qr(Je,Qe,h,b,y,I,M,k,F,E,D,O,B,K,X,ie,le,Q,j,ge,$,ce,me,se,ee,Te,Oe),Fe}var Js={kernelName:i.Conv2DBackpropInput,backendName:"wasm",setupFunc:Ks,kernelFunc:Xs},Kr;function Qs(t){Kr=t.wasm.cwrap(i.Conv3D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ys(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n}=a,{strides:o,pad:p,dilations:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor x must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(r.shape,n.shape,o,l,p),e=u.makeOutput(s.outShape,r.dtype);return Kr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var Zs={kernelName:i.Conv3D,backendName:"wasm",setupFunc:Qs,kernelFunc:Ys},Xr;function js(t){Xr=t.wasm.cwrap(i.Conv3DBackpropFilterV2,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ed(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,dy:n}=a,{strides:o,pad:p,filterShape:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor dy must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(r.shape,l,o,1,p),e=u.makeOutput(s.filterShape,n.dtype);return Xr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var nd={kernelName:i.Conv3DBackpropFilterV2,backendName:"wasm",setupFunc:js,kernelFunc:ed},Jr;function td(t){Jr=t.wasm.cwrap(i.Conv3DBackpropInputV2,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ad(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,filter:n}=a,{pad:o,strides:p,inputShape:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor dy must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(l,n.shape,p,1,o),e=u.makeOutput(s.inShape,r.dtype);return Jr(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var rd={kernelName:i.Conv3DBackpropInputV2,backendName:"wasm",setupFunc:td,kernelFunc:ad},ud=W(i.Cos),id=W(i.Cosh),Un;(function(t){t[t.bilinear=0]="bilinear",t[t.nearest=1]="nearest"})(Un||(Un={}));var Qr;function sd(t){Qr=t.wasm.cwrap(i.CropAndResize,null,["number","number","number","number","array","number","number","number","number","number"])}function dd(t){const{backend:a,inputs:u,attrs:d}=t,{method:r,extrapolationValue:n,cropSize:o}=d,{image:p,boxes:l,boxInd:s}=u,e=l.shape[0],[m,f]=o,g=[e,m,f,p.shape[3]];let h=a.dataIdMap.get(p.dataId),b;p.dtype!=="float32"&&(b=Se({backend:a,inputs:{x:p},attrs:{dtype:"float32"}}),h=a.dataIdMap.get(b.dataId));const y=h.id,k=a.dataIdMap.get(l.dataId).id,I=a.dataIdMap.get(s.dataId).id,M=a.makeOutput(g,"float32"),D=a.dataIdMap.get(M.dataId).id,F=new Uint8Array(new Int32Array(p.shape).buffer);return Qr(y,k,I,e,F,m,f,Un[r],n,D),b!=null&&a.disposeData(b.dataId),M}var od={kernelName:i.CropAndResize,backendName:"wasm",setupFunc:sd,kernelFunc:dd},Yr;function pd(t){Yr=t.wasm.cwrap(i.Cumprod,null,["number","number","number","number","number","number"])}function ld(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{axis:n,exclusive:o,reverse:p}=d,l=r.shape.length;i.util.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumprod does not support ${r.dtype} tensors in the WASM backend`);const s=i.backend_util.getAxesPermutation([n],l);let e=r;s!==null&&(e=Ie({inputs:{x:r},attrs:{perm:s},backend:u}));const m=i.backend_util.getInnerMostAxes(1,l)[0];i.backend_util.assertAxesAreInnerMostDims("cumprod",[m],l);const f=u.makeOutput(e.shape,e.dtype),g=e.shape[m],h=u.dataIdMap.get(e.dataId).id,b=u.dataIdMap.get(f.dataId).id;Yr(h,o?1:0,p?1:0,g,b,G[r.dtype]);let y=f;if(s!==null){const k=i.backend_util.getUndoAxesPermutation(s);y=Ie({inputs:{x:f},attrs:{perm:k},backend:u}),u.disposeData(e.dataId),u.disposeData(f.dataId)}return y}var cd={kernelName:i.Cumprod,backendName:"wasm",setupFunc:pd,kernelFunc:ld},Zr;function md(t){Zr=t.wasm.cwrap(i.Cumsum,null,["number","number","number","number","number","number"])}function hd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{axis:n,exclusive:o,reverse:p}=d,l=r.shape.length;i.util.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);const s=i.backend_util.getAxesPermutation([n],l);let e=r;s!==null&&(e=Ie({inputs:{x:r},attrs:{perm:s},backend:u}));const m=i.backend_util.getInnerMostAxes(1,l)[0];i.backend_util.assertAxesAreInnerMostDims("cumsum",[m],l);const f=u.makeOutput(e.shape,e.dtype),g=e.shape[m],h=u.dataIdMap.get(e.dataId).id,b=u.dataIdMap.get(f.dataId).id;Zr(h,o?1:0,p?1:0,g,b,G[r.dtype]);let y=f;if(s!==null){const k=i.backend_util.getUndoAxesPermutation(s);y=Ie({inputs:{x:f},attrs:{perm:k},backend:u}),u.disposeData(e.dataId),u.disposeData(f.dataId)}return y}var gd={kernelName:i.Cumsum,backendName:"wasm",setupFunc:md,kernelFunc:hd},jr;function fd(t){jr=t.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function bd(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,weights:n}=u,{size:o,binaryOutput:p}=d,l=n.shape.reduce((f,g)=>f*g,1)!==0,s=r.shape.length===1?[o]:[r.shape[0],o],e=a.makeOutput(s,n.dtype);function m(f){return a.dataIdMap.get(f.dataId).id}return jr(m(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,o,l,m(n),G[n.dtype],p,m(e)),e}var vd={kernelName:i.DenseBincount,backendName:"wasm",setupFunc:fd,kernelFunc:bd},eu;function yd(t){eu=t.wasm.cwrap(i.DepthToSpace,null,["number","number","number","array","number","array","array","number","number"])}function Id(t){const{backend:a,inputs:u,attrs:d}=t,{x:r}=u,{blockSize:n,dataFormat:o}=d,p=r.shape[0],l=o==="NHWC"?r.shape[1]:r.shape[2],s=o==="NHWC"?r.shape[2]:r.shape[3],e=o==="NHWC"?r.shape[3]:r.shape[1],m=l*n,f=s*n,g=e/(n*n),h=o==="NHWC"?[p,m,f,g]:[p,g,m,f],b=a.makeOutput(h,"float32"),y=a.dataIdMap.get(r.dataId).id,k=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),I=new Uint8Array(new Int32Array(h).buffer),M=new Uint8Array(new Int32Array(i.util.computeStrides(h)).buffer),D=a.dataIdMap.get(b.dataId).id;return eu(y,n,o==="NHWC"?1:0,k,r.shape.length-1,I,M,h.length,D),b}var kd={kernelName:i.DepthToSpace,backendName:"wasm",setupFunc:yd,kernelFunc:Id},nu;function Sd(t){nu=t.wasm.cwrap(i.DepthwiseConv2dNative,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Md(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n}=a,o=d.dataIdMap.get(r.dataId).id,p=d.dataIdMap.get(n.dataId).id,{strides:l,dilations:s,pad:e,dimRoundingMode:m}=u,f=s??[1,1],g=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,f,e,m,!0),h=g.filterHeight,b=g.filterWidth,y=g.padInfo.top,k=g.padInfo.right,I=g.padInfo.bottom,M=g.padInfo.left,D=g.dilationHeight,F=g.dilationWidth,E=g.strideHeight,O=g.strideWidth,B=g.inChannels,K=g.outChannels,X=g.padInfo.type==="SAME"?1:0;if(g.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${g.dataFormat}'. Please use 'channelsLast'.`);const U=d.makeOutput(g.outShape,"float32"),q=d.dataIdMap.get(U.dataId).id;return nu(o,r.shape[0],r.shape[1],r.shape[2],p,h,b,y,k,I,M,X,D,F,E,O,B,K,q),U}var Ad={kernelName:i.DepthwiseConv2dNative,backendName:"wasm",setupFunc:Sd,kernelFunc:Md},tu;function xd(t){tu=t.wasm.cwrap("Diag",null,["number","number","number","number"])}function Dd(t){const{inputs:a,backend:u}=t,{x:d}=a,r=i.util.sizeFromShape(d.shape),n=u.makeOutput([...d.shape,...d.shape],d.dtype);return tu(u.dataIdMap.get(d.dataId).id,G[d.dtype],r,u.dataIdMap.get(n.dataId).id),n}var wd={kernelName:i.Diag,backendName:"wasm",setupFunc:xd,kernelFunc:Dd},au;function Fd(t){au=t.wasm.cwrap(i.Dilation2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Nd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n}=a,{strides:o,pad:p,dilations:l}=d;if(r.dtype!==n.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${n.dtype}`);const s=i.backend_util.computeDilation2DInfo(r.shape,n.shape,o,p,"NHWC",l),e=u.makeOutput(s.outShape,r.dtype);return au(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,G[r.dtype],s.batchSize,s.inChannels,s.inHeight,s.inWidth,s.outHeight,s.outWidth,s.strideHeight,s.strideWidth,s.dilationHeight,s.dilationWidth,s.filterHeight,s.filterWidth,s.padInfo.top,s.padInfo.left),e}var Cd={kernelName:i.Dilation2D,backendName:"wasm",setupFunc:Fd,kernelFunc:Nd},ru;function Rd(t){ru=t.wasm.cwrap(i.Dilation2DBackpropFilter,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _d(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n,dy:o}=a,{strides:p,pad:l,dilations:s}=d;if(r.dtype!==n.dtype||r.dtype!==o.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${n.dtype}, and ${o.dtype}`);const e=i.backend_util.computeDilation2DInfo(r.shape,n.shape,p,l,"NHWC",s),m=u.makeOutput(n.shape,n.dtype);return ru(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,G[r.dtype],e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.filterHeight,e.filterWidth,e.padInfo.top,e.padInfo.left),m}var Pd={kernelName:i.Dilation2DBackpropFilter,backendName:"wasm",setupFunc:Rd,kernelFunc:_d},uu;function Ed(t){uu=t.wasm.cwrap(i.Dilation2DBackpropInput,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n,dy:o}=a,{strides:p,pad:l,dilations:s}=d;if(r.dtype!==n.dtype||r.dtype!==o.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${n.dtype}, and ${o.dtype}`);const e=i.backend_util.computeDilation2DInfo(r.shape,n.shape,p,l,"NHWC",s),m=u.makeOutput(r.shape,r.dtype);return uu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,G[r.dtype],e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.filterHeight,e.filterWidth,e.padInfo.top,e.padInfo.left),m}var Td={kernelName:i.Dilation2DBackpropInput,backendName:"wasm",setupFunc:Ed,kernelFunc:Bd},Od=W(i.Elu),iu;function Wd(t){iu=t.wasm.cwrap(i.EluGrad,null,["number","number","number"])}function zd(t){const{inputs:a,backend:u}=t,{dy:d,y:r}=a,n=u.makeOutput(r.shape,"float32"),o=p=>u.dataIdMap.get(p.dataId).id;return iu(o(r),o(d),o(n)),n}var Hd={kernelName:i.EluGrad,backendName:"wasm",setupFunc:Wd,kernelFunc:zd},Ld=!1,Gd=Y(i.Equal,Ld,"bool"),$d=W(i.Erf),Vd=W(i.Exp,"float32");function qn(t){const{inputs:a,attrs:u,backend:d}=t,{input:r}=a,{dim:n}=u,o=r.shape.length,p=r.shape.slice();let l=n;return n<0&&(i.util.assert(-(o+1)<=n,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),l=o+n+1),p.splice(l,0,1),ue({inputs:{x:r},backend:d,attrs:{shape:p}})}var Ud={kernelName:i.ExpandDims,backendName:"wasm",kernelFunc:qn},qd=W(i.Expm1,"float32");function su(t){const{attrs:{shape:a,value:u},backend:d}=t;let{attrs:{dtype:r}}=t;r=r||i.util.inferDtype(u);const n=d.makeOutput(a,r);return d.typedArrayFromHeap(n).fill(u),n}var Kd={kernelName:i.Fill,backendName:"wasm",kernelFunc:su},du;function Xd(t){du=t.wasm.cwrap(i.FlipLeftRight,null,["number","number","number","number","number","number"])}function Jd(t){const{inputs:a,backend:u}=t,{image:d}=a,r=u.makeOutput(d.shape,d.dtype),n=u.dataIdMap.get(d.dataId).id,o=u.dataIdMap.get(r.dataId).id,[p,l,s,e]=d.shape;return du(n,p,l,s,e,o),r}var Qd={kernelName:i.FlipLeftRight,backendName:"wasm",kernelFunc:Jd,setupFunc:Xd},Yd=W(i.Floor),Zd=!1,jd=Y(i.FloorDiv,Zd),ou;function eo(t){ou=t.wasm.cwrap(i.FusedBatchNorm,null,["number","number","number","number","number","number","number"])}function no(t){const{backend:a,inputs:u,attrs:d}=t,{varianceEpsilon:r}=d,{x:n,mean:o,variance:p,offset:l,scale:s}=u,e=a.dataIdMap.get(n.dataId).id,m=a.dataIdMap.get(o.dataId).id,f=a.dataIdMap.get(p.dataId).id,g=l!=null?a.dataIdMap.get(l.dataId).id:0,h=s!=null?a.dataIdMap.get(s.dataId).id:0,b=a.makeOutput(n.shape,n.dtype);if(i.util.sizeFromShape(n.shape)===0)return b;const y=a.dataIdMap.get(b.dataId).id;return ou(e,m,f,g,h,r,y),b}var to={kernelName:i.FusedBatchNorm,backendName:"wasm",setupFunc:eo,kernelFunc:no},pu;function ao(t){pu=t.wasm.cwrap(i.FusedConv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ro(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n,bias:o,preluActivationWeights:p}=a,{strides:l,pad:s,dilations:e,dataFormat:m,dimRoundingMode:f,activation:g,leakyreluAlpha:h}=u,b=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,e,s,f),y=qe[g];if(y==null)throw new Error(`${g} activation not yet supported for FusedConv2D in the wasm backend.`);const k=d.dataIdMap.get(r.dataId).id,I=d.dataIdMap.get(n.dataId).id,M=b.outChannels;let D=0;if(o!=null){const ee=d.dataIdMap.get(o.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==M)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${M})`);D=ee.id}const F=b.filterHeight,E=b.filterWidth,O=b.padInfo.top,B=b.padInfo.right,K=b.padInfo.bottom,X=b.padInfo.left,U=b.dilationHeight,q=b.dilationWidth,Z=b.strideHeight,ie=b.strideWidth,le=b.inChannels,Q=b.padInfo.type==="SAME"?1:0,j=b.batchSize,ge=b.inHeight,$=b.inWidth;if(m!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${m}'. Please use 'NHWC'.`);const ce=d.makeOutput(b.outShape,"float32"),me=d.dataIdMap.get(ce.dataId).id,se=p==null?0:d.dataIdMap.get(p.dataId).id;return pu(k,j,ge,$,I,F,E,D,O,B,K,X,Q,U,q,Z,ie,le,M,y,se,h||0,me),ce}var uo={kernelName:i.FusedConv2D,backendName:"wasm",setupFunc:ao,kernelFunc:ro},lu;function io(t){lu=t.wasm.cwrap(i.FusedDepthwiseConv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function so(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n,bias:o,preluActivationWeights:p}=a,{strides:l,pad:s,dilations:e,dataFormat:m,dimRoundingMode:f,activation:g,leakyreluAlpha:h}=u,b=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,e,s,f,!0),y=qe[g];if(y==null)throw new Error(`${g} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);const k=d.dataIdMap.get(r.dataId).id,I=d.dataIdMap.get(n.dataId).id,M=b.outChannels;let D=0;if(o!=null){const ee=d.dataIdMap.get(o.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==M)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${M})`);D=ee.id}const F=b.filterHeight,E=b.filterWidth,O=b.padInfo.top,B=b.padInfo.right,K=b.padInfo.bottom,X=b.padInfo.left,U=b.dilationHeight,q=b.dilationWidth,Z=b.strideHeight,ie=b.strideWidth,le=b.inChannels,Q=b.padInfo.type==="SAME"?1:0,j=b.batchSize,ge=b.inHeight,$=b.inWidth;if(m!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${m}'. Please use 'NHWC'.`);const ce=d.makeOutput(b.outShape,"float32"),me=d.dataIdMap.get(ce.dataId).id,se=p==null?0:d.dataIdMap.get(p.dataId).id;return lu(k,j,ge,$,I,F,E,D,O,B,K,X,Q,U,q,Z,ie,le,M,y,se,h||0,me),ce}var oo={kernelName:i.FusedDepthwiseConv2D,backendName:"wasm",setupFunc:io,kernelFunc:so},cu;function po(t){cu=t.wasm.cwrap(i.GatherNd,null,["number","number","number","number","number","number","array","number"])}function lo(t){const{backend:a,inputs:u}=t,{params:d,indices:r}=u,[n,o,p,l]=i.gather_util.prepareAndValidate(d,r),s=a.makeOutput(n,d.dtype);if(o===0)return s;const e=r.shape,m=e[e.length-1],f=a.dataIdMap.get(d.dataId).id,g=a.dataIdMap.get(r.dataId).id,h=new Uint8Array(new Int32Array(l).buffer),b=a.dataIdMap.get(s.dataId).id;return cu(f,G[d.dtype],g,o,m,p,h,b),s}var co={kernelName:i.GatherNd,backendName:"wasm",setupFunc:po,kernelFunc:lo},mu;function mo(t){mu=t.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function ho(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,indices:n}=u,{axis:o,batchDims:p}=d,l=i.util.parseAxisParam(o,r.shape)[0],s=a.readSync(n.dataId),e=r.shape[l];for(let O=0;O<s.length;++O){const B=s[O];i.util.assert(B<=e-1&&B>=0,()=>`GatherV2: the index value ${B} is not in [0, ${e-1}]`)}const m=i.backend_util.segment_util.collectGatherOpShapeInfo(r,n,l,p),f=ue({inputs:{x:r},attrs:{shape:[m.batchSize,m.outerSize,m.dimSize,m.sliceSize]},backend:a}),g=i.util.sizeFromShape(n.shape),h=ue({inputs:{x:n},attrs:{shape:[m.batchSize,g/m.batchSize]},backend:a}),b=[m.batchSize,m.outerSize,g/m.batchSize,m.sliceSize],y=a.makeOutput(b,r.dtype);if(i.util.sizeFromShape(r.shape)===0)return y;const k=f.shape.length-1,I=a.dataIdMap.get(f.dataId).id,M=a.dataIdMap.get(h.dataId).id,D=a.dataIdMap.get(y.dataId).id,F=new Uint8Array(new Int32Array(i.util.computeStrides(f.shape)).buffer),E=new Uint8Array(new Int32Array(i.util.computeStrides(b)).buffer);return mu(I,G[r.dtype],F,k,M,m.batchSize,E,D),a.disposeData(f.dataId),a.disposeData(h.dataId),y.shape=m.outputShape,y}var go={kernelName:i.GatherV2,backendName:"wasm",setupFunc:mo,kernelFunc:ho},fo=!1,bo=Y(i.Greater,fo,"bool"),vo=!1,yo=Y(i.GreaterEqual,vo,"bool"),Io=W(i.IsFinite,"bool"),ko=W(i.IsInf,"bool"),So=W(i.IsNan,"bool"),hu;function Mo(t){hu=t.wasm.cwrap(i.LeakyRelu,null,["number","number","number","number"])}function Ao(t){const{inputs:{x:a},attrs:{alpha:u},backend:d}=t,r=d.dataIdMap.get(a.dataId).id,n=d.makeOutput(a.shape,"float32");if(i.util.sizeFromShape(a.shape)!==0){const o=d.dataIdMap.get(n.dataId).id;hu(r,G[a.dtype],u,o)}return n}var xo={kernelName:i.LeakyRelu,backendName:"wasm",setupFunc:Mo,kernelFunc:Ao},Do=!1,wo=Y(i.Less,Do,"bool"),Fo=!1,No=Y(i.LessEqual,Fo,"bool"),gu;function Co(t){gu=t.wasm.cwrap(i.LinSpace,null,["number","number","number","number"])}function Ro(t){const{attrs:a,backend:u}=t,{start:d,stop:r,num:n}=a,o=Math.floor(n),p=u.makeOutput([o],"float32");return gu(u.dataIdMap.get(p.dataId).id,d,r,o),p}var _o={kernelName:i.LinSpace,backendName:"wasm",setupFunc:Co,kernelFunc:Ro},Po=W(i.Log),Eo=W(i.Log1p),Bo=!1,To=Y(i.LogicalAnd,Bo,"bool"),Oo=W(i.LogicalNot),Wo=!1,zo=Y(i.LogicalOr,Wo,"bool"),Ho=!1,Lo=Y(i.LogicalXor,Ho,"bool"),fu;function Go(t){fu=t.wasm.cwrap(i.LRN,null,["number","number","number","number","number","number","number"])}function $o(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{depthRadius:n,bias:o,alpha:p,beta:l}=d;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");const s=u.makeOutput(r.shape,r.dtype);return fu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(s.dataId).id,r.shape[3],n,o,p,l),s}var Vo={kernelName:i.LRN,backendName:"wasm",setupFunc:Go,kernelFunc:$o},bu;function Uo(t){bu=t.wasm.cwrap(i.LRNGrad,null,["number","number","number","number","number","number","number","number","number"])}function qo(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,y:n,dy:o}=a,{depthRadius:p,bias:l,alpha:s,beta:e}=d;if(r.dtype!=="float32"||n.dtype!=="float32"||o.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");const m=u.makeOutput(r.shape,r.dtype);return bu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,o.shape[3],p,l,s,e),m}var Ko={kernelName:i.LRNGrad,backendName:"wasm",setupFunc:Uo,kernelFunc:qo},vu;function Xo(t){vu=t.wasm.cwrap(i.Max,null,["number","number","number","number"])}function Jo(t){const{backend:a,inputs:u,attrs:d}=t,{reductionIndices:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("max",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;vu(p,G[o.dtype],y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Qo={kernelName:i.Max,backendName:"wasm",setupFunc:Xo,kernelFunc:Jo},Yo=!1,Zo=Y(i.Maximum,Yo),yu;function jo(t){yu=t.wasm.cwrap(i.MaxPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ep(t){const{inputs:a,attrs:u,backend:d}=t,r=a.x,n=d.dataIdMap.get(r.dataId).id;i.util.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);const{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=u,e=i.backend_util.computePool2DInfo(r.shape,o,p,1,l,s),m=e.filterHeight,f=e.filterWidth,g=e.padInfo.top,h=e.padInfo.right,b=e.padInfo.bottom,y=e.padInfo.left,k=e.dilationHeight,I=e.dilationWidth,M=e.strideHeight,D=e.strideWidth,F=e.inChannels,E=e.outChannels;if(e.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${e.dataFormat}'. Please use 'channelsLast'.`);const O=d.makeOutput(e.outShape,"float32"),B=d.dataIdMap.get(O.dataId).id;return yu(n,r.shape[0],r.shape[1],r.shape[2],m,f,g,h,b,y,k,I,M,D,F,E,B),O}var np={kernelName:i.MaxPool,backendName:"wasm",setupFunc:jo,kernelFunc:ep},Iu;function tp(t){Iu=t.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ap(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,dimRoundingMode:l,dataFormat:s}=d,e=i.backend_util.computePool3DInfo(r.shape,n,o,1,p,l,s),m=u.makeOutput(e.outShape,r.dtype);return Iu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var rp={kernelName:i.MaxPool3D,backendName:"wasm",setupFunc:tp,kernelFunc:ap},ku;function up(t){ku=t.wasm.cwrap("MaxPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ip(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool3DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return ku(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var sp={kernelName:i.MaxPool3DGrad,backendName:"wasm",setupFunc:up,kernelFunc:ip},Su;function dp(t){Su=t.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function op(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool2DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return Su(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.top,e.padInfo.left),m}var pp={kernelName:i.MaxPoolGrad,backendName:"wasm",setupFunc:dp,kernelFunc:op},Mu;function lp(t){Mu=t.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function cp(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,includeBatchInIndex:l}=d;i.util.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);const s=[1,1];i.util.assert(i.backend_util.eitherStridesOrDilationsAreOne(o,s),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'`);const e=i.backend_util.computePool2DInfo(r.shape,n,o,[1,1],p),m=u.makeOutput(e.outShape,r.dtype),f=u.makeOutput(e.outShape,"int32");return Mu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,u.dataIdMap.get(f.dataId).id,G[r.dtype],l,e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.top,e.padInfo.left),[m,f]}var mp={kernelName:i.MaxPoolWithArgmax,backendName:"wasm",setupFunc:lp,kernelFunc:cp},Au;function hp(t){Au=t.wasm.cwrap(i.Mean,null,["number, number, number"])}function gp(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const D=a.dataIdMap.get(e.dataId).id;D!==p&&(s=e,l=D,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("mean",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y);let I=s;s.dtype!=="float32"&&(I=Se({backend:a,inputs:{x:s},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(I.dataId).id);const M=a.makeOutput(b,"float32");if(i.util.sizeFromShape(s.shape)!==0){const D=a.dataIdMap.get(M.dataId).id;Au(l,k,D)}return g&&a.disposeData(e.dataId),n&&(M.shape=i.backend_util.expandShapeToKeepDim(M.shape,f)),s.dtype!=="float32"&&a.disposeData(I.dataId),M}var fp={kernelName:i.Mean,backendName:"wasm",setupFunc:hp,kernelFunc:gp},xu;function bp(t){xu=t.wasm.cwrap(i.Min,null,["number","number","number","number"])}function vp(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M)}const h=s.shape.length;i.backend_util.assertAxesAreInnerMostDims("min",m,h);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,m),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;xu(l,G[o.dtype],k,M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var yp={kernelName:i.Min,backendName:"wasm",setupFunc:bp,kernelFunc:vp},Ip=!1,kp=Y(i.Minimum,Ip),Kn;(function(t){t[t.reflect=0]="reflect",t[t.symmetric=1]="symmetric"})(Kn||(Kn={}));var Du;function Sp(t){Du=t.wasm.cwrap(i.MirrorPad,null,["number","array","number","number","array","array","number","number"])}function Mp(t){const{inputs:{x:a},backend:u,attrs:{paddings:d,mode:r}}=t,n=d.map((h,b)=>h[0]+a.shape[b]+h[1]),o=u.dataIdMap.get(a.dataId).id,p=u.makeOutput(n,a.dtype),l=u.dataIdMap.get(p.dataId).id,s=new Uint8Array(new Int32Array(a.shape).buffer),e=d.map(h=>h[0]),m=d.map(h=>h[1]),f=new Uint8Array(new Int32Array(e).buffer),g=new Uint8Array(new Int32Array(m).buffer);return Du(o,s,a.shape.length,G[a.dtype],f,g,Kn[r],l),p}var Ap={kernelName:i.MirrorPad,backendName:"wasm",kernelFunc:Mp,setupFunc:Sp},wu;function xp(t){wu=t.wasm.cwrap(i.Softmax,null,["number","number","number","number"])}function Fu(t){const{backend:a,inputs:{logits:u},attrs:{dim:d}}=t,r=a.dataIdMap.get(u.dataId).id,n=a.makeOutput(u.shape,u.dtype),o=a.dataIdMap.get(n.dataId).id,p=u.shape[d],l=i.util.sizeFromShape(u.shape)/p;return i.util.sizeFromShape(n.shape)===0||wu(r,o,p,l),n}var Dp={kernelName:i.Softmax,backendName:"wasm",setupFunc:xp,kernelFunc:Fu},Nu;function wp(t){Nu=t.wasm.cwrap(i.Multinomial,null,["number","number","number","number","number","number"])}function Fp(t){const{inputs:a,backend:u,attrs:d}=t,{logits:r}=a,{numSamples:n,seed:o,normalized:p}=d;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);const l=p?r:Fu({inputs:{logits:r},backend:u,attrs:{dim:r.shape.length-1}}),[s,e]=l.shape,m=u.makeOutput([s,n],"int32");return Nu(u.dataIdMap.get(l.dataId).id,s,e,n,o,u.dataIdMap.get(m.dataId).id),p||u.disposeData(l.dataId),m}var Np={kernelName:i.Multinomial,backendName:"wasm",setupFunc:wp,kernelFunc:Fp},Cp=Y(i.Mod,!0),Rp=!0,_p=Y(i.Multiply,Rp),Pp=W(i.Neg);function Xn(t,a){const u=new Int32Array(t.wasm.HEAPU8.buffer,a,4),d=u[0],r=u[1],n=u[2],o=u[3];return t.wasm._free(a),{pSelectedIndices:d,selectedSize:r,pSelectedScores:n,pValidOutputs:o}}var Cu;function Ep(t){Cu=t.wasm.cwrap(i.NonMaxSuppressionV3,"number",["number","number","number","number","number"])}function Bp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o}=d,{boxes:p,scores:l}=u,s=a.dataIdMap.get(p.dataId).id,e=a.dataIdMap.get(l.dataId).id,m=Cu(s,e,n,r,o),{pSelectedIndices:f,selectedSize:g,pSelectedScores:h,pValidOutputs:b}=Xn(a,m);return a.wasm._free(h),a.wasm._free(b),a.makeOutput([g],"int32",f)}var Tp={kernelName:i.NonMaxSuppressionV3,backendName:"wasm",setupFunc:Ep,kernelFunc:Bp},Ru;function Op(t){Ru=t.wasm.cwrap(i.NonMaxSuppressionV4,"number",["number","number","number","number","number","bool"])}function Wp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o,padToMaxOutputSize:p}=d,{boxes:l,scores:s}=u,e=a.dataIdMap.get(l.dataId).id,m=a.dataIdMap.get(s.dataId).id,f=Ru(e,m,n,r,o,p),{pSelectedIndices:g,selectedSize:h,pSelectedScores:b,pValidOutputs:y}=Xn(a,f);return a.wasm._free(b),[a.makeOutput([h],"int32",g),a.makeOutput([],"int32",y)]}var zp={kernelName:i.NonMaxSuppressionV4,backendName:"wasm",setupFunc:Op,kernelFunc:Wp},_u;function Hp(t){_u=t.wasm.cwrap(i.NonMaxSuppressionV5,"number",["number","number","number","number","number","number"])}function Lp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o,softNmsSigma:p}=d,{boxes:l,scores:s}=u,e=a.dataIdMap.get(l.dataId).id,m=a.dataIdMap.get(s.dataId).id,f=_u(e,m,n,r,o,p),{pSelectedIndices:g,selectedSize:h,pSelectedScores:b,pValidOutputs:y}=Xn(a,f);return a.wasm._free(y),[a.makeOutput([h],"int32",g),a.makeOutput([h],"float32",b)]}var Gp={kernelName:i.NonMaxSuppressionV5,backendName:"wasm",setupFunc:Hp,kernelFunc:Lp},$p=!1,Vp=Y(i.NotEqual,$p,"bool"),Pu;function Up(t){Pu=t.wasm.cwrap(i.OneHot,null,["number","number","number","number","number"])}function qp(t){const{inputs:a,backend:u,attrs:d}=t,{indices:r}=a,{dtype:n,depth:o,onValue:p,offValue:l}=d,s=u.makeOutput([...r.shape,o],n),e=u.dataIdMap.get(s.dataId).id,m=u.dataIdMap.get(r.dataId).id;return Pu(m,o,p,l,e),s}var Kp={kernelName:i.OneHot,backendName:"wasm",setupFunc:Up,kernelFunc:qp};function Xp(t){const{inputs:{x:a},backend:u}=t,d=u.makeOutput(a.shape,a.dtype);return u.typedArrayFromHeap(d).fill(1),d}var Jp={kernelName:i.OnesLike,backendName:"wasm",kernelFunc:Xp};function Qp(t){const{inputs:a,backend:u,attrs:d}=t,{axis:r}=d;if(a.length===1)return qn({inputs:{input:a[0]},backend:u,attrs:{dim:r}});const n=a[0].shape,o=a[0].dtype;a.forEach(e=>{i.util.assertShapesMatch(n,e.shape,"All tensors passed to stack must have matching shapes"),i.util.assert(o===e.dtype,()=>"All tensors passed to stack must have matching dtypes")});const p=[],l=a.map(e=>{const m=qn({inputs:{input:e},backend:u,attrs:{dim:r}});return p.push(m),m}),s=Vr({inputs:l,backend:u,attrs:{axis:r}});return p.forEach(e=>u.disposeData(e.dataId)),s}var Yp={kernelName:i.Pack,backendName:"wasm",kernelFunc:Qp},Eu;function Zp(t){Eu=t.wasm.cwrap(i.PadV2,null,["number","array","number","number","array","array","number","number"])}function jp(t){const{inputs:{x:a},backend:u,attrs:{paddings:d,constantValue:r}}=t,n=d.map((h,b)=>h[0]+a.shape[b]+h[1]);if(i.util.sizeFromShape(a.shape)===0)return su({backend:u,attrs:{shape:n,value:r,dtype:a.dtype}});const o=u.dataIdMap.get(a.dataId).id,p=u.makeOutput(n,a.dtype),l=u.dataIdMap.get(p.dataId).id,s=new Uint8Array(new Int32Array(a.shape).buffer),e=d.map(h=>h[0]),m=d.map(h=>h[1]),f=new Uint8Array(new Int32Array(e).buffer),g=new Uint8Array(new Int32Array(m).buffer);return Eu(o,s,a.shape.length,G[a.dtype],f,g,r,l),p}var Bu={kernelName:i.PadV2,backendName:"wasm",kernelFunc:jp,setupFunc:Zp},el=!1,nl=Y(i.Pow,el),Tu;function tl(t){Tu=t.wasm.cwrap(i.Prelu,null,["number","number","number"])}function al(t){const{inputs:a,backend:u}=t,{x:d,alpha:r}=a,n=u.dataIdMap.get(d.dataId).id,o=u.dataIdMap.get(r.dataId).id;let p=n;const l=d;let s=l;l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:d},attrs:{dtype:"float32"}}),p=u.dataIdMap.get(s.dataId).id);const e=u.makeOutput(d.shape,"float32"),m=u.dataIdMap.get(e.dataId).id;return Tu(p,o,m),l.dtype!=="float32"&&u.disposeData(s.dataId),e}var rl={kernelName:i.Prelu,backendName:"wasm",setupFunc:tl,kernelFunc:al},Ou;function ul(t){Ou=t.wasm.cwrap(i.Prod,null,["number","number","number","number"])}function il(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("prod",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;Ou(l,k,G[I.dtype],M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var sl={kernelName:i.Prod,backendName:"wasm",setupFunc:ul,kernelFunc:il},dl=t=>{const{backend:a,attrs:u}=t,{start:d,stop:r,step:n,dtype:o}=u,p=vs(d,r,n,o),l=a.makeOutput([p.length],o);return a.typedArrayFromHeap(l).set(p),l},ol={kernelName:i.Range,backendName:"wasm",kernelFunc:dl},pl=!0,ll=Y(i.RealDiv,pl),cl=W(i.Reciprocal),ml=W(i.Relu),hl=W(i.Relu6),Wu;function gl(t){Wu=t.wasm.cwrap(i.ResizeBilinear,null,["number","number","number","number","number","number","number","number","number","number"])}function fl(t){const{backend:a,inputs:u,attrs:d}=t,{images:r}=u,{alignCorners:n,halfPixelCenters:o,size:p}=d,[l,s]=p,[e,m,f,g]=r.shape,h=[e,l,s,g];let b=a.dataIdMap.get(r.dataId),y;b.dtype!=="float32"&&(y=Se({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),b=a.dataIdMap.get(y.dataId));const k=b.id,I=a.makeOutput(h,"float32");if(i.util.sizeFromShape(r.shape)===0)return I;const M=a.dataIdMap.get(I.dataId).id;return Wu(k,e,m,f,g,l,s,n?1:0,o?1:0,M),y!=null&&a.disposeData(y.dataId),I}var bl={kernelName:i.ResizeBilinear,backendName:"wasm",setupFunc:gl,kernelFunc:fl},zu;function vl(t){zu=t.wasm.cwrap(i.ResizeBilinearGrad,null,["number","number","number","array","array","boolean"])}function yl(t){const{inputs:a,backend:u,attrs:d}=t,{images:r,dy:n}=a,{alignCorners:o}=d,p=u.makeOutput(r.shape,"float32");let l=u.dataIdMap.get(r.dataId),s;return l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:r},attrs:{dtype:"float32"}}),l=u.dataIdMap.get(s.dataId)),zu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(p.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(n.shape).buffer),o),s!=null&&u.disposeData(s.dataId),p}var Il={kernelName:i.ResizeBilinearGrad,backendName:"wasm",setupFunc:vl,kernelFunc:yl},Hu;function kl(t){Hu=t.wasm.cwrap(i.ResizeNearestNeighbor,null,["number","number","number","number","number","number","number","number","number","number"])}function Sl(t){const{backend:a,inputs:u,attrs:d}=t,{images:r}=u,{alignCorners:n,halfPixelCenters:o,size:p}=d,[l,s]=p,[e,m,f,g]=r.shape,h=[e,l,s,g],b=a.makeOutput(h,"float32");if(i.util.sizeFromShape(r.shape)===0)return b;let y=a.dataIdMap.get(r.dataId),k;y.dtype!=="float32"&&(k=Se({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),y=a.dataIdMap.get(k.dataId));const I=y.id,M=a.dataIdMap.get(b.dataId).id;return Hu(I,e,m,f,g,l,s,n?1:0,o?1:0,M),k!=null&&a.disposeData(k.dataId),b}var Ml={kernelName:i.ResizeNearestNeighbor,backendName:"wasm",setupFunc:kl,kernelFunc:Sl},Lu;function Al(t){Lu=t.wasm.cwrap(i.ResizeNearestNeighborGrad,null,["number","number","number","array","array","boolean"])}function xl(t){const{inputs:a,backend:u,attrs:d}=t,{images:r,dy:n}=a,{alignCorners:o}=d,p=u.makeOutput(r.shape,"float32");let l=u.dataIdMap.get(r.dataId),s;return l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:r},attrs:{dtype:"float32"}}),l=u.dataIdMap.get(s.dataId)),Lu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(p.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(n.shape).buffer),o),s!=null&&u.disposeData(s.dataId),p}var Dl={kernelName:i.ResizeNearestNeighborGrad,backendName:"wasm",setupFunc:Al,kernelFunc:xl},Gu;function wl(t){Gu=t.wasm.cwrap(i.Reverse,null,["number","array","number","array","number","number"])}function Fl(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{dims:n}=d,o=i.util.parseAxisParam(n,r.shape);if(r.shape.length===0)return on({inputs:{x:r},backend:u});const p=u.makeOutput(r.shape,r.dtype),l=u.dataIdMap.get(r.dataId).id,s=u.dataIdMap.get(p.dataId).id,e=new Uint8Array(new Int32Array(o).buffer),m=new Uint8Array(new Int32Array(r.shape).buffer);Gu(l,e,o.length,m,r.shape.length,s);const f=ue({inputs:{x:p},attrs:{shape:r.shape},backend:u});return u.disposeData(p.dataId),f}var Nl={kernelName:i.Reverse,backendName:"wasm",kernelFunc:Fl,setupFunc:wl},$u;function Cl(t){$u=t.wasm.cwrap(i.RotateWithOffset,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Rl(t){const{inputs:a,backend:u,attrs:d}=t,{image:r}=a,{radians:n,fillValue:o,center:p}=d,l=u.makeOutput(r.shape,r.dtype),s=u.dataIdMap.get(r.dataId).id,e=u.dataIdMap.get(l.dataId).id,[m,f,g,h]=r.shape,[b,y]=i.backend_util.getImageCenter(p,f,g),k=o===0,I=255,M=typeof o=="number"?[o,o,o,k?0:I]:[...o,I],D=new Uint8Array(new Int32Array(M).buffer);return $u(s,m,f,g,h,n,b,y,D,M.length,e),l}var _l={kernelName:i.RotateWithOffset,backendName:"wasm",kernelFunc:Rl,setupFunc:Cl},Pl=W(i.Round),El=W(i.Rsqrt),Vu;function Bl(t){Vu=t.wasm.cwrap(i.ScatterNd,null,["number","number","number","number","number","number","array","number","number"])}function Tl(t){const{backend:a,inputs:u,attrs:d}=t,{indices:r,updates:n}=u,{shape:o}=d,p=a.makeOutput(o,n.dtype);if(i.util.sizeFromShape(o)===0)return p;const{sliceRank:l,numUpdates:s,sliceSize:e,strides:m,outputSize:f}=i.scatter_util.calculateShapes(n,r,o),g=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(m).buffer),y=a.dataIdMap.get(p.dataId).id;return Vu(g,h,G[n.dtype],l,s,e,b,f,y),p}var Ol={kernelName:i.ScatterNd,backendName:"wasm",setupFunc:Bl,kernelFunc:Tl},Uu;function Wl(t){Uu=t.wasm.cwrap(i.SearchSorted,null,["number","number","number","number","number","number","bool","number"])}function zl(t){const{inputs:a,backend:u,attrs:d}=t,{sortedSequence:r,values:n}=a,{side:o}=d;if(r.dtype!==n.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${n.dtype}`);const p=u.makeOutput(n.shape,"int32");function l(s){return u.dataIdMap.get(s.dataId).id}return Uu(l(r),l(n),r.shape[0],r.shape[1],n.shape[1],G[r.dtype],o==="left",l(p)),p}var Hl={kernelName:i.SearchSorted,backendName:"wasm",setupFunc:Wl,kernelFunc:zl},qu;function Ll(t){qu=t.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Gl(t){const{inputs:a,backend:u}=t,{condition:d,t:r,e:n}=a,o=u.dataIdMap.get(d.dataId).id,p=u.dataIdMap.get(r.dataId).id,l=u.dataIdMap.get(n.dataId).id,s=u.makeOutput(r.shape,r.dtype),e=u.dataIdMap.get(s.dataId).id,m=d.shape.length,f=r.shape.length,g=m===0||m>1||f===1?1:i.util.sizeFromShape(r.shape.slice(1));return qu(o,p,l,g,e),s}var $l={kernelName:i.Select,backendName:"wasm",kernelFunc:Gl,setupFunc:Ll},Vl=W(i.Selu),Ku;function Ul(t){Ku=t.wasm.cwrap(i.Sigmoid,null,["number","number"])}function ql(t){const{backend:a,inputs:{x:u}}=t,d=a.dataIdMap.get(u.dataId).id,r=a.makeOutput(u.shape,u.dtype),n=a.dataIdMap.get(r.dataId).id;return i.util.sizeFromShape(r.shape)===0||Ku(d,n),r}var Kl={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Ul,kernelFunc:ql},Xl=W(i.Sign),Jl=W(i.Sin),Ql=W(i.Sinh),Yl=W(i.Softplus);function Zl(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{blockShape:n,paddings:o}=d,p=i.util.sizeFromShape(n),l=[[0,0]];l.push(...o);for(let y=1+n.length;y<r.shape.length;++y)l.push([0,0]);const s=Bu.kernelFunc({inputs:{x:r},backend:u,attrs:{paddings:l,constantValue:0}}),e=i.backend_util.getReshaped(s.shape,n,p,!1),m=i.backend_util.getPermuted(e.length,n.length,!1),f=i.backend_util.getReshapedPermuted(s.shape,n,p,!1),g=ue({inputs:{x:s},backend:u,attrs:{shape:e}}),h=Ie({inputs:{x:g},backend:u,attrs:{perm:m}}),b=ue({inputs:{x:h},backend:u,attrs:{shape:f}});return u.disposeData(s.dataId),u.disposeData(g.dataId),u.disposeData(h.dataId),b}var jl={kernelName:i.SpaceToBatchND,backendName:"wasm",kernelFunc:Zl},Xu;function ec(t){Xu=t.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function nc(t){const{backend:a,inputs:u}=t,{indices:d,values:r,denseShape:n,defaultValue:o}=u,p=d.shape[0],l=d.shape[1],s=a.readSync(n.dataId)[0],e=[p+s,l],m=a.dataIdMap.get(d.dataId).id,f=a.dataIdMap.get(r.dataId).id,g=a.dataIdMap.get(o.dataId).id,h=a.makeOutput(e,d.dtype),b=a.dataIdMap.get(h.dataId).id,y=a.makeOutput(e.slice(0,1),r.dtype),k=a.dataIdMap.get(y.dataId).id,I=a.makeOutput([s],"bool"),M=a.dataIdMap.get(I.dataId).id,D=a.makeOutput([p],d.dtype),F=a.dataIdMap.get(D.dataId).id,E=a.makeOutput([4],"int32"),O=a.dataIdMap.get(E.dataId).id,B=Xu(m,f,G[r.dtype],p,s,l,g,b,k,M,F,O),K=a.readSync(E.dataId);let X;switch(K[0]){case 1:X=i.backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch(K[1]);break;case 2:X=i.backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage(K[1],K[2]);break;case 3:X=i.backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(K[1],K[2],K[3]);break;default:X=""}if(a.disposeData(E.dataId),X)throw a.disposeData(h.dataId),a.disposeData(y.dataId),a.disposeData(I.dataId),a.disposeData(D.dataId),new Error(X);let U=h,q=y;return B!==e[0]&&(U=De({inputs:{x:h},attrs:{begin:0,size:[B,l]},backend:a}),q=De({inputs:{x:y},attrs:{begin:0,size:B},backend:a}),a.disposeData(h.dataId),a.disposeData(y.dataId)),[U,q,I,D]}var tc={kernelName:i.SparseFillEmptyRows,backendName:"wasm",setupFunc:ec,kernelFunc:nc},Ju;function ac(t){Ju=t.wasm.cwrap(i.SparseReshape,null,["number","number","number","number","number","number","number"])}function rc(t){const{backend:a,inputs:u}=t,{inputIndices:d,inputShape:r,newShape:n}=u;if(d.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
3
3
  ${d.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
4
4
  ${r.shape}`);if(n.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${n.shape}`);const o=a.dataIdMap.get(d.dataId).id,p=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(n.dataId).id,s=d.shape[0],e=i.util.sizeFromShape(n.shape),m=a.makeOutput([s,e],d.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([e],n.dtype),h=a.dataIdMap.get(g.dataId).id,b=a.makeOutput([3],"int32"),y=a.dataIdMap.get(b.dataId).id;Ju(o,p,l,s,f,h,y);const k=a.readSync(b.dataId);let I;switch(k[0]){case 0:I=i.backend_util.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(k[1],k[2]);break;case 1:I=i.backend_util.getSparseReshapeNegativeOutputDimErrorMessage(k[1],k[2]);break;case 2:I=i.backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{const M=Array.from(a.readSync(r.dataId)),D=Array.from(a.readSync(g.dataId));I=i.backend_util.getSparseReshapeInputOutputMultipleErrorMessage(M,D);break}case 4:{const M=Array.from(a.readSync(r.dataId)),D=Array.from(a.readSync(g.dataId));I=i.backend_util.getSparseReshapeInputOutputMismatchErrorMessage(M,D);break}default:I=""}if(a.disposeData(b.dataId),I)throw a.disposeData(m.dataId),a.disposeData(g.dataId),new Error(I);return[m,g]}var uc={kernelName:i.SparseReshape,backendName:"wasm",setupFunc:ac,kernelFunc:rc},Qu;function Yu(t){Qu=t.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function Zu(t,a){const{backend:u,inputs:d}=t,{data:r,indices:n,segmentIds:o}=d,p=n.shape[0],l=u.readSync(o.dataId,p-1,p)[0],s=p>0?l+1:0;if(s<0)throw new Error(i.backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());const e=r.shape.slice();e[0]=s;const m=u.dataIdMap.get(r.dataId).id,f=u.dataIdMap.get(n.dataId).id,g=u.dataIdMap.get(o.dataId).id,h=u.makeOutput(e,r.dtype),b=u.dataIdMap.get(h.dataId).id,y=u.makeOutput([4],"int32"),k=u.dataIdMap.get(y.dataId).id;Qu(m,G[r.dtype],r.shape[0],f,g,b,k,a,0);const I=u.readSync(y.dataId);let M;switch(I[0]){case 0:M=i.backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break;case 1:M=i.backend_util.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break;case 2:M=i.backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(I[1],I[2]);break;case 3:M=i.backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(I[1],I[2],I[3]);break;default:M=""}if(u.disposeData(y.dataId),M)throw u.disposeData(h.dataId),new Error(M);return h}function ic(t){return Zu(t,!0)}var sc={kernelName:i.SparseSegmentMean,backendName:"wasm",setupFunc:Yu,kernelFunc:ic};function dc(t){return Zu(t,!1)}var oc={kernelName:i.SparseSegmentSum,backendName:"wasm",setupFunc:Yu,kernelFunc:dc},ju;function pc(t){ju=t.wasm.cwrap(i.SparseToDense,null,["number","number","number","number","number","number","number","number","array","number","number"])}function lc(t){const{backend:a,inputs:u,attrs:d}=t,{sparseIndices:r,sparseValues:n,defaultValue:o}=u,{outputShape:p}=d,l=a.makeOutput(p,o.dtype);if(i.util.sizeFromShape(p)===0)return l;const{sliceRank:s,numUpdates:e,sliceSize:m,strides:f,outputSize:g}=i.backend_util.calculateShapes(n,r,p),h=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(n.dataId).id,y=a.dataIdMap.get(o.dataId).id,k=new Uint8Array(new Int32Array(f).buffer),I=a.dataIdMap.get(l.dataId).id;return ju(h,b,n.shape.length,y,G[o.dtype],s,e,m,k,g,I),l}var cc={kernelName:i.SparseToDense,backendName:"wasm",setupFunc:pc,kernelFunc:lc};function mc(t){const{inputs:a,attrs:u,backend:d}=t,{x:r}=a,{numOrSizeSplits:n,axis:o}=u,p=i.util.parseAxisParam(o,r.shape)[0],l=i.backend_util.prepareSplitSize(r,n,p),s=new Array(r.shape.length).fill(0),e=r.shape.slice();return l.map(m=>{const f=[...e];f[p]=m;const g=De({inputs:{x:r},attrs:{begin:s,size:f},backend:d});return s[p]+=m,g})}var hc={kernelName:i.SplitV,backendName:"wasm",kernelFunc:mc},gc=W(i.Sqrt),fc=W(i.Square),bc=!0,vc=Y(i.SquaredDifference,bc),ei;function yc(t){ei=t.wasm.cwrap(i.Step,null,["number","number","number","number"])}function Ic(t){const{backend:a,inputs:u,attrs:d}=t,{alpha:r}=d,{x:n}=u,o=a.dataIdMap.get(n.dataId).id,p=a.makeOutput(n.shape,n.dtype),l=a.dataIdMap.get(p.dataId).id;return ei(o,r,G[n.dtype],l),p}var kc={kernelName:i.Step,backendName:"wasm",setupFunc:yc,kernelFunc:Ic},ni;function Sc(t){ni=t.wasm.cwrap(i.StridedSlice,null,["number","array","number","array","array","array","array","array","number","number"])}function Mc(t){const{backend:a,inputs:u,attrs:d}=t,{x:r}=u,{begin:n,end:o,strides:p,beginMask:l,endMask:s,ellipsisMask:e,newAxisMask:m,shrinkAxisMask:f}=d,{finalShapeSparse:g,finalShape:h,isIdentity:b,sliceDim0:y,isSimpleSlice:k,begin:I,end:M,strides:D}=i.slice_util.sliceInfo(r.shape,n,o,p,l,s,e,m,f);let F;if(b)F=ue({inputs:{x:r},backend:a,attrs:{shape:h}});else if(y||k){i.util.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);const E=i.slice_util.computeOutShape(I,M,D),O=De({inputs:{x:r},backend:a,attrs:{begin:I,size:E}});F=ue({inputs:{x:O},backend:a,attrs:{shape:h}}),a.disposeData(O.dataId)}else{const E=a.makeOutput(g,"float32"),O=a.dataIdMap.get(r.dataId).id,B=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),K=new Uint8Array(new Int32Array(I).buffer),X=new Uint8Array(new Int32Array(M).buffer),U=new Uint8Array(new Int32Array(D).buffer),q=new Uint8Array(new Int32Array(g).buffer),Z=new Uint8Array(new Int32Array(i.util.computeStrides(g)).buffer),ie=a.dataIdMap.get(E.dataId).id;ni(O,B,r.shape.length,K,X,U,q,Z,g.length,ie),F=ue({inputs:{x:E},backend:a,attrs:{shape:h}}),a.disposeData(E.dataId)}return F}var Ac={kernelName:i.StridedSlice,backendName:"wasm",setupFunc:Sc,kernelFunc:Mc};function xc(t){const{backend:a,inputs:u,attrs:d}=t,{data:r,dataSplits:n}=u,{separator:o,nGramWidths:p,leftPad:l,rightPad:s,padWidth:e,preserveShortSequences:m}=d,f=a.readSync(r.dataId),g=a.readSync(n.dataId),[h,b]=Is(f,g,o,p,l,s,e,m),y=a.makeOutput([h.length],"string"),k=a.dataIdMap.get(y.dataId);k.stringBytes=h;const I=a.makeOutput(n.shape,"int32");return a.typedArrayFromHeap(I).set(b),[y,I]}var Dc={kernelName:i.StringNGrams,backendName:"wasm",kernelFunc:xc};function wc(t){const{backend:a,inputs:u,attrs:d}=t,{input:r,delimiter:n}=u,{skipEmpty:o}=d,p=a.readSync(r.dataId),l=a.readSync(n.dataId),[s,e,m]=Ss(p,l[0],o),f=e.length,g=a.makeOutput([f,2],"int32");a.typedArrayFromHeap(g).set(s);const h=a.makeOutput([f],"string"),b=a.dataIdMap.get(h.dataId);b.stringBytes=e;const y=a.makeOutput([2],"int32");return a.typedArrayFromHeap(y).set(m),[g,h,y]}var Fc={kernelName:i.StringSplit,backendName:"wasm",kernelFunc:wc};function Nc(t){const{backend:a,inputs:u,attrs:d}=t,{input:r}=u,{numBuckets:n}=d,o=a.readSync(r.dataId),p=Ms(o,n),l=a.makeOutput(r.shape,"int32");return a.typedArrayFromHeap(l).set(p),l}var Cc={kernelName:i.StringToHashBucketFast,backendName:"wasm",kernelFunc:Nc},Rc=!0,_c=Y(i.Sub,Rc),ti;function Pc(t){ti=t.wasm.cwrap(i.Sum,null,["number","number","number","number"])}function Ec(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("sum",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;ti(l,k,G[I.dtype],M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var Bc={kernelName:i.Sum,backendName:"wasm",setupFunc:Pc,kernelFunc:Ec},Tc=W(i.Tan),Oc=W(i.Tanh),ai;function Wc(t){ai=t.wasm.cwrap(i.TensorScatterUpdate,null,["number","number","number","number","number","number","array","number","number","number"])}function zc(t){const{backend:a,inputs:u,attrs:d}=t,{tensor:r,indices:n,updates:o}=u,{}=d,p=a.makeOutput(r.shape,r.dtype);if(i.util.sizeFromShape(r.shape)===0)return p;const{sliceRank:l,numUpdates:s,sliceSize:e,strides:m,outputSize:f}=i.scatter_util.calculateShapes(o,n,r.shape),g=a.dataIdMap.get(n.dataId).id,h=a.dataIdMap.get(o.dataId).id,b=a.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(m).buffer),k=a.dataIdMap.get(p.dataId).id;return ai(g,h,G[o.dtype],l,s,e,y,f,k,b),p}var Hc={kernelName:i.TensorScatterUpdate,backendName:"wasm",setupFunc:Wc,kernelFunc:zc},ri;function Lc(t){ri=t.wasm.cwrap(i.Tile,null,["number","array","number","array","number","number"])}function Gc(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,n=u.dataIdMap.get(r.dataId).id,{reps:o}=d,p=new Array(r.shape.length);for(let f=0;f<p.length;f++)p[f]=r.shape[f]*o[f];const l=new Uint8Array(new Int32Array(r.shape).buffer),s=new Uint8Array(new Int32Array(p).buffer),e=u.makeOutput(p,r.dtype),m=u.dataIdMap.get(e.dataId).id;return ri(n,l,r.shape.length,s,p.length,G[e.dtype],m),e}var $c={kernelName:i.Tile,backendName:"wasm",setupFunc:Lc,kernelFunc:Gc},ui;function Vc(t){ui=t.wasm.cwrap(i.TopK,null,["number","array","number","number","number","bool","number","number"])}var Uc=({inputs:t,backend:a,attrs:u})=>{const{x:d}=t,{k:r,sorted:n}=u,o=a.dataIdMap.get(d.dataId).id,p=new Uint8Array(new Int32Array(d.shape).buffer),l=d.shape.slice();l[l.length-1]=r;const s=a.makeOutput(l,d.dtype),e=a.dataIdMap.get(s.dataId).id,m=a.makeOutput(l,"int32"),f=a.dataIdMap.get(m.dataId).id;return ui(o,p,d.shape.length,G[d.dtype],r,n,e,f),[s,m]},qc={kernelName:i.TopK,backendName:"wasm",setupFunc:Vc,kernelFunc:Uc},ii;function Kc(t){ii=t.wasm.cwrap(i.Transform,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Xc(t){const{backend:a,inputs:u,attrs:d}=t,{image:r,transforms:n}=u,{interpolation:o,fillMode:p,fillValue:l,outputShape:s}=d,[e,m,f,g]=r.shape,[h,b]=s??[m,f],y=[e,h,b,g],k=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),I=new Uint8Array(new Int32Array(i.util.computeStrides(y)).buffer),M=a.makeOutput(y,r.dtype),D=a.dataIdMap.get(M.dataId).id,F=a.dataIdMap.get(r.dataId).id,E=a.dataIdMap.get(n.dataId).id,O=o==="nearest"?1:2;let B;switch(p){case"constant":B=1;break;case"reflect":B=2;break;case"wrap":B=3;break;case"nearest":B=4;break;default:B=1}return ii(F,E,n.shape[0]>1,e,h,b,g,f,m,k,r.shape.length-1,I,y.length-1,O,B,l,D),M}var Jc={kernelName:i.Transform,backendName:"wasm",setupFunc:Kc,kernelFunc:Xc};function Qc(t){const{inputs:a,attrs:u,backend:d}=t,{axis:r}=u,{x:n}=a,{outputValues:o,outputShape:p,indices:l}=As(d.readSync(n.dataId),r,n.shape,n.dtype);return[d.makeOutput(p,n.dtype,void 0,o),d.makeOutput([l.length],"int32",void 0,l)]}var Yc={kernelName:i.Unique,backendName:"wasm",kernelFunc:Qc};function Zc(t){const{inputs:a,backend:u,attrs:d}=t,{value:r}=a;let{axis:n}=d;n<0&&(n+=r.shape.length);const o=r.shape[n],p=r.shape.length,l=new Array(p-1);let s=0;for(let g=0;g<p;g++)g!==n&&(l[s++]=r.shape[g]);const e=new Array(o),m=new Array(p).fill(0),f=r.shape.slice();f[n]=1;for(let g=0;g<e.length;g++)m[n]=g,e[g]=De({inputs:{x:r},attrs:{begin:m,size:f},backend:u});return e.map(({dataId:g,dtype:h})=>({dataId:g,dtype:h,shape:l}))}var jc={kernelName:i.Unpack,backendName:"wasm",kernelFunc:Zc};function em(t){const{inputs:{x:a},backend:u}=t,d=u.makeOutput(a.shape,a.dtype);return u.typedArrayFromHeap(d).fill(0),d}var nm={kernelName:i.ZerosLike,backendName:"wasm",kernelFunc:em},tm=[Fi,Ni,Ci,Ri,Pi,Ti,Vi,Ki,Xi,Ji,Qi,Yi,Zi,ji,es,as,cs,is,os,fs,Cs,Ps,Bs,Os,Ws,zs,Gs,$s,qs,Js,Zs,nd,rd,ud,id,od,cd,gd,vd,kd,Ad,wd,Cd,Pd,Td,Od,Hd,Gd,$d,Vd,Ud,qd,Kd,Qd,Yd,jd,to,uo,oo,co,go,bo,yo,Oi,Io,ko,So,xo,wo,No,_o,Eo,Po,To,Oo,zo,Lo,Vo,Ko,Qo,Zo,np,rp,sp,pp,mp,fp,yp,kp,Ap,Np,Cp,_p,Pp,Tp,zp,Gp,Vp,Kp,Jp,Yp,Bu,nl,rl,sl,ol,ll,cl,ml,hl,ms,bl,Il,Ml,Dl,Nl,_l,Pl,El,Ol,Hl,$l,Vl,Kl,Xl,Jl,Ql,Fs,Dp,Yl,jl,tc,uc,sc,oc,cc,hc,gc,fc,vc,kc,Ac,Dc,Fc,Cc,_c,Bc,Tc,Oc,Hc,$c,qc,Jc,Li,Yc,jc,nm];for(const t of tm)(0,i.registerKernel)(t);var Jn=(0,i.env)();Jn.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch{return!1}}),Jn.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Jn.get("IS_NODE"))return!1;try{return 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}});var we=dn(((t,a)=>{a.exports={}})),am=dn(((t,a)=>{var u=(()=>{var d=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(d=d||__filename),(function(r){r=r||{};function n(){return $.buffer!=de&&he($.buffer),fe}function o(){return $.buffer!=de&&he($.buffer),We}function p(){return $.buffer!=de&&he($.buffer),Me}function l(){return $.buffer!=de&&he($.buffer),ln}function s(){return $.buffer!=de&&he($.buffer),cn}var e=typeof r<"u"?r:{},m,f;e.ready=new Promise(function(c,v){m=c,f=v});var g;typeof process<"u"&&process.listeners&&(g={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var h=Object.assign({},e),b=[],y=(c,v)=>{throw v},k=typeof window=="object",I=typeof importScripts=="function",M=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",D=e.ENVIRONMENT_IS_PTHREAD||!1,F="";function E(c){return e.locateFile?e.locateFile(c,F):F+c}var O,B,K;function X(c){c instanceof _e||Q("exiting due to exception: "+c)}if(M){var U=we(),q=we();I?F=q.dirname(F)+"/":F=__dirname+"/",O=(v,A)=>(v=He(v)?new URL(v):q.normalize(v),U.readFileSync(v,A?void 0:"utf8")),K=v=>{var A=O(v,!0);return A.buffer||(A=new Uint8Array(A)),A},B=(v,A,_)=>{v=He(v)?new URL(v):q.normalize(v),U.readFile(v,function(R,w){R?_(R):A(w.buffer)})},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),b=process.argv.slice(2),process.on("uncaughtException",function(v){if(!(v instanceof _e))throw v}),process.on("unhandledRejection",function(v){throw v}),y=(v,A)=>{if(ze())throw process.exitCode=v,A;X(A),process.exit(v)},e.inspect=function(){return"[Emscripten Module object]"};let c;try{c=we()}catch(v){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),v}global.Worker=c.Worker}else(k||I)&&(I?F=self.location.href:typeof document<"u"&&document.currentScript&&(F=document.currentScript.src),typeof d<"u"&&d&&(F=d),F.indexOf("blob:")!==0?F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1):F="",M||(O=c=>{var v=new XMLHttpRequest;return v.open("GET",c,!1),v.send(null),v.responseText},I&&(K=c=>{var v=new XMLHttpRequest;return v.open("GET",c,!1),v.responseType="arraybuffer",v.send(null),new Uint8Array(v.response)}),B=(c,v,A)=>{var _=new XMLHttpRequest;_.open("GET",c,!0),_.responseType="arraybuffer",_.onload=()=>{if(_.status==200||_.status==0&&_.response){v(_.response);return}A()},_.onerror=A,_.send(null)}));M&&typeof performance>"u"&&(global.performance=we().performance);var Z=console.log.bind(console),ie=console.warn.bind(console);M&&(Z=c=>U.writeSync(1,c+`
@@ -1,4 +1,4 @@
1
- /*! @license Includes TensorFlow.js WebGPU backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v3.4.1/THIRD_PARTY_NOTICES.md. */
1
+ /*! @license Includes TensorFlow.js WebGPU backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v3.5.0/THIRD_PARTY_NOTICES.md. */
2
2
  (function(u){var gi=Object.create,Se=Object.defineProperty,xi=Object.getOwnPropertyDescriptor,vi=Object.getOwnPropertyNames,Ci=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty,_e=(e,i)=>{let t={};for(var s in e)Se(t,s,{get:e[s],enumerable:!0});return i||Se(t,Symbol.toStringTag,{value:"Module"}),t},bi=(e,i,t,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(var a=vi(i),r=0,n=a.length,o;r<n;r++)o=a[r],!je.call(e,o)&&o!==t&&Se(e,o,{get:(l=>i[l]).bind(null,o),enumerable:!(s=xi(i,o))||s.enumerable});return e},yi=(e,i,t)=>(t=e!=null?gi(Ci(e)):{},bi(i||!e||!e.__esModule||!je.call(e,"default")?Se(t,"default",{value:e,enumerable:!0}):t,e));u=yi(u);var K=(0,u.env)();K.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15),K.registerFlag("WEBGPU_CPU_FORWARD",()=>!0),K.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1),K.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0),K.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1),K.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3),K.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1),K.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0),K.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1),K.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1),K.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1),K.registerFlag("WEBGPU_PRINT_SHADER",()=>""),K.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Si=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}},Ii=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,i,t=!1,s=!0){let a;const r=et(e,i);return s?(this.freeBuffers.has(r)||this.freeBuffers.set(r,[]),this.freeBuffers.get(r).length>0?(a=this.freeBuffers.get(r).pop(),this.numFreeBuffers--):(a=this.device.createBuffer({size:e,usage:i,mappedAtCreation:t}),this.numBytesAllocated+=e)):(a=this.device.createBuffer({size:e,usage:i,mappedAtCreation:t}),this.numBytesAllocated+=e),this.usedBuffers.has(r)||this.usedBuffers.set(r,[]),this.usedBuffers.get(r).push(a),this.numUsedBuffers++,this.numBytesUsed+=e,a}releaseBuffer(e,i=!0){if(this.freeBuffers.size===0)return;const t=e.size,s=e.usage,a=et(t,s),r=this.usedBuffers.get(a),n=r.indexOf(e);if(n<0)throw new Error("Cannot find the buffer in buffer manager");r[n]=r[r.length-1],r.pop(),this.numUsedBuffers--,this.numBytesUsed-=t,i?(this.freeBuffers.get(a).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=t)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.usedBuffers.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function et(e,i){return`${e}_${i}`}var ki=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,i,t,s){const a=it(t),r=e*i*a,n=tt(e,i,t,s);if(this.freeTextures.has(n)||this.freeTextures.set(n,[]),this.usedTextures.has(n)||this.usedTextures.set(n,[]),this.numBytesUsed+=r,this.numUsedTextures++,this.freeTextures.get(n).length>0){this.numFreeTextures--;const l=this.freeTextures.get(n).shift();return this.usedTextures.get(n).push(l),l}this.numBytesAllocated+=r;const o=this.device.createTexture({size:[e,i],format:t,usage:s});return this.usedTextures.get(n).push(o),o}releaseTexture(e){if(this.freeTextures.size===0)return;const i=e.width,t=e.height,s=e.format,a=e.usage,r=tt(i,t,s,a);this.freeTextures.has(r)||this.freeTextures.set(r,[]),this.freeTextures.get(r).push(e),this.numFreeTextures++,this.numUsedTextures--;const n=this.usedTextures.get(r),o=n.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");n.splice(o,1);const l=it(s),d=i*t*l;this.numBytesUsed-=d}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.usedTextures.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function tt(e,i,t,s){return`${e}_${i}_${t}_${s}`}function it(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function wi(e,i){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");const t=e.length,s="xyzwuv",a=e.map(n=>`${i}.${s[n]}`),r=new Array(t-1);r[t-2]=a[t-1];for(let n=t-3;n>=0;--n)r[n]=`(${r[n+1]} * ${a[n+1]})`;return r}var ee=(e,i,t)=>t==="int32"?`atomicAdd(${e}, bitcast<i32>(${i}));`:`
3
3
  {
4
4
  var oldValue = 0;
@@ -549,7 +549,7 @@ function confidenceMultiplier(value) {
549
549
  }
550
550
  var package_default = {
551
551
  name: "@kubohiroya/turbowarp-teachable-machine",
552
- version: "3.4.1",
552
+ version: "3.5.0",
553
553
  description: "A TurboWarp extension for recognition using Teachable Machine pose, image, and audio models.",
554
554
  author: "Hiroya Kubo <hiroya@cuc.ac.jp>",
555
555
  license: "MPL-2.0",
@@ -666,6 +666,33 @@ var VERSION = `${package_default.version}-typescript`;
666
666
  var DOCS_URI = "https://kubohiroya.github.io/turbowarp-teachable-machine/";
667
667
  var ACCUMULATED_POSE_CHANGED_EVENT = "TM_ACCUMULATED_POSE_CHANGED";
668
668
  var BLOCK_ICON_URI = `data:image/svg+xml,${encodeURIComponent("<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\"><g fill=\"none\" stroke=\"#fff\" stroke-width=\"5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 21V8h13M43 8h13v13M8 43v13h13M43 56h13V43M32 25v15M20 31l12 5 12-5M32 40 23 52M32 40l9 12\"/><circle cx=\"32\" cy=\"18\" r=\"5\"/></g></svg>")}`;
669
+ /**
670
+ * Put keypoints where the preview shows them: in the camera frame's own space.
671
+ *
672
+ * The model sees a square centre crop with the pixels mirrored, so a keypoint comes back measured
673
+ * from the mirrored square's left edge. Undoing the mirror and adding the crop's offset puts it
674
+ * back on the frame, which is what the preview shows and what the overlay's viewBox spans. The
675
+ * preview's own mirroring is a CSS transform over both the video and the overlay, so these
676
+ * coordinates stay in frame space either way.
677
+ */
678
+ function mapKeypointsToFrame(keypoints, crop) {
679
+ if (!Array.isArray(keypoints) || !(crop.size > 0)) return keypoints;
680
+ return keypoints.map((keypoint) => {
681
+ if (typeof keypoint !== "object" || keypoint === null) return keypoint;
682
+ const position = keypoint.position;
683
+ const x = Number(position?.x);
684
+ const y = Number(position?.y);
685
+ if (!Number.isFinite(x) || !Number.isFinite(y)) return keypoint;
686
+ return {
687
+ ...keypoint,
688
+ position: {
689
+ ...position,
690
+ x: crop.left + (crop.size - x),
691
+ y: crop.top + y
692
+ }
693
+ };
694
+ });
695
+ }
669
696
  var BROWSER_RUNTIME_URL = `https://cdn.jsdelivr.net/npm/${package_default.name}@${package_default.version}/dist/runtime.js`;
670
697
  var POSITION_ITEMS = [
671
698
  {
@@ -1643,7 +1670,7 @@ var TMExtension = class {
1643
1670
  if (!this.featureFlags.poseOverlay) return null;
1644
1671
  if (this.poseOverlaySvg) return this.poseOverlaySvg;
1645
1672
  const svg = this.createSvgElement("svg");
1646
- svg.setAttribute("viewBox", "0 0 320 240");
1673
+ svg.setAttribute("viewBox", `0 0 320 240`);
1647
1674
  svg.setAttribute("width", "320");
1648
1675
  svg.setAttribute("height", "240");
1649
1676
  svg.setAttribute("preserveAspectRatio", "xMidYMid meet");
@@ -1749,11 +1776,23 @@ var TMExtension = class {
1749
1776
  line.style.display = "block";
1750
1777
  }
1751
1778
  }
1779
+ /**
1780
+ * The element the stage shows.
1781
+ *
1782
+ * The camera's own video, when there is one: it carries the camera's resolution and its aspect,
1783
+ * so the preview stops being a 320x240 readback canvas stretched to fit. The canvas remains the
1784
+ * preview only where there is no video to show, which is the same place inference falls back to
1785
+ * it.
1786
+ */
1787
+ previewSourceElement() {
1788
+ const video = this.webcam?.webcam;
1789
+ return video && video.videoWidth > 0 ? video : this.webcam?.canvas;
1790
+ }
1752
1791
  attachPreviewToStage() {
1753
1792
  if (!this.webcam) throw new Error("TM: Start the camera before attaching the preview.");
1754
1793
  if (!this.webcam.canvas) throw new Error("TM: webcam.canvas is unavailable.");
1755
1794
  const stage = this.findStageElement();
1756
- const canvas = this.webcam.canvas;
1795
+ const canvas = this.previewSourceElement();
1757
1796
  let stageCanvas = null;
1758
1797
  try {
1759
1798
  const candidate = this.findLikelyStageCanvas();
@@ -1797,6 +1836,22 @@ var TMExtension = class {
1797
1836
  this.updatePoseOverlayVisibility();
1798
1837
  this.validatePreviewAttachment(stage, canvas);
1799
1838
  }
1839
+ /**
1840
+ * Span the overlay over what the preview is showing.
1841
+ *
1842
+ * Keypoints are in the camera frame's space, so the viewBox has to be the frame -- the video's
1843
+ * own width and height, not the readback canvas's fixed 320x240. On the canvas fallback the two
1844
+ * are the same thing.
1845
+ */
1846
+ updatePoseOverlayViewBox() {
1847
+ const svg = this.poseOverlaySvg;
1848
+ const preview = this.previewCanvas;
1849
+ if (!svg || !preview) return;
1850
+ const width = preview.videoWidth ?? preview.width;
1851
+ const height = preview.videoHeight ?? preview.height;
1852
+ if (!(width > 0) || !(height > 0)) return;
1853
+ svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
1854
+ }
1800
1855
  updatePreviewStyle() {
1801
1856
  const canvas = this.previewCanvas;
1802
1857
  if (!canvas) throw new Error("TM: Start the camera before positioning the preview.");
@@ -1854,9 +1909,10 @@ var TMExtension = class {
1854
1909
  target.style.bottom = "8px";
1855
1910
  }
1856
1911
  }
1857
- const mirroringTransform = this.previewMirrored ? "" : "scaleX(-1)";
1912
+ const mirroringTransform = this.previewCanvas === this.webcam?.webcam ? this.previewMirrored ? "scaleX(-1)" : "" : this.previewMirrored ? "" : "scaleX(-1)";
1858
1913
  for (const target of targets) target.style.transform = [positionTransform, mirroringTransform].filter(Boolean).join(" ");
1859
1914
  this.poseOverlaySvg?.setAttribute("preserveAspectRatio", this.previewPosition === "full-stage" ? "xMidYMid slice" : "xMidYMid meet");
1915
+ this.updatePoseOverlayViewBox();
1860
1916
  }
1861
1917
  startLoopIfNeeded() {
1862
1918
  if (this.loopStarted || !this.cameraRunning || !this.webcam) return;
@@ -1889,7 +1945,7 @@ var TMExtension = class {
1889
1945
  return;
1890
1946
  }
1891
1947
  try {
1892
- this.webcam.update();
1948
+ if (this.previewSourceElement() !== this.webcam.webcam) this.webcam.update();
1893
1949
  if (this.recognizing && this.model) {
1894
1950
  const model = this.model;
1895
1951
  const recognitionMode = this.recognitionMode;
@@ -1908,15 +1964,73 @@ var TMExtension = class {
1908
1964
  if (generation === this.loopGeneration && this.cameraRunning && this.webcam) requestAnimationFrame(() => void this.loop(generation));
1909
1965
  else if (generation === this.loopGeneration) this.loopStarted = false;
1910
1966
  }
1967
+ /**
1968
+ * The square the model looks at, as a tensor, taken straight off the camera.
1969
+ *
1970
+ * The readback canvas is 320x240 and holds a 320x320 centre crop drawn into it, so its bottom
1971
+ * quarter -- 25% of the subject's height -- never reaches the model. Cropping the frame itself
1972
+ * keeps the whole square. The crop and the mirroring both run as tensor ops, which is where the
1973
+ * backend can keep them on the GPU; `fromPixels` uploads a video element directly to a texture
1974
+ * on the WebGL and WebGPU backends, so no Canvas2D stage sits in the path.
1975
+ *
1976
+ * The pixels are mirrored here rather than through `estimatePose(sample, flipHorizontal)`:
1977
+ * that flag flips the returned keypoints, not the image, and the classifier head was trained on
1978
+ * mirrored frames. Flipping the pixels is what keeps the model's input the same as before.
1979
+ *
1980
+ * Returns null when there is no frame to take, and the canvas path answers instead.
1981
+ */
1982
+ captureSquareFrame() {
1983
+ const tensorflow = globalThis.tf;
1984
+ const video = this.webcam?.webcam;
1985
+ if (typeof tensorflow?.browser?.fromPixels !== "function" || typeof tensorflow.tidy !== "function" || !video || !(video.videoWidth > 0) || !(video.videoHeight > 0)) return null;
1986
+ const size = Math.min(video.videoWidth, video.videoHeight);
1987
+ const frame = tensorflow.browser.fromPixels(video);
1988
+ try {
1989
+ const top = frame.shape[0] - size >> 1;
1990
+ const left = frame.shape[1] - size >> 1;
1991
+ return {
1992
+ tensor: tensorflow.tidy(() => tensorflow.reverse(tensorflow.slice(frame, [
1993
+ top,
1994
+ left,
1995
+ 0
1996
+ ], [
1997
+ size,
1998
+ size,
1999
+ 3
2000
+ ]), [1])),
2001
+ crop: {
2002
+ left,
2003
+ top,
2004
+ size
2005
+ }
2006
+ };
2007
+ } finally {
2008
+ frame.dispose();
2009
+ }
2010
+ }
1911
2011
  async recognizeFrame(model, recognitionMode) {
1912
2012
  if (recognitionMode === "pose") {
1913
2013
  if (typeof model.estimatePose !== "function") throw new Error("Teachable Machine: The active model does not support pose recognition.");
1914
- const estimate = await model.estimatePose(this.webcam.canvas);
1915
- const prediction = await model.predict(estimate.posenetOutput);
1916
- return {
1917
- keypoints: estimate.pose?.keypoints,
1918
- prediction
1919
- };
2014
+ const square = this.captureSquareFrame();
2015
+ if (!square) {
2016
+ this.webcam.update?.();
2017
+ const estimate = await model.estimatePose(this.webcam.canvas);
2018
+ const prediction = await model.predict(estimate.posenetOutput);
2019
+ return {
2020
+ keypoints: estimate.pose?.keypoints,
2021
+ prediction
2022
+ };
2023
+ }
2024
+ try {
2025
+ const estimate = await model.estimatePose(square.tensor);
2026
+ const prediction = await model.predict(estimate.posenetOutput);
2027
+ return {
2028
+ keypoints: mapKeypointsToFrame(estimate.pose?.keypoints, square.crop),
2029
+ prediction
2030
+ };
2031
+ } finally {
2032
+ square.tensor.dispose();
2033
+ }
1920
2034
  }
1921
2035
  const source = this.webcam.webcam ?? this.webcam.canvas;
1922
2036
  return {
package/dist/posenet.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var package_default = {
2
2
  name: "@kubohiroya/turbowarp-teachable-machine",
3
- version: "3.4.1",
3
+ version: "3.5.0",
4
4
  description: "A TurboWarp extension for recognition using Teachable Machine pose, image, and audio models.",
5
5
  author: "Hiroya Kubo <hiroya@cuc.ac.jp>",
6
6
  license: "MPL-2.0",