Socket
Socket
Sign inDemoInstall

@tensorflow/tfjs-backend-cpu

Package Overview
Dependencies
Maintainers
12
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tensorflow/tfjs-backend-cpu - npm Package Compare versions

Comparing version 2.0.0 to 2.0.1

2

dist/miniprogram/index.js

@@ -17,3 +17,3 @@ /**

*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,r){"use strict";function a(t,r,a,n){for(var o=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(a)),i=0;i<o.length;++i){for(var s=i*r,d=t[s],h=0;h<r;++h){var p=t[s+h];p>d&&(d=p)}o[i]=d}return o}function n(t,r,a,n,o){for(var i=r.length,s=e.util.sizeFromShape(r),d=e.util.computeStrides(r),h=e.util.computeStrides(o),p=e.util.getTypedArrayFromDType(a,e.util.sizeFromShape(o)),u=0;u<s;++u){for(var f=e.util.indexToLoc(u,i,d),l=new Array(f.length),c=0;c<l.length;c++)l[c]=f[n[c]];p[e.util.locToIndex(l,i,h)]=t[u]}return p}var o={__proto__:null,maxImpl:a,transposeImpl:n},i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function s(t,e,r,a){return new(r||(r=Promise))((function(n,o){function i(t){try{d(a.next(t))}catch(t){o(t)}}function s(t){try{d(a.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,s)}d((a=a.apply(t,e||[])).next())}))}function d(t,e){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){i.label=o[1];break}if(6===o[0]&&i.label<n[1]){i.label=n[1],n=o;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(o);break}n[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function h(t,r){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&e.util.assert("complex64"!==t.dtype,(function(){return r+" does not support complex64 tensors in the CPU backend."}))}))}function p(t,r,a,n,o,i){for(var s=o.strideHeight,d=o.strideWidth,h=o.dilationHeight,p=o.dilationWidth,u=o.effectiveFilterHeight,f=o.effectiveFilterWidth,l=o.padInfo.top,c=o.padInfo.left,v="max"===i?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(o.outShape,a),m=y.values,g=o.outShape[1]*o.outShape[2]*o.outShape[3],S=o.outShape[2]*o.outShape[3],I=o.outShape[3],b=0;b<o.batchSize;++b)for(var k=b*g,M=b*n[0],x=0;x<o.inChannels;++x)for(var A=0;A<o.outHeight;++A)for(var F=A*s-l,w=Math.max(0,F),T=Math.min(o.inHeight,u+F),D=k+A*S,z=0;z<o.outWidth;++z){for(var _=z*d-c,W=Math.max(0,_),O=Math.min(o.inWidth,f+_),H=v,N=0,B=0,C=w;C<T;C+=h){for(var E=M+C*n[1],P=W;P<O;P+=p){var R=t[E+P*n[2]+x];"max"===i&&R>H?H=R:"avg"===i&&(N+=R,B++)}if(isNaN(H))break}m[D+z*I+x]="avg"===i?N/B:H}return y}function u(t,r,a,n,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);for(var s=e.buffer(n.outShape,"int32"),d=n.strideHeight,h=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,f=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.top,v=n.padInfo.left,y=e.buffer(r,a,t),m=0;m<n.batchSize;++m)for(var g=0;g<n.inChannels;++g)for(var S=0;S<n.outHeight;++S){for(var I=S*d-c,b=I;b<0;)b+=p;for(var k=Math.min(n.inHeight,f+I),M=0;M<n.outWidth;++M){for(var x=M*h-v,A=x;A<0;)A+=u;for(var F=Math.min(n.inWidth,l+x),w=Number.NEGATIVE_INFINITY,T=-1,D=b;D<k;D+=p)for(var z=D-I,_=A;_<F;_+=u){var W=_-x,O=y.get(m,D,_,g);O>w&&(w=O,T=o?i?((m*n.inHeight+D)*n.inWidth+_)*n.inChannels+g:(D*n.inWidth+_)*n.inChannels+g:z*l+W)}s.set(T,m,S,M,g)}}return s}var f=e.kernel_impls.nonMaxSuppressionV3,l=e.kernel_impls.split,c=e.kernel_impls.tile,v=e.kernel_impls.topkImpl,y=e.kernel_impls.whereImpl;function m(t,e,r,a){if("linear"===r)return t.linear(e);if("relu"===r)return t.relu(e);if("elu"===r)return t.elu(e);if("relu6"===r)return t.relu6(e);if("prelu"===r)return t.prelu(e,a);throw new Error("Activation "+r+" has not been implemented for the CPU backend.")}var g=function(t){function a(){var r=t.call(this)||this;return r.blockSize=48,r.firstUse=!0,r.data=new e.DataStorage(r,e.engine()),r}return function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(a,t),a.prototype.write=function(t,r,a){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var n={};return this.data.set(n,{values:t,dtype:a}),n},a.prototype.move=function(t,e,r,a){this.data.set(t,{values:e,dtype:a})},a.prototype.numDataIds=function(){return this.data.numDataIds()},a.prototype.read=function(t){return s(this,void 0,void 0,(function(){return d(this,(function(e){return[2,this.readSync(t)]}))}))},a.prototype.readSync=function(t){var r=this.data.get(t),a=r.dtype,n=r.complexTensors;if("complex64"===a){var o=this.readSync(n.real.dataId),i=this.readSync(n.imag.dataId);return e.backend_util.mergeRealAndImagArrays(o,i)}return this.data.get(t).values},a.prototype.bufferSync=function(t){var r=this.readSync(t.dataId),a=r;if("string"===t.dtype)try{a=r.map((function(t){return e.util.decodeString(t)}))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,a)},a.prototype.makeOutput=function(t,r,a){var n=this.write(t,r,a);return e.engine().makeTensorFromDataId(n,r,a,this)},a.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},a.prototype.time=function(t){return s(this,void 0,void 0,(function(){var r;return d(this,(function(a){return r=e.util.now(),t(),[2,{kernelMs:e.util.now()-r}]}))}))},a.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},a.prototype.complex=function(t,r){var a=this.makeOutput(null,t.shape,"complex64");return this.data.get(a.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(r.clone())},a},a.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},a.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},a.prototype.slice=function(t,r,a){if(h(t,"slice"),e.slice_util.isSliceContinous(t.shape,r,a)){var n=e.slice_util.computeFlatOffset(r,t.strides),o=e.util.sizeFromShape(a),i=this.readSync(t.dataId);return e.tensor(i.subarray(n,n+o),a,t.dtype)}for(var s=e.buffer(a,t.dtype),d=this.bufferSync(t),p=0;p<s.size;++p){var u=s.indexToLoc(p).map((function(t,e){return t+r[e]}));s.values[p]=d.get.apply(d,u)}return s.toTensor()},a.prototype.stridedSlice=function(t,r,a,n){h(t,"stridedSlice");var o=e.slice_util.computeOutShape(r,a,n);if(o.some((function(t){return 0===t})))return e.tensor([],o);for(var i=e.buffer(o,t.dtype),s=this.bufferSync(t),d=0;d<i.size;d++){for(var p=i.indexToLoc(d),u=new Array(p.length),f=0;f<u.length;f++)u[f]=p[f]*n[f]+r[f];i.set.apply(i,[s.get.apply(s,u)].concat(p))}return i.toTensor()},a.prototype.diag=function(t){for(var r=this.readSync(t.dataId),a=e.buffer([t.size,t.size],t.dtype),n=a.values,o=0;o<r.length;o++)n[o*t.size+o]=r[o];return a.toTensor()},a.prototype.unstack=function(t,e){for(var r=t.shape[e],a=new Array(t.rank-1),n=0,o=0;o<t.rank;o++)o!==e&&(a[n++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var d=new Array(r);for(o=0;o<d.length;o++)i[e]=o,d[o]=this.slice(t,i,s).reshape(a);return d},a.prototype.reverse=function(t,r){h(t,"reverse");for(var a=e.buffer(t.shape,t.dtype),n=this.bufferSync(t),o=function(e){var o=a.indexToLoc(e),i=o.slice();r.forEach((function(e){return i[e]=t.shape[e]-1-i[e]})),a.set.apply(a,[n.get.apply(n,i)].concat(o))},i=0;i<a.size;i++)o(i);return a.toTensor()},a.prototype.concat=function(t,r){var a=this;if("complex64"===t[0].dtype){var n=t.map((function(t){return e.real(t)})),o=t.map((function(t){return e.imag(t)}));return e.complex(this.concat(n,r),this.concat(o,r))}var i=t.map((function(t){var a=e.util.sizeFromShape(t.shape.slice(r));return t.as2D(-1,a)})),s=e.backend_util.computeOutShape(i.map((function(t){return t.shape})),1),d=e.buffer(s,t[0].dtype).values;if(1===i[0].shape[0]){var h=0;i.forEach((function(t){d.set(a.readSync(t.dataId),h),h+=t.size}))}else{var p=0;i.forEach((function(t){for(var e=a.readSync(t.dataId),r=0,n=0;n<t.shape[0];++n)for(var o=n*s[1]+p,i=0;i<t.shape[1];++i)d[o+i]=e[r++];p+=t.shape[1]}))}var u=e.backend_util.computeOutShape(t.map((function(t){return t.shape})),r);return e.tensor(d,u,t[0].dtype)},a.prototype.neg=function(t){return h(t,"neg"),this.multiply(e.scalar(-1),t)},a.prototype.add=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t+r,imag:e+a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t+e}))},a.prototype.addN=function(t){var r=this;h(t,"addN");for(var a=t.map((function(t){return r.readSync(t.dataId)})),n=e.buffer(t[0].shape,t[0].dtype),o=n.values,i=0;i<t.length;i++)for(var s=a[i],d=0;d<o.length;d++)o[d]+=s[d];return n.toTensor()},a.prototype.softmax=function(t,r){var a=e.util.parseAxisParam([r],t.shape),n=e.max(t,a),o=e.backend_util.expandShapeToKeepDim(n.shape,a),i=this.subtract(t,n.reshape(o)),s=this.exp(i),d=this.sum(s,a).reshape(o);return e.div(s,d)},a.prototype.subtract=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t-r,imag:e-a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t-e}))},a.prototype.pow=function(t,e){return h([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.pow(t,e)}))},a.prototype.batchMatMul=function(t,r,a,n){h([t,r],"matMul");for(var o=a?t.shape[1]:t.shape[2],i=a?t.shape[2]:t.shape[1],s=n?r.shape[1]:r.shape[2],d=t.shape[0],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=a?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],l=f[0],c=f[1],v=f[2],y=n?[1,r.strides[1],r.strides[0]]:[r.strides[1],1,r.strides[0]],m=y[0],g=y[1],S=y[2],I=i*s,b=e.buffer([d,i,s],t.dtype),k=b.values,M=this.blockSize,x=0;x<d;x++)for(var A=0;A<i;A+=M)for(var F=0;F<s;F+=M)for(var w=0;w<o;w+=M)for(var T=Math.min(A+M,i),D=Math.min(F+M,s),z=Math.min(w+M,o),_=A;_<T;_++)for(var W=F;W<D;W++){for(var O=0,H=w;H<z;H++)O+=p[x*l+_*c+H*v]*u[H*m+W*g+x*S];k[x*I+(_*s+W)]+=O}return b.toTensor()},a.prototype.fusedBatchMatMul=function(t){var e=t.a,r=t.b,a=t.transposeA,n=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,d=this.batchMatMul(e,r,a,n);return o&&(d=this.add(d,o)),i&&(d=m(this,d,i,s)),d},a.prototype.multiply=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t*r-e*a,imag:t*a+e*r}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t*e}))},a.prototype.floorDiv=function(t,e){h([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(function(t,e){return Math.floor(t/e)}))},a.prototype.sum=function(t,r){h(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=0,v=0;v<d;++v)c+=u[l+v];p[f]=c}return s},a.prototype.prod=function(t,r){h(t,"sum");for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=1,v=0;v<d;++v)c*=u[l+v];p[f]=c}return s},a.prototype.unsortedSegmentSum=function(t,r,a){h(t,"unsortedSegmentSum");for(var n=[],o=t.rank-r.rank,i=0;i<o;++i)r=r.expandDims(i+1);for(i=0;i<a;++i){var s=e.scalar(i,"int32"),d=e.equal(s,r).asType("float32").mul(t).sum(0);n.push(d)}return e.stack(n)},a.prototype.argMin=function(t,r){h(t,"argMin");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMin",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m<c&&(c=m,v=y)}p[f]=v}return s},a.prototype.argMax=function(t,r){h(t,"argMax");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMax",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m>c&&(c=m,v=y)}p[f]=v}return s},a.prototype.cumsum=function(t,r,a,n){if(h(t,"cumsum"),r!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+r);for(var o=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,o),s=this.readSync(i.dataId),d=this.readSync(t.dataId),p=t.shape[t.rank-1],u=n?function(t,e){return t+p-e-1}:function(t,e){return t+e},f=0;f<d.length;f+=p)for(var l=0;l<p;l++){var c=u(f,l);if(0===l)s[c]=a?0:d[c];else{var v=u(f,l-1);s[c]=a?d[v]+s[v]:d[c]+s[v]}}return i},a.prototype.equal=function(t,e){return h([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t===e?1:0}))},a.prototype.notEqual=function(t,e){return h([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t!==e?1:0}))},a.prototype.less=function(t,e){return h([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<e?1:0}))},a.prototype.lessEqual=function(t,e){return h([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<=e?1:0}))},a.prototype.greater=function(t,e){return h([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>e?1:0}))},a.prototype.greaterEqual=function(t,e){return h([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},a.prototype.logicalNot=function(t){h(t,"logicalNot");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)r[a]=e[a]?0:1;return this.makeOutput(r,t.shape,"bool")},a.prototype.logicalAnd=function(t,e){return h([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t&&e}))},a.prototype.logicalOr=function(t,e){return h([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t||e}))},a.prototype.select=function(t,r,a){h([t,r,a],"select");for(var n=this.readSync(t.dataId),o=this.readSync(r.dataId),i=this.readSync(a.dataId),s=e.zeros(r.shape,e.upcastType(r.dtype,a.dtype)),d=this.readSync(s.dataId),p=0,u=0===t.rank||t.rank>1||1===r.rank?1:e.util.sizeFromShape(r.shape.slice(1)),f=0;f<n.length;f++)for(var l=0;l<u;l++)1===n[f]?d[p++]=o[f]:d[p++]=i[f];return s},a.prototype.where=function(t){h([t],"where");var e=this.readSync(t.dataId);return y(t.shape,e)},a.prototype.topk=function(t,e,r){h(t,"topk");var a=this.readSync(t.dataId);return v(a,t.shape,t.dtype,e,r)},a.prototype.min=function(t,r){h(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];v<l&&(l=v)}d[u]=l}return i},a.prototype.minimum=function(t,e){return h([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.min(t,e)}))},a.prototype.mod=function(t,e){return h([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t%e;return t<0&&e<0||t>=0&&e>=0?r:(r+e)%e}))},a.prototype.maximum=function(t,e){return h([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},a.prototype.all=function(t,r){h(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l&&v}d[u]=l}return i},a.prototype.any=function(t,r){h(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l||v}d[u]=l}return i},a.prototype.squaredDifference=function(t,e){return h([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t-e;return r*r}))},a.prototype.ceil=function(t){h(t,"ceil");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.ceil(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.floor=function(t){h(t,"floor");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.floor(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.sign=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)e[a]<0?r[a]=-1:e[a]>0?r[a]=1:r[a]=0;return this.makeOutput(r,t.shape,"float32")},a.prototype.isNaN=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isNaN(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isInf=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Math.abs(e[a])===1/0&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isFinite=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isFinite(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.round=function(t){h(t,"round");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=Math.floor(e[a]);e[a]-n<.5?r[a]=Math.floor(e[a]):e[a]-n>.5?r[a]=Math.ceil(e[a]):r[a]=n%2==0?n:n+1}return this.makeOutput(r,t.shape,"float32")},a.prototype.exp=function(t){h(t,"exp");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.exp(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.expm1=function(t){h(t,"expm1");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.expm1(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.log=function(t){h(t,"log");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.log1p=function(t){h(t,"log1p");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log1p(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.sqrt=function(t){h(t,"sqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.rsqrt=function(t){h(t,"rsqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=1/Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.reciprocal=function(t){h(t,"reciprocal");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=1/e[a];return this.makeOutput(r,t.shape,"float32")},a.prototype.linear=function(t){return t},a.prototype.relu=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.max(0,n[o]);return r},a.prototype.relu6=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.min(Math.max(0,n[o]),6);return r},a.prototype.prelu=function(t,e){return h([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return t<0?e*t:t}))},a.prototype.elu=function(t){h(t,"elu");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var n=r[a];e[a]=n>=0?n:Math.exp(n)-1}return this.makeOutput(e,t.shape,"float32")},a.prototype.eluDer=function(t,e){h([t,e],"eluDer");for(var r=new Float32Array(e.size),a=this.readSync(e.dataId),n=this.readSync(t.dataId),o=0;o<a.length;++o){var i=a[o];r[o]=i>=1?n[o]:n[o]*(i+1)}return this.makeOutput(r,e.shape,"float32")},a.prototype.selu=function(t){h(t,"selu");for(var r=e.backend_util.SELU_SCALEALPHA,a=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),o=this.readSync(t.dataId),i=0;i<o.length;++i){var s=o[i];n[i]=s>=0?a*s:r*(Math.exp(s)-1)}return this.makeOutput(n,t.shape,"float32")},a.prototype.clip=function(t,e,r){h(t,"clip");for(var a=new Float32Array(t.size),n=this.readSync(t.dataId),o=0;o<n.length;++o){var i=n[o];a[o]=i>r?r:i<e?e:i}return this.makeOutput(a,t.shape,"float32")},a.prototype.abs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.abs(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<t.size;++a){var n=r[2*a],o=r[2*a+1];e[a]=Math.hypot(n,o)}return this.makeOutput(e,t.shape,"float32")},a.prototype.int=function(t){h(t,"int");for(var e=new Int32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=r[a];return this.makeOutput(e,t.shape,"int32")},a.prototype.sigmoid=function(t){h(t,"sigmoid");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=1/(1+Math.exp(-r[a]));return this.makeOutput(e,t.shape,"float32")},a.prototype.softplus=function(t){h(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n]>-e,i=a[n]<e,s=Math.exp(a[n]),d=void 0;d=i?s:o?a[n]:Math.log(1+s),r[n]=d}return this.makeOutput(r,t.shape,"float32")},a.prototype.sin=function(t){h(t,"sin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cos=function(t){h(t,"cos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tan=function(t){h(t,"tan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.tan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.asin=function(t){h(t,"asin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acos=function(t){h(t,"acos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan=function(t){h(t,"atan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan2=function(t,e){return h([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.atan2(t,e)}))},a.prototype.sinh=function(t){h(t,"sinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cosh=function(t){h(t,"cosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tanh=function(t){h(t,"tanh");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n)r[n]=e.util.tanh(a[n]);return this.makeOutput(r,t.shape,"float32")},a.prototype.asinh=function(t){h(t,"asinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acosh=function(t){h(t,"acosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atanh=function(t){h(t,"atanh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atanh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.erf=function(t){h(t,"erf");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=e.backend_util.ERF_P,o=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,s=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,p=e.backend_util.ERF_A5,u=0;u<a.length;++u){var f=Math.sign(a[u]),l=Math.abs(a[u]),c=1/(1+n*l);r[u]=f*(1-((((p*c+d)*c+s)*c+i)*c+o)*c*Math.exp(-l*l))}return this.makeOutput(r,t.shape,"float32")},a.prototype.step=function(t,e){void 0===e&&(e=0),h(t,"step");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n];isNaN(o)?r[n]=NaN:r[n]=o>0?1:e}return this.makeOutput(r,t.shape,"float32")},a.prototype.fusedConv2d=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.conv2d=function(t,r,a){h([t,r],"conv2d");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u="channelsLast"===a.dataFormat,f=e.buffer(a.outShape,t.dtype),l=t.strides[0],c=u?t.strides[1]:t.strides[2],v=u?t.strides[2]:1,y=u?1:t.strides[1],m=f.strides[0],g=u?f.strides[1]:f.strides[2],S=u?f.strides[2]:1,I=u?1:f.strides[1],b=this.readSync(t.dataId),k=this.readSync(r.dataId),M=f.values,x=0;x<a.batchSize;++x)for(var A=x*l,F=x*m,w=0;w<a.outHeight;++w)for(var T=F+w*g,D=w*a.strideHeight-p,z=0;z<n;z++){var _=D+z*i;if(!(_<0||_>=a.inHeight))for(var W=z*r.strides[0],O=A+_*c,H=0;H<a.outWidth;++H)for(var N=T+H*S,B=H*a.strideWidth-d,C=0;C<o;C++){var E=B+C*s;if(!(E<0||E>=a.inWidth))for(var P=O+E*v,R=W+C*r.strides[1],q=0;q<a.inChannels;++q){for(var L=b[P+q*y],U=0;U<a.outChannels;++U)M[N+U*I]+=L*k[R+U];R+=a.outChannels}}}return f.toTensor()},a.prototype.conv3d=function(t,r,a){for(var n=a.filterDepth,o=a.filterHeight,i=a.filterWidth,s=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,p=a.padInfo.front,u=a.padInfo.left,f=a.padInfo.top,l=e.buffer(a.outShape,t.dtype),c=this.readSync(t.dataId),v=this.readSync(r.dataId),y=l.values,m=0;m<a.batchSize;++m)for(var g=m*t.strides[0],S=m*l.strides[0],I=0;I<a.outDepth;++I)for(var b=S+I*l.strides[1],k=I*a.strideDepth-p,M=0;M<n;M++){var x=k+M*s;if(!(x<0||x>=a.inDepth))for(var A=M*r.strides[0],F=g+x*t.strides[1],w=0;w<a.outHeight;++w)for(var T=b+w*l.strides[2],D=w*a.strideHeight-f,z=0;z<o;z++){var _=D+z*d;if(!(_<0||_>=a.inHeight))for(var W=A+z*r.strides[1],O=F+_*t.strides[2],H=0;H<a.outWidth;++H)for(var N=T+H*a.outChannels,B=H*a.strideWidth-u,C=0;C<i;C++){var E=B+C*h;if(!(E<0||E>=a.inWidth))for(var P=W+C*r.strides[2],R=O+E*a.inChannels,q=P,L=0;L<a.inChannels;++L){for(var U=c[R+L],j=0;j<a.outChannels;++j)y[N+j]+=U*v[q+j];q+=a.outChannels}}}}return l.toTensor()},a.prototype.conv2dDerInput=function(t,r,a){h([t,r],"conv2dDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=this.readSync(t.dataId),s=this.readSync(r.dataId),d=r.strides,p=d[0],u=d[1],f=d[2],l=a.batchSize,c=a.filterHeight,v=a.filterWidth,y=a.inChannels,m=a.inHeight,g=a.inWidth,S=a.outChannels,I=a.outHeight,b=a.outWidth,k=a.strideHeight,M=a.strideWidth,x=a.dataFormat,A=c-1-a.padInfo.top,F=v-1-a.padInfo.left,w="channelsLast"===x,T=n.strides[0],D=w?n.strides[1]:n.strides[2],z=w?n.strides[2]:1,_=w?1:n.strides[1],W=t.strides[0],O=w?t.strides[1]:t.strides[2],H=w?t.strides[2]:1,N=w?1:t.strides[1],B=0;B<l;++B)for(var C=0;C<y;++C)for(var E=0;E<m;++E)for(var P=E-A,R=Math.max(0,Math.ceil(P/k)),q=Math.min(I,(c+P)/k),L=0;L<g;++L){for(var U=L-F,j=Math.max(0,Math.ceil(U/M)),G=Math.min(b,(v+U)/M),V=0,Y=R;Y<q;++Y)for(var K=Y*k-P,J=j;J<G;++J)for(var Q=W*B+O*Y+H*J,X=p*(c-1-K)+u*(v-1-(J*M-U))+f*C,Z=0;Z<S;++Z){V+=i[Q+N*Z]*s[X+Z]}o[T*B+D*E+z*L+_*C]=V}return n.toTensor()},a.prototype.conv3dDerInput=function(t,r,a){for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],h=i[2],p=i[3],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=a.batchSize,x=a.filterDepth,A=a.filterHeight,F=a.filterWidth,w=a.inChannels,T=a.inDepth,D=a.inHeight,z=a.inWidth,_=a.outChannels,W=a.outDepth,O=a.outHeight,H=a.outWidth,N=a.strideDepth,B=a.strideHeight,C=a.strideWidth,E=x-1-a.padInfo.front,P=A-1-a.padInfo.top,R=F-1-a.padInfo.left,q=0;q<M;++q)for(var L=0;L<w;++L)for(var U=0;U<T;++U)for(var j=U-E,G=Math.max(0,Math.ceil(j/N)),V=Math.min(W,(x+j)/N),Y=0;Y<D;++Y)for(var K=Y-P,J=Math.max(0,Math.ceil(K/B)),Q=Math.min(O,(A+K)/B),X=0;X<z;++X){for(var Z=X-R,$=Math.max(0,Math.ceil(Z/C)),tt=Math.min(H,(F+Z)/C),et=0,rt=G;rt<V;++rt)for(var at=rt*N-j,nt=J;nt<Q;++nt)for(var ot=nt*B-K,it=$;it<tt;++it)for(var st=l*q+c*rt+v*nt+y*it,dt=S*(x-1-at)+I*(A-1-ot)+b*(F-1-(it*C-Z))+k*L,ht=0;ht<_;++ht){et+=u[st+ht]*m[dt+ht]}o[s*q+d*U+h*Y+p*X+L]=et}return n.toTensor()},a.prototype.conv2dDerFilter=function(t,r,a){h([t,r],"conv2dDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d="channelsLast"===a.dataFormat,p=e.buffer(a.filterShape,"float32"),u=a.padInfo.left,f=a.padInfo.top,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((f-v)/n)),m=Math.min(a.outHeight,(a.inHeight+f-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((u-g)/o)),I=Math.min(a.outWidth,(a.inWidth+u-g)/o),b=0;b<a.inChannels;++b)for(var k=0;k<a.outChannels;++k){for(var M=0,x=0;x<a.batchSize;++x)for(var A=y;A<m;++A)for(var F=v+A*n-f,w=S;w<I;++w){var T=g+w*o-u;M+=d?l.get(x,F,T,b)*c.get(x,A,w,k):l.get(x,b,F,T)*c.get(x,k,A,w)}p.set(M,v,g,b,k)}return p.toTensor()},a.prototype.conv3dDerFilter=function(t,r,a){for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,h=a.filterWidth,p=e.buffer(a.filterShape,"float32"),u=p.values,f=p.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=this.readSync(t.dataId),x=t.strides,A=x[0],F=x[1],w=x[2],T=x[3],D=a.padInfo.front,z=a.padInfo.left,_=a.padInfo.top,W=0;W<s;++W)for(var O=Math.max(0,Math.ceil((D-W)/n)),H=Math.min(a.outDepth,(a.inDepth+D-W)/n),N=W*l,B=0;B<d;++B)for(var C=Math.max(0,Math.ceil((_-B)/o)),E=Math.min(a.outHeight,(a.inHeight+_-B)/o),P=B*c+N,R=0;R<h;++R)for(var q=Math.max(0,Math.ceil((z-R)/i)),L=Math.min(a.outWidth,(a.inWidth+z-R)/i),U=R*v+P,j=0;j<a.inChannels;++j)for(var G=j*y+U,V=0;V<a.outChannels;++V){for(var Y=0,K=0;K<a.batchSize;++K)for(var J=K*A,Q=K*S,X=O;X<H;++X)for(var Z=(W+X*n-D)*F+J,$=X*I+Q,tt=C;tt<E;++tt)for(var et=(B+tt*o-_)*w+Z,rt=tt*b+$,at=q;at<L;++at){var nt=at*k+rt;Y+=M[(R+at*i-z)*T+et+j]*m[nt+V]}u[G+V]=Y}return p.toTensor()},a.prototype.fusedDepthwiseConv2D=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.depthwiseConv2D(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.depthwiseConv2D=function(t,r,a){h([t,r],"depthwiseConv2D");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u=a.outChannels/a.inChannels,f=e.buffer(a.outShape,t.dtype),l=this.readSync(t.dataId),c=this.readSync(r.dataId),v=f.values,y=0;y<a.batchSize;++y)for(var m=y*t.strides[0],g=y*f.strides[0],S=0;S<a.outHeight;++S)for(var I=g+S*f.strides[1],b=S*a.strideHeight-d,k=0;k<n;++k){var M=b+k*i;if(!(M<0||M>=a.inHeight))for(var x=k*r.strides[0],A=m+M*t.strides[1],F=0;F<a.outWidth;++F)for(var w=I+F*f.strides[2],T=F*a.strideWidth-p,D=0;D<o;++D){var z=T+D*s;if(!(z<0||z>=a.inWidth))for(var _=x+D*r.strides[1],W=A+z*a.inChannels,O=w,H=_,N=0;N<a.inChannels;++N){for(var B=l[W+N],C=0;C<u;++C)v[O+C]+=B*c[H+C];O+=u,H+=u}}}return f.toTensor()},a.prototype.depthwiseConv2DDerInput=function(t,r,a){h([t,r],"depthwiseConv2DDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],p=i[2],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=this.readSync(r.dataId),m=r.strides,g=m[0],S=m[1],I=m[2],b=a.batchSize,k=a.filterHeight,M=a.filterWidth,x=a.inChannels,A=a.inHeight,F=a.inWidth,w=a.outChannels,T=a.outHeight,D=a.outWidth,z=a.strideHeight,_=a.strideWidth,W=k-1-a.padInfo.top,O=M-1-a.padInfo.left,H=w/x,N=0;N<b;++N)for(var B=0;B<x;++B)for(var C=0;C<A;++C)for(var E=C-W,P=Math.max(0,Math.ceil(E/z)),R=Math.min(T,(k+E)/z),q=0;q<F;++q){for(var L=q-O,U=Math.max(0,Math.ceil(L/_)),j=Math.min(D,(M+L)/_),G=0,V=P;V<R;++V)for(var Y=V*z-E,K=U;K<j;++K)for(var J=l*N+c*V+v*K,Q=g*(k-1-Y)+S*(M-1-(K*_-L))+I*B,X=0;X<H;++X){G+=u[J+(B*H+X)]*y[Q+X]}o[s*N+d*C+p*q+B]=G}return n.toTensor()},a.prototype.depthwiseConv2DDerFilter=function(t,r,a){h([t,r],"depthwiseConv2DDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=e.buffer(a.filterShape,"float32"),p=a.padInfo.left,u=a.padInfo.top,f=a.outChannels/a.inChannels,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((u-v)/n)),m=Math.min(a.outHeight,(a.inHeight+u-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((p-g)/o)),I=Math.min(a.outWidth,(a.inWidth+p-g)/o),b=0;b<a.outChannels;++b){for(var k=Math.trunc(b/f),M=b%f,x=0,A=0;A<a.batchSize;++A)for(var F=y;F<m;++F)for(var w=v+F*n-u,T=S;T<I;++T){var D=g+T*o-p;x+=l.get(A,w,D,k)*c.get(A,F,T,b)}d.set(x,v,g,k,M)}return d.toTensor()},a.prototype.tile=function(t,e){return h(t,"tile"),c(this.bufferSync(t),e)},a.prototype.pad=function(t,r,a){h(t,"pad");var n=r.map((function(e,r){return e[0]+t.shape[r]+e[1]})),o=r.map((function(t){return t[0]})),i=this.bufferSync(t),s=e.buffer(n,t.dtype);0!==a&&s.values.fill(a);for(var d=0;d<t.size;d++){var p=i.indexToLoc(d),u=p.map((function(t,e){return t+o[e]}));s.set.apply(s,[i.get.apply(i,p)].concat(u))}return s.toTensor()},a.prototype.gather=function(t,r,a){h([t,r],"gather");var n=t.shape.slice(),o=this.readSync(r.dataId);n[a]=o.length;for(var i=e.buffer(n,t.dtype),s=this.bufferSync(t),d=0;d<i.size;++d){var p=i.indexToLoc(d),u=p.slice();u[a]=o[p[a]];var f=s.locToIndex(u);i.values[d]=s.values[f]}return i.toTensor()},a.prototype.batchToSpaceND=function(t,r,a){h([t],"batchToSpaceND");var n=r.reduce((function(t,e){return t*e})),o=e.backend_util.getReshaped(t.shape,r,n),i=e.backend_util.getPermuted(o.length,r.length),s=e.backend_util.getReshapedPermuted(t.shape,r,n),d=e.backend_util.getSliceBeginCoords(a,r.length),p=e.backend_util.getSliceSize(s,a,r.length);return e.transpose(t.reshape(o),i).reshape(s).slice(d,p)},a.prototype.spaceToBatchND=function(t,r,a){h([t],"spaceToBatchND");var n=r.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,a);for(var i=1+r.length;i<t.shape.length;++i)o.push([0,0]);var s=t.pad(o),d=e.backend_util.getReshaped(s.shape,r,n,!1),p=e.backend_util.getPermuted(d.length,r.length,!1),u=e.backend_util.getReshapedPermuted(s.shape,r,n,!1);return e.transpose(s.reshape(d),p).reshape(u)},a.prototype.maxPool=function(t,e){return h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()},a.prototype.maxPoolBackprop=function(t,r,a,n){h([r,a],"maxPoolBackprop");for(var o=this.readSync(r.dataId),i=e.buffer(n.outShape,r.dtype,u(o,r.shape,r.dtype,n).values),s=n.strideHeight,d=n.strideWidth,p=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,v=c-1-n.padInfo.left,y=l-1-n.padInfo.top,m=e.buffer(r.shape,"float32"),g=this.bufferSync(t),S=0;S<n.batchSize;++S)for(var I=0;I<n.inChannels;++I)for(var b=0;b<n.inHeight;++b)for(var k=0;k<n.inWidth;++k){for(var M=b-y,x=k-v,A=0,F=0;F<l;F+=p){var w=(M+F)/s;if(!(w<0||w>=n.outHeight||Math.floor(w)!==w))for(var T=0;T<c;T+=f){var D=(x+T)/d;if(!(D<0||D>=n.outWidth||Math.floor(D)!==D)){var z=l*c-1-i.get(S,w,D,I)===F*c+T?1:0;if(0!==z)A+=g.get(S,w,D,I)*z}}}m.set(A,S,b,k,I)}return m.toTensor()},a.prototype.avgPoolBackprop=function(t,r,a){h([t,r],"avgPoolBackprop");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=a.dilationHeight,p=a.dilationWidth,u=a.effectiveFilterHeight,f=a.effectiveFilterWidth,l=f-1-a.padInfo.left,c=u-1-a.padInfo.top,v=e.buffer(r.shape,"float32"),y=1/(i*s),m=this.bufferSync(t),g=0;g<a.batchSize;++g)for(var S=0;S<a.inChannels;++S)for(var I=0;I<a.inHeight;++I)for(var b=0;b<a.inWidth;++b){for(var k=I-c,M=b-l,x=0,A=0;A<u;A+=d){var F=(k+A)/n;if(!(F<0||F>=a.outHeight||Math.floor(F)!==F))for(var w=0;w<f;w+=p){var T=(M+w)/o;if(!(T<0||T>=a.outWidth||Math.floor(T)!==T))x+=m.get(g,F,T,S)}}v.set(x*y,g,I,b,S)}return v.toTensor()},a.prototype.pool3d=function(t,r,a){h(t,"pool3d");for(var n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,p=r.dilationWidth,u=r.effectiveFilterDepth,f=r.effectiveFilterHeight,l=r.effectiveFilterWidth,c=r.padInfo.front,v=r.padInfo.top,y=r.padInfo.left,m="max"===a?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=this.readSync(t.dataId),S=e.buffer(r.outShape,t.dtype),I=S.values,b=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],k=r.outShape[2]*r.outShape[3]*r.outShape[4],M=r.outShape[3]*r.outShape[4],x=r.outShape[4],A=0;A<r.batchSize;++A)for(var F=A*b,w=A*t.strides[0],T=0;T<r.inChannels;++T)for(var D=0;D<r.outDepth;++D){for(var z=D*n-c,_=z;_<0;)_+=s;for(var W=Math.min(r.inDepth,u+z),O=F+D*k,H=0;H<r.outHeight;++H){for(var N=H*o-v,B=N;B<0;)B+=d;for(var C=Math.min(r.inHeight,f+N),E=O+H*M,P=0;P<r.outWidth;++P){for(var R=P*i-y,q=R;q<0;)q+=p;for(var L=Math.min(r.inWidth,l+R),U=E+P*x,j=m,G=0,V=0,Y=_;Y<W;Y+=s){for(var K=w+Y*t.strides[1],J=B;J<C;J+=d){for(var Q=K+J*t.strides[2],X=q;X<L;X+=p){var Z=g[Q+X*t.strides[3]+T];if("max"===a&&Z>j?j=Z:"avg"===a&&(G+=Z,V++),isNaN(j))break}if(isNaN(j))break}if(isNaN(j))break}I[U+T]="avg"===a?G/V:j}}}return S.toTensor()},a.prototype.avgPool3d=function(t,e){return h(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},a.prototype.avgPool3dBackprop=function(t,r,a){h([t,r],"avgPool3dBackprop");for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,p=a.filterWidth,u=a.dilationDepth,f=a.dilationHeight,l=a.dilationWidth,c=a.effectiveFilterDepth,v=a.effectiveFilterHeight,y=a.effectiveFilterWidth,m=c-1-a.padInfo.front,g=y-1-a.padInfo.left,S=v-1-a.padInfo.top,I=e.buffer(r.shape,"float32"),b=1/(s*d*p),k=this.bufferSync(t),M=0;M<a.batchSize;++M)for(var x=0;x<a.inChannels;++x)for(var A=0;A<a.inDepth;++A)for(var F=0;F<a.inHeight;++F)for(var w=0;w<a.inWidth;++w){for(var T=A-m,D=F-S,z=w-g,_=0,W=0;W<c;W+=u){var O=(T+W)/n;if(!(O<0||O>=a.outDepth||Math.floor(O)!==O))for(var H=0;H<v;H+=f){var N=(D+H)/o;if(!(N<0||N>=a.outHeight||Math.floor(N)!==N))for(var B=0;B<y;B+=l){var C=(z+B)/i;if(!(C<0||C>=a.outWidth||Math.floor(C)!==C))_+=k.get(M,O,N,C,x)}}}I.set(_*b,M,A,F,w,x)}return I.toTensor()},a.prototype.maxPool3d=function(t,e){return h(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},a.prototype.maxPool3dPositions=function(t,r){for(var a=e.buffer(r.outShape,"int32"),n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,h=r.dilationWidth,p=r.effectiveFilterDepth,u=r.effectiveFilterHeight,f=r.effectiveFilterWidth,l=r.padInfo.front,c=r.padInfo.top,v=r.padInfo.left,y=this.bufferSync(t),m=0;m<r.batchSize;++m)for(var g=0;g<r.inChannels;++g)for(var S=0;S<r.outDepth;++S){for(var I=S*n-l,b=I;b<0;)b+=s;for(var k=Math.min(r.inDepth,p+I),M=0;M<r.outHeight;++M){for(var x=M*o-c,A=x;A<0;)A+=d;for(var F=Math.min(r.inHeight,u+x),w=0;w<r.outWidth;++w){for(var T=w*i-v,D=T;D<0;)D+=h;for(var z=Math.min(r.inWidth,f+T),_=Number.NEGATIVE_INFINITY,W=-1,O=b;O<k;O+=s)for(var H=O-I,N=A;N<F;N+=d)for(var B=N-x,C=D;C<z;C+=h){var E=C-T,P=y.get(m,O,N,C,g);P>=_&&(_=P,W=H*u*f+B*u+E)}a.set(W,m,S,M,w,g)}}}return a.toTensor()},a.prototype.maxPool3dBackprop=function(t,r,a,n){h([r,a],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(r,n),i=n.strideDepth,s=n.strideHeight,d=n.strideWidth,p=n.dilationDepth,u=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterDepth,c=n.effectiveFilterHeight,v=n.effectiveFilterWidth,y=l-1-n.padInfo.front,m=v-1-n.padInfo.left,g=c-1-n.padInfo.top,S=e.buffer(r.shape,"float32"),I=this.bufferSync(o),b=this.bufferSync(t),k=0;k<n.batchSize;++k)for(var M=0;M<n.inChannels;++M)for(var x=0;x<n.inDepth;++x)for(var A=0;A<n.inHeight;++A)for(var F=0;F<n.inWidth;++F){for(var w=x-y,T=A-g,D=F-m,z=0,_=0;_<l;_+=p){var W=(w+_)/i;if(!(W<0||W>=n.outDepth||Math.floor(W)!==W))for(var O=0;O<c;O+=u){var H=(T+O)/s;if(!(H<0||H>=n.outHeight||Math.floor(H)!==H))for(var N=0;N<v;N+=f){var B=(D+N)/d;if(!(B<0||B>=n.outWidth||Math.floor(B)!==B)){var C=l*c*v-1-I.get(k,W,H,B,M)===_*c*v+O*v+N?1:0;if(0!==C)z+=b.get(k,W,H,B,M)*C}}}}S.set(z,k,x,A,F,M)}return S.toTensor()},a.prototype.cast=function(t,r){return e.backend_util.castTensor(t,r,this)},a.prototype.reshape=function(t,r){return e.backend_util.reshapeTensor(t,r)},a.prototype.avgPool=function(t,e){return h(t,"avgPool"),h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()},a.prototype.resizeBilinear=function(t,r,a,n){h(t,"resizeBilinear");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(e.util.sizeFromShape([i,r,a,p])),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=0,y=l[0]/c[0],m=l[1]/c[1],g=0;g<i;g++)for(var S=0;S<r;S++)for(var I=y*S,b=Math.floor(I),k=I-b,M=Math.min(s-1,Math.ceil(I)),x=g*t.strides[0]+b*t.strides[1],A=g*t.strides[0]+M*t.strides[1],F=0;F<a;F++)for(var w=m*F,T=Math.floor(w),D=w-T,z=Math.min(d-1,Math.ceil(w)),_=x+T*t.strides[2],W=A+T*t.strides[2],O=x+z*t.strides[2],H=A+z*t.strides[2],N=0;N<p;N++){var B=u[_+N],C=u[W+N],E=B+(u[O+N]-B)*D,P=E+(C+(u[H+N]-C)*D-E)*k;f[v++]=P}return e.tensor(f,[i,r,a,p])},a.prototype.resizeBilinearBackprop=function(t,r,a){h([t,r],"resizeBilinearBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=[a&&u>1?i-1:i,a&&f>1?s-1:s],v=[a&&u>1?u-1:u,a&&f>1?f-1:f],y=c[0]/v[0],m=c[1]/v[1],g=this.readSync(t.dataId),S=0,I=0;I<o;I++)for(var b=I*r.strides[0],k=0;k<u;k++)for(var M=k*y,x=Math.floor(M),A=Math.min(Math.ceil(M),i-1),F=b+x*r.strides[1],w=b+A*r.strides[1],T=M-x,D=1-T,z=0;z<f;z++)for(var _=z*m,W=Math.floor(_),O=Math.min(Math.ceil(_),s-1),H=_-W,N=1-H,B=F+W*r.strides[2],C=F+O*r.strides[2],E=w+W*r.strides[2],P=w+O*r.strides[2],R=D*N,q=D*H,L=T*N,U=T*H,j=0;j<d;j++){var G=g[S++];l[B+j]+=G*R,l[C+j]+=G*q,l[E+j]+=G*L,l[P+j]+=G*U}return e.tensor4d(l,[o,s,i,d],r.dtype)},a.prototype.resizeNearestNeighbor=function(t,r,a,n){h(t,"resizeNearestNeighbor");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(i*r*a*p),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=l[0]/c[0],y=l[1]/c[1],m=0,g=0;g<i;g++)for(var S=g*t.strides[0],I=0;I<r;I++)for(var b=v*I,k=S+Math.min(s-1,n?Math.round(b):Math.floor(b))*t.strides[1],M=0;M<a;M++)for(var x=y*M,A=k+Math.min(d-1,n?Math.round(x):Math.floor(x))*t.strides[2],F=0;F<p;F++){var w=u[A+F];f[m++]=w}return e.tensor(f,[i,r,a,p],t.dtype)},a.prototype.resizeNearestNeighborBackprop=function(t,r,a){h([t,r],"resizeNearestNeighborBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=this.readSync(t.dataId),v=[a&&u>1?i-1:i,a&&f>1?s-1:s],y=[a&&u>1?u-1:u,a&&f>1?f-1:f],m=v[0]/y[0],g=v[1]/y[1],S=1/m,I=1/g,b=2*Math.ceil(S)+2,k=2*Math.ceil(I)+2,M=0;M<o;M++)for(var x=M*r.strides[0],A=0;A<i;A++)for(var F=x+A*r.strides[1],w=Math.floor(A*S),T=Math.floor(w-b/2),D=0;D<s;D++)for(var z=F+D*r.strides[2],_=Math.floor(D*I),W=Math.floor(_-k/2),O=0;O<d;O++){for(var H=0,N=0;N<b;N++){var B=N+T;if(!(B<0||B>=u)){var C=x+B*t.strides[1],E=B*m;if(A===Math.min(i-1,a?Math.round(E):Math.floor(E)))for(var P=0;P<k;P++){var R=P+W;if(!(R<0||R>=f)){var q=C+R*t.strides[2],L=R*g;D===Math.min(s-1,a?Math.round(L):Math.floor(L))&&(H+=c[q+O])}}}}l[z+O]=H}return e.tensor4d(l,r.shape,r.dtype)},a.prototype.batchNorm=function(t,r,a,n,o,i){h([t,r,a,o,n],"batchNorm");for(var s=this.readSync(t.dataId),d=this.readSync(r.dataId),p=this.readSync(a.dataId),u=o?this.readSync(o.dataId):new Float32Array([1]),f=n?this.readSync(n.dataId):new Float32Array([0]),l=new Float32Array(s.length),c=f.length,v=u.length,y=p.length,m=d.length,g=0,S=0,I=0,b=0,k=0;k<s.length;++k)l[k]=f[g++]+(s[k]-d[S++])*u[I++]/Math.sqrt(p[b++]+i),g>=c&&(g=0),S>=m&&(S=0),I>=v&&(I=0),b>=y&&(b=0);return e.tensor4d(l,t.shape)},a.prototype.localResponseNormalization4D=function(t,r,a,n,o){h(t,"localResponseNormalization4D");var i=t.shape[3],s=i-1,d=this.readSync(t.dataId),p=t.size,u=new Float32Array(p);function f(t){for(var e=t%i,a=t-e+Math.max(0,e-r),n=t-e+Math.min(e+r,s),o=0;a<=n;a++){var h=d[a];o+=h*h}return o}for(var l=0;l<p;l++){var c=f(l),v=d[l]*Math.pow(a+n*c,-o);u[l]=v}return e.tensor4d(u,t.shape)},a.prototype.LRNGrad=function(t,r,a,n,o,i,s){h(t,"LRNGrad");for(var d=t.shape[3],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=this.readSync(a.dataId),l=new Float32Array(t.size),c=t.size,v=0;v<c;v++){for(var y=v%d,m=v-y+Math.max(0,y-n),g=v-y+Math.min(d,y+n+1),S=0,I=m;I<g;I++)S+=Math.pow(u[I],2);S=i*S+o;for(I=m;I<g;I++){var b=-2*i*s*u[I]*f[v]/S;v===I&&(b+=Math.pow(S,-s)),b*=p[v],l[I]+=b}}return e.tensor4d(l,t.shape)},a.prototype.multinomial=function(t,a,n,o){h(t,"multinomial");for(var i=a?t:e.softmax(t),s=i.shape[0],d=i.shape[1],p=e.zeros([s,n],"int32"),u=this.readSync(p.dataId),f=this.readSync(i.dataId),l=0;l<s;++l){var c=l*d,v=new Float32Array(d-1);v[0]=f[c];for(var y=1;y<v.length;++y)v[y]=v[y-1]+f[c+y];for(var m=r.alea(o.toString()),g=l*n,S=0;S<n;++S){var I=m();u[g+S]=v.length;for(var b=0;b<v.length;b++)if(I<v[b]){u[g+S]=b;break}}}return p},a.prototype.oneHot=function(t,r,a,n){h(t,"oneHot");var o=new Float32Array(t.size*r);o.fill(n);for(var i=this.readSync(t.dataId),s=0;s<t.size;++s)i[s]>=0&&i[s]<r&&(o[s*r+i[s]]=a);return e.tensor2d(o,[t.size,r],"int32")},a.prototype.nonMaxSuppression=function(t,e,r,a,n){h(t,"nonMaxSuppression");var o=this.readSync(t.dataId),i=this.readSync(e.dataId);return f(o,i,r,a,n)},a.prototype.fft=function(t){return this.fftBatch(t,!1)},a.prototype.ifft=function(t){return this.fftBatch(t,!0)},a.prototype.fftBatch=function(t,r){for(var a=t.shape[0],n=t.shape[1],o=e.buffer(t.shape,"float32"),i=e.buffer(t.shape,"float32"),s=e.real(t).as2D(a,n),d=e.imag(t).as2D(a,n),h=0;h<a;h++)for(var p=s.slice([h,0],[1,n]),u=d.slice([h,0],[1,n]),f=e.complex(p,u),l=this.readSync(this.fftImpl(f,r).dataId),c=0;c<n;c++){var v=e.backend_util.getComplexWithIndex(l,c);o.values[h*n+c]=v.real,i.values[h*n+c]=v.imag}return e.complex(o.toTensor(),i.toTensor()).as2D(a,n)},a.prototype.fftImpl=function(t,r){var a=t.as1D(),n=a.size;if(this.isExponentOf2(n)){var o=this.fftRadix2(a,n,r).as2D(t.shape[0],t.shape[1]);return r&&(o=e.complex(e.real(o).div(e.scalar(n)),e.imag(o).div(e.scalar(n)))),o}var i=this.readSync(t.dataId),s=this.fourierTransformByMatmul(i,n,r),d=e.backend_util.splitRealAndImagArrays(s);return e.complex(d.real,d.imag).as2D(t.shape[0],t.shape[1])},a.prototype.isExponentOf2=function(t){return 0==(t&t-1)},a.prototype.fftRadix2=function(t,r,a){if(1===r)return t;var n=this.readSync(t.dataId),o=r/2,i=e.backend_util.complexWithEvenIndex(n),s=e.complex(i.real,i.imag).as1D(),d=e.backend_util.complexWithOddIndex(n),h=e.complex(d.real,d.imag).as1D();s=this.fftRadix2(s,o,a),h=this.fftRadix2(h,o,a);var p=e.backend_util.exponents(r,a),u=e.complex(p.real,p.imag).mul(h),f=s.add(u),l=s.sub(u),c=e.real(f).concat(e.real(l)),v=e.imag(f).concat(e.imag(l));return e.complex(c,v).as1D()},a.prototype.fourierTransformByMatmul=function(t,r,a){for(var n=new Float32Array(2*r),o=0;o<r;o++){for(var i=0,s=0,d=0;d<r;d++){var h=e.backend_util.exponent(o*d,r,a),p=e.backend_util.getComplexWithIndex(t,d);i+=p.real*h.real-p.imag*h.imag,s+=p.real*h.imag+p.imag*h.real}a&&(i/=r,s/=r),e.backend_util.assignToTypedArray(n,i,s,o)}return n},a.prototype.depthToSpace=function(t,r,a){e.util.assert("NHWC"===a,(function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+a})),e.util.assert(r>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+r}));for(var n=t.shape[0],o=t.shape[1],i=t.shape[2],s=t.shape[3],d=o*r,h=i*r,p=s/(r*r),u=this.readSync(t.dataId),f=new Float32Array(n*d*h*p),l=0,c=0;c<n;++c)for(var v=0;v<d;++v)for(var y=Math.floor(v/r),m=v%r,g=0;g<h;++g)for(var S=Math.floor(g/r),I=(m*r+g%r)*p,b=0;b<p;++b){var k=b+I+s*(S+i*(y+o*c));f[l++]=u[k]}return e.tensor4d(f,[n,d,h,p])},a.prototype.broadcastedBinaryOp=function(t,r,a,n){var o=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),i=e.buffer(o,a),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,o),p=e.backend_util.getBroadcastDims(r.shape,o),u=i.values;if(h.length+p.length===0)for(var f=0;f<u.length;++f)u[f]=n(s[f%s.length],d[f%d.length]);else{var l=this.bufferSync(t),c=this.bufferSync(r),v=function(e){var a=i.indexToLoc(e),o=a.slice(-t.rank);h.forEach((function(t){return o[t]=0}));var f=l.locToIndex(o),v=a.slice(-r.rank);p.forEach((function(t){return v[t]=0}));var y=c.locToIndex(v);u[e]=n(s[f],d[y])};for(f=0;f<u.length;++f)v(f)}return i.toTensor()},a.prototype.broadcastedBinaryComplexOp=function(t,r,a){var n=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),o=e.buffer(n,"float32"),i=e.buffer(n,"float32"),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,n),p=e.backend_util.getBroadcastDims(r.shape,n),u=o.values,f=i.values;if(h.length+p.length===0)for(var l=0;l<u.length;l++){var c=l%s.length,v=l%d.length,y=a(s[2*c],s[2*c+1],d[2*v],d[2*v+1]);u[l]=y.real,f[l]=y.imag}else{var m=this.bufferSync(this.data.get(t.dataId).complexTensors.real),g=this.bufferSync(this.data.get(r.dataId).complexTensors.real),S=function(e){var n=o.indexToLoc(e),i=n.slice(-t.rank);h.forEach((function(t){return i[t]=0}));var l=m.locToIndex(i),c=n.slice(-r.rank);p.forEach((function(t){return c[t]=0}));var v=g.locToIndex(c),y=a(s[2*l],s[2*l+1],d[2*v],d[2*v+1]);u[e]=y.real,f[e]=y.imag};for(l=0;l<u.length;l++)S(l)}return this.complex(o.toTensor(),i.toTensor())},a.prototype.split=function(t,e,r){return l(t,e,r)},a.prototype.dispose=function(){},a.prototype.floatPrecision=function(){return 32},a.prototype.epsilon=function(){return t.prototype.epsilon.call(this)},a.prototype.cropAndResize=function(t,r,a,n,o,i){for(var s=t.shape,d=s[0],h=s[1],p=s[2],u=s[3],f=r.shape[0],l=n[0],c=n[1],v=e.buffer([f,l,c,u],"float32"),y=this.readSync(r.dataId),m=this.readSync(a.dataId),g=this.readSync(t.dataId),S=t.strides,I=v.strides,b=0;b<f;b++){var k=4*b,M=y[k],x=y[k+1],A=y[k+2],F=y[k+3],w=m[b];if(!(w>=d))for(var T=l>1?(A-M)*(h-1)/(l-1):0,D=c>1?(F-x)*(p-1)/(c-1):0,z=0;z<l;z++){var _=l>1?M*(h-1)+z*T:.5*(M+A)*(h-1);if(_<0||_>h-1)for(var W=0;W<c;W++)for(var O=0;O<u;O++){var H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else if("bilinear"===o){var N=Math.floor(_),B=Math.ceil(_),C=_-N;for(W=0;W<c;W++){if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var E=Math.floor(V),P=Math.ceil(V),R=V-E;for(O=0;O<u;O++){var q=g[H=O+E*S[2]+N*S[1]+w*S[0]],L=g[H=O+P*S[2]+N*S[1]+w*S[0]],U=g[H=O+E*S[2]+B*S[1]+w*S[0]],j=q+(L-q)*R,G=U+(g[H=O+P*S[2]+B*S[1]+w*S[0]]-U)*R;H=O+W*I[2]+z*I[1]+b*I[0],v.values[H]=j+(G-j)*C}}}}else for(W=0;W<c;++W){var V;if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var Y=Math.round(V),K=Math.round(_);for(O=0;O<u;O++){var J=O+Y*S[2]+K*S[1]+w*S[0],Q=O+W*I[2]+z*I[1]+b*I[0];v.values[Q]=g[J]}}}}}return v.toTensor()},a.prototype.sparseToDense=function(t,r,a,n){var o=e.backend_util.calculateShapes(r,t,a),i=o.sliceRank,s=o.numUpdates,d=o.sliceSize,h=o.strides,p=o.outputSize;return this.scatter(t,r,a,p,d,s,i,h,n,!1)},a.prototype.gatherND=function(t,r){var a=r.shape,n=a[a.length-1],o=e.backend_util.prepareAndValidate(t,r),i=o[0],s=o[1],d=o[2],h=o[3];if(0===s)return e.tensor([],i,t.dtype);for(var p=new e.TensorBuffer([s,d],t.dtype),u=this.readSync(r.dataId),f=this.readSync(t.dataId),l=0;l<s;l++){for(var c=[],v=0,y=0;y<n;y++){var m=u[l*n+y];v+=m*h[y],c.push(m)}if(v<0||v>=t.size/d)throw new Error("Invalid indices: "+c+" does not index into "+t.shape);for(var g=0;g<d;g++)p.values[l*d+g]=f[v*d+g]}return p.toTensor().reshape(i)},a.prototype.scatterND=function(t,r,a){var n=e.backend_util.calculateShapes(r,t,a),o=n.sliceRank,i=n.numUpdates,s=n.sliceSize,d=n.strides,h=n.outputSize,p=e.scalar(0);return this.scatter(t,r,a,h,s,i,o,d,p,!0)},a.prototype.fill=function(t,r,a){a=a||e.util.inferDtype(r);var n=e.util.getArrayFromDType(a,e.util.sizeFromShape(t));return n.fill(r),e.engine().makeTensor(n,t,a,this)},a.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},a.prototype.zerosLike=function(t){var r=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(r,t.shape,t.dtype)},a.prototype.linspace=function(t,r,a){return e.backend_util.linspaceImpl(t,r,a)},a.prototype.scatter=function(t,r,a,n,o,i,s,d,h,p){var u=[n/o,o],f=this.readSync(t.dataId),l=this.readSync(r.dataId);if(0===n)return e.tensor([],a,r.dtype);var c=new e.TensorBuffer(u,r.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var v=0;v<i;v++){for(var y=[],m=0,g=0;g<s;g++){var S=f[v*s+g];y.push(S),m+=S*d[g]}if(m<0||m>=n/o)throw new Error("Invalid indices: "+y+" does not index into "+a);for(var I=0;I<o;I++)p?c.values[m*o+I]+=l[v*o+I]:c.values[m*o+I]=0===r.rank?l[0]:l[v*o+I]}return c.toTensor().reshape(a)},a}(e.KernelBackend);function S(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:function(r){var a=r.inputs,n=r.backend,o=a,i=o.a,s=o.b,d=n;h([i,s],t);var p=d.data.get(i.dataId).values,u=d.data.get(s.dataId).values,f=e(i.shape,s.shape,p,u,i.dtype),l=f[0],c=f[1];return{dataId:d.write(l,c,i.dtype),shape:c,dtype:i.dtype}}}}function I(t){return function(r,a,n,o,i){var s=e.backend_util.assertAndGetBroadcastShape(r,a),d=s.length,h=e.util.computeStrides(s),p=e.util.sizeFromShape(s),u=e.util.getTypedArrayFromDType(i,p),f=r.length,l=a.length,c=e.util.computeStrides(r),v=e.util.computeStrides(a),y=e.backend_util.getBroadcastDims(r,s),m=e.backend_util.getBroadcastDims(a,s);if(y.length+m.length===0)for(var g=0;g<u.length;++g)u[g]=t(n[g%n.length],o[g%o.length]);else{var S=function(r){var a=e.util.indexToLoc(r,d,h),i=a.slice(-f);y.forEach((function(t){return i[t]=0}));var s=e.util.locToIndex(i,f,c),p=a.slice(-l);m.forEach((function(t){return p[t]=0}));var g=e.util.locToIndex(p,l,v);u[r]=t(n[s],o[g])};for(g=0;g<u.length;++g)S(g)}return[u,s]}}var b=I((function(t,e){return t/e})),k=S(e.Div,b),M={kernelName:e.Max,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,o=t.attrs,i=t.backend,s=r.x,d=o.reductionIndices,p=i,u=s.shape,f=u.length,l=e.util.parseAxisParam(d,u),c=e.backend_util.getAxesPermutation(l,f),v=p.data.get(s.dataId).values;if(null!=c){for(var y=new Array(f),m=0;m<y.length;m++)y[m]=u[c[m]];v=n(v,u,s.dtype,c,y),l=e.backend_util.getInnerMostAxes(l.length,f),u=y}h(s,"max"),e.backend_util.assertAxesAreInnerMostDims("max",l,f);var g=e.backend_util.computeOutAndReduceShapes(u,l),S=g[0],I=g[1],b=a(v,e.util.sizeFromShape(I),S,s.dtype);return{dataId:p.write(b,S,s.dtype),shape:S,dtype:s.dtype}}};for(var x={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,a=t.attrs,n=t.backend,o=r.x,i=a,s=i.filterSize,d=i.strides,f=i.pad,l=i.includeBatchInIndex,c=n;h(o,"MaxPoolWithArgmax");var v=c.data.get(o.dataId).values,y=e.backend_util.computePool2DInfo(o.shape,s,d,[1,1],f),m=function(t,r,a,n,o){var i=p(t,0,a,e.util.computeStrides(r),o,"max"),s=u(t,r,a,o,!0,n);return[i.values,s.values]}(v,o.shape,o.dtype,l,y),g=m[0],S=m[1],I=c.write(g,y.outShape,o.dtype),b=c.write(S,y.outShape,o.dtype);return[{dataId:I,shape:y.outShape,dtype:o.dtype},{dataId:b,shape:y.outShape,dtype:"int32"}]}},A=e.kernel_impls.nonMaxSuppressionV5,F={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=t.attrs,n=e,o=n.boxes,i=n.scores,s=a,d=s.maxOutputSize,p=s.iouThreshold,u=s.scoreThreshold,f=s.softNmsSigma,l=r;h(o,"NonMaxSuppressionWithScore");var c=l.data.get(o.dataId).values,v=l.data.get(i.dataId).values,y=A(c,v,d,p,u,f);return[y.selectedIndices,y.selectedScores]}},w={kernelName:e.Square,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=e.x,n=r;h(a,"square");for(var o=n.data.get(a.dataId).values,i=new Float32Array(o.length),s=0;s<o.length;++s){var d=o[s];i[s]=d*d}return{dataId:n.write(i,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},T=I((function(t,e){var r=t-e;return r*r})),D=0,z=[F,w,S(e.SquaredDifference,T),k,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.attrs,a=t.backend,o=e.x,i=r.perm,s=a;h(o,"transpose");for(var d=o.shape.length,p=new Array(d),u=0;u<p.length;u++)p[u]=o.shape[i[u]];var f=n(s.data.get(o.dataId).values,o.shape,o.dtype,i,p);return{dataId:s.write(f,p,o.dtype),shape:p,dtype:o.dtype}}},x,M];D<z.length;D++){var _=z[D];e.registerKernel(_)}e.registerBackend("cpu",(function(){return new g}),1),t.MathBackendCPU=g,t.shared=o,t.version_cpu="2.0.0",Object.defineProperty(t,"__esModule",{value:!0})}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,r){"use strict";function a(t,r,a,n){for(var o=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(a)),i=0;i<o.length;++i){for(var s=i*r,d=t[s],h=0;h<r;++h){var p=t[s+h];p>d&&(d=p)}o[i]=d}return o}function n(t,r,a,n,o){for(var i=r.length,s=e.util.sizeFromShape(r),d=e.util.computeStrides(r),h=e.util.computeStrides(o),p=e.util.getTypedArrayFromDType(a,e.util.sizeFromShape(o)),u=0;u<s;++u){for(var f=e.util.indexToLoc(u,i,d),l=new Array(f.length),c=0;c<l.length;c++)l[c]=f[n[c]];p[e.util.locToIndex(l,i,h)]=t[u]}return p}var o={__proto__:null,maxImpl:a,transposeImpl:n},i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function s(t,e,r,a){return new(r||(r=Promise))((function(n,o){function i(t){try{d(a.next(t))}catch(t){o(t)}}function s(t){try{d(a.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,s)}d((a=a.apply(t,e||[])).next())}))}function d(t,e){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){i.label=o[1];break}if(6===o[0]&&i.label<n[1]){i.label=n[1],n=o;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(o);break}n[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function h(t,r){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&e.util.assert("complex64"!==t.dtype,(function(){return r+" does not support complex64 tensors in the CPU backend."}))}))}function p(t,r,a,n,o,i){for(var s=o.strideHeight,d=o.strideWidth,h=o.dilationHeight,p=o.dilationWidth,u=o.effectiveFilterHeight,f=o.effectiveFilterWidth,l=o.padInfo.top,c=o.padInfo.left,v="max"===i?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(o.outShape,a),m=y.values,g=o.outShape[1]*o.outShape[2]*o.outShape[3],S=o.outShape[2]*o.outShape[3],I=o.outShape[3],b=0;b<o.batchSize;++b)for(var k=b*g,M=b*n[0],x=0;x<o.inChannels;++x)for(var A=0;A<o.outHeight;++A)for(var F=A*s-l,w=Math.max(0,F),T=Math.min(o.inHeight,u+F),D=k+A*S,z=0;z<o.outWidth;++z){for(var _=z*d-c,W=Math.max(0,_),O=Math.min(o.inWidth,f+_),H=v,N=0,B=0,C=w;C<T;C+=h){for(var E=M+C*n[1],P=W;P<O;P+=p){var R=t[E+P*n[2]+x];"max"===i&&R>H?H=R:"avg"===i&&(N+=R,B++)}if(isNaN(H))break}m[D+z*I+x]="avg"===i?N/B:H}return y}function u(t,r,a,n,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);for(var s=e.buffer(n.outShape,"int32"),d=n.strideHeight,h=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,f=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.top,v=n.padInfo.left,y=e.buffer(r,a,t),m=0;m<n.batchSize;++m)for(var g=0;g<n.inChannels;++g)for(var S=0;S<n.outHeight;++S){for(var I=S*d-c,b=I;b<0;)b+=p;for(var k=Math.min(n.inHeight,f+I),M=0;M<n.outWidth;++M){for(var x=M*h-v,A=x;A<0;)A+=u;for(var F=Math.min(n.inWidth,l+x),w=Number.NEGATIVE_INFINITY,T=-1,D=b;D<k;D+=p)for(var z=D-I,_=A;_<F;_+=u){var W=_-x,O=y.get(m,D,_,g);O>w&&(w=O,T=o?i?((m*n.inHeight+D)*n.inWidth+_)*n.inChannels+g:(D*n.inWidth+_)*n.inChannels+g:z*l+W)}s.set(T,m,S,M,g)}}return s}var f=e.kernel_impls.nonMaxSuppressionV3,l=e.kernel_impls.split,c=e.kernel_impls.tile,v=e.kernel_impls.topkImpl,y=e.kernel_impls.whereImpl;function m(t,e,r,a){if("linear"===r)return t.linear(e);if("relu"===r)return t.relu(e);if("elu"===r)return t.elu(e);if("relu6"===r)return t.relu6(e);if("prelu"===r)return t.prelu(e,a);throw new Error("Activation "+r+" has not been implemented for the CPU backend.")}var g=function(t){function a(){var r=t.call(this)||this;return r.blockSize=48,r.firstUse=!0,r.data=new e.DataStorage(r,e.engine()),r}return function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(a,t),a.prototype.write=function(t,r,a){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var n={};return this.data.set(n,{values:t,dtype:a}),n},a.prototype.move=function(t,e,r,a){this.data.set(t,{values:e,dtype:a})},a.prototype.numDataIds=function(){return this.data.numDataIds()},a.prototype.read=function(t){return s(this,void 0,void 0,(function(){return d(this,(function(e){return[2,this.readSync(t)]}))}))},a.prototype.readSync=function(t){var r=this.data.get(t),a=r.dtype,n=r.complexTensors;if("complex64"===a){var o=this.readSync(n.real.dataId),i=this.readSync(n.imag.dataId);return e.backend_util.mergeRealAndImagArrays(o,i)}return this.data.get(t).values},a.prototype.bufferSync=function(t){var r=this.readSync(t.dataId),a=r;if("string"===t.dtype)try{a=r.map((function(t){return e.util.decodeString(t)}))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,a)},a.prototype.makeOutput=function(t,r,a){var n=this.write(t,r,a);return e.engine().makeTensorFromDataId(n,r,a,this)},a.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},a.prototype.time=function(t){return s(this,void 0,void 0,(function(){var r;return d(this,(function(a){return r=e.util.now(),t(),[2,{kernelMs:e.util.now()-r}]}))}))},a.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},a.prototype.complex=function(t,r){var a=this.makeOutput(null,t.shape,"complex64");return this.data.get(a.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(r.clone())},a},a.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},a.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},a.prototype.slice=function(t,r,a){if(h(t,"slice"),e.slice_util.isSliceContinous(t.shape,r,a)){var n=e.slice_util.computeFlatOffset(r,t.strides),o=e.util.sizeFromShape(a),i=this.readSync(t.dataId);return e.tensor(i.subarray(n,n+o),a,t.dtype)}for(var s=e.buffer(a,t.dtype),d=this.bufferSync(t),p=0;p<s.size;++p){var u=s.indexToLoc(p).map((function(t,e){return t+r[e]}));s.values[p]=d.get.apply(d,u)}return s.toTensor()},a.prototype.stridedSlice=function(t,r,a,n){h(t,"stridedSlice");var o=e.slice_util.computeOutShape(r,a,n);if(o.some((function(t){return 0===t})))return e.tensor([],o);for(var i=e.buffer(o,t.dtype),s=this.bufferSync(t),d=0;d<i.size;d++){for(var p=i.indexToLoc(d),u=new Array(p.length),f=0;f<u.length;f++)u[f]=p[f]*n[f]+r[f];i.set.apply(i,[s.get.apply(s,u)].concat(p))}return i.toTensor()},a.prototype.diag=function(t){for(var r=this.readSync(t.dataId),a=e.buffer([t.size,t.size],t.dtype),n=a.values,o=0;o<r.length;o++)n[o*t.size+o]=r[o];return a.toTensor()},a.prototype.unstack=function(t,e){for(var r=t.shape[e],a=new Array(t.rank-1),n=0,o=0;o<t.rank;o++)o!==e&&(a[n++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var d=new Array(r);for(o=0;o<d.length;o++)i[e]=o,d[o]=this.slice(t,i,s).reshape(a);return d},a.prototype.reverse=function(t,r){h(t,"reverse");for(var a=e.buffer(t.shape,t.dtype),n=this.bufferSync(t),o=function(e){var o=a.indexToLoc(e),i=o.slice();r.forEach((function(e){return i[e]=t.shape[e]-1-i[e]})),a.set.apply(a,[n.get.apply(n,i)].concat(o))},i=0;i<a.size;i++)o(i);return a.toTensor()},a.prototype.concat=function(t,r){var a=this;if("complex64"===t[0].dtype){var n=t.map((function(t){return e.real(t)})),o=t.map((function(t){return e.imag(t)}));return e.complex(this.concat(n,r),this.concat(o,r))}var i=t.map((function(t){var a=e.util.sizeFromShape(t.shape.slice(r));return t.as2D(-1,a)})),s=e.backend_util.computeOutShape(i.map((function(t){return t.shape})),1),d=e.buffer(s,t[0].dtype).values;if(1===i[0].shape[0]){var h=0;i.forEach((function(t){d.set(a.readSync(t.dataId),h),h+=t.size}))}else{var p=0;i.forEach((function(t){for(var e=a.readSync(t.dataId),r=0,n=0;n<t.shape[0];++n)for(var o=n*s[1]+p,i=0;i<t.shape[1];++i)d[o+i]=e[r++];p+=t.shape[1]}))}var u=e.backend_util.computeOutShape(t.map((function(t){return t.shape})),r);return e.tensor(d,u,t[0].dtype)},a.prototype.neg=function(t){return h(t,"neg"),this.multiply(e.scalar(-1),t)},a.prototype.add=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t+r,imag:e+a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t+e}))},a.prototype.addN=function(t){var r=this;h(t,"addN");for(var a=t.map((function(t){return r.readSync(t.dataId)})),n=e.buffer(t[0].shape,t[0].dtype),o=n.values,i=0;i<t.length;i++)for(var s=a[i],d=0;d<o.length;d++)o[d]+=s[d];return n.toTensor()},a.prototype.softmax=function(t,r){var a=e.util.parseAxisParam([r],t.shape),n=e.max(t,a),o=e.backend_util.expandShapeToKeepDim(n.shape,a),i=this.subtract(t,n.reshape(o)),s=this.exp(i),d=this.sum(s,a).reshape(o);return e.div(s,d)},a.prototype.subtract=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t-r,imag:e-a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t-e}))},a.prototype.pow=function(t,e){return h([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.pow(t,e)}))},a.prototype.batchMatMul=function(t,r,a,n){h([t,r],"matMul");for(var o=a?t.shape[1]:t.shape[2],i=a?t.shape[2]:t.shape[1],s=n?r.shape[1]:r.shape[2],d=t.shape[0],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=a?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],l=f[0],c=f[1],v=f[2],y=n?[1,r.strides[1],r.strides[0]]:[r.strides[1],1,r.strides[0]],m=y[0],g=y[1],S=y[2],I=i*s,b=e.buffer([d,i,s],t.dtype),k=b.values,M=this.blockSize,x=0;x<d;x++)for(var A=0;A<i;A+=M)for(var F=0;F<s;F+=M)for(var w=0;w<o;w+=M)for(var T=Math.min(A+M,i),D=Math.min(F+M,s),z=Math.min(w+M,o),_=A;_<T;_++)for(var W=F;W<D;W++){for(var O=0,H=w;H<z;H++)O+=p[x*l+_*c+H*v]*u[H*m+W*g+x*S];k[x*I+(_*s+W)]+=O}return b.toTensor()},a.prototype.fusedBatchMatMul=function(t){var e=t.a,r=t.b,a=t.transposeA,n=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,d=this.batchMatMul(e,r,a,n);return o&&(d=this.add(d,o)),i&&(d=m(this,d,i,s)),d},a.prototype.multiply=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t*r-e*a,imag:t*a+e*r}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t*e}))},a.prototype.floorDiv=function(t,e){h([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(function(t,e){return Math.floor(t/e)}))},a.prototype.sum=function(t,r){h(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=0,v=0;v<d;++v)c+=u[l+v];p[f]=c}return s},a.prototype.prod=function(t,r){h(t,"sum");for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=1,v=0;v<d;++v)c*=u[l+v];p[f]=c}return s},a.prototype.unsortedSegmentSum=function(t,r,a){h(t,"unsortedSegmentSum");for(var n=[],o=t.rank-r.rank,i=0;i<o;++i)r=r.expandDims(i+1);for(i=0;i<a;++i){var s=e.scalar(i,"int32"),d=e.equal(s,r).asType("float32").mul(t).sum(0);n.push(d)}return e.stack(n)},a.prototype.argMin=function(t,r){h(t,"argMin");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMin",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m<c&&(c=m,v=y)}p[f]=v}return s},a.prototype.argMax=function(t,r){h(t,"argMax");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMax",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m>c&&(c=m,v=y)}p[f]=v}return s},a.prototype.cumsum=function(t,r,a,n){if(h(t,"cumsum"),r!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+r);for(var o=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,o),s=this.readSync(i.dataId),d=this.readSync(t.dataId),p=t.shape[t.rank-1],u=n?function(t,e){return t+p-e-1}:function(t,e){return t+e},f=0;f<d.length;f+=p)for(var l=0;l<p;l++){var c=u(f,l);if(0===l)s[c]=a?0:d[c];else{var v=u(f,l-1);s[c]=a?d[v]+s[v]:d[c]+s[v]}}return i},a.prototype.equal=function(t,e){return h([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t===e?1:0}))},a.prototype.notEqual=function(t,e){return h([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t!==e?1:0}))},a.prototype.less=function(t,e){return h([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<e?1:0}))},a.prototype.lessEqual=function(t,e){return h([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<=e?1:0}))},a.prototype.greater=function(t,e){return h([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>e?1:0}))},a.prototype.greaterEqual=function(t,e){return h([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},a.prototype.logicalNot=function(t){h(t,"logicalNot");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)r[a]=e[a]?0:1;return this.makeOutput(r,t.shape,"bool")},a.prototype.logicalAnd=function(t,e){return h([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t&&e}))},a.prototype.logicalOr=function(t,e){return h([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t||e}))},a.prototype.select=function(t,r,a){h([t,r,a],"select");for(var n=this.readSync(t.dataId),o=this.readSync(r.dataId),i=this.readSync(a.dataId),s=e.zeros(r.shape,e.upcastType(r.dtype,a.dtype)),d=this.readSync(s.dataId),p=0,u=0===t.rank||t.rank>1||1===r.rank?1:e.util.sizeFromShape(r.shape.slice(1)),f=0;f<n.length;f++)for(var l=0;l<u;l++)1===n[f]?d[p++]=o[f]:d[p++]=i[f];return s},a.prototype.where=function(t){h([t],"where");var e=this.readSync(t.dataId);return y(t.shape,e)},a.prototype.topk=function(t,e,r){h(t,"topk");var a=this.readSync(t.dataId);return v(a,t.shape,t.dtype,e,r)},a.prototype.min=function(t,r){h(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];v<l&&(l=v)}d[u]=l}return i},a.prototype.minimum=function(t,e){return h([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.min(t,e)}))},a.prototype.mod=function(t,e){return h([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t%e;return t<0&&e<0||t>=0&&e>=0?r:(r+e)%e}))},a.prototype.maximum=function(t,e){return h([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},a.prototype.all=function(t,r){h(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l&&v}d[u]=l}return i},a.prototype.any=function(t,r){h(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l||v}d[u]=l}return i},a.prototype.squaredDifference=function(t,e){return h([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t-e;return r*r}))},a.prototype.ceil=function(t){h(t,"ceil");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.ceil(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.floor=function(t){h(t,"floor");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.floor(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.sign=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)e[a]<0?r[a]=-1:e[a]>0?r[a]=1:r[a]=0;return this.makeOutput(r,t.shape,"float32")},a.prototype.isNaN=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isNaN(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isInf=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Math.abs(e[a])===1/0&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isFinite=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isFinite(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.round=function(t){h(t,"round");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=Math.floor(e[a]);e[a]-n<.5?r[a]=Math.floor(e[a]):e[a]-n>.5?r[a]=Math.ceil(e[a]):r[a]=n%2==0?n:n+1}return this.makeOutput(r,t.shape,"float32")},a.prototype.exp=function(t){h(t,"exp");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.exp(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.expm1=function(t){h(t,"expm1");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.expm1(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.log=function(t){h(t,"log");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.log1p=function(t){h(t,"log1p");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log1p(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.sqrt=function(t){h(t,"sqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.rsqrt=function(t){h(t,"rsqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=1/Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.reciprocal=function(t){h(t,"reciprocal");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=1/e[a];return this.makeOutput(r,t.shape,"float32")},a.prototype.linear=function(t){return t},a.prototype.relu=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.max(0,n[o]);return r},a.prototype.relu6=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.min(Math.max(0,n[o]),6);return r},a.prototype.prelu=function(t,e){return h([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return t<0?e*t:t}))},a.prototype.elu=function(t){h(t,"elu");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var n=r[a];e[a]=n>=0?n:Math.exp(n)-1}return this.makeOutput(e,t.shape,"float32")},a.prototype.eluDer=function(t,e){h([t,e],"eluDer");for(var r=new Float32Array(e.size),a=this.readSync(e.dataId),n=this.readSync(t.dataId),o=0;o<a.length;++o){var i=a[o];r[o]=i>=1?n[o]:n[o]*(i+1)}return this.makeOutput(r,e.shape,"float32")},a.prototype.selu=function(t){h(t,"selu");for(var r=e.backend_util.SELU_SCALEALPHA,a=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),o=this.readSync(t.dataId),i=0;i<o.length;++i){var s=o[i];n[i]=s>=0?a*s:r*(Math.exp(s)-1)}return this.makeOutput(n,t.shape,"float32")},a.prototype.clip=function(t,e,r){h(t,"clip");for(var a=new Float32Array(t.size),n=this.readSync(t.dataId),o=0;o<n.length;++o){var i=n[o];a[o]=i>r?r:i<e?e:i}return this.makeOutput(a,t.shape,"float32")},a.prototype.abs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.abs(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<t.size;++a){var n=r[2*a],o=r[2*a+1];e[a]=Math.hypot(n,o)}return this.makeOutput(e,t.shape,"float32")},a.prototype.int=function(t){h(t,"int");for(var e=new Int32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=r[a];return this.makeOutput(e,t.shape,"int32")},a.prototype.sigmoid=function(t){h(t,"sigmoid");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=1/(1+Math.exp(-r[a]));return this.makeOutput(e,t.shape,"float32")},a.prototype.softplus=function(t){h(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n]>-e,i=a[n]<e,s=Math.exp(a[n]),d=void 0;d=i?s:o?a[n]:Math.log(1+s),r[n]=d}return this.makeOutput(r,t.shape,"float32")},a.prototype.sin=function(t){h(t,"sin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cos=function(t){h(t,"cos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tan=function(t){h(t,"tan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.tan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.asin=function(t){h(t,"asin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acos=function(t){h(t,"acos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan=function(t){h(t,"atan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan2=function(t,e){return h([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.atan2(t,e)}))},a.prototype.sinh=function(t){h(t,"sinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cosh=function(t){h(t,"cosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tanh=function(t){h(t,"tanh");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n)r[n]=e.util.tanh(a[n]);return this.makeOutput(r,t.shape,"float32")},a.prototype.asinh=function(t){h(t,"asinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acosh=function(t){h(t,"acosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atanh=function(t){h(t,"atanh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atanh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.erf=function(t){h(t,"erf");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=e.backend_util.ERF_P,o=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,s=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,p=e.backend_util.ERF_A5,u=0;u<a.length;++u){var f=Math.sign(a[u]),l=Math.abs(a[u]),c=1/(1+n*l);r[u]=f*(1-((((p*c+d)*c+s)*c+i)*c+o)*c*Math.exp(-l*l))}return this.makeOutput(r,t.shape,"float32")},a.prototype.step=function(t,e){void 0===e&&(e=0),h(t,"step");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n];isNaN(o)?r[n]=NaN:r[n]=o>0?1:e}return this.makeOutput(r,t.shape,"float32")},a.prototype.fusedConv2d=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.conv2d=function(t,r,a){h([t,r],"conv2d");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u="channelsLast"===a.dataFormat,f=e.buffer(a.outShape,t.dtype),l=t.strides[0],c=u?t.strides[1]:t.strides[2],v=u?t.strides[2]:1,y=u?1:t.strides[1],m=f.strides[0],g=u?f.strides[1]:f.strides[2],S=u?f.strides[2]:1,I=u?1:f.strides[1],b=this.readSync(t.dataId),k=this.readSync(r.dataId),M=f.values,x=0;x<a.batchSize;++x)for(var A=x*l,F=x*m,w=0;w<a.outHeight;++w)for(var T=F+w*g,D=w*a.strideHeight-p,z=0;z<n;z++){var _=D+z*i;if(!(_<0||_>=a.inHeight))for(var W=z*r.strides[0],O=A+_*c,H=0;H<a.outWidth;++H)for(var N=T+H*S,B=H*a.strideWidth-d,C=0;C<o;C++){var E=B+C*s;if(!(E<0||E>=a.inWidth))for(var P=O+E*v,R=W+C*r.strides[1],q=0;q<a.inChannels;++q){for(var L=b[P+q*y],U=0;U<a.outChannels;++U)M[N+U*I]+=L*k[R+U];R+=a.outChannels}}}return f.toTensor()},a.prototype.conv3d=function(t,r,a){for(var n=a.filterDepth,o=a.filterHeight,i=a.filterWidth,s=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,p=a.padInfo.front,u=a.padInfo.left,f=a.padInfo.top,l=e.buffer(a.outShape,t.dtype),c=this.readSync(t.dataId),v=this.readSync(r.dataId),y=l.values,m=0;m<a.batchSize;++m)for(var g=m*t.strides[0],S=m*l.strides[0],I=0;I<a.outDepth;++I)for(var b=S+I*l.strides[1],k=I*a.strideDepth-p,M=0;M<n;M++){var x=k+M*s;if(!(x<0||x>=a.inDepth))for(var A=M*r.strides[0],F=g+x*t.strides[1],w=0;w<a.outHeight;++w)for(var T=b+w*l.strides[2],D=w*a.strideHeight-f,z=0;z<o;z++){var _=D+z*d;if(!(_<0||_>=a.inHeight))for(var W=A+z*r.strides[1],O=F+_*t.strides[2],H=0;H<a.outWidth;++H)for(var N=T+H*a.outChannels,B=H*a.strideWidth-u,C=0;C<i;C++){var E=B+C*h;if(!(E<0||E>=a.inWidth))for(var P=W+C*r.strides[2],R=O+E*a.inChannels,q=P,L=0;L<a.inChannels;++L){for(var U=c[R+L],j=0;j<a.outChannels;++j)y[N+j]+=U*v[q+j];q+=a.outChannels}}}}return l.toTensor()},a.prototype.conv2dDerInput=function(t,r,a){h([t,r],"conv2dDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=this.readSync(t.dataId),s=this.readSync(r.dataId),d=r.strides,p=d[0],u=d[1],f=d[2],l=a.batchSize,c=a.filterHeight,v=a.filterWidth,y=a.inChannels,m=a.inHeight,g=a.inWidth,S=a.outChannels,I=a.outHeight,b=a.outWidth,k=a.strideHeight,M=a.strideWidth,x=a.dataFormat,A=c-1-a.padInfo.top,F=v-1-a.padInfo.left,w="channelsLast"===x,T=n.strides[0],D=w?n.strides[1]:n.strides[2],z=w?n.strides[2]:1,_=w?1:n.strides[1],W=t.strides[0],O=w?t.strides[1]:t.strides[2],H=w?t.strides[2]:1,N=w?1:t.strides[1],B=0;B<l;++B)for(var C=0;C<y;++C)for(var E=0;E<m;++E)for(var P=E-A,R=Math.max(0,Math.ceil(P/k)),q=Math.min(I,(c+P)/k),L=0;L<g;++L){for(var U=L-F,j=Math.max(0,Math.ceil(U/M)),G=Math.min(b,(v+U)/M),V=0,Y=R;Y<q;++Y)for(var K=Y*k-P,J=j;J<G;++J)for(var Q=W*B+O*Y+H*J,X=p*(c-1-K)+u*(v-1-(J*M-U))+f*C,Z=0;Z<S;++Z){V+=i[Q+N*Z]*s[X+Z]}o[T*B+D*E+z*L+_*C]=V}return n.toTensor()},a.prototype.conv3dDerInput=function(t,r,a){for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],h=i[2],p=i[3],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=a.batchSize,x=a.filterDepth,A=a.filterHeight,F=a.filterWidth,w=a.inChannels,T=a.inDepth,D=a.inHeight,z=a.inWidth,_=a.outChannels,W=a.outDepth,O=a.outHeight,H=a.outWidth,N=a.strideDepth,B=a.strideHeight,C=a.strideWidth,E=x-1-a.padInfo.front,P=A-1-a.padInfo.top,R=F-1-a.padInfo.left,q=0;q<M;++q)for(var L=0;L<w;++L)for(var U=0;U<T;++U)for(var j=U-E,G=Math.max(0,Math.ceil(j/N)),V=Math.min(W,(x+j)/N),Y=0;Y<D;++Y)for(var K=Y-P,J=Math.max(0,Math.ceil(K/B)),Q=Math.min(O,(A+K)/B),X=0;X<z;++X){for(var Z=X-R,$=Math.max(0,Math.ceil(Z/C)),tt=Math.min(H,(F+Z)/C),et=0,rt=G;rt<V;++rt)for(var at=rt*N-j,nt=J;nt<Q;++nt)for(var ot=nt*B-K,it=$;it<tt;++it)for(var st=l*q+c*rt+v*nt+y*it,dt=S*(x-1-at)+I*(A-1-ot)+b*(F-1-(it*C-Z))+k*L,ht=0;ht<_;++ht){et+=u[st+ht]*m[dt+ht]}o[s*q+d*U+h*Y+p*X+L]=et}return n.toTensor()},a.prototype.conv2dDerFilter=function(t,r,a){h([t,r],"conv2dDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d="channelsLast"===a.dataFormat,p=e.buffer(a.filterShape,"float32"),u=a.padInfo.left,f=a.padInfo.top,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((f-v)/n)),m=Math.min(a.outHeight,(a.inHeight+f-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((u-g)/o)),I=Math.min(a.outWidth,(a.inWidth+u-g)/o),b=0;b<a.inChannels;++b)for(var k=0;k<a.outChannels;++k){for(var M=0,x=0;x<a.batchSize;++x)for(var A=y;A<m;++A)for(var F=v+A*n-f,w=S;w<I;++w){var T=g+w*o-u;M+=d?l.get(x,F,T,b)*c.get(x,A,w,k):l.get(x,b,F,T)*c.get(x,k,A,w)}p.set(M,v,g,b,k)}return p.toTensor()},a.prototype.conv3dDerFilter=function(t,r,a){for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,h=a.filterWidth,p=e.buffer(a.filterShape,"float32"),u=p.values,f=p.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=this.readSync(t.dataId),x=t.strides,A=x[0],F=x[1],w=x[2],T=x[3],D=a.padInfo.front,z=a.padInfo.left,_=a.padInfo.top,W=0;W<s;++W)for(var O=Math.max(0,Math.ceil((D-W)/n)),H=Math.min(a.outDepth,(a.inDepth+D-W)/n),N=W*l,B=0;B<d;++B)for(var C=Math.max(0,Math.ceil((_-B)/o)),E=Math.min(a.outHeight,(a.inHeight+_-B)/o),P=B*c+N,R=0;R<h;++R)for(var q=Math.max(0,Math.ceil((z-R)/i)),L=Math.min(a.outWidth,(a.inWidth+z-R)/i),U=R*v+P,j=0;j<a.inChannels;++j)for(var G=j*y+U,V=0;V<a.outChannels;++V){for(var Y=0,K=0;K<a.batchSize;++K)for(var J=K*A,Q=K*S,X=O;X<H;++X)for(var Z=(W+X*n-D)*F+J,$=X*I+Q,tt=C;tt<E;++tt)for(var et=(B+tt*o-_)*w+Z,rt=tt*b+$,at=q;at<L;++at){var nt=at*k+rt;Y+=M[(R+at*i-z)*T+et+j]*m[nt+V]}u[G+V]=Y}return p.toTensor()},a.prototype.fusedDepthwiseConv2D=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.depthwiseConv2D(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.depthwiseConv2D=function(t,r,a){h([t,r],"depthwiseConv2D");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u=a.outChannels/a.inChannels,f=e.buffer(a.outShape,t.dtype),l=this.readSync(t.dataId),c=this.readSync(r.dataId),v=f.values,y=0;y<a.batchSize;++y)for(var m=y*t.strides[0],g=y*f.strides[0],S=0;S<a.outHeight;++S)for(var I=g+S*f.strides[1],b=S*a.strideHeight-d,k=0;k<n;++k){var M=b+k*i;if(!(M<0||M>=a.inHeight))for(var x=k*r.strides[0],A=m+M*t.strides[1],F=0;F<a.outWidth;++F)for(var w=I+F*f.strides[2],T=F*a.strideWidth-p,D=0;D<o;++D){var z=T+D*s;if(!(z<0||z>=a.inWidth))for(var _=x+D*r.strides[1],W=A+z*a.inChannels,O=w,H=_,N=0;N<a.inChannels;++N){for(var B=l[W+N],C=0;C<u;++C)v[O+C]+=B*c[H+C];O+=u,H+=u}}}return f.toTensor()},a.prototype.depthwiseConv2DDerInput=function(t,r,a){h([t,r],"depthwiseConv2DDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],p=i[2],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=this.readSync(r.dataId),m=r.strides,g=m[0],S=m[1],I=m[2],b=a.batchSize,k=a.filterHeight,M=a.filterWidth,x=a.inChannels,A=a.inHeight,F=a.inWidth,w=a.outChannels,T=a.outHeight,D=a.outWidth,z=a.strideHeight,_=a.strideWidth,W=k-1-a.padInfo.top,O=M-1-a.padInfo.left,H=w/x,N=0;N<b;++N)for(var B=0;B<x;++B)for(var C=0;C<A;++C)for(var E=C-W,P=Math.max(0,Math.ceil(E/z)),R=Math.min(T,(k+E)/z),q=0;q<F;++q){for(var L=q-O,U=Math.max(0,Math.ceil(L/_)),j=Math.min(D,(M+L)/_),G=0,V=P;V<R;++V)for(var Y=V*z-E,K=U;K<j;++K)for(var J=l*N+c*V+v*K,Q=g*(k-1-Y)+S*(M-1-(K*_-L))+I*B,X=0;X<H;++X){G+=u[J+(B*H+X)]*y[Q+X]}o[s*N+d*C+p*q+B]=G}return n.toTensor()},a.prototype.depthwiseConv2DDerFilter=function(t,r,a){h([t,r],"depthwiseConv2DDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=e.buffer(a.filterShape,"float32"),p=a.padInfo.left,u=a.padInfo.top,f=a.outChannels/a.inChannels,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((u-v)/n)),m=Math.min(a.outHeight,(a.inHeight+u-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((p-g)/o)),I=Math.min(a.outWidth,(a.inWidth+p-g)/o),b=0;b<a.outChannels;++b){for(var k=Math.trunc(b/f),M=b%f,x=0,A=0;A<a.batchSize;++A)for(var F=y;F<m;++F)for(var w=v+F*n-u,T=S;T<I;++T){var D=g+T*o-p;x+=l.get(A,w,D,k)*c.get(A,F,T,b)}d.set(x,v,g,k,M)}return d.toTensor()},a.prototype.tile=function(t,e){return h(t,"tile"),c(this.bufferSync(t),e)},a.prototype.pad=function(t,r,a){h(t,"pad");var n=r.map((function(e,r){return e[0]+t.shape[r]+e[1]})),o=r.map((function(t){return t[0]})),i=this.bufferSync(t),s=e.buffer(n,t.dtype);0!==a&&s.values.fill(a);for(var d=0;d<t.size;d++){var p=i.indexToLoc(d),u=p.map((function(t,e){return t+o[e]}));s.set.apply(s,[i.get.apply(i,p)].concat(u))}return s.toTensor()},a.prototype.gather=function(t,r,a){h([t,r],"gather");var n=t.shape.slice(),o=this.readSync(r.dataId);n[a]=o.length;for(var i=e.buffer(n,t.dtype),s=this.bufferSync(t),d=0;d<i.size;++d){var p=i.indexToLoc(d),u=p.slice();u[a]=o[p[a]];var f=s.locToIndex(u);i.values[d]=s.values[f]}return i.toTensor()},a.prototype.batchToSpaceND=function(t,r,a){h([t],"batchToSpaceND");var n=r.reduce((function(t,e){return t*e})),o=e.backend_util.getReshaped(t.shape,r,n),i=e.backend_util.getPermuted(o.length,r.length),s=e.backend_util.getReshapedPermuted(t.shape,r,n),d=e.backend_util.getSliceBeginCoords(a,r.length),p=e.backend_util.getSliceSize(s,a,r.length);return e.transpose(t.reshape(o),i).reshape(s).slice(d,p)},a.prototype.spaceToBatchND=function(t,r,a){h([t],"spaceToBatchND");var n=r.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,a);for(var i=1+r.length;i<t.shape.length;++i)o.push([0,0]);var s=t.pad(o),d=e.backend_util.getReshaped(s.shape,r,n,!1),p=e.backend_util.getPermuted(d.length,r.length,!1),u=e.backend_util.getReshapedPermuted(s.shape,r,n,!1);return e.transpose(s.reshape(d),p).reshape(u)},a.prototype.maxPool=function(t,e){return h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()},a.prototype.maxPoolBackprop=function(t,r,a,n){h([r,a],"maxPoolBackprop");for(var o=this.readSync(r.dataId),i=e.buffer(n.outShape,r.dtype,u(o,r.shape,r.dtype,n).values),s=n.strideHeight,d=n.strideWidth,p=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,v=c-1-n.padInfo.left,y=l-1-n.padInfo.top,m=e.buffer(r.shape,"float32"),g=this.bufferSync(t),S=0;S<n.batchSize;++S)for(var I=0;I<n.inChannels;++I)for(var b=0;b<n.inHeight;++b)for(var k=0;k<n.inWidth;++k){for(var M=b-y,x=k-v,A=0,F=0;F<l;F+=p){var w=(M+F)/s;if(!(w<0||w>=n.outHeight||Math.floor(w)!==w))for(var T=0;T<c;T+=f){var D=(x+T)/d;if(!(D<0||D>=n.outWidth||Math.floor(D)!==D)){var z=l*c-1-i.get(S,w,D,I)===F*c+T?1:0;if(0!==z)A+=g.get(S,w,D,I)*z}}}m.set(A,S,b,k,I)}return m.toTensor()},a.prototype.avgPoolBackprop=function(t,r,a){h([t,r],"avgPoolBackprop");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=a.dilationHeight,p=a.dilationWidth,u=a.effectiveFilterHeight,f=a.effectiveFilterWidth,l=f-1-a.padInfo.left,c=u-1-a.padInfo.top,v=e.buffer(r.shape,"float32"),y=1/(i*s),m=this.bufferSync(t),g=0;g<a.batchSize;++g)for(var S=0;S<a.inChannels;++S)for(var I=0;I<a.inHeight;++I)for(var b=0;b<a.inWidth;++b){for(var k=I-c,M=b-l,x=0,A=0;A<u;A+=d){var F=(k+A)/n;if(!(F<0||F>=a.outHeight||Math.floor(F)!==F))for(var w=0;w<f;w+=p){var T=(M+w)/o;if(!(T<0||T>=a.outWidth||Math.floor(T)!==T))x+=m.get(g,F,T,S)}}v.set(x*y,g,I,b,S)}return v.toTensor()},a.prototype.pool3d=function(t,r,a){h(t,"pool3d");for(var n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,p=r.dilationWidth,u=r.effectiveFilterDepth,f=r.effectiveFilterHeight,l=r.effectiveFilterWidth,c=r.padInfo.front,v=r.padInfo.top,y=r.padInfo.left,m="max"===a?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=this.readSync(t.dataId),S=e.buffer(r.outShape,t.dtype),I=S.values,b=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],k=r.outShape[2]*r.outShape[3]*r.outShape[4],M=r.outShape[3]*r.outShape[4],x=r.outShape[4],A=0;A<r.batchSize;++A)for(var F=A*b,w=A*t.strides[0],T=0;T<r.inChannels;++T)for(var D=0;D<r.outDepth;++D){for(var z=D*n-c,_=z;_<0;)_+=s;for(var W=Math.min(r.inDepth,u+z),O=F+D*k,H=0;H<r.outHeight;++H){for(var N=H*o-v,B=N;B<0;)B+=d;for(var C=Math.min(r.inHeight,f+N),E=O+H*M,P=0;P<r.outWidth;++P){for(var R=P*i-y,q=R;q<0;)q+=p;for(var L=Math.min(r.inWidth,l+R),U=E+P*x,j=m,G=0,V=0,Y=_;Y<W;Y+=s){for(var K=w+Y*t.strides[1],J=B;J<C;J+=d){for(var Q=K+J*t.strides[2],X=q;X<L;X+=p){var Z=g[Q+X*t.strides[3]+T];if("max"===a&&Z>j?j=Z:"avg"===a&&(G+=Z,V++),isNaN(j))break}if(isNaN(j))break}if(isNaN(j))break}I[U+T]="avg"===a?G/V:j}}}return S.toTensor()},a.prototype.avgPool3d=function(t,e){return h(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},a.prototype.avgPool3dBackprop=function(t,r,a){h([t,r],"avgPool3dBackprop");for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,p=a.filterWidth,u=a.dilationDepth,f=a.dilationHeight,l=a.dilationWidth,c=a.effectiveFilterDepth,v=a.effectiveFilterHeight,y=a.effectiveFilterWidth,m=c-1-a.padInfo.front,g=y-1-a.padInfo.left,S=v-1-a.padInfo.top,I=e.buffer(r.shape,"float32"),b=1/(s*d*p),k=this.bufferSync(t),M=0;M<a.batchSize;++M)for(var x=0;x<a.inChannels;++x)for(var A=0;A<a.inDepth;++A)for(var F=0;F<a.inHeight;++F)for(var w=0;w<a.inWidth;++w){for(var T=A-m,D=F-S,z=w-g,_=0,W=0;W<c;W+=u){var O=(T+W)/n;if(!(O<0||O>=a.outDepth||Math.floor(O)!==O))for(var H=0;H<v;H+=f){var N=(D+H)/o;if(!(N<0||N>=a.outHeight||Math.floor(N)!==N))for(var B=0;B<y;B+=l){var C=(z+B)/i;if(!(C<0||C>=a.outWidth||Math.floor(C)!==C))_+=k.get(M,O,N,C,x)}}}I.set(_*b,M,A,F,w,x)}return I.toTensor()},a.prototype.maxPool3d=function(t,e){return h(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},a.prototype.maxPool3dPositions=function(t,r){for(var a=e.buffer(r.outShape,"int32"),n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,h=r.dilationWidth,p=r.effectiveFilterDepth,u=r.effectiveFilterHeight,f=r.effectiveFilterWidth,l=r.padInfo.front,c=r.padInfo.top,v=r.padInfo.left,y=this.bufferSync(t),m=0;m<r.batchSize;++m)for(var g=0;g<r.inChannels;++g)for(var S=0;S<r.outDepth;++S){for(var I=S*n-l,b=I;b<0;)b+=s;for(var k=Math.min(r.inDepth,p+I),M=0;M<r.outHeight;++M){for(var x=M*o-c,A=x;A<0;)A+=d;for(var F=Math.min(r.inHeight,u+x),w=0;w<r.outWidth;++w){for(var T=w*i-v,D=T;D<0;)D+=h;for(var z=Math.min(r.inWidth,f+T),_=Number.NEGATIVE_INFINITY,W=-1,O=b;O<k;O+=s)for(var H=O-I,N=A;N<F;N+=d)for(var B=N-x,C=D;C<z;C+=h){var E=C-T,P=y.get(m,O,N,C,g);P>=_&&(_=P,W=H*u*f+B*u+E)}a.set(W,m,S,M,w,g)}}}return a.toTensor()},a.prototype.maxPool3dBackprop=function(t,r,a,n){h([r,a],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(r,n),i=n.strideDepth,s=n.strideHeight,d=n.strideWidth,p=n.dilationDepth,u=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterDepth,c=n.effectiveFilterHeight,v=n.effectiveFilterWidth,y=l-1-n.padInfo.front,m=v-1-n.padInfo.left,g=c-1-n.padInfo.top,S=e.buffer(r.shape,"float32"),I=this.bufferSync(o),b=this.bufferSync(t),k=0;k<n.batchSize;++k)for(var M=0;M<n.inChannels;++M)for(var x=0;x<n.inDepth;++x)for(var A=0;A<n.inHeight;++A)for(var F=0;F<n.inWidth;++F){for(var w=x-y,T=A-g,D=F-m,z=0,_=0;_<l;_+=p){var W=(w+_)/i;if(!(W<0||W>=n.outDepth||Math.floor(W)!==W))for(var O=0;O<c;O+=u){var H=(T+O)/s;if(!(H<0||H>=n.outHeight||Math.floor(H)!==H))for(var N=0;N<v;N+=f){var B=(D+N)/d;if(!(B<0||B>=n.outWidth||Math.floor(B)!==B)){var C=l*c*v-1-I.get(k,W,H,B,M)===_*c*v+O*v+N?1:0;if(0!==C)z+=b.get(k,W,H,B,M)*C}}}}S.set(z,k,x,A,F,M)}return S.toTensor()},a.prototype.cast=function(t,r){return e.backend_util.castTensor(t,r,this)},a.prototype.reshape=function(t,r){return e.backend_util.reshapeTensor(t,r)},a.prototype.avgPool=function(t,e){return h(t,"avgPool"),h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()},a.prototype.resizeBilinear=function(t,r,a,n){h(t,"resizeBilinear");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(e.util.sizeFromShape([i,r,a,p])),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=0,y=l[0]/c[0],m=l[1]/c[1],g=0;g<i;g++)for(var S=0;S<r;S++)for(var I=y*S,b=Math.floor(I),k=I-b,M=Math.min(s-1,Math.ceil(I)),x=g*t.strides[0]+b*t.strides[1],A=g*t.strides[0]+M*t.strides[1],F=0;F<a;F++)for(var w=m*F,T=Math.floor(w),D=w-T,z=Math.min(d-1,Math.ceil(w)),_=x+T*t.strides[2],W=A+T*t.strides[2],O=x+z*t.strides[2],H=A+z*t.strides[2],N=0;N<p;N++){var B=u[_+N],C=u[W+N],E=B+(u[O+N]-B)*D,P=E+(C+(u[H+N]-C)*D-E)*k;f[v++]=P}return e.tensor(f,[i,r,a,p])},a.prototype.resizeBilinearBackprop=function(t,r,a){h([t,r],"resizeBilinearBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=[a&&u>1?i-1:i,a&&f>1?s-1:s],v=[a&&u>1?u-1:u,a&&f>1?f-1:f],y=c[0]/v[0],m=c[1]/v[1],g=this.readSync(t.dataId),S=0,I=0;I<o;I++)for(var b=I*r.strides[0],k=0;k<u;k++)for(var M=k*y,x=Math.floor(M),A=Math.min(Math.ceil(M),i-1),F=b+x*r.strides[1],w=b+A*r.strides[1],T=M-x,D=1-T,z=0;z<f;z++)for(var _=z*m,W=Math.floor(_),O=Math.min(Math.ceil(_),s-1),H=_-W,N=1-H,B=F+W*r.strides[2],C=F+O*r.strides[2],E=w+W*r.strides[2],P=w+O*r.strides[2],R=D*N,q=D*H,L=T*N,U=T*H,j=0;j<d;j++){var G=g[S++];l[B+j]+=G*R,l[C+j]+=G*q,l[E+j]+=G*L,l[P+j]+=G*U}return e.tensor4d(l,[o,s,i,d],r.dtype)},a.prototype.resizeNearestNeighbor=function(t,r,a,n){h(t,"resizeNearestNeighbor");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(i*r*a*p),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=l[0]/c[0],y=l[1]/c[1],m=0,g=0;g<i;g++)for(var S=g*t.strides[0],I=0;I<r;I++)for(var b=v*I,k=S+Math.min(s-1,n?Math.round(b):Math.floor(b))*t.strides[1],M=0;M<a;M++)for(var x=y*M,A=k+Math.min(d-1,n?Math.round(x):Math.floor(x))*t.strides[2],F=0;F<p;F++){var w=u[A+F];f[m++]=w}return e.tensor(f,[i,r,a,p],t.dtype)},a.prototype.resizeNearestNeighborBackprop=function(t,r,a){h([t,r],"resizeNearestNeighborBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=this.readSync(t.dataId),v=[a&&u>1?i-1:i,a&&f>1?s-1:s],y=[a&&u>1?u-1:u,a&&f>1?f-1:f],m=v[0]/y[0],g=v[1]/y[1],S=1/m,I=1/g,b=2*Math.ceil(S)+2,k=2*Math.ceil(I)+2,M=0;M<o;M++)for(var x=M*r.strides[0],A=0;A<i;A++)for(var F=x+A*r.strides[1],w=Math.floor(A*S),T=Math.floor(w-b/2),D=0;D<s;D++)for(var z=F+D*r.strides[2],_=Math.floor(D*I),W=Math.floor(_-k/2),O=0;O<d;O++){for(var H=0,N=0;N<b;N++){var B=N+T;if(!(B<0||B>=u)){var C=x+B*t.strides[1],E=B*m;if(A===Math.min(i-1,a?Math.round(E):Math.floor(E)))for(var P=0;P<k;P++){var R=P+W;if(!(R<0||R>=f)){var q=C+R*t.strides[2],L=R*g;D===Math.min(s-1,a?Math.round(L):Math.floor(L))&&(H+=c[q+O])}}}}l[z+O]=H}return e.tensor4d(l,r.shape,r.dtype)},a.prototype.batchNorm=function(t,r,a,n,o,i){h([t,r,a,o,n],"batchNorm");for(var s=this.readSync(t.dataId),d=this.readSync(r.dataId),p=this.readSync(a.dataId),u=o?this.readSync(o.dataId):new Float32Array([1]),f=n?this.readSync(n.dataId):new Float32Array([0]),l=new Float32Array(s.length),c=f.length,v=u.length,y=p.length,m=d.length,g=0,S=0,I=0,b=0,k=0;k<s.length;++k)l[k]=f[g++]+(s[k]-d[S++])*u[I++]/Math.sqrt(p[b++]+i),g>=c&&(g=0),S>=m&&(S=0),I>=v&&(I=0),b>=y&&(b=0);return e.tensor4d(l,t.shape)},a.prototype.localResponseNormalization4D=function(t,r,a,n,o){h(t,"localResponseNormalization4D");var i=t.shape[3],s=i-1,d=this.readSync(t.dataId),p=t.size,u=new Float32Array(p);function f(t){for(var e=t%i,a=t-e+Math.max(0,e-r),n=t-e+Math.min(e+r,s),o=0;a<=n;a++){var h=d[a];o+=h*h}return o}for(var l=0;l<p;l++){var c=f(l),v=d[l]*Math.pow(a+n*c,-o);u[l]=v}return e.tensor4d(u,t.shape)},a.prototype.LRNGrad=function(t,r,a,n,o,i,s){h(t,"LRNGrad");for(var d=t.shape[3],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=this.readSync(a.dataId),l=new Float32Array(t.size),c=t.size,v=0;v<c;v++){for(var y=v%d,m=v-y+Math.max(0,y-n),g=v-y+Math.min(d,y+n+1),S=0,I=m;I<g;I++)S+=Math.pow(u[I],2);S=i*S+o;for(I=m;I<g;I++){var b=-2*i*s*u[I]*f[v]/S;v===I&&(b+=Math.pow(S,-s)),b*=p[v],l[I]+=b}}return e.tensor4d(l,t.shape)},a.prototype.multinomial=function(t,a,n,o){h(t,"multinomial");for(var i=a?t:e.softmax(t),s=i.shape[0],d=i.shape[1],p=e.zeros([s,n],"int32"),u=this.readSync(p.dataId),f=this.readSync(i.dataId),l=0;l<s;++l){var c=l*d,v=new Float32Array(d-1);v[0]=f[c];for(var y=1;y<v.length;++y)v[y]=v[y-1]+f[c+y];for(var m=r.alea(o.toString()),g=l*n,S=0;S<n;++S){var I=m();u[g+S]=v.length;for(var b=0;b<v.length;b++)if(I<v[b]){u[g+S]=b;break}}}return p},a.prototype.oneHot=function(t,r,a,n){h(t,"oneHot");var o=new Float32Array(t.size*r);o.fill(n);for(var i=this.readSync(t.dataId),s=0;s<t.size;++s)i[s]>=0&&i[s]<r&&(o[s*r+i[s]]=a);return e.tensor2d(o,[t.size,r],"int32")},a.prototype.nonMaxSuppression=function(t,e,r,a,n){h(t,"nonMaxSuppression");var o=this.readSync(t.dataId),i=this.readSync(e.dataId);return f(o,i,r,a,n)},a.prototype.fft=function(t){return this.fftBatch(t,!1)},a.prototype.ifft=function(t){return this.fftBatch(t,!0)},a.prototype.fftBatch=function(t,r){for(var a=t.shape[0],n=t.shape[1],o=e.buffer(t.shape,"float32"),i=e.buffer(t.shape,"float32"),s=e.real(t).as2D(a,n),d=e.imag(t).as2D(a,n),h=0;h<a;h++)for(var p=s.slice([h,0],[1,n]),u=d.slice([h,0],[1,n]),f=e.complex(p,u),l=this.readSync(this.fftImpl(f,r).dataId),c=0;c<n;c++){var v=e.backend_util.getComplexWithIndex(l,c);o.values[h*n+c]=v.real,i.values[h*n+c]=v.imag}return e.complex(o.toTensor(),i.toTensor()).as2D(a,n)},a.prototype.fftImpl=function(t,r){var a=t.as1D(),n=a.size;if(this.isExponentOf2(n)){var o=this.fftRadix2(a,n,r).as2D(t.shape[0],t.shape[1]);return r&&(o=e.complex(e.real(o).div(e.scalar(n)),e.imag(o).div(e.scalar(n)))),o}var i=this.readSync(t.dataId),s=this.fourierTransformByMatmul(i,n,r),d=e.backend_util.splitRealAndImagArrays(s);return e.complex(d.real,d.imag).as2D(t.shape[0],t.shape[1])},a.prototype.isExponentOf2=function(t){return 0==(t&t-1)},a.prototype.fftRadix2=function(t,r,a){if(1===r)return t;var n=this.readSync(t.dataId),o=r/2,i=e.backend_util.complexWithEvenIndex(n),s=e.complex(i.real,i.imag).as1D(),d=e.backend_util.complexWithOddIndex(n),h=e.complex(d.real,d.imag).as1D();s=this.fftRadix2(s,o,a),h=this.fftRadix2(h,o,a);var p=e.backend_util.exponents(r,a),u=e.complex(p.real,p.imag).mul(h),f=s.add(u),l=s.sub(u),c=e.real(f).concat(e.real(l)),v=e.imag(f).concat(e.imag(l));return e.complex(c,v).as1D()},a.prototype.fourierTransformByMatmul=function(t,r,a){for(var n=new Float32Array(2*r),o=0;o<r;o++){for(var i=0,s=0,d=0;d<r;d++){var h=e.backend_util.exponent(o*d,r,a),p=e.backend_util.getComplexWithIndex(t,d);i+=p.real*h.real-p.imag*h.imag,s+=p.real*h.imag+p.imag*h.real}a&&(i/=r,s/=r),e.backend_util.assignToTypedArray(n,i,s,o)}return n},a.prototype.depthToSpace=function(t,r,a){e.util.assert("NHWC"===a,(function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+a})),e.util.assert(r>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+r}));for(var n=t.shape[0],o=t.shape[1],i=t.shape[2],s=t.shape[3],d=o*r,h=i*r,p=s/(r*r),u=this.readSync(t.dataId),f=new Float32Array(n*d*h*p),l=0,c=0;c<n;++c)for(var v=0;v<d;++v)for(var y=Math.floor(v/r),m=v%r,g=0;g<h;++g)for(var S=Math.floor(g/r),I=(m*r+g%r)*p,b=0;b<p;++b){var k=b+I+s*(S+i*(y+o*c));f[l++]=u[k]}return e.tensor4d(f,[n,d,h,p])},a.prototype.broadcastedBinaryOp=function(t,r,a,n){var o=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),i=e.buffer(o,a),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,o),p=e.backend_util.getBroadcastDims(r.shape,o),u=i.values;if(h.length+p.length===0)for(var f=0;f<u.length;++f)u[f]=n(s[f%s.length],d[f%d.length]);else{var l=this.bufferSync(t),c=this.bufferSync(r),v=function(e){var a=i.indexToLoc(e),o=a.slice(-t.rank);h.forEach((function(t){return o[t]=0}));var f=l.locToIndex(o),v=a.slice(-r.rank);p.forEach((function(t){return v[t]=0}));var y=c.locToIndex(v);u[e]=n(s[f],d[y])};for(f=0;f<u.length;++f)v(f)}return i.toTensor()},a.prototype.broadcastedBinaryComplexOp=function(t,r,a){var n=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),o=e.buffer(n,"float32"),i=e.buffer(n,"float32"),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,n),p=e.backend_util.getBroadcastDims(r.shape,n),u=o.values,f=i.values;if(h.length+p.length===0)for(var l=0;l<u.length;l++){var c=l%s.length,v=l%d.length,y=a(s[2*c],s[2*c+1],d[2*v],d[2*v+1]);u[l]=y.real,f[l]=y.imag}else{var m=this.bufferSync(this.data.get(t.dataId).complexTensors.real),g=this.bufferSync(this.data.get(r.dataId).complexTensors.real),S=function(e){var n=o.indexToLoc(e),i=n.slice(-t.rank);h.forEach((function(t){return i[t]=0}));var l=m.locToIndex(i),c=n.slice(-r.rank);p.forEach((function(t){return c[t]=0}));var v=g.locToIndex(c),y=a(s[2*l],s[2*l+1],d[2*v],d[2*v+1]);u[e]=y.real,f[e]=y.imag};for(l=0;l<u.length;l++)S(l)}return this.complex(o.toTensor(),i.toTensor())},a.prototype.split=function(t,e,r){return l(t,e,r)},a.prototype.dispose=function(){},a.prototype.floatPrecision=function(){return 32},a.prototype.epsilon=function(){return t.prototype.epsilon.call(this)},a.prototype.cropAndResize=function(t,r,a,n,o,i){for(var s=t.shape,d=s[0],h=s[1],p=s[2],u=s[3],f=r.shape[0],l=n[0],c=n[1],v=e.buffer([f,l,c,u],"float32"),y=this.readSync(r.dataId),m=this.readSync(a.dataId),g=this.readSync(t.dataId),S=t.strides,I=v.strides,b=0;b<f;b++){var k=4*b,M=y[k],x=y[k+1],A=y[k+2],F=y[k+3],w=m[b];if(!(w>=d))for(var T=l>1?(A-M)*(h-1)/(l-1):0,D=c>1?(F-x)*(p-1)/(c-1):0,z=0;z<l;z++){var _=l>1?M*(h-1)+z*T:.5*(M+A)*(h-1);if(_<0||_>h-1)for(var W=0;W<c;W++)for(var O=0;O<u;O++){var H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else if("bilinear"===o){var N=Math.floor(_),B=Math.ceil(_),C=_-N;for(W=0;W<c;W++){if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var E=Math.floor(V),P=Math.ceil(V),R=V-E;for(O=0;O<u;O++){var q=g[H=O+E*S[2]+N*S[1]+w*S[0]],L=g[H=O+P*S[2]+N*S[1]+w*S[0]],U=g[H=O+E*S[2]+B*S[1]+w*S[0]],j=q+(L-q)*R,G=U+(g[H=O+P*S[2]+B*S[1]+w*S[0]]-U)*R;H=O+W*I[2]+z*I[1]+b*I[0],v.values[H]=j+(G-j)*C}}}}else for(W=0;W<c;++W){var V;if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var Y=Math.round(V),K=Math.round(_);for(O=0;O<u;O++){var J=O+Y*S[2]+K*S[1]+w*S[0],Q=O+W*I[2]+z*I[1]+b*I[0];v.values[Q]=g[J]}}}}}return v.toTensor()},a.prototype.sparseToDense=function(t,r,a,n){var o=e.backend_util.calculateShapes(r,t,a),i=o.sliceRank,s=o.numUpdates,d=o.sliceSize,h=o.strides,p=o.outputSize;return this.scatter(t,r,a,p,d,s,i,h,n,!1)},a.prototype.gatherND=function(t,r){var a=r.shape,n=a[a.length-1],o=e.backend_util.prepareAndValidate(t,r),i=o[0],s=o[1],d=o[2],h=o[3];if(0===s)return e.tensor([],i,t.dtype);for(var p=new e.TensorBuffer([s,d],t.dtype),u=this.readSync(r.dataId),f=this.readSync(t.dataId),l=0;l<s;l++){for(var c=[],v=0,y=0;y<n;y++){var m=u[l*n+y];v+=m*h[y],c.push(m)}if(v<0||v>=t.size/d)throw new Error("Invalid indices: "+c+" does not index into "+t.shape);for(var g=0;g<d;g++)p.values[l*d+g]=f[v*d+g]}return p.toTensor().reshape(i)},a.prototype.scatterND=function(t,r,a){var n=e.backend_util.calculateShapes(r,t,a),o=n.sliceRank,i=n.numUpdates,s=n.sliceSize,d=n.strides,h=n.outputSize,p=e.scalar(0);return this.scatter(t,r,a,h,s,i,o,d,p,!0)},a.prototype.fill=function(t,r,a){a=a||e.util.inferDtype(r);var n=e.util.getArrayFromDType(a,e.util.sizeFromShape(t));return n.fill(r),e.engine().makeTensor(n,t,a,this)},a.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},a.prototype.zerosLike=function(t){var r=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(r,t.shape,t.dtype)},a.prototype.linspace=function(t,r,a){return e.backend_util.linspaceImpl(t,r,a)},a.prototype.scatter=function(t,r,a,n,o,i,s,d,h,p){var u=[n/o,o],f=this.readSync(t.dataId),l=this.readSync(r.dataId);if(0===n)return e.tensor([],a,r.dtype);var c=new e.TensorBuffer(u,r.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var v=0;v<i;v++){for(var y=[],m=0,g=0;g<s;g++){var S=f[v*s+g];y.push(S),m+=S*d[g]}if(m<0||m>=n/o)throw new Error("Invalid indices: "+y+" does not index into "+a);for(var I=0;I<o;I++)p?c.values[m*o+I]+=l[v*o+I]:c.values[m*o+I]=0===r.rank?l[0]:l[v*o+I]}return c.toTensor().reshape(a)},a}(e.KernelBackend);function S(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:function(r){var a=r.inputs,n=r.backend,o=a,i=o.a,s=o.b,d=n;h([i,s],t);var p=d.data.get(i.dataId).values,u=d.data.get(s.dataId).values,f=e(i.shape,s.shape,p,u,i.dtype),l=f[0],c=f[1];return{dataId:d.write(l,c,i.dtype),shape:c,dtype:i.dtype}}}}function I(t){return function(r,a,n,o,i){var s=e.backend_util.assertAndGetBroadcastShape(r,a),d=s.length,h=e.util.computeStrides(s),p=e.util.sizeFromShape(s),u=e.util.getTypedArrayFromDType(i,p),f=r.length,l=a.length,c=e.util.computeStrides(r),v=e.util.computeStrides(a),y=e.backend_util.getBroadcastDims(r,s),m=e.backend_util.getBroadcastDims(a,s);if(y.length+m.length===0)for(var g=0;g<u.length;++g)u[g]=t(n[g%n.length],o[g%o.length]);else{var S=function(r){var a=e.util.indexToLoc(r,d,h),i=a.slice(-f);y.forEach((function(t){return i[t]=0}));var s=e.util.locToIndex(i,f,c),p=a.slice(-l);m.forEach((function(t){return p[t]=0}));var g=e.util.locToIndex(p,l,v);u[r]=t(n[s],o[g])};for(g=0;g<u.length;++g)S(g)}return[u,s]}}var b=I((function(t,e){return t/e})),k=S(e.Div,b),M={kernelName:e.Max,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,o=t.attrs,i=t.backend,s=r.x,d=o.reductionIndices,p=i,u=s.shape,f=u.length,l=e.util.parseAxisParam(d,u),c=e.backend_util.getAxesPermutation(l,f),v=p.data.get(s.dataId).values;if(null!=c){for(var y=new Array(f),m=0;m<y.length;m++)y[m]=u[c[m]];v=n(v,u,s.dtype,c,y),l=e.backend_util.getInnerMostAxes(l.length,f),u=y}h(s,"max"),e.backend_util.assertAxesAreInnerMostDims("max",l,f);var g=e.backend_util.computeOutAndReduceShapes(u,l),S=g[0],I=g[1],b=a(v,e.util.sizeFromShape(I),S,s.dtype);return{dataId:p.write(b,S,s.dtype),shape:S,dtype:s.dtype}}};for(var x={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,a=t.attrs,n=t.backend,o=r.x,i=a,s=i.filterSize,d=i.strides,f=i.pad,l=i.includeBatchInIndex,c=n;h(o,"MaxPoolWithArgmax");var v=c.data.get(o.dataId).values,y=e.backend_util.computePool2DInfo(o.shape,s,d,[1,1],f),m=function(t,r,a,n,o){var i=p(t,0,a,e.util.computeStrides(r),o,"max"),s=u(t,r,a,o,!0,n);return[i.values,s.values]}(v,o.shape,o.dtype,l,y),g=m[0],S=m[1],I=c.write(g,y.outShape,o.dtype),b=c.write(S,y.outShape,o.dtype);return[{dataId:I,shape:y.outShape,dtype:o.dtype},{dataId:b,shape:y.outShape,dtype:"int32"}]}},A=e.kernel_impls.nonMaxSuppressionV5,F={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=t.attrs,n=e,o=n.boxes,i=n.scores,s=a,d=s.maxOutputSize,p=s.iouThreshold,u=s.scoreThreshold,f=s.softNmsSigma,l=r;h(o,"NonMaxSuppressionWithScore");var c=l.data.get(o.dataId).values,v=l.data.get(i.dataId).values,y=A(c,v,d,p,u,f);return[y.selectedIndices,y.selectedScores]}},w={kernelName:e.Square,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=e.x,n=r;h(a,"square");for(var o=n.data.get(a.dataId).values,i=new Float32Array(o.length),s=0;s<o.length;++s){var d=o[s];i[s]=d*d}return{dataId:n.write(i,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},T=I((function(t,e){var r=t-e;return r*r})),D=0,z=[F,w,S(e.SquaredDifference,T),k,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.attrs,a=t.backend,o=e.x,i=r.perm,s=a;h(o,"transpose");for(var d=o.shape.length,p=new Array(d),u=0;u<p.length;u++)p[u]=o.shape[i[u]];var f=n(s.data.get(o.dataId).values,o.shape,o.dtype,i,p);return{dataId:s.write(f,p,o.dtype),shape:p,dtype:o.dtype}}},x,M];D<z.length;D++){var _=z[D];e.registerKernel(_)}e.registerBackend("cpu",(function(){return new g}),1),t.MathBackendCPU=g,t.shared=o,t.version_cpu="2.0.1",Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=tf-backend-cpu.min.js.map

@@ -17,3 +17,3 @@ /**

*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,a){"use strict";function r(t,a,r,n){const s=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(r));for(let e=0;e<s.length;++e){const r=e*a;let n=t[r];for(let e=0;e<a;++e){const a=t[r+e];a>n&&(n=a)}s[e]=n}return s}function n(t,a,r,n,s){const o=a.length,i=e.util.sizeFromShape(a),l=e.util.computeStrides(a),d=e.util.computeStrides(s),h=e.util.getTypedArrayFromDType(r,e.util.sizeFromShape(s));for(let a=0;a<i;++a){const r=e.util.indexToLoc(a,o,l),s=new Array(r.length);for(let t=0;t<s.length;t++)s[t]=r[n[t]];h[e.util.locToIndex(s,o,d)]=t[a]}return h}var s=Object.freeze({__proto__:null,maxImpl:r,transposeImpl:n});function o(t,a){Array.isArray(t)||(t=[t]),t.forEach(t=>{null!=t&&e.util.assert("complex64"!==t.dtype,()=>`${a} does not support complex64 tensors in the CPU backend.`)})}function i(t,a,r,n,s,o){const i=s.strideHeight,l=s.strideWidth,d=s.dilationHeight,h=s.dilationWidth,c=s.effectiveFilterHeight,u=s.effectiveFilterWidth,p=s.padInfo.top,f=s.padInfo.left,m="max"===o?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(s.outShape,r),g=y.values,S=s.outShape[1]*s.outShape[2]*s.outShape[3],I=s.outShape[2]*s.outShape[3],b=s.outShape[3];for(let e=0;e<s.batchSize;++e){const a=e*S,r=e*n[0];for(let e=0;e<s.inChannels;++e)for(let y=0;y<s.outHeight;++y){const S=y*i-p,k=Math.max(0,S),M=Math.min(s.inHeight,c+S),x=a+y*I;for(let a=0;a<s.outWidth;++a){const i=a*l-f,c=Math.max(0,i),p=Math.min(s.inWidth,u+i);let y=m,S=0,I=0;for(let a=k;a<M;a+=d){const s=r+a*n[1];for(let a=c;a<p;a+=h){const r=t[s+a*n[2]+e];"max"===o&&r>y?y=r:"avg"===o&&(S+=r,I++)}if(isNaN(y))break}g[x+a*b+e]="avg"===o?S/I:y}}}return y}function l(t,a,r,n,s=!1,o=!1){const i=e.buffer(n.outShape,"int32"),l=n.strideHeight,d=n.strideWidth,h=n.dilationHeight,c=n.dilationWidth,u=n.effectiveFilterHeight,p=n.effectiveFilterWidth,f=n.padInfo.top,m=n.padInfo.left,y=e.buffer(a,r,t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.outHeight;++a){const r=a*l-f;let g=r;for(;g<0;)g+=h;const S=Math.min(n.inHeight,u+r);for(let l=0;l<n.outWidth;++l){const u=l*d-m;let f=u;for(;f<0;)f+=c;const I=Math.min(n.inWidth,p+u);let b=Number.NEGATIVE_INFINITY,k=-1;for(let a=g;a<S;a+=h){const i=a-r;for(let r=f;r<I;r+=c){const l=r-u,d=y.get(t,a,r,e);d>b&&(b=d,k=s?o?((t*n.inHeight+a)*n.inWidth+r)*n.inChannels+e:(a*n.inWidth+r)*n.inChannels+e:i*p+l)}}i.set(k,t,a,l,e)}}return i}const d=e.kernel_impls.nonMaxSuppressionV3,h=e.kernel_impls.split,c=e.kernel_impls.tile,u=e.kernel_impls.topkImpl,p=e.kernel_impls.whereImpl;function f(t,e,a,r){if("linear"===a)return t.linear(e);if("relu"===a)return t.relu(e);if("elu"===a)return t.elu(e);if("relu6"===a)return t.relu6(e);if("prelu"===a)return t.prelu(e,r);throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}class m extends e.KernelBackend{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new e.DataStorage(this,e.engine())}write(t,a,r){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));const n={};return this.data.set(n,{values:t,dtype:r}),n}move(t,e,a,r){this.data.set(t,{values:e,dtype:r})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){const{dtype:a,complexTensors:r}=this.data.get(t);if("complex64"===a){const t=this.readSync(r.real.dataId),a=this.readSync(r.imag.dataId);return e.backend_util.mergeRealAndImagArrays(t,a)}return this.data.get(t).values}bufferSync(t){const a=this.readSync(t.dataId);let r=a;if("string"===t.dtype)try{r=a.map(t=>e.util.decodeString(t))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,r)}makeOutput(t,a,r){const n=this.write(t,a,r);return e.engine().makeTensorFromDataId(n,a,r,this)}disposeData(t){if(this.data.has(t)){const{complexTensors:e}=this.data.get(t);null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}}async time(t){const a=e.util.now();return t(),{kernelMs:e.util.now()-a}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}complex(t,a){const r=this.makeOutput(null,t.shape,"complex64");return this.data.get(r.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(a.clone())},r}real(t){return this.data.get(t.dataId).complexTensors.real.clone()}imag(t){return this.data.get(t.dataId).complexTensors.imag.clone()}slice(t,a,r){if(o(t,"slice"),e.slice_util.isSliceContinous(t.shape,a,r)){const n=e.slice_util.computeFlatOffset(a,t.strides),s=e.util.sizeFromShape(r),o=this.readSync(t.dataId);return e.tensor(o.subarray(n,n+s),r,t.dtype)}const n=e.buffer(r,t.dtype),s=this.bufferSync(t);for(let t=0;t<n.size;++t){const e=n.indexToLoc(t).map((t,e)=>t+a[e]);n.values[t]=s.get(...e)}return n.toTensor()}stridedSlice(t,a,r,n){o(t,"stridedSlice");const s=e.slice_util.computeOutShape(a,r,n);if(s.some(t=>0===t))return e.tensor([],s);const i=e.buffer(s,t.dtype),l=this.bufferSync(t);for(let t=0;t<i.size;t++){const e=i.indexToLoc(t),r=new Array(e.length);for(let t=0;t<r.length;t++)r[t]=e[t]*n[t]+a[t];i.set(l.get(...r),...e)}return i.toTensor()}diag(t){const a=this.readSync(t.dataId),r=e.buffer([t.size,t.size],t.dtype),n=r.values;for(let e=0;e<a.length;e++)n[e*t.size+e]=a[e];return r.toTensor()}unstack(t,e){const a=t.shape[e],r=new Array(t.rank-1);let n=0;for(let a=0;a<t.rank;a++)a!==e&&(r[n++]=t.shape[a]);const s=new Array(t.rank).fill(0),o=t.shape.slice();o[e]=1;const i=new Array(a);for(let a=0;a<i.length;a++)s[e]=a,i[a]=this.slice(t,s,o).reshape(r);return i}reverse(t,a){o(t,"reverse");const r=e.buffer(t.shape,t.dtype),n=this.bufferSync(t);for(let e=0;e<r.size;e++){const s=r.indexToLoc(e),o=s.slice();a.forEach(e=>o[e]=t.shape[e]-1-o[e]),r.set(n.get(...o),...s)}return r.toTensor()}concat(t,a){if("complex64"===t[0].dtype){const r=t.map(t=>e.real(t)),n=t.map(t=>e.imag(t));return e.complex(this.concat(r,a),this.concat(n,a))}const r=t.map(t=>{const r=e.util.sizeFromShape(t.shape.slice(a));return t.as2D(-1,r)}),n=e.backend_util.computeOutShape(r.map(t=>t.shape),1),s=e.buffer(n,t[0].dtype).values;if(1===r[0].shape[0]){let t=0;r.forEach(e=>{s.set(this.readSync(e.dataId),t),t+=e.size})}else{let t=0;r.forEach(e=>{const a=this.readSync(e.dataId);let r=0;for(let o=0;o<e.shape[0];++o){const i=o*n[1]+t;for(let t=0;t<e.shape[1];++t)s[i+t]=a[r++]}t+=e.shape[1]})}const o=e.backend_util.computeOutShape(t.map(t=>t.shape),a);return e.tensor(s,o,t[0].dtype)}neg(t){return o(t,"neg"),this.multiply(e.scalar(-1),t)}add(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t+a,imag:e+r})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t+e)}addN(t){o(t,"addN");const a=t.map(t=>this.readSync(t.dataId)),r=e.buffer(t[0].shape,t[0].dtype),n=r.values;for(let e=0;e<t.length;e++){const t=a[e];for(let e=0;e<n.length;e++)n[e]+=t[e]}return r.toTensor()}softmax(t,a){const r=e.util.parseAxisParam([a],t.shape),n=e.max(t,r),s=e.backend_util.expandShapeToKeepDim(n.shape,r),o=this.subtract(t,n.reshape(s)),i=this.exp(o),l=this.sum(i,r).reshape(s);return e.div(i,l)}subtract(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t-a,imag:e-r})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t-e)}pow(t,e){return o([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.pow(t,e))}batchMatMul(t,a,r,n){o([t,a],"matMul");const s=r?t.shape[1]:t.shape[2],i=r?t.shape[2]:t.shape[1],l=n?a.shape[1]:a.shape[2],d=t.shape[0],h=this.readSync(t.dataId),c=this.readSync(a.dataId),[u,p,f]=r?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],[m,y,g]=n?[1,a.strides[1],a.strides[0]]:[a.strides[1],1,a.strides[0]],S=i*l,I=e.buffer([d,i,l],t.dtype),b=I.values,k=this.blockSize;for(let t=0;t<d;t++)for(let e=0;e<i;e+=k)for(let a=0;a<l;a+=k)for(let r=0;r<s;r+=k){const n=Math.min(e+k,i),o=Math.min(a+k,l),d=Math.min(r+k,s);for(let s=e;s<n;s++)for(let e=a;e<o;e++){let a=0;for(let n=r;n<d;n++)a+=h[t*u+s*p+n*f]*c[n*m+e*y+t*g];b[t*S+(s*l+e)]+=a}}return I.toTensor()}fusedBatchMatMul({a:t,b:e,transposeA:a,transposeB:r,bias:n,activation:s,preluActivationWeights:o}){let i=this.batchMatMul(t,e,a,r);return n&&(i=this.add(i,n)),s&&(i=f(this,i,s,o)),i}multiply(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t*a-e*r,imag:t*r+e*a})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t*e)}floorDiv(t,e){o([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(t,e)=>Math.floor(t/e))}sum(t,a){o(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.upcastType(t.dtype,"int32"),i=e.zeros(r,s),l=e.util.sizeFromShape(n),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=0;for(let t=0;t<l;++t)a+=h[e+t];d[t]=a}return i}prod(t,a){o(t,"sum");const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.upcastType(t.dtype,"int32"),i=e.zeros(r,s),l=e.util.sizeFromShape(n),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=1;for(let t=0;t<l;++t)a*=h[e+t];d[t]=a}return i}unsortedSegmentSum(t,a,r){o(t,"unsortedSegmentSum");const n=[],s=t.rank-a.rank;for(let t=0;t<s;++t)a=a.expandDims(t+1);for(let s=0;s<r;++s){const r=e.scalar(s,"int32"),o=e.equal(r,a).asType("float32").mul(t).sum(0);n.push(o)}return e.stack(n)}argMin(t,a){o(t,"argMin");const r=[a];e.backend_util.assertAxesAreInnerMostDims("argMin",r,t.rank);const[n,s]=e.backend_util.computeOutAndReduceShapes(t.shape,r),i=e.zeros(n,"int32"),l=e.util.sizeFromShape(s),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=h[e],r=0;for(let t=0;t<l;++t){const n=h[e+t];n<a&&(a=n,r=t)}d[t]=r}return i}argMax(t,a){o(t,"argMax");const r=[a];e.backend_util.assertAxesAreInnerMostDims("argMax",r,t.rank);const[n,s]=e.backend_util.computeOutAndReduceShapes(t.shape,r),i=e.zeros(n,"int32"),l=e.util.sizeFromShape(s),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=h[e],r=0;for(let t=0;t<l;++t){const n=h[e+t];n>a&&(a=n,r=t)}d[t]=r}return i}cumsum(t,a,r,n){if(o(t,"cumsum"),a!==t.rank-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${t.rank-1} `+`but got axis=${a}`);const s=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,s),l=this.readSync(i.dataId),d=this.readSync(t.dataId),h=t.shape[t.rank-1],c=n?(t,e)=>t+h-e-1:(t,e)=>t+e;for(let t=0;t<d.length;t+=h)for(let e=0;e<h;e++){const a=c(t,e);if(0===e)l[a]=r?0:d[a];else{const n=c(t,e-1);l[a]=r?d[n]+l[n]:d[a]+l[n]}}return i}equal(t,e){return o([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t===e?1:0)}notEqual(t,e){return o([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t!==e?1:0)}less(t,e){return o([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t<e?1:0)}lessEqual(t,e){return o([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t<=e?1:0)}greater(t,e){return o([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t>e?1:0)}greaterEqual(t,e){return o([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t>=e?1:0)}logicalNot(t){o(t,"logicalNot");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)a[t]=e[t]?0:1;return this.makeOutput(a,t.shape,"bool")}logicalAnd(t,e){return o([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t&&e)}logicalOr(t,e){return o([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t||e)}select(t,a,r){o([t,a,r],"select");const n=this.readSync(t.dataId),s=this.readSync(a.dataId),i=this.readSync(r.dataId),l=e.zeros(a.shape,e.upcastType(a.dtype,r.dtype)),d=this.readSync(l.dataId);let h=0;const c=0===t.rank||t.rank>1||1===a.rank?1:e.util.sizeFromShape(a.shape.slice(1));for(let t=0;t<n.length;t++)for(let e=0;e<c;e++)1===n[t]?d[h++]=s[t]:d[h++]=i[t];return l}where(t){o([t],"where");const e=this.readSync(t.dataId);return p(t.shape,e)}topk(t,e,a){o(t,"topk");const r=this.readSync(t.dataId);return u(r,t.shape,t.dtype,e,a)}min(t,a){o(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];r<a&&(a=r)}l[t]=a}return s}minimum(t,e){return o([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.min(t,e))}mod(t,e){return o([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>{const a=t%e;return t<0&&e<0||t>=0&&e>=0?a:(a+e)%e})}maximum(t,e){return o([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.max(t,e))}all(t,a){o(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];a=a&&r}l[t]=a}return s}any(t,a){o(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];a=a||r}l[t]=a}return s}squaredDifference(t,e){return o([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>{const a=t-e;return a*a})}ceil(t){o(t,"ceil");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.ceil(e[t]);return this.makeOutput(a,t.shape,"float32")}floor(t){o(t,"floor");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.floor(e[t]);return this.makeOutput(a,t.shape,"float32")}sign(t){o(t,"x");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)e[t]<0?a[t]=-1:e[t]>0?a[t]=1:a[t]=0;return this.makeOutput(a,t.shape,"float32")}isNaN(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Number.isNaN(e[t])&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}isInf(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Math.abs(e[t])===1/0&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}isFinite(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Number.isFinite(e[t])&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}round(t){o(t,"round");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=Math.floor(e[t]);e[t]-r<.5?a[t]=Math.floor(e[t]):e[t]-r>.5?a[t]=Math.ceil(e[t]):a[t]=r%2==0?r:r+1}return this.makeOutput(a,t.shape,"float32")}exp(t){o(t,"exp");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.exp(e[t]);return this.makeOutput(a,t.shape,"float32")}expm1(t){o(t,"expm1");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.expm1(e[t]);return this.makeOutput(a,t.shape,"float32")}log(t){o(t,"log");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.log(r)}return this.makeOutput(a,t.shape,"float32")}log1p(t){o(t,"log1p");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.log1p(r)}return this.makeOutput(a,t.shape,"float32")}sqrt(t){o(t,"sqrt");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.sqrt(r)}return this.makeOutput(a,t.shape,"float32")}rsqrt(t){o(t,"rsqrt");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=1/Math.sqrt(r)}return this.makeOutput(a,t.shape,"float32")}reciprocal(t){o(t,"reciprocal");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=1/e[t];return this.makeOutput(a,t.shape,"float32")}linear(t){return t}relu(t){o(t,"relu");const a=e.zeros(t.shape,t.dtype),r=this.readSync(a.dataId),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t)r[t]=Math.max(0,n[t]);return a}relu6(t){o(t,"relu");const a=e.zeros(t.shape,t.dtype),r=this.readSync(a.dataId),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t)r[t]=Math.min(Math.max(0,n[t]),6);return a}prelu(t,e){return o([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>t<0?e*t:t)}elu(t){o(t,"elu");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t){const r=a[t];e[t]=r>=0?r:Math.exp(r)-1}return this.makeOutput(e,t.shape,"float32")}eluDer(t,e){o([t,e],"eluDer");const a=new Float32Array(e.size),r=this.readSync(e.dataId),n=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const e=r[t];a[t]=e>=1?n[t]:n[t]*(e+1)}return this.makeOutput(a,e.shape,"float32")}selu(t){o(t,"selu");const a=e.backend_util.SELU_SCALEALPHA,r=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),s=this.readSync(t.dataId);for(let t=0;t<s.length;++t){const e=s[t];n[t]=e>=0?r*e:a*(Math.exp(e)-1)}return this.makeOutput(n,t.shape,"float32")}clip(t,e,a){o(t,"clip");const r=new Float32Array(t.size),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t){const s=n[t];r[t]=s>a?a:s<e?e:s}return this.makeOutput(r,t.shape,"float32")}abs(t){const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.abs(a[t]);return this.makeOutput(e,t.shape,"float32")}complexAbs(t){const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let r=0;r<t.size;++r){const t=a[2*r],n=a[2*r+1];e[r]=Math.hypot(t,n)}return this.makeOutput(e,t.shape,"float32")}int(t){o(t,"int");const e=new Int32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=a[t];return this.makeOutput(e,t.shape,"int32")}sigmoid(t){o(t,"sigmoid");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=1/(1+Math.exp(-a[t]));return this.makeOutput(e,t.shape,"float32")}softplus(t){o(t,"softplus");const e=Math.log(1.1920928955078125e-7)+2,a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const n=r[t]>-e,s=r[t]<e,o=Math.exp(r[t]);let i;i=s?o:n?r[t]:Math.log(1+o),a[t]=i}return this.makeOutput(a,t.shape,"float32")}sin(t){o(t,"sin");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.sin(a[t]);return this.makeOutput(e,t.shape,"float32")}cos(t){o(t,"cos");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.cos(a[t]);return this.makeOutput(e,t.shape,"float32")}tan(t){o(t,"tan");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.tan(a[t]);return this.makeOutput(e,t.shape,"float32")}asin(t){o(t,"asin");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.asin(a[t]);return this.makeOutput(e,t.shape,"float32")}acos(t){o(t,"acos");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.acos(a[t]);return this.makeOutput(e,t.shape,"float32")}atan(t){o(t,"atan");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.atan(a[t]);return this.makeOutput(e,t.shape,"float32")}atan2(t,e){return o([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.atan2(t,e))}sinh(t){o(t,"sinh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.sinh(a[t]);return this.makeOutput(e,t.shape,"float32")}cosh(t){o(t,"cosh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.cosh(a[t]);return this.makeOutput(e,t.shape,"float32")}tanh(t){o(t,"tanh");const a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t)a[t]=e.util.tanh(r[t]);return this.makeOutput(a,t.shape,"float32")}asinh(t){o(t,"asinh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.asinh(a[t]);return this.makeOutput(e,t.shape,"float32")}acosh(t){o(t,"acosh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.acosh(a[t]);return this.makeOutput(e,t.shape,"float32")}atanh(t){o(t,"atanh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.atanh(a[t]);return this.makeOutput(e,t.shape,"float32")}erf(t){o(t,"erf");const a=new Float32Array(t.size),r=this.readSync(t.dataId),n=e.backend_util.ERF_P,s=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,l=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,h=e.backend_util.ERF_A5;for(let t=0;t<r.length;++t){const e=Math.sign(r[t]),o=Math.abs(r[t]),c=1/(1+n*o);a[t]=e*(1-((((h*c+d)*c+l)*c+i)*c+s)*c*Math.exp(-o*o))}return this.makeOutput(a,t.shape,"float32")}step(t,e=0){o(t,"step");const a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const n=r[t];isNaN(n)?a[t]=NaN:a[t]=n>0?1:e}return this.makeOutput(a,t.shape,"float32")}fusedConv2d({input:t,filter:e,convInfo:a,bias:r,activation:n,preluActivationWeights:s}){let o=this.conv2d(t,e,a);return r&&(o=this.add(o,r)),n&&(o=f(this,o,n,s)),o}conv2d(t,a,r){o([t,a],"conv2d");const n=r.filterHeight,s=r.filterWidth,i=r.dilationHeight,l=r.dilationWidth,d=r.padInfo.left,h=r.padInfo.top,c="channelsLast"===r.dataFormat,u=e.buffer(r.outShape,t.dtype),p=t.strides[0],f=c?t.strides[1]:t.strides[2],m=c?t.strides[2]:1,y=c?1:t.strides[1],g=u.strides[0],S=c?u.strides[1]:u.strides[2],I=c?u.strides[2]:1,b=c?1:u.strides[1],k=this.readSync(t.dataId),M=this.readSync(a.dataId),x=u.values;for(let t=0;t<r.batchSize;++t){const e=t*p,o=t*g;for(let t=0;t<r.outHeight;++t){const c=o+t*S,u=t*r.strideHeight-h;for(let t=0;t<n;t++){const n=u+t*i;if(n<0||n>=r.inHeight)continue;const o=t*a.strides[0],h=e+n*f;for(let t=0;t<r.outWidth;++t){const e=c+t*I,n=t*r.strideWidth-d;for(let t=0;t<s;t++){const s=n+t*l;if(s<0||s>=r.inWidth)continue;const i=h+s*m;let d=o+t*a.strides[1];for(let t=0;t<r.inChannels;++t){const a=k[i+t*y];for(let t=0;t<r.outChannels;++t)x[e+t*b]+=a*M[d+t];d+=r.outChannels}}}}}}return u.toTensor()}conv3d(t,a,r){const n=r.filterDepth,s=r.filterHeight,o=r.filterWidth,i=r.dilationDepth,l=r.dilationHeight,d=r.dilationWidth,h=r.padInfo.front,c=r.padInfo.left,u=r.padInfo.top,p=e.buffer(r.outShape,t.dtype),f=this.readSync(t.dataId),m=this.readSync(a.dataId),y=p.values;for(let e=0;e<r.batchSize;++e){const g=e*t.strides[0],S=e*p.strides[0];for(let e=0;e<r.outDepth;++e){const I=S+e*p.strides[1],b=e*r.strideDepth-h;for(let e=0;e<n;e++){const n=b+e*i;if(n<0||n>=r.inDepth)continue;const h=e*a.strides[0],S=g+n*t.strides[1];for(let e=0;e<r.outHeight;++e){const n=I+e*p.strides[2],i=e*r.strideHeight-u;for(let e=0;e<s;e++){const s=i+e*l;if(s<0||s>=r.inHeight)continue;const u=h+e*a.strides[1],p=S+s*t.strides[2];for(let t=0;t<r.outWidth;++t){const e=n+t*r.outChannels,s=t*r.strideWidth-c;for(let t=0;t<o;t++){const n=s+t*d;if(n<0||n>=r.inWidth)continue;const o=u+t*a.strides[2],i=p+n*r.inChannels;let l=o;for(let t=0;t<r.inChannels;++t){const a=f[i+t];for(let t=0;t<r.outChannels;++t)y[e+t]+=a*m[l+t];l+=r.outChannels}}}}}}}}return p.toTensor()}conv2dDerInput(t,a,r){o([t,a],"conv2dDerInput");const n=e.buffer(r.inShape,"float32"),s=n.values,i=this.readSync(t.dataId),l=this.readSync(a.dataId),[d,h,c]=a.strides,{batchSize:u,filterHeight:p,filterWidth:f,inChannels:m,inHeight:y,inWidth:g,outChannels:S,outHeight:I,outWidth:b,strideHeight:k,strideWidth:M,dataFormat:x}=r,A=p-1-r.padInfo.top,F=f-1-r.padInfo.left,v="channelsLast"===x,w=n.strides[0],T=v?n.strides[1]:n.strides[2],z=v?n.strides[2]:1,D=v?1:n.strides[1],W=t.strides[0],_=v?t.strides[1]:t.strides[2],O=v?t.strides[2]:1,H=v?1:t.strides[1];for(let t=0;t<u;++t)for(let e=0;e<m;++e)for(let a=0;a<y;++a){const r=a-A,n=Math.max(0,Math.ceil(r/k)),o=Math.min(I,(p+r)/k);for(let u=0;u<g;++u){const m=u-F,y=Math.max(0,Math.ceil(m/M)),g=Math.min(b,(f+m)/M);let I=0;for(let a=n;a<o;++a){const n=a*k-r;for(let r=y;r<g;++r){const s=W*t+_*a+O*r,o=d*(p-1-n)+h*(f-1-(r*M-m))+c*e;for(let t=0;t<S;++t){I+=i[s+H*t]*l[o+t]}}}s[w*t+T*a+z*u+D*e]=I}}return n.toTensor()}conv3dDerInput(t,a,r){const n=e.buffer(r.inShape,"float32"),s=n.values,[o,i,l,d]=n.strides,h=this.readSync(t.dataId),[c,u,p,f]=t.strides,m=this.readSync(a.dataId),[y,g,S,I]=a.strides,{batchSize:b,filterDepth:k,filterHeight:M,filterWidth:x,inChannels:A,inDepth:F,inHeight:v,inWidth:w,outChannels:T,outDepth:z,outHeight:D,outWidth:W,strideDepth:_,strideHeight:O,strideWidth:H}=r,N=k-1-r.padInfo.front,B=M-1-r.padInfo.top,C=x-1-r.padInfo.left;for(let t=0;t<b;++t)for(let e=0;e<A;++e)for(let a=0;a<F;++a){const r=a-N,n=Math.max(0,Math.ceil(r/_)),b=Math.min(z,(k+r)/_);for(let A=0;A<v;++A){const F=A-B,v=Math.max(0,Math.ceil(F/O)),z=Math.min(D,(M+F)/O);for(let D=0;D<w;++D){const w=D-C,N=Math.max(0,Math.ceil(w/H)),B=Math.min(W,(x+w)/H);let E=0;for(let a=n;a<b;++a){const n=a*_-r;for(let r=v;r<z;++r){const s=r*O-F;for(let o=N;o<B;++o){const i=c*t+u*a+p*r+f*o,l=y*(k-1-n)+g*(M-1-s)+S*(x-1-(o*H-w))+I*e;for(let t=0;t<T;++t){E+=h[i+t]*m[l+t]}}}}s[o*t+i*a+l*A+d*D+e]=E}}}return n.toTensor()}conv2dDerFilter(t,a,r){o([t,a],"conv2dDerFilter");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d="channelsLast"===r.dataFormat,h=e.buffer(r.filterShape,"float32"),c=r.padInfo.left,u=r.padInfo.top,p=this.bufferSync(t),f=this.bufferSync(a);for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((u-t)/n)),a=Math.min(r.outHeight,(r.inHeight+u-t)/n);for(let o=0;o<l;++o){const i=Math.max(0,Math.ceil((c-o)/s)),l=Math.min(r.outWidth,(r.inWidth+c-o)/s);for(let m=0;m<r.inChannels;++m)for(let y=0;y<r.outChannels;++y){let g=0;for(let h=0;h<r.batchSize;++h)for(let r=e;r<a;++r){const e=t+r*n-u;for(let t=i;t<l;++t){const a=o+t*s-c;g+=d?p.get(h,e,a,m)*f.get(h,r,t,y):p.get(h,m,e,a)*f.get(h,y,r,t)}}h.set(g,t,o,m,y)}}}return h.toTensor()}conv3dDerFilter(t,a,r){const n=r.strideDepth,s=r.strideHeight,o=r.strideWidth,i=r.filterDepth,l=r.filterHeight,d=r.filterWidth,h=e.buffer(r.filterShape,"float32"),c=h.values,[u,p,f,m]=h.strides,y=this.readSync(a.dataId),[g,S,I,b]=a.strides,k=this.readSync(t.dataId),[M,x,A,F]=t.strides,v=r.padInfo.front,w=r.padInfo.left,T=r.padInfo.top;for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((v-t)/n)),a=Math.min(r.outDepth,(r.inDepth+v-t)/n),i=t*u;for(let h=0;h<l;++h){const l=Math.max(0,Math.ceil((T-h)/s)),u=Math.min(r.outHeight,(r.inHeight+T-h)/s),z=h*p+i;for(let i=0;i<d;++i){const d=Math.max(0,Math.ceil((w-i)/o)),p=Math.min(r.outWidth,(r.inWidth+w-i)/o),D=i*f+z;for(let f=0;f<r.inChannels;++f){const z=f*m+D;for(let m=0;m<r.outChannels;++m){let D=0;for(let c=0;c<r.batchSize;++c){const r=c*M,z=c*g;for(let c=e;c<a;++c){const e=(t+c*n-v)*x+r,a=c*S+z;for(let t=l;t<u;++t){const r=(h+t*s-T)*A+e,n=t*I+a;for(let t=d;t<p;++t){const e=t*b+n;D+=k[(i+t*o-w)*F+r+f]*y[e+m]}}}}c[z+m]=D}}}}}return h.toTensor()}fusedDepthwiseConv2D({input:t,filter:e,convInfo:a,bias:r,activation:n,preluActivationWeights:s}){let o=this.depthwiseConv2D(t,e,a);return r&&(o=this.add(o,r)),n&&(o=f(this,o,n,s)),o}depthwiseConv2D(t,a,r){o([t,a],"depthwiseConv2D");const n=r.filterHeight,s=r.filterWidth,i=r.dilationHeight,l=r.dilationWidth,d=r.padInfo.left,h=r.padInfo.top,c=r.outChannels/r.inChannels,u=e.buffer(r.outShape,t.dtype),p=this.readSync(t.dataId),f=this.readSync(a.dataId),m=u.values;for(let e=0;e<r.batchSize;++e){const o=e*t.strides[0],y=e*u.strides[0];for(let e=0;e<r.outHeight;++e){const g=y+e*u.strides[1],S=e*r.strideHeight-d;for(let e=0;e<n;++e){const n=S+e*i;if(n<0||n>=r.inHeight)continue;const d=e*a.strides[0],y=o+n*t.strides[1];for(let t=0;t<r.outWidth;++t){const e=g+t*u.strides[2],n=t*r.strideWidth-h;for(let t=0;t<s;++t){const s=n+t*l;if(s<0||s>=r.inWidth)continue;const o=d+t*a.strides[1],i=y+s*r.inChannels;let h=e,u=o;for(let t=0;t<r.inChannels;++t){const e=p[i+t];for(let t=0;t<c;++t)m[h+t]+=e*f[u+t];h+=c,u+=c}}}}}}return u.toTensor()}depthwiseConv2DDerInput(t,a,r){o([t,a],"depthwiseConv2DDerInput");const n=e.buffer(r.inShape,"float32"),s=n.values,[i,l,d]=n.strides,h=this.readSync(t.dataId),[c,u,p]=t.strides,f=this.readSync(a.dataId),[m,y,g]=a.strides,{batchSize:S,filterHeight:I,filterWidth:b,inChannels:k,inHeight:M,inWidth:x,outChannels:A,outHeight:F,outWidth:v,strideHeight:w,strideWidth:T}=r,z=I-1-r.padInfo.top,D=b-1-r.padInfo.left,W=A/k;for(let t=0;t<S;++t)for(let e=0;e<k;++e)for(let a=0;a<M;++a){const r=a-z,n=Math.max(0,Math.ceil(r/w)),o=Math.min(F,(I+r)/w);for(let S=0;S<x;++S){const k=S-D,M=Math.max(0,Math.ceil(k/T)),x=Math.min(v,(b+k)/T);let A=0;for(let a=n;a<o;++a){const n=a*w-r;for(let r=M;r<x;++r){const s=c*t+u*a+p*r,o=m*(I-1-n)+y*(b-1-(r*T-k))+g*e;for(let t=0;t<W;++t){A+=h[s+(e*W+t)]*f[o+t]}}}s[i*t+l*a+d*S+e]=A}}return n.toTensor()}depthwiseConv2DDerFilter(t,a,r){o([t,a],"depthwiseConv2DDerFilter");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d=e.buffer(r.filterShape,"float32"),h=r.padInfo.left,c=r.padInfo.top,u=r.outChannels/r.inChannels,p=this.bufferSync(t),f=this.bufferSync(a);for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((c-t)/n)),a=Math.min(r.outHeight,(r.inHeight+c-t)/n);for(let o=0;o<l;++o){const i=Math.max(0,Math.ceil((h-o)/s)),l=Math.min(r.outWidth,(r.inWidth+h-o)/s);for(let m=0;m<r.outChannels;++m){const y=Math.trunc(m/u),g=m%u;let S=0;for(let d=0;d<r.batchSize;++d)for(let r=e;r<a;++r){const e=t+r*n-c;for(let t=i;t<l;++t){const a=o+t*s-h;S+=p.get(d,e,a,y)*f.get(d,r,t,m)}}d.set(S,t,o,y,g)}}}return d.toTensor()}tile(t,e){return o(t,"tile"),c(this.bufferSync(t),e)}pad(t,a,r){o(t,"pad");const n=a.map((e,a)=>e[0]+t.shape[a]+e[1]),s=a.map(t=>t[0]),i=this.bufferSync(t),l=e.buffer(n,t.dtype);0!==r&&l.values.fill(r);for(let e=0;e<t.size;e++){const t=i.indexToLoc(e),a=t.map((t,e)=>t+s[e]);l.set(i.get(...t),...a)}return l.toTensor()}gather(t,a,r){o([t,a],"gather");const n=t.shape.slice(),s=this.readSync(a.dataId);n[r]=s.length;const i=e.buffer(n,t.dtype),l=this.bufferSync(t);for(let t=0;t<i.size;++t){const e=i.indexToLoc(t),a=e.slice();a[r]=s[e[r]];const n=l.locToIndex(a);i.values[t]=l.values[n]}return i.toTensor()}batchToSpaceND(t,a,r){o([t],"batchToSpaceND");const n=a.reduce((t,e)=>t*e),s=e.backend_util.getReshaped(t.shape,a,n),i=e.backend_util.getPermuted(s.length,a.length),l=e.backend_util.getReshapedPermuted(t.shape,a,n),d=e.backend_util.getSliceBeginCoords(r,a.length),h=e.backend_util.getSliceSize(l,r,a.length);return e.transpose(t.reshape(s),i).reshape(l).slice(d,h)}spaceToBatchND(t,a,r){o([t],"spaceToBatchND");const n=a.reduce((t,e)=>t*e),s=[[0,0]];s.push(...r);for(let e=1+a.length;e<t.shape.length;++e)s.push([0,0]);const i=t.pad(s),l=e.backend_util.getReshaped(i.shape,a,n,!1),d=e.backend_util.getPermuted(l.length,a.length,!1),h=e.backend_util.getReshapedPermuted(i.shape,a,n,!1);return e.transpose(i.reshape(l),d).reshape(h)}maxPool(t,e){return o(t,"maxPool"),i(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()}maxPoolBackprop(t,a,r,n){o([a,r],"maxPoolBackprop");const s=this.readSync(a.dataId),i=e.buffer(n.outShape,a.dtype,l(s,a.shape,a.dtype,n).values),d=n.strideHeight,h=n.strideWidth,c=n.dilationHeight,u=n.dilationWidth,p=n.effectiveFilterHeight,f=n.effectiveFilterWidth,m=f-1-n.padInfo.left,y=p-1-n.padInfo.top,g=e.buffer(a.shape,"float32"),S=this.bufferSync(t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.inHeight;++a)for(let r=0;r<n.inWidth;++r){const s=a-y,o=r-m;let l=0;for(let a=0;a<p;a+=c){const r=(s+a)/d;if(!(r<0||r>=n.outHeight||Math.floor(r)!==r))for(let s=0;s<f;s+=u){const d=(o+s)/h;if(d<0||d>=n.outWidth||Math.floor(d)!==d)continue;const c=p*f-1-i.get(t,r,d,e)===a*f+s?1:0;0!==c&&(l+=S.get(t,r,d,e)*c)}}g.set(l,t,a,r,e)}return g.toTensor()}avgPoolBackprop(t,a,r){o([t,a],"avgPoolBackprop");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d=r.dilationHeight,h=r.dilationWidth,c=r.effectiveFilterHeight,u=r.effectiveFilterWidth,p=u-1-r.padInfo.left,f=c-1-r.padInfo.top,m=e.buffer(a.shape,"float32"),y=1/(i*l),g=this.bufferSync(t);for(let t=0;t<r.batchSize;++t)for(let e=0;e<r.inChannels;++e)for(let a=0;a<r.inHeight;++a)for(let o=0;o<r.inWidth;++o){const i=a-f,l=o-p;let S=0;for(let a=0;a<c;a+=d){const o=(i+a)/n;if(!(o<0||o>=r.outHeight||Math.floor(o)!==o))for(let a=0;a<u;a+=h){const n=(l+a)/s;n<0||n>=r.outWidth||Math.floor(n)!==n||(S+=g.get(t,o,n,e))}}m.set(S*y,t,a,o,e)}return m.toTensor()}pool3d(t,a,r){o(t,"pool3d");const n=a.strideDepth,s=a.strideHeight,i=a.strideWidth,l=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,c=a.effectiveFilterDepth,u=a.effectiveFilterHeight,p=a.effectiveFilterWidth,f=a.padInfo.front,m=a.padInfo.top,y=a.padInfo.left,g="max"===r?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,S=this.readSync(t.dataId),I=e.buffer(a.outShape,t.dtype),b=I.values,k=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],M=a.outShape[2]*a.outShape[3]*a.outShape[4],x=a.outShape[3]*a.outShape[4],A=a.outShape[4];for(let e=0;e<a.batchSize;++e){const o=e*k,I=e*t.strides[0];for(let e=0;e<a.inChannels;++e)for(let k=0;k<a.outDepth;++k){const F=k*n-f;let v=F;for(;v<0;)v+=l;const w=Math.min(a.inDepth,c+F),T=o+k*M;for(let n=0;n<a.outHeight;++n){const o=n*s-m;let c=o;for(;c<0;)c+=d;const f=Math.min(a.inHeight,u+o),k=T+n*x;for(let n=0;n<a.outWidth;++n){const s=n*i-y;let o=s;for(;o<0;)o+=h;const u=Math.min(a.inWidth,p+s),m=k+n*A;let M=g,x=0,F=0;for(let a=v;a<w;a+=l){const n=I+a*t.strides[1];for(let a=c;a<f;a+=d){const s=n+a*t.strides[2];for(let a=o;a<u;a+=h){const n=S[s+a*t.strides[3]+e];if("max"===r&&n>M?M=n:"avg"===r&&(x+=n,F++),isNaN(M))break}if(isNaN(M))break}if(isNaN(M))break}b[m+e]="avg"===r?x/F:M}}}}return I.toTensor()}avgPool3d(t,e){return o(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()}avgPool3dBackprop(t,a,r){o([t,a],"avgPool3dBackprop");const n=r.strideDepth,s=r.strideHeight,i=r.strideWidth,l=r.filterDepth,d=r.filterHeight,h=r.filterWidth,c=r.dilationDepth,u=r.dilationHeight,p=r.dilationWidth,f=r.effectiveFilterDepth,m=r.effectiveFilterHeight,y=r.effectiveFilterWidth,g=f-1-r.padInfo.front,S=y-1-r.padInfo.left,I=m-1-r.padInfo.top,b=e.buffer(a.shape,"float32"),k=1/(l*d*h),M=this.bufferSync(t);for(let t=0;t<r.batchSize;++t)for(let e=0;e<r.inChannels;++e)for(let a=0;a<r.inDepth;++a)for(let o=0;o<r.inHeight;++o)for(let l=0;l<r.inWidth;++l){const d=a-g,h=o-I,x=l-S;let A=0;for(let a=0;a<f;a+=c){const o=(d+a)/n;if(!(o<0||o>=r.outDepth||Math.floor(o)!==o))for(let a=0;a<m;a+=u){const n=(h+a)/s;if(!(n<0||n>=r.outHeight||Math.floor(n)!==n))for(let a=0;a<y;a+=p){const s=(x+a)/i;s<0||s>=r.outWidth||Math.floor(s)!==s||(A+=M.get(t,o,n,s,e))}}}b.set(A*k,t,a,o,l,e)}return b.toTensor()}maxPool3d(t,e){return o(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()}maxPool3dPositions(t,a){const r=e.buffer(a.outShape,"int32"),n=a.strideDepth,s=a.strideHeight,o=a.strideWidth,i=a.dilationDepth,l=a.dilationHeight,d=a.dilationWidth,h=a.effectiveFilterDepth,c=a.effectiveFilterHeight,u=a.effectiveFilterWidth,p=a.padInfo.front,f=a.padInfo.top,m=a.padInfo.left,y=this.bufferSync(t);for(let t=0;t<a.batchSize;++t)for(let e=0;e<a.inChannels;++e)for(let g=0;g<a.outDepth;++g){const S=g*n-p;let I=S;for(;I<0;)I+=i;const b=Math.min(a.inDepth,h+S);for(let n=0;n<a.outHeight;++n){const h=n*s-f;let p=h;for(;p<0;)p+=l;const k=Math.min(a.inHeight,c+h);for(let s=0;s<a.outWidth;++s){const f=s*o-m;let M=f;for(;M<0;)M+=d;const x=Math.min(a.inWidth,u+f);let A=Number.NEGATIVE_INFINITY,F=-1;for(let a=I;a<b;a+=i){const r=a-S;for(let n=p;n<k;n+=l){const s=n-h;for(let o=M;o<x;o+=d){const i=o-f,l=y.get(t,a,n,o,e);l>=A&&(A=l,F=r*c*u+s*c+i)}}}r.set(F,t,g,n,s,e)}}}return r.toTensor()}maxPool3dBackprop(t,a,r,n){o([a,r],"maxPool3dBackprop");const s=this.maxPool3dPositions(a,n),i=n.strideDepth,l=n.strideHeight,d=n.strideWidth,h=n.dilationDepth,c=n.dilationHeight,u=n.dilationWidth,p=n.effectiveFilterDepth,f=n.effectiveFilterHeight,m=n.effectiveFilterWidth,y=p-1-n.padInfo.front,g=m-1-n.padInfo.left,S=f-1-n.padInfo.top,I=e.buffer(a.shape,"float32"),b=this.bufferSync(s),k=this.bufferSync(t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.inDepth;++a)for(let r=0;r<n.inHeight;++r)for(let s=0;s<n.inWidth;++s){const o=a-y,M=r-S,x=s-g;let A=0;for(let a=0;a<p;a+=h){const r=(o+a)/i;if(!(r<0||r>=n.outDepth||Math.floor(r)!==r))for(let s=0;s<f;s+=c){const o=(M+s)/l;if(!(o<0||o>=n.outHeight||Math.floor(o)!==o))for(let i=0;i<m;i+=u){const l=(x+i)/d;if(l<0||l>=n.outWidth||Math.floor(l)!==l)continue;const h=p*f*m-1-b.get(t,r,o,l,e)===a*f*m+s*m+i?1:0;0!==h&&(A+=k.get(t,r,o,l,e)*h)}}}I.set(A,t,a,r,s,e)}return I.toTensor()}cast(t,a){return e.backend_util.castTensor(t,a,this)}reshape(t,a){return e.backend_util.reshapeTensor(t,a)}avgPool(t,e){return o(t,"avgPool"),o(t,"maxPool"),i(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()}resizeBilinear(t,a,r,n){o(t,"resizeBilinear");const[s,i,l,d]=t.shape,h=this.readSync(t.dataId),c=new Float32Array(e.util.sizeFromShape([s,a,r,d])),u=[n&&a>1?i-1:i,n&&r>1?l-1:l],p=[n&&a>1?a-1:a,n&&r>1?r-1:r];let f=0;const m=u[0]/p[0],y=u[1]/p[1];for(let e=0;e<s;e++)for(let n=0;n<a;n++){const a=m*n,s=Math.floor(a),o=a-s,u=Math.min(i-1,Math.ceil(a)),p=e*t.strides[0]+s*t.strides[1],g=e*t.strides[0]+u*t.strides[1];for(let e=0;e<r;e++){const a=y*e,r=Math.floor(a),n=a-r,s=Math.min(l-1,Math.ceil(a)),i=p+r*t.strides[2],u=g+r*t.strides[2],m=p+s*t.strides[2],S=g+s*t.strides[2];for(let t=0;t<d;t++){const e=h[i+t],a=h[u+t],r=e+(h[m+t]-e)*n,s=r+(a+(h[S+t]-a)*n-r)*o;c[f++]=s}}}return e.tensor(c,[s,a,r,d])}resizeBilinearBackprop(t,a,r){o([t,a],"resizeBilinearBackprop");const[n,s,i,l]=a.shape,[,d,h]=t.shape,c=new Float32Array(n*s*i*l),u=[r&&d>1?s-1:s,r&&h>1?i-1:i],p=[r&&d>1?d-1:d,r&&h>1?h-1:h],f=u[0]/p[0],m=u[1]/p[1],y=this.readSync(t.dataId);let g=0;for(let t=0;t<n;t++){const e=t*a.strides[0];for(let t=0;t<d;t++){const r=t*f,n=Math.floor(r),o=Math.min(Math.ceil(r),s-1),d=e+n*a.strides[1],u=e+o*a.strides[1],p=r-n,S=1-p;for(let t=0;t<h;t++){const e=t*m,r=Math.floor(e),n=Math.min(Math.ceil(e),i-1),s=e-r,o=1-s,h=d+r*a.strides[2],f=d+n*a.strides[2],I=u+r*a.strides[2],b=u+n*a.strides[2],k=S*o,M=S*s,x=p*o,A=p*s;for(let t=0;t<l;t++){const e=y[g++];c[h+t]+=e*k,c[f+t]+=e*M,c[I+t]+=e*x,c[b+t]+=e*A}}}}return e.tensor4d(c,[n,i,s,l],a.dtype)}resizeNearestNeighbor(t,a,r,n){o(t,"resizeNearestNeighbor");const[s,i,l,d]=t.shape,h=this.readSync(t.dataId),c=new Float32Array(s*a*r*d),u=[n&&a>1?i-1:i,n&&r>1?l-1:l],p=[n&&a>1?a-1:a,n&&r>1?r-1:r],f=u[0]/p[0],m=u[1]/p[1];let y=0;for(let e=0;e<s;e++){const s=e*t.strides[0];for(let e=0;e<a;e++){const a=f*e,o=s+Math.min(i-1,n?Math.round(a):Math.floor(a))*t.strides[1];for(let e=0;e<r;e++){const a=m*e,r=o+Math.min(l-1,n?Math.round(a):Math.floor(a))*t.strides[2];for(let t=0;t<d;t++){const e=h[r+t];c[y++]=e}}}}return e.tensor(c,[s,a,r,d],t.dtype)}resizeNearestNeighborBackprop(t,a,r){o([t,a],"resizeNearestNeighborBackprop");const[n,s,i,l]=a.shape,[,d,h]=t.shape,c=new Float32Array(n*s*i*l),u=this.readSync(t.dataId),p=[r&&d>1?s-1:s,r&&h>1?i-1:i],f=[r&&d>1?d-1:d,r&&h>1?h-1:h],m=p[0]/f[0],y=p[1]/f[1],g=1/m,S=1/y,I=2*Math.ceil(g)+2,b=2*Math.ceil(S)+2;for(let e=0;e<n;e++){const n=e*a.strides[0];for(let e=0;e<s;e++){const o=n+e*a.strides[1],p=Math.floor(e*g),f=Math.floor(p-I/2);for(let p=0;p<i;p++){const g=o+p*a.strides[2],k=Math.floor(p*S),M=Math.floor(k-b/2);for(let a=0;a<l;a++){let o=0;for(let l=0;l<I;l++){const c=l+f;if(c<0||c>=d)continue;const g=n+c*t.strides[1],S=c*m;if(e===Math.min(s-1,r?Math.round(S):Math.floor(S)))for(let e=0;e<b;e++){const n=e+M;if(n<0||n>=h)continue;const s=g+n*t.strides[2],l=n*y;p===Math.min(i-1,r?Math.round(l):Math.floor(l))&&(o+=u[s+a])}}c[g+a]=o}}}}return e.tensor4d(c,a.shape,a.dtype)}batchNorm(t,a,r,n,s,i){o([t,a,r,s,n],"batchNorm");const l=this.readSync(t.dataId),d=this.readSync(a.dataId),h=this.readSync(r.dataId),c=s?this.readSync(s.dataId):new Float32Array([1]),u=n?this.readSync(n.dataId):new Float32Array([0]),p=new Float32Array(l.length),f=u.length,m=c.length,y=h.length,g=d.length;let S=0,I=0,b=0,k=0;for(let t=0;t<l.length;++t)p[t]=u[S++]+(l[t]-d[I++])*c[b++]/Math.sqrt(h[k++]+i),S>=f&&(S=0),I>=g&&(I=0),b>=m&&(b=0),k>=y&&(k=0);return e.tensor4d(p,t.shape)}localResponseNormalization4D(t,a,r,n,s){o(t,"localResponseNormalization4D");const i=t.shape[3],l=i-1,d=this.readSync(t.dataId),h=t.size,c=new Float32Array(h);function u(t){const e=t%i;let r=t-e+Math.max(0,e-a);const n=t-e+Math.min(e+a,l);let s=0;for(;r<=n;r++){const t=d[r];s+=t*t}return s}for(let t=0;t<h;t++){const e=u(t),a=d[t]*Math.pow(r+n*e,-s);c[t]=a}return e.tensor4d(c,t.shape)}LRNGrad(t,a,r,n,s,i,l){o(t,"LRNGrad");const d=t.shape[3],h=this.readSync(t.dataId),c=this.readSync(a.dataId),u=this.readSync(r.dataId),p=new Float32Array(t.size),f=t.size;for(let t=0;t<f;t++){const e=t%d,a=t-e+Math.max(0,e-n),r=t-e+Math.min(d,e+n+1);let o=0;for(let t=a;t<r;t++)o+=Math.pow(c[t],2);o=i*o+s;for(let e=a;e<r;e++){let a=-2*i*l*c[e]*u[t]/o;t===e&&(a+=Math.pow(o,-l)),a*=h[t],p[e]+=a}}return e.tensor4d(p,t.shape)}multinomial(t,r,n,s){o(t,"multinomial");const i=r?t:e.softmax(t),l=i.shape[0],d=i.shape[1],h=e.zeros([l,n],"int32"),c=this.readSync(h.dataId),u=this.readSync(i.dataId);for(let t=0;t<l;++t){const e=t*d,r=new Float32Array(d-1);r[0]=u[e];for(let t=1;t<r.length;++t)r[t]=r[t-1]+u[e+t];const o=a.alea(s.toString()),i=t*n;for(let t=0;t<n;++t){const e=o();c[i+t]=r.length;for(let a=0;a<r.length;a++)if(e<r[a]){c[i+t]=a;break}}}return h}oneHot(t,a,r,n){o(t,"oneHot");const s=new Float32Array(t.size*a);s.fill(n);const i=this.readSync(t.dataId);for(let e=0;e<t.size;++e)i[e]>=0&&i[e]<a&&(s[e*a+i[e]]=r);return e.tensor2d(s,[t.size,a],"int32")}nonMaxSuppression(t,e,a,r,n){o(t,"nonMaxSuppression");const s=this.readSync(t.dataId),i=this.readSync(e.dataId);return d(s,i,a,r,n)}fft(t){return this.fftBatch(t,!1)}ifft(t){return this.fftBatch(t,!0)}fftBatch(t,a){const r=t.shape[0],n=t.shape[1],s=e.buffer(t.shape,"float32"),o=e.buffer(t.shape,"float32"),i=e.real(t).as2D(r,n),l=e.imag(t).as2D(r,n);for(let t=0;t<r;t++){const r=i.slice([t,0],[1,n]),d=l.slice([t,0],[1,n]),h=e.complex(r,d),c=this.readSync(this.fftImpl(h,a).dataId);for(let a=0;a<n;a++){const r=e.backend_util.getComplexWithIndex(c,a);s.values[t*n+a]=r.real,o.values[t*n+a]=r.imag}}return e.complex(s.toTensor(),o.toTensor()).as2D(r,n)}fftImpl(t,a){const r=t.as1D(),n=r.size;if(this.isExponentOf2(n)){let s=this.fftRadix2(r,n,a).as2D(t.shape[0],t.shape[1]);return a&&(s=e.complex(e.real(s).div(e.scalar(n)),e.imag(s).div(e.scalar(n)))),s}{const r=this.readSync(t.dataId),s=this.fourierTransformByMatmul(r,n,a),o=e.backend_util.splitRealAndImagArrays(s);return e.complex(o.real,o.imag).as2D(t.shape[0],t.shape[1])}}isExponentOf2(t){return 0==(t&t-1)}fftRadix2(t,a,r){if(1===a)return t;const n=this.readSync(t.dataId),s=a/2,o=e.backend_util.complexWithEvenIndex(n);let i=e.complex(o.real,o.imag).as1D();const l=e.backend_util.complexWithOddIndex(n);let d=e.complex(l.real,l.imag).as1D();i=this.fftRadix2(i,s,r),d=this.fftRadix2(d,s,r);const h=e.backend_util.exponents(a,r),c=e.complex(h.real,h.imag).mul(d),u=i.add(c),p=i.sub(c),f=e.real(u).concat(e.real(p)),m=e.imag(u).concat(e.imag(p));return e.complex(f,m).as1D()}fourierTransformByMatmul(t,a,r){const n=new Float32Array(2*a);for(let s=0;s<a;s++){let o=0,i=0;for(let n=0;n<a;n++){const l=e.backend_util.exponent(s*n,a,r),d=e.backend_util.getComplexWithIndex(t,n);o+=d.real*l.real-d.imag*l.imag,i+=d.real*l.imag+d.imag*l.real}r&&(o/=a,i/=a),e.backend_util.assignToTypedArray(n,o,i,s)}return n}depthToSpace(t,a,r){e.util.assert("NHWC"===r,()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${r}`),e.util.assert(a>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${a}`);const n=t.shape[0],s=t.shape[1],o=t.shape[2],i=t.shape[3],l=s*a,d=o*a,h=i/(a*a),c=this.readSync(t.dataId),u=new Float32Array(n*l*d*h);let p=0;for(let t=0;t<n;++t)for(let e=0;e<l;++e){const r=Math.floor(e/a),n=e%a;for(let e=0;e<d;++e){const l=Math.floor(e/a),d=(n*a+e%a)*h;for(let e=0;e<h;++e){const a=e+d+i*(l+o*(r+s*t));u[p++]=c[a]}}}return e.tensor4d(u,[n,l,d,h])}broadcastedBinaryOp(t,a,r,n){const s=e.backend_util.assertAndGetBroadcastShape(t.shape,a.shape),o=e.buffer(s,r),i=this.readSync(t.dataId),l=this.readSync(a.dataId),d=e.backend_util.getBroadcastDims(t.shape,s),h=e.backend_util.getBroadcastDims(a.shape,s),c=o.values;if(d.length+h.length===0)for(let t=0;t<c.length;++t)c[t]=n(i[t%i.length],l[t%l.length]);else{const e=this.bufferSync(t),r=this.bufferSync(a);for(let s=0;s<c.length;++s){const u=o.indexToLoc(s),p=u.slice(-t.rank);d.forEach(t=>p[t]=0);const f=e.locToIndex(p),m=u.slice(-a.rank);h.forEach(t=>m[t]=0);const y=r.locToIndex(m);c[s]=n(i[f],l[y])}}return o.toTensor()}broadcastedBinaryComplexOp(t,a,r){const n=e.backend_util.assertAndGetBroadcastShape(t.shape,a.shape),s=e.buffer(n,"float32"),o=e.buffer(n,"float32"),i=this.readSync(t.dataId),l=this.readSync(a.dataId),d=e.backend_util.getBroadcastDims(t.shape,n),h=e.backend_util.getBroadcastDims(a.shape,n),c=s.values,u=o.values;if(d.length+h.length===0)for(let t=0;t<c.length;t++){const e=t%i.length,a=t%l.length,n=r(i[2*e],i[2*e+1],l[2*a],l[2*a+1]);c[t]=n.real,u[t]=n.imag}else{const e=this.bufferSync(this.data.get(t.dataId).complexTensors.real),n=this.bufferSync(this.data.get(a.dataId).complexTensors.real);for(let o=0;o<c.length;o++){const p=s.indexToLoc(o),f=p.slice(-t.rank);d.forEach(t=>f[t]=0);const m=e.locToIndex(f),y=p.slice(-a.rank);h.forEach(t=>y[t]=0);const g=n.locToIndex(y),S=r(i[2*m],i[2*m+1],l[2*g],l[2*g+1]);c[o]=S.real,u[o]=S.imag}}return this.complex(s.toTensor(),o.toTensor())}split(t,e,a){return h(t,e,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}cropAndResize(t,a,r,n,s,o){const[i,l,d,h]=t.shape,c=a.shape[0],[u,p]=n,f=e.buffer([c,u,p,h],"float32"),m=this.readSync(a.dataId),y=this.readSync(r.dataId),g=this.readSync(t.dataId),S=t.strides,I=f.strides;for(let t=0;t<c;t++){const e=4*t,a=m[e],r=m[e+1],n=m[e+2],c=m[e+3],b=y[t];if(b>=i)continue;const k=u>1?(n-a)*(l-1)/(u-1):0,M=p>1?(c-r)*(d-1)/(p-1):0;for(let e=0;e<u;e++){const i=u>1?a*(l-1)+e*k:.5*(a+n)*(l-1);if(i<0||i>l-1)for(let a=0;a<p;a++)for(let r=0;r<h;r++){const n=r+a*I[2]+e*I[1]+t*I[0];f.values[n]=o}else if("bilinear"===s){const a=Math.floor(i),n=Math.ceil(i),s=i-a;for(let i=0;i<p;i++){const l=p>1?r*(d-1)+i*M:.5*(r+c)*(d-1);if(l<0||l>d-1){for(let a=0;a<h;a++){const r=a+i*I[2]+e*I[1]+t*I[0];f.values[r]=o}continue}const u=Math.floor(l),m=Math.ceil(l),y=l-u;for(let r=0;r<h;r++){let o=r+u*S[2]+a*S[1]+b*S[0];const l=g[o];o=r+m*S[2]+a*S[1]+b*S[0];const d=g[o];o=r+u*S[2]+n*S[1]+b*S[0];const h=g[o];o=r+m*S[2]+n*S[1]+b*S[0];const c=l+(d-l)*y,p=h+(g[o]-h)*y;o=r+i*I[2]+e*I[1]+t*I[0],f.values[o]=c+(p-c)*s}}}else for(let a=0;a<p;++a){const n=p>1?r*(d-1)+a*M:.5*(r+c)*(d-1);if(n<0||n>d-1){for(let r=0;r<h;r++){const n=r+a*I[2]+e*I[1]+t*I[0];f.values[n]=o}continue}const s=Math.round(n),l=Math.round(i);for(let r=0;r<h;r++){const n=r+s*S[2]+l*S[1]+b*S[0],o=r+a*I[2]+e*I[1]+t*I[0];f.values[o]=g[n]}}}}return f.toTensor()}sparseToDense(t,a,r,n){const{sliceRank:s,numUpdates:o,sliceSize:i,strides:l,outputSize:d}=e.backend_util.calculateShapes(a,t,r);return this.scatter(t,a,r,d,i,o,s,l,n,!1)}gatherND(t,a){const r=a.shape,n=r[r.length-1],[s,o,i,l]=e.backend_util.prepareAndValidate(t,a);if(0===o)return e.tensor([],s,t.dtype);const d=new e.TensorBuffer([o,i],t.dtype),h=this.readSync(a.dataId),c=this.readSync(t.dataId);for(let e=0;e<o;e++){const a=[];let r=0;for(let t=0;t<n;t++){const s=h[e*n+t];r+=s*l[t],a.push(s)}if(r<0||r>=t.size/i)throw new Error(`Invalid indices: ${a} does not index into ${t.shape}`);for(let t=0;t<i;t++)d.values[e*i+t]=c[r*i+t]}return d.toTensor().reshape(s)}scatterND(t,a,r){const{sliceRank:n,numUpdates:s,sliceSize:o,strides:i,outputSize:l}=e.backend_util.calculateShapes(a,t,r),d=e.scalar(0);return this.scatter(t,a,r,l,o,s,n,i,d,!0)}fill(t,a,r){r=r||e.util.inferDtype(a);const n=e.util.getArrayFromDType(r,e.util.sizeFromShape(t));return n.fill(a),e.engine().makeTensor(n,t,r,this)}onesLike(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)}zerosLike(t){const a=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(a,t.shape,t.dtype)}linspace(t,a,r){return e.backend_util.linspaceImpl(t,a,r)}scatter(t,a,r,n,s,o,i,l,d,h){const c=[n/s,s],u=this.readSync(t.dataId),p=this.readSync(a.dataId);if(0===n)return e.tensor([],r,a.dtype);const f=new e.TensorBuffer(c,a.dtype);f.values.fill(this.readSync(d.dataId)[0]);for(let t=0;t<o;t++){const e=[];let o=0;for(let a=0;a<i;a++){const r=u[t*i+a];e.push(r),o+=r*l[a]}if(o<0||o>=n/s)throw new Error(`Invalid indices: ${e} does not index into ${r}`);for(let e=0;e<s;e++)h?f.values[o*s+e]+=p[t*s+e]:f.values[o*s+e]=0===a.rank?p[0]:p[t*s+e]}return f.toTensor().reshape(r)}}function y(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:({inputs:a,backend:r})=>{const{a:n,b:s}=a,i=r;o([n,s],t);const l=i.data.get(n.dataId).values,d=i.data.get(s.dataId).values,[h,c]=e(n.shape,s.shape,l,d,n.dtype);return{dataId:i.write(h,c,n.dtype),shape:c,dtype:n.dtype}}}}function g(t){return(a,r,n,s,o)=>{const i=e.backend_util.assertAndGetBroadcastShape(a,r),l=i.length,d=e.util.computeStrides(i),h=e.util.sizeFromShape(i),c=e.util.getTypedArrayFromDType(o,h),u=a.length,p=r.length,f=e.util.computeStrides(a),m=e.util.computeStrides(r),y=e.backend_util.getBroadcastDims(a,i),g=e.backend_util.getBroadcastDims(r,i);if(y.length+g.length===0)for(let e=0;e<c.length;++e)c[e]=t(n[e%n.length],s[e%s.length]);else for(let a=0;a<c.length;++a){const r=e.util.indexToLoc(a,l,d),o=r.slice(-u);y.forEach(t=>o[t]=0);const i=e.util.locToIndex(o,u,f),h=r.slice(-p);g.forEach(t=>h[t]=0);const S=e.util.locToIndex(h,p,m);c[a]=t(n[i],s[S])}return[c,i]}}const S=g((t,e)=>t/e),I=y(e.Div,S),b={kernelName:e.Max,backendName:"cpu",kernelFunc:({inputs:t,attrs:a,backend:s})=>{const{x:i}=t,{reductionIndices:l}=a,d=s;let h=i.shape;const c=h.length;let u=e.util.parseAxisParam(l,h);const p=e.backend_util.getAxesPermutation(u,c);let f=d.data.get(i.dataId).values;if(null!=p){const t=new Array(c);for(let e=0;e<t.length;e++)t[e]=h[p[e]];f=n(f,h,i.dtype,p,t),u=e.backend_util.getInnerMostAxes(u.length,c),h=t}o(i,"max"),e.backend_util.assertAxesAreInnerMostDims("max",u,c);const[m,y]=e.backend_util.computeOutAndReduceShapes(h,u),g=r(f,e.util.sizeFromShape(y),m,i.dtype);return{dataId:d.write(g,m,i.dtype),shape:m,dtype:i.dtype}}};const k={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:({inputs:t,attrs:a,backend:r})=>{const{x:n}=t,{filterSize:s,strides:d,pad:h,includeBatchInIndex:c}=a,u=r;o(n,"MaxPoolWithArgmax");const p=u.data.get(n.dataId).values,f=e.backend_util.computePool2DInfo(n.shape,s,d,[1,1],h),[m,y]=function(t,a,r,n,s){const o=i(t,0,r,e.util.computeStrides(a),s,"max"),d=l(t,a,r,s,!0,n);return[o.values,d.values]}(p,n.shape,n.dtype,c,f),g=u.write(m,f.outShape,n.dtype),S=u.write(y,f.outShape,n.dtype);return[{dataId:g,shape:f.outShape,dtype:n.dtype},{dataId:S,shape:f.outShape,dtype:"int32"}]}},M=e.kernel_impls.nonMaxSuppressionV5,x={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:({inputs:t,backend:e,attrs:a})=>{const{boxes:r,scores:n}=t,{maxOutputSize:s,iouThreshold:i,scoreThreshold:l,softNmsSigma:d}=a,h=e;o(r,"NonMaxSuppressionWithScore");const c=h.data.get(r.dataId).values,u=h.data.get(n.dataId).values,p=s,f=i,m=l,y=d,{selectedIndices:g,selectedScores:S}=M(c,u,p,f,m,y);return[g,S]}},A={kernelName:e.Square,backendName:"cpu",kernelFunc:({inputs:t,backend:e})=>{const{x:a}=t,r=e;o(a,"square");const n=r.data.get(a.dataId).values,s=new Float32Array(n.length);for(let t=0;t<n.length;++t){const e=n[t];s[t]=e*e}return{dataId:r.write(s,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},F=g((t,e)=>{const a=t-e;return a*a}),v=[x,A,y(e.SquaredDifference,F),I,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:({inputs:t,attrs:e,backend:a})=>{const{x:r}=t,{perm:s}=e,i=a;o(r,"transpose");const l=r.shape.length,d=new Array(l);for(let t=0;t<d.length;t++)d[t]=r.shape[s[t]];const h=n(i.data.get(r.dataId).values,r.shape,r.dtype,s,d);return{dataId:i.write(h,d,r.dtype),shape:d,dtype:r.dtype}}},k,b];for(const t of v)e.registerKernel(t);e.registerBackend("cpu",()=>new m,1),t.MathBackendCPU=m,t.shared=s,t.version_cpu="2.0.0",Object.defineProperty(t,"__esModule",{value:!0})}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,a){"use strict";function r(t,a,r,n){const s=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(r));for(let e=0;e<s.length;++e){const r=e*a;let n=t[r];for(let e=0;e<a;++e){const a=t[r+e];a>n&&(n=a)}s[e]=n}return s}function n(t,a,r,n,s){const o=a.length,i=e.util.sizeFromShape(a),l=e.util.computeStrides(a),d=e.util.computeStrides(s),h=e.util.getTypedArrayFromDType(r,e.util.sizeFromShape(s));for(let a=0;a<i;++a){const r=e.util.indexToLoc(a,o,l),s=new Array(r.length);for(let t=0;t<s.length;t++)s[t]=r[n[t]];h[e.util.locToIndex(s,o,d)]=t[a]}return h}var s=Object.freeze({__proto__:null,maxImpl:r,transposeImpl:n});function o(t,a){Array.isArray(t)||(t=[t]),t.forEach(t=>{null!=t&&e.util.assert("complex64"!==t.dtype,()=>`${a} does not support complex64 tensors in the CPU backend.`)})}function i(t,a,r,n,s,o){const i=s.strideHeight,l=s.strideWidth,d=s.dilationHeight,h=s.dilationWidth,c=s.effectiveFilterHeight,u=s.effectiveFilterWidth,p=s.padInfo.top,f=s.padInfo.left,m="max"===o?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(s.outShape,r),g=y.values,S=s.outShape[1]*s.outShape[2]*s.outShape[3],I=s.outShape[2]*s.outShape[3],b=s.outShape[3];for(let e=0;e<s.batchSize;++e){const a=e*S,r=e*n[0];for(let e=0;e<s.inChannels;++e)for(let y=0;y<s.outHeight;++y){const S=y*i-p,k=Math.max(0,S),M=Math.min(s.inHeight,c+S),x=a+y*I;for(let a=0;a<s.outWidth;++a){const i=a*l-f,c=Math.max(0,i),p=Math.min(s.inWidth,u+i);let y=m,S=0,I=0;for(let a=k;a<M;a+=d){const s=r+a*n[1];for(let a=c;a<p;a+=h){const r=t[s+a*n[2]+e];"max"===o&&r>y?y=r:"avg"===o&&(S+=r,I++)}if(isNaN(y))break}g[x+a*b+e]="avg"===o?S/I:y}}}return y}function l(t,a,r,n,s=!1,o=!1){const i=e.buffer(n.outShape,"int32"),l=n.strideHeight,d=n.strideWidth,h=n.dilationHeight,c=n.dilationWidth,u=n.effectiveFilterHeight,p=n.effectiveFilterWidth,f=n.padInfo.top,m=n.padInfo.left,y=e.buffer(a,r,t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.outHeight;++a){const r=a*l-f;let g=r;for(;g<0;)g+=h;const S=Math.min(n.inHeight,u+r);for(let l=0;l<n.outWidth;++l){const u=l*d-m;let f=u;for(;f<0;)f+=c;const I=Math.min(n.inWidth,p+u);let b=Number.NEGATIVE_INFINITY,k=-1;for(let a=g;a<S;a+=h){const i=a-r;for(let r=f;r<I;r+=c){const l=r-u,d=y.get(t,a,r,e);d>b&&(b=d,k=s?o?((t*n.inHeight+a)*n.inWidth+r)*n.inChannels+e:(a*n.inWidth+r)*n.inChannels+e:i*p+l)}}i.set(k,t,a,l,e)}}return i}const d=e.kernel_impls.nonMaxSuppressionV3,h=e.kernel_impls.split,c=e.kernel_impls.tile,u=e.kernel_impls.topkImpl,p=e.kernel_impls.whereImpl;function f(t,e,a,r){if("linear"===a)return t.linear(e);if("relu"===a)return t.relu(e);if("elu"===a)return t.elu(e);if("relu6"===a)return t.relu6(e);if("prelu"===a)return t.prelu(e,r);throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}class m extends e.KernelBackend{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new e.DataStorage(this,e.engine())}write(t,a,r){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));const n={};return this.data.set(n,{values:t,dtype:r}),n}move(t,e,a,r){this.data.set(t,{values:e,dtype:r})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){const{dtype:a,complexTensors:r}=this.data.get(t);if("complex64"===a){const t=this.readSync(r.real.dataId),a=this.readSync(r.imag.dataId);return e.backend_util.mergeRealAndImagArrays(t,a)}return this.data.get(t).values}bufferSync(t){const a=this.readSync(t.dataId);let r=a;if("string"===t.dtype)try{r=a.map(t=>e.util.decodeString(t))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,r)}makeOutput(t,a,r){const n=this.write(t,a,r);return e.engine().makeTensorFromDataId(n,a,r,this)}disposeData(t){if(this.data.has(t)){const{complexTensors:e}=this.data.get(t);null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}}async time(t){const a=e.util.now();return t(),{kernelMs:e.util.now()-a}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}complex(t,a){const r=this.makeOutput(null,t.shape,"complex64");return this.data.get(r.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(a.clone())},r}real(t){return this.data.get(t.dataId).complexTensors.real.clone()}imag(t){return this.data.get(t.dataId).complexTensors.imag.clone()}slice(t,a,r){if(o(t,"slice"),e.slice_util.isSliceContinous(t.shape,a,r)){const n=e.slice_util.computeFlatOffset(a,t.strides),s=e.util.sizeFromShape(r),o=this.readSync(t.dataId);return e.tensor(o.subarray(n,n+s),r,t.dtype)}const n=e.buffer(r,t.dtype),s=this.bufferSync(t);for(let t=0;t<n.size;++t){const e=n.indexToLoc(t).map((t,e)=>t+a[e]);n.values[t]=s.get(...e)}return n.toTensor()}stridedSlice(t,a,r,n){o(t,"stridedSlice");const s=e.slice_util.computeOutShape(a,r,n);if(s.some(t=>0===t))return e.tensor([],s);const i=e.buffer(s,t.dtype),l=this.bufferSync(t);for(let t=0;t<i.size;t++){const e=i.indexToLoc(t),r=new Array(e.length);for(let t=0;t<r.length;t++)r[t]=e[t]*n[t]+a[t];i.set(l.get(...r),...e)}return i.toTensor()}diag(t){const a=this.readSync(t.dataId),r=e.buffer([t.size,t.size],t.dtype),n=r.values;for(let e=0;e<a.length;e++)n[e*t.size+e]=a[e];return r.toTensor()}unstack(t,e){const a=t.shape[e],r=new Array(t.rank-1);let n=0;for(let a=0;a<t.rank;a++)a!==e&&(r[n++]=t.shape[a]);const s=new Array(t.rank).fill(0),o=t.shape.slice();o[e]=1;const i=new Array(a);for(let a=0;a<i.length;a++)s[e]=a,i[a]=this.slice(t,s,o).reshape(r);return i}reverse(t,a){o(t,"reverse");const r=e.buffer(t.shape,t.dtype),n=this.bufferSync(t);for(let e=0;e<r.size;e++){const s=r.indexToLoc(e),o=s.slice();a.forEach(e=>o[e]=t.shape[e]-1-o[e]),r.set(n.get(...o),...s)}return r.toTensor()}concat(t,a){if("complex64"===t[0].dtype){const r=t.map(t=>e.real(t)),n=t.map(t=>e.imag(t));return e.complex(this.concat(r,a),this.concat(n,a))}const r=t.map(t=>{const r=e.util.sizeFromShape(t.shape.slice(a));return t.as2D(-1,r)}),n=e.backend_util.computeOutShape(r.map(t=>t.shape),1),s=e.buffer(n,t[0].dtype).values;if(1===r[0].shape[0]){let t=0;r.forEach(e=>{s.set(this.readSync(e.dataId),t),t+=e.size})}else{let t=0;r.forEach(e=>{const a=this.readSync(e.dataId);let r=0;for(let o=0;o<e.shape[0];++o){const i=o*n[1]+t;for(let t=0;t<e.shape[1];++t)s[i+t]=a[r++]}t+=e.shape[1]})}const o=e.backend_util.computeOutShape(t.map(t=>t.shape),a);return e.tensor(s,o,t[0].dtype)}neg(t){return o(t,"neg"),this.multiply(e.scalar(-1),t)}add(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t+a,imag:e+r})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t+e)}addN(t){o(t,"addN");const a=t.map(t=>this.readSync(t.dataId)),r=e.buffer(t[0].shape,t[0].dtype),n=r.values;for(let e=0;e<t.length;e++){const t=a[e];for(let e=0;e<n.length;e++)n[e]+=t[e]}return r.toTensor()}softmax(t,a){const r=e.util.parseAxisParam([a],t.shape),n=e.max(t,r),s=e.backend_util.expandShapeToKeepDim(n.shape,r),o=this.subtract(t,n.reshape(s)),i=this.exp(o),l=this.sum(i,r).reshape(s);return e.div(i,l)}subtract(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t-a,imag:e-r})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t-e)}pow(t,e){return o([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.pow(t,e))}batchMatMul(t,a,r,n){o([t,a],"matMul");const s=r?t.shape[1]:t.shape[2],i=r?t.shape[2]:t.shape[1],l=n?a.shape[1]:a.shape[2],d=t.shape[0],h=this.readSync(t.dataId),c=this.readSync(a.dataId),[u,p,f]=r?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],[m,y,g]=n?[1,a.strides[1],a.strides[0]]:[a.strides[1],1,a.strides[0]],S=i*l,I=e.buffer([d,i,l],t.dtype),b=I.values,k=this.blockSize;for(let t=0;t<d;t++)for(let e=0;e<i;e+=k)for(let a=0;a<l;a+=k)for(let r=0;r<s;r+=k){const n=Math.min(e+k,i),o=Math.min(a+k,l),d=Math.min(r+k,s);for(let s=e;s<n;s++)for(let e=a;e<o;e++){let a=0;for(let n=r;n<d;n++)a+=h[t*u+s*p+n*f]*c[n*m+e*y+t*g];b[t*S+(s*l+e)]+=a}}return I.toTensor()}fusedBatchMatMul({a:t,b:e,transposeA:a,transposeB:r,bias:n,activation:s,preluActivationWeights:o}){let i=this.batchMatMul(t,e,a,r);return n&&(i=this.add(i,n)),s&&(i=f(this,i,s,o)),i}multiply(t,a){return"complex64"===t.dtype||"complex64"===a.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),a.cast("complex64"),(t,e,a,r)=>({real:t*a-e*r,imag:t*r+e*a})):this.broadcastedBinaryOp(t,a,e.upcastType(t.dtype,a.dtype),(t,e)=>t*e)}floorDiv(t,e){o([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(t,e)=>Math.floor(t/e))}sum(t,a){o(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.upcastType(t.dtype,"int32"),i=e.zeros(r,s),l=e.util.sizeFromShape(n),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=0;for(let t=0;t<l;++t)a+=h[e+t];d[t]=a}return i}prod(t,a){o(t,"sum");const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.upcastType(t.dtype,"int32"),i=e.zeros(r,s),l=e.util.sizeFromShape(n),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=1;for(let t=0;t<l;++t)a*=h[e+t];d[t]=a}return i}unsortedSegmentSum(t,a,r){o(t,"unsortedSegmentSum");const n=[],s=t.rank-a.rank;for(let t=0;t<s;++t)a=a.expandDims(t+1);for(let s=0;s<r;++s){const r=e.scalar(s,"int32"),o=e.equal(r,a).asType("float32").mul(t).sum(0);n.push(o)}return e.stack(n)}argMin(t,a){o(t,"argMin");const r=[a];e.backend_util.assertAxesAreInnerMostDims("argMin",r,t.rank);const[n,s]=e.backend_util.computeOutAndReduceShapes(t.shape,r),i=e.zeros(n,"int32"),l=e.util.sizeFromShape(s),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=h[e],r=0;for(let t=0;t<l;++t){const n=h[e+t];n<a&&(a=n,r=t)}d[t]=r}return i}argMax(t,a){o(t,"argMax");const r=[a];e.backend_util.assertAxesAreInnerMostDims("argMax",r,t.rank);const[n,s]=e.backend_util.computeOutAndReduceShapes(t.shape,r),i=e.zeros(n,"int32"),l=e.util.sizeFromShape(s),d=this.readSync(i.dataId),h=this.readSync(t.dataId);for(let t=0;t<d.length;++t){const e=t*l;let a=h[e],r=0;for(let t=0;t<l;++t){const n=h[e+t];n>a&&(a=n,r=t)}d[t]=r}return i}cumsum(t,a,r,n){if(o(t,"cumsum"),a!==t.rank-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${t.rank-1} `+`but got axis=${a}`);const s=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,s),l=this.readSync(i.dataId),d=this.readSync(t.dataId),h=t.shape[t.rank-1],c=n?(t,e)=>t+h-e-1:(t,e)=>t+e;for(let t=0;t<d.length;t+=h)for(let e=0;e<h;e++){const a=c(t,e);if(0===e)l[a]=r?0:d[a];else{const n=c(t,e-1);l[a]=r?d[n]+l[n]:d[a]+l[n]}}return i}equal(t,e){return o([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t===e?1:0)}notEqual(t,e){return o([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t!==e?1:0)}less(t,e){return o([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t<e?1:0)}lessEqual(t,e){return o([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t<=e?1:0)}greater(t,e){return o([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t>e?1:0)}greaterEqual(t,e){return o([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t>=e?1:0)}logicalNot(t){o(t,"logicalNot");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)a[t]=e[t]?0:1;return this.makeOutput(a,t.shape,"bool")}logicalAnd(t,e){return o([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t&&e)}logicalOr(t,e){return o([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(t,e)=>t||e)}select(t,a,r){o([t,a,r],"select");const n=this.readSync(t.dataId),s=this.readSync(a.dataId),i=this.readSync(r.dataId),l=e.zeros(a.shape,e.upcastType(a.dtype,r.dtype)),d=this.readSync(l.dataId);let h=0;const c=0===t.rank||t.rank>1||1===a.rank?1:e.util.sizeFromShape(a.shape.slice(1));for(let t=0;t<n.length;t++)for(let e=0;e<c;e++)1===n[t]?d[h++]=s[t]:d[h++]=i[t];return l}where(t){o([t],"where");const e=this.readSync(t.dataId);return p(t.shape,e)}topk(t,e,a){o(t,"topk");const r=this.readSync(t.dataId);return u(r,t.shape,t.dtype,e,a)}min(t,a){o(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];r<a&&(a=r)}l[t]=a}return s}minimum(t,e){return o([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.min(t,e))}mod(t,e){return o([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>{const a=t%e;return t<0&&e<0||t>=0&&e>=0?a:(a+e)%e})}maximum(t,e){return o([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.max(t,e))}all(t,a){o(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];a=a&&r}l[t]=a}return s}any(t,a){o(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",a,t.rank);const[r,n]=e.backend_util.computeOutAndReduceShapes(t.shape,a),s=e.zeros(r,t.dtype),i=e.util.sizeFromShape(n),l=this.readSync(s.dataId),d=this.readSync(t.dataId);for(let t=0;t<l.length;++t){const e=t*i;let a=d[e];for(let t=0;t<i;++t){const r=d[e+t];a=a||r}l[t]=a}return s}squaredDifference(t,e){return o([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>{const a=t-e;return a*a})}ceil(t){o(t,"ceil");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.ceil(e[t]);return this.makeOutput(a,t.shape,"float32")}floor(t){o(t,"floor");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.floor(e[t]);return this.makeOutput(a,t.shape,"float32")}sign(t){o(t,"x");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)e[t]<0?a[t]=-1:e[t]>0?a[t]=1:a[t]=0;return this.makeOutput(a,t.shape,"float32")}isNaN(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Number.isNaN(e[t])&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}isInf(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Math.abs(e[t])===1/0&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}isFinite(t){o(t,"x");const e=this.readSync(t.dataId),a=new Uint8Array(e.length);for(let t=0;t<e.length;++t)Number.isFinite(e[t])&&(a[t]=1);return this.makeOutput(a,t.shape,"bool")}round(t){o(t,"round");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=Math.floor(e[t]);e[t]-r<.5?a[t]=Math.floor(e[t]):e[t]-r>.5?a[t]=Math.ceil(e[t]):a[t]=r%2==0?r:r+1}return this.makeOutput(a,t.shape,"float32")}exp(t){o(t,"exp");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.exp(e[t]);return this.makeOutput(a,t.shape,"float32")}expm1(t){o(t,"expm1");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=Math.expm1(e[t]);return this.makeOutput(a,t.shape,"float32")}log(t){o(t,"log");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.log(r)}return this.makeOutput(a,t.shape,"float32")}log1p(t){o(t,"log1p");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.log1p(r)}return this.makeOutput(a,t.shape,"float32")}sqrt(t){o(t,"sqrt");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=Math.sqrt(r)}return this.makeOutput(a,t.shape,"float32")}rsqrt(t){o(t,"rsqrt");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t){const r=e[t];a[t]=1/Math.sqrt(r)}return this.makeOutput(a,t.shape,"float32")}reciprocal(t){o(t,"reciprocal");const e=this.readSync(t.dataId),a=new Float32Array(e.length);for(let t=0;t<e.length;++t)a[t]=1/e[t];return this.makeOutput(a,t.shape,"float32")}linear(t){return t}relu(t){o(t,"relu");const a=e.zeros(t.shape,t.dtype),r=this.readSync(a.dataId),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t)r[t]=Math.max(0,n[t]);return a}relu6(t){o(t,"relu");const a=e.zeros(t.shape,t.dtype),r=this.readSync(a.dataId),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t)r[t]=Math.min(Math.max(0,n[t]),6);return a}prelu(t,e){return o([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>t<0?e*t:t)}elu(t){o(t,"elu");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t){const r=a[t];e[t]=r>=0?r:Math.exp(r)-1}return this.makeOutput(e,t.shape,"float32")}eluDer(t,e){o([t,e],"eluDer");const a=new Float32Array(e.size),r=this.readSync(e.dataId),n=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const e=r[t];a[t]=e>=1?n[t]:n[t]*(e+1)}return this.makeOutput(a,e.shape,"float32")}selu(t){o(t,"selu");const a=e.backend_util.SELU_SCALEALPHA,r=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),s=this.readSync(t.dataId);for(let t=0;t<s.length;++t){const e=s[t];n[t]=e>=0?r*e:a*(Math.exp(e)-1)}return this.makeOutput(n,t.shape,"float32")}clip(t,e,a){o(t,"clip");const r=new Float32Array(t.size),n=this.readSync(t.dataId);for(let t=0;t<n.length;++t){const s=n[t];r[t]=s>a?a:s<e?e:s}return this.makeOutput(r,t.shape,"float32")}abs(t){const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.abs(a[t]);return this.makeOutput(e,t.shape,"float32")}complexAbs(t){const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let r=0;r<t.size;++r){const t=a[2*r],n=a[2*r+1];e[r]=Math.hypot(t,n)}return this.makeOutput(e,t.shape,"float32")}int(t){o(t,"int");const e=new Int32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=a[t];return this.makeOutput(e,t.shape,"int32")}sigmoid(t){o(t,"sigmoid");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=1/(1+Math.exp(-a[t]));return this.makeOutput(e,t.shape,"float32")}softplus(t){o(t,"softplus");const e=Math.log(1.1920928955078125e-7)+2,a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const n=r[t]>-e,s=r[t]<e,o=Math.exp(r[t]);let i;i=s?o:n?r[t]:Math.log(1+o),a[t]=i}return this.makeOutput(a,t.shape,"float32")}sin(t){o(t,"sin");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.sin(a[t]);return this.makeOutput(e,t.shape,"float32")}cos(t){o(t,"cos");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.cos(a[t]);return this.makeOutput(e,t.shape,"float32")}tan(t){o(t,"tan");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.tan(a[t]);return this.makeOutput(e,t.shape,"float32")}asin(t){o(t,"asin");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.asin(a[t]);return this.makeOutput(e,t.shape,"float32")}acos(t){o(t,"acos");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.acos(a[t]);return this.makeOutput(e,t.shape,"float32")}atan(t){o(t,"atan");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.atan(a[t]);return this.makeOutput(e,t.shape,"float32")}atan2(t,e){return o([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(t,e)=>Math.atan2(t,e))}sinh(t){o(t,"sinh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.sinh(a[t]);return this.makeOutput(e,t.shape,"float32")}cosh(t){o(t,"cosh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.cosh(a[t]);return this.makeOutput(e,t.shape,"float32")}tanh(t){o(t,"tanh");const a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t)a[t]=e.util.tanh(r[t]);return this.makeOutput(a,t.shape,"float32")}asinh(t){o(t,"asinh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.asinh(a[t]);return this.makeOutput(e,t.shape,"float32")}acosh(t){o(t,"acosh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.acosh(a[t]);return this.makeOutput(e,t.shape,"float32")}atanh(t){o(t,"atanh");const e=new Float32Array(t.size),a=this.readSync(t.dataId);for(let t=0;t<a.length;++t)e[t]=Math.atanh(a[t]);return this.makeOutput(e,t.shape,"float32")}erf(t){o(t,"erf");const a=new Float32Array(t.size),r=this.readSync(t.dataId),n=e.backend_util.ERF_P,s=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,l=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,h=e.backend_util.ERF_A5;for(let t=0;t<r.length;++t){const e=Math.sign(r[t]),o=Math.abs(r[t]),c=1/(1+n*o);a[t]=e*(1-((((h*c+d)*c+l)*c+i)*c+s)*c*Math.exp(-o*o))}return this.makeOutput(a,t.shape,"float32")}step(t,e=0){o(t,"step");const a=new Float32Array(t.size),r=this.readSync(t.dataId);for(let t=0;t<r.length;++t){const n=r[t];isNaN(n)?a[t]=NaN:a[t]=n>0?1:e}return this.makeOutput(a,t.shape,"float32")}fusedConv2d({input:t,filter:e,convInfo:a,bias:r,activation:n,preluActivationWeights:s}){let o=this.conv2d(t,e,a);return r&&(o=this.add(o,r)),n&&(o=f(this,o,n,s)),o}conv2d(t,a,r){o([t,a],"conv2d");const n=r.filterHeight,s=r.filterWidth,i=r.dilationHeight,l=r.dilationWidth,d=r.padInfo.left,h=r.padInfo.top,c="channelsLast"===r.dataFormat,u=e.buffer(r.outShape,t.dtype),p=t.strides[0],f=c?t.strides[1]:t.strides[2],m=c?t.strides[2]:1,y=c?1:t.strides[1],g=u.strides[0],S=c?u.strides[1]:u.strides[2],I=c?u.strides[2]:1,b=c?1:u.strides[1],k=this.readSync(t.dataId),M=this.readSync(a.dataId),x=u.values;for(let t=0;t<r.batchSize;++t){const e=t*p,o=t*g;for(let t=0;t<r.outHeight;++t){const c=o+t*S,u=t*r.strideHeight-h;for(let t=0;t<n;t++){const n=u+t*i;if(n<0||n>=r.inHeight)continue;const o=t*a.strides[0],h=e+n*f;for(let t=0;t<r.outWidth;++t){const e=c+t*I,n=t*r.strideWidth-d;for(let t=0;t<s;t++){const s=n+t*l;if(s<0||s>=r.inWidth)continue;const i=h+s*m;let d=o+t*a.strides[1];for(let t=0;t<r.inChannels;++t){const a=k[i+t*y];for(let t=0;t<r.outChannels;++t)x[e+t*b]+=a*M[d+t];d+=r.outChannels}}}}}}return u.toTensor()}conv3d(t,a,r){const n=r.filterDepth,s=r.filterHeight,o=r.filterWidth,i=r.dilationDepth,l=r.dilationHeight,d=r.dilationWidth,h=r.padInfo.front,c=r.padInfo.left,u=r.padInfo.top,p=e.buffer(r.outShape,t.dtype),f=this.readSync(t.dataId),m=this.readSync(a.dataId),y=p.values;for(let e=0;e<r.batchSize;++e){const g=e*t.strides[0],S=e*p.strides[0];for(let e=0;e<r.outDepth;++e){const I=S+e*p.strides[1],b=e*r.strideDepth-h;for(let e=0;e<n;e++){const n=b+e*i;if(n<0||n>=r.inDepth)continue;const h=e*a.strides[0],S=g+n*t.strides[1];for(let e=0;e<r.outHeight;++e){const n=I+e*p.strides[2],i=e*r.strideHeight-u;for(let e=0;e<s;e++){const s=i+e*l;if(s<0||s>=r.inHeight)continue;const u=h+e*a.strides[1],p=S+s*t.strides[2];for(let t=0;t<r.outWidth;++t){const e=n+t*r.outChannels,s=t*r.strideWidth-c;for(let t=0;t<o;t++){const n=s+t*d;if(n<0||n>=r.inWidth)continue;const o=u+t*a.strides[2],i=p+n*r.inChannels;let l=o;for(let t=0;t<r.inChannels;++t){const a=f[i+t];for(let t=0;t<r.outChannels;++t)y[e+t]+=a*m[l+t];l+=r.outChannels}}}}}}}}return p.toTensor()}conv2dDerInput(t,a,r){o([t,a],"conv2dDerInput");const n=e.buffer(r.inShape,"float32"),s=n.values,i=this.readSync(t.dataId),l=this.readSync(a.dataId),[d,h,c]=a.strides,{batchSize:u,filterHeight:p,filterWidth:f,inChannels:m,inHeight:y,inWidth:g,outChannels:S,outHeight:I,outWidth:b,strideHeight:k,strideWidth:M,dataFormat:x}=r,A=p-1-r.padInfo.top,F=f-1-r.padInfo.left,v="channelsLast"===x,w=n.strides[0],T=v?n.strides[1]:n.strides[2],z=v?n.strides[2]:1,D=v?1:n.strides[1],W=t.strides[0],_=v?t.strides[1]:t.strides[2],O=v?t.strides[2]:1,H=v?1:t.strides[1];for(let t=0;t<u;++t)for(let e=0;e<m;++e)for(let a=0;a<y;++a){const r=a-A,n=Math.max(0,Math.ceil(r/k)),o=Math.min(I,(p+r)/k);for(let u=0;u<g;++u){const m=u-F,y=Math.max(0,Math.ceil(m/M)),g=Math.min(b,(f+m)/M);let I=0;for(let a=n;a<o;++a){const n=a*k-r;for(let r=y;r<g;++r){const s=W*t+_*a+O*r,o=d*(p-1-n)+h*(f-1-(r*M-m))+c*e;for(let t=0;t<S;++t){I+=i[s+H*t]*l[o+t]}}}s[w*t+T*a+z*u+D*e]=I}}return n.toTensor()}conv3dDerInput(t,a,r){const n=e.buffer(r.inShape,"float32"),s=n.values,[o,i,l,d]=n.strides,h=this.readSync(t.dataId),[c,u,p,f]=t.strides,m=this.readSync(a.dataId),[y,g,S,I]=a.strides,{batchSize:b,filterDepth:k,filterHeight:M,filterWidth:x,inChannels:A,inDepth:F,inHeight:v,inWidth:w,outChannels:T,outDepth:z,outHeight:D,outWidth:W,strideDepth:_,strideHeight:O,strideWidth:H}=r,N=k-1-r.padInfo.front,B=M-1-r.padInfo.top,C=x-1-r.padInfo.left;for(let t=0;t<b;++t)for(let e=0;e<A;++e)for(let a=0;a<F;++a){const r=a-N,n=Math.max(0,Math.ceil(r/_)),b=Math.min(z,(k+r)/_);for(let A=0;A<v;++A){const F=A-B,v=Math.max(0,Math.ceil(F/O)),z=Math.min(D,(M+F)/O);for(let D=0;D<w;++D){const w=D-C,N=Math.max(0,Math.ceil(w/H)),B=Math.min(W,(x+w)/H);let E=0;for(let a=n;a<b;++a){const n=a*_-r;for(let r=v;r<z;++r){const s=r*O-F;for(let o=N;o<B;++o){const i=c*t+u*a+p*r+f*o,l=y*(k-1-n)+g*(M-1-s)+S*(x-1-(o*H-w))+I*e;for(let t=0;t<T;++t){E+=h[i+t]*m[l+t]}}}}s[o*t+i*a+l*A+d*D+e]=E}}}return n.toTensor()}conv2dDerFilter(t,a,r){o([t,a],"conv2dDerFilter");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d="channelsLast"===r.dataFormat,h=e.buffer(r.filterShape,"float32"),c=r.padInfo.left,u=r.padInfo.top,p=this.bufferSync(t),f=this.bufferSync(a);for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((u-t)/n)),a=Math.min(r.outHeight,(r.inHeight+u-t)/n);for(let o=0;o<l;++o){const i=Math.max(0,Math.ceil((c-o)/s)),l=Math.min(r.outWidth,(r.inWidth+c-o)/s);for(let m=0;m<r.inChannels;++m)for(let y=0;y<r.outChannels;++y){let g=0;for(let h=0;h<r.batchSize;++h)for(let r=e;r<a;++r){const e=t+r*n-u;for(let t=i;t<l;++t){const a=o+t*s-c;g+=d?p.get(h,e,a,m)*f.get(h,r,t,y):p.get(h,m,e,a)*f.get(h,y,r,t)}}h.set(g,t,o,m,y)}}}return h.toTensor()}conv3dDerFilter(t,a,r){const n=r.strideDepth,s=r.strideHeight,o=r.strideWidth,i=r.filterDepth,l=r.filterHeight,d=r.filterWidth,h=e.buffer(r.filterShape,"float32"),c=h.values,[u,p,f,m]=h.strides,y=this.readSync(a.dataId),[g,S,I,b]=a.strides,k=this.readSync(t.dataId),[M,x,A,F]=t.strides,v=r.padInfo.front,w=r.padInfo.left,T=r.padInfo.top;for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((v-t)/n)),a=Math.min(r.outDepth,(r.inDepth+v-t)/n),i=t*u;for(let h=0;h<l;++h){const l=Math.max(0,Math.ceil((T-h)/s)),u=Math.min(r.outHeight,(r.inHeight+T-h)/s),z=h*p+i;for(let i=0;i<d;++i){const d=Math.max(0,Math.ceil((w-i)/o)),p=Math.min(r.outWidth,(r.inWidth+w-i)/o),D=i*f+z;for(let f=0;f<r.inChannels;++f){const z=f*m+D;for(let m=0;m<r.outChannels;++m){let D=0;for(let c=0;c<r.batchSize;++c){const r=c*M,z=c*g;for(let c=e;c<a;++c){const e=(t+c*n-v)*x+r,a=c*S+z;for(let t=l;t<u;++t){const r=(h+t*s-T)*A+e,n=t*I+a;for(let t=d;t<p;++t){const e=t*b+n;D+=k[(i+t*o-w)*F+r+f]*y[e+m]}}}}c[z+m]=D}}}}}return h.toTensor()}fusedDepthwiseConv2D({input:t,filter:e,convInfo:a,bias:r,activation:n,preluActivationWeights:s}){let o=this.depthwiseConv2D(t,e,a);return r&&(o=this.add(o,r)),n&&(o=f(this,o,n,s)),o}depthwiseConv2D(t,a,r){o([t,a],"depthwiseConv2D");const n=r.filterHeight,s=r.filterWidth,i=r.dilationHeight,l=r.dilationWidth,d=r.padInfo.left,h=r.padInfo.top,c=r.outChannels/r.inChannels,u=e.buffer(r.outShape,t.dtype),p=this.readSync(t.dataId),f=this.readSync(a.dataId),m=u.values;for(let e=0;e<r.batchSize;++e){const o=e*t.strides[0],y=e*u.strides[0];for(let e=0;e<r.outHeight;++e){const g=y+e*u.strides[1],S=e*r.strideHeight-d;for(let e=0;e<n;++e){const n=S+e*i;if(n<0||n>=r.inHeight)continue;const d=e*a.strides[0],y=o+n*t.strides[1];for(let t=0;t<r.outWidth;++t){const e=g+t*u.strides[2],n=t*r.strideWidth-h;for(let t=0;t<s;++t){const s=n+t*l;if(s<0||s>=r.inWidth)continue;const o=d+t*a.strides[1],i=y+s*r.inChannels;let h=e,u=o;for(let t=0;t<r.inChannels;++t){const e=p[i+t];for(let t=0;t<c;++t)m[h+t]+=e*f[u+t];h+=c,u+=c}}}}}}return u.toTensor()}depthwiseConv2DDerInput(t,a,r){o([t,a],"depthwiseConv2DDerInput");const n=e.buffer(r.inShape,"float32"),s=n.values,[i,l,d]=n.strides,h=this.readSync(t.dataId),[c,u,p]=t.strides,f=this.readSync(a.dataId),[m,y,g]=a.strides,{batchSize:S,filterHeight:I,filterWidth:b,inChannels:k,inHeight:M,inWidth:x,outChannels:A,outHeight:F,outWidth:v,strideHeight:w,strideWidth:T}=r,z=I-1-r.padInfo.top,D=b-1-r.padInfo.left,W=A/k;for(let t=0;t<S;++t)for(let e=0;e<k;++e)for(let a=0;a<M;++a){const r=a-z,n=Math.max(0,Math.ceil(r/w)),o=Math.min(F,(I+r)/w);for(let S=0;S<x;++S){const k=S-D,M=Math.max(0,Math.ceil(k/T)),x=Math.min(v,(b+k)/T);let A=0;for(let a=n;a<o;++a){const n=a*w-r;for(let r=M;r<x;++r){const s=c*t+u*a+p*r,o=m*(I-1-n)+y*(b-1-(r*T-k))+g*e;for(let t=0;t<W;++t){A+=h[s+(e*W+t)]*f[o+t]}}}s[i*t+l*a+d*S+e]=A}}return n.toTensor()}depthwiseConv2DDerFilter(t,a,r){o([t,a],"depthwiseConv2DDerFilter");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d=e.buffer(r.filterShape,"float32"),h=r.padInfo.left,c=r.padInfo.top,u=r.outChannels/r.inChannels,p=this.bufferSync(t),f=this.bufferSync(a);for(let t=0;t<i;++t){const e=Math.max(0,Math.ceil((c-t)/n)),a=Math.min(r.outHeight,(r.inHeight+c-t)/n);for(let o=0;o<l;++o){const i=Math.max(0,Math.ceil((h-o)/s)),l=Math.min(r.outWidth,(r.inWidth+h-o)/s);for(let m=0;m<r.outChannels;++m){const y=Math.trunc(m/u),g=m%u;let S=0;for(let d=0;d<r.batchSize;++d)for(let r=e;r<a;++r){const e=t+r*n-c;for(let t=i;t<l;++t){const a=o+t*s-h;S+=p.get(d,e,a,y)*f.get(d,r,t,m)}}d.set(S,t,o,y,g)}}}return d.toTensor()}tile(t,e){return o(t,"tile"),c(this.bufferSync(t),e)}pad(t,a,r){o(t,"pad");const n=a.map((e,a)=>e[0]+t.shape[a]+e[1]),s=a.map(t=>t[0]),i=this.bufferSync(t),l=e.buffer(n,t.dtype);0!==r&&l.values.fill(r);for(let e=0;e<t.size;e++){const t=i.indexToLoc(e),a=t.map((t,e)=>t+s[e]);l.set(i.get(...t),...a)}return l.toTensor()}gather(t,a,r){o([t,a],"gather");const n=t.shape.slice(),s=this.readSync(a.dataId);n[r]=s.length;const i=e.buffer(n,t.dtype),l=this.bufferSync(t);for(let t=0;t<i.size;++t){const e=i.indexToLoc(t),a=e.slice();a[r]=s[e[r]];const n=l.locToIndex(a);i.values[t]=l.values[n]}return i.toTensor()}batchToSpaceND(t,a,r){o([t],"batchToSpaceND");const n=a.reduce((t,e)=>t*e),s=e.backend_util.getReshaped(t.shape,a,n),i=e.backend_util.getPermuted(s.length,a.length),l=e.backend_util.getReshapedPermuted(t.shape,a,n),d=e.backend_util.getSliceBeginCoords(r,a.length),h=e.backend_util.getSliceSize(l,r,a.length);return e.transpose(t.reshape(s),i).reshape(l).slice(d,h)}spaceToBatchND(t,a,r){o([t],"spaceToBatchND");const n=a.reduce((t,e)=>t*e),s=[[0,0]];s.push(...r);for(let e=1+a.length;e<t.shape.length;++e)s.push([0,0]);const i=t.pad(s),l=e.backend_util.getReshaped(i.shape,a,n,!1),d=e.backend_util.getPermuted(l.length,a.length,!1),h=e.backend_util.getReshapedPermuted(i.shape,a,n,!1);return e.transpose(i.reshape(l),d).reshape(h)}maxPool(t,e){return o(t,"maxPool"),i(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()}maxPoolBackprop(t,a,r,n){o([a,r],"maxPoolBackprop");const s=this.readSync(a.dataId),i=e.buffer(n.outShape,a.dtype,l(s,a.shape,a.dtype,n).values),d=n.strideHeight,h=n.strideWidth,c=n.dilationHeight,u=n.dilationWidth,p=n.effectiveFilterHeight,f=n.effectiveFilterWidth,m=f-1-n.padInfo.left,y=p-1-n.padInfo.top,g=e.buffer(a.shape,"float32"),S=this.bufferSync(t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.inHeight;++a)for(let r=0;r<n.inWidth;++r){const s=a-y,o=r-m;let l=0;for(let a=0;a<p;a+=c){const r=(s+a)/d;if(!(r<0||r>=n.outHeight||Math.floor(r)!==r))for(let s=0;s<f;s+=u){const d=(o+s)/h;if(d<0||d>=n.outWidth||Math.floor(d)!==d)continue;const c=p*f-1-i.get(t,r,d,e)===a*f+s?1:0;0!==c&&(l+=S.get(t,r,d,e)*c)}}g.set(l,t,a,r,e)}return g.toTensor()}avgPoolBackprop(t,a,r){o([t,a],"avgPoolBackprop");const n=r.strideHeight,s=r.strideWidth,i=r.filterHeight,l=r.filterWidth,d=r.dilationHeight,h=r.dilationWidth,c=r.effectiveFilterHeight,u=r.effectiveFilterWidth,p=u-1-r.padInfo.left,f=c-1-r.padInfo.top,m=e.buffer(a.shape,"float32"),y=1/(i*l),g=this.bufferSync(t);for(let t=0;t<r.batchSize;++t)for(let e=0;e<r.inChannels;++e)for(let a=0;a<r.inHeight;++a)for(let o=0;o<r.inWidth;++o){const i=a-f,l=o-p;let S=0;for(let a=0;a<c;a+=d){const o=(i+a)/n;if(!(o<0||o>=r.outHeight||Math.floor(o)!==o))for(let a=0;a<u;a+=h){const n=(l+a)/s;n<0||n>=r.outWidth||Math.floor(n)!==n||(S+=g.get(t,o,n,e))}}m.set(S*y,t,a,o,e)}return m.toTensor()}pool3d(t,a,r){o(t,"pool3d");const n=a.strideDepth,s=a.strideHeight,i=a.strideWidth,l=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,c=a.effectiveFilterDepth,u=a.effectiveFilterHeight,p=a.effectiveFilterWidth,f=a.padInfo.front,m=a.padInfo.top,y=a.padInfo.left,g="max"===r?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,S=this.readSync(t.dataId),I=e.buffer(a.outShape,t.dtype),b=I.values,k=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],M=a.outShape[2]*a.outShape[3]*a.outShape[4],x=a.outShape[3]*a.outShape[4],A=a.outShape[4];for(let e=0;e<a.batchSize;++e){const o=e*k,I=e*t.strides[0];for(let e=0;e<a.inChannels;++e)for(let k=0;k<a.outDepth;++k){const F=k*n-f;let v=F;for(;v<0;)v+=l;const w=Math.min(a.inDepth,c+F),T=o+k*M;for(let n=0;n<a.outHeight;++n){const o=n*s-m;let c=o;for(;c<0;)c+=d;const f=Math.min(a.inHeight,u+o),k=T+n*x;for(let n=0;n<a.outWidth;++n){const s=n*i-y;let o=s;for(;o<0;)o+=h;const u=Math.min(a.inWidth,p+s),m=k+n*A;let M=g,x=0,F=0;for(let a=v;a<w;a+=l){const n=I+a*t.strides[1];for(let a=c;a<f;a+=d){const s=n+a*t.strides[2];for(let a=o;a<u;a+=h){const n=S[s+a*t.strides[3]+e];if("max"===r&&n>M?M=n:"avg"===r&&(x+=n,F++),isNaN(M))break}if(isNaN(M))break}if(isNaN(M))break}b[m+e]="avg"===r?x/F:M}}}}return I.toTensor()}avgPool3d(t,e){return o(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()}avgPool3dBackprop(t,a,r){o([t,a],"avgPool3dBackprop");const n=r.strideDepth,s=r.strideHeight,i=r.strideWidth,l=r.filterDepth,d=r.filterHeight,h=r.filterWidth,c=r.dilationDepth,u=r.dilationHeight,p=r.dilationWidth,f=r.effectiveFilterDepth,m=r.effectiveFilterHeight,y=r.effectiveFilterWidth,g=f-1-r.padInfo.front,S=y-1-r.padInfo.left,I=m-1-r.padInfo.top,b=e.buffer(a.shape,"float32"),k=1/(l*d*h),M=this.bufferSync(t);for(let t=0;t<r.batchSize;++t)for(let e=0;e<r.inChannels;++e)for(let a=0;a<r.inDepth;++a)for(let o=0;o<r.inHeight;++o)for(let l=0;l<r.inWidth;++l){const d=a-g,h=o-I,x=l-S;let A=0;for(let a=0;a<f;a+=c){const o=(d+a)/n;if(!(o<0||o>=r.outDepth||Math.floor(o)!==o))for(let a=0;a<m;a+=u){const n=(h+a)/s;if(!(n<0||n>=r.outHeight||Math.floor(n)!==n))for(let a=0;a<y;a+=p){const s=(x+a)/i;s<0||s>=r.outWidth||Math.floor(s)!==s||(A+=M.get(t,o,n,s,e))}}}b.set(A*k,t,a,o,l,e)}return b.toTensor()}maxPool3d(t,e){return o(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()}maxPool3dPositions(t,a){const r=e.buffer(a.outShape,"int32"),n=a.strideDepth,s=a.strideHeight,o=a.strideWidth,i=a.dilationDepth,l=a.dilationHeight,d=a.dilationWidth,h=a.effectiveFilterDepth,c=a.effectiveFilterHeight,u=a.effectiveFilterWidth,p=a.padInfo.front,f=a.padInfo.top,m=a.padInfo.left,y=this.bufferSync(t);for(let t=0;t<a.batchSize;++t)for(let e=0;e<a.inChannels;++e)for(let g=0;g<a.outDepth;++g){const S=g*n-p;let I=S;for(;I<0;)I+=i;const b=Math.min(a.inDepth,h+S);for(let n=0;n<a.outHeight;++n){const h=n*s-f;let p=h;for(;p<0;)p+=l;const k=Math.min(a.inHeight,c+h);for(let s=0;s<a.outWidth;++s){const f=s*o-m;let M=f;for(;M<0;)M+=d;const x=Math.min(a.inWidth,u+f);let A=Number.NEGATIVE_INFINITY,F=-1;for(let a=I;a<b;a+=i){const r=a-S;for(let n=p;n<k;n+=l){const s=n-h;for(let o=M;o<x;o+=d){const i=o-f,l=y.get(t,a,n,o,e);l>=A&&(A=l,F=r*c*u+s*c+i)}}}r.set(F,t,g,n,s,e)}}}return r.toTensor()}maxPool3dBackprop(t,a,r,n){o([a,r],"maxPool3dBackprop");const s=this.maxPool3dPositions(a,n),i=n.strideDepth,l=n.strideHeight,d=n.strideWidth,h=n.dilationDepth,c=n.dilationHeight,u=n.dilationWidth,p=n.effectiveFilterDepth,f=n.effectiveFilterHeight,m=n.effectiveFilterWidth,y=p-1-n.padInfo.front,g=m-1-n.padInfo.left,S=f-1-n.padInfo.top,I=e.buffer(a.shape,"float32"),b=this.bufferSync(s),k=this.bufferSync(t);for(let t=0;t<n.batchSize;++t)for(let e=0;e<n.inChannels;++e)for(let a=0;a<n.inDepth;++a)for(let r=0;r<n.inHeight;++r)for(let s=0;s<n.inWidth;++s){const o=a-y,M=r-S,x=s-g;let A=0;for(let a=0;a<p;a+=h){const r=(o+a)/i;if(!(r<0||r>=n.outDepth||Math.floor(r)!==r))for(let s=0;s<f;s+=c){const o=(M+s)/l;if(!(o<0||o>=n.outHeight||Math.floor(o)!==o))for(let i=0;i<m;i+=u){const l=(x+i)/d;if(l<0||l>=n.outWidth||Math.floor(l)!==l)continue;const h=p*f*m-1-b.get(t,r,o,l,e)===a*f*m+s*m+i?1:0;0!==h&&(A+=k.get(t,r,o,l,e)*h)}}}I.set(A,t,a,r,s,e)}return I.toTensor()}cast(t,a){return e.backend_util.castTensor(t,a,this)}reshape(t,a){return e.backend_util.reshapeTensor(t,a)}avgPool(t,e){return o(t,"avgPool"),o(t,"maxPool"),i(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()}resizeBilinear(t,a,r,n){o(t,"resizeBilinear");const[s,i,l,d]=t.shape,h=this.readSync(t.dataId),c=new Float32Array(e.util.sizeFromShape([s,a,r,d])),u=[n&&a>1?i-1:i,n&&r>1?l-1:l],p=[n&&a>1?a-1:a,n&&r>1?r-1:r];let f=0;const m=u[0]/p[0],y=u[1]/p[1];for(let e=0;e<s;e++)for(let n=0;n<a;n++){const a=m*n,s=Math.floor(a),o=a-s,u=Math.min(i-1,Math.ceil(a)),p=e*t.strides[0]+s*t.strides[1],g=e*t.strides[0]+u*t.strides[1];for(let e=0;e<r;e++){const a=y*e,r=Math.floor(a),n=a-r,s=Math.min(l-1,Math.ceil(a)),i=p+r*t.strides[2],u=g+r*t.strides[2],m=p+s*t.strides[2],S=g+s*t.strides[2];for(let t=0;t<d;t++){const e=h[i+t],a=h[u+t],r=e+(h[m+t]-e)*n,s=r+(a+(h[S+t]-a)*n-r)*o;c[f++]=s}}}return e.tensor(c,[s,a,r,d])}resizeBilinearBackprop(t,a,r){o([t,a],"resizeBilinearBackprop");const[n,s,i,l]=a.shape,[,d,h]=t.shape,c=new Float32Array(n*s*i*l),u=[r&&d>1?s-1:s,r&&h>1?i-1:i],p=[r&&d>1?d-1:d,r&&h>1?h-1:h],f=u[0]/p[0],m=u[1]/p[1],y=this.readSync(t.dataId);let g=0;for(let t=0;t<n;t++){const e=t*a.strides[0];for(let t=0;t<d;t++){const r=t*f,n=Math.floor(r),o=Math.min(Math.ceil(r),s-1),d=e+n*a.strides[1],u=e+o*a.strides[1],p=r-n,S=1-p;for(let t=0;t<h;t++){const e=t*m,r=Math.floor(e),n=Math.min(Math.ceil(e),i-1),s=e-r,o=1-s,h=d+r*a.strides[2],f=d+n*a.strides[2],I=u+r*a.strides[2],b=u+n*a.strides[2],k=S*o,M=S*s,x=p*o,A=p*s;for(let t=0;t<l;t++){const e=y[g++];c[h+t]+=e*k,c[f+t]+=e*M,c[I+t]+=e*x,c[b+t]+=e*A}}}}return e.tensor4d(c,[n,i,s,l],a.dtype)}resizeNearestNeighbor(t,a,r,n){o(t,"resizeNearestNeighbor");const[s,i,l,d]=t.shape,h=this.readSync(t.dataId),c=new Float32Array(s*a*r*d),u=[n&&a>1?i-1:i,n&&r>1?l-1:l],p=[n&&a>1?a-1:a,n&&r>1?r-1:r],f=u[0]/p[0],m=u[1]/p[1];let y=0;for(let e=0;e<s;e++){const s=e*t.strides[0];for(let e=0;e<a;e++){const a=f*e,o=s+Math.min(i-1,n?Math.round(a):Math.floor(a))*t.strides[1];for(let e=0;e<r;e++){const a=m*e,r=o+Math.min(l-1,n?Math.round(a):Math.floor(a))*t.strides[2];for(let t=0;t<d;t++){const e=h[r+t];c[y++]=e}}}}return e.tensor(c,[s,a,r,d],t.dtype)}resizeNearestNeighborBackprop(t,a,r){o([t,a],"resizeNearestNeighborBackprop");const[n,s,i,l]=a.shape,[,d,h]=t.shape,c=new Float32Array(n*s*i*l),u=this.readSync(t.dataId),p=[r&&d>1?s-1:s,r&&h>1?i-1:i],f=[r&&d>1?d-1:d,r&&h>1?h-1:h],m=p[0]/f[0],y=p[1]/f[1],g=1/m,S=1/y,I=2*Math.ceil(g)+2,b=2*Math.ceil(S)+2;for(let e=0;e<n;e++){const n=e*a.strides[0];for(let e=0;e<s;e++){const o=n+e*a.strides[1],p=Math.floor(e*g),f=Math.floor(p-I/2);for(let p=0;p<i;p++){const g=o+p*a.strides[2],k=Math.floor(p*S),M=Math.floor(k-b/2);for(let a=0;a<l;a++){let o=0;for(let l=0;l<I;l++){const c=l+f;if(c<0||c>=d)continue;const g=n+c*t.strides[1],S=c*m;if(e===Math.min(s-1,r?Math.round(S):Math.floor(S)))for(let e=0;e<b;e++){const n=e+M;if(n<0||n>=h)continue;const s=g+n*t.strides[2],l=n*y;p===Math.min(i-1,r?Math.round(l):Math.floor(l))&&(o+=u[s+a])}}c[g+a]=o}}}}return e.tensor4d(c,a.shape,a.dtype)}batchNorm(t,a,r,n,s,i){o([t,a,r,s,n],"batchNorm");const l=this.readSync(t.dataId),d=this.readSync(a.dataId),h=this.readSync(r.dataId),c=s?this.readSync(s.dataId):new Float32Array([1]),u=n?this.readSync(n.dataId):new Float32Array([0]),p=new Float32Array(l.length),f=u.length,m=c.length,y=h.length,g=d.length;let S=0,I=0,b=0,k=0;for(let t=0;t<l.length;++t)p[t]=u[S++]+(l[t]-d[I++])*c[b++]/Math.sqrt(h[k++]+i),S>=f&&(S=0),I>=g&&(I=0),b>=m&&(b=0),k>=y&&(k=0);return e.tensor4d(p,t.shape)}localResponseNormalization4D(t,a,r,n,s){o(t,"localResponseNormalization4D");const i=t.shape[3],l=i-1,d=this.readSync(t.dataId),h=t.size,c=new Float32Array(h);function u(t){const e=t%i;let r=t-e+Math.max(0,e-a);const n=t-e+Math.min(e+a,l);let s=0;for(;r<=n;r++){const t=d[r];s+=t*t}return s}for(let t=0;t<h;t++){const e=u(t),a=d[t]*Math.pow(r+n*e,-s);c[t]=a}return e.tensor4d(c,t.shape)}LRNGrad(t,a,r,n,s,i,l){o(t,"LRNGrad");const d=t.shape[3],h=this.readSync(t.dataId),c=this.readSync(a.dataId),u=this.readSync(r.dataId),p=new Float32Array(t.size),f=t.size;for(let t=0;t<f;t++){const e=t%d,a=t-e+Math.max(0,e-n),r=t-e+Math.min(d,e+n+1);let o=0;for(let t=a;t<r;t++)o+=Math.pow(c[t],2);o=i*o+s;for(let e=a;e<r;e++){let a=-2*i*l*c[e]*u[t]/o;t===e&&(a+=Math.pow(o,-l)),a*=h[t],p[e]+=a}}return e.tensor4d(p,t.shape)}multinomial(t,r,n,s){o(t,"multinomial");const i=r?t:e.softmax(t),l=i.shape[0],d=i.shape[1],h=e.zeros([l,n],"int32"),c=this.readSync(h.dataId),u=this.readSync(i.dataId);for(let t=0;t<l;++t){const e=t*d,r=new Float32Array(d-1);r[0]=u[e];for(let t=1;t<r.length;++t)r[t]=r[t-1]+u[e+t];const o=a.alea(s.toString()),i=t*n;for(let t=0;t<n;++t){const e=o();c[i+t]=r.length;for(let a=0;a<r.length;a++)if(e<r[a]){c[i+t]=a;break}}}return h}oneHot(t,a,r,n){o(t,"oneHot");const s=new Float32Array(t.size*a);s.fill(n);const i=this.readSync(t.dataId);for(let e=0;e<t.size;++e)i[e]>=0&&i[e]<a&&(s[e*a+i[e]]=r);return e.tensor2d(s,[t.size,a],"int32")}nonMaxSuppression(t,e,a,r,n){o(t,"nonMaxSuppression");const s=this.readSync(t.dataId),i=this.readSync(e.dataId);return d(s,i,a,r,n)}fft(t){return this.fftBatch(t,!1)}ifft(t){return this.fftBatch(t,!0)}fftBatch(t,a){const r=t.shape[0],n=t.shape[1],s=e.buffer(t.shape,"float32"),o=e.buffer(t.shape,"float32"),i=e.real(t).as2D(r,n),l=e.imag(t).as2D(r,n);for(let t=0;t<r;t++){const r=i.slice([t,0],[1,n]),d=l.slice([t,0],[1,n]),h=e.complex(r,d),c=this.readSync(this.fftImpl(h,a).dataId);for(let a=0;a<n;a++){const r=e.backend_util.getComplexWithIndex(c,a);s.values[t*n+a]=r.real,o.values[t*n+a]=r.imag}}return e.complex(s.toTensor(),o.toTensor()).as2D(r,n)}fftImpl(t,a){const r=t.as1D(),n=r.size;if(this.isExponentOf2(n)){let s=this.fftRadix2(r,n,a).as2D(t.shape[0],t.shape[1]);return a&&(s=e.complex(e.real(s).div(e.scalar(n)),e.imag(s).div(e.scalar(n)))),s}{const r=this.readSync(t.dataId),s=this.fourierTransformByMatmul(r,n,a),o=e.backend_util.splitRealAndImagArrays(s);return e.complex(o.real,o.imag).as2D(t.shape[0],t.shape[1])}}isExponentOf2(t){return 0==(t&t-1)}fftRadix2(t,a,r){if(1===a)return t;const n=this.readSync(t.dataId),s=a/2,o=e.backend_util.complexWithEvenIndex(n);let i=e.complex(o.real,o.imag).as1D();const l=e.backend_util.complexWithOddIndex(n);let d=e.complex(l.real,l.imag).as1D();i=this.fftRadix2(i,s,r),d=this.fftRadix2(d,s,r);const h=e.backend_util.exponents(a,r),c=e.complex(h.real,h.imag).mul(d),u=i.add(c),p=i.sub(c),f=e.real(u).concat(e.real(p)),m=e.imag(u).concat(e.imag(p));return e.complex(f,m).as1D()}fourierTransformByMatmul(t,a,r){const n=new Float32Array(2*a);for(let s=0;s<a;s++){let o=0,i=0;for(let n=0;n<a;n++){const l=e.backend_util.exponent(s*n,a,r),d=e.backend_util.getComplexWithIndex(t,n);o+=d.real*l.real-d.imag*l.imag,i+=d.real*l.imag+d.imag*l.real}r&&(o/=a,i/=a),e.backend_util.assignToTypedArray(n,o,i,s)}return n}depthToSpace(t,a,r){e.util.assert("NHWC"===r,()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${r}`),e.util.assert(a>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${a}`);const n=t.shape[0],s=t.shape[1],o=t.shape[2],i=t.shape[3],l=s*a,d=o*a,h=i/(a*a),c=this.readSync(t.dataId),u=new Float32Array(n*l*d*h);let p=0;for(let t=0;t<n;++t)for(let e=0;e<l;++e){const r=Math.floor(e/a),n=e%a;for(let e=0;e<d;++e){const l=Math.floor(e/a),d=(n*a+e%a)*h;for(let e=0;e<h;++e){const a=e+d+i*(l+o*(r+s*t));u[p++]=c[a]}}}return e.tensor4d(u,[n,l,d,h])}broadcastedBinaryOp(t,a,r,n){const s=e.backend_util.assertAndGetBroadcastShape(t.shape,a.shape),o=e.buffer(s,r),i=this.readSync(t.dataId),l=this.readSync(a.dataId),d=e.backend_util.getBroadcastDims(t.shape,s),h=e.backend_util.getBroadcastDims(a.shape,s),c=o.values;if(d.length+h.length===0)for(let t=0;t<c.length;++t)c[t]=n(i[t%i.length],l[t%l.length]);else{const e=this.bufferSync(t),r=this.bufferSync(a);for(let s=0;s<c.length;++s){const u=o.indexToLoc(s),p=u.slice(-t.rank);d.forEach(t=>p[t]=0);const f=e.locToIndex(p),m=u.slice(-a.rank);h.forEach(t=>m[t]=0);const y=r.locToIndex(m);c[s]=n(i[f],l[y])}}return o.toTensor()}broadcastedBinaryComplexOp(t,a,r){const n=e.backend_util.assertAndGetBroadcastShape(t.shape,a.shape),s=e.buffer(n,"float32"),o=e.buffer(n,"float32"),i=this.readSync(t.dataId),l=this.readSync(a.dataId),d=e.backend_util.getBroadcastDims(t.shape,n),h=e.backend_util.getBroadcastDims(a.shape,n),c=s.values,u=o.values;if(d.length+h.length===0)for(let t=0;t<c.length;t++){const e=t%i.length,a=t%l.length,n=r(i[2*e],i[2*e+1],l[2*a],l[2*a+1]);c[t]=n.real,u[t]=n.imag}else{const e=this.bufferSync(this.data.get(t.dataId).complexTensors.real),n=this.bufferSync(this.data.get(a.dataId).complexTensors.real);for(let o=0;o<c.length;o++){const p=s.indexToLoc(o),f=p.slice(-t.rank);d.forEach(t=>f[t]=0);const m=e.locToIndex(f),y=p.slice(-a.rank);h.forEach(t=>y[t]=0);const g=n.locToIndex(y),S=r(i[2*m],i[2*m+1],l[2*g],l[2*g+1]);c[o]=S.real,u[o]=S.imag}}return this.complex(s.toTensor(),o.toTensor())}split(t,e,a){return h(t,e,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}cropAndResize(t,a,r,n,s,o){const[i,l,d,h]=t.shape,c=a.shape[0],[u,p]=n,f=e.buffer([c,u,p,h],"float32"),m=this.readSync(a.dataId),y=this.readSync(r.dataId),g=this.readSync(t.dataId),S=t.strides,I=f.strides;for(let t=0;t<c;t++){const e=4*t,a=m[e],r=m[e+1],n=m[e+2],c=m[e+3],b=y[t];if(b>=i)continue;const k=u>1?(n-a)*(l-1)/(u-1):0,M=p>1?(c-r)*(d-1)/(p-1):0;for(let e=0;e<u;e++){const i=u>1?a*(l-1)+e*k:.5*(a+n)*(l-1);if(i<0||i>l-1)for(let a=0;a<p;a++)for(let r=0;r<h;r++){const n=r+a*I[2]+e*I[1]+t*I[0];f.values[n]=o}else if("bilinear"===s){const a=Math.floor(i),n=Math.ceil(i),s=i-a;for(let i=0;i<p;i++){const l=p>1?r*(d-1)+i*M:.5*(r+c)*(d-1);if(l<0||l>d-1){for(let a=0;a<h;a++){const r=a+i*I[2]+e*I[1]+t*I[0];f.values[r]=o}continue}const u=Math.floor(l),m=Math.ceil(l),y=l-u;for(let r=0;r<h;r++){let o=r+u*S[2]+a*S[1]+b*S[0];const l=g[o];o=r+m*S[2]+a*S[1]+b*S[0];const d=g[o];o=r+u*S[2]+n*S[1]+b*S[0];const h=g[o];o=r+m*S[2]+n*S[1]+b*S[0];const c=l+(d-l)*y,p=h+(g[o]-h)*y;o=r+i*I[2]+e*I[1]+t*I[0],f.values[o]=c+(p-c)*s}}}else for(let a=0;a<p;++a){const n=p>1?r*(d-1)+a*M:.5*(r+c)*(d-1);if(n<0||n>d-1){for(let r=0;r<h;r++){const n=r+a*I[2]+e*I[1]+t*I[0];f.values[n]=o}continue}const s=Math.round(n),l=Math.round(i);for(let r=0;r<h;r++){const n=r+s*S[2]+l*S[1]+b*S[0],o=r+a*I[2]+e*I[1]+t*I[0];f.values[o]=g[n]}}}}return f.toTensor()}sparseToDense(t,a,r,n){const{sliceRank:s,numUpdates:o,sliceSize:i,strides:l,outputSize:d}=e.backend_util.calculateShapes(a,t,r);return this.scatter(t,a,r,d,i,o,s,l,n,!1)}gatherND(t,a){const r=a.shape,n=r[r.length-1],[s,o,i,l]=e.backend_util.prepareAndValidate(t,a);if(0===o)return e.tensor([],s,t.dtype);const d=new e.TensorBuffer([o,i],t.dtype),h=this.readSync(a.dataId),c=this.readSync(t.dataId);for(let e=0;e<o;e++){const a=[];let r=0;for(let t=0;t<n;t++){const s=h[e*n+t];r+=s*l[t],a.push(s)}if(r<0||r>=t.size/i)throw new Error(`Invalid indices: ${a} does not index into ${t.shape}`);for(let t=0;t<i;t++)d.values[e*i+t]=c[r*i+t]}return d.toTensor().reshape(s)}scatterND(t,a,r){const{sliceRank:n,numUpdates:s,sliceSize:o,strides:i,outputSize:l}=e.backend_util.calculateShapes(a,t,r),d=e.scalar(0);return this.scatter(t,a,r,l,o,s,n,i,d,!0)}fill(t,a,r){r=r||e.util.inferDtype(a);const n=e.util.getArrayFromDType(r,e.util.sizeFromShape(t));return n.fill(a),e.engine().makeTensor(n,t,r,this)}onesLike(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)}zerosLike(t){const a=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(a,t.shape,t.dtype)}linspace(t,a,r){return e.backend_util.linspaceImpl(t,a,r)}scatter(t,a,r,n,s,o,i,l,d,h){const c=[n/s,s],u=this.readSync(t.dataId),p=this.readSync(a.dataId);if(0===n)return e.tensor([],r,a.dtype);const f=new e.TensorBuffer(c,a.dtype);f.values.fill(this.readSync(d.dataId)[0]);for(let t=0;t<o;t++){const e=[];let o=0;for(let a=0;a<i;a++){const r=u[t*i+a];e.push(r),o+=r*l[a]}if(o<0||o>=n/s)throw new Error(`Invalid indices: ${e} does not index into ${r}`);for(let e=0;e<s;e++)h?f.values[o*s+e]+=p[t*s+e]:f.values[o*s+e]=0===a.rank?p[0]:p[t*s+e]}return f.toTensor().reshape(r)}}function y(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:({inputs:a,backend:r})=>{const{a:n,b:s}=a,i=r;o([n,s],t);const l=i.data.get(n.dataId).values,d=i.data.get(s.dataId).values,[h,c]=e(n.shape,s.shape,l,d,n.dtype);return{dataId:i.write(h,c,n.dtype),shape:c,dtype:n.dtype}}}}function g(t){return(a,r,n,s,o)=>{const i=e.backend_util.assertAndGetBroadcastShape(a,r),l=i.length,d=e.util.computeStrides(i),h=e.util.sizeFromShape(i),c=e.util.getTypedArrayFromDType(o,h),u=a.length,p=r.length,f=e.util.computeStrides(a),m=e.util.computeStrides(r),y=e.backend_util.getBroadcastDims(a,i),g=e.backend_util.getBroadcastDims(r,i);if(y.length+g.length===0)for(let e=0;e<c.length;++e)c[e]=t(n[e%n.length],s[e%s.length]);else for(let a=0;a<c.length;++a){const r=e.util.indexToLoc(a,l,d),o=r.slice(-u);y.forEach(t=>o[t]=0);const i=e.util.locToIndex(o,u,f),h=r.slice(-p);g.forEach(t=>h[t]=0);const S=e.util.locToIndex(h,p,m);c[a]=t(n[i],s[S])}return[c,i]}}const S=g((t,e)=>t/e),I=y(e.Div,S),b={kernelName:e.Max,backendName:"cpu",kernelFunc:({inputs:t,attrs:a,backend:s})=>{const{x:i}=t,{reductionIndices:l}=a,d=s;let h=i.shape;const c=h.length;let u=e.util.parseAxisParam(l,h);const p=e.backend_util.getAxesPermutation(u,c);let f=d.data.get(i.dataId).values;if(null!=p){const t=new Array(c);for(let e=0;e<t.length;e++)t[e]=h[p[e]];f=n(f,h,i.dtype,p,t),u=e.backend_util.getInnerMostAxes(u.length,c),h=t}o(i,"max"),e.backend_util.assertAxesAreInnerMostDims("max",u,c);const[m,y]=e.backend_util.computeOutAndReduceShapes(h,u),g=r(f,e.util.sizeFromShape(y),m,i.dtype);return{dataId:d.write(g,m,i.dtype),shape:m,dtype:i.dtype}}};const k={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:({inputs:t,attrs:a,backend:r})=>{const{x:n}=t,{filterSize:s,strides:d,pad:h,includeBatchInIndex:c}=a,u=r;o(n,"MaxPoolWithArgmax");const p=u.data.get(n.dataId).values,f=e.backend_util.computePool2DInfo(n.shape,s,d,[1,1],h),[m,y]=function(t,a,r,n,s){const o=i(t,0,r,e.util.computeStrides(a),s,"max"),d=l(t,a,r,s,!0,n);return[o.values,d.values]}(p,n.shape,n.dtype,c,f),g=u.write(m,f.outShape,n.dtype),S=u.write(y,f.outShape,n.dtype);return[{dataId:g,shape:f.outShape,dtype:n.dtype},{dataId:S,shape:f.outShape,dtype:"int32"}]}},M=e.kernel_impls.nonMaxSuppressionV5,x={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:({inputs:t,backend:e,attrs:a})=>{const{boxes:r,scores:n}=t,{maxOutputSize:s,iouThreshold:i,scoreThreshold:l,softNmsSigma:d}=a,h=e;o(r,"NonMaxSuppressionWithScore");const c=h.data.get(r.dataId).values,u=h.data.get(n.dataId).values,p=s,f=i,m=l,y=d,{selectedIndices:g,selectedScores:S}=M(c,u,p,f,m,y);return[g,S]}},A={kernelName:e.Square,backendName:"cpu",kernelFunc:({inputs:t,backend:e})=>{const{x:a}=t,r=e;o(a,"square");const n=r.data.get(a.dataId).values,s=new Float32Array(n.length);for(let t=0;t<n.length;++t){const e=n[t];s[t]=e*e}return{dataId:r.write(s,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},F=g((t,e)=>{const a=t-e;return a*a}),v=[x,A,y(e.SquaredDifference,F),I,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:({inputs:t,attrs:e,backend:a})=>{const{x:r}=t,{perm:s}=e,i=a;o(r,"transpose");const l=r.shape.length,d=new Array(l);for(let t=0;t<d.length;t++)d[t]=r.shape[s[t]];const h=n(i.data.get(r.dataId).values,r.shape,r.dtype,s,d);return{dataId:i.write(h,d,r.dtype),shape:d,dtype:r.dtype}}},k,b];for(const t of v)e.registerKernel(t);e.registerBackend("cpu",()=>new m,1),t.MathBackendCPU=m,t.shared=s,t.version_cpu="2.0.1",Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=tf-backend-cpu.es2017.min.js.map

@@ -17,3 +17,3 @@ /**

*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,r){"use strict";function a(t,r,a,n){for(var o=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(a)),i=0;i<o.length;++i){for(var s=i*r,d=t[s],h=0;h<r;++h){var p=t[s+h];p>d&&(d=p)}o[i]=d}return o}function n(t,r,a,n,o){for(var i=r.length,s=e.util.sizeFromShape(r),d=e.util.computeStrides(r),h=e.util.computeStrides(o),p=e.util.getTypedArrayFromDType(a,e.util.sizeFromShape(o)),u=0;u<s;++u){for(var f=e.util.indexToLoc(u,i,d),l=new Array(f.length),c=0;c<l.length;c++)l[c]=f[n[c]];p[e.util.locToIndex(l,i,h)]=t[u]}return p}var o={__proto__:null,maxImpl:a,transposeImpl:n},i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function s(t,e,r,a){return new(r||(r=Promise))((function(n,o){function i(t){try{d(a.next(t))}catch(t){o(t)}}function s(t){try{d(a.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,s)}d((a=a.apply(t,e||[])).next())}))}function d(t,e){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){i.label=o[1];break}if(6===o[0]&&i.label<n[1]){i.label=n[1],n=o;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(o);break}n[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function h(t,r){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&e.util.assert("complex64"!==t.dtype,(function(){return r+" does not support complex64 tensors in the CPU backend."}))}))}function p(t,r,a,n,o,i){for(var s=o.strideHeight,d=o.strideWidth,h=o.dilationHeight,p=o.dilationWidth,u=o.effectiveFilterHeight,f=o.effectiveFilterWidth,l=o.padInfo.top,c=o.padInfo.left,v="max"===i?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(o.outShape,a),m=y.values,g=o.outShape[1]*o.outShape[2]*o.outShape[3],S=o.outShape[2]*o.outShape[3],I=o.outShape[3],b=0;b<o.batchSize;++b)for(var k=b*g,M=b*n[0],x=0;x<o.inChannels;++x)for(var A=0;A<o.outHeight;++A)for(var F=A*s-l,w=Math.max(0,F),T=Math.min(o.inHeight,u+F),D=k+A*S,z=0;z<o.outWidth;++z){for(var _=z*d-c,W=Math.max(0,_),O=Math.min(o.inWidth,f+_),H=v,N=0,B=0,C=w;C<T;C+=h){for(var E=M+C*n[1],P=W;P<O;P+=p){var R=t[E+P*n[2]+x];"max"===i&&R>H?H=R:"avg"===i&&(N+=R,B++)}if(isNaN(H))break}m[D+z*I+x]="avg"===i?N/B:H}return y}function u(t,r,a,n,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);for(var s=e.buffer(n.outShape,"int32"),d=n.strideHeight,h=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,f=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.top,v=n.padInfo.left,y=e.buffer(r,a,t),m=0;m<n.batchSize;++m)for(var g=0;g<n.inChannels;++g)for(var S=0;S<n.outHeight;++S){for(var I=S*d-c,b=I;b<0;)b+=p;for(var k=Math.min(n.inHeight,f+I),M=0;M<n.outWidth;++M){for(var x=M*h-v,A=x;A<0;)A+=u;for(var F=Math.min(n.inWidth,l+x),w=Number.NEGATIVE_INFINITY,T=-1,D=b;D<k;D+=p)for(var z=D-I,_=A;_<F;_+=u){var W=_-x,O=y.get(m,D,_,g);O>w&&(w=O,T=o?i?((m*n.inHeight+D)*n.inWidth+_)*n.inChannels+g:(D*n.inWidth+_)*n.inChannels+g:z*l+W)}s.set(T,m,S,M,g)}}return s}var f=e.kernel_impls.nonMaxSuppressionV3,l=e.kernel_impls.split,c=e.kernel_impls.tile,v=e.kernel_impls.topkImpl,y=e.kernel_impls.whereImpl;function m(t,e,r,a){if("linear"===r)return t.linear(e);if("relu"===r)return t.relu(e);if("elu"===r)return t.elu(e);if("relu6"===r)return t.relu6(e);if("prelu"===r)return t.prelu(e,a);throw new Error("Activation "+r+" has not been implemented for the CPU backend.")}var g=function(t){function a(){var r=t.call(this)||this;return r.blockSize=48,r.firstUse=!0,r.data=new e.DataStorage(r,e.engine()),r}return function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(a,t),a.prototype.write=function(t,r,a){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var n={};return this.data.set(n,{values:t,dtype:a}),n},a.prototype.move=function(t,e,r,a){this.data.set(t,{values:e,dtype:a})},a.prototype.numDataIds=function(){return this.data.numDataIds()},a.prototype.read=function(t){return s(this,void 0,void 0,(function(){return d(this,(function(e){return[2,this.readSync(t)]}))}))},a.prototype.readSync=function(t){var r=this.data.get(t),a=r.dtype,n=r.complexTensors;if("complex64"===a){var o=this.readSync(n.real.dataId),i=this.readSync(n.imag.dataId);return e.backend_util.mergeRealAndImagArrays(o,i)}return this.data.get(t).values},a.prototype.bufferSync=function(t){var r=this.readSync(t.dataId),a=r;if("string"===t.dtype)try{a=r.map((function(t){return e.util.decodeString(t)}))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,a)},a.prototype.makeOutput=function(t,r,a){var n=this.write(t,r,a);return e.engine().makeTensorFromDataId(n,r,a,this)},a.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},a.prototype.time=function(t){return s(this,void 0,void 0,(function(){var r;return d(this,(function(a){return r=e.util.now(),t(),[2,{kernelMs:e.util.now()-r}]}))}))},a.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},a.prototype.complex=function(t,r){var a=this.makeOutput(null,t.shape,"complex64");return this.data.get(a.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(r.clone())},a},a.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},a.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},a.prototype.slice=function(t,r,a){if(h(t,"slice"),e.slice_util.isSliceContinous(t.shape,r,a)){var n=e.slice_util.computeFlatOffset(r,t.strides),o=e.util.sizeFromShape(a),i=this.readSync(t.dataId);return e.tensor(i.subarray(n,n+o),a,t.dtype)}for(var s=e.buffer(a,t.dtype),d=this.bufferSync(t),p=0;p<s.size;++p){var u=s.indexToLoc(p).map((function(t,e){return t+r[e]}));s.values[p]=d.get.apply(d,u)}return s.toTensor()},a.prototype.stridedSlice=function(t,r,a,n){h(t,"stridedSlice");var o=e.slice_util.computeOutShape(r,a,n);if(o.some((function(t){return 0===t})))return e.tensor([],o);for(var i=e.buffer(o,t.dtype),s=this.bufferSync(t),d=0;d<i.size;d++){for(var p=i.indexToLoc(d),u=new Array(p.length),f=0;f<u.length;f++)u[f]=p[f]*n[f]+r[f];i.set.apply(i,[s.get.apply(s,u)].concat(p))}return i.toTensor()},a.prototype.diag=function(t){for(var r=this.readSync(t.dataId),a=e.buffer([t.size,t.size],t.dtype),n=a.values,o=0;o<r.length;o++)n[o*t.size+o]=r[o];return a.toTensor()},a.prototype.unstack=function(t,e){for(var r=t.shape[e],a=new Array(t.rank-1),n=0,o=0;o<t.rank;o++)o!==e&&(a[n++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var d=new Array(r);for(o=0;o<d.length;o++)i[e]=o,d[o]=this.slice(t,i,s).reshape(a);return d},a.prototype.reverse=function(t,r){h(t,"reverse");for(var a=e.buffer(t.shape,t.dtype),n=this.bufferSync(t),o=function(e){var o=a.indexToLoc(e),i=o.slice();r.forEach((function(e){return i[e]=t.shape[e]-1-i[e]})),a.set.apply(a,[n.get.apply(n,i)].concat(o))},i=0;i<a.size;i++)o(i);return a.toTensor()},a.prototype.concat=function(t,r){var a=this;if("complex64"===t[0].dtype){var n=t.map((function(t){return e.real(t)})),o=t.map((function(t){return e.imag(t)}));return e.complex(this.concat(n,r),this.concat(o,r))}var i=t.map((function(t){var a=e.util.sizeFromShape(t.shape.slice(r));return t.as2D(-1,a)})),s=e.backend_util.computeOutShape(i.map((function(t){return t.shape})),1),d=e.buffer(s,t[0].dtype).values;if(1===i[0].shape[0]){var h=0;i.forEach((function(t){d.set(a.readSync(t.dataId),h),h+=t.size}))}else{var p=0;i.forEach((function(t){for(var e=a.readSync(t.dataId),r=0,n=0;n<t.shape[0];++n)for(var o=n*s[1]+p,i=0;i<t.shape[1];++i)d[o+i]=e[r++];p+=t.shape[1]}))}var u=e.backend_util.computeOutShape(t.map((function(t){return t.shape})),r);return e.tensor(d,u,t[0].dtype)},a.prototype.neg=function(t){return h(t,"neg"),this.multiply(e.scalar(-1),t)},a.prototype.add=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t+r,imag:e+a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t+e}))},a.prototype.addN=function(t){var r=this;h(t,"addN");for(var a=t.map((function(t){return r.readSync(t.dataId)})),n=e.buffer(t[0].shape,t[0].dtype),o=n.values,i=0;i<t.length;i++)for(var s=a[i],d=0;d<o.length;d++)o[d]+=s[d];return n.toTensor()},a.prototype.softmax=function(t,r){var a=e.util.parseAxisParam([r],t.shape),n=e.max(t,a),o=e.backend_util.expandShapeToKeepDim(n.shape,a),i=this.subtract(t,n.reshape(o)),s=this.exp(i),d=this.sum(s,a).reshape(o);return e.div(s,d)},a.prototype.subtract=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t-r,imag:e-a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t-e}))},a.prototype.pow=function(t,e){return h([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.pow(t,e)}))},a.prototype.batchMatMul=function(t,r,a,n){h([t,r],"matMul");for(var o=a?t.shape[1]:t.shape[2],i=a?t.shape[2]:t.shape[1],s=n?r.shape[1]:r.shape[2],d=t.shape[0],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=a?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],l=f[0],c=f[1],v=f[2],y=n?[1,r.strides[1],r.strides[0]]:[r.strides[1],1,r.strides[0]],m=y[0],g=y[1],S=y[2],I=i*s,b=e.buffer([d,i,s],t.dtype),k=b.values,M=this.blockSize,x=0;x<d;x++)for(var A=0;A<i;A+=M)for(var F=0;F<s;F+=M)for(var w=0;w<o;w+=M)for(var T=Math.min(A+M,i),D=Math.min(F+M,s),z=Math.min(w+M,o),_=A;_<T;_++)for(var W=F;W<D;W++){for(var O=0,H=w;H<z;H++)O+=p[x*l+_*c+H*v]*u[H*m+W*g+x*S];k[x*I+(_*s+W)]+=O}return b.toTensor()},a.prototype.fusedBatchMatMul=function(t){var e=t.a,r=t.b,a=t.transposeA,n=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,d=this.batchMatMul(e,r,a,n);return o&&(d=this.add(d,o)),i&&(d=m(this,d,i,s)),d},a.prototype.multiply=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t*r-e*a,imag:t*a+e*r}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t*e}))},a.prototype.floorDiv=function(t,e){h([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(function(t,e){return Math.floor(t/e)}))},a.prototype.sum=function(t,r){h(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=0,v=0;v<d;++v)c+=u[l+v];p[f]=c}return s},a.prototype.prod=function(t,r){h(t,"sum");for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=1,v=0;v<d;++v)c*=u[l+v];p[f]=c}return s},a.prototype.unsortedSegmentSum=function(t,r,a){h(t,"unsortedSegmentSum");for(var n=[],o=t.rank-r.rank,i=0;i<o;++i)r=r.expandDims(i+1);for(i=0;i<a;++i){var s=e.scalar(i,"int32"),d=e.equal(s,r).asType("float32").mul(t).sum(0);n.push(d)}return e.stack(n)},a.prototype.argMin=function(t,r){h(t,"argMin");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMin",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m<c&&(c=m,v=y)}p[f]=v}return s},a.prototype.argMax=function(t,r){h(t,"argMax");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMax",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m>c&&(c=m,v=y)}p[f]=v}return s},a.prototype.cumsum=function(t,r,a,n){if(h(t,"cumsum"),r!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+r);for(var o=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,o),s=this.readSync(i.dataId),d=this.readSync(t.dataId),p=t.shape[t.rank-1],u=n?function(t,e){return t+p-e-1}:function(t,e){return t+e},f=0;f<d.length;f+=p)for(var l=0;l<p;l++){var c=u(f,l);if(0===l)s[c]=a?0:d[c];else{var v=u(f,l-1);s[c]=a?d[v]+s[v]:d[c]+s[v]}}return i},a.prototype.equal=function(t,e){return h([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t===e?1:0}))},a.prototype.notEqual=function(t,e){return h([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t!==e?1:0}))},a.prototype.less=function(t,e){return h([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<e?1:0}))},a.prototype.lessEqual=function(t,e){return h([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<=e?1:0}))},a.prototype.greater=function(t,e){return h([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>e?1:0}))},a.prototype.greaterEqual=function(t,e){return h([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},a.prototype.logicalNot=function(t){h(t,"logicalNot");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)r[a]=e[a]?0:1;return this.makeOutput(r,t.shape,"bool")},a.prototype.logicalAnd=function(t,e){return h([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t&&e}))},a.prototype.logicalOr=function(t,e){return h([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t||e}))},a.prototype.select=function(t,r,a){h([t,r,a],"select");for(var n=this.readSync(t.dataId),o=this.readSync(r.dataId),i=this.readSync(a.dataId),s=e.zeros(r.shape,e.upcastType(r.dtype,a.dtype)),d=this.readSync(s.dataId),p=0,u=0===t.rank||t.rank>1||1===r.rank?1:e.util.sizeFromShape(r.shape.slice(1)),f=0;f<n.length;f++)for(var l=0;l<u;l++)1===n[f]?d[p++]=o[f]:d[p++]=i[f];return s},a.prototype.where=function(t){h([t],"where");var e=this.readSync(t.dataId);return y(t.shape,e)},a.prototype.topk=function(t,e,r){h(t,"topk");var a=this.readSync(t.dataId);return v(a,t.shape,t.dtype,e,r)},a.prototype.min=function(t,r){h(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];v<l&&(l=v)}d[u]=l}return i},a.prototype.minimum=function(t,e){return h([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.min(t,e)}))},a.prototype.mod=function(t,e){return h([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t%e;return t<0&&e<0||t>=0&&e>=0?r:(r+e)%e}))},a.prototype.maximum=function(t,e){return h([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},a.prototype.all=function(t,r){h(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l&&v}d[u]=l}return i},a.prototype.any=function(t,r){h(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l||v}d[u]=l}return i},a.prototype.squaredDifference=function(t,e){return h([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t-e;return r*r}))},a.prototype.ceil=function(t){h(t,"ceil");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.ceil(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.floor=function(t){h(t,"floor");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.floor(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.sign=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)e[a]<0?r[a]=-1:e[a]>0?r[a]=1:r[a]=0;return this.makeOutput(r,t.shape,"float32")},a.prototype.isNaN=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isNaN(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isInf=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Math.abs(e[a])===1/0&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isFinite=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isFinite(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.round=function(t){h(t,"round");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=Math.floor(e[a]);e[a]-n<.5?r[a]=Math.floor(e[a]):e[a]-n>.5?r[a]=Math.ceil(e[a]):r[a]=n%2==0?n:n+1}return this.makeOutput(r,t.shape,"float32")},a.prototype.exp=function(t){h(t,"exp");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.exp(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.expm1=function(t){h(t,"expm1");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.expm1(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.log=function(t){h(t,"log");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.log1p=function(t){h(t,"log1p");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log1p(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.sqrt=function(t){h(t,"sqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.rsqrt=function(t){h(t,"rsqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=1/Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.reciprocal=function(t){h(t,"reciprocal");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=1/e[a];return this.makeOutput(r,t.shape,"float32")},a.prototype.linear=function(t){return t},a.prototype.relu=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.max(0,n[o]);return r},a.prototype.relu6=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.min(Math.max(0,n[o]),6);return r},a.prototype.prelu=function(t,e){return h([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return t<0?e*t:t}))},a.prototype.elu=function(t){h(t,"elu");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var n=r[a];e[a]=n>=0?n:Math.exp(n)-1}return this.makeOutput(e,t.shape,"float32")},a.prototype.eluDer=function(t,e){h([t,e],"eluDer");for(var r=new Float32Array(e.size),a=this.readSync(e.dataId),n=this.readSync(t.dataId),o=0;o<a.length;++o){var i=a[o];r[o]=i>=1?n[o]:n[o]*(i+1)}return this.makeOutput(r,e.shape,"float32")},a.prototype.selu=function(t){h(t,"selu");for(var r=e.backend_util.SELU_SCALEALPHA,a=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),o=this.readSync(t.dataId),i=0;i<o.length;++i){var s=o[i];n[i]=s>=0?a*s:r*(Math.exp(s)-1)}return this.makeOutput(n,t.shape,"float32")},a.prototype.clip=function(t,e,r){h(t,"clip");for(var a=new Float32Array(t.size),n=this.readSync(t.dataId),o=0;o<n.length;++o){var i=n[o];a[o]=i>r?r:i<e?e:i}return this.makeOutput(a,t.shape,"float32")},a.prototype.abs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.abs(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<t.size;++a){var n=r[2*a],o=r[2*a+1];e[a]=Math.hypot(n,o)}return this.makeOutput(e,t.shape,"float32")},a.prototype.int=function(t){h(t,"int");for(var e=new Int32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=r[a];return this.makeOutput(e,t.shape,"int32")},a.prototype.sigmoid=function(t){h(t,"sigmoid");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=1/(1+Math.exp(-r[a]));return this.makeOutput(e,t.shape,"float32")},a.prototype.softplus=function(t){h(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n]>-e,i=a[n]<e,s=Math.exp(a[n]),d=void 0;d=i?s:o?a[n]:Math.log(1+s),r[n]=d}return this.makeOutput(r,t.shape,"float32")},a.prototype.sin=function(t){h(t,"sin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cos=function(t){h(t,"cos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tan=function(t){h(t,"tan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.tan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.asin=function(t){h(t,"asin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acos=function(t){h(t,"acos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan=function(t){h(t,"atan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan2=function(t,e){return h([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.atan2(t,e)}))},a.prototype.sinh=function(t){h(t,"sinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cosh=function(t){h(t,"cosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tanh=function(t){h(t,"tanh");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n)r[n]=e.util.tanh(a[n]);return this.makeOutput(r,t.shape,"float32")},a.prototype.asinh=function(t){h(t,"asinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acosh=function(t){h(t,"acosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atanh=function(t){h(t,"atanh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atanh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.erf=function(t){h(t,"erf");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=e.backend_util.ERF_P,o=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,s=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,p=e.backend_util.ERF_A5,u=0;u<a.length;++u){var f=Math.sign(a[u]),l=Math.abs(a[u]),c=1/(1+n*l);r[u]=f*(1-((((p*c+d)*c+s)*c+i)*c+o)*c*Math.exp(-l*l))}return this.makeOutput(r,t.shape,"float32")},a.prototype.step=function(t,e){void 0===e&&(e=0),h(t,"step");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n];isNaN(o)?r[n]=NaN:r[n]=o>0?1:e}return this.makeOutput(r,t.shape,"float32")},a.prototype.fusedConv2d=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.conv2d=function(t,r,a){h([t,r],"conv2d");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u="channelsLast"===a.dataFormat,f=e.buffer(a.outShape,t.dtype),l=t.strides[0],c=u?t.strides[1]:t.strides[2],v=u?t.strides[2]:1,y=u?1:t.strides[1],m=f.strides[0],g=u?f.strides[1]:f.strides[2],S=u?f.strides[2]:1,I=u?1:f.strides[1],b=this.readSync(t.dataId),k=this.readSync(r.dataId),M=f.values,x=0;x<a.batchSize;++x)for(var A=x*l,F=x*m,w=0;w<a.outHeight;++w)for(var T=F+w*g,D=w*a.strideHeight-p,z=0;z<n;z++){var _=D+z*i;if(!(_<0||_>=a.inHeight))for(var W=z*r.strides[0],O=A+_*c,H=0;H<a.outWidth;++H)for(var N=T+H*S,B=H*a.strideWidth-d,C=0;C<o;C++){var E=B+C*s;if(!(E<0||E>=a.inWidth))for(var P=O+E*v,R=W+C*r.strides[1],q=0;q<a.inChannels;++q){for(var L=b[P+q*y],U=0;U<a.outChannels;++U)M[N+U*I]+=L*k[R+U];R+=a.outChannels}}}return f.toTensor()},a.prototype.conv3d=function(t,r,a){for(var n=a.filterDepth,o=a.filterHeight,i=a.filterWidth,s=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,p=a.padInfo.front,u=a.padInfo.left,f=a.padInfo.top,l=e.buffer(a.outShape,t.dtype),c=this.readSync(t.dataId),v=this.readSync(r.dataId),y=l.values,m=0;m<a.batchSize;++m)for(var g=m*t.strides[0],S=m*l.strides[0],I=0;I<a.outDepth;++I)for(var b=S+I*l.strides[1],k=I*a.strideDepth-p,M=0;M<n;M++){var x=k+M*s;if(!(x<0||x>=a.inDepth))for(var A=M*r.strides[0],F=g+x*t.strides[1],w=0;w<a.outHeight;++w)for(var T=b+w*l.strides[2],D=w*a.strideHeight-f,z=0;z<o;z++){var _=D+z*d;if(!(_<0||_>=a.inHeight))for(var W=A+z*r.strides[1],O=F+_*t.strides[2],H=0;H<a.outWidth;++H)for(var N=T+H*a.outChannels,B=H*a.strideWidth-u,C=0;C<i;C++){var E=B+C*h;if(!(E<0||E>=a.inWidth))for(var P=W+C*r.strides[2],R=O+E*a.inChannels,q=P,L=0;L<a.inChannels;++L){for(var U=c[R+L],j=0;j<a.outChannels;++j)y[N+j]+=U*v[q+j];q+=a.outChannels}}}}return l.toTensor()},a.prototype.conv2dDerInput=function(t,r,a){h([t,r],"conv2dDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=this.readSync(t.dataId),s=this.readSync(r.dataId),d=r.strides,p=d[0],u=d[1],f=d[2],l=a.batchSize,c=a.filterHeight,v=a.filterWidth,y=a.inChannels,m=a.inHeight,g=a.inWidth,S=a.outChannels,I=a.outHeight,b=a.outWidth,k=a.strideHeight,M=a.strideWidth,x=a.dataFormat,A=c-1-a.padInfo.top,F=v-1-a.padInfo.left,w="channelsLast"===x,T=n.strides[0],D=w?n.strides[1]:n.strides[2],z=w?n.strides[2]:1,_=w?1:n.strides[1],W=t.strides[0],O=w?t.strides[1]:t.strides[2],H=w?t.strides[2]:1,N=w?1:t.strides[1],B=0;B<l;++B)for(var C=0;C<y;++C)for(var E=0;E<m;++E)for(var P=E-A,R=Math.max(0,Math.ceil(P/k)),q=Math.min(I,(c+P)/k),L=0;L<g;++L){for(var U=L-F,j=Math.max(0,Math.ceil(U/M)),G=Math.min(b,(v+U)/M),V=0,Y=R;Y<q;++Y)for(var K=Y*k-P,J=j;J<G;++J)for(var Q=W*B+O*Y+H*J,X=p*(c-1-K)+u*(v-1-(J*M-U))+f*C,Z=0;Z<S;++Z){V+=i[Q+N*Z]*s[X+Z]}o[T*B+D*E+z*L+_*C]=V}return n.toTensor()},a.prototype.conv3dDerInput=function(t,r,a){for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],h=i[2],p=i[3],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=a.batchSize,x=a.filterDepth,A=a.filterHeight,F=a.filterWidth,w=a.inChannels,T=a.inDepth,D=a.inHeight,z=a.inWidth,_=a.outChannels,W=a.outDepth,O=a.outHeight,H=a.outWidth,N=a.strideDepth,B=a.strideHeight,C=a.strideWidth,E=x-1-a.padInfo.front,P=A-1-a.padInfo.top,R=F-1-a.padInfo.left,q=0;q<M;++q)for(var L=0;L<w;++L)for(var U=0;U<T;++U)for(var j=U-E,G=Math.max(0,Math.ceil(j/N)),V=Math.min(W,(x+j)/N),Y=0;Y<D;++Y)for(var K=Y-P,J=Math.max(0,Math.ceil(K/B)),Q=Math.min(O,(A+K)/B),X=0;X<z;++X){for(var Z=X-R,$=Math.max(0,Math.ceil(Z/C)),tt=Math.min(H,(F+Z)/C),et=0,rt=G;rt<V;++rt)for(var at=rt*N-j,nt=J;nt<Q;++nt)for(var ot=nt*B-K,it=$;it<tt;++it)for(var st=l*q+c*rt+v*nt+y*it,dt=S*(x-1-at)+I*(A-1-ot)+b*(F-1-(it*C-Z))+k*L,ht=0;ht<_;++ht){et+=u[st+ht]*m[dt+ht]}o[s*q+d*U+h*Y+p*X+L]=et}return n.toTensor()},a.prototype.conv2dDerFilter=function(t,r,a){h([t,r],"conv2dDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d="channelsLast"===a.dataFormat,p=e.buffer(a.filterShape,"float32"),u=a.padInfo.left,f=a.padInfo.top,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((f-v)/n)),m=Math.min(a.outHeight,(a.inHeight+f-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((u-g)/o)),I=Math.min(a.outWidth,(a.inWidth+u-g)/o),b=0;b<a.inChannels;++b)for(var k=0;k<a.outChannels;++k){for(var M=0,x=0;x<a.batchSize;++x)for(var A=y;A<m;++A)for(var F=v+A*n-f,w=S;w<I;++w){var T=g+w*o-u;M+=d?l.get(x,F,T,b)*c.get(x,A,w,k):l.get(x,b,F,T)*c.get(x,k,A,w)}p.set(M,v,g,b,k)}return p.toTensor()},a.prototype.conv3dDerFilter=function(t,r,a){for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,h=a.filterWidth,p=e.buffer(a.filterShape,"float32"),u=p.values,f=p.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=this.readSync(t.dataId),x=t.strides,A=x[0],F=x[1],w=x[2],T=x[3],D=a.padInfo.front,z=a.padInfo.left,_=a.padInfo.top,W=0;W<s;++W)for(var O=Math.max(0,Math.ceil((D-W)/n)),H=Math.min(a.outDepth,(a.inDepth+D-W)/n),N=W*l,B=0;B<d;++B)for(var C=Math.max(0,Math.ceil((_-B)/o)),E=Math.min(a.outHeight,(a.inHeight+_-B)/o),P=B*c+N,R=0;R<h;++R)for(var q=Math.max(0,Math.ceil((z-R)/i)),L=Math.min(a.outWidth,(a.inWidth+z-R)/i),U=R*v+P,j=0;j<a.inChannels;++j)for(var G=j*y+U,V=0;V<a.outChannels;++V){for(var Y=0,K=0;K<a.batchSize;++K)for(var J=K*A,Q=K*S,X=O;X<H;++X)for(var Z=(W+X*n-D)*F+J,$=X*I+Q,tt=C;tt<E;++tt)for(var et=(B+tt*o-_)*w+Z,rt=tt*b+$,at=q;at<L;++at){var nt=at*k+rt;Y+=M[(R+at*i-z)*T+et+j]*m[nt+V]}u[G+V]=Y}return p.toTensor()},a.prototype.fusedDepthwiseConv2D=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.depthwiseConv2D(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.depthwiseConv2D=function(t,r,a){h([t,r],"depthwiseConv2D");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u=a.outChannels/a.inChannels,f=e.buffer(a.outShape,t.dtype),l=this.readSync(t.dataId),c=this.readSync(r.dataId),v=f.values,y=0;y<a.batchSize;++y)for(var m=y*t.strides[0],g=y*f.strides[0],S=0;S<a.outHeight;++S)for(var I=g+S*f.strides[1],b=S*a.strideHeight-d,k=0;k<n;++k){var M=b+k*i;if(!(M<0||M>=a.inHeight))for(var x=k*r.strides[0],A=m+M*t.strides[1],F=0;F<a.outWidth;++F)for(var w=I+F*f.strides[2],T=F*a.strideWidth-p,D=0;D<o;++D){var z=T+D*s;if(!(z<0||z>=a.inWidth))for(var _=x+D*r.strides[1],W=A+z*a.inChannels,O=w,H=_,N=0;N<a.inChannels;++N){for(var B=l[W+N],C=0;C<u;++C)v[O+C]+=B*c[H+C];O+=u,H+=u}}}return f.toTensor()},a.prototype.depthwiseConv2DDerInput=function(t,r,a){h([t,r],"depthwiseConv2DDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],p=i[2],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=this.readSync(r.dataId),m=r.strides,g=m[0],S=m[1],I=m[2],b=a.batchSize,k=a.filterHeight,M=a.filterWidth,x=a.inChannels,A=a.inHeight,F=a.inWidth,w=a.outChannels,T=a.outHeight,D=a.outWidth,z=a.strideHeight,_=a.strideWidth,W=k-1-a.padInfo.top,O=M-1-a.padInfo.left,H=w/x,N=0;N<b;++N)for(var B=0;B<x;++B)for(var C=0;C<A;++C)for(var E=C-W,P=Math.max(0,Math.ceil(E/z)),R=Math.min(T,(k+E)/z),q=0;q<F;++q){for(var L=q-O,U=Math.max(0,Math.ceil(L/_)),j=Math.min(D,(M+L)/_),G=0,V=P;V<R;++V)for(var Y=V*z-E,K=U;K<j;++K)for(var J=l*N+c*V+v*K,Q=g*(k-1-Y)+S*(M-1-(K*_-L))+I*B,X=0;X<H;++X){G+=u[J+(B*H+X)]*y[Q+X]}o[s*N+d*C+p*q+B]=G}return n.toTensor()},a.prototype.depthwiseConv2DDerFilter=function(t,r,a){h([t,r],"depthwiseConv2DDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=e.buffer(a.filterShape,"float32"),p=a.padInfo.left,u=a.padInfo.top,f=a.outChannels/a.inChannels,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((u-v)/n)),m=Math.min(a.outHeight,(a.inHeight+u-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((p-g)/o)),I=Math.min(a.outWidth,(a.inWidth+p-g)/o),b=0;b<a.outChannels;++b){for(var k=Math.trunc(b/f),M=b%f,x=0,A=0;A<a.batchSize;++A)for(var F=y;F<m;++F)for(var w=v+F*n-u,T=S;T<I;++T){var D=g+T*o-p;x+=l.get(A,w,D,k)*c.get(A,F,T,b)}d.set(x,v,g,k,M)}return d.toTensor()},a.prototype.tile=function(t,e){return h(t,"tile"),c(this.bufferSync(t),e)},a.prototype.pad=function(t,r,a){h(t,"pad");var n=r.map((function(e,r){return e[0]+t.shape[r]+e[1]})),o=r.map((function(t){return t[0]})),i=this.bufferSync(t),s=e.buffer(n,t.dtype);0!==a&&s.values.fill(a);for(var d=0;d<t.size;d++){var p=i.indexToLoc(d),u=p.map((function(t,e){return t+o[e]}));s.set.apply(s,[i.get.apply(i,p)].concat(u))}return s.toTensor()},a.prototype.gather=function(t,r,a){h([t,r],"gather");var n=t.shape.slice(),o=this.readSync(r.dataId);n[a]=o.length;for(var i=e.buffer(n,t.dtype),s=this.bufferSync(t),d=0;d<i.size;++d){var p=i.indexToLoc(d),u=p.slice();u[a]=o[p[a]];var f=s.locToIndex(u);i.values[d]=s.values[f]}return i.toTensor()},a.prototype.batchToSpaceND=function(t,r,a){h([t],"batchToSpaceND");var n=r.reduce((function(t,e){return t*e})),o=e.backend_util.getReshaped(t.shape,r,n),i=e.backend_util.getPermuted(o.length,r.length),s=e.backend_util.getReshapedPermuted(t.shape,r,n),d=e.backend_util.getSliceBeginCoords(a,r.length),p=e.backend_util.getSliceSize(s,a,r.length);return e.transpose(t.reshape(o),i).reshape(s).slice(d,p)},a.prototype.spaceToBatchND=function(t,r,a){h([t],"spaceToBatchND");var n=r.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,a);for(var i=1+r.length;i<t.shape.length;++i)o.push([0,0]);var s=t.pad(o),d=e.backend_util.getReshaped(s.shape,r,n,!1),p=e.backend_util.getPermuted(d.length,r.length,!1),u=e.backend_util.getReshapedPermuted(s.shape,r,n,!1);return e.transpose(s.reshape(d),p).reshape(u)},a.prototype.maxPool=function(t,e){return h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()},a.prototype.maxPoolBackprop=function(t,r,a,n){h([r,a],"maxPoolBackprop");for(var o=this.readSync(r.dataId),i=e.buffer(n.outShape,r.dtype,u(o,r.shape,r.dtype,n).values),s=n.strideHeight,d=n.strideWidth,p=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,v=c-1-n.padInfo.left,y=l-1-n.padInfo.top,m=e.buffer(r.shape,"float32"),g=this.bufferSync(t),S=0;S<n.batchSize;++S)for(var I=0;I<n.inChannels;++I)for(var b=0;b<n.inHeight;++b)for(var k=0;k<n.inWidth;++k){for(var M=b-y,x=k-v,A=0,F=0;F<l;F+=p){var w=(M+F)/s;if(!(w<0||w>=n.outHeight||Math.floor(w)!==w))for(var T=0;T<c;T+=f){var D=(x+T)/d;if(!(D<0||D>=n.outWidth||Math.floor(D)!==D)){var z=l*c-1-i.get(S,w,D,I)===F*c+T?1:0;if(0!==z)A+=g.get(S,w,D,I)*z}}}m.set(A,S,b,k,I)}return m.toTensor()},a.prototype.avgPoolBackprop=function(t,r,a){h([t,r],"avgPoolBackprop");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=a.dilationHeight,p=a.dilationWidth,u=a.effectiveFilterHeight,f=a.effectiveFilterWidth,l=f-1-a.padInfo.left,c=u-1-a.padInfo.top,v=e.buffer(r.shape,"float32"),y=1/(i*s),m=this.bufferSync(t),g=0;g<a.batchSize;++g)for(var S=0;S<a.inChannels;++S)for(var I=0;I<a.inHeight;++I)for(var b=0;b<a.inWidth;++b){for(var k=I-c,M=b-l,x=0,A=0;A<u;A+=d){var F=(k+A)/n;if(!(F<0||F>=a.outHeight||Math.floor(F)!==F))for(var w=0;w<f;w+=p){var T=(M+w)/o;if(!(T<0||T>=a.outWidth||Math.floor(T)!==T))x+=m.get(g,F,T,S)}}v.set(x*y,g,I,b,S)}return v.toTensor()},a.prototype.pool3d=function(t,r,a){h(t,"pool3d");for(var n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,p=r.dilationWidth,u=r.effectiveFilterDepth,f=r.effectiveFilterHeight,l=r.effectiveFilterWidth,c=r.padInfo.front,v=r.padInfo.top,y=r.padInfo.left,m="max"===a?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=this.readSync(t.dataId),S=e.buffer(r.outShape,t.dtype),I=S.values,b=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],k=r.outShape[2]*r.outShape[3]*r.outShape[4],M=r.outShape[3]*r.outShape[4],x=r.outShape[4],A=0;A<r.batchSize;++A)for(var F=A*b,w=A*t.strides[0],T=0;T<r.inChannels;++T)for(var D=0;D<r.outDepth;++D){for(var z=D*n-c,_=z;_<0;)_+=s;for(var W=Math.min(r.inDepth,u+z),O=F+D*k,H=0;H<r.outHeight;++H){for(var N=H*o-v,B=N;B<0;)B+=d;for(var C=Math.min(r.inHeight,f+N),E=O+H*M,P=0;P<r.outWidth;++P){for(var R=P*i-y,q=R;q<0;)q+=p;for(var L=Math.min(r.inWidth,l+R),U=E+P*x,j=m,G=0,V=0,Y=_;Y<W;Y+=s){for(var K=w+Y*t.strides[1],J=B;J<C;J+=d){for(var Q=K+J*t.strides[2],X=q;X<L;X+=p){var Z=g[Q+X*t.strides[3]+T];if("max"===a&&Z>j?j=Z:"avg"===a&&(G+=Z,V++),isNaN(j))break}if(isNaN(j))break}if(isNaN(j))break}I[U+T]="avg"===a?G/V:j}}}return S.toTensor()},a.prototype.avgPool3d=function(t,e){return h(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},a.prototype.avgPool3dBackprop=function(t,r,a){h([t,r],"avgPool3dBackprop");for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,p=a.filterWidth,u=a.dilationDepth,f=a.dilationHeight,l=a.dilationWidth,c=a.effectiveFilterDepth,v=a.effectiveFilterHeight,y=a.effectiveFilterWidth,m=c-1-a.padInfo.front,g=y-1-a.padInfo.left,S=v-1-a.padInfo.top,I=e.buffer(r.shape,"float32"),b=1/(s*d*p),k=this.bufferSync(t),M=0;M<a.batchSize;++M)for(var x=0;x<a.inChannels;++x)for(var A=0;A<a.inDepth;++A)for(var F=0;F<a.inHeight;++F)for(var w=0;w<a.inWidth;++w){for(var T=A-m,D=F-S,z=w-g,_=0,W=0;W<c;W+=u){var O=(T+W)/n;if(!(O<0||O>=a.outDepth||Math.floor(O)!==O))for(var H=0;H<v;H+=f){var N=(D+H)/o;if(!(N<0||N>=a.outHeight||Math.floor(N)!==N))for(var B=0;B<y;B+=l){var C=(z+B)/i;if(!(C<0||C>=a.outWidth||Math.floor(C)!==C))_+=k.get(M,O,N,C,x)}}}I.set(_*b,M,A,F,w,x)}return I.toTensor()},a.prototype.maxPool3d=function(t,e){return h(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},a.prototype.maxPool3dPositions=function(t,r){for(var a=e.buffer(r.outShape,"int32"),n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,h=r.dilationWidth,p=r.effectiveFilterDepth,u=r.effectiveFilterHeight,f=r.effectiveFilterWidth,l=r.padInfo.front,c=r.padInfo.top,v=r.padInfo.left,y=this.bufferSync(t),m=0;m<r.batchSize;++m)for(var g=0;g<r.inChannels;++g)for(var S=0;S<r.outDepth;++S){for(var I=S*n-l,b=I;b<0;)b+=s;for(var k=Math.min(r.inDepth,p+I),M=0;M<r.outHeight;++M){for(var x=M*o-c,A=x;A<0;)A+=d;for(var F=Math.min(r.inHeight,u+x),w=0;w<r.outWidth;++w){for(var T=w*i-v,D=T;D<0;)D+=h;for(var z=Math.min(r.inWidth,f+T),_=Number.NEGATIVE_INFINITY,W=-1,O=b;O<k;O+=s)for(var H=O-I,N=A;N<F;N+=d)for(var B=N-x,C=D;C<z;C+=h){var E=C-T,P=y.get(m,O,N,C,g);P>=_&&(_=P,W=H*u*f+B*u+E)}a.set(W,m,S,M,w,g)}}}return a.toTensor()},a.prototype.maxPool3dBackprop=function(t,r,a,n){h([r,a],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(r,n),i=n.strideDepth,s=n.strideHeight,d=n.strideWidth,p=n.dilationDepth,u=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterDepth,c=n.effectiveFilterHeight,v=n.effectiveFilterWidth,y=l-1-n.padInfo.front,m=v-1-n.padInfo.left,g=c-1-n.padInfo.top,S=e.buffer(r.shape,"float32"),I=this.bufferSync(o),b=this.bufferSync(t),k=0;k<n.batchSize;++k)for(var M=0;M<n.inChannels;++M)for(var x=0;x<n.inDepth;++x)for(var A=0;A<n.inHeight;++A)for(var F=0;F<n.inWidth;++F){for(var w=x-y,T=A-g,D=F-m,z=0,_=0;_<l;_+=p){var W=(w+_)/i;if(!(W<0||W>=n.outDepth||Math.floor(W)!==W))for(var O=0;O<c;O+=u){var H=(T+O)/s;if(!(H<0||H>=n.outHeight||Math.floor(H)!==H))for(var N=0;N<v;N+=f){var B=(D+N)/d;if(!(B<0||B>=n.outWidth||Math.floor(B)!==B)){var C=l*c*v-1-I.get(k,W,H,B,M)===_*c*v+O*v+N?1:0;if(0!==C)z+=b.get(k,W,H,B,M)*C}}}}S.set(z,k,x,A,F,M)}return S.toTensor()},a.prototype.cast=function(t,r){return e.backend_util.castTensor(t,r,this)},a.prototype.reshape=function(t,r){return e.backend_util.reshapeTensor(t,r)},a.prototype.avgPool=function(t,e){return h(t,"avgPool"),h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()},a.prototype.resizeBilinear=function(t,r,a,n){h(t,"resizeBilinear");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(e.util.sizeFromShape([i,r,a,p])),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=0,y=l[0]/c[0],m=l[1]/c[1],g=0;g<i;g++)for(var S=0;S<r;S++)for(var I=y*S,b=Math.floor(I),k=I-b,M=Math.min(s-1,Math.ceil(I)),x=g*t.strides[0]+b*t.strides[1],A=g*t.strides[0]+M*t.strides[1],F=0;F<a;F++)for(var w=m*F,T=Math.floor(w),D=w-T,z=Math.min(d-1,Math.ceil(w)),_=x+T*t.strides[2],W=A+T*t.strides[2],O=x+z*t.strides[2],H=A+z*t.strides[2],N=0;N<p;N++){var B=u[_+N],C=u[W+N],E=B+(u[O+N]-B)*D,P=E+(C+(u[H+N]-C)*D-E)*k;f[v++]=P}return e.tensor(f,[i,r,a,p])},a.prototype.resizeBilinearBackprop=function(t,r,a){h([t,r],"resizeBilinearBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=[a&&u>1?i-1:i,a&&f>1?s-1:s],v=[a&&u>1?u-1:u,a&&f>1?f-1:f],y=c[0]/v[0],m=c[1]/v[1],g=this.readSync(t.dataId),S=0,I=0;I<o;I++)for(var b=I*r.strides[0],k=0;k<u;k++)for(var M=k*y,x=Math.floor(M),A=Math.min(Math.ceil(M),i-1),F=b+x*r.strides[1],w=b+A*r.strides[1],T=M-x,D=1-T,z=0;z<f;z++)for(var _=z*m,W=Math.floor(_),O=Math.min(Math.ceil(_),s-1),H=_-W,N=1-H,B=F+W*r.strides[2],C=F+O*r.strides[2],E=w+W*r.strides[2],P=w+O*r.strides[2],R=D*N,q=D*H,L=T*N,U=T*H,j=0;j<d;j++){var G=g[S++];l[B+j]+=G*R,l[C+j]+=G*q,l[E+j]+=G*L,l[P+j]+=G*U}return e.tensor4d(l,[o,s,i,d],r.dtype)},a.prototype.resizeNearestNeighbor=function(t,r,a,n){h(t,"resizeNearestNeighbor");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(i*r*a*p),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=l[0]/c[0],y=l[1]/c[1],m=0,g=0;g<i;g++)for(var S=g*t.strides[0],I=0;I<r;I++)for(var b=v*I,k=S+Math.min(s-1,n?Math.round(b):Math.floor(b))*t.strides[1],M=0;M<a;M++)for(var x=y*M,A=k+Math.min(d-1,n?Math.round(x):Math.floor(x))*t.strides[2],F=0;F<p;F++){var w=u[A+F];f[m++]=w}return e.tensor(f,[i,r,a,p],t.dtype)},a.prototype.resizeNearestNeighborBackprop=function(t,r,a){h([t,r],"resizeNearestNeighborBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=this.readSync(t.dataId),v=[a&&u>1?i-1:i,a&&f>1?s-1:s],y=[a&&u>1?u-1:u,a&&f>1?f-1:f],m=v[0]/y[0],g=v[1]/y[1],S=1/m,I=1/g,b=2*Math.ceil(S)+2,k=2*Math.ceil(I)+2,M=0;M<o;M++)for(var x=M*r.strides[0],A=0;A<i;A++)for(var F=x+A*r.strides[1],w=Math.floor(A*S),T=Math.floor(w-b/2),D=0;D<s;D++)for(var z=F+D*r.strides[2],_=Math.floor(D*I),W=Math.floor(_-k/2),O=0;O<d;O++){for(var H=0,N=0;N<b;N++){var B=N+T;if(!(B<0||B>=u)){var C=x+B*t.strides[1],E=B*m;if(A===Math.min(i-1,a?Math.round(E):Math.floor(E)))for(var P=0;P<k;P++){var R=P+W;if(!(R<0||R>=f)){var q=C+R*t.strides[2],L=R*g;D===Math.min(s-1,a?Math.round(L):Math.floor(L))&&(H+=c[q+O])}}}}l[z+O]=H}return e.tensor4d(l,r.shape,r.dtype)},a.prototype.batchNorm=function(t,r,a,n,o,i){h([t,r,a,o,n],"batchNorm");for(var s=this.readSync(t.dataId),d=this.readSync(r.dataId),p=this.readSync(a.dataId),u=o?this.readSync(o.dataId):new Float32Array([1]),f=n?this.readSync(n.dataId):new Float32Array([0]),l=new Float32Array(s.length),c=f.length,v=u.length,y=p.length,m=d.length,g=0,S=0,I=0,b=0,k=0;k<s.length;++k)l[k]=f[g++]+(s[k]-d[S++])*u[I++]/Math.sqrt(p[b++]+i),g>=c&&(g=0),S>=m&&(S=0),I>=v&&(I=0),b>=y&&(b=0);return e.tensor4d(l,t.shape)},a.prototype.localResponseNormalization4D=function(t,r,a,n,o){h(t,"localResponseNormalization4D");var i=t.shape[3],s=i-1,d=this.readSync(t.dataId),p=t.size,u=new Float32Array(p);function f(t){for(var e=t%i,a=t-e+Math.max(0,e-r),n=t-e+Math.min(e+r,s),o=0;a<=n;a++){var h=d[a];o+=h*h}return o}for(var l=0;l<p;l++){var c=f(l),v=d[l]*Math.pow(a+n*c,-o);u[l]=v}return e.tensor4d(u,t.shape)},a.prototype.LRNGrad=function(t,r,a,n,o,i,s){h(t,"LRNGrad");for(var d=t.shape[3],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=this.readSync(a.dataId),l=new Float32Array(t.size),c=t.size,v=0;v<c;v++){for(var y=v%d,m=v-y+Math.max(0,y-n),g=v-y+Math.min(d,y+n+1),S=0,I=m;I<g;I++)S+=Math.pow(u[I],2);S=i*S+o;for(I=m;I<g;I++){var b=-2*i*s*u[I]*f[v]/S;v===I&&(b+=Math.pow(S,-s)),b*=p[v],l[I]+=b}}return e.tensor4d(l,t.shape)},a.prototype.multinomial=function(t,a,n,o){h(t,"multinomial");for(var i=a?t:e.softmax(t),s=i.shape[0],d=i.shape[1],p=e.zeros([s,n],"int32"),u=this.readSync(p.dataId),f=this.readSync(i.dataId),l=0;l<s;++l){var c=l*d,v=new Float32Array(d-1);v[0]=f[c];for(var y=1;y<v.length;++y)v[y]=v[y-1]+f[c+y];for(var m=r.alea(o.toString()),g=l*n,S=0;S<n;++S){var I=m();u[g+S]=v.length;for(var b=0;b<v.length;b++)if(I<v[b]){u[g+S]=b;break}}}return p},a.prototype.oneHot=function(t,r,a,n){h(t,"oneHot");var o=new Float32Array(t.size*r);o.fill(n);for(var i=this.readSync(t.dataId),s=0;s<t.size;++s)i[s]>=0&&i[s]<r&&(o[s*r+i[s]]=a);return e.tensor2d(o,[t.size,r],"int32")},a.prototype.nonMaxSuppression=function(t,e,r,a,n){h(t,"nonMaxSuppression");var o=this.readSync(t.dataId),i=this.readSync(e.dataId);return f(o,i,r,a,n)},a.prototype.fft=function(t){return this.fftBatch(t,!1)},a.prototype.ifft=function(t){return this.fftBatch(t,!0)},a.prototype.fftBatch=function(t,r){for(var a=t.shape[0],n=t.shape[1],o=e.buffer(t.shape,"float32"),i=e.buffer(t.shape,"float32"),s=e.real(t).as2D(a,n),d=e.imag(t).as2D(a,n),h=0;h<a;h++)for(var p=s.slice([h,0],[1,n]),u=d.slice([h,0],[1,n]),f=e.complex(p,u),l=this.readSync(this.fftImpl(f,r).dataId),c=0;c<n;c++){var v=e.backend_util.getComplexWithIndex(l,c);o.values[h*n+c]=v.real,i.values[h*n+c]=v.imag}return e.complex(o.toTensor(),i.toTensor()).as2D(a,n)},a.prototype.fftImpl=function(t,r){var a=t.as1D(),n=a.size;if(this.isExponentOf2(n)){var o=this.fftRadix2(a,n,r).as2D(t.shape[0],t.shape[1]);return r&&(o=e.complex(e.real(o).div(e.scalar(n)),e.imag(o).div(e.scalar(n)))),o}var i=this.readSync(t.dataId),s=this.fourierTransformByMatmul(i,n,r),d=e.backend_util.splitRealAndImagArrays(s);return e.complex(d.real,d.imag).as2D(t.shape[0],t.shape[1])},a.prototype.isExponentOf2=function(t){return 0==(t&t-1)},a.prototype.fftRadix2=function(t,r,a){if(1===r)return t;var n=this.readSync(t.dataId),o=r/2,i=e.backend_util.complexWithEvenIndex(n),s=e.complex(i.real,i.imag).as1D(),d=e.backend_util.complexWithOddIndex(n),h=e.complex(d.real,d.imag).as1D();s=this.fftRadix2(s,o,a),h=this.fftRadix2(h,o,a);var p=e.backend_util.exponents(r,a),u=e.complex(p.real,p.imag).mul(h),f=s.add(u),l=s.sub(u),c=e.real(f).concat(e.real(l)),v=e.imag(f).concat(e.imag(l));return e.complex(c,v).as1D()},a.prototype.fourierTransformByMatmul=function(t,r,a){for(var n=new Float32Array(2*r),o=0;o<r;o++){for(var i=0,s=0,d=0;d<r;d++){var h=e.backend_util.exponent(o*d,r,a),p=e.backend_util.getComplexWithIndex(t,d);i+=p.real*h.real-p.imag*h.imag,s+=p.real*h.imag+p.imag*h.real}a&&(i/=r,s/=r),e.backend_util.assignToTypedArray(n,i,s,o)}return n},a.prototype.depthToSpace=function(t,r,a){e.util.assert("NHWC"===a,(function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+a})),e.util.assert(r>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+r}));for(var n=t.shape[0],o=t.shape[1],i=t.shape[2],s=t.shape[3],d=o*r,h=i*r,p=s/(r*r),u=this.readSync(t.dataId),f=new Float32Array(n*d*h*p),l=0,c=0;c<n;++c)for(var v=0;v<d;++v)for(var y=Math.floor(v/r),m=v%r,g=0;g<h;++g)for(var S=Math.floor(g/r),I=(m*r+g%r)*p,b=0;b<p;++b){var k=b+I+s*(S+i*(y+o*c));f[l++]=u[k]}return e.tensor4d(f,[n,d,h,p])},a.prototype.broadcastedBinaryOp=function(t,r,a,n){var o=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),i=e.buffer(o,a),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,o),p=e.backend_util.getBroadcastDims(r.shape,o),u=i.values;if(h.length+p.length===0)for(var f=0;f<u.length;++f)u[f]=n(s[f%s.length],d[f%d.length]);else{var l=this.bufferSync(t),c=this.bufferSync(r),v=function(e){var a=i.indexToLoc(e),o=a.slice(-t.rank);h.forEach((function(t){return o[t]=0}));var f=l.locToIndex(o),v=a.slice(-r.rank);p.forEach((function(t){return v[t]=0}));var y=c.locToIndex(v);u[e]=n(s[f],d[y])};for(f=0;f<u.length;++f)v(f)}return i.toTensor()},a.prototype.broadcastedBinaryComplexOp=function(t,r,a){var n=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),o=e.buffer(n,"float32"),i=e.buffer(n,"float32"),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,n),p=e.backend_util.getBroadcastDims(r.shape,n),u=o.values,f=i.values;if(h.length+p.length===0)for(var l=0;l<u.length;l++){var c=l%s.length,v=l%d.length,y=a(s[2*c],s[2*c+1],d[2*v],d[2*v+1]);u[l]=y.real,f[l]=y.imag}else{var m=this.bufferSync(this.data.get(t.dataId).complexTensors.real),g=this.bufferSync(this.data.get(r.dataId).complexTensors.real),S=function(e){var n=o.indexToLoc(e),i=n.slice(-t.rank);h.forEach((function(t){return i[t]=0}));var l=m.locToIndex(i),c=n.slice(-r.rank);p.forEach((function(t){return c[t]=0}));var v=g.locToIndex(c),y=a(s[2*l],s[2*l+1],d[2*v],d[2*v+1]);u[e]=y.real,f[e]=y.imag};for(l=0;l<u.length;l++)S(l)}return this.complex(o.toTensor(),i.toTensor())},a.prototype.split=function(t,e,r){return l(t,e,r)},a.prototype.dispose=function(){},a.prototype.floatPrecision=function(){return 32},a.prototype.epsilon=function(){return t.prototype.epsilon.call(this)},a.prototype.cropAndResize=function(t,r,a,n,o,i){for(var s=t.shape,d=s[0],h=s[1],p=s[2],u=s[3],f=r.shape[0],l=n[0],c=n[1],v=e.buffer([f,l,c,u],"float32"),y=this.readSync(r.dataId),m=this.readSync(a.dataId),g=this.readSync(t.dataId),S=t.strides,I=v.strides,b=0;b<f;b++){var k=4*b,M=y[k],x=y[k+1],A=y[k+2],F=y[k+3],w=m[b];if(!(w>=d))for(var T=l>1?(A-M)*(h-1)/(l-1):0,D=c>1?(F-x)*(p-1)/(c-1):0,z=0;z<l;z++){var _=l>1?M*(h-1)+z*T:.5*(M+A)*(h-1);if(_<0||_>h-1)for(var W=0;W<c;W++)for(var O=0;O<u;O++){var H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else if("bilinear"===o){var N=Math.floor(_),B=Math.ceil(_),C=_-N;for(W=0;W<c;W++){if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var E=Math.floor(V),P=Math.ceil(V),R=V-E;for(O=0;O<u;O++){var q=g[H=O+E*S[2]+N*S[1]+w*S[0]],L=g[H=O+P*S[2]+N*S[1]+w*S[0]],U=g[H=O+E*S[2]+B*S[1]+w*S[0]],j=q+(L-q)*R,G=U+(g[H=O+P*S[2]+B*S[1]+w*S[0]]-U)*R;H=O+W*I[2]+z*I[1]+b*I[0],v.values[H]=j+(G-j)*C}}}}else for(W=0;W<c;++W){var V;if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var Y=Math.round(V),K=Math.round(_);for(O=0;O<u;O++){var J=O+Y*S[2]+K*S[1]+w*S[0],Q=O+W*I[2]+z*I[1]+b*I[0];v.values[Q]=g[J]}}}}}return v.toTensor()},a.prototype.sparseToDense=function(t,r,a,n){var o=e.backend_util.calculateShapes(r,t,a),i=o.sliceRank,s=o.numUpdates,d=o.sliceSize,h=o.strides,p=o.outputSize;return this.scatter(t,r,a,p,d,s,i,h,n,!1)},a.prototype.gatherND=function(t,r){var a=r.shape,n=a[a.length-1],o=e.backend_util.prepareAndValidate(t,r),i=o[0],s=o[1],d=o[2],h=o[3];if(0===s)return e.tensor([],i,t.dtype);for(var p=new e.TensorBuffer([s,d],t.dtype),u=this.readSync(r.dataId),f=this.readSync(t.dataId),l=0;l<s;l++){for(var c=[],v=0,y=0;y<n;y++){var m=u[l*n+y];v+=m*h[y],c.push(m)}if(v<0||v>=t.size/d)throw new Error("Invalid indices: "+c+" does not index into "+t.shape);for(var g=0;g<d;g++)p.values[l*d+g]=f[v*d+g]}return p.toTensor().reshape(i)},a.prototype.scatterND=function(t,r,a){var n=e.backend_util.calculateShapes(r,t,a),o=n.sliceRank,i=n.numUpdates,s=n.sliceSize,d=n.strides,h=n.outputSize,p=e.scalar(0);return this.scatter(t,r,a,h,s,i,o,d,p,!0)},a.prototype.fill=function(t,r,a){a=a||e.util.inferDtype(r);var n=e.util.getArrayFromDType(a,e.util.sizeFromShape(t));return n.fill(r),e.engine().makeTensor(n,t,a,this)},a.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},a.prototype.zerosLike=function(t){var r=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(r,t.shape,t.dtype)},a.prototype.linspace=function(t,r,a){return e.backend_util.linspaceImpl(t,r,a)},a.prototype.scatter=function(t,r,a,n,o,i,s,d,h,p){var u=[n/o,o],f=this.readSync(t.dataId),l=this.readSync(r.dataId);if(0===n)return e.tensor([],a,r.dtype);var c=new e.TensorBuffer(u,r.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var v=0;v<i;v++){for(var y=[],m=0,g=0;g<s;g++){var S=f[v*s+g];y.push(S),m+=S*d[g]}if(m<0||m>=n/o)throw new Error("Invalid indices: "+y+" does not index into "+a);for(var I=0;I<o;I++)p?c.values[m*o+I]+=l[v*o+I]:c.values[m*o+I]=0===r.rank?l[0]:l[v*o+I]}return c.toTensor().reshape(a)},a}(e.KernelBackend);function S(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:function(r){var a=r.inputs,n=r.backend,o=a,i=o.a,s=o.b,d=n;h([i,s],t);var p=d.data.get(i.dataId).values,u=d.data.get(s.dataId).values,f=e(i.shape,s.shape,p,u,i.dtype),l=f[0],c=f[1];return{dataId:d.write(l,c,i.dtype),shape:c,dtype:i.dtype}}}}function I(t){return function(r,a,n,o,i){var s=e.backend_util.assertAndGetBroadcastShape(r,a),d=s.length,h=e.util.computeStrides(s),p=e.util.sizeFromShape(s),u=e.util.getTypedArrayFromDType(i,p),f=r.length,l=a.length,c=e.util.computeStrides(r),v=e.util.computeStrides(a),y=e.backend_util.getBroadcastDims(r,s),m=e.backend_util.getBroadcastDims(a,s);if(y.length+m.length===0)for(var g=0;g<u.length;++g)u[g]=t(n[g%n.length],o[g%o.length]);else{var S=function(r){var a=e.util.indexToLoc(r,d,h),i=a.slice(-f);y.forEach((function(t){return i[t]=0}));var s=e.util.locToIndex(i,f,c),p=a.slice(-l);m.forEach((function(t){return p[t]=0}));var g=e.util.locToIndex(p,l,v);u[r]=t(n[s],o[g])};for(g=0;g<u.length;++g)S(g)}return[u,s]}}var b=I((function(t,e){return t/e})),k=S(e.Div,b),M={kernelName:e.Max,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,o=t.attrs,i=t.backend,s=r.x,d=o.reductionIndices,p=i,u=s.shape,f=u.length,l=e.util.parseAxisParam(d,u),c=e.backend_util.getAxesPermutation(l,f),v=p.data.get(s.dataId).values;if(null!=c){for(var y=new Array(f),m=0;m<y.length;m++)y[m]=u[c[m]];v=n(v,u,s.dtype,c,y),l=e.backend_util.getInnerMostAxes(l.length,f),u=y}h(s,"max"),e.backend_util.assertAxesAreInnerMostDims("max",l,f);var g=e.backend_util.computeOutAndReduceShapes(u,l),S=g[0],I=g[1],b=a(v,e.util.sizeFromShape(I),S,s.dtype);return{dataId:p.write(b,S,s.dtype),shape:S,dtype:s.dtype}}};for(var x={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,a=t.attrs,n=t.backend,o=r.x,i=a,s=i.filterSize,d=i.strides,f=i.pad,l=i.includeBatchInIndex,c=n;h(o,"MaxPoolWithArgmax");var v=c.data.get(o.dataId).values,y=e.backend_util.computePool2DInfo(o.shape,s,d,[1,1],f),m=function(t,r,a,n,o){var i=p(t,0,a,e.util.computeStrides(r),o,"max"),s=u(t,r,a,o,!0,n);return[i.values,s.values]}(v,o.shape,o.dtype,l,y),g=m[0],S=m[1],I=c.write(g,y.outShape,o.dtype),b=c.write(S,y.outShape,o.dtype);return[{dataId:I,shape:y.outShape,dtype:o.dtype},{dataId:b,shape:y.outShape,dtype:"int32"}]}},A=e.kernel_impls.nonMaxSuppressionV5,F={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=t.attrs,n=e,o=n.boxes,i=n.scores,s=a,d=s.maxOutputSize,p=s.iouThreshold,u=s.scoreThreshold,f=s.softNmsSigma,l=r;h(o,"NonMaxSuppressionWithScore");var c=l.data.get(o.dataId).values,v=l.data.get(i.dataId).values,y=A(c,v,d,p,u,f);return[y.selectedIndices,y.selectedScores]}},w={kernelName:e.Square,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=e.x,n=r;h(a,"square");for(var o=n.data.get(a.dataId).values,i=new Float32Array(o.length),s=0;s<o.length;++s){var d=o[s];i[s]=d*d}return{dataId:n.write(i,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},T=I((function(t,e){var r=t-e;return r*r})),D=0,z=[F,w,S(e.SquaredDifference,T),k,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.attrs,a=t.backend,o=e.x,i=r.perm,s=a;h(o,"transpose");for(var d=o.shape.length,p=new Array(d),u=0;u<p.length;u++)p[u]=o.shape[i[u]];var f=n(s.data.get(o.dataId).values,o.shape,o.dtype,i,p);return{dataId:s.write(f,p,o.dtype),shape:p,dtype:o.dtype}}},x,M];D<z.length;D++){var _=z[D];e.registerKernel(_)}e.registerBackend("cpu",(function(){return new g}),1),t.MathBackendCPU=g,t.shared=o,t.version_cpu="2.0.0",Object.defineProperty(t,"__esModule",{value:!0})}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("seedrandom")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","seedrandom"],e):e((t=t||self).tf=t.tf||{},t.tf,t.seedrandom)}(this,(function(t,e,r){"use strict";function a(t,r,a,n){for(var o=e.util.getTypedArrayFromDType(n,e.util.sizeFromShape(a)),i=0;i<o.length;++i){for(var s=i*r,d=t[s],h=0;h<r;++h){var p=t[s+h];p>d&&(d=p)}o[i]=d}return o}function n(t,r,a,n,o){for(var i=r.length,s=e.util.sizeFromShape(r),d=e.util.computeStrides(r),h=e.util.computeStrides(o),p=e.util.getTypedArrayFromDType(a,e.util.sizeFromShape(o)),u=0;u<s;++u){for(var f=e.util.indexToLoc(u,i,d),l=new Array(f.length),c=0;c<l.length;c++)l[c]=f[n[c]];p[e.util.locToIndex(l,i,h)]=t[u]}return p}var o={__proto__:null,maxImpl:a,transposeImpl:n},i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function s(t,e,r,a){return new(r||(r=Promise))((function(n,o){function i(t){try{d(a.next(t))}catch(t){o(t)}}function s(t){try{d(a.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,s)}d((a=a.apply(t,e||[])).next())}))}function d(t,e){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){i.label=o[1];break}if(6===o[0]&&i.label<n[1]){i.label=n[1],n=o;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(o);break}n[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function h(t,r){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&e.util.assert("complex64"!==t.dtype,(function(){return r+" does not support complex64 tensors in the CPU backend."}))}))}function p(t,r,a,n,o,i){for(var s=o.strideHeight,d=o.strideWidth,h=o.dilationHeight,p=o.dilationWidth,u=o.effectiveFilterHeight,f=o.effectiveFilterWidth,l=o.padInfo.top,c=o.padInfo.left,v="max"===i?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=e.buffer(o.outShape,a),m=y.values,g=o.outShape[1]*o.outShape[2]*o.outShape[3],S=o.outShape[2]*o.outShape[3],I=o.outShape[3],b=0;b<o.batchSize;++b)for(var k=b*g,M=b*n[0],x=0;x<o.inChannels;++x)for(var A=0;A<o.outHeight;++A)for(var F=A*s-l,w=Math.max(0,F),T=Math.min(o.inHeight,u+F),D=k+A*S,z=0;z<o.outWidth;++z){for(var _=z*d-c,W=Math.max(0,_),O=Math.min(o.inWidth,f+_),H=v,N=0,B=0,C=w;C<T;C+=h){for(var E=M+C*n[1],P=W;P<O;P+=p){var R=t[E+P*n[2]+x];"max"===i&&R>H?H=R:"avg"===i&&(N+=R,B++)}if(isNaN(H))break}m[D+z*I+x]="avg"===i?N/B:H}return y}function u(t,r,a,n,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);for(var s=e.buffer(n.outShape,"int32"),d=n.strideHeight,h=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,f=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.top,v=n.padInfo.left,y=e.buffer(r,a,t),m=0;m<n.batchSize;++m)for(var g=0;g<n.inChannels;++g)for(var S=0;S<n.outHeight;++S){for(var I=S*d-c,b=I;b<0;)b+=p;for(var k=Math.min(n.inHeight,f+I),M=0;M<n.outWidth;++M){for(var x=M*h-v,A=x;A<0;)A+=u;for(var F=Math.min(n.inWidth,l+x),w=Number.NEGATIVE_INFINITY,T=-1,D=b;D<k;D+=p)for(var z=D-I,_=A;_<F;_+=u){var W=_-x,O=y.get(m,D,_,g);O>w&&(w=O,T=o?i?((m*n.inHeight+D)*n.inWidth+_)*n.inChannels+g:(D*n.inWidth+_)*n.inChannels+g:z*l+W)}s.set(T,m,S,M,g)}}return s}var f=e.kernel_impls.nonMaxSuppressionV3,l=e.kernel_impls.split,c=e.kernel_impls.tile,v=e.kernel_impls.topkImpl,y=e.kernel_impls.whereImpl;function m(t,e,r,a){if("linear"===r)return t.linear(e);if("relu"===r)return t.relu(e);if("elu"===r)return t.elu(e);if("relu6"===r)return t.relu6(e);if("prelu"===r)return t.prelu(e,a);throw new Error("Activation "+r+" has not been implemented for the CPU backend.")}var g=function(t){function a(){var r=t.call(this)||this;return r.blockSize=48,r.firstUse=!0,r.data=new e.DataStorage(r,e.engine()),r}return function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(a,t),a.prototype.write=function(t,r,a){this.firstUse&&(this.firstUse=!1,e.env().get("IS_NODE")&&e.backend_util.warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var n={};return this.data.set(n,{values:t,dtype:a}),n},a.prototype.move=function(t,e,r,a){this.data.set(t,{values:e,dtype:a})},a.prototype.numDataIds=function(){return this.data.numDataIds()},a.prototype.read=function(t){return s(this,void 0,void 0,(function(){return d(this,(function(e){return[2,this.readSync(t)]}))}))},a.prototype.readSync=function(t){var r=this.data.get(t),a=r.dtype,n=r.complexTensors;if("complex64"===a){var o=this.readSync(n.real.dataId),i=this.readSync(n.imag.dataId);return e.backend_util.mergeRealAndImagArrays(o,i)}return this.data.get(t).values},a.prototype.bufferSync=function(t){var r=this.readSync(t.dataId),a=r;if("string"===t.dtype)try{a=r.map((function(t){return e.util.decodeString(t)}))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return e.buffer(t.shape,t.dtype,a)},a.prototype.makeOutput=function(t,r,a){var n=this.write(t,r,a);return e.engine().makeTensorFromDataId(n,r,a,this)},a.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},a.prototype.time=function(t){return s(this,void 0,void 0,(function(){var r;return d(this,(function(a){return r=e.util.now(),t(),[2,{kernelMs:e.util.now()-r}]}))}))},a.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},a.prototype.complex=function(t,r){var a=this.makeOutput(null,t.shape,"complex64");return this.data.get(a.dataId).complexTensors={real:e.engine().keep(t.clone()),imag:e.engine().keep(r.clone())},a},a.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},a.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},a.prototype.slice=function(t,r,a){if(h(t,"slice"),e.slice_util.isSliceContinous(t.shape,r,a)){var n=e.slice_util.computeFlatOffset(r,t.strides),o=e.util.sizeFromShape(a),i=this.readSync(t.dataId);return e.tensor(i.subarray(n,n+o),a,t.dtype)}for(var s=e.buffer(a,t.dtype),d=this.bufferSync(t),p=0;p<s.size;++p){var u=s.indexToLoc(p).map((function(t,e){return t+r[e]}));s.values[p]=d.get.apply(d,u)}return s.toTensor()},a.prototype.stridedSlice=function(t,r,a,n){h(t,"stridedSlice");var o=e.slice_util.computeOutShape(r,a,n);if(o.some((function(t){return 0===t})))return e.tensor([],o);for(var i=e.buffer(o,t.dtype),s=this.bufferSync(t),d=0;d<i.size;d++){for(var p=i.indexToLoc(d),u=new Array(p.length),f=0;f<u.length;f++)u[f]=p[f]*n[f]+r[f];i.set.apply(i,[s.get.apply(s,u)].concat(p))}return i.toTensor()},a.prototype.diag=function(t){for(var r=this.readSync(t.dataId),a=e.buffer([t.size,t.size],t.dtype),n=a.values,o=0;o<r.length;o++)n[o*t.size+o]=r[o];return a.toTensor()},a.prototype.unstack=function(t,e){for(var r=t.shape[e],a=new Array(t.rank-1),n=0,o=0;o<t.rank;o++)o!==e&&(a[n++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var d=new Array(r);for(o=0;o<d.length;o++)i[e]=o,d[o]=this.slice(t,i,s).reshape(a);return d},a.prototype.reverse=function(t,r){h(t,"reverse");for(var a=e.buffer(t.shape,t.dtype),n=this.bufferSync(t),o=function(e){var o=a.indexToLoc(e),i=o.slice();r.forEach((function(e){return i[e]=t.shape[e]-1-i[e]})),a.set.apply(a,[n.get.apply(n,i)].concat(o))},i=0;i<a.size;i++)o(i);return a.toTensor()},a.prototype.concat=function(t,r){var a=this;if("complex64"===t[0].dtype){var n=t.map((function(t){return e.real(t)})),o=t.map((function(t){return e.imag(t)}));return e.complex(this.concat(n,r),this.concat(o,r))}var i=t.map((function(t){var a=e.util.sizeFromShape(t.shape.slice(r));return t.as2D(-1,a)})),s=e.backend_util.computeOutShape(i.map((function(t){return t.shape})),1),d=e.buffer(s,t[0].dtype).values;if(1===i[0].shape[0]){var h=0;i.forEach((function(t){d.set(a.readSync(t.dataId),h),h+=t.size}))}else{var p=0;i.forEach((function(t){for(var e=a.readSync(t.dataId),r=0,n=0;n<t.shape[0];++n)for(var o=n*s[1]+p,i=0;i<t.shape[1];++i)d[o+i]=e[r++];p+=t.shape[1]}))}var u=e.backend_util.computeOutShape(t.map((function(t){return t.shape})),r);return e.tensor(d,u,t[0].dtype)},a.prototype.neg=function(t){return h(t,"neg"),this.multiply(e.scalar(-1),t)},a.prototype.add=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t+r,imag:e+a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t+e}))},a.prototype.addN=function(t){var r=this;h(t,"addN");for(var a=t.map((function(t){return r.readSync(t.dataId)})),n=e.buffer(t[0].shape,t[0].dtype),o=n.values,i=0;i<t.length;i++)for(var s=a[i],d=0;d<o.length;d++)o[d]+=s[d];return n.toTensor()},a.prototype.softmax=function(t,r){var a=e.util.parseAxisParam([r],t.shape),n=e.max(t,a),o=e.backend_util.expandShapeToKeepDim(n.shape,a),i=this.subtract(t,n.reshape(o)),s=this.exp(i),d=this.sum(s,a).reshape(o);return e.div(s,d)},a.prototype.subtract=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t-r,imag:e-a}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t-e}))},a.prototype.pow=function(t,e){return h([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.pow(t,e)}))},a.prototype.batchMatMul=function(t,r,a,n){h([t,r],"matMul");for(var o=a?t.shape[1]:t.shape[2],i=a?t.shape[2]:t.shape[1],s=n?r.shape[1]:r.shape[2],d=t.shape[0],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=a?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],l=f[0],c=f[1],v=f[2],y=n?[1,r.strides[1],r.strides[0]]:[r.strides[1],1,r.strides[0]],m=y[0],g=y[1],S=y[2],I=i*s,b=e.buffer([d,i,s],t.dtype),k=b.values,M=this.blockSize,x=0;x<d;x++)for(var A=0;A<i;A+=M)for(var F=0;F<s;F+=M)for(var w=0;w<o;w+=M)for(var T=Math.min(A+M,i),D=Math.min(F+M,s),z=Math.min(w+M,o),_=A;_<T;_++)for(var W=F;W<D;W++){for(var O=0,H=w;H<z;H++)O+=p[x*l+_*c+H*v]*u[H*m+W*g+x*S];k[x*I+(_*s+W)]+=O}return b.toTensor()},a.prototype.fusedBatchMatMul=function(t){var e=t.a,r=t.b,a=t.transposeA,n=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,d=this.batchMatMul(e,r,a,n);return o&&(d=this.add(d,o)),i&&(d=m(this,d,i,s)),d},a.prototype.multiply=function(t,r){return"complex64"===t.dtype||"complex64"===r.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),r.cast("complex64"),(function(t,e,r,a){return{real:t*r-e*a,imag:t*a+e*r}})):this.broadcastedBinaryOp(t,r,e.upcastType(t.dtype,r.dtype),(function(t,e){return t*e}))},a.prototype.floorDiv=function(t,e){h([t,e],"floorDiv");return this.broadcastedBinaryOp(t,e,"int32",(function(t,e){return Math.floor(t/e)}))},a.prototype.sum=function(t,r){h(t,"sum"),e.backend_util.assertAxesAreInnerMostDims("sum",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=0,v=0;v<d;++v)c+=u[l+v];p[f]=c}return s},a.prototype.prod=function(t,r){h(t,"sum");for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.upcastType(t.dtype,"int32"),s=e.zeros(n,i),d=e.util.sizeFromShape(o),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=1,v=0;v<d;++v)c*=u[l+v];p[f]=c}return s},a.prototype.unsortedSegmentSum=function(t,r,a){h(t,"unsortedSegmentSum");for(var n=[],o=t.rank-r.rank,i=0;i<o;++i)r=r.expandDims(i+1);for(i=0;i<a;++i){var s=e.scalar(i,"int32"),d=e.equal(s,r).asType("float32").mul(t).sum(0);n.push(d)}return e.stack(n)},a.prototype.argMin=function(t,r){h(t,"argMin");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMin",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m<c&&(c=m,v=y)}p[f]=v}return s},a.prototype.argMax=function(t,r){h(t,"argMax");var a=[r];e.backend_util.assertAxesAreInnerMostDims("argMax",a,t.rank);for(var n=e.backend_util.computeOutAndReduceShapes(t.shape,a),o=n[0],i=n[1],s=e.zeros(o,"int32"),d=e.util.sizeFromShape(i),p=this.readSync(s.dataId),u=this.readSync(t.dataId),f=0;f<p.length;++f){for(var l=f*d,c=u[l],v=0,y=0;y<d;++y){var m=u[l+y];m>c&&(c=m,v=y)}p[f]=v}return s},a.prototype.cumsum=function(t,r,a,n){if(h(t,"cumsum"),r!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+r);for(var o=e.upcastType(t.dtype,"int32"),i=e.zeros(t.shape,o),s=this.readSync(i.dataId),d=this.readSync(t.dataId),p=t.shape[t.rank-1],u=n?function(t,e){return t+p-e-1}:function(t,e){return t+e},f=0;f<d.length;f+=p)for(var l=0;l<p;l++){var c=u(f,l);if(0===l)s[c]=a?0:d[c];else{var v=u(f,l-1);s[c]=a?d[v]+s[v]:d[c]+s[v]}}return i},a.prototype.equal=function(t,e){return h([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t===e?1:0}))},a.prototype.notEqual=function(t,e){return h([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t!==e?1:0}))},a.prototype.less=function(t,e){return h([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<e?1:0}))},a.prototype.lessEqual=function(t,e){return h([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<=e?1:0}))},a.prototype.greater=function(t,e){return h([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>e?1:0}))},a.prototype.greaterEqual=function(t,e){return h([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},a.prototype.logicalNot=function(t){h(t,"logicalNot");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)r[a]=e[a]?0:1;return this.makeOutput(r,t.shape,"bool")},a.prototype.logicalAnd=function(t,e){return h([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t&&e}))},a.prototype.logicalOr=function(t,e){return h([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t||e}))},a.prototype.select=function(t,r,a){h([t,r,a],"select");for(var n=this.readSync(t.dataId),o=this.readSync(r.dataId),i=this.readSync(a.dataId),s=e.zeros(r.shape,e.upcastType(r.dtype,a.dtype)),d=this.readSync(s.dataId),p=0,u=0===t.rank||t.rank>1||1===r.rank?1:e.util.sizeFromShape(r.shape.slice(1)),f=0;f<n.length;f++)for(var l=0;l<u;l++)1===n[f]?d[p++]=o[f]:d[p++]=i[f];return s},a.prototype.where=function(t){h([t],"where");var e=this.readSync(t.dataId);return y(t.shape,e)},a.prototype.topk=function(t,e,r){h(t,"topk");var a=this.readSync(t.dataId);return v(a,t.shape,t.dtype,e,r)},a.prototype.min=function(t,r){h(t,"min"),e.backend_util.assertAxesAreInnerMostDims("min",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];v<l&&(l=v)}d[u]=l}return i},a.prototype.minimum=function(t,e){return h([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.min(t,e)}))},a.prototype.mod=function(t,e){return h([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t%e;return t<0&&e<0||t>=0&&e>=0?r:(r+e)%e}))},a.prototype.maximum=function(t,e){return h([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},a.prototype.all=function(t,r){h(t,"all"),e.backend_util.assertAxesAreInnerMostDims("all",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l&&v}d[u]=l}return i},a.prototype.any=function(t,r){h(t,"any"),e.backend_util.assertAxesAreInnerMostDims("any",r,t.rank);for(var a=e.backend_util.computeOutAndReduceShapes(t.shape,r),n=a[0],o=a[1],i=e.zeros(n,t.dtype),s=e.util.sizeFromShape(o),d=this.readSync(i.dataId),p=this.readSync(t.dataId),u=0;u<d.length;++u){for(var f=u*s,l=p[f],c=0;c<s;++c){var v=p[f+c];l=l||v}d[u]=l}return i},a.prototype.squaredDifference=function(t,e){return h([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var r=t-e;return r*r}))},a.prototype.ceil=function(t){h(t,"ceil");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.ceil(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.floor=function(t){h(t,"floor");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.floor(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.sign=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)e[a]<0?r[a]=-1:e[a]>0?r[a]=1:r[a]=0;return this.makeOutput(r,t.shape,"float32")},a.prototype.isNaN=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isNaN(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isInf=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Math.abs(e[a])===1/0&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.isFinite=function(t){h(t,"x");for(var e=this.readSync(t.dataId),r=new Uint8Array(e.length),a=0;a<e.length;++a)Number.isFinite(e[a])&&(r[a]=1);return this.makeOutput(r,t.shape,"bool")},a.prototype.round=function(t){h(t,"round");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=Math.floor(e[a]);e[a]-n<.5?r[a]=Math.floor(e[a]):e[a]-n>.5?r[a]=Math.ceil(e[a]):r[a]=n%2==0?n:n+1}return this.makeOutput(r,t.shape,"float32")},a.prototype.exp=function(t){h(t,"exp");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.exp(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.expm1=function(t){h(t,"expm1");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=Math.expm1(e[a]);return this.makeOutput(r,t.shape,"float32")},a.prototype.log=function(t){h(t,"log");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.log1p=function(t){h(t,"log1p");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.log1p(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.sqrt=function(t){h(t,"sqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.rsqrt=function(t){h(t,"rsqrt");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a){var n=e[a];r[a]=1/Math.sqrt(n)}return this.makeOutput(r,t.shape,"float32")},a.prototype.reciprocal=function(t){h(t,"reciprocal");for(var e=this.readSync(t.dataId),r=new Float32Array(e.length),a=0;a<e.length;++a)r[a]=1/e[a];return this.makeOutput(r,t.shape,"float32")},a.prototype.linear=function(t){return t},a.prototype.relu=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.max(0,n[o]);return r},a.prototype.relu6=function(t){h(t,"relu");for(var r=e.zeros(t.shape,t.dtype),a=this.readSync(r.dataId),n=this.readSync(t.dataId),o=0;o<n.length;++o)a[o]=Math.min(Math.max(0,n[o]),6);return r},a.prototype.prelu=function(t,e){return h([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return t<0?e*t:t}))},a.prototype.elu=function(t){h(t,"elu");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var n=r[a];e[a]=n>=0?n:Math.exp(n)-1}return this.makeOutput(e,t.shape,"float32")},a.prototype.eluDer=function(t,e){h([t,e],"eluDer");for(var r=new Float32Array(e.size),a=this.readSync(e.dataId),n=this.readSync(t.dataId),o=0;o<a.length;++o){var i=a[o];r[o]=i>=1?n[o]:n[o]*(i+1)}return this.makeOutput(r,e.shape,"float32")},a.prototype.selu=function(t){h(t,"selu");for(var r=e.backend_util.SELU_SCALEALPHA,a=e.backend_util.SELU_SCALE,n=new Float32Array(t.size),o=this.readSync(t.dataId),i=0;i<o.length;++i){var s=o[i];n[i]=s>=0?a*s:r*(Math.exp(s)-1)}return this.makeOutput(n,t.shape,"float32")},a.prototype.clip=function(t,e,r){h(t,"clip");for(var a=new Float32Array(t.size),n=this.readSync(t.dataId),o=0;o<n.length;++o){var i=n[o];a[o]=i>r?r:i<e?e:i}return this.makeOutput(a,t.shape,"float32")},a.prototype.abs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.abs(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<t.size;++a){var n=r[2*a],o=r[2*a+1];e[a]=Math.hypot(n,o)}return this.makeOutput(e,t.shape,"float32")},a.prototype.int=function(t){h(t,"int");for(var e=new Int32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=r[a];return this.makeOutput(e,t.shape,"int32")},a.prototype.sigmoid=function(t){h(t,"sigmoid");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=1/(1+Math.exp(-r[a]));return this.makeOutput(e,t.shape,"float32")},a.prototype.softplus=function(t){h(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n]>-e,i=a[n]<e,s=Math.exp(a[n]),d=void 0;d=i?s:o?a[n]:Math.log(1+s),r[n]=d}return this.makeOutput(r,t.shape,"float32")},a.prototype.sin=function(t){h(t,"sin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cos=function(t){h(t,"cos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tan=function(t){h(t,"tan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.tan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.asin=function(t){h(t,"asin");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asin(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acos=function(t){h(t,"acos");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acos(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan=function(t){h(t,"atan");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atan(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atan2=function(t,e){return h([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.atan2(t,e)}))},a.prototype.sinh=function(t){h(t,"sinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.sinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.cosh=function(t){h(t,"cosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.cosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.tanh=function(t){h(t,"tanh");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n)r[n]=e.util.tanh(a[n]);return this.makeOutput(r,t.shape,"float32")},a.prototype.asinh=function(t){h(t,"asinh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.asinh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.acosh=function(t){h(t,"acosh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.acosh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.atanh=function(t){h(t,"atanh");for(var e=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a)e[a]=Math.atanh(r[a]);return this.makeOutput(e,t.shape,"float32")},a.prototype.erf=function(t){h(t,"erf");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=e.backend_util.ERF_P,o=e.backend_util.ERF_A1,i=e.backend_util.ERF_A2,s=e.backend_util.ERF_A3,d=e.backend_util.ERF_A4,p=e.backend_util.ERF_A5,u=0;u<a.length;++u){var f=Math.sign(a[u]),l=Math.abs(a[u]),c=1/(1+n*l);r[u]=f*(1-((((p*c+d)*c+s)*c+i)*c+o)*c*Math.exp(-l*l))}return this.makeOutput(r,t.shape,"float32")},a.prototype.step=function(t,e){void 0===e&&(e=0),h(t,"step");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),n=0;n<a.length;++n){var o=a[n];isNaN(o)?r[n]=NaN:r[n]=o>0?1:e}return this.makeOutput(r,t.shape,"float32")},a.prototype.fusedConv2d=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.conv2d=function(t,r,a){h([t,r],"conv2d");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u="channelsLast"===a.dataFormat,f=e.buffer(a.outShape,t.dtype),l=t.strides[0],c=u?t.strides[1]:t.strides[2],v=u?t.strides[2]:1,y=u?1:t.strides[1],m=f.strides[0],g=u?f.strides[1]:f.strides[2],S=u?f.strides[2]:1,I=u?1:f.strides[1],b=this.readSync(t.dataId),k=this.readSync(r.dataId),M=f.values,x=0;x<a.batchSize;++x)for(var A=x*l,F=x*m,w=0;w<a.outHeight;++w)for(var T=F+w*g,D=w*a.strideHeight-p,z=0;z<n;z++){var _=D+z*i;if(!(_<0||_>=a.inHeight))for(var W=z*r.strides[0],O=A+_*c,H=0;H<a.outWidth;++H)for(var N=T+H*S,B=H*a.strideWidth-d,C=0;C<o;C++){var E=B+C*s;if(!(E<0||E>=a.inWidth))for(var P=O+E*v,R=W+C*r.strides[1],q=0;q<a.inChannels;++q){for(var L=b[P+q*y],U=0;U<a.outChannels;++U)M[N+U*I]+=L*k[R+U];R+=a.outChannels}}}return f.toTensor()},a.prototype.conv3d=function(t,r,a){for(var n=a.filterDepth,o=a.filterHeight,i=a.filterWidth,s=a.dilationDepth,d=a.dilationHeight,h=a.dilationWidth,p=a.padInfo.front,u=a.padInfo.left,f=a.padInfo.top,l=e.buffer(a.outShape,t.dtype),c=this.readSync(t.dataId),v=this.readSync(r.dataId),y=l.values,m=0;m<a.batchSize;++m)for(var g=m*t.strides[0],S=m*l.strides[0],I=0;I<a.outDepth;++I)for(var b=S+I*l.strides[1],k=I*a.strideDepth-p,M=0;M<n;M++){var x=k+M*s;if(!(x<0||x>=a.inDepth))for(var A=M*r.strides[0],F=g+x*t.strides[1],w=0;w<a.outHeight;++w)for(var T=b+w*l.strides[2],D=w*a.strideHeight-f,z=0;z<o;z++){var _=D+z*d;if(!(_<0||_>=a.inHeight))for(var W=A+z*r.strides[1],O=F+_*t.strides[2],H=0;H<a.outWidth;++H)for(var N=T+H*a.outChannels,B=H*a.strideWidth-u,C=0;C<i;C++){var E=B+C*h;if(!(E<0||E>=a.inWidth))for(var P=W+C*r.strides[2],R=O+E*a.inChannels,q=P,L=0;L<a.inChannels;++L){for(var U=c[R+L],j=0;j<a.outChannels;++j)y[N+j]+=U*v[q+j];q+=a.outChannels}}}}return l.toTensor()},a.prototype.conv2dDerInput=function(t,r,a){h([t,r],"conv2dDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=this.readSync(t.dataId),s=this.readSync(r.dataId),d=r.strides,p=d[0],u=d[1],f=d[2],l=a.batchSize,c=a.filterHeight,v=a.filterWidth,y=a.inChannels,m=a.inHeight,g=a.inWidth,S=a.outChannels,I=a.outHeight,b=a.outWidth,k=a.strideHeight,M=a.strideWidth,x=a.dataFormat,A=c-1-a.padInfo.top,F=v-1-a.padInfo.left,w="channelsLast"===x,T=n.strides[0],D=w?n.strides[1]:n.strides[2],z=w?n.strides[2]:1,_=w?1:n.strides[1],W=t.strides[0],O=w?t.strides[1]:t.strides[2],H=w?t.strides[2]:1,N=w?1:t.strides[1],B=0;B<l;++B)for(var C=0;C<y;++C)for(var E=0;E<m;++E)for(var P=E-A,R=Math.max(0,Math.ceil(P/k)),q=Math.min(I,(c+P)/k),L=0;L<g;++L){for(var U=L-F,j=Math.max(0,Math.ceil(U/M)),G=Math.min(b,(v+U)/M),V=0,Y=R;Y<q;++Y)for(var K=Y*k-P,J=j;J<G;++J)for(var Q=W*B+O*Y+H*J,X=p*(c-1-K)+u*(v-1-(J*M-U))+f*C,Z=0;Z<S;++Z){V+=i[Q+N*Z]*s[X+Z]}o[T*B+D*E+z*L+_*C]=V}return n.toTensor()},a.prototype.conv3dDerInput=function(t,r,a){for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],h=i[2],p=i[3],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=a.batchSize,x=a.filterDepth,A=a.filterHeight,F=a.filterWidth,w=a.inChannels,T=a.inDepth,D=a.inHeight,z=a.inWidth,_=a.outChannels,W=a.outDepth,O=a.outHeight,H=a.outWidth,N=a.strideDepth,B=a.strideHeight,C=a.strideWidth,E=x-1-a.padInfo.front,P=A-1-a.padInfo.top,R=F-1-a.padInfo.left,q=0;q<M;++q)for(var L=0;L<w;++L)for(var U=0;U<T;++U)for(var j=U-E,G=Math.max(0,Math.ceil(j/N)),V=Math.min(W,(x+j)/N),Y=0;Y<D;++Y)for(var K=Y-P,J=Math.max(0,Math.ceil(K/B)),Q=Math.min(O,(A+K)/B),X=0;X<z;++X){for(var Z=X-R,$=Math.max(0,Math.ceil(Z/C)),tt=Math.min(H,(F+Z)/C),et=0,rt=G;rt<V;++rt)for(var at=rt*N-j,nt=J;nt<Q;++nt)for(var ot=nt*B-K,it=$;it<tt;++it)for(var st=l*q+c*rt+v*nt+y*it,dt=S*(x-1-at)+I*(A-1-ot)+b*(F-1-(it*C-Z))+k*L,ht=0;ht<_;++ht){et+=u[st+ht]*m[dt+ht]}o[s*q+d*U+h*Y+p*X+L]=et}return n.toTensor()},a.prototype.conv2dDerFilter=function(t,r,a){h([t,r],"conv2dDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d="channelsLast"===a.dataFormat,p=e.buffer(a.filterShape,"float32"),u=a.padInfo.left,f=a.padInfo.top,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((f-v)/n)),m=Math.min(a.outHeight,(a.inHeight+f-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((u-g)/o)),I=Math.min(a.outWidth,(a.inWidth+u-g)/o),b=0;b<a.inChannels;++b)for(var k=0;k<a.outChannels;++k){for(var M=0,x=0;x<a.batchSize;++x)for(var A=y;A<m;++A)for(var F=v+A*n-f,w=S;w<I;++w){var T=g+w*o-u;M+=d?l.get(x,F,T,b)*c.get(x,A,w,k):l.get(x,b,F,T)*c.get(x,k,A,w)}p.set(M,v,g,b,k)}return p.toTensor()},a.prototype.conv3dDerFilter=function(t,r,a){for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,h=a.filterWidth,p=e.buffer(a.filterShape,"float32"),u=p.values,f=p.strides,l=f[0],c=f[1],v=f[2],y=f[3],m=this.readSync(r.dataId),g=r.strides,S=g[0],I=g[1],b=g[2],k=g[3],M=this.readSync(t.dataId),x=t.strides,A=x[0],F=x[1],w=x[2],T=x[3],D=a.padInfo.front,z=a.padInfo.left,_=a.padInfo.top,W=0;W<s;++W)for(var O=Math.max(0,Math.ceil((D-W)/n)),H=Math.min(a.outDepth,(a.inDepth+D-W)/n),N=W*l,B=0;B<d;++B)for(var C=Math.max(0,Math.ceil((_-B)/o)),E=Math.min(a.outHeight,(a.inHeight+_-B)/o),P=B*c+N,R=0;R<h;++R)for(var q=Math.max(0,Math.ceil((z-R)/i)),L=Math.min(a.outWidth,(a.inWidth+z-R)/i),U=R*v+P,j=0;j<a.inChannels;++j)for(var G=j*y+U,V=0;V<a.outChannels;++V){for(var Y=0,K=0;K<a.batchSize;++K)for(var J=K*A,Q=K*S,X=O;X<H;++X)for(var Z=(W+X*n-D)*F+J,$=X*I+Q,tt=C;tt<E;++tt)for(var et=(B+tt*o-_)*w+Z,rt=tt*b+$,at=q;at<L;++at){var nt=at*k+rt;Y+=M[(R+at*i-z)*T+et+j]*m[nt+V]}u[G+V]=Y}return p.toTensor()},a.prototype.fusedDepthwiseConv2D=function(t){var e=t.input,r=t.filter,a=t.convInfo,n=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.depthwiseConv2D(e,r,a);return n&&(s=this.add(s,n)),o&&(s=m(this,s,o,i)),s},a.prototype.depthwiseConv2D=function(t,r,a){h([t,r],"depthwiseConv2D");for(var n=a.filterHeight,o=a.filterWidth,i=a.dilationHeight,s=a.dilationWidth,d=a.padInfo.left,p=a.padInfo.top,u=a.outChannels/a.inChannels,f=e.buffer(a.outShape,t.dtype),l=this.readSync(t.dataId),c=this.readSync(r.dataId),v=f.values,y=0;y<a.batchSize;++y)for(var m=y*t.strides[0],g=y*f.strides[0],S=0;S<a.outHeight;++S)for(var I=g+S*f.strides[1],b=S*a.strideHeight-d,k=0;k<n;++k){var M=b+k*i;if(!(M<0||M>=a.inHeight))for(var x=k*r.strides[0],A=m+M*t.strides[1],F=0;F<a.outWidth;++F)for(var w=I+F*f.strides[2],T=F*a.strideWidth-p,D=0;D<o;++D){var z=T+D*s;if(!(z<0||z>=a.inWidth))for(var _=x+D*r.strides[1],W=A+z*a.inChannels,O=w,H=_,N=0;N<a.inChannels;++N){for(var B=l[W+N],C=0;C<u;++C)v[O+C]+=B*c[H+C];O+=u,H+=u}}}return f.toTensor()},a.prototype.depthwiseConv2DDerInput=function(t,r,a){h([t,r],"depthwiseConv2DDerInput");for(var n=e.buffer(a.inShape,"float32"),o=n.values,i=n.strides,s=i[0],d=i[1],p=i[2],u=this.readSync(t.dataId),f=t.strides,l=f[0],c=f[1],v=f[2],y=this.readSync(r.dataId),m=r.strides,g=m[0],S=m[1],I=m[2],b=a.batchSize,k=a.filterHeight,M=a.filterWidth,x=a.inChannels,A=a.inHeight,F=a.inWidth,w=a.outChannels,T=a.outHeight,D=a.outWidth,z=a.strideHeight,_=a.strideWidth,W=k-1-a.padInfo.top,O=M-1-a.padInfo.left,H=w/x,N=0;N<b;++N)for(var B=0;B<x;++B)for(var C=0;C<A;++C)for(var E=C-W,P=Math.max(0,Math.ceil(E/z)),R=Math.min(T,(k+E)/z),q=0;q<F;++q){for(var L=q-O,U=Math.max(0,Math.ceil(L/_)),j=Math.min(D,(M+L)/_),G=0,V=P;V<R;++V)for(var Y=V*z-E,K=U;K<j;++K)for(var J=l*N+c*V+v*K,Q=g*(k-1-Y)+S*(M-1-(K*_-L))+I*B,X=0;X<H;++X){G+=u[J+(B*H+X)]*y[Q+X]}o[s*N+d*C+p*q+B]=G}return n.toTensor()},a.prototype.depthwiseConv2DDerFilter=function(t,r,a){h([t,r],"depthwiseConv2DDerFilter");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=e.buffer(a.filterShape,"float32"),p=a.padInfo.left,u=a.padInfo.top,f=a.outChannels/a.inChannels,l=this.bufferSync(t),c=this.bufferSync(r),v=0;v<i;++v)for(var y=Math.max(0,Math.ceil((u-v)/n)),m=Math.min(a.outHeight,(a.inHeight+u-v)/n),g=0;g<s;++g)for(var S=Math.max(0,Math.ceil((p-g)/o)),I=Math.min(a.outWidth,(a.inWidth+p-g)/o),b=0;b<a.outChannels;++b){for(var k=Math.trunc(b/f),M=b%f,x=0,A=0;A<a.batchSize;++A)for(var F=y;F<m;++F)for(var w=v+F*n-u,T=S;T<I;++T){var D=g+T*o-p;x+=l.get(A,w,D,k)*c.get(A,F,T,b)}d.set(x,v,g,k,M)}return d.toTensor()},a.prototype.tile=function(t,e){return h(t,"tile"),c(this.bufferSync(t),e)},a.prototype.pad=function(t,r,a){h(t,"pad");var n=r.map((function(e,r){return e[0]+t.shape[r]+e[1]})),o=r.map((function(t){return t[0]})),i=this.bufferSync(t),s=e.buffer(n,t.dtype);0!==a&&s.values.fill(a);for(var d=0;d<t.size;d++){var p=i.indexToLoc(d),u=p.map((function(t,e){return t+o[e]}));s.set.apply(s,[i.get.apply(i,p)].concat(u))}return s.toTensor()},a.prototype.gather=function(t,r,a){h([t,r],"gather");var n=t.shape.slice(),o=this.readSync(r.dataId);n[a]=o.length;for(var i=e.buffer(n,t.dtype),s=this.bufferSync(t),d=0;d<i.size;++d){var p=i.indexToLoc(d),u=p.slice();u[a]=o[p[a]];var f=s.locToIndex(u);i.values[d]=s.values[f]}return i.toTensor()},a.prototype.batchToSpaceND=function(t,r,a){h([t],"batchToSpaceND");var n=r.reduce((function(t,e){return t*e})),o=e.backend_util.getReshaped(t.shape,r,n),i=e.backend_util.getPermuted(o.length,r.length),s=e.backend_util.getReshapedPermuted(t.shape,r,n),d=e.backend_util.getSliceBeginCoords(a,r.length),p=e.backend_util.getSliceSize(s,a,r.length);return e.transpose(t.reshape(o),i).reshape(s).slice(d,p)},a.prototype.spaceToBatchND=function(t,r,a){h([t],"spaceToBatchND");var n=r.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,a);for(var i=1+r.length;i<t.shape.length;++i)o.push([0,0]);var s=t.pad(o),d=e.backend_util.getReshaped(s.shape,r,n,!1),p=e.backend_util.getPermuted(d.length,r.length,!1),u=e.backend_util.getReshapedPermuted(s.shape,r,n,!1);return e.transpose(s.reshape(d),p).reshape(u)},a.prototype.maxPool=function(t,e){return h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"max").toTensor()},a.prototype.maxPoolBackprop=function(t,r,a,n){h([r,a],"maxPoolBackprop");for(var o=this.readSync(r.dataId),i=e.buffer(n.outShape,r.dtype,u(o,r.shape,r.dtype,n).values),s=n.strideHeight,d=n.strideWidth,p=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,v=c-1-n.padInfo.left,y=l-1-n.padInfo.top,m=e.buffer(r.shape,"float32"),g=this.bufferSync(t),S=0;S<n.batchSize;++S)for(var I=0;I<n.inChannels;++I)for(var b=0;b<n.inHeight;++b)for(var k=0;k<n.inWidth;++k){for(var M=b-y,x=k-v,A=0,F=0;F<l;F+=p){var w=(M+F)/s;if(!(w<0||w>=n.outHeight||Math.floor(w)!==w))for(var T=0;T<c;T+=f){var D=(x+T)/d;if(!(D<0||D>=n.outWidth||Math.floor(D)!==D)){var z=l*c-1-i.get(S,w,D,I)===F*c+T?1:0;if(0!==z)A+=g.get(S,w,D,I)*z}}}m.set(A,S,b,k,I)}return m.toTensor()},a.prototype.avgPoolBackprop=function(t,r,a){h([t,r],"avgPoolBackprop");for(var n=a.strideHeight,o=a.strideWidth,i=a.filterHeight,s=a.filterWidth,d=a.dilationHeight,p=a.dilationWidth,u=a.effectiveFilterHeight,f=a.effectiveFilterWidth,l=f-1-a.padInfo.left,c=u-1-a.padInfo.top,v=e.buffer(r.shape,"float32"),y=1/(i*s),m=this.bufferSync(t),g=0;g<a.batchSize;++g)for(var S=0;S<a.inChannels;++S)for(var I=0;I<a.inHeight;++I)for(var b=0;b<a.inWidth;++b){for(var k=I-c,M=b-l,x=0,A=0;A<u;A+=d){var F=(k+A)/n;if(!(F<0||F>=a.outHeight||Math.floor(F)!==F))for(var w=0;w<f;w+=p){var T=(M+w)/o;if(!(T<0||T>=a.outWidth||Math.floor(T)!==T))x+=m.get(g,F,T,S)}}v.set(x*y,g,I,b,S)}return v.toTensor()},a.prototype.pool3d=function(t,r,a){h(t,"pool3d");for(var n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,p=r.dilationWidth,u=r.effectiveFilterDepth,f=r.effectiveFilterHeight,l=r.effectiveFilterWidth,c=r.padInfo.front,v=r.padInfo.top,y=r.padInfo.left,m="max"===a?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=this.readSync(t.dataId),S=e.buffer(r.outShape,t.dtype),I=S.values,b=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],k=r.outShape[2]*r.outShape[3]*r.outShape[4],M=r.outShape[3]*r.outShape[4],x=r.outShape[4],A=0;A<r.batchSize;++A)for(var F=A*b,w=A*t.strides[0],T=0;T<r.inChannels;++T)for(var D=0;D<r.outDepth;++D){for(var z=D*n-c,_=z;_<0;)_+=s;for(var W=Math.min(r.inDepth,u+z),O=F+D*k,H=0;H<r.outHeight;++H){for(var N=H*o-v,B=N;B<0;)B+=d;for(var C=Math.min(r.inHeight,f+N),E=O+H*M,P=0;P<r.outWidth;++P){for(var R=P*i-y,q=R;q<0;)q+=p;for(var L=Math.min(r.inWidth,l+R),U=E+P*x,j=m,G=0,V=0,Y=_;Y<W;Y+=s){for(var K=w+Y*t.strides[1],J=B;J<C;J+=d){for(var Q=K+J*t.strides[2],X=q;X<L;X+=p){var Z=g[Q+X*t.strides[3]+T];if("max"===a&&Z>j?j=Z:"avg"===a&&(G+=Z,V++),isNaN(j))break}if(isNaN(j))break}if(isNaN(j))break}I[U+T]="avg"===a?G/V:j}}}return S.toTensor()},a.prototype.avgPool3d=function(t,e){return h(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},a.prototype.avgPool3dBackprop=function(t,r,a){h([t,r],"avgPool3dBackprop");for(var n=a.strideDepth,o=a.strideHeight,i=a.strideWidth,s=a.filterDepth,d=a.filterHeight,p=a.filterWidth,u=a.dilationDepth,f=a.dilationHeight,l=a.dilationWidth,c=a.effectiveFilterDepth,v=a.effectiveFilterHeight,y=a.effectiveFilterWidth,m=c-1-a.padInfo.front,g=y-1-a.padInfo.left,S=v-1-a.padInfo.top,I=e.buffer(r.shape,"float32"),b=1/(s*d*p),k=this.bufferSync(t),M=0;M<a.batchSize;++M)for(var x=0;x<a.inChannels;++x)for(var A=0;A<a.inDepth;++A)for(var F=0;F<a.inHeight;++F)for(var w=0;w<a.inWidth;++w){for(var T=A-m,D=F-S,z=w-g,_=0,W=0;W<c;W+=u){var O=(T+W)/n;if(!(O<0||O>=a.outDepth||Math.floor(O)!==O))for(var H=0;H<v;H+=f){var N=(D+H)/o;if(!(N<0||N>=a.outHeight||Math.floor(N)!==N))for(var B=0;B<y;B+=l){var C=(z+B)/i;if(!(C<0||C>=a.outWidth||Math.floor(C)!==C))_+=k.get(M,O,N,C,x)}}}I.set(_*b,M,A,F,w,x)}return I.toTensor()},a.prototype.maxPool3d=function(t,e){return h(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},a.prototype.maxPool3dPositions=function(t,r){for(var a=e.buffer(r.outShape,"int32"),n=r.strideDepth,o=r.strideHeight,i=r.strideWidth,s=r.dilationDepth,d=r.dilationHeight,h=r.dilationWidth,p=r.effectiveFilterDepth,u=r.effectiveFilterHeight,f=r.effectiveFilterWidth,l=r.padInfo.front,c=r.padInfo.top,v=r.padInfo.left,y=this.bufferSync(t),m=0;m<r.batchSize;++m)for(var g=0;g<r.inChannels;++g)for(var S=0;S<r.outDepth;++S){for(var I=S*n-l,b=I;b<0;)b+=s;for(var k=Math.min(r.inDepth,p+I),M=0;M<r.outHeight;++M){for(var x=M*o-c,A=x;A<0;)A+=d;for(var F=Math.min(r.inHeight,u+x),w=0;w<r.outWidth;++w){for(var T=w*i-v,D=T;D<0;)D+=h;for(var z=Math.min(r.inWidth,f+T),_=Number.NEGATIVE_INFINITY,W=-1,O=b;O<k;O+=s)for(var H=O-I,N=A;N<F;N+=d)for(var B=N-x,C=D;C<z;C+=h){var E=C-T,P=y.get(m,O,N,C,g);P>=_&&(_=P,W=H*u*f+B*u+E)}a.set(W,m,S,M,w,g)}}}return a.toTensor()},a.prototype.maxPool3dBackprop=function(t,r,a,n){h([r,a],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(r,n),i=n.strideDepth,s=n.strideHeight,d=n.strideWidth,p=n.dilationDepth,u=n.dilationHeight,f=n.dilationWidth,l=n.effectiveFilterDepth,c=n.effectiveFilterHeight,v=n.effectiveFilterWidth,y=l-1-n.padInfo.front,m=v-1-n.padInfo.left,g=c-1-n.padInfo.top,S=e.buffer(r.shape,"float32"),I=this.bufferSync(o),b=this.bufferSync(t),k=0;k<n.batchSize;++k)for(var M=0;M<n.inChannels;++M)for(var x=0;x<n.inDepth;++x)for(var A=0;A<n.inHeight;++A)for(var F=0;F<n.inWidth;++F){for(var w=x-y,T=A-g,D=F-m,z=0,_=0;_<l;_+=p){var W=(w+_)/i;if(!(W<0||W>=n.outDepth||Math.floor(W)!==W))for(var O=0;O<c;O+=u){var H=(T+O)/s;if(!(H<0||H>=n.outHeight||Math.floor(H)!==H))for(var N=0;N<v;N+=f){var B=(D+N)/d;if(!(B<0||B>=n.outWidth||Math.floor(B)!==B)){var C=l*c*v-1-I.get(k,W,H,B,M)===_*c*v+O*v+N?1:0;if(0!==C)z+=b.get(k,W,H,B,M)*C}}}}S.set(z,k,x,A,F,M)}return S.toTensor()},a.prototype.cast=function(t,r){return e.backend_util.castTensor(t,r,this)},a.prototype.reshape=function(t,r){return e.backend_util.reshapeTensor(t,r)},a.prototype.avgPool=function(t,e){return h(t,"avgPool"),h(t,"maxPool"),p(this.readSync(t.dataId),t.shape,t.dtype,t.strides,e,"avg").toTensor().toFloat()},a.prototype.resizeBilinear=function(t,r,a,n){h(t,"resizeBilinear");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(e.util.sizeFromShape([i,r,a,p])),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=0,y=l[0]/c[0],m=l[1]/c[1],g=0;g<i;g++)for(var S=0;S<r;S++)for(var I=y*S,b=Math.floor(I),k=I-b,M=Math.min(s-1,Math.ceil(I)),x=g*t.strides[0]+b*t.strides[1],A=g*t.strides[0]+M*t.strides[1],F=0;F<a;F++)for(var w=m*F,T=Math.floor(w),D=w-T,z=Math.min(d-1,Math.ceil(w)),_=x+T*t.strides[2],W=A+T*t.strides[2],O=x+z*t.strides[2],H=A+z*t.strides[2],N=0;N<p;N++){var B=u[_+N],C=u[W+N],E=B+(u[O+N]-B)*D,P=E+(C+(u[H+N]-C)*D-E)*k;f[v++]=P}return e.tensor(f,[i,r,a,p])},a.prototype.resizeBilinearBackprop=function(t,r,a){h([t,r],"resizeBilinearBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=[a&&u>1?i-1:i,a&&f>1?s-1:s],v=[a&&u>1?u-1:u,a&&f>1?f-1:f],y=c[0]/v[0],m=c[1]/v[1],g=this.readSync(t.dataId),S=0,I=0;I<o;I++)for(var b=I*r.strides[0],k=0;k<u;k++)for(var M=k*y,x=Math.floor(M),A=Math.min(Math.ceil(M),i-1),F=b+x*r.strides[1],w=b+A*r.strides[1],T=M-x,D=1-T,z=0;z<f;z++)for(var _=z*m,W=Math.floor(_),O=Math.min(Math.ceil(_),s-1),H=_-W,N=1-H,B=F+W*r.strides[2],C=F+O*r.strides[2],E=w+W*r.strides[2],P=w+O*r.strides[2],R=D*N,q=D*H,L=T*N,U=T*H,j=0;j<d;j++){var G=g[S++];l[B+j]+=G*R,l[C+j]+=G*q,l[E+j]+=G*L,l[P+j]+=G*U}return e.tensor4d(l,[o,s,i,d],r.dtype)},a.prototype.resizeNearestNeighbor=function(t,r,a,n){h(t,"resizeNearestNeighbor");for(var o=t.shape,i=o[0],s=o[1],d=o[2],p=o[3],u=this.readSync(t.dataId),f=new Float32Array(i*r*a*p),l=[n&&r>1?s-1:s,n&&a>1?d-1:d],c=[n&&r>1?r-1:r,n&&a>1?a-1:a],v=l[0]/c[0],y=l[1]/c[1],m=0,g=0;g<i;g++)for(var S=g*t.strides[0],I=0;I<r;I++)for(var b=v*I,k=S+Math.min(s-1,n?Math.round(b):Math.floor(b))*t.strides[1],M=0;M<a;M++)for(var x=y*M,A=k+Math.min(d-1,n?Math.round(x):Math.floor(x))*t.strides[2],F=0;F<p;F++){var w=u[A+F];f[m++]=w}return e.tensor(f,[i,r,a,p],t.dtype)},a.prototype.resizeNearestNeighborBackprop=function(t,r,a){h([t,r],"resizeNearestNeighborBackprop");for(var n=r.shape,o=n[0],i=n[1],s=n[2],d=n[3],p=t.shape,u=p[1],f=p[2],l=new Float32Array(o*i*s*d),c=this.readSync(t.dataId),v=[a&&u>1?i-1:i,a&&f>1?s-1:s],y=[a&&u>1?u-1:u,a&&f>1?f-1:f],m=v[0]/y[0],g=v[1]/y[1],S=1/m,I=1/g,b=2*Math.ceil(S)+2,k=2*Math.ceil(I)+2,M=0;M<o;M++)for(var x=M*r.strides[0],A=0;A<i;A++)for(var F=x+A*r.strides[1],w=Math.floor(A*S),T=Math.floor(w-b/2),D=0;D<s;D++)for(var z=F+D*r.strides[2],_=Math.floor(D*I),W=Math.floor(_-k/2),O=0;O<d;O++){for(var H=0,N=0;N<b;N++){var B=N+T;if(!(B<0||B>=u)){var C=x+B*t.strides[1],E=B*m;if(A===Math.min(i-1,a?Math.round(E):Math.floor(E)))for(var P=0;P<k;P++){var R=P+W;if(!(R<0||R>=f)){var q=C+R*t.strides[2],L=R*g;D===Math.min(s-1,a?Math.round(L):Math.floor(L))&&(H+=c[q+O])}}}}l[z+O]=H}return e.tensor4d(l,r.shape,r.dtype)},a.prototype.batchNorm=function(t,r,a,n,o,i){h([t,r,a,o,n],"batchNorm");for(var s=this.readSync(t.dataId),d=this.readSync(r.dataId),p=this.readSync(a.dataId),u=o?this.readSync(o.dataId):new Float32Array([1]),f=n?this.readSync(n.dataId):new Float32Array([0]),l=new Float32Array(s.length),c=f.length,v=u.length,y=p.length,m=d.length,g=0,S=0,I=0,b=0,k=0;k<s.length;++k)l[k]=f[g++]+(s[k]-d[S++])*u[I++]/Math.sqrt(p[b++]+i),g>=c&&(g=0),S>=m&&(S=0),I>=v&&(I=0),b>=y&&(b=0);return e.tensor4d(l,t.shape)},a.prototype.localResponseNormalization4D=function(t,r,a,n,o){h(t,"localResponseNormalization4D");var i=t.shape[3],s=i-1,d=this.readSync(t.dataId),p=t.size,u=new Float32Array(p);function f(t){for(var e=t%i,a=t-e+Math.max(0,e-r),n=t-e+Math.min(e+r,s),o=0;a<=n;a++){var h=d[a];o+=h*h}return o}for(var l=0;l<p;l++){var c=f(l),v=d[l]*Math.pow(a+n*c,-o);u[l]=v}return e.tensor4d(u,t.shape)},a.prototype.LRNGrad=function(t,r,a,n,o,i,s){h(t,"LRNGrad");for(var d=t.shape[3],p=this.readSync(t.dataId),u=this.readSync(r.dataId),f=this.readSync(a.dataId),l=new Float32Array(t.size),c=t.size,v=0;v<c;v++){for(var y=v%d,m=v-y+Math.max(0,y-n),g=v-y+Math.min(d,y+n+1),S=0,I=m;I<g;I++)S+=Math.pow(u[I],2);S=i*S+o;for(I=m;I<g;I++){var b=-2*i*s*u[I]*f[v]/S;v===I&&(b+=Math.pow(S,-s)),b*=p[v],l[I]+=b}}return e.tensor4d(l,t.shape)},a.prototype.multinomial=function(t,a,n,o){h(t,"multinomial");for(var i=a?t:e.softmax(t),s=i.shape[0],d=i.shape[1],p=e.zeros([s,n],"int32"),u=this.readSync(p.dataId),f=this.readSync(i.dataId),l=0;l<s;++l){var c=l*d,v=new Float32Array(d-1);v[0]=f[c];for(var y=1;y<v.length;++y)v[y]=v[y-1]+f[c+y];for(var m=r.alea(o.toString()),g=l*n,S=0;S<n;++S){var I=m();u[g+S]=v.length;for(var b=0;b<v.length;b++)if(I<v[b]){u[g+S]=b;break}}}return p},a.prototype.oneHot=function(t,r,a,n){h(t,"oneHot");var o=new Float32Array(t.size*r);o.fill(n);for(var i=this.readSync(t.dataId),s=0;s<t.size;++s)i[s]>=0&&i[s]<r&&(o[s*r+i[s]]=a);return e.tensor2d(o,[t.size,r],"int32")},a.prototype.nonMaxSuppression=function(t,e,r,a,n){h(t,"nonMaxSuppression");var o=this.readSync(t.dataId),i=this.readSync(e.dataId);return f(o,i,r,a,n)},a.prototype.fft=function(t){return this.fftBatch(t,!1)},a.prototype.ifft=function(t){return this.fftBatch(t,!0)},a.prototype.fftBatch=function(t,r){for(var a=t.shape[0],n=t.shape[1],o=e.buffer(t.shape,"float32"),i=e.buffer(t.shape,"float32"),s=e.real(t).as2D(a,n),d=e.imag(t).as2D(a,n),h=0;h<a;h++)for(var p=s.slice([h,0],[1,n]),u=d.slice([h,0],[1,n]),f=e.complex(p,u),l=this.readSync(this.fftImpl(f,r).dataId),c=0;c<n;c++){var v=e.backend_util.getComplexWithIndex(l,c);o.values[h*n+c]=v.real,i.values[h*n+c]=v.imag}return e.complex(o.toTensor(),i.toTensor()).as2D(a,n)},a.prototype.fftImpl=function(t,r){var a=t.as1D(),n=a.size;if(this.isExponentOf2(n)){var o=this.fftRadix2(a,n,r).as2D(t.shape[0],t.shape[1]);return r&&(o=e.complex(e.real(o).div(e.scalar(n)),e.imag(o).div(e.scalar(n)))),o}var i=this.readSync(t.dataId),s=this.fourierTransformByMatmul(i,n,r),d=e.backend_util.splitRealAndImagArrays(s);return e.complex(d.real,d.imag).as2D(t.shape[0],t.shape[1])},a.prototype.isExponentOf2=function(t){return 0==(t&t-1)},a.prototype.fftRadix2=function(t,r,a){if(1===r)return t;var n=this.readSync(t.dataId),o=r/2,i=e.backend_util.complexWithEvenIndex(n),s=e.complex(i.real,i.imag).as1D(),d=e.backend_util.complexWithOddIndex(n),h=e.complex(d.real,d.imag).as1D();s=this.fftRadix2(s,o,a),h=this.fftRadix2(h,o,a);var p=e.backend_util.exponents(r,a),u=e.complex(p.real,p.imag).mul(h),f=s.add(u),l=s.sub(u),c=e.real(f).concat(e.real(l)),v=e.imag(f).concat(e.imag(l));return e.complex(c,v).as1D()},a.prototype.fourierTransformByMatmul=function(t,r,a){for(var n=new Float32Array(2*r),o=0;o<r;o++){for(var i=0,s=0,d=0;d<r;d++){var h=e.backend_util.exponent(o*d,r,a),p=e.backend_util.getComplexWithIndex(t,d);i+=p.real*h.real-p.imag*h.imag,s+=p.real*h.imag+p.imag*h.real}a&&(i/=r,s/=r),e.backend_util.assignToTypedArray(n,i,s,o)}return n},a.prototype.depthToSpace=function(t,r,a){e.util.assert("NHWC"===a,(function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+a})),e.util.assert(r>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+r}));for(var n=t.shape[0],o=t.shape[1],i=t.shape[2],s=t.shape[3],d=o*r,h=i*r,p=s/(r*r),u=this.readSync(t.dataId),f=new Float32Array(n*d*h*p),l=0,c=0;c<n;++c)for(var v=0;v<d;++v)for(var y=Math.floor(v/r),m=v%r,g=0;g<h;++g)for(var S=Math.floor(g/r),I=(m*r+g%r)*p,b=0;b<p;++b){var k=b+I+s*(S+i*(y+o*c));f[l++]=u[k]}return e.tensor4d(f,[n,d,h,p])},a.prototype.broadcastedBinaryOp=function(t,r,a,n){var o=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),i=e.buffer(o,a),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,o),p=e.backend_util.getBroadcastDims(r.shape,o),u=i.values;if(h.length+p.length===0)for(var f=0;f<u.length;++f)u[f]=n(s[f%s.length],d[f%d.length]);else{var l=this.bufferSync(t),c=this.bufferSync(r),v=function(e){var a=i.indexToLoc(e),o=a.slice(-t.rank);h.forEach((function(t){return o[t]=0}));var f=l.locToIndex(o),v=a.slice(-r.rank);p.forEach((function(t){return v[t]=0}));var y=c.locToIndex(v);u[e]=n(s[f],d[y])};for(f=0;f<u.length;++f)v(f)}return i.toTensor()},a.prototype.broadcastedBinaryComplexOp=function(t,r,a){var n=e.backend_util.assertAndGetBroadcastShape(t.shape,r.shape),o=e.buffer(n,"float32"),i=e.buffer(n,"float32"),s=this.readSync(t.dataId),d=this.readSync(r.dataId),h=e.backend_util.getBroadcastDims(t.shape,n),p=e.backend_util.getBroadcastDims(r.shape,n),u=o.values,f=i.values;if(h.length+p.length===0)for(var l=0;l<u.length;l++){var c=l%s.length,v=l%d.length,y=a(s[2*c],s[2*c+1],d[2*v],d[2*v+1]);u[l]=y.real,f[l]=y.imag}else{var m=this.bufferSync(this.data.get(t.dataId).complexTensors.real),g=this.bufferSync(this.data.get(r.dataId).complexTensors.real),S=function(e){var n=o.indexToLoc(e),i=n.slice(-t.rank);h.forEach((function(t){return i[t]=0}));var l=m.locToIndex(i),c=n.slice(-r.rank);p.forEach((function(t){return c[t]=0}));var v=g.locToIndex(c),y=a(s[2*l],s[2*l+1],d[2*v],d[2*v+1]);u[e]=y.real,f[e]=y.imag};for(l=0;l<u.length;l++)S(l)}return this.complex(o.toTensor(),i.toTensor())},a.prototype.split=function(t,e,r){return l(t,e,r)},a.prototype.dispose=function(){},a.prototype.floatPrecision=function(){return 32},a.prototype.epsilon=function(){return t.prototype.epsilon.call(this)},a.prototype.cropAndResize=function(t,r,a,n,o,i){for(var s=t.shape,d=s[0],h=s[1],p=s[2],u=s[3],f=r.shape[0],l=n[0],c=n[1],v=e.buffer([f,l,c,u],"float32"),y=this.readSync(r.dataId),m=this.readSync(a.dataId),g=this.readSync(t.dataId),S=t.strides,I=v.strides,b=0;b<f;b++){var k=4*b,M=y[k],x=y[k+1],A=y[k+2],F=y[k+3],w=m[b];if(!(w>=d))for(var T=l>1?(A-M)*(h-1)/(l-1):0,D=c>1?(F-x)*(p-1)/(c-1):0,z=0;z<l;z++){var _=l>1?M*(h-1)+z*T:.5*(M+A)*(h-1);if(_<0||_>h-1)for(var W=0;W<c;W++)for(var O=0;O<u;O++){var H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else if("bilinear"===o){var N=Math.floor(_),B=Math.ceil(_),C=_-N;for(W=0;W<c;W++){if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var E=Math.floor(V),P=Math.ceil(V),R=V-E;for(O=0;O<u;O++){var q=g[H=O+E*S[2]+N*S[1]+w*S[0]],L=g[H=O+P*S[2]+N*S[1]+w*S[0]],U=g[H=O+E*S[2]+B*S[1]+w*S[0]],j=q+(L-q)*R,G=U+(g[H=O+P*S[2]+B*S[1]+w*S[0]]-U)*R;H=O+W*I[2]+z*I[1]+b*I[0],v.values[H]=j+(G-j)*C}}}}else for(W=0;W<c;++W){var V;if((V=c>1?x*(p-1)+W*D:.5*(x+F)*(p-1))<0||V>p-1)for(O=0;O<u;O++){H=O+W*I[2]+z*I[1]+b*I[0];v.values[H]=i}else{var Y=Math.round(V),K=Math.round(_);for(O=0;O<u;O++){var J=O+Y*S[2]+K*S[1]+w*S[0],Q=O+W*I[2]+z*I[1]+b*I[0];v.values[Q]=g[J]}}}}}return v.toTensor()},a.prototype.sparseToDense=function(t,r,a,n){var o=e.backend_util.calculateShapes(r,t,a),i=o.sliceRank,s=o.numUpdates,d=o.sliceSize,h=o.strides,p=o.outputSize;return this.scatter(t,r,a,p,d,s,i,h,n,!1)},a.prototype.gatherND=function(t,r){var a=r.shape,n=a[a.length-1],o=e.backend_util.prepareAndValidate(t,r),i=o[0],s=o[1],d=o[2],h=o[3];if(0===s)return e.tensor([],i,t.dtype);for(var p=new e.TensorBuffer([s,d],t.dtype),u=this.readSync(r.dataId),f=this.readSync(t.dataId),l=0;l<s;l++){for(var c=[],v=0,y=0;y<n;y++){var m=u[l*n+y];v+=m*h[y],c.push(m)}if(v<0||v>=t.size/d)throw new Error("Invalid indices: "+c+" does not index into "+t.shape);for(var g=0;g<d;g++)p.values[l*d+g]=f[v*d+g]}return p.toTensor().reshape(i)},a.prototype.scatterND=function(t,r,a){var n=e.backend_util.calculateShapes(r,t,a),o=n.sliceRank,i=n.numUpdates,s=n.sliceSize,d=n.strides,h=n.outputSize,p=e.scalar(0);return this.scatter(t,r,a,h,s,i,o,d,p,!0)},a.prototype.fill=function(t,r,a){a=a||e.util.inferDtype(r);var n=e.util.getArrayFromDType(a,e.util.sizeFromShape(t));return n.fill(r),e.engine().makeTensor(n,t,a,this)},a.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},a.prototype.zerosLike=function(t){var r=e.util.getArrayFromDType(t.dtype,e.util.sizeFromShape(t.shape));return this.makeOutput(r,t.shape,t.dtype)},a.prototype.linspace=function(t,r,a){return e.backend_util.linspaceImpl(t,r,a)},a.prototype.scatter=function(t,r,a,n,o,i,s,d,h,p){var u=[n/o,o],f=this.readSync(t.dataId),l=this.readSync(r.dataId);if(0===n)return e.tensor([],a,r.dtype);var c=new e.TensorBuffer(u,r.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var v=0;v<i;v++){for(var y=[],m=0,g=0;g<s;g++){var S=f[v*s+g];y.push(S),m+=S*d[g]}if(m<0||m>=n/o)throw new Error("Invalid indices: "+y+" does not index into "+a);for(var I=0;I<o;I++)p?c.values[m*o+I]+=l[v*o+I]:c.values[m*o+I]=0===r.rank?l[0]:l[v*o+I]}return c.toTensor().reshape(a)},a}(e.KernelBackend);function S(t,e){return{kernelName:t,backendName:"cpu",kernelFunc:function(r){var a=r.inputs,n=r.backend,o=a,i=o.a,s=o.b,d=n;h([i,s],t);var p=d.data.get(i.dataId).values,u=d.data.get(s.dataId).values,f=e(i.shape,s.shape,p,u,i.dtype),l=f[0],c=f[1];return{dataId:d.write(l,c,i.dtype),shape:c,dtype:i.dtype}}}}function I(t){return function(r,a,n,o,i){var s=e.backend_util.assertAndGetBroadcastShape(r,a),d=s.length,h=e.util.computeStrides(s),p=e.util.sizeFromShape(s),u=e.util.getTypedArrayFromDType(i,p),f=r.length,l=a.length,c=e.util.computeStrides(r),v=e.util.computeStrides(a),y=e.backend_util.getBroadcastDims(r,s),m=e.backend_util.getBroadcastDims(a,s);if(y.length+m.length===0)for(var g=0;g<u.length;++g)u[g]=t(n[g%n.length],o[g%o.length]);else{var S=function(r){var a=e.util.indexToLoc(r,d,h),i=a.slice(-f);y.forEach((function(t){return i[t]=0}));var s=e.util.locToIndex(i,f,c),p=a.slice(-l);m.forEach((function(t){return p[t]=0}));var g=e.util.locToIndex(p,l,v);u[r]=t(n[s],o[g])};for(g=0;g<u.length;++g)S(g)}return[u,s]}}var b=I((function(t,e){return t/e})),k=S(e.Div,b),M={kernelName:e.Max,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,o=t.attrs,i=t.backend,s=r.x,d=o.reductionIndices,p=i,u=s.shape,f=u.length,l=e.util.parseAxisParam(d,u),c=e.backend_util.getAxesPermutation(l,f),v=p.data.get(s.dataId).values;if(null!=c){for(var y=new Array(f),m=0;m<y.length;m++)y[m]=u[c[m]];v=n(v,u,s.dtype,c,y),l=e.backend_util.getInnerMostAxes(l.length,f),u=y}h(s,"max"),e.backend_util.assertAxesAreInnerMostDims("max",l,f);var g=e.backend_util.computeOutAndReduceShapes(u,l),S=g[0],I=g[1],b=a(v,e.util.sizeFromShape(I),S,s.dtype);return{dataId:p.write(b,S,s.dtype),shape:S,dtype:s.dtype}}};for(var x={kernelName:e.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(t){var r=t.inputs,a=t.attrs,n=t.backend,o=r.x,i=a,s=i.filterSize,d=i.strides,f=i.pad,l=i.includeBatchInIndex,c=n;h(o,"MaxPoolWithArgmax");var v=c.data.get(o.dataId).values,y=e.backend_util.computePool2DInfo(o.shape,s,d,[1,1],f),m=function(t,r,a,n,o){var i=p(t,0,a,e.util.computeStrides(r),o,"max"),s=u(t,r,a,o,!0,n);return[i.values,s.values]}(v,o.shape,o.dtype,l,y),g=m[0],S=m[1],I=c.write(g,y.outShape,o.dtype),b=c.write(S,y.outShape,o.dtype);return[{dataId:I,shape:y.outShape,dtype:o.dtype},{dataId:b,shape:y.outShape,dtype:"int32"}]}},A=e.kernel_impls.nonMaxSuppressionV5,F={kernelName:e.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=t.attrs,n=e,o=n.boxes,i=n.scores,s=a,d=s.maxOutputSize,p=s.iouThreshold,u=s.scoreThreshold,f=s.softNmsSigma,l=r;h(o,"NonMaxSuppressionWithScore");var c=l.data.get(o.dataId).values,v=l.data.get(i.dataId).values,y=A(c,v,d,p,u,f);return[y.selectedIndices,y.selectedScores]}},w={kernelName:e.Square,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.backend,a=e.x,n=r;h(a,"square");for(var o=n.data.get(a.dataId).values,i=new Float32Array(o.length),s=0;s<o.length;++s){var d=o[s];i[s]=d*d}return{dataId:n.write(i,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},T=I((function(t,e){var r=t-e;return r*r})),D=0,z=[F,w,S(e.SquaredDifference,T),k,{kernelName:e.Transpose,backendName:"cpu",kernelFunc:function(t){var e=t.inputs,r=t.attrs,a=t.backend,o=e.x,i=r.perm,s=a;h(o,"transpose");for(var d=o.shape.length,p=new Array(d),u=0;u<p.length;u++)p[u]=o.shape[i[u]];var f=n(s.data.get(o.dataId).values,o.shape,o.dtype,i,p);return{dataId:s.write(f,p,o.dtype),shape:p,dtype:o.dtype}}},x,M];D<z.length;D++){var _=z[D];e.registerKernel(_)}e.registerBackend("cpu",(function(){return new g}),1),t.MathBackendCPU=g,t.shared=o,t.version_cpu="2.0.1",Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=tf-backend-cpu.min.js.map
/** @license See the LICENSE file. */
declare const version = "2.0.0";
declare const version = "2.0.1";
export { version };
/** @license See the LICENSE file. */
// This code is auto-generated, do not modify this file!
const version = '2.0.0';
const version = '2.0.1';
export { version };
//# sourceMappingURL=version.js.map
{
"name": "@tensorflow/tfjs-backend-cpu",
"version": "2.0.0",
"version": "2.0.1",
"description": "Vanilla JavaScript backend for TensorFlow.js",

@@ -25,3 +25,3 @@ "private": false,

"@rollup/plugin-typescript": "^3.0.0",
"@tensorflow/tfjs-core": "2.0.0",
"@tensorflow/tfjs-core": "2.0.1",
"@types/jasmine": "~3.0.0",

@@ -69,3 +69,3 @@ "clang-format": "~1.2.4",

"peerDependencies": {
"@tensorflow/tfjs-core": "2.0.0"
"@tensorflow/tfjs-core": "2.0.1"
},

@@ -72,0 +72,0 @@ "browser": {

@@ -13,3 +13,3 @@ # Usage

// Import @tensorflow/tfjs-core
import * as tf from '@tensorflow/tfjs';
import * as tf from '@tensorflow/tfjs-core';
// Adds the CPU backend to the global backend registry.

@@ -16,0 +16,0 @@ import '@tensorflow/tfjs-backend-cpu';

/** @license See the LICENSE file. */
// This code is auto-generated, do not modify this file!
const version = '2.0.0';
const version = '2.0.1';
export {version};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc