UNPKG

@tensorflow/tfjs-backend-wasm

Version:

This package adds a WebAssembly backend to TensorFlow.js. It currently supports the following models from our [models](https://github.com/tensorflow/tfjs-models) repo: - BlazeFace - BodyPix - CocoSSD - Face landmarks detection - HandPose - KNN classifier

17 lines 150 kB
/** * @license * Copyright 2024 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@tensorflow/tfjs-core"),require("fs"),require("path"),require("perf_hooks"),require("os")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","fs","path","perf_hooks","os"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).tf=e.tf||{},e.tf.wasm=e.tf.wasm||{}),e.tf,e.fs,e.path,e.perf_hooks,e.require$$4)}(this,(function(e,n,t,a,r,u){"use strict";function i(e,n){return n.forEach((function(n){n&&"string"!=typeof n&&!Array.isArray(n)&&Object.keys(n).forEach((function(t){if("default"!==t&&!(t in e)){var a=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:function(){return n[t]}})}}))})),e}var s,o,d,p=function(e,n){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},p(e,n)};function l(e,n,t,a){return new(t||(t=Promise))((function(r,u){function i(e){try{o(a.next(e))}catch(e){u(e)}}function s(e){try{o(a.throw(e))}catch(e){u(e)}}function o(e){var n;e.done?r(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,s)}o((a=a.apply(e,n||[])).next())}))}function c(e,n){var t,a,r,u,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return u={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function s(u){return function(s){return function(u){if(t)throw new TypeError("Generator is already executing.");for(;i;)try{if(t=1,a&&(r=2&u[0]?a.return:u[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,u[1])).done)return r;switch(a=0,r&&(u=[2&u[0],r.value]),u[0]){case 0:case 1:r=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,a=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(r=i.trys,(r=r.length>0&&r[r.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!r||u[1]>r[0]&&u[1]<r[3])){i.label=u[1];break}if(6===u[0]&&i.label<r[1]){i.label=r[1],r=u;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(u);break}r[2]&&i.ops.pop(),i.trys.pop();continue}u=n.call(e,i)}catch(e){u=[6,e],a=0}finally{t=r=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}}function m(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],a=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&a>=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var a,r,u=t.call(e),i=[];try{for(;(void 0===n||n-- >0)&&!(a=u.next()).done;)i.push(a.value)}catch(e){r={error:e}}finally{try{a&&!a.done&&(t=u.return)&&t.call(u)}finally{if(r)throw r.error}}return i}function h(e,n,t){if(t||2===arguments.length)for(var a,r=0,u=n.length;r<u;r++)!a&&r in n||(a||(a=Array.prototype.slice.call(n,0,r)),a[r]=n[r]);return e.concat(a||Array.prototype.slice.call(n))}!function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"}(s||(s={})),function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"}(o||(o={}));var b={kernelName:n._FusedMatMul,backendName:"wasm",setupFunc:function(e){d=e.wasm.cwrap(n._FusedMatMul,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.a,i=t.b,s=t.bias,p=t.preluActivationWeights;if("float32"!==u.dtype||"float32"!==i.dtype)throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");var l=r.transposeA,c=r.transposeB,m=r.activation,b=r.leakyreluAlpha,y=a.dataIdMap.get(u.dataId).id,_=a.dataIdMap.get(i.dataId).id,g=0;if(null!=s){var v=a.dataIdMap.get(s.dataId);if(1!==v.shape.length)throw new Error("_FusedMatMul only supports rank-1 bias but got "+"rank ".concat(v.shape.length,"."));g=v.id}var k=null==p?0:a.dataIdMap.get(p.dataId).id,I=o[m];if(null==I)throw new Error("".concat(m," activation not yet supported for FusedConv2D ")+"in the wasm backend.");var w=l?u.shape[2]:u.shape[1],S=c?i.shape[1]:i.shape[2],M=n.broadcast_util.assertAndGetBroadcastShape(u.shape.slice(0,-2),i.shape.slice(0,-2)),A=a.makeOutput(h(h([],f(M),!1),[w,S],!1),u.dtype),x=a.dataIdMap.get(A.dataId).id,F=new Uint8Array(new Int32Array(u.shape).buffer),N=new Uint8Array(new Int32Array(i.shape).buffer);return d(y,F,u.shape.length,_,N,i.shape.length,l,c,I,g,k,b||0,x),A}};function y(e,t){var a;return{kernelName:e,backendName:"wasm",setupFunc:function(n){a=n.wasm.cwrap(e,null,["number","number","number"])},kernelFunc:function(e){var r=e.backend,u=e.inputs.x,i=r.dataIdMap.get(u.dataId).id,o=r.makeOutput(u.shape,t||u.dtype),d=r.dataIdMap.get(o.dataId).id;return 0===n.util.sizeFromShape(o.shape)||a(i,s[u.dtype],d),o}}}var _=y(n.Abs),g=y(n.Acos),v=y(n.Acosh);function k(e,t,a){var r;return{kernelName:e,backendName:"wasm",setupFunc:function(n){r=n.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])},kernelFunc:function(e){var t=e.backend,u=e.inputs,i=u.a,o=u.b,d=t.dataIdMap.get(i.dataId).id,p=t.dataIdMap.get(o.dataId).id,l=null!=a?a:i.dtype,c=n.backend_util.assertAndGetBroadcastShape(i.shape,o.shape),m=t.makeOutput(c,l);if(0===n.util.sizeFromShape(c))return m;var f=new Uint8Array(new Int32Array(i.shape).buffer),h=new Uint8Array(new Int32Array(o.shape).buffer),b=t.dataIdMap.get(m.dataId).id;return r(d,f,i.shape.length,p,h,o.shape.length,s[i.dtype],b),m}}}var I,w=k(n.Add);var S={kernelName:n.AddN,backendName:"wasm",setupFunc:function(e){I=e.wasm.cwrap(n.AddN,null,["array","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=a.makeOutput(t[0].shape,t[0].dtype);if(0===n.util.sizeFromShape(r.shape))return r;var u=t.map((function(e){return a.dataIdMap.get(e.dataId).id})),i=new Uint8Array(new Int32Array(u).buffer),o=a.dataIdMap.get(r.dataId).id;return I(i,u.length,s[r.dtype],o),r}};function M(e){var t=e.inputs.x,a=e.backend;if("string"===t.dtype)return n.tensor(a.readSync(t.dataId),t.shape,t.dtype);var r=a.makeOutput(t.shape,t.dtype),u=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(r).set(u),r}var A,x={kernelName:n.Identity,backendName:"wasm",kernelFunc:M};function F(e){for(var n=e.inputs,t=e.backend,a=e.attrs,r=f(function(e,n){for(var t=[],a=[],r=0;r<e.length;++r)1!==e[r]&&t.push(e[r]),1!==e[n[r]]&&a.push(n[r]);for(r=0;r<a.length;++r){for(var u=-1,i=0;i<a.length;++i)a[i]>=r&&(-1===u||a[u]>a[i])&&(u=i);a[u]=r}return[t,a]}(n.x.shape,a.perm),2),u=r[0],i=r[1],o=!0,d=0;d<i.length;d++)i[d]!==d&&(o=!1);var p=function(e,n){for(var t=new Array(e.length),a=0;a<t.length;a++)t[a]=e[n[a]];return t}(n.x.shape,a.perm),l={dataId:n.x.dataId,shape:u,dtype:n.x.dtype};if(o){var c=M({inputs:n,backend:t});return c.shape=p,c}var m=t.makeOutput(p,l.dtype),h=t.dataIdMap.get(l.dataId).id,b=t.dataIdMap.get(m.dataId).id,y=new Uint8Array(new Int32Array(i).buffer),_=new Uint8Array(new Int32Array(l.shape).buffer);return A(h,_,l.shape.length,s[l.dtype],b,y,i.length),m}var N,D={kernelName:n.Transpose,backendName:"wasm",kernelFunc:F,setupFunc:function(e){A=e.wasm.cwrap(n.Transpose,null,["number","array","number","number","number","array","number"])}};function R(e,t,a){var r=e.shape,u=e.shape.length,i=n.util.parseAxisParam(t,r),s=i,o=n.backend_util.getAxesPermutation(s,u),d=null,p=!1;if(null!=o){for(var l=new Array(u),c=0;c<l.length;c++)l[c]=r[o[c]];s=n.backend_util.getInnerMostAxes(s.length,u),d=F({inputs:{x:e},attrs:{perm:o},backend:a});var m=a.dataIdMap.get(e.dataId).id;a.dataIdMap.get(d.dataId).id!==m&&(p=!0)}return{transposed:d,originalAxes:i,axes:s,inputWasTransposed:p}}var E,P={kernelName:n.All,backendName:"wasm",setupFunc:function(e){N=e.wasm.cwrap(n.All,null,["number, number, number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs,u=r.axis,i=r.keepDims,s=a.x,o=t.dataIdMap.get(s.dataId).id,d=s,p=R(s,u,t),l=p.transposed,c=p.axes,m=p.originalAxes,h=p.inputWasTransposed;h&&(d=l,o=t.dataIdMap.get(l.dataId).id);var b=d.shape.length;n.backend_util.assertAxesAreInnerMostDims("all",c,b);var y=f(n.backend_util.computeOutAndReduceShapes(d.shape,c),2),_=y[0],g=y[1],v=n.util.sizeFromShape(g),k=t.makeOutput(_,s.dtype);if(0!==n.util.sizeFromShape(d.shape)){var I=t.dataIdMap.get(k.dataId).id;N(o,v,I)}if(h&&t.disposeData(l.dataId),i){var w=n.backend_util.expandShapeToKeepDim(k.shape,m);k.shape=w}return k}};var C={kernelName:n.Any,backendName:"wasm",setupFunc:function(e){E=e.wasm.cwrap(n.Any,null,["number, number, number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs,u=r.axis,i=r.keepDims,s=a.x,o=t.dataIdMap.get(s.dataId).id,d=s,p=R(s,u,t),l=p.transposed,c=p.axes,m=p.originalAxes,h=p.inputWasTransposed;h&&(d=l,o=t.dataIdMap.get(l.dataId).id);var b=d.shape.length;n.backend_util.assertAxesAreInnerMostDims("any",c,b);var y=f(n.backend_util.computeOutAndReduceShapes(d.shape,c),2),_=y[0],g=y[1],v=n.util.sizeFromShape(g),k=t.makeOutput(_,s.dtype);if(0!==n.util.sizeFromShape(d.shape)){var I=t.dataIdMap.get(k.dataId).id;E(o,v,I)}if(h&&t.disposeData(l.dataId),i){var w=n.backend_util.expandShapeToKeepDim(k.shape,m);k.shape=w}return k}};function W(e){var t;return{kernelName:e,backendName:"wasm",setupFunc:function(n){t=n.wasm.cwrap(e,null,["number","number","number","number","number"])},kernelFunc:function(e){var a=e.backend,r=e.inputs,u=e.attrs.axis,i=r.x,o=a.dataIdMap.get(i.dataId).id,d=o,p=i,l=R(i,u,a),c=l.transposed,m=l.axes,f=l.inputWasTransposed;if(f){var h=a.dataIdMap.get(c.dataId).id;h!==o&&(p=c,d=h)}var b=p.shape.slice(0,-1),y=a.makeOutput(b,"int32"),_=a.dataIdMap.get(y.dataId).id,g=n.util.sizeFromShape(y.shape),v=p.shape[m[0]];return t(d,s[p.dtype],g,v,_),f&&a.disposeData(c.dataId),y}}}var O,T=W(n.ArgMax),z=W(n.ArgMin),B=y(n.Asin),H=y(n.Asinh),L=y(n.Atan),G=k(n.Atan2),U=y(n.Atanh);var j,q={kernelName:n.AvgPool,backendName:"wasm",setupFunc:function(e){O=e.wasm.cwrap(n.AvgPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.x,i=r.dataIdMap.get(u.dataId).id,s=a.filterSize,o=a.strides,d=a.pad,p=a.dimRoundingMode,l=n.backend_util.computePool2DInfo(u.shape,s,o,1,d,p),c=l.filterHeight,m=l.filterWidth,f=l.padInfo.top,h=l.padInfo.right,b=l.padInfo.bottom,y=l.padInfo.left,_=l.strideHeight,g=l.strideWidth,v=l.inChannels;if("channelsLast"!==l.dataFormat)throw new Error("wasm backend does not support dataFormat:'"+"".concat(l.dataFormat,"'. Please use 'channelsLast'."));if(1!==l.dilationWidth||1!==l.dilationHeight)throw new Error("was backend only supports average pooling with dilation = [1, 1], "+"got [".concat(l.dilationHeight,", ").concat(l.dilationWidth,"]."));var k=r.makeOutput(l.outShape,"float32"),I=r.dataIdMap.get(k.dataId).id;return O(i,u.shape[0],u.shape[1],u.shape[2],c,m,f,h,b,y,_,g,v,I),k}};var V,K={kernelName:n.AvgPool3D,backendName:"wasm",setupFunc:function(e){j=e.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"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=r.filterSize,s=r.strides,o=r.pad,d=r.dimRoundingMode,p=r.dataFormat,l=n.backend_util.computePool3DInfo(u.shape,i,s,1,o,d,p),c=a.makeOutput(l.outShape,u.dtype);return j(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),c}};var X,Q={kernelName:n.AvgPool3DGrad,backendName:"wasm",setupFunc:function(e){V=e.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"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.dy,i=t.input,s=r.filterSize,o=r.strides,d=r.pad,p=r.dimRoundingMode,l=n.backend_util.computePool3DInfo(i.shape,s,o,1,d,p),c=a.makeOutput(i.shape,i.dtype);return V(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left,l.filterDepth,l.filterHeight,l.filterWidth),c}};var J={kernelName:n.AvgPoolGrad,backendName:"wasm",setupFunc:function(e){X=e.wasm.cwrap("AvgPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.dy,i=t.input,s=r.filterSize,o=r.strides,d=r.pad,p=n.backend_util.computePool2DInfo(i.shape,s,o,1,d),l=a.makeOutput(i.shape,i.dtype);return X(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(l.dataId).id,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left,p.filterHeight,p.filterWidth),l}};function Z(e){var t=e.inputs,a=e.attrs,r=t.x,u=a.shape,i=n.util.sizeFromShape(r.shape),s=n.util.inferFromImplicitShape(u,i);return n.util.assert(i===n.util.sizeFromShape(s),(function(){return"new shape: ".concat(s,", old shape: ").concat(r.shape,". New shape and old ")+"shape must have the same number of elements."})),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:s,dtype:r.dtype}}var Y,$={kernelName:n.Reshape,backendName:"wasm",kernelFunc:Z};var ee={kernelName:n.BatchMatMul,backendName:"wasm",setupFunc:function(e){Y=e.wasm.cwrap(n.BatchMatMul,null,["number","array","number","number","array","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.a,i=t.b,s=r.transposeA,o=r.transposeB;if("float32"!==u.dtype||"float32"!==i.dtype)throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");var d=u.shape.length,p=i.shape.length,l=s?u.shape[d-2]:u.shape[d-1],c=o?i.shape[p-1]:i.shape[p-2],m=s?u.shape[d-1]:u.shape[d-2],f=o?i.shape[p-2]:i.shape[p-1],h=u.shape.slice(0,-2),b=i.shape.slice(0,-2),y=n.util.sizeFromShape(h),_=n.util.sizeFromShape(b),g=n.broadcast_util.assertAndGetBroadcastShape(u.shape.slice(0,-2),i.shape.slice(0,-2)).concat([m,f]);n.util.assert(l===c,(function(){return"Error in matMul: inner shapes (".concat(l,") and (")+"".concat(c,") of Tensors with shapes ").concat(u.shape," and ")+"".concat(i.shape," and transposeA=").concat(s)+" and transposeB=".concat(o," must match.")}));var v=o?[_,f,c]:[_,c,f],k=Z({inputs:{x:u},backend:a,attrs:{shape:s?[y,l,m]:[y,m,l]}}),I=Z({inputs:{x:i},backend:a,attrs:{shape:v}}),w=a.dataIdMap.get(k.dataId).id,S=a.dataIdMap.get(I.dataId).id,M=s?k.shape[2]:k.shape[1],A=o?I.shape[1]:I.shape[2],x=Math.max(y,_),F=a.makeOutput([x,M,A],k.dtype),N=a.dataIdMap.get(F.dataId).id,D=new Uint8Array(new Int32Array(k.shape).buffer),R=new Uint8Array(new Int32Array(I.shape).buffer);return Y(w,D,k.shape.length,S,R,I.shape.length,s,o,N),a.disposeData(k.dataId),a.disposeData(I.dataId),F.shape=g,F}};function ne(e,t,a,r,u){var i=n.slice_util.isSliceContinous(r,t,a),s=n.util.sizeFromShape(a),o=n.util.computeStrides(r);if(i){var d=n.slice_util.computeFlatOffset(t,o);return"string"===u?e.slice(d,d+s):e.subarray(d,d+s)}for(var p="string"===u?n.backend_util.fromUint8ToStringArray(e):e,l=n.buffer(r,u,p),c=n.buffer(a,u),m=0;m<c.size;++m){var b=c.indexToLoc(m),y=b.map((function(e,n){return e+t[n]}));c.set.apply(c,h([l.get.apply(l,h([],f(y),!1))],f(b),!1))}return"string"===u?n.backend_util.fromStringArrayToUint8(c.values):c.values}n.backend_util.RowPartitionType;var te=function(){function e(e,t,a,r,u,i){this.separator=n.util.encodeString(e),this.nGramWidths=t,this.leftPad=n.util.encodeString(a),this.rightPad=n.util.encodeString(r),this.padWidth=u,this.preserveShort=i}return e.prototype.getPadWidth=function(e){return Math.min(this.padWidth<0?e-1:this.padWidth,e-1)},e.prototype.getNumNGrams=function(e,n){var t=this.getPadWidth(n);return Math.max(0,e+2*t-n+1)},e.prototype.createNGrams=function(e,n,t,a,r,u){for(var i=function(i){var o=s.getPadWidth(u),d=Math.max(0,o-i),p=Math.max(0,o-(r-(i+1))),l=u-(d+p),c=n+(d>0?0:i-o),m=0;m+=d*s.leftPad.length;for(var f=0;f<l;++f)m+=e[c+f].length;m+=p*s.rightPad.length,m+=(d+p+l-1)*s.separator.length,t[a+i]=new Uint8Array(m);var h=t[a+i],b=0,y=function(e){return e.forEach((function(e){return h[b++]=e}))};for(f=0;f<d;++f)y(s.leftPad),y(s.separator);for(f=0;f<l-1;++f)y(e[c+f]),y(s.separator);if(l>0){y(e[c+l-1]);for(f=0;f<p;++f)y(s.separator),y(s.rightPad)}else{for(f=0;f<p-1;++f)y(s.rightPad),y(s.separator);y(s.rightPad)}},s=this,o=0;o<r;++o)i(o)},e.prototype.compute=function(e,t){var a=this,r=e.length,u=t.length;if(u>0){var i=t[0];if(0!==i)throw new Error("First split value must be 0, got ".concat(i));for(var s=1;s<u;++s){var o=t[s]>=i;if(!(o=o&&t[s]<=r))throw new Error("Invalid split value ".concat(t[s],", must be in [").concat(i,", ").concat(r,"]"));i=t[s]}if(i!==r)throw new Error("Last split value must be data size. Expected ".concat(r,", got ").concat(i))}var d=u-1,p=n.util.getArrayFromDType("int32",u);if(0===r||0===u){var l=new Array(r);for(s=0;s<=d;++s)p[s]=0;return[l,p]}p[0]=0;var c=function(e){var n=t[e]-t[e-1],r=0;m.nGramWidths.forEach((function(e){r+=a.getNumNGrams(n,e)})),m.preserveShort&&n>0&&0===r&&(r=1),p[e]=p[e-1]+r},m=this;for(s=1;s<=d;++s)c(s);var f=new Array(p[d]),h=function(n){var r=t[n],u=p[n];if(b.nGramWidths.forEach((function(i){var s=t[n+1]-t[n],o=a.getNumNGrams(s,i);a.createNGrams(e,r,f,u,o,i),u+=o})),b.preserveShort&&u===p[n]){var i=t[n+1]-t[n];if(0===i)return"continue";var s=i+2*b.padWidth;b.createNGrams(e,r,f,u,1,s)}},b=this;for(s=0;s<d;++s)h(s);return[f,p]},e}();function ae(e,n,t,a){if(e.length)if(0!==n.length)if(1!==n.length){var r=0;for(o=0;o<e.length+1;o++)if(o===e.length||-1!==n.indexOf(e[o])){s=e.subarray(r,o);t&&0===s.length||a.push(s),r=o+1}}else{for(var u=n[0],i=e.indexOf(u);-1!==i;){var s=e.subarray(0,i);t&&0===s.length||a.push(s),i=(e=e.subarray(i+1)).indexOf(u)}t&&0===e.length||a.push(e)}else for(var o=0;o<e.length;++o)a.push(e.subarray(o,o+1))}function re(e){var t=e.inputs.x,a=e.attrs,r=a.begin,u=a.size,i=e.backend,s=f(n.slice_util.parseSliceParams(t,r,u),2),o=s[0],d=s[1],p=n.slice_util.isSliceContinous(t.shape,o,d),l=i.readSync(t.dataId),c=i.makeOutput(d,t.dtype),m=n.util.computeStrides(t.shape),h=i.dataIdMap.get(c.dataId);if(p){var b=n.slice_util.computeFlatOffset(o,m);if("string"===t.dtype)h.stringBytes=l.slice(b,b+n.util.sizeFromShape(d));else i.typedArrayFromHeap(c).set(l.subarray(b,b+n.util.sizeFromShape(d)));return c}if("string"===t.dtype){var y=ne(l,o,d,t.shape,t.dtype);return h.stringBytes=y,c}var _=i.typedArrayFromHeap(c),g=t.shape.length;if(2===g)!function(e,n,t,a,r){for(var u=0,i=a[0],s=a[1],o=i+r[0],d=i;d<o;d++){var p=d*n+s;t.set(e.subarray(p,p+r[1]),u),u+=r[1]}}(l,m[0],_,o,d);else if(3===g)!function(e,n,t,a,r,u){for(var i=0,s=r[0],o=r[1],d=r[2],p=s+u[0],l=o+u[1],c=s;c<p;c++)for(var m=o;m<l;m++){var f=c*n+m*t+d;a.set(e.subarray(f,f+u[2]),i),i+=u[2]}}(l,m[0],m[1],_,o,d);else if(4===g)!function(e,n,t,a,r,u,i){for(var s=0,o=u[0],d=u[1],p=u[2],l=o+i[0],c=d+i[1],m=p+i[2],f=u[3],h=o;h<l;h++)for(var b=d;b<c;b++)for(var y=p;y<m;y++){var _=h*n+b*t+y*a+f;r.set(e.subarray(_,_+i[3]),s),s+=i[3]}}(l,m[0],m[1],m[2],_,o,d);else{y=ne(l,o,d,t.shape,t.dtype);_.set(y)}return c}var ue={kernelName:n.Slice,backendName:"wasm",kernelFunc:re};var ie,se={kernelName:n.BatchToSpaceND,backendName:"wasm",kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=r.blockShape,s=r.crops,o=i.reduce((function(e,n){return e*n})),d=n.backend_util.getReshaped(u.shape,i,o),p=n.backend_util.getPermuted(d.length,i.length),l=n.backend_util.getReshapedPermuted(u.shape,i,o),c=n.backend_util.getSliceBeginCoords(s,i.length),m=n.backend_util.getSliceSize(l,s,i.length),f=Z({inputs:{x:u},backend:a,attrs:{shape:d}}),h=F({inputs:{x:f},backend:a,attrs:{perm:p}}),b=Z({inputs:{x:h},backend:a,attrs:{shape:l}}),y=re({inputs:{x:b},backend:a,attrs:{begin:c,size:m}});return a.disposeData(f.dataId),a.disposeData(h.dataId),a.disposeData(b.dataId),y}};var oe={kernelName:n.Bincount,backendName:"wasm",setupFunc:function(e){ie=e.wasm.cwrap(n.Bincount,null,["number","number","boolean","number","number","number"])},kernelFunc:function(e){var n=e.backend,t=e.inputs,a=e.attrs,r=t.x,u=t.weights,i=a.size,o=0!==u.shape.reduce((function(e,n){return e*n}),1),d=1===r.shape.length?[i]:[r.shape[0],i],p=n.makeOutput(d,u.dtype);function l(e){return n.dataIdMap.get(e.dataId).id}return ie(l(r),i,o,l(u),s[u.dtype],l(p)),p}},de=k(n.BitwiseAnd);var pe={kernelName:n.BroadcastArgs,backendName:"wasm",kernelFunc:function(e){var t=e.inputs,a=e.backend,r=t.s0,u=t.s1,i=a.typedArrayFromHeap(r),s=a.typedArrayFromHeap(u),o=n.backend_util.assertAndGetBroadcastShape(Array.from(i),Array.from(s));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}};function le(e){var n=e.inputs.x,t=e.attrs.dtype,a=e.backend,r=a.makeOutput(n.shape,t),u=a.typedArrayFromHeap(n);return a.typedArrayFromHeap(r).set(u),r}var ce,me={kernelName:n.Cast,backendName:"wasm",kernelFunc:le},fe=y(n.Ceil);var he={kernelName:n.ClipByValue,backendName:"wasm",setupFunc:function(e){ce=e.wasm.cwrap(n.ClipByValue,null,["number","number","number","number"])},kernelFunc:function(e){var n=e.inputs,t=e.backend,a=e.attrs,r=n.x,u=a.clipValueMin,i=a.clipValueMax,s=t.dataIdMap.get(r.dataId).id,o=t.makeOutput(r.shape,r.dtype),d=t.dataIdMap.get(o.dataId).id;return ce(s,u,i,d),o}};function be(e){var t=e.inputs,a=e.backend,r=n.util.parseAxisParam(e.attrs.axis,t[0].shape)[0],u=t.map((function(e){return e.shape}));n.backend_util.assertParamsConsistent(u,r);var i=n.backend_util.computeOutShape(t.map((function(e){return e.shape})),r),s=t.filter((function(e){return n.util.sizeFromShape(e.shape)>0}));if(1===s.length)return M({inputs:{x:s[0]},backend:a});var o=a.makeOutput(i,t[0].dtype);if(0===n.util.sizeFromShape(i))return o;if("string"===s[0].dtype){var d=s.map((function(e){var t=n.util.sizeFromShape(e.shape.slice(r));return Z({inputs:{x:e},backend:a,attrs:{shape:[-1,t]}})})),p=d.map((function(e){return{vals:a.readSync(e.dataId),shape:e.shape}}));i=n.backend_util.computeOutShape(d.map((function(e){return e.shape})),1);var l=1===d[0].shape[0],c=function(e,t,a,r){var u=n.util.getArrayFromDType(a,n.util.sizeFromShape(t));if(r&&"string"!==a){var i=0;e.forEach((function(e){var t=n.util.sizeFromShape(e.shape);u.set(e.vals,i),i+=t}))}else{var s=0;e.forEach((function(e){for(var r="string"===a?n.backend_util.fromUint8ToStringArray(e.vals):e.vals,i=0,o=0;o<e.shape[0];++o)for(var d=o*t[1]+s,p=0;p<e.shape[1];++p)u[d+p]=r[i++];s+=e.shape[1]}))}return u}(p,i,t[0].dtype,l),m=n.backend_util.computeOutShape(s.map((function(e){return e.shape})),r);return o.shape=m,a.dataIdMap.get(o.dataId).stringBytes=n.backend_util.fromStringArrayToUint8(c),d.forEach((function(e){return a.disposeData(e.dataId)})),o}for(var f=n.util.sizeFromShape(s[0].shape.slice(0,r)),h=0,b=s.map((function(e){var t=n.util.sizeFromShape(e.shape.slice(r));return h+=t,t})),y=s.map((function(e){return a.typedArrayFromHeap(e)})),_=a.typedArrayFromHeap(o),g=0;g<f;g++)for(var v=g*h,k=0;k<y.length;k++){var I=b[k],w=g*I,S=y[k].subarray(w,w+I);_.set(S,v),v+=I}return o}var ye,_e={kernelName:n.Concat,backendName:"wasm",kernelFunc:be};var ge,ve={kernelName:n.Conv2D,backendName:"wasm",setupFunc:function(e){ye=e.wasm.cwrap(n.Conv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.x,i=t.filter,s=r.dataIdMap.get(u.dataId).id,o=r.dataIdMap.get(i.dataId).id,d=a.strides,p=a.dilations,l=a.pad,c=a.dimRoundingMode,m=a.dataFormat,f=n.backend_util.convertConv2DDataFormat(m),h=n.backend_util.computeConv2DInfo(u.shape,i.shape,d,p,l,c,!1,f),b=h.filterHeight,y=h.filterWidth,_=h.padInfo.top,g=h.padInfo.right,v=h.padInfo.bottom,k=h.padInfo.left,I=h.dilationHeight,w=h.dilationWidth,S=h.strideHeight,M=h.strideWidth,A=h.inChannels,x=h.outChannels,F="SAME"===h.padInfo.type?1:0;if("channelsLast"!==h.dataFormat)throw new Error("wasm backend Conv2D does not support dataFormat:'"+"".concat(h.dataFormat,"'. Please use 'channelsLast'."));var N=r.makeOutput(h.outShape,"float32"),D=r.dataIdMap.get(N.dataId).id;return ye(s,u.shape[0],u.shape[1],u.shape[2],o,b,y,_,g,v,k,F,I,w,S,M,A,x,D),N}};var ke,Ie={kernelName:n.Conv2DBackpropInput,backendName:"wasm",setupFunc:function(e){ge=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs,u=a.dy,i=a.filter,s=r.strides,o=r.pad,d=r.dataFormat,p=r.dimRoundingMode,l=r.inputShape,c=n.backend_util.convertConv2DDataFormat(d),m=n.backend_util.computeConv2DInfo(l,i.shape,s,1,o,p,!1,c),h=m.batchSize,b=m.filterHeight,y=m.filterWidth,_=m.inChannels,g=m.inHeight,v=m.inWidth,k=m.outChannels,I=m.outHeight,w=m.outWidth,S=m.strideHeight,M=m.strideWidth,A=b-1-m.padInfo.top,x=y-1-m.padInfo.left,F="channelsLast"===m.dataFormat,N=n.util.computeStrides(m.inShape),D=n.util.computeStrides(u.shape),R=f(n.util.computeStrides(i.shape),3),E=R[0],P=R[1],C=R[2],W=N[0],O=F?N[1]:N[2],T=F?N[2]:1,z=F?1:N[1],B=D[0],H=F?D[1]:D[2],L=F?D[2]:1,G=F?1:D[1],U=t.makeOutput(m.inShape,"float32"),j=t.dataIdMap.get(U.dataId).id,q=t.dataIdMap.get(u.dataId).id,V=t.dataIdMap.get(i.dataId).id;return ge(q,V,h,b,y,g,v,_,I,w,k,S,M,A,x,E,P,C,W,O,T,z,B,H,L,G,j),U}};var we,Se={kernelName:n.Conv3D,backendName:"wasm",setupFunc:function(e){ke=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=t.filter,s=r.strides,o=r.pad,d=r.dilations;if("float32"!==u.dtype)throw new Error("Tensor x must have dtype float32, got ".concat(u.dtype));if("float32"!==i.dtype)throw new Error("Tensor filter must have dtype float32, got ".concat(i.dtype));var p=n.backend_util.computeConv3DInfo(u.shape,i.shape,s,d,o),l=a.makeOutput(p.outShape,u.dtype);return ke(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(l.dataId).id,p.batchSize,p.inDepth,p.inHeight,p.inWidth,p.inChannels,p.outDepth,p.outHeight,p.outWidth,p.outChannels,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.filterDepth,p.filterHeight,p.filterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),l}};var Me,Ae={kernelName:n.Conv3DBackpropFilterV2,backendName:"wasm",setupFunc:function(e){we=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=t.dy,s=r.strides,o=r.pad,d=r.filterShape;if("float32"!==u.dtype)throw new Error("Tensor dy must have dtype float32, got ".concat(u.dtype));if("float32"!==i.dtype)throw new Error("Tensor filter must have dtype float32, got ".concat(i.dtype));var p=n.backend_util.computeConv3DInfo(u.shape,d,s,1,o),l=a.makeOutput(p.filterShape,i.dtype);return we(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(l.dataId).id,p.batchSize,p.inDepth,p.inHeight,p.inWidth,p.inChannels,p.outDepth,p.outHeight,p.outWidth,p.outChannels,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.filterDepth,p.filterHeight,p.filterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),l}};var xe,Fe,Ne={kernelName:n.Conv3DBackpropInputV2,backendName:"wasm",setupFunc:function(e){Me=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.dy,i=t.filter,s=r.pad,o=r.strides,d=r.inputShape;if("float32"!==u.dtype)throw new Error("Tensor dy must have dtype float32, got ".concat(u.dtype));if("float32"!==i.dtype)throw new Error("Tensor filter must have dtype float32, got ".concat(i.dtype));var p=n.backend_util.computeConv3DInfo(d,i.shape,o,1,s),l=a.makeOutput(p.inShape,u.dtype);return Me(a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(l.dataId).id,p.batchSize,p.inDepth,p.inHeight,p.inWidth,p.inChannels,p.outDepth,p.outHeight,p.outWidth,p.outChannels,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.filterDepth,p.filterHeight,p.filterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),l}},De=y(n.Cos),Re=y(n.Cosh);!function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"}(xe||(xe={}));var Ee,Pe={kernelName:n.CropAndResize,backendName:"wasm",setupFunc:function(e){Fe=e.wasm.cwrap(n.CropAndResize,null,["number","number","number","number","array","number","number","number","number","number"])},kernelFunc:function(e){var n,t=e.backend,a=e.inputs,r=e.attrs,u=r.method,i=r.extrapolationValue,s=r.cropSize,o=a.image,d=a.boxes,p=a.boxInd,l=d.shape[0],c=f(s,2),m=c[0],h=c[1],b=[l,m,h,o.shape[3]],y=t.dataIdMap.get(o.dataId);"float32"!==o.dtype&&(n=le({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),y=t.dataIdMap.get(n.dataId));var _=y.id,g=t.dataIdMap.get(d.dataId).id,v=t.dataIdMap.get(p.dataId).id,k=t.makeOutput(b,"float32"),I=t.dataIdMap.get(k.dataId).id,w=new Uint8Array(new Int32Array(o.shape).buffer);return Fe(_,g,v,l,w,m,h,xe[u],i,I),null!=n&&t.disposeData(n.dataId),k}};var Ce,We={kernelName:n.Cumprod,backendName:"wasm",setupFunc:function(e){Ee=e.wasm.cwrap(n.Cumprod,null,["number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=r.axis,o=r.exclusive,d=r.reverse,p=u.shape.length;n.util.assert("float32"===u.dtype||"int32"===u.dtype,(function(){return"cumprod does not support ".concat(u.dtype," tensors in the WASM backend")}));var l=n.backend_util.getAxesPermutation([i],p),c=u;null!==l&&(c=F({inputs:{x:u},attrs:{perm:l},backend:a}));var m=n.backend_util.getInnerMostAxes(1,p)[0];n.backend_util.assertAxesAreInnerMostDims("cumprod",[m],p);var f=a.makeOutput(c.shape,c.dtype),h=c.shape[m],b=a.dataIdMap.get(c.dataId).id,y=a.dataIdMap.get(f.dataId).id;Ee(b,o?1:0,d?1:0,h,y,s[u.dtype]);var _=f;return null!==l&&(_=F({inputs:{x:f},attrs:{perm:n.backend_util.getUndoAxesPermutation(l)},backend:a}),a.disposeData(c.dataId),a.disposeData(f.dataId)),_}};var Oe,Te={kernelName:n.Cumsum,backendName:"wasm",setupFunc:function(e){Ce=e.wasm.cwrap(n.Cumsum,null,["number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=r.axis,o=r.exclusive,d=r.reverse,p=u.shape.length;n.util.assert("float32"===u.dtype||"int32"===u.dtype,(function(){return"cumsum does not support ".concat(u.dtype," tensors in the WASM backend")}));var l=n.backend_util.getAxesPermutation([i],p),c=u;null!==l&&(c=F({inputs:{x:u},attrs:{perm:l},backend:a}));var m=n.backend_util.getInnerMostAxes(1,p)[0];n.backend_util.assertAxesAreInnerMostDims("cumsum",[m],p);var f=a.makeOutput(c.shape,c.dtype),h=c.shape[m],b=a.dataIdMap.get(c.dataId).id,y=a.dataIdMap.get(f.dataId).id;Ce(b,o?1:0,d?1:0,h,y,s[u.dtype]);var _=f;return null!==l&&(_=F({inputs:{x:f},attrs:{perm:n.backend_util.getUndoAxesPermutation(l)},backend:a}),a.disposeData(c.dataId),a.disposeData(f.dataId)),_}};var ze,Be={kernelName:n.DenseBincount,backendName:"wasm",setupFunc:function(e){Oe=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])},kernelFunc:function(e){var n=e.backend,t=e.inputs,a=e.attrs,r=t.x,u=t.weights,i=a.size,o=a.binaryOutput,d=0!==u.shape.reduce((function(e,n){return e*n}),1),p=1===r.shape.length?[i]:[r.shape[0],i],l=n.makeOutput(p,u.dtype);function c(e){return n.dataIdMap.get(e.dataId).id}return Oe(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,d,c(u),s[u.dtype],o,c(l)),l}};var He,Le={kernelName:n.DepthToSpace,backendName:"wasm",setupFunc:function(e){ze=e.wasm.cwrap(n.DepthToSpace,null,["number","number","number","array","number","array","array","number","number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs,u=a.x,i=r.blockSize,s=r.dataFormat,o=u.shape[0],d=("NHWC"===s?u.shape[1]:u.shape[2])*i,p=("NHWC"===s?u.shape[2]:u.shape[3])*i,l=("NHWC"===s?u.shape[3]:u.shape[1])/(i*i),c="NHWC"===s?[o,d,p,l]:[o,l,d,p],m=t.makeOutput(c,"float32"),f=t.dataIdMap.get(u.dataId).id,h=new Uint8Array(new Int32Array(n.util.computeStrides(u.shape)).buffer),b=new Uint8Array(new Int32Array(c).buffer),y=new Uint8Array(new Int32Array(n.util.computeStrides(c)).buffer),_=t.dataIdMap.get(m.dataId).id;return ze(f,i,"NHWC"===s?1:0,h,u.shape.length-1,b,y,c.length,_),m}};var Ge,Ue={kernelName:n.DepthwiseConv2dNative,backendName:"wasm",setupFunc:function(e){He=e.wasm.cwrap(n.DepthwiseConv2dNative,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.x,i=t.filter,s=r.dataIdMap.get(u.dataId).id,o=r.dataIdMap.get(i.dataId).id,d=a.strides,p=a.dilations,l=a.pad,c=a.dimRoundingMode,m=null==p?[1,1]:p,f=n.backend_util.computeConv2DInfo(u.shape,i.shape,d,m,l,c,!0),h=f.filterHeight,b=f.filterWidth,y=f.padInfo.top,_=f.padInfo.right,g=f.padInfo.bottom,v=f.padInfo.left,k=f.dilationHeight,I=f.dilationWidth,w=f.strideHeight,S=f.strideWidth,M=f.inChannels,A=f.outChannels,x="SAME"===f.padInfo.type?1:0;if("channelsLast"!==f.dataFormat)throw new Error("wasm backend DepthwiseConv2dNative does not support dataFormat:'"+"".concat(f.dataFormat,"'. Please use 'channelsLast'."));var F=r.makeOutput(f.outShape,"float32"),N=r.dataIdMap.get(F.dataId).id;return He(s,u.shape[0],u.shape[1],u.shape[2],o,h,b,y,_,g,v,x,k,I,w,S,M,A,N),F}};var je,qe={kernelName:n.Diag,backendName:"wasm",setupFunc:function(e){Ge=e.wasm.cwrap("Diag",null,["number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=t.x,u=n.util.sizeFromShape(r.shape),i=a.makeOutput(h(h([],f(r.shape),!1),f(r.shape),!1),r.dtype);return Ge(a.dataIdMap.get(r.dataId).id,s[r.dtype],u,a.dataIdMap.get(i.dataId).id),i}};var Ve,Ke={kernelName:n.Dilation2D,backendName:"wasm",setupFunc:function(e){je=e.wasm.cwrap(n.Dilation2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=t.filter,o=r.strides,d=r.pad,p=r.dilations;if(u.dtype!==i.dtype)throw new Error("Dilation2D error: x must have the same dtype as filter. Got ".concat(u.dtype," and ").concat(i.dtype));var l=n.backend_util.computeDilation2DInfo(u.shape,i.shape,o,d,"NHWC",p),c=a.makeOutput(l.outShape,u.dtype);return je(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,s[u.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),c}};var Xe,Qe={kernelName:n.Dilation2DBackpropFilter,backendName:"wasm",setupFunc:function(e){Ve=e.wasm.cwrap(n.Dilation2DBackpropFilter,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=t.filter,o=t.dy,d=r.strides,p=r.pad,l=r.dilations;if(u.dtype!==i.dtype||u.dtype!==o.dtype)throw new Error("Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ".concat(u.dtype,", ").concat(i.dtype,", and ").concat(o.dtype));var c=n.backend_util.computeDilation2DInfo(u.shape,i.shape,d,p,"NHWC",l),m=a.makeOutput(i.shape,i.dtype);return Ve(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(o.dataId).id,a.dataIdMap.get(m.dataId).id,s[u.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),m}};var Je,Ze={kernelName:n.Dilation2DBackpropInput,backendName:"wasm",setupFunc:function(e){Xe=e.wasm.cwrap(n.Dilation2DBackpropInput,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.backend,r=e.attrs,u=t.x,i=t.filter,o=t.dy,d=r.strides,p=r.pad,l=r.dilations;if(u.dtype!==i.dtype||u.dtype!==o.dtype)throw new Error("Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ".concat(u.dtype,", ").concat(i.dtype,", and ").concat(o.dtype));var c=n.backend_util.computeDilation2DInfo(u.shape,i.shape,d,p,"NHWC",l),m=a.makeOutput(u.shape,u.dtype);return Xe(a.dataIdMap.get(u.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(o.dataId).id,a.dataIdMap.get(m.dataId).id,s[u.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),m}},Ye=y(n.Elu);var $e={kernelName:n.EluGrad,backendName:"wasm",setupFunc:function(e){Je=e.wasm.cwrap(n.EluGrad,null,["number","number","number"])},kernelFunc:function(e){var n=e.inputs,t=e.backend,a=n.dy,r=n.y,u=t.makeOutput(r.shape,"float32"),i=function(e){return t.dataIdMap.get(e.dataId).id};return Je(i(r),i(a),i(u)),u}},en=k(n.Equal,0,"bool"),nn=y(n.Erf),tn=y(n.Exp,"float32");function an(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.input,i=a.dim,s=u.shape.length,o=u.shape.slice(),d=i;return i<0&&(n.util.assert(-(s+1)<=i,(function(){return"Axis must be in the interval [".concat(-(s+1),", ").concat(s,"]")})),d=s+i+1),o.splice(d,0,1),Z({inputs:{x:u},backend:r,attrs:{shape:o}})}var rn={kernelName:n.ExpandDims,backendName:"wasm",kernelFunc:an},un=y(n.Expm1,"float32");function sn(e){var t=e.attrs,a=t.shape,r=t.value,u=e.backend,i=e.attrs.dtype;i=i||n.util.inferDtype(r);var s=u.makeOutput(a,i);return u.typedArrayFromHeap(s).fill(r),s}var on,dn={kernelName:n.Fill,backendName:"wasm",kernelFunc:sn};var pn,ln={kernelName:n.FlipLeftRight,backendName:"wasm",kernelFunc:function(e){var n=e.inputs,t=e.backend,a=n.image,r=t.makeOutput(a.shape,a.dtype),u=t.dataIdMap.get(a.dataId).id,i=t.dataIdMap.get(r.dataId).id,s=f(a.shape,4),o=s[0],d=s[1],p=s[2],l=s[3];return on(u,o,d,p,l,i),r},setupFunc:function(e){on=e.wasm.cwrap(n.FlipLeftRight,null,["number","number","number","number","number","number"])}},cn=y(n.Floor),mn=k(n.FloorDiv);var fn,hn={kernelName:n.FusedBatchNorm,backendName:"wasm",setupFunc:function(e){pn=e.wasm.cwrap(n.FusedBatchNorm,null,["number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs.varianceEpsilon,u=a.x,i=a.mean,s=a.variance,o=a.offset,d=a.scale,p=t.dataIdMap.get(u.dataId).id,l=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(s.dataId).id,m=null!=o?t.dataIdMap.get(o.dataId).id:0,f=null!=d?t.dataIdMap.get(d.dataId).id:0,h=t.makeOutput(u.shape,u.dtype);if(0===n.util.sizeFromShape(u.shape))return h;var b=t.dataIdMap.get(h.dataId).id;return pn(p,l,c,m,f,r,b),h}};var bn,yn={kernelName:n.FusedConv2D,backendName:"wasm",setupFunc:function(e){fn=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.x,i=t.filter,s=t.bias,d=t.preluActivationWeights,p=a.strides,l=a.pad,c=a.dilations,m=a.dataFormat,f=a.dimRoundingMode,h=a.activation,b=a.leakyreluAlpha,y=n.backend_util.computeConv2DInfo(u.shape,i.shape,p,c,l,f),_=o[h];if(null==_)throw new Error("".concat(h," activation not yet supported for FusedConv2D ")+"in the wasm backend.");var g=r.dataIdMap.get(u.dataId).id,v=r.dataIdMap.get(i.dataId).id,k=y.outChannels,I=0;if(null!=s){var w=r.dataIdMap.get(s.dataId);if(1!==w.shape.length)throw new Error("FusedConv2D only supports rank-1 bias but got "+"rank ".concat(w.shape.length,"."));if(w.shape[0]!==k)throw new Error("FusedConv2D bias shape (".concat(w.shape,") does not ")+"match the number of output channels (".concat(k,")"));I=w.id}var S=y.filterHeight,M=y.filterWidth,A=y.padInfo.top,x=y.padInfo.right,F=y.padInfo.bottom,N=y.padInfo.left,D=y.dilationHeight,R=y.dilationWidth,E=y.strideHeight,P=y.strideWidth,C=y.inChannels,W="SAME"===y.padInfo.type?1:0,O=y.batchSize,T=y.inHeight,z=y.inWidth;if("NHWC"!==m)throw new Error("wasm backend FusedConv2D does not support dataFormat:'"+"".concat(m,"'. Please use 'NHWC'."));var B=r.makeOutput(y.outShape,"float32"),H=r.dataIdMap.get(B.dataId).id,L=null==d?0:r.dataIdMap.get(d.dataId).id;return fn(g,O,T,z,v,S,M,I,A,x,F,N,W,D,R,E,P,C,k,_,L,b||0,H),B}};var _n,gn={kernelName:n.FusedDepthwiseConv2D,backendName:"wasm",setupFunc:function(e){bn=e.wasm.cwrap(n.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"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=t.x,i=t.filter,s=t.bias,d=t.preluActivationWeights,p=a.strides,l=a.pad,c=a.dilations,m=a.dataFormat,f=a.dimRoundingMode,h=a.activation,b=a.leakyreluAlpha,y=n.backend_util.computeConv2DInfo(u.shape,i.shape,p,c,l,f,!0),_=o[h];if(null==_)throw new Error("".concat(h," activation not yet supported for FusedDepthwiseConv2D ")+"in the wasm backend.");var g=r.dataIdMap.get(u.dataId).id,v=r.dataIdMap.get(i.dataId).id,k=y.outChannels,I=0;if(null!=s){var w=r.dataIdMap.get(s.dataId);if(1!==w.shape.length)throw new Error("FusedDepthwiseConv2D only supports rank-1 bias but got "+"rank ".concat(w.shape.length,"."));if(w.shape[0]!==k)throw new Error("FusedDepthwiseConv2D bias shape (".concat(w.shape,") does not ")+"match the number of output channels (".concat(k,")"));I=w.id}var S=y.filterHeight,M=y.filterWidth,A=y.padInfo.top,x=y.padInfo.right,F=y.padInfo.bottom,N=y.padInfo.left,D=y.dilationHeight,R=y.dilationWidth,E=y.strideHeight,P=y.strideWidth,C=y.inChannels,W="SAME"===y.padInfo.type?1:0,O=y.batchSize,T=y.inHeight,z=y.inWidth;if("NHWC"!==m)throw new Error("wasm backend FusedDepthwiseConv2D does not support dataFormat:'"+"".concat(m,"'. Please use 'NHWC'."));var B=r.makeOutput(y.outShape,"float32"),H=r.dataIdMap.get(B.dataId).id,L=null==d?0:r.dataIdMap.get(d.dataId).id;return bn(g,O,T,z,v,S,M,I,A,x,F,N,W,D,R,E,P,C,k,_,L,b||0,H),B}};var vn,kn={kernelName:n.GatherNd,backendName:"wasm",setupFunc:function(e){_n=e.wasm.cwrap(n.GatherNd,null,["number","number","number","number","number","number","array","number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=a.params,u=a.indices,i=f(n.gather_util.prepareAndValidate(r,u),4),o=i[0],d=i[1],p=i[2],l=i[3],c=t.makeOutput(o,r.dtype);if(0===d)return c;var m=u.shape,h=m[m.length-1],b=t.dataIdMap.get(r.dataId).id,y=t.dataIdMap.get(u.dataId).id,_=new Uint8Array(new Int32Array(l).buffer),g=t.dataIdMap.get(c.dataId).id;return _n(b,s[r.dtype],y,d,h,p,_,g),c}};var In,wn={kernelName:n.GatherV2,backendName:"wasm",setupFunc:function(e){vn=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])},kernelFunc:function(e){for(var t=e.backend,a=e.inputs,r=e.attrs,u=a.x,i=a.indices,o=r.axis,d=r.batchDims,p=n.util.parseAxisParam(o,u.shape)[0],l=t.readSync(i.dataId),c=u.shape[p],m=function(e){var t=l[e];n.util.assert(t<=c-1&&t>=0,(function(){return"GatherV2: the index value ".concat(t," is not in [0, ").concat(c-1,"]")}))},f=0;f<l.length;++f)m(f);var h=n.backend_util.segment_util.collectGatherOpShapeInfo(u,i,p,d),b=Z({inputs:{x:u},attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]},backend:t}),y=n.util.sizeFromShape(i.shape),_=Z({inputs:{x:i},attrs:{shape:[h.batchSize,y/h.batchSize]},backend:t}),g=[h.batchSize,h.outerSize,y/h.batchSize,h.sliceSize],v=t.makeOutput(g,u.dtype);if(0===n.util.sizeFromShape(u.shape))return v;var k=b.shape.length-1,I=t.dataIdMap.get(b.dataId).id,w=t.dataIdMap.get(_.dataId).id,S=t.dataIdMap.get(v.dataId).id,M=new Uint8Array(new Int32Array(n.util.computeStrides(b.shape)).buffer),A=new Uint8Array(new Int32Array(n.util.computeStrides(g)).buffer);return vn(I,s[u.dtype],M,k,w,h.batchSize,A,S),t.disposeData(b.dataId),t.disposeData(_.dataId),v.shape=h.outputShape,v}},Sn=k(n.Greater,0,"bool"),Mn=k(n.GreaterEqual,0,"bool"),An=y(n.IsFinite,"bool"),xn=y(n.IsInf,"bool"),Fn=y(n.IsNan,"bool");var Nn,Dn={kernelName:n.LeakyRelu,backendName:"wasm",setupFunc:function(e){In=e.wasm.cwrap(n.LeakyRelu,null,["number","number","number","number"])},kernelFunc:function(e){var t=e.inputs.x,a=e.attrs.alpha,r=e.backend,u=r.dataIdMap.get(t.dataId).id,i=r.makeOutput(t.shape,"float32");if(0!==n.util.sizeFromShape(t.shape)){var o=r.dataIdMap.get(i.dataId).id;In(u,s[t.dtype],a,o)}return i}},Rn=k(n.Less,0,"bool"),En=k(n.LessEqual,0,"bool");var Pn,Cn={kernelName:n.LinSpace,backendName:"wasm",setupFunc:function(e){Nn=e.wasm.cwrap(n.LinSpace,null,["number","number","number","number"])},kernelFunc:function(e){var n=e.attrs,t=e.backend,a=n.start,r=n.stop,u=n.num,i=Math.floor(u),s=t.makeOutput([i],"float32");return Nn(t.dataIdMap.get(s.dataId).id,a,r,i),s}},Wn=y(n.Log),On=y(n.Log1p),Tn=k(n.LogicalAnd,0,"bool"),zn=y(n.LogicalNot),Bn=k(n.LogicalOr,0,"bool"),Hn=k(n.LogicalXor,0,"bool");var Ln,Gn={kernelName:n.LRN,backendName:"wasm",setupFunc:function(e){Pn=e.wasm.cwrap(n.LRN,null,["number","number","number","number","number","number","number"])},kernelFunc:function(e){var n=e.inputs,t=e.backend,a=e.attrs,r=n.x,u=a.depthRadius,i=a.bias,s=a.alpha,o=a.beta;if("float32"!==r.dtype)throw new Error("LRN error: x must have dtype float32");var d=t.makeOutput(r.shape,r.dtype);return Pn(t.dataIdMap.get(r.dataId).id,t.dataIdMap.get(d.dataId).id,r.shape[3],u,i,s,o),d}};var Un,jn={kernelName:n.LRNGrad,backendName:"wasm",setupFunc:function(e){Ln=e.wasm.cwrap(n.LRNGrad,null,["number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var n=e.inputs,t=e.backend,a=e.attrs,r=n.x,u=n.y,i=n.dy,s=a.depthRadius,o=a.bias,d=a.alpha,p=a.beta;if("float32"!==r.dtype||"float32"!==u.dtype||"float32"!==i.dtype)throw new Error("LRNGrad error: x, y, and dy must have dtype float32");var l=t.makeOutput(r.shape,r.dtype);return Ln(t.dataIdMap.get(r.dataId).id,t.dataIdMap.get(u.dataId).id,t.dataIdMap.get(i.dataId).id,t.dataIdMap.get(l.dataId).id,i.shape[3],s,o,d,p),l}};var qn,Vn={kernelName:n.Max,backendName:"wasm",setupFunc:function(e){Un=e.wasm.cwrap(n.Max,null,["number","number","number","number"])},kernelFunc:function(e){var t=e.backend,a=e.inputs,r=e.attrs,u=r.reductionIndices,i=r.keepDims,o=a.x,d=t.dataIdMap.get(o.dataId).id,p=o,l=R(o,u,t),c=l.transposed,m=l.axes,h=l.originalAxes,b=l.inputWasTransposed;b&&(p=c,d=t.dataIdMap.get(c.dataId).id);var y=p.shape.length;n.backend_util.assertAxesAreInnerMostDims("max",m,y);var _=f(n.backend_util.computeOutAndReduceShapes(p.shape,m),2),g=_[0],v=_[1],k=n.util.sizeFromShape(v),I=t.makeOutput(g,o.dtype);if(0!==n.util.sizeFromShape(p.shape)){var w=t.dataIdMap.get(I.dataId).id;Un(d,s[o.dtype],k,w)}if(b&&t.disposeData(c.dataId),i){var S=n.backend_util.expandShapeToKeepDim(I.shape,h);I.shape=S}return I}},Kn=k(n.Maximum);var Xn,Qn={kernelName:n.MaxPool,backendName:"wasm",setupFunc:function(e){qn=e.wasm.cwrap(n.MaxPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){var t=e.inputs,a=e.attrs,r=e.backend,u=