{"version":3,"file":"face-api.js","sources":["../node_modules/@tensorflow/tfjs-core/dist/tf-core.esm.js","../src/draw/drawContour.ts","../src/classes/Dimensions.ts","../src/utils/index.ts","../src/classes/Point.ts","../src/classes/Box.ts","../src/classes/BoundingBox.ts","../src/classes/ObjectDetection.ts","../src/classes/FaceDetection.ts","../src/ops/iou.ts","../src/ops/minBbox.ts","../src/ops/nonMaxSuppression.ts","../src/ops/normalize.ts","../src/ops/padToSquare.ts","../src/ops/shuffleArray.ts","../src/ops/index.ts","../src/classes/Rect.ts","../src/classes/FaceLandmarks.ts","../src/classes/FaceLandmarks5.ts","../src/classes/FaceLandmarks68.ts","../src/classes/FaceMatch.ts","../src/classes/LabeledBox.ts","../src/classes/LabeledFaceDescriptors.ts","../src/classes/PredictedBox.ts","../src/factories/WithFaceDetection.ts","../src/env/createBrowserEnv.ts","../src/env/createFileSystem.ts","../src/env/createNodejsEnv.ts","../src/env/isBrowser.ts","../src/env/isNodejs.ts","../src/env/index.ts","../src/dom/resolveInput.ts","../src/dom/getContext2dOrThrow.ts","../src/draw/DrawTextField.ts","../src/draw/DrawBox.ts","../src/draw/drawDetections.ts","../src/dom/isMediaLoaded.ts","../src/dom/awaitMediaLoaded.ts","../src/dom/bufferToImage.ts","../src/dom/getMediaDimensions.ts","../src/dom/createCanvas.ts","../src/dom/imageTensorToCanvas.ts","../src/dom/isMediaElement.ts","../src/dom/imageToSquare.ts","../src/dom/NetInput.ts","../src/dom/toNetInput.ts","../src/dom/extractFaces.ts","../src/dom/extractFaceTensors.ts","../src/dom/fetchOrThrow.ts","../src/dom/fetchImage.ts","../src/dom/fetchJson.ts","../src/dom/fetchNetWeights.ts","../src/common/getModelUris.ts","../src/dom/loadWeightMap.ts","../src/dom/matchDimensions.ts","../src/NeuralNetwork.ts","../src/common/depthwiseSeparableConv.ts","../src/faceFeatureExtractor/denseBlock.ts","../src/common/convLayer.ts","../src/common/disposeUnusedWeightTensors.ts","../src/common/extractConvParamsFactory.ts","../src/common/extractFCParamsFactory.ts","../src/common/types.ts","../src/common/extractSeparableConvParamsFactory.ts","../src/common/extractWeightEntryFactory.ts","../src/common/extractWeightsFactory.ts","../src/faceFeatureExtractor/extractorsFactory.ts","../src/faceFeatureExtractor/extractParams.ts","../src/common/loadConvParamsFactory.ts","../src/faceFeatureExtractor/loadParamsFactory.ts","../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts","../src/faceFeatureExtractor/FaceFeatureExtractor.ts","../src/common/fullyConnectedLayer.ts","../src/faceProcessor/extractParams.ts","../src/faceProcessor/extractParamsFromWeigthMap.ts","../src/faceProcessor/util.ts","../src/faceProcessor/FaceProcessor.ts","../src/faceExpressionNet/FaceExpressions.ts","../src/faceExpressionNet/FaceExpressionNet.ts","../src/factories/WithFaceExpressions.ts","../src/draw/drawFaceExpressions.ts","../src/factories/WithFaceLandmarks.ts","../src/draw/DrawFaceLandmarks.ts","../src/xception/extractParams.ts","../src/xception/extractParamsFromWeigthMap.ts","../src/xception/TinyXception.ts","../src/ageGenderNet/extractParams.ts","../src/ageGenderNet/extractParamsFromWeigthMap.ts","../src/ageGenderNet/types.ts","../src/ageGenderNet/AgeGenderNet.ts","../src/faceLandmarkNet/FaceLandmark68NetBase.ts","../src/faceLandmarkNet/FaceLandmark68Net.ts","../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts","../src/faceFeatureExtractor/extractParamsTiny.ts","../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts","../src/faceLandmarkNet/FaceLandmark68TinyNet.ts","../src/faceLandmarkNet/index.ts","../src/faceRecognitionNet/scaleLayer.ts","../src/faceRecognitionNet/convLayer.ts","../src/faceRecognitionNet/extractParams.ts","../src/faceRecognitionNet/extractParamsFromWeigthMap.ts","../src/faceRecognitionNet/residualLayer.ts","../src/faceRecognitionNet/FaceRecognitionNet.ts","../src/faceRecognitionNet/index.ts","../src/factories/WithFaceDescriptor.ts","../src/factories/WithAge.ts","../src/factories/WithGender.ts","../src/mtcnn/MtcnnOptions.ts","../src/ssdMobilenetv1/extractParams.ts","../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts","../src/ssdMobilenetv1/pointwiseConvLayer.ts","../src/ssdMobilenetv1/mobileNetV1.ts","../src/ssdMobilenetv1/nonMaxSuppression.ts","../src/ssdMobilenetv1/outputLayer.ts","../src/ssdMobilenetv1/boxPredictionLayer.ts","../src/ssdMobilenetv1/predictionLayer.ts","../src/ssdMobilenetv1/SsdMobilenetv1Options.ts","../src/ssdMobilenetv1/SsdMobilenetv1.ts","../src/ssdMobilenetv1/index.ts","../src/tinyYolov2/const.ts","../src/tinyYolov2/config.ts","../src/tinyYolov2/leaky.ts","../src/tinyYolov2/convWithBatchNorm.ts","../src/tinyYolov2/depthwiseSeparableConv.ts","../src/tinyYolov2/extractParams.ts","../src/tinyYolov2/extractParamsFromWeigthMap.ts","../src/tinyYolov2/TinyYolov2Options.ts","../src/tinyYolov2/TinyYolov2Base.ts","../src/tinyYolov2/TinyYolov2.ts","../src/tinyYolov2/index.ts","../src/tinyFaceDetector/TinyFaceDetectorOptions.ts","../src/globalApi/ComposableTask.ts","../src/globalApi/extractFacesAndComputeResults.ts","../src/mtcnn/bgrToRgbTensor.ts","../src/mtcnn/config.ts","../src/mtcnn/extractParams.ts","../src/mtcnn/extractParamsFromWeigthMap.ts","../src/mtcnn/getSizesForScale.ts","../src/mtcnn/pyramidDown.ts","../src/mtcnn/MtcnnBox.ts","../src/mtcnn/normalize.ts","../src/mtcnn/prelu.ts","../src/mtcnn/sharedLayers.ts","../src/mtcnn/PNet.ts","../src/mtcnn/stage1.ts","../src/mtcnn/extractImagePatches.ts","../src/mtcnn/RNet.ts","../src/mtcnn/stage2.ts","../src/mtcnn/ONet.ts","../src/mtcnn/stage3.ts","../src/mtcnn/Mtcnn.ts","../src/tinyFaceDetector/const.ts","../src/tinyFaceDetector/TinyFaceDetector.ts","../src/globalApi/nets.ts","../src/globalApi/PredictFaceExpressionsTask.ts","../src/globalApi/PredictAgeAndGenderTask.ts","../src/globalApi/ComputeFaceDescriptorsTasks.ts","../src/globalApi/DetectFaceLandmarksTasks.ts","../src/globalApi/DetectFacesTasks.ts","../src/globalApi/detectFaces.ts","../src/globalApi/allFaces.ts","../src/euclideanDistance.ts","../src/globalApi/FaceMatcher.ts","../src/mtcnn/index.ts","../src/tinyFaceDetector/index.ts","../src/resizeResults.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nvar t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};function e(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}function n(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function s(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){t.done?o(t.value):new n((function(e){e(t.value)})).then(i,s)}u((r=r.apply(t,e||[])).next())}))}function r(t,e){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError(\"Generator is already executing.\");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n}function x(t,e,n){return Math.max(t,Math.min(e,n))}function b(t){return t%2==0?t:t+1}function w(t){for(var e=0,n=0;n=n?o():setTimeout(i,s)}};i()}))}function _(t,e){for(var n=1,r=-1,o=0;o=0)n*=t[o];else if(-1===t[o]){if(-1!==r)throw Error(\"Shapes can only have 1 implicit size. Found -1 at dim \"+r+\" and dim \"+o);r=o}else if(t[o]<0)throw Error(\"Shapes can not be < 0. Found \"+t[o]+\" at dim \"+o);if(-1===r){if(e>0&&e!==n)throw Error(\"Size(\"+e+\") must match the product of shape \"+t);return t}if(0===n)throw Error(\"Cannot infer the missing size in [\"+t+\"] when there are 0 elements\");if(e%n!=0)throw Error(\"The implicit shape can't be a fractional number. Got \"+e+\" / \"+n);var a=t.slice();return a[r]=e/n,a}function O(t,e){var n=e.length;return C((t=null==t?e.map((function(t,e){return e})):[].concat(t)).every((function(t){return t>=-n&&ts)&&1===t[s]&&(n.push(t[s]),r.push(s)),a[i]<=s&&i++}1!==t[s]&&(n.push(t[s]),r.push(s))}return{newShape:n,keptDims:r}}function B(t,e){var n=null;if(null==t||\"float32\"===t)n=new Float32Array(e);else if(\"int32\"===t)n=new Int32Array(e);else{if(\"bool\"!==t)throw new Error(\"Unknown data type \"+t);n=new Uint8Array(e)}return n}function P(t,e){var n=null;if(null==t||\"float32\"===t)n=new Float32Array(e);else if(\"int32\"===t)n=new Int32Array(e);else if(\"bool\"===t)n=new Uint8Array(e);else{if(\"string\"!==t)throw new Error(\"Unknown data type \"+t);n=new Array(e)}return n}function L(t,e){for(var n=0;n=0;--r)n[r]=n[r+1]*t[r+1];return n}function Q(t,e,n){if(\"string\"===e)throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(t)&&(t=I(t)),n&&L(t,e),function(t,e){return t instanceof Float32Array&&\"float32\"===e||t instanceof Int32Array&&\"int32\"===e||t instanceof Uint8Array&&\"bool\"===e}(t,e))return t;if(null==e||\"float32\"===e||\"complex64\"===e)return new Float32Array(t);if(\"int32\"===e)return new Int32Array(t);if(\"bool\"===e){for(var r=new Uint8Array(t.length),o=0;o=0,(function(){return\"Tensor must have a shape comprised of positive integers but got shape [\"+t+\"].\"}))}))}function rt(t,e){return void 0===e&&(e=\"utf-8\"),e=e||\"utf-8\",i().platform.encode(t,e)}function ot(t,e){return void 0===e&&(e=\"utf-8\"),e=e||\"utf-8\",i().platform.decode(t,e)}function at(t,e,n){if(0===e)return 0;if(1===e)return t[0];for(var r=t[t.length-1],o=0;o0?d:\"\")+\" \"}console.log(\"%c\"+s+\"\\t%c\"+i+\"\\t%c\"+u+\"D \"+l+\"\\t%c\"+c+\"\\t%c\"+h+\"\\t%c\"+a,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")},t}();var lt=20,ht=3,ft=7;function dt(t,e,n,r){var o=$(e),a=function(t,e,n,r){var o=k(e),a=r[r.length-1],i=new Array(a).fill(0),s=e.length,u=\"complex64\"===n?mt(t):t;if(s>1)for(var c=0;clt){var l=ht*s,h=Array.from(e.slice(0,l)),f=Array.from(e.slice((u-ht)*s,u*s));return\"complex64\"===r&&(h=mt(h),f=mt(f)),[\"[\"+h.map((function(t,e){return pt(t,a[e],r)})).join(\", \")+\", ..., \"+f.map((function(t,e){return pt(t,a[u-ht+e],r)})).join(\", \")+\"]\"]}return[\"[\"+(\"complex64\"===r?mt(e):Array.from(e)).map((function(t,e){return pt(t,a[e],r)})).join(\", \")+\"]\"]}var d=n.slice(1),p=o.slice(1),v=o[0]*s,m=[];if(u>lt){for(var g=0;g=this.shape[n]){var i=\"Requested out of range element at \"+t+\". Buffer shape=\"+this.shape;throw new Error(i)}n++}for(var s=t[t.length-1],u=0;u0)throw new Error(\"Backend '\"+this.backendName+\"' has an internal memory leak (\"+i+\" data ids) after running '\"+t+\"'\")},t.prototype.runKernelFunc=function(t,e,n,r,o,a,i){var s,u=this;void 0===a&&(a=[]),void 0===i&&(i=[]);var c=[],h=this.isTapeOn();null==r&&(r=null!=this.state.activeScope?this.state.activeScope.name:\"\");var f,d=function(t){h&&(c=t.map((function(t){return u.keep(u.clone(t))})))},p=this.state.numBytes,v=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var m,g=l(r,this.backendName);return f=null!=g?function(){var t=u.backend.numDataIds();m=g.kernelFunc({inputs:e,attrs:o,backend:u.backend});var n=Array.isArray(m)?m:[m];u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,t,n);var s=n.map((function(t){var e=t.dataId,n=t.shape,r=t.dtype;return u.makeTensorFromDataId(e,n,r)})),c=s.filter((function(t,e){return i[e]}));return d((a||[]).slice().concat(c)),s}:function(){var e=u.backend.numDataIds();m=u.tidy((function(){return t(u.backend,d)}));var n=Array.isArray(m)?m:[m];return u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,e,n),n},this.scopedRun((function(){return u.state.kernelDepth++}),(function(){return u.state.kernelDepth--}),(function(){s=u.ENV.getBool(\"DEBUG\")?u.profiler.profileKernel(r,e,(function(){return f()})):f()})),h&&this.addTapeNode(r,e,s,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:r,bytesAdded:this.state.numBytes-p,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-v,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map((function(t){return e[t].shape})),outputShapes:s.map((function(t){return t.shape}))}),Array.isArray(m)?s:s[0]},t.prototype.makeTensor=function(t,e,n,r){if(null==t)throw new Error(\"Values passed to engine.makeTensor() are null\");n=n||\"float32\",r=r||this.backend;var o=t;\"string\"===n&&H(t[0])&&(o=t.map((function(t){return rt(t)})));var a=r.write(o,e,n),i=new wt(e,n,a,this.nextTensorId());if(this.incRef(i,r),\"string\"===n){var s=this.state.tensorInfo.get(a),u=G(o);this.state.numBytes+=u-s.bytes,s.bytes=u}return i},t.prototype.makeTensorFromDataId=function(t,e,n,r){var o=new wt(e,n=n||\"float32\",t,this.nextTensorId());return this.incRef(o,r),o},t.prototype.makeVariable=function(t,e,n,r){void 0===e&&(e=!0),n=n||this.nextVariableId().toString(),null!=r&&r!==t.dtype&&(t=t.asType(r));var o=new St(t,e,n,this.nextTensorId());if(null!=this.state.registeredVariables[o.name])throw new Error(\"Variable with name \"+o.name+\" was already registered\");return this.state.registeredVariables[o.name]=o,this.incRef(o,this.backend),o},t.prototype.incRef=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,\"string\"===t.dtype&&this.state.numStringTensors++,0===n){this.state.numDataBuffers++;var r=0;\"complex64\"!==t.dtype&&\"string\"!==t.dtype&&(r=t.size*z(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:r,refCount:0}),this.state.numBytes+=r}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof St||this.track(t)},t.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,\"string\"===t.dtype&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?(\"complex64\"!==t.dtype&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},t.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},t.prototype.disposeVariable=function(t){this.disposeTensor(t),null!=this.state.registeredVariables[t.name]&&delete this.state.registeredVariables[t.name]},t.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push(\"Memory usage by string tensors is approximate (2 bytes per character)\")),t},t.prototype.profile=function(t){return n(this,void 0,void 0,(function(){var e,n;return r(this,(function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map((function(t){return t.totalBytesSnapshot}))),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]}))}))},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n,r,o){var a=this,i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:o},s=h(t);null!=s&&(r=s.gradFunc),null!=r&&(i.gradient=function(t){return t=t.map((function(t,e){if(null==t){var r=n[e],o=tt(r.size,r.dtype);return a.makeTensor(o,r.shape,r.dtype)}return t})),r(t.length>1?t:t[0],o)}),this.state.activeTape.push(i)},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},t.prototype.endTape=function(){this.state.gradientDepth--},t.prototype.startScope=function(t){var e={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},t.prototype.endScope=function(t){for(var e=this,n=_t(t),r=new Set(n.map((function(t){return t.id}))),o=0;o0,(function(){return\"gradients() received an empty list of xs.\"})),null!=n&&\"float32\"!==n.dtype)throw new Error(\"dy must have 'float32' dtype, but has '\"+n.dtype+\"'\");var a=this.scopedRun((function(){return o.startTape()}),(function(){return o.endTape()}),(function(){return o.tidy(\"forward\",t)}));C(a instanceof wt,(function(){return\"The result y returned by f() must be a tensor.\"}));var i=function(t,e,n){for(var r={},o={},a=0;a=0;a--)for(i=(p=t[a]).inputs,l=0;l0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.\");return this.tidy(\"backward\",(function(){var t,r,s={};s[a.id]=null==n?(t=a.shape,r=Z(k(t),\"float32\"),Lt.makeTensor(r,t,\"float32\")):n,function(t,e,n){for(var r=function(r){var o=e[r],a=[];if(o.outputs.forEach((function(e){var n=t[e.id];null!=n?a.push(n):a.push(null)})),null==o.gradient)throw new Error(\"Cannot compute gradient: gradient function not found for \"+o.kernelName+\".\");var i=o.gradient(a),s=function(e){if(!(e in i))throw new Error(\"Cannot backprop through input \"+e+\". Available gradients found: \"+Object.keys(i)+\".\");var r=n((function(){return i[e]()}));if(\"float32\"!==r.dtype)throw new Error(\"Error in gradient for op \"+o.kernelName+\". The gradient of input \"+e+\" must have 'float32' dtype, but has '\"+r.dtype+\"'\");var a=o.inputs[e];if(!S(r.shape,a.shape))throw new Error(\"Error in gradient for op \"+o.kernelName+\". The gradient of input '\"+e+\"' has shape '\"+r.shape+\"', which does not match the shape of the input '\"+a.shape+\"'\");if(null==t[a.id])t[a.id]=r;else{var s=t[a.id];t[a.id]=s.add(r),s.dispose()}};for(var u in o.inputs)s(u)},o=e.length-1;o>=0;o--)r(o)}(s,i,(function(t){return o.tidy(t)}));var u=e.map((function(t){return s[t.id]}));return 0===o.state.gradientDepth&&(o.state.activeTape.forEach((function(t){for(var e=0,n=t.saved;en||e>n){r=\"[\"+t+\"x\"+e+\"]\";throw new Error(\"Requested texture size \"+r+\" greater than WebGL maximum on this browser / GPU \"+(\"[\"+n+\"x\"+n+\"]\")+\".\")}}function me(t,e){return ke(t,e,(function(){return t.createFramebuffer()}),\"Unable to create WebGLFramebuffer.\")}function ge(t,e,n,r,o,a,i,s){var u=t.getAttribLocation(n,r);return-1!==u&&(Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,o)})),Jt(t,e,(function(){return t.vertexAttribPointer(u,a,t.FLOAT,!1,i,s)})),Jt(t,e,(function(){return t.enableVertexAttribArray(u)})),!0)}function ye(t,e,n,r){Se(t,r),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)}))}function xe(t,e,n,r){return ke(t,e,(function(){return t.getUniformLocation(n,r)}),'uniform \"'+r+'\" not present in program.')}function be(t,e,n){return t.getUniformLocation(e,n)}function we(t,e,n,r,o,a){Jt(t,e,(function(){return ye(t,e,r,a)})),Jt(t,e,(function(){return t.uniform1i(o,a)}))}function Ce(t,e,n,r){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)}))}function Ee(t,e,n){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)}))}function Re(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+Ie(t,e))}function Ie(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case t.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return\"unknown error \"+e}}function ke(t,e,n,r){var o=Jt(t,e,(function(){return n()}));if(null==o)throw new Error(r);return o}function Se(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(rn)throw new Error(\"textureUnit must be in \"+(\"[gl.TEXTURE0, gl.TEXTURE\"+n+\"]\")+\".\")}function Ae(t,e){return void 0===e&&(e=2),k(t.slice(0,t.length-e))}function De(t){if(0===t.length)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[t.length>1?t[t.length-2]:1,t[t.length-1]]}function Te(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[Ae(t)].concat(De(t))),e}function Ne(t,e){var n;void 0===e&&(e=!1);var r=i().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(e&&(r*=2,1===(t=t.map((function(e,n){return n>=t.length-2?b(t[n]):t[n]}))).length&&(t=[2,t[0]])),2!==t.length){var o=M(t);t=o.newShape}var a=k(t);if(t.length<=1&&a<=r)return[1,a];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return[t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return[t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return[t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return[t[0],t[1]*t[2]*t[3]];if(e){var s=Ae(t),u=2,c=2;return t.length&&(u=(n=De(t))[0],c=n[1]),T(a=s*(u/2)*(c/2)).map((function(t){return 2*t}))}return T(a)}function Fe(t){return t%2==0}function _e(t,e){if(S(t=t.slice(-2),e=e.slice(-2)))return!0;if(!t.length||!e.length)return!0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return!0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return!0;if(Fe(n)&&Fe(r)&&(1===t[0]||1===e[0]))return!0}return t[1]===e[1]&&Fe(t[0])&&Fe(e[0])}function Oe(t){if(null==ie){var e=jt(t);ie=e.getParameter(e.MAX_TEXTURE_SIZE)}return ie}function Me(t){if(null==se){var e=jt(t);se=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,se)}function Be(t){if(0===t)return 0;var e=jt(t);return Pe(e,\"EXT_disjoint_timer_query_webgl2\")&&2===t?2:Pe(e,\"EXT_disjoint_timer_query\")?1:0}function Pe(t,e){return null!=t.getExtension(e)}function Le(t){try{if(null!=jt(t))return!0}catch(t){return!1}return!1}function We(t){if(0===t)return!1;var e=jt(t);if(1===t){if(!Pe(e,\"OES_texture_float\"))return!1}else if(!Pe(e,\"EXT_color_buffer_float\"))return!1;return Ve(e)}function Ue(t){if(0===t)return!1;var e=jt(t);if(1!==t){if(Pe(e,\"EXT_color_buffer_float\"))return Ve(e);if(Pe(e,\"EXT_color_buffer_half_float\")){var n=e.getExtension(\"EXT_color_buffer_half_float\");return function(t,e){var n=Qt(t,e),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r);t.texImage2D(t.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);var o=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,o),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(o),a}(e,n)}return!1}return!!Pe(e,\"OES_texture_float\")&&(!!Pe(e,\"WEBGL_color_buffer_float\")&&Ve(e))}function Ve(t){var e=Qt(t),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n);t.texImage2D(t.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var o=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),o}function ze(t){return 2===t&&null!=jt(t).fenceSync}var Ge=Object.freeze({callAndCheck:Jt,canBeRepresented:ee,getWebGLErrorMessage:ne,getExtensionOrThrow:re,createVertexShader:oe,createFragmentShader:ae,createProgram:ce,linkProgram:le,validateProgram:he,createStaticVertexBuffer:fe,createStaticIndexBuffer:de,getNumChannels:function(){return 2===i().getNumber(\"WEBGL_VERSION\")?1:4},createTexture:pe,validateTextureSize:ve,createFramebuffer:me,bindVertexBufferToProgramAttribute:ge,bindTextureUnit:ye,unbindTextureUnit:function(t,e,n){Se(t,n),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+n)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))},getProgramUniformLocationOrThrow:xe,getProgramUniformLocation:be,bindTextureToProgramUniformSampler:we,bindCanvasToFramebuffer:function(t,e){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)})),Jt(t,e,(function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)})),Jt(t,e,(function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)}))},bindColorTextureToFramebuffer:Ce,unbindColorTextureFromFramebuffer:Ee,validateFramebuffer:Re,getFramebufferErrorMessage:Ie,getBatchDim:Ae,getRowsCols:De,getShapeAs3D:Te,getTextureShapeFromLogicalShape:Ne,isReshapeFree:_e,getWebGLMaxTextureSize:Oe,resetMaxTextureSize:function(){ie=null},resetMaxTexturesInShader:function(){se=null},getMaxTexturesInShader:Me,getWebGLDisjointQueryTimerVersion:Be,hasExtension:Pe,isWebGLVersionEnabled:Le,isCapableOfRenderingToFloatTexture:We,isDownloadFloatTextureEnabled:Ue,isWebGLFenceEnabled:ze}),He=i();function qe(){i().set(\"PROD\",!0)}function Ke(){i().set(\"DEBUG\",!0)}function je(){i().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Xe(t){i().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(t+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}function Ye(){Lt.disposeVariables()}function $e(){return Lt}function Qe(){return Lt.memory()}function Je(t){return Lt.profile(t)}function Ze(t,e){return Lt.tidy(t,e)}function tn(t){_t(t).forEach((function(t){return t.dispose()}))}function en(t){return Lt.keep(t)}function nn(t){return Lt.time(t)}function rn(t){return Lt.setBackend(t)}function on(){return Lt.ready()}function an(){return Lt.backendName}function sn(t){Lt.removeBackend(t)}function un(t){return Lt.findBackend(t)}function cn(t){return Lt.findBackendFactory(t)}function ln(t,e,n){return void 0===n&&(n=1),Lt.registerBackend(t,e,n)}function hn(){return Lt.backend}function fn(t,e){i().setPlatform(t,e)}function dn(){for(var t=[],e=0;e0,(function(){return\"Element arr[\"+r.join(\"][\")+\"] should be a primitive, but is an array of \"+e.length+\" elements\"})),C(e.length===n[0],(function(){return\"Element arr[\"+r.join(\"][\")+\"] should have \"+n[0]+\" elements, but has \"+e.length+\" elements\"}));for(var o=n.slice(1),a=0;a=0&&(o=r),vn(r,o,e,n),null==t||!V(t)&&!Array.isArray(t)&&\"number\"!=typeof t&&\"boolean\"!=typeof t&&\"string\"!=typeof t){var a=null==t?\"null\":t.constructor.name;throw new Error(\"Argument '\"+e+\"' passed to '\"+n+\"' must be a Tensor or TensorLike, but got '\"+a+\"'\")}var s=pn(t,o);V(t)||Array.isArray(t)||(t=[t]);var u=\"string\"!==o?Q(t,o,i().getBool(\"DEBUG\")):I(t,[],!0);return Lt.makeTensor(u,s,o)}function gn(t,e,n,r){if(void 0===r&&(r=\"numeric\"),!Array.isArray(t))throw new Error(\"Argument \"+e+\" passed to \"+n+\" must be a `Tensor[]` or `TensorLike[]`\");return t.map((function(t,r){return mn(t,e+\"[\"+r+\"]\",n)}),r)}function yn(t,e){for(var n=0;n=0&&e0})),He.registerFlag(\"WEBGL_VERSION\",(function(){return Le(2)?2:Le(1)?1:0})),He.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",(function(){return 2===He.get(\"WEBGL_VERSION\")})),He.registerFlag(\"WEBGL_CPU_FORWARD\",(function(){return!0})),He.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",(function(){return!1})),He.registerFlag(\"WEBGL_PACK\",(function(){return He.getBool(\"HAS_WEBGL\")})),He.registerFlag(\"WEBGL_PACK_NORMALIZATION\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_CLIP\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",(function(){return!1})),He.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_PACK_REDUCE\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_LAZILY_UNPACK\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_CONV_IM2COL\",(function(){return He.getBool(\"WEBGL_PACK\")})),He.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",(function(){return Oe(He.getNumber(\"WEBGL_VERSION\"))})),He.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",(function(){return Me(He.getNumber(\"WEBGL_VERSION\"))})),He.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",(function(){var t=He.getNumber(\"WEBGL_VERSION\");return 0===t?0:Be(t)})),He.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",(function(){return He.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(t.substr(0,4))));var t})),He.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",(function(){return We(He.getNumber(\"WEBGL_VERSION\"))})),He.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",(function(){return!He.getBool(\"WEBGL_FORCE_F16_TEXTURES\")&&He.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\")})),He.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",(function(){return Ue(He.getNumber(\"WEBGL_VERSION\"))})),He.registerFlag(\"WEBGL_FENCE_API_ENABLED\",(function(){return ze(He.getNumber(\"WEBGL_VERSION\"))})),He.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",(function(){return He.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0})),bt=Xe;var Dn=An({complex_:function(t,e){var n=mn(t,\"real\",\"complex\"),r=mn(e,\"imag\",\"complex\");return E(n.shape,r.shape,\"real and imag shapes, \"+n.shape+\" and \"+r.shape+\", must match in call to tf.complex().\"),Lt.runKernelFunc((function(t){return t.complex(n,r)}),{$real:n,$imag:r})}}),Tn=An({real_:function(t){var e=mn(t,\"input\",\"real\");return Lt.runKernelFunc((function(t){return t.real(e)}),{$input:e})}}),Nn=An({imag_:function(t){var e=mn(t,\"input\",\"imag\");return Lt.runKernelFunc((function(t){return t.imag(e)}),{$input:e})}});function Fn(t,e,n){return _n(t,e,pn(t,n),n)}function _n(t,e,n,r){if(null==r&&(r=j(t)),\"complex64\"===r)throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(!V(t)&&!Array.isArray(t)&&\"number\"!=typeof t&&\"boolean\"!=typeof t&&\"string\"!=typeof t)throw new Error(\"values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray\");if(null!=e){nt(e);var o=k(e),a=k(n);C(o===a,(function(){return\"Based on the provided shape, [\"+e+\"], the tensor should have \"+o+\" values but has \"+a}));for(var s=0;s1)return Gn([0],r);var o=tt(Math.abs(Math.ceil((e-t)/n)),r);e=1,(function(){return\"Pass at least one tensor to concat\"}));var n=gn(t,\"tensors\",\"concat\");\"complex64\"===n[0].dtype&&n.forEach((function(t){if(\"complex64\"!==t.dtype)throw new Error(\"Cannot concatenate complex64 tensors with a tensor\\n with dtype \"+t.dtype+\". \")})),e=O(e,n[0].shape)[0];var r=Sn(n.map((function(t){return t.shape})),e);if(0===k(r))return Fn([],r);if(1===(n=n.filter((function(t){return t.size>0}))).length)return n[0];var o=n.map((function(t){return t.shape}));kn(o,e);var a=n,i={axis:e};return Lt.runKernelFunc((function(t){return t.concat(n,e)}),a,(function(t){var n=o.map((function(t){return t[e]}));return tr(t,n,e).map((function(t){return function(){return t}}))}),\"Concat\",i)}}),$n=An({concat1d_:function(t){return Yn(t,0)}}),Qn=An({concat2d_:function(t,e){return Yn(t,e)}}),Jn=An({concat3d_:function(t,e){return Yn(t,e)}}),Zn=An({concat4d_:function(t,e){return Yn(t,e)}}),tr=An({split_:function(t,e,n){void 0===n&&(n=0);var r,o=mn(t,\"x\",\"split\");return n=O(n,o.shape)[0],\"number\"==typeof e?(C(o.shape[n]%e==0,(function(){return\"Number of splits must evenly divide the axis.\"})),r=new Array(e).fill(o.shape[n]/e)):(C(o.shape[n]===e.reduce((function(t,e){return t+e})),(function(){return\"The sum of sizes must match the size of the axis dimension.\"})),r=e),Lt.runKernelFunc((function(t){return t.split(o,r,n)}),{$x:o},(function(t){return{$x:function(){return Yn(t,n)}}}))}});\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self&&self;function er(t,e){return t(e={exports:{}},e.exports),e.exports}var nr=er((function(t){!function(t,e,n){function r(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(\" \"),n.s1=r(\" \"),n.s2=r(\" \"),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null}function o(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function a(t,e){var n=new r(t),a=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.alea=a}(0,t,!1)})),rr=er((function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xor128=a}(0,t,!1)})),or=er((function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r>>4),e.next()}function o(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function a(t,e){var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xorwow=a}(0,t,!1)})),ar=er((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.x,o=e.i;return t=r[o],n=(t^=t>>>7)^t<<24,n^=(t=r[o+1&7])^t>>>10,n^=(t=r[o+3&7])^t>>>3,n^=(t=r[o+4&7])^t<<7,t=r[o+7&7],n^=(t^=t<<13)^t<<9,r[o]=n,e.i=o+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=\"\"+e,n=0;n0;--n)t.next()}(e,t)}function o(t,e){return e.x=t.x.slice(),e.i=t.i,e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.x&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xorshift7=a}(0,t,!1)})),ir=er((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.w,o=e.X,a=e.i;return e.w=r=r+1640531527|0,n=o[a+34&127],t=o[a=a+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=o[a]=n^t,e.i=a,n+(r^r>>>16)|0},function(t,e){var n,r,o,a,i,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+=\"\\0\",r=0,u=Math.max(u,e.length)),o=0,a=-32;a>>15,r^=r<<4,r^=r>>>13,a>=0&&(i=i+1640531527|0,o=0==(n=s[127&a]^=r+i)?o+1:0);for(o>=128&&(s[127&(e&&e.length||0)]=-1),o=127,a=512;a>0;--a)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;t.w=i,t.X=s,t.i=o}(e,t)}function o(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.X&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xor4096=a}(0,t,!1)})),sr=er((function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.next=function(){var t=e.b,n=e.c,r=e.d,o=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^o,o=o-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^o,e.a=o-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.tychei=a}(0,t,!1)})),ur=er((function(t){!function(e,n){var r,o=this,a=256,i=6,s=\"random\",u=n.pow(a,i),c=n.pow(2,52),l=2*c,h=a-1;function f(t,h,f){var g=[],y=v(function t(e,n){var r,o=[],a=typeof e;if(n&&\"object\"==a)for(r in e)try{o.push(t(e[r],n-1))}catch(t){}return o.length?o:\"string\"==a?e:e+\"\\0\"}((h=1==h?{entropy:!0}:h||{}).entropy?[t,m(e)]:null==t?function(){try{var t;return r&&(t=r.randomBytes)?t=t(a):(t=new Uint8Array(a),(o.crypto||o.msCrypto).getRandomValues(t)),m(t)}catch(t){var n=o.navigator,i=n&&n.plugins;return[+new Date,o,i,o.screen,m(e)]}}():t,3),g),x=new d(g),b=function(){for(var t=x.g(i),e=u,n=0;t=l;)t/=2,e/=2,n>>>=1;return(t+n)/e};return b.int32=function(){return 0|x.g(4)},b.quick=function(){return x.g(4)/4294967296},b.double=b,v(m(x.S),e),(h.pass||f||function(t,e,r,o){return o&&(o.S&&p(o,x),t.state=function(){return p(x,{})}),r?(n[s]=t,e):t})(b,y,\"global\"in h?h.global:this==n,h.state)}function d(t){var e,n=t.length,r=this,o=0,i=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);o=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*a*s,this.truncated&&!this.isValidTruncated(e)||(r=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||\"float32\"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),hr=function(){function t(t,e,n,r){this.alpha=t,this.beta=1/e,this.dtype=n;var o=r||Math.random();this.randu=cr(o.toString()),this.randn=new lr(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}return t.prototype.nextValue=function(){for(var t,e,n,r,o,a;;){do{r=this.randn.nextValue(),a=1+this.c*r}while(a<=0);if(a*=a*a,e=1-.331*(t=r*r)*t,n=.5*t+this.d*(1-a+Math.log(a)),(o=this.randu())=1+e.length,(function(){return\"input rank is \"+r.rank+\" but should be > than blockShape.length \"+e.length})),C(n.length===e.length,(function(){return\"crops.length is \"+n.length+\" but should be equal to blockShape.length \"+e.length})),C(r.shape[0]%o==0,(function(){return\"input tensor batch is \"+r.shape[0]+\" but is not divisible by the product of the elements of blockShape \"+e.join(\" * \")+\" === \"+o})),Lt.runKernelFunc((function(t){return t.batchToSpaceND(r,e,n)}),{$x:r},(function(t){return{$x:function(){return t.spaceToBatchND(e,n)}}}))}}),mr=An({broadcastTo_:function(t,e){var n=mn(t,\"broadcastTo\",\"x\"),r=n.shape;if(e.some((function(t){return!(t>0)||t%1!=0})))throw new Error(\"broadcastTo(): Invalid broadcast shape [\"+e+\"].\");if(e.lengthn.rank){for(var o=n.shape.slice();o.length=0;i--)if(n.shape[i]===e[i])a[i]=1;else if(1!==n.shape[i])throw new Error(\"broadcastTo(): [\"+r+\"] cannot be broadcast to [\"+e+\"].\");var s=a.map((function(t,e){return t>1?e:-1})).filter((function(t){return t>=0}));return 0===s.length?n.clone():Lt.runKernelFunc((function(t){return t.tile(n,a)}),{input:n},(function(t){return{input:function(){return t.sum(s,!0)}}}))}}),gr=An({cast_:function(t,e){var n=mn(t,\"x\",\"cast\");if(!W(e))throw new Error(\"Failed to cast to unknown dtype \"+e);if(\"string\"===e&&\"string\"!==n.dtype||\"string\"!==e&&\"string\"===n.dtype)throw new Error(\"Only strings can be casted to strings\");var r={dtype:e};return Lt.runKernelFunc((function(t){return t.cast(n,e)}),{x:n},(function(t){return{x:function(){return t.clone()}}}),\"Cast\",r)}}),yr=An({clone_:function(t){var e=mn(t,\"x\",\"clone\",null);return Lt.runKernelFunc((function(){return Lt.makeTensorFromDataId(e.dataId,e.shape,e.dtype)}),{$x:e},(function(t){return{$x:function(){return t.toFloat()}}}))}}),xr=An({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var o=mn(t,\"x\",\"cumsum\"),a=En([e|=0],o.rank),i=o;null!=a&&(i=o.transpose(a));var s=In(1,o.rank)[0],u=Lt.runKernelFunc((function(t){return t.cumsum(i,s,n,r)}),{permutedX:i},(function(t){return{permutedX:function(){return t.cumsum(e,n,!r)}}}));return null!=a&&(u=u.transpose(a)),u}}),br=An({depthToSpace_:function(t,e,n){void 0===n&&(n=\"NHWC\");var r=mn(t,\"x\",\"depthToSpace\"),o=\"NHWC\"===n?r.shape[1]:r.shape[2],a=\"NHWC\"===n?r.shape[2]:r.shape[3],i=\"NHWC\"===n?r.shape[3]:r.shape[1];return C(o*e>=0,(function(){return\"Negative dimension size caused by overflow when multiplying\\n \"+o+\" and \"+e+\" for depthToSpace with input shape\\n \"+r.shape})),C(a*e>=0,(function(){return\"Negative dimension size caused by overflow when multiplying\\n \"+a+\" and \"+e+\" for depthToSpace with input shape\\n \"+r.shape})),C(i%(e*e)==0,(function(){return\"Dimension size must be evenly divisible by \"+e*e+\" but is \"+i+\" for depthToSpace with input shape \"+r.shape})),Lt.runKernelFunc((function(t){return t.depthToSpace(r,e,n)}),{$x:r})}}),wr=An({expandDims_:function(t,e){void 0===e&&(e=0);var n=mn(t,\"x\",\"expandDims\",null);C(e<=n.rank,(function(){return\"Axis must be <= rank of the tensor\"}));var r=n.shape.slice();return e<0&&(C(-(n.rank+1)<=e,(function(){return\"Axis must be in the interval [\"+-(n.rank+1)+\", \"+n.rank+\"]\"})),e=n.rank+e+1),r.splice(e,0,1),Or(n,r)}}),Cr=An({eye_:function(t,e,n,r){void 0===r&&(r=\"float32\"),null==e&&(e=t);for(var o=dr([t,e],r),a=t<=e?t:e,i=0;i2)throw new Error(\"Rank of probabilities must be 1 or 2, but is \"+i);n=n||Math.random();var s=1===i?o.as2D(1,-1):o,u=Lt.runKernelFunc((function(t){return t.multinomial(s,r,e,n)}),{logits2D:s});return 1===i?u.as1D():u}}),Rr=An({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error(\"Error in oneHot: depth must be >=2, but it is \"+e);var o=mn(t,\"indices\",\"oneHot\",\"int32\"),a=o.shape.concat([e]);return o=o.flatten(),Lt.runKernelFunc((function(t){return t.oneHot(o,e,n,r)}),{$indices:o},(function(t){return{$indices:function(){return Gn(o.shape,\"float32\")}}})).reshape(a)}}),Ir=An({pad_:function(t,e,n){void 0===n&&(n=0);var r=mn(t,\"x\",\"pad\");if(0===r.rank)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");var o={paddings:e,constantValue:n};return Lt.runKernelFunc((function(t){return t.pad(r,e,n)}),{x:r},(function(t){var n=e.map((function(t){return t[0]}));return{x:function(){return t.slice(n,r.shape)}}}),\"PadV2\",o)}}),kr=An({pad1d_:function(t,e,n){return void 0===n&&(n=0),C(2===e.length,(function(){return\"Invalid number of paddings. Must be length of 2.\"})),Ir(t,[e],n)}}),Sr=An({pad2d_:function(t,e,n){return void 0===n&&(n=0),C(2===e.length&&2===e[0].length&&2===e[1].length,(function(){return\"Invalid number of paddings. Must be length of 2 each.\"})),Ir(t,e,n)}}),Ar=An({pad3d_:function(t,e,n){return void 0===n&&(n=0),C(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,(function(){return\"Invalid number of paddings. Must be length of 2 each.\"})),Ir(t,e,n)}}),Dr=An({pad4d_:function(t,e,n){return void 0===n&&(n=0),C(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,(function(){return\"Invalid number of paddings. Must be length of 2 each.\"})),Ir(t,e,n)}}),Tr=An({rand_:function(t,e,n){var r=k(t),o=null;if(null==n||\"float32\"===n)o=new Float32Array(r);else if(\"int32\"===n)o=new Int32Array(r);else{if(\"bool\"!==n)throw new Error(\"Unknown data type \"+n);o=new Uint8Array(r)}for(var a=0;a=1+e.length,(function(){return\"input rank \"+r.rank+\" should be > than [blockShape] \"+e.length})),C(n.length===e.length,(function(){return\"paddings.shape[0] \"+n.length+\" must be equal to [blockShape] \"+e.length})),C(r.shape.reduce((function(t,r,o){return o>0&&o<=e.length?t&&(r+n[o-1][0]+n[o-1][1])%e[o-1]==0:t}),!0),(function(){return\"input spatial dimensions \"+r.shape.slice(1)+\" with paddings \"+n.toString()+\" must be divisible by blockShapes \"+e.toString()})),Lt.runKernelFunc((function(t){return t.spaceToBatchND(r,e,n)}),{$x:r},(function(t){return{$x:function(){return t.batchToSpaceND(e,n)}}}))}}),Br=An({squeeze_:function(t,e){var n=mn(t,\"x\",\"squeeze\");return Or(n,M(n.shape,e).newShape)}}),Pr=An({stack_:function(t,e){void 0===e&&(e=0);var n=gn(t,\"tensors\",\"stack\");if(C(n.length>=1,(function(){return\"Pass at least one tensor to tf.stack\"})),1===n.length)return n[0].expandDims(e);var r=n[0].rank,o=n[0].shape,a=n[0].dtype;C(e<=r,(function(){return\"Axis must be <= rank of the tensor\"})),n.forEach((function(t){E(o,t.shape,\"All tensors passed to stack must have matching shapes\")})),n.forEach((function(t){C(a===t.dtype,(function(){return\"All tensors passed to stack must have matching dtypes\"}))}));var i=n.map((function(t){return t.expandDims(e)}));return Yn(i,e)}}),Lr=An({tile_:function(t,e){var n=mn(t,\"x\",\"tile\",null);C(n.rank===e.length,(function(){return\"Error in transpose: rank of input \"+n.rank+\" must match length of reps \"+e+\".\"}));var r=[n],o={reps:e};return Lt.runKernelFunc((function(t,r){var o=t.tile(n,e);return r([n]),o}),{x:n},(function(t,n){var r=n[0];return{x:function(){var n=Xn(r);if(1===r.rank)for(var o=0;o=-n.shape.length&&e=2*e+1||o%2==1?i.push(o):a.push(o);r.push.apply(r,a),r.push(0),r.push.apply(r,i)}return r}function Hr(t,e,n,r){void 0===r&&(r=!0);var o=[];r?o.push(t[0]/n):o.push(t[0]*n);for(var a=1;at.rank)throw new Error(\"index innermost dimension length must be <= tensor rank; saw: \"+e.shape[e.rank-1]+\" vs. \"+t.rank);if(0===t.size)throw new Error(\"Requested more than 0 entries, but input is empty. Input shape: \"+t.shape+\".\");for(var n=e.shape,r=n[n.length-1],o=1,a=0;a1?e.shape[e.rank-1]:1,o=e.rank>1?e.rank-1:1,a=\"Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: \"+n.shape+\", indices.shape: \"+e.shape+\", shape: \"+t+\", sliceDim: \"+r+\", and batchDim: \"+o+\".\";if(n.rank1?e.shape[r-1]:1,a=n.length,i=1,s=o;s0;)1&t&&e.push(n),t/=2,n++;return e}function ro(t,e,n){for(var r=[],o=0;o0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=x(0,a,s-1)}function ao(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=i>0?x(0,a,s):x(-1,a,s-1)}function io(t,e,n){for(var r=n.length,o=0;o1){r=o;break}for(o=r+1;o0||n[o]!==t[o])return!1;return!0}function so(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r0,(function(){return\"variableGrads() expects at least one of the input variables to be trainable, but none of the \"+a+\" variables is trainable.\"}));var i=Lt.gradients(t,e,null,!0),s=i.value,u=i.grads;C(u.some((function(t){return null!=t})),(function(){return\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"})),C(0===s.rank,(function(){return\"The f passed in variableGrads(f) must return a scalar, but it returned a rank-\"+s.rank+\" tensor\"}));var c={};return e.forEach((function(t,e){null!=u[e]&&(c[t.name]=u[e])})),null!=o&&o.forEach((function(t){return c[t.name]=null})),{value:s,grads:c}}function vo(t){return Lt.customGrad(t)}function mo(t){if(t.filter((function(t){return null==t})).length>0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that\\n the f you passed encloses all operations that lead from x to y.\")}var go=An({softmax_:function(t,e){void 0===e&&(e=-1);var n=mn(t,\"logits\",\"softmax\",\"float32\");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error(\"Softmax along a non-last dimension is not yet supported. Logits was rank \"+n.rank+\" and dim was \"+e);return Lt.runKernelFunc((function(t,r){var o=t.softmax(n,e);return r([o]),o}),{logits:n},(function(t,n){var r=n[0],o=t.mul(r);return{logits:function(){return o.sub(o.sum([e],!0).mul(r))}}}),\"Softmax\",{dim:e},[],[!0])}}),yo=An({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=mn(t,\"logits\",\"logSoftmax\");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error(\"Log Softmax along a non-last dimension is not yet supported. Logits was rank \"+n.rank+\" and axis was \"+e);return vo((function(t,n){var r=t.max(e,!0),o=t.sub(r),a=o.toFloat().sub(o.exp().sum(e,!0).log());n([a]);return{value:a,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}}))(n)}}),xo=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e)},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},t.prototype.numDataIds=function(){return this.dataIdsCount},t}(),bo=function(){function t(){}return t.prototype.time=function(t){return wo(\"time\")},t.prototype.read=function(t){return wo(\"read\")},t.prototype.readSync=function(t){return wo(\"readSync\")},t.prototype.numDataIds=function(){return wo(\"numDataIds\")},t.prototype.disposeData=function(t){return wo(\"disposeData\")},t.prototype.write=function(t,e,n){return wo(\"write\")},t.prototype.move=function(t,e,n,r){return wo(\"move\")},t.prototype.memory=function(){return wo(\"memory\")},t.prototype.floatPrecision=function(){return wo(\"floatPrecision\")},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){return wo(\"batchMatMul\")},t.prototype.fusedBatchMatMul=function(t){t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights;return wo(\"fusedBatchMatMul\")},t.prototype.slice=function(t,e,n){return wo(\"slice\")},t.prototype.stridedSlice=function(t,e,n,r){return wo(\"stridedSlice\")},t.prototype.unstack=function(t,e){return wo(\"unstack\")},t.prototype.reverse=function(t,e){return wo(\"reverse\")},t.prototype.concat=function(t,e){return wo(\"concat\")},t.prototype.neg=function(t){return wo(\"neg\")},t.prototype.add=function(t,e){return wo(\"add\")},t.prototype.addN=function(t){return wo(\"addN\")},t.prototype.subtract=function(t,e){return wo(\"subtract\")},t.prototype.multiply=function(t,e){return wo(\"multiply\")},t.prototype.realDivide=function(t,e){return wo(\"realDivide\")},t.prototype.floorDiv=function(t,e){return wo(\"floorDiv\")},t.prototype.sum=function(t,e){return wo(\"sum\")},t.prototype.prod=function(t,e){return wo(\"prod\")},t.prototype.unsortedSegmentSum=function(t,e,n){return wo(\"unsortedSegmentSum\")},t.prototype.argMin=function(t,e){return wo(\"argMin\")},t.prototype.argMax=function(t,e){return wo(\"argMax\")},t.prototype.equal=function(t,e){return wo(\"equal\")},t.prototype.notEqual=function(t,e){return wo(\"notEqual\")},t.prototype.less=function(t,e){return wo(\"less\")},t.prototype.lessEqual=function(t,e){return wo(\"lessEqual\")},t.prototype.greater=function(t,e){return wo(\"greater\")},t.prototype.greaterEqual=function(t,e){return wo(\"greaterEqual\")},t.prototype.logicalNot=function(t){return wo(\"logicalNot\")},t.prototype.logicalAnd=function(t,e){return wo(\"logicalAnd\")},t.prototype.logicalOr=function(t,e){return wo(\"logicalOr\")},t.prototype.where=function(t){return wo(\"where\")},t.prototype.select=function(t,e,n){return wo(\"select\")},t.prototype.topk=function(t,e,n){return wo(\"topk\")},t.prototype.min=function(t,e){return wo(\"min\")},t.prototype.minimum=function(t,e){return wo(\"minimum\")},t.prototype.mod=function(t,e){return wo(\"mod\")},t.prototype.max=function(t,e){return wo(\"max\")},t.prototype.maximum=function(t,e){return wo(\"maximum\")},t.prototype.all=function(t,e){return wo(\"all\")},t.prototype.any=function(t,e){return wo(\"any\")},t.prototype.squaredDifference=function(t,e){return wo(\"squaredDifference\")},t.prototype.ceil=function(t){return wo(\"ceil\")},t.prototype.floor=function(t){return wo(\"floor\")},t.prototype.round=function(t){return wo(\"round\")},t.prototype.sign=function(t){return wo(\"sign\")},t.prototype.isNaN=function(t){return wo(\"isNaN\")},t.prototype.isInf=function(t){return wo(\"isInf\")},t.prototype.isFinite=function(t){return wo(\"isFinite\")},t.prototype.pow=function(t,e){return wo(\"pow\")},t.prototype.exp=function(t){return wo(\"exp\")},t.prototype.expm1=function(t){return wo(\"expm1\")},t.prototype.softmax=function(t,e){return wo(\"softmax\")},t.prototype.log=function(t){return wo(\"log\")},t.prototype.log1p=function(t){return wo(\"log1p\")},t.prototype.sqrt=function(t){return wo(\"sqrt\")},t.prototype.rsqrt=function(t){return wo(\"rsqrt\")},t.prototype.square=function(t){return wo(\"square\")},t.prototype.reciprocal=function(t){return wo(\"reciprocal\")},t.prototype.relu=function(t){return wo(\"relu\")},t.prototype.relu6=function(t){return wo(\"relu6\")},t.prototype.prelu=function(t,e){return wo(\"prelu\")},t.prototype.elu=function(t){return wo(\"elu\")},t.prototype.eluDer=function(t,e){return wo(\"eluDer\")},t.prototype.selu=function(t){return wo(\"selu\")},t.prototype.int=function(t){return wo(\"int\")},t.prototype.clip=function(t,e,n){return wo(\"clip\")},t.prototype.abs=function(t){return wo(\"abs\")},t.prototype.complexAbs=function(t){return wo(\"complexAbs\")},t.prototype.sigmoid=function(t){return wo(\"sigmoid\")},t.prototype.softplus=function(t){return wo(\"softplus\")},t.prototype.sin=function(t){return wo(\"sin\")},t.prototype.cos=function(t){return wo(\"cos\")},t.prototype.tan=function(t){return wo(\"tan\")},t.prototype.asin=function(t){return wo(\"asin\")},t.prototype.acos=function(t){return wo(\"acos\")},t.prototype.atan=function(t){return wo(\"atan\")},t.prototype.atan2=function(t,e){return wo(\"atan2\")},t.prototype.sinh=function(t){return wo(\"sinh\")},t.prototype.cosh=function(t){return wo(\"cosh\")},t.prototype.tanh=function(t){return wo(\"tanh\")},t.prototype.asinh=function(t){return wo(\"asinh\")},t.prototype.acosh=function(t){return wo(\"acosh\")},t.prototype.atanh=function(t){return wo(\"atanh\")},t.prototype.erf=function(t){return wo(\"erf\")},t.prototype.step=function(t,e){return wo(\"step\")},t.prototype.fusedConv2d=function(t){t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights;return wo(\"fusedConv2d\")},t.prototype.conv2d=function(t,e,n){return wo(\"conv2d\")},t.prototype.conv2dDerInput=function(t,e,n){return wo(\"conv2dDerInput\")},t.prototype.conv2dDerFilter=function(t,e,n){return wo(\"conv2dDerFilter\")},t.prototype.fusedDepthwiseConv2D=function(t){t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights;return wo(\"fusedDepthwiseConv2D\")},t.prototype.depthwiseConv2D=function(t,e,n){return wo(\"depthwiseConv2D\")},t.prototype.depthwiseConv2DDerInput=function(t,e,n){return wo(\"depthwiseConv2DDerInput\")},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){return wo(\"depthwiseConv2DDerFilter\")},t.prototype.conv3d=function(t,e,n){return wo(\"conv3d\")},t.prototype.conv3dDerInput=function(t,e,n){return wo(\"conv3dDerInput\")},t.prototype.conv3dDerFilter=function(t,e,n){return wo(\"conv3dDerFilter\")},t.prototype.maxPool=function(t,e){return wo(\"maxPool\")},t.prototype.maxPoolBackprop=function(t,e,n,r){return wo(\"maxPoolBackprop\")},t.prototype.avgPool=function(t,e){return wo(\"avgPool\")},t.prototype.avgPoolBackprop=function(t,e,n){return wo(\"avgPoolBackprop\")},t.prototype.avgPool3d=function(t,e){return wo(\"avgPool3d\")},t.prototype.avgPool3dBackprop=function(t,e,n){return wo(\"avgPool3dBackprop\")},t.prototype.maxPool3d=function(t,e){return wo(\"maxPool3d\")},t.prototype.maxPool3dBackprop=function(t,e,n,r){return wo(\"maxPool3dBackprop\")},t.prototype.reshape=function(t,e){return wo(\"reshape\")},t.prototype.cast=function(t,e){return wo(\"cast\")},t.prototype.tile=function(t,e){return wo(\"tile\")},t.prototype.pad=function(t,e,n){return wo(\"pad\")},t.prototype.transpose=function(t,e){return wo(\"transpose\")},t.prototype.gather=function(t,e,n){return wo(\"gather\")},t.prototype.gatherND=function(t,e){return wo(\"gatherND\")},t.prototype.scatterND=function(t,e,n){return wo(\"scatterND\")},t.prototype.batchToSpaceND=function(t,e,n){return wo(\"batchToSpaceND\")},t.prototype.spaceToBatchND=function(t,e,n){return wo(\"spaceToBatchND\")},t.prototype.resizeBilinear=function(t,e,n,r){return wo(\"resizeBilinear\")},t.prototype.resizeBilinearBackprop=function(t,e,n){return wo(\"resizeBilinearBackprop\")},t.prototype.resizeNearestNeighbor=function(t,e,n,r){return wo(\"resizeNearestNeighbor\")},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){return wo(\"resizeNearestNeighborBackprop\")},t.prototype.batchNormalization=function(t,e,n,r,o,a){return wo(\"batchNormalization\")},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){return wo(\"localResponseNormalization4D\")},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){return wo(\"LRNGrad\")},t.prototype.multinomial=function(t,e,n,r){return wo(\"multinomial\")},t.prototype.oneHot=function(t,e,n,r){return wo(\"oneHot\")},t.prototype.cumsum=function(t,e,n,r){return wo(\"cumsum\")},t.prototype.nonMaxSuppression=function(t,e,n,r,o){return wo(\"nonMaxSuppression\")},t.prototype.fft=function(t){return wo(\"fft\")},t.prototype.ifft=function(t){return wo(\"ifft\")},t.prototype.complex=function(t,e){return wo(\"complex\")},t.prototype.real=function(t){return wo(\"real\")},t.prototype.imag=function(t){return wo(\"imag\")},t.prototype.cropAndResize=function(t,e,n,r,o,a){return wo(\"cropAndResize\")},t.prototype.depthToSpace=function(t,e,n){return wo(\"depthToSpace\")},t.prototype.split=function(t,e,n){return wo(\"split\")},t.prototype.sparseToDense=function(t,e,n,r){return wo(\"sparseToDense\")},t.prototype.diag=function(t){return wo(\"diag\")},t.prototype.fill=function(t,e,n){return wo(\"fill\")},t.prototype.onesLike=function(t){return wo(\"onesLike\")},t.prototype.zerosLike=function(t){return wo(\"zerosLike\")},t.prototype.linspace=function(t,e,n){return wo(\"linspace\")},t.prototype.dispose=function(){return wo(\"dispose\")},t}();function wo(t){throw new Error(\"'\"+t+\"' not yet implemented or not found in the registry. Did you forget to import the kernel?\")}function Co(t,e){for(var n=t.length,r=[],o=0;o1&&1===i&&r.unshift(a)}return r}function Eo(t,e){for(var n=[],r=0;r1)&&n.unshift(a)}return n}function Ro(t,e){for(var n=[],r=Math.max(t.length,e.length),o=0;o>>1)]);s>0?r=a+1:(o=a,i=!s)}return i?r:-r-1}(t,e,n||Ko)}(t,e,n),o=r<0?-(r+1):r;t.splice(o,0,e)}function Ko(t,e){return t>e?1:to})).sort(Jo),c=a>0?-.5/a:0,l=[],h=[];l.length0;){var f=u.pop(),d=f.score,p=f.boxIndex,v=f.suppressBeginIndex;if(d=v;--g){var y=$o(t,p,l[g]);if(y>=r){m=!0;break}if(f.score=f.score*Qo(r,c,y),f.score<=o)break}f.suppressBeginIndex=l.length,m||(f.score===d?(l.push(p),h.push(f.score)):f.score>o&&qo(u,f,Jo))}var x=l.length;return s&&(l.fill(0,x),h.fill(0,x)),{selectedIndices:Mn(l,\"int32\"),selectedScores:Mn(h,\"float32\"),numValidOutputs:On(x,\"int32\")}}function $o(t,e,n){var r=t.subarray(4*e,4*e+4),o=t.subarray(4*n,4*n+4),a=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),f=Math.max(o[1],o[3]),d=(s-a)*(u-i),p=(h-c)*(f-l);if(d<=0||p<=0)return 0;var v=Math.max(a,c),m=Math.max(i,l),g=Math.min(s,h),y=Math.min(u,f),x=Math.max(g-v,0)*Math.max(y-m,0);return x/(d+p-x)}function Qo(t,e,n){var r=Math.exp(e*n*n);return n<=t?r:0}function Jo(t,e){return t.score-e.score||t.score===e.score&&e.boxIndex-t.boxIndex}function Zo(t,e,n){var r=new Array(t.rank).fill(0),o=t.shape.slice();return e.map((function(e){o[n]=e;var a=t.slice(r,o);return r[n]+=e,a}))}function ta(t,e){for(var n=new Array(t.rank),r=0;r\":\"<\",u=n?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=\"\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = outIdx * \"+r+\";\\n\\n int bestIndex = inOffset;\\n float bestValue = getA(batch, bestIndex);\\n\\n for (int i = 0; i < \"+r+\"; i++) {\\n int inIdx = \"+u+\";\\n float candidate = getA(batch, inIdx);\\n if (candidate \"+s+\" bestValue) {\\n bestValue = candidate;\\n bestIndex = inIdx;\\n }\\n }\\n setOutput(float(bestIndex));\\n }\\n \"};function ia(t,e){return[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,e).map((function(e){return t+\".\"+e}))}function sa(t,e){return 1===e?[t]:ia(t,e)}function ua(){var t,e,n,r,o,a,s,u,c,l;return 2===i().getNumber(\"WEBGL_VERSION\")?(t=\"#version 300 es\",e=\"in\",n=\"out\",r=\"in\",o=\"texture\",a=\"outputColor\",s=\"out vec4 outputColor;\",u=\"\\n bool isnan_custom(float val) {\\n return (val > 0.0 || val < 0.0) ? false : val != 0.0;\\n }\\n\\n bvec4 isnan_custom(vec4 val) {\\n return bvec4(isnan_custom(val.x),\\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\\n }\\n\\n #define isnan(value) isnan_custom(value)\\n \",c=\"\",l=\"\\n #define round(value) newRound(value)\\n int newRound(float value) {\\n return int(floor(value + 0.5));\\n }\\n\\n ivec4 newRound(vec4 value) {\\n return ivec4(floor(value + vec4(0.5)));\\n }\\n \"):(t=\"\",e=\"attribute\",n=\"varying\",r=\"varying\",o=\"texture2D\",a=\"gl_FragColor\",s=\"\",u=\"\\n #define isnan(value) isnan_custom(value)\\n bool isnan_custom(float val) {\\n return (val > 0. || val < 1. || val == 0.) ? false : true;\\n }\\n bvec4 isnan_custom(vec4 val) {\\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\\n }\\n \",c=\"\\n uniform float INFINITY;\\n\\n bool isinf(float val) {\\n return abs(val) == INFINITY;\\n }\\n bvec4 isinf(vec4 val) {\\n return equal(abs(val), vec4(INFINITY));\\n }\\n \",l=\"\\n int round(float value) {\\n return int(floor(value + 0.5));\\n }\\n\\n ivec4 round(vec4 value) {\\n return ivec4(floor(value + vec4(0.5)));\\n }\\n \"),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:o,output:a,defineOutput:s,defineSpecialNaN:u,defineSpecialInf:c,defineRound:l}}function ca(t,e,n){void 0===n&&(n=\"index\");var r=$(e);return r.map((function(e,o){return\"int \"+t[o]+\" = \"+n+\" / \"+e+\"; \"+(o===r.length-1?\"int \"+t[o+1]+\" = \"+n+\" - \"+t[o]+\" * \"+e:\"index -= \"+t[o]+\" * \"+e)+\";\"})).join(\"\")}function la(t){var e=$(t).map((function(t){return t.toString()}));return\"\\n int getFlatIndex(ivec3 coords) {\\n return coords.x * \"+e[0]+\" + coords.y * \"+e[1]+\" + coords.z;\\n }\\n\"}var ha=\"\\n const float FLOAT_MAX = 1.70141184e38;\\n const float FLOAT_MIN = 1.17549435e-38;\\n\\n lowp vec4 encode_float(highp float v) {\\n if (isnan(v)) {\\n return vec4(255, 255, 255, 255);\\n }\\n\\n highp float av = abs(v);\\n\\n if(av < FLOAT_MIN) {\\n return vec4(0.0, 0.0, 0.0, 0.0);\\n } else if(v > FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\\n } else if(v < -FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\\n }\\n\\n highp vec4 c = vec4(0,0,0,0);\\n\\n highp float e = floor(log2(av));\\n highp float m = exp2(fract(log2(av))) - 1.0;\\n\\n c[2] = floor(128.0 * m);\\n m -= c[2] / 128.0;\\n c[1] = floor(32768.0 * m);\\n m -= c[1] / 32768.0;\\n c[0] = floor(8388608.0 * m);\\n\\n highp float ebias = e + 127.0;\\n c[3] = floor(ebias / 2.0);\\n ebias -= c[3] * 2.0;\\n c[2] += floor(ebias) * 128.0;\\n\\n c[3] += 128.0 * step(0.0, -v);\\n\\n return c / 255.0;\\n }\\n\";function fa(t,e,n,r){var o=[];t.forEach((function(t){var e=k(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?o.push(\"uniform float \"+t.name+(e>1?\"[\"+e+\"]\":\"\")+\";\"):(o.push(\"uniform sampler2D \"+t.name+\";\"),o.push(\"uniform int offset\"+t.name+\";\"))}));var a,i,s=o.join(\"\\n\"),u=t.map((function(t){return function(t,e,n){void 0===n&&(n=!1);var r=\"\";r+=n?pa(t):da(t);var o=t.shapeInfo.logicalShape,a=e.logicalShape;o.length<=a.length&&(r+=n?function(t,e){var n,r=t.name,o=r.charAt(0).toUpperCase()+r.slice(1),a=\"get\"+o+\"AtOutCoords\",i=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=Co(t.shapeInfo.logicalShape,e.logicalShape),c=wa(s),l=s-i,h=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];n=0===i?\"\":s<2&&u.length>=1?\"coords = 0;\":u.map((function(t){return\"coords.\"+h[t+l]+\" = 0;\"})).join(\"\\n\");var f=\"\";f=s<2&&i>0?\"coords\":t.shapeInfo.logicalShape.map((function(t,e){return\"coords.\"+h[e+l]})).join(\", \");var d=\"return outputValue;\",p=1===k(t.shapeInfo.logicalShape),v=1===k(e.logicalShape);if(1!==i||p||v){if(p&&!v)d=1===s?\"\\n return vec4(outputValue.x, outputValue.x, 0., 0.);\\n \":\"\\n return vec4(outputValue.x);\\n \";else if(u.length){var m=i-2,g=i-1;u.indexOf(m)>-1&&u.indexOf(g)>-1?d=\"return vec4(outputValue.x);\":u.indexOf(m)>-1?d=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":u.indexOf(g)>-1&&(d=\"return vec4(outputValue.xx, outputValue.zz);\")}}else d=\"\\n return vec4(outputValue.xy, outputValue.xy);\\n \";return\"\\n vec4 \"+a+\"() {\\n \"+c+\" coords = getOutputCoords();\\n \"+n+\"\\n vec4 outputValue = get\"+o+\"(\"+f+\");\\n \"+d+\"\\n }\\n \"}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),o=\"get\"+r+\"AtOutCoords\",a=e.texShape,i=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&S(i,a))return\"\\n float \"+o+\"() {\\n return sampleTexture(\"+n+\", resultUV);\\n }\\n \";var c,l=wa(u),h=Co(t.shapeInfo.logicalShape,e.logicalShape),f=u-s,d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];c=0===s?\"\":u<2&&h.length>=1?\"coords = 0;\":h.map((function(t){return\"coords.\"+d[t+f]+\" = 0;\"})).join(\"\\n\");var p=\"\";p=u<2&&s>0?\"coords\":t.shapeInfo.logicalShape.map((function(t,e){return\"coords.\"+d[e+f]})).join(\", \");return\"\\n float \"+o+\"() {\\n \"+l+\" coords = getOutputCoords();\\n \"+c+\"\\n return get\"+r+\"(\"+p+\");\\n }\\n \"}(t,e));return r}(t,e,r)})).join(\"\\n\"),c=e.texShape,l=ua(),h=function(t){return\"\\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\\n return \"+t.texture2D+\"(textureSampler, uv).r;\\n }\\n \"}(l),f=function(t){return t.version+\"\\n precision highp float;\\n precision highp int;\\n precision highp sampler2D;\\n \"+t.varyingFs+\" vec2 resultUV;\\n \"+t.defineOutput+\"\\n const vec2 halfCR = vec2(0.5, 0.5);\\n\\n struct ivec5\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n };\\n\\n struct ivec6\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n int v;\\n };\\n\\n uniform float NAN;\\n \"+t.defineSpecialNaN+\"\\n \"+t.defineSpecialInf+\"\\n \"+t.defineRound+\"\\n\\n int imod(int x, int y) {\\n return x - y * (x / y);\\n }\\n\\n int idiv(int a, int b, float sign) {\\n int res = a / b;\\n int mod = imod(a, b);\\n if (sign < 0. && mod != 0) {\\n res -= 1;\\n }\\n return res;\\n }\\n\\n //Based on the work of Dave Hoskins\\n //https://www.shadertoy.com/view/4djSRW\\n #define HASHSCALE1 443.8975\\n float random(float seed){\\n vec2 p = resultUV * seed;\\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\\n p3 += dot(p3, p3.yzx + 19.19);\\n return fract((p3.x + p3.y) * p3.z);\\n }\\n\\n \"+va+\"\\n \"+ma+\"\\n \"+ga+\"\\n \"}(l);return e.isPacked?(a=function(t,e){switch(t.length){case 0:return\"\\n int getOutputCoords() {\\n return 0;\\n }\\n \";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(1===n[0])return\"\\n int getOutputCoords() {\\n return 2 * int(resultUV.x * \"+n[1]+\".0);\\n }\\n \";if(1===n[1])return\"\\n int getOutputCoords() {\\n return 2 * int(resultUV.y * \"+n[0]+\".0);\\n }\\n \";return\"\\n int getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+n[0]+\", \"+n[1]+\"));\\n return 2 * (resTexRC.x * \"+n[1]+\" + resTexRC.y);\\n }\\n \"}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(S(t,e))return\"\\n ivec2 getOutputCoords() {\\n return 2 * ivec2(resultUV.yx * vec2(\"+n[0]+\", \"+n[1]+\"));\\n }\\n \";var r=Math.ceil(t[1]/2);return\"\\n ivec2 getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+n[0]+\", \"+n[1]+\"));\\n\\n int index = resTexRC.x * \"+n[1]+\" + resTexRC.y;\\n int r = 2 * (index / \"+r+\");\\n int c = imod(index, \"+r+\") * 2;\\n\\n return ivec2(r, c);\\n }\\n \"}(t,e);case 3:return n=t,r=e,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],a=Math.ceil(n[2]/2),i=a*Math.ceil(n[1]/2),\"\\n ivec3 getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+o[0]+\", \"+o[1]+\"));\\n int index = resTexRC.x * \"+o[1]+\" + resTexRC.y;\\n\\n int b = index / \"+i+\";\\n index -= b * \"+i+\";\\n\\n int r = 2 * (index / \"+a+\");\\n int c = imod(index, \"+a+\") * 2;\\n\\n return ivec3(b, r, c);\\n }\\n \";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),o=r*Math.ceil(t[t.length-2]/2),a=o,i=\"\",s=\"b, r, c\",u=2;u2,(function(){return\"Packed arg\"+(n.charAt(0).toUpperCase()+n.slice(1))+\" supports only inputs with rank above 2.\"}));var o=t[t.length-1],a=Math.ceil(o/e);this.outputShape=t.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push(\"bestIndicesA\");var i,s,u=this.outputShape,c=u.length,l=wa(c),h=sa(\"coords\",c);if(1===a){var f=wa(s=c+1);i=\"\\n \"+f+\" sourceLocR = \"+f+\"(\"+h.join()+\", 0);\\n ++\"+h[c-1]+\";\\n \"+f+\" sourceLocG = \"+f+\"(\"+h.join()+\", 0);\\n ++\"+h[c-2]+\";\\n \"+f+\" sourceLocA = \"+f+\"(\"+h.join()+\", 0);\\n --\"+h[c-1]+\";\\n \"+f+\" sourceLocB = \"+f+\"(\"+h.join()+\", 0);\\n --\"+h[c-2]+\";\"}else s=c,i=\"\\n \"+l+\" sourceLocR = coords;\\n ++\"+h[c-1]+\";\\n \"+l+\" sourceLocG = coords;\\n ++\"+h[c-2]+\";\\n \"+l+\" sourceLocA = coords;\\n --\"+h[c-1]+\";\\n \"+l+\" sourceLocB = coords;\\n --\"+h[c-2]+\";\";var d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,s),p=\".\"+d[s-1],v=d.map((function(t){return\"int \"+t})),m=sa(\"sourceLocR\",s-1).concat(\"inIdx.r\"),g=sa(\"sourceLocG\",s-1).concat(\"inIdx.g\"),y=sa(\"sourceLocB\",s-1).concat(\"inIdx.b\"),x=sa(\"sourceLocA\",s-1).concat(\"inIdx.a\"),b=\"max\"===n?\"greaterThan\":\"lessThan\",w=r?\"\":\"\\n inIdx = round(vec4(getBestIndicesAChannel(\"+m.join()+\"),\\n getBestIndicesAChannel(\"+g.join()+\"),\\n getBestIndicesAChannel(\"+y.join()+\"),\\n getBestIndicesAChannel(\"+x.join()+\")));\",E=\"vec4(\\n getAChannel(\"+m.join()+\"),\\n hasNextCol ? getAChannel(\"+g.join()+\") : 0.,\\n hasNextRow ? getAChannel(\"+y.join()+\") : 0.,\\n hasNextRow && hasNextCol ? getAChannel(\"+x.join()+\") : 0.)\",R=r?\"\":\"\\n float getBestIndicesAChannel(\"+v.join()+\") {\\n return getChannel(getBestIndicesA(\"+d.join()+\"),\\n vec2(\"+d.slice(-2).join()+\"));\\n }\";this.userCode=\"\\n float getAChannel(\"+v.join()+\") {\\n return getChannel(getA(\"+d.join()+\"),\\n vec2(\"+d.slice(-2).join()+\"));\\n }\\n \"+R+\"\\n void main() {\\n \"+l+\" coords = getOutputCoords();\\n bool hasNextCol = \"+h[c-1]+\" < \"+(u[c-1]-1)+\";\\n bool hasNextRow = \"+h[c-2]+\" < \"+(u[c-2]-1)+\";\\n \"+i+\"\\n ivec4 srcIdx = ivec4(sourceLocR\"+p+\", sourceLocG\"+p+\",\\n sourceLocB\"+p+\", sourceLocA\"+p+\") * \"+e+\";\\n ivec4 inIdx = srcIdx;\\n vec4 bestIndex = vec4(inIdx);\\n vec4 bestValue = \"+E+\";\\n\\n for (int i = 0; i < \"+e+\"; i++) {\\n inIdx = srcIdx;\\n \"+w+\"\\n vec4 candidate = \"+E+\";\\n bvec4 nan = isnan(candidate);\\n bvec4 replace = bvec4(\\n vec4(\"+b+\"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\\n\\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\\n replace.y ? candidate.y : bestValue.y,\\n replace.z ? candidate.z : bestValue.z,\\n replace.w ? candidate.w : bestValue.w);\\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\\n srcIdx++;\\n }\\n setOutput(bestIndex);\\n }\\n \"},Ia=function(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=s-1-t.padInfo.top,l=u-1-t.padInfo.left,h=1/(e*n);this.userCode=\"\\n const ivec2 pads = ivec2(\"+c+\", \"+l+\");\\n const float avgMultiplier = float(\"+h+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n\\n ivec2 dyRCCorner = coords.yz - pads;\\n int dyRCorner = dyRCCorner.x;\\n int dyCCorner = dyRCCorner.y;\\n\\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+s+\";\\n wR += \"+a+\") {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+u+\";\\n wC+= \"+i+\") {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(b, idyR, idyC, d);\\n\\n dotProd += dyValue * avgMultiplier;\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},ka=function(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=l-1-t.padInfo.front,p=h-1-t.padInfo.top,v=f-1-t.padInfo.left,m=1/(e*n*r);this.userCode=\"\\n const ivec3 pads = ivec3(\"+d+\", \"+p+\", \"+v+\");\\n const float avgMultiplier = float(\"+m+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int ch = coords.u;\\n\\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\\n int dyDCorner = dyCorner.x;\\n int dyRCorner = dyCorner.y;\\n int dyCCorner = dyCorner.z;\\n\\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\\n // dx(xD, xR, xC, ch).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n\\n for (int wD = 0; wD < \"+l+\";\\n wD += \"+s+\") {\\n float dyD = float(dyDCorner + wD) / \"+o+\".0;\\n\\n if (dyD < 0.0 || dyD >= \"+t.outDepth+\".0 || fract(dyD) > 0.0) {\\n continue;\\n }\\n int idyD = int(dyD);\\n\\n for (int wR = 0; wR < \"+h+\";\\n wR += \"+u+\") {\\n float dyR = float(dyRCorner + wR) / \"+a+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 ||\\n fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+f+\";\\n wC += \"+c+\") {\\n float dyC = float(dyCCorner + wC) / \"+i+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\\n\\n dotProd += dyValue * avgMultiplier;\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Sa=function(t,e,n,r,o,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],Ro(t,e),Ro(t,n);var i=\"0.0\";null!=r&&(Ro(t,r),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");var s=\"1.0\";null!=o&&(Ro(t,o),this.variableNames.push(\"scale\"),s=\"getScaleAtOutCoords()\"),this.outputShape=t,this.userCode=\"\\n void main() {\\n float x = getXAtOutCoords();\\n float mean = getMeanAtOutCoords();\\n float variance = getVarianceAtOutCoords();\\n float offset = \"+i+\";\\n float scale = \"+s+\";\\n float inv = scale * inversesqrt(variance + float(\"+a+\"));\\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\\n }\\n \"},Aa=function(t,e,n,r,o,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],Ro(t,e),Ro(t,n);var i=\"vec4(0.0)\";null!=r&&(Ro(t,r),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");var s=\"vec4(1.0)\";null!=o&&(Ro(t,o),this.variableNames.push(\"scale\"),s=\"getScaleAtOutCoords()\"),this.outputShape=t,this.userCode=\"\\n void main() {\\n vec4 offset = \"+i+\";\\n vec4 scale = \"+s+\";\\n\\n vec4 x = getXAtOutCoords();\\n vec4 mean = getMeanAtOutCoords();\\n vec4 variance = getVarianceAtOutCoords();\\n\\n vec4 inv = scale * inversesqrt(variance + vec4(\"+a+\"));\\n\\n setOutput((x - mean) * inv + offset);\\n }\\n \"},Da=\"return areal * breal - aimag * bimag;\",Ta=\"return areal * bimag + aimag * breal;\",Na=function(t,e,n){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.outputShape=Ro(e,n),this.userCode=\"\\n float binaryOpComplex(\\n float areal, float aimag, float breal, float bimag) {\\n \"+t+\"\\n }\\n\\n void main() {\\n float areal = getARealAtOutCoords();\\n float aimag = getAImagAtOutCoords();\\n float breal = getBRealAtOutCoords();\\n float bimag = getBImagAtOutCoords();\\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\\n }\\n \"},Fa=\"return a + b;\",_a=\"return a - b;\",Oa=\"return a * b;\",Ma=\"return (a < 0.) ? b * a : a;\",Ba=function(t,e,n){this.variableNames=[\"A\",\"B\"],this.outputShape=Ro(e,n),this.userCode=\"\\n float binaryOperation(float a, float b) {\\n \"+t+\"\\n }\\n\\n void main() {\\n float a = getAAtOutCoords();\\n float b = getBAtOutCoords();\\n setOutput(binaryOperation(a, b));\\n }\\n \"},Pa=\"\\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\\n\",La=function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Ro(e,n);var o=this.outputShape.length,a=\"\";if(r)if(0===o||1===k(this.outputShape))a=\"\\n result.y = 0.;\\n result.z = 0.;\\n result.w = 0.;\\n \";else if(a=\"\\n \"+wa(o)+\" coords = getOutputCoords();\\n \",1===o)a+=\"\\n result.y = (coords + 1) >= \"+this.outputShape[0]+\" ? 0. : result.y;\\n result.z = 0.;\\n result.w = 0.;\\n \";else{var i=sa(\"coords\",o);a+=\"\\n bool nextRowOutOfBounds =\\n (\"+i[o-2]+\" + 1) >= \"+this.outputShape[o-2]+\";\\n bool nextColOutOfBounds =\\n (\"+i[o-1]+\" + 1) >= \"+this.outputShape[o-1]+\";\\n result.y = nextColOutOfBounds ? 0. : result.y;\\n result.z = nextRowOutOfBounds ? 0. : result.z;\\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\\n \"}this.userCode=\"\\n vec4 binaryOperation(vec4 a, vec4 b) {\\n \"+t+\"\\n }\\n\\n void main() {\\n vec4 a = getAAtOutCoords();\\n vec4 b = getBAtOutCoords();\\n\\n vec4 result = binaryOperation(a, b);\\n \"+a+\"\\n\\n setOutput(result);\\n }\\n \"},Wa=function(){function t(t){this.variableNames=[\"A\"],this.outputShape=t,this.userCode=\"\\n uniform float minVal;\\n uniform float maxVal;\\n\\n void main() {\\n float value = getAAtOutCoords();\\n if (isnan(value)) {\\n setOutput(value);\\n return;\\n }\\n\\n setOutput(clamp(value, minVal, maxVal));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,\"minVal\"),n.maxLoc=r.getUniformLocationNoThrow(o,\"maxVal\")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Ua=function(){function t(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode=\"\\n uniform float minVal;\\n uniform float maxVal;\\n\\n void main() {\\n vec4 value = getAAtOutCoords();\\n\\n if (any(isnan(value))) {\\n setOutput(value);\\n return;\\n }\\n\\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,\"minVal\"),n.maxLoc=r.getUniformLocationNoThrow(o,\"maxVal\")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Va=function(t){this.variableNames=[\"real\",\"imag\"],this.outputShape=t,this.userCode=\"\\n void main() {\\n float re = abs(getRealAtOutCoords());\\n float im = abs(getImagAtOutCoords());\\n float mx = max(re, im);\\n\\n // sadly the length function in glsl is not underflow-safe\\n // (at least not on Intel GPUs). So the safe solution is\\n // to ensure underflow-safety in all cases.\\n setOutput(\\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\\n );\\n }\\n \"},za=function(t){this.outputShape=[],this.outputShape=Sn(t,1),this.variableNames=t.map((function(t,e){return\"T\"+e}));var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n= \"+s[u-1]+\") {\\n return getChannel(\\n getT\"+u+\"(\"+Ha(i,c,d)+\"),\\n vec2(\"+Ha(l,c,d)+\"));\\n }\"}var p=s.length,v=s[s.length-1];f+=\"\\n return getChannel(\\n getT\"+p+\"(\"+Ha(i,c,v)+\"),\\n vec2(\"+Ha(l,c,v)+\"));\",this.userCode=\"\\n float getValue(\"+i.map((function(t){return\"int \"+t}))+\") {\\n \"+f+\"\\n }\\n\\n void main() {\\n \"+o+\" coords = getOutputCoords();\\n vec4 result = vec4(getValue(\"+a+\"), 0., 0., 0.);\\n\\n \"+a[r-1]+\" = \"+a[r-1]+\" + 1;\\n if (\"+a[r-1]+\" < \"+n[r-1]+\") {\\n result.g = getValue(\"+a+\");\\n }\\n\\n \"+a[r-2]+\" = \"+a[r-2]+\" + 1;\\n if (\"+a[r-2]+\" < \"+n[r-2]+\") {\\n result.a = getValue(\"+a+\");\\n }\\n\\n \"+a[r-1]+\" = \"+a[r-1]+\" - 1;\\n if (\"+a[r-2]+\" < \"+n[r-2]+\" &&\\n \"+a[r-1]+\" < \"+n[r-1]+\") {\\n result.b = getValue(\"+a+\");\\n }\\n setOutput(result);\\n }\\n \"};function Ha(t,e,n){var r=t.indexOf(e);return t.map((function(t,e){return e===r?t+\" - \"+n:t})).join()}var qa=function(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a=\"channelsLast\"===t.dataFormat;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int wR = coords.x;\\n int wC = coords.y;\\n int d1 = coords.z;\\n int d2 = coords.w;\\n\\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n\\n for (int b = 0; b < \"+t.batchSize+\"; b++) {\\n for (int yR = 0; yR < \"+t.outHeight+\"; yR++) {\\n int xR = wR + yR * \"+e+\" - \"+r+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+n+\" - \"+o+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n if (\"+a+\") {\\n float dyValue = getDy(b, yR, yC, d2);\\n float xValue = getX(b, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n } else {\\n float dyValue = getDy(b, d2, yR, yC);\\n float xValue = getX(b, d1, xR, xC);\\n dotProd += (xValue * dyValue);\\n }\\n\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Ka=function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=\"channelsLast\"===t.dataFormat,i=e-1-t.padInfo.top,s=n-1-t.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=\"\\n const ivec2 pads = ivec2(\"+i+\", \"+s+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d1 = coords[\"+l+\"];\\n\\n ivec2 dyCorner = ivec2(coords[\"+u+\"], coords[\"+c+\"]) - pads;\\n int dyRCorner = dyCorner.x;\\n int dyCCorner = dyCorner.y;\\n\\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+e+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+e+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+n+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+n+\" - 1 - wC;\\n\\n for (int d2 = 0; d2 < \"+t.outChannels+\"; d2++) {\\n\\n if (\"+a+\") {\\n float xValue = getDy(batch, idyR, idyC, d2);\\n float wValue = getW(wRPerm, wCPerm, d1, d2);\\n dotProd += xValue * wValue;\\n } else {\\n float xValue = getDy(batch, d2, idyR, idyC);\\n float wValue = getW(wRPerm, wCPerm, d1, d2);\\n dotProd += xValue * wValue;\\n }\\n\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},ja=function(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode=\"\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int wF = coords.x;\\n int wR = coords.y;\\n int wC = coords.z;\\n int d1 = coords.w;\\n int d2 = coords.u;\\n\\n float dotProd = 0.0;\\n\\n for (int b = 0; b < \"+t.batchSize+\"; b++) {\\n for (int yF = 0; yF < \"+t.outDepth+\"; yF++) {\\n int xF = wF + yF * \"+e+\" - \"+o+\";\\n\\n if (xF < 0 || xF >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int yR = 0; yR < \"+t.outHeight+\"; yR++) {\\n int xR = wR + yR * \"+n+\" - \"+a+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+r+\" - \"+i+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float dyValue = getDy(b, yF, yR, yC, d2);\\n float xValue = getX(b, xF, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Xa=function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,c=r-1-t.padInfo.left;this.userCode=\"\\n const ivec3 pads = ivec3(\"+s+\", \"+u+\", \"+c+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int d1 = coords.u;\\n\\n\\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\\n int dyFCorner = dyCorner.x;\\n int dyRCorner = dyCorner.y;\\n int dyCCorner = dyCorner.z;\\n\\n float dotProd = 0.0;\\n for (int wF = 0; wF < \"+e+\"; wF++) {\\n float dyF = float(dyFCorner + wF) / \"+o+\".0;\\n\\n if (dyF < 0.0 || dyF >= \"+t.outDepth+\".0 || fract(dyF) > 0.0) {\\n continue;\\n }\\n int idyF = int(dyF);\\n\\n int wFPerm = \"+e+\" - 1 - wF;\\n\\n for (int wR = 0; wR < \"+n+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+a+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 ||\\n fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+n+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+r+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+i+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+r+\" - 1 - wC;\\n\\n for (int d2 = 0; d2 < \"+t.outChannels+\"; d2++) {\\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\\n dotProd += xValue * wValue;\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Ya=function(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int wR = coords.x;\\n int wC = coords.y;\\n int d1 = coords.z;\\n int dm = coords.w;\\n int d2 = d1 * \"+a+\" + dm;\\n\\n float dotProd = 0.0;\\n\\n // TO DO: Vec4 over the batch size\\n for (int b = 0; b < \"+t.batchSize+\"; b++) {\\n for (int yR = 0; yR < \"+t.outHeight+\"; yR++) {\\n int xR = wR + yR * \"+e+\" - \"+r+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+n+\" - \"+o+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float dyValue = getDy(b, yR, yC, d2);\\n float xValue = getX(b, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},$a=function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode=\"\\n const ivec2 pads = ivec2(\"+a+\", \"+i+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d1 = coords[3];\\n ivec2 dyCorner = coords.yz - pads;\\n int dyRCorner = dyCorner.x;\\n int dyCCorner = dyCorner.y;\\n\\n float dotProd = 0.0;\\n\\n for (int wR = 0; wR < \"+e+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+e+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+n+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+n+\" - 1 - wC;\\n\\n // TO DO: Vec4 over the channelMul\\n for (int dm = 0; dm < \"+s+\"; dm++) {\\n int d2 = d1 * \"+s+\" + dm;\\n float xValue = getDy(batch, idyR, idyC, d2);\\n float wValue = getW(wRPerm, wCPerm, d1, dm);\\n dotProd += xValue * wValue;\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Qa=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var o=t.padInfo.top,a=t.padInfo.left,i=t.strideHeight,s=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterHeight,h=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4,p=\"channelsLast\"===t.dataFormat,v=p?1:2,m=p?2:3,g=p?3:1,y=\"\",x=\"\";n&&(y=r?\"float activation(float a) {\\n float b = getPreluActivationWeightsAtOutCoords();\\n \"+n+\"\\n }\":\"\\n float activation(float x) {\\n \"+n+\"\\n }\\n \",x=\"result = activation(result);\");var b=e?\"result += getBiasAtOutCoords();\":\"\";e&&this.variableNames.push(\"bias\"),r&&this.variableNames.push(\"preluActivationWeights\"),this.userCode=\"\\n \"+y+\"\\n\\n const ivec2 strides = ivec2(\"+i+\", \"+s+\");\\n const ivec2 pads = ivec2(\"+o+\", \"+a+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d2 = coords[\"+g+\"];\\n\\n ivec2 xRCCorner =\\n ivec2(coords[\"+v+\"], coords[\"+m+\"]) * strides - pads;\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+l+\"; wR++) {\\n int xR = xRCorner + wR * \"+u+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+h+\"; wC++) {\\n int xC = xCCorner + wC * \"+c+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n for (int d1 = 0; d1 < \"+f+\"; d1 += 4) {\\n vec4 wValues = vec4(\\n getW(wR, wC, d1, d2),\\n getW(wR, wC, d1 + 1, d2),\\n getW(wR, wC, d1 + 2, d2),\\n getW(wR, wC, d1 + 3, d2)\\n );\\n\\n if (\"+p+\") {\\n vec4 xValues = vec4(\\n getX(batch, xR, xC, d1),\\n getX(batch, xR, xC, d1 + 1),\\n getX(batch, xR, xC, d1 + 2),\\n getX(batch, xR, xC, d1 + 3)\\n );\\n dotProd += dot(xValues, wValues);\\n } else {\\n vec4 xValues = vec4(\\n getX(batch, d1, xR, xC),\\n getX(batch, d1 + 1, xR, xC),\\n getX(batch, d1 + 2, xR, xC),\\n getX(batch, d1 + 3, xR, xC)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n }\\n\\n if (\"+(1===d)+\") {\\n\\n if (\"+p+\") {\\n dotProd +=\\n getX(batch, xR, xC, \"+f+\") *\\n getW(wR, wC, \"+f+\", d2);\\n } else {\\n dotProd +=\\n getX(batch, \"+f+\", xR, xC) *\\n getW(wR, wC, \"+f+\", d2);\\n }\\n\\n } else if (\"+(2===d)+\") {\\n vec2 wValues = vec2(\\n getW(wR, wC, \"+f+\", d2),\\n getW(wR, wC, \"+f+\" + 1, d2)\\n );\\n\\n if (\"+p+\") {\\n vec2 xValues = vec2(\\n getX(batch, xR, xC, \"+f+\"),\\n getX(batch, xR, xC, \"+f+\" + 1)\\n );\\n dotProd += dot(xValues, wValues);\\n } else {\\n vec2 xValues = vec2(\\n getX(batch, \"+f+\", xR, xC),\\n getX(batch, \"+f+\" + 1, xR, xC)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n\\n } else if (\"+(3===d)+\") {\\n vec3 wValues = vec3(\\n getW(wR, wC, \"+f+\", d2),\\n getW(wR, wC, \"+f+\" + 1, d2),\\n getW(wR, wC, \"+f+\" + 2, d2)\\n );\\n\\n if (\"+p+\") {\\n vec3 xValues = vec3(\\n getX(batch, xR, xC, \"+f+\"),\\n getX(batch, xR, xC, \"+f+\" + 1),\\n getX(batch, xR, xC, \"+f+\" + 2)\\n );\\n dotProd += dot(xValues, wValues);\\n } else {\\n vec3 xValues = vec3(\\n getX(batch, \"+f+\", xR, xC),\\n getX(batch, \"+f+\" + 1, xR, xC),\\n getX(batch, \"+f+\" + 2, xR, xC)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n\\n }\\n }\\n }\\n\\n float result = dotProd;\\n \"+b+\"\\n \"+x+\"\\n setOutput(result);\\n }\\n \"},Ja=function(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,h=t.filterHeight,f=t.filterWidth,d=4*Math.floor(t.inChannels/4),p=t.inChannels%4;this.userCode=\"\\n const ivec3 strides = ivec3(\"+o+\", \"+a+\", \"+i+\");\\n const ivec3 pads = ivec3(\"+e+\", \"+n+\", \"+r+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int d2 = coords.u;\\n\\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\\n int xFCorner = xFRCCorner.x;\\n int xRCorner = xFRCCorner.y;\\n int xCCorner = xFRCCorner.z;\\n\\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\\n // values in that axis.\\n float dotProd = 0.0;\\n for (int wF = 0; wF < \"+l+\"; wF++) {\\n int xF = xFCorner + wF * \"+s+\";\\n\\n if (xF < 0 || xF >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int wR = 0; wR < \"+h+\"; wR++) {\\n int xR = xRCorner + wR * \"+u+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+f+\"; wC++) {\\n int xC = xCCorner + wC * \"+c+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n for (int d1 = 0; d1 < \"+d+\"; d1 += 4) {\\n vec4 xValues = vec4(\\n getX(batch, xF, xR, xC, d1),\\n getX(batch, xF, xR, xC, d1 + 1),\\n getX(batch, xF, xR, xC, d1 + 2),\\n getX(batch, xF, xR, xC, d1 + 3)\\n );\\n vec4 wValues = vec4(\\n getW(wF, wR, wC, d1, d2),\\n getW(wF, wR, wC, d1 + 1, d2),\\n getW(wF, wR, wC, d1 + 2, d2),\\n getW(wF, wR, wC, d1 + 3, d2)\\n );\\n\\n dotProd += dot(xValues, wValues);\\n }\\n\\n if (\"+(1===p)+\") {\\n dotProd +=\\n getX(batch, xF, xR, xC, \"+d+\") *\\n getW(wF, wR, wC, \"+d+\", d2);\\n } else if (\"+(2===p)+\") {\\n vec2 xValues = vec2(\\n getX(batch, xF, xR, xC, \"+d+\"),\\n getX(batch, xF, xR, xC, \"+d+\" + 1)\\n );\\n vec2 wValues = vec2(\\n getW(wF, wR, wC, \"+d+\", d2),\\n getW(wF, wR, wC, \"+d+\" + 1, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n } else if (\"+(3===p)+\") {\\n vec3 xValues = vec3(\\n getX(batch, xF, xR, xC, \"+d+\"),\\n getX(batch, xF, xR, xC, \"+d+\" + 1),\\n getX(batch, xF, xR, xC, \"+d+\" + 2)\\n );\\n vec3 wValues = vec3(\\n getW(wF, wR, wC, \"+d+\", d2),\\n getW(wF, wR, wC, \"+d+\" + 1, d2),\\n getW(wF, wR, wC, \"+d+\" + 2, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Za=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var o=t.inHeight,a=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,h=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,p=t.outChannels/t.inChannels,v=\"\",m=\"\";n&&(v=r?\"float activation(float a) {\\n float b = getPreluActivationWeightsAtOutCoords();\\n \"+n+\"\\n }\":\"\\n float activation(float x) {\\n \"+n+\"\\n }\\n \",m=\"result = activation(result);\");var g=e?\"result += getBiasAtOutCoords();\":\"\";e&&this.variableNames.push(\"bias\"),r&&this.variableNames.push(\"preluActivationWeights\"),this.userCode=\"\\n \"+v+\"\\n\\n const ivec2 strides = ivec2(\"+u+\", \"+c+\");\\n const ivec2 pads = ivec2(\"+i+\", \"+s+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords.x;\\n ivec2 xRCCorner = coords.yz * strides - pads;\\n int d2 = coords.w;\\n int d1 = d2 / \"+p+\";\\n int q = d2 - d1 * \"+p+\";\\n\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\\n for (int wR = 0; wR < \"+f+\"; wR++) {\\n int xR = xRCorner + wR * \"+l+\";\\n\\n if (xR < 0 || xR >= \"+o+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+d+\"; wC++) {\\n int xC = xCCorner + wC * \"+h+\";\\n\\n if (xC < 0 || xC >= \"+a+\") {\\n continue;\\n }\\n\\n float xVal = getX(batch, xR, xC, d1);\\n float wVal = getW(wR, wC, d1, q);\\n dotProd += xVal * wVal;\\n }\\n }\\n\\n float result = dotProd;\\n \"+g+\"\\n \"+m+\"\\n setOutput(result);\\n }\\n \"},ti=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.outShape;for(var o=t.inHeight,a=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,h=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,p=d,v=\"int xR; int xC; int xCOffset;\",m=0;m= 0 && xR < \"+o+\" && xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\" = getX(batch, xR, xCOffset, d1);\\n\\n // Need to manually clear unused channels in case\\n // we're reading from recycled texture.\\n if(xCOffset + 1 >= \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\".zw = vec2(0.);\\n }\\n } else {\\n xTexelR\"+m+\"C\"+g+\" = vec4(0.);\\n }\\n\\n xCOffset = xC + 1 - 2;\\n if(xR >= 0 && xR < \"+o+\" && xCOffset >= 0 && xCOffset < \"+a+\") {\\n vec4 previous = getX(batch, xR, xCOffset, d1);\\n\\n // Need to manually clear unused channels in case\\n // we're reading from recycled texture.\\n if(xCOffset + 1 >= \"+a+\") {\\n previous.zw = vec2(0.);\\n }\\n\\n xR\"+m+\"C\"+g+\" = vec4(previous.zw, xTexelR\"+m+\"C\"+g+\".xy);\\n } else {\\n xR\"+m+\"C\"+g+\" = vec4(0, 0, xTexelR\"+m+\"C\"+g+\".xy);\\n }\\n \":\"\\n if(xR >= 0 && xR < \"+o+\" && xC >= 0 && xC < \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\" = getX(batch, xR, xC, d1);\\n } else {\\n xTexelR\"+m+\"C\"+g+\" = vec4(0.);\\n }\\n\\n xR\"+m+\"C\"+g+\" = xTexelR\"+m+\"C\"+g+\";\\n \",g+1= 0 && xR < \"+o+\" &&\\n xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+(g+2)+\" = getX(batch, xR, xCOffset, d1);\\n }\\n \",h>1&&(v+=\"\\n xCOffset -= 2;\\n if(xR >= 0 && xR < \"+o+\" &&\\n xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+m+\"C\"+g+\" = vec4(0.);\\n }\\n \"),v+=\"\\n xR\"+m+\"C\"+(g+1)+\" = vec4(\\n xTexelR\"+m+\"C\"+g+\".zw, xTexelR\"+m+\"C\"+(g+2)+\".xy);\\n \"):v+=\"\\n xCOffset = xC + \"+x+\";\\n\\n if(xR >= 0 && xR < \"+o+\" &&\\n xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+(g+2)+\" = getX(batch, xR, xCOffset, d1);\\n }\\n\\n xR\"+m+\"C\"+(g+1)+\" = xTexelR\"+m+\"C\"+(g+2)+\";\\n \"}}else g= 0 && xR < \"+o+\") {\\n \",s%2==1?(v+=\"\\n xCOffset = xC + 1 - \"+c+\";\\n if(xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+m+\"C\"+g+\" = vec4(0.);\\n }\\n\\n if(xC + 1 >= 0 && xC + 1 < \"+a+\") {\\n xTexelR\"+m+\"C\"+(g+2)+\" = getX(batch, xR, xC + 1, d1);\\n } else {\\n xTexelR\"+m+\"C\"+(g+2)+\" = vec4(0.);\\n }\\n\\n xR\"+m+\"C\"+g+\" = vec4(\\n xTexelR\"+m+\"C\"+g+\".zw, xTexelR\"+m+\"C\"+(g+2)+\".zw);\\n \",g+1= 0 && xCOffset < \"+a+\") {\\n final = getX(batch, xR, xCOffset, d1);\\n }\\n xR\"+m+\"C\"+(g+1)+\" = vec4(xTexelR\"+m+\"C\"+(g+2)+\".xy, final.xy);\\n \")):(v+=\"\\n if(xC >= 0 && xC < \"+a+\") {\\n xTexelR\"+m+\"C\"+g+\" = getX(batch, xR, xC, d1);\\n } else {\\n xTexelR\"+m+\"C\"+g+\" = vec4(0.);\\n }\\n\\n xCOffset = xC + \"+c+\";\\n if(xCOffset >= 0 && xCOffset < \"+a+\") {\\n xTexelR\"+m+\"C\"+(g+2)+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+m+\"C\"+(g+2)+\" = vec4(0.);\\n }\\n\\n xR\"+m+\"C\"+g+\" = vec4(\\n xTexelR\"+m+\"C\"+g+\".xy, xTexelR\"+m+\"C\"+(g+2)+\".xy);\\n \",g+11?[\"\"+(i-1)/(l-1),\"(y2-y1) * height_ratio\",\"y1*\"+p+\" + float(y)*(height_scale)\"]:[\"0.0\",\"0.0\",\"0.5 * (y1+y2) * \"+p],g=m[0],y=m[1],x=m[2],b=h>1?[\"\"+(s-1)/(h-1),\"(x2-x1) * width_ratio\",\"x1*\"+v+\" + float(x)*(width_scale)\"]:[\"0.0\",\"0.0\",\"0.5 * (x1+x2) * \"+v],w=b[0],C=b[1],E=b[2];this.userCode=\"\\n const float height_ratio = float(\"+g+\");\\n const float width_ratio = float(\"+w+\");\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int y = coords[1];\\n int x = coords[2];\\n int d = coords[3];\\n\\n // get box vals\\n float y1 = getBoxes(b,0);\\n float x1 = getBoxes(b,1);\\n float y2 = getBoxes(b,2);\\n float x2 = getBoxes(b,3);\\n\\n // get image in batch index\\n int bInd = round(getBoxInd(b));\\n if(bInd < 0 || bInd >= \"+a+\") {\\n return;\\n }\\n\\n float height_scale = \"+y+\";\\n float width_scale = \"+C+\";\\n\\n float in_y = \"+x+\";\\n if( in_y < 0.0 || in_y > \"+p+\" ) {\\n setOutput(float(\"+o+\"));\\n return;\\n }\\n float in_x = \"+E+\";\\n if( in_x < 0.0 || in_x > \"+v+\" ) {\\n setOutput(float(\"+o+\"));\\n return;\\n }\\n\\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\\n if(\"+f+\" == 1) {\\n // Compute the four integer indices.\\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\\n\\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\\n\\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\\n\\n float top = topLeft + (topRight - topLeft) * fracCR.x;\\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\\n float newValue = top + (bottom - top) * fracCR.y;\\n setOutput(newValue);\\n } else {\\n // Compute the coordinators of nearest neighbor point.\\n ivec2 sourceNearestCR = ivec2(floor(\\n sourceFracIndexCR + vec2(0.5,0.5)));\\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\\n setOutput(newValue);\\n }\\n }\\n \"},ni=function(t,e,n){this.variableNames=[\"x\"],this.outputShape=t;var r=t.length,o=t[t.length-1],a=n?\"<\":\">\";this.userCode=\"\\n int getIndex(int i) {\\n \"+(n?\"return \"+o+\" -i - 1;\":\"return i;\")+\"\\n }\\n\\n void main() {\\n \"+wa(r)+\" coords = getOutputCoords();\\n int end = \"+ri(r,\"coords\")+\";\\n float val = 0.0;\\n for (int i = \"+o+\" - 1; i >= 0; i -= 1) {\\n int idx = getIndex(i);\\n if (idx \"+a+\" end) {\\n continue;\\n }\\n if (idx == end && \"+e+\") {\\n continue;\\n }\\n \"+ri(r,\"coords\")+\" = idx;\\n val += getX(\"+function(t,e){if(1===t)return\"\"+e;if(2===t)return e+\".x, \"+e+\".y\";if(3===t)return e+\".x, \"+e+\".y, \"+e+\".z\";if(4===t)return e+\".x, \"+e+\".y, \"+e+\".z, \"+e+\".w\";throw Error(\"Cumulative sum for rank \"+t+\" is not yet supported\")}(r,\"coords\")+\");\\n }\\n setOutput(val);\\n }\\n \"};function ri(t,e){if(1===t)return\"\"+e;if(2===t)return e+\".y\";if(3===t)return e+\".z\";if(4===t)return e+\".w\";throw Error(\"Cumulative sum for rank \"+t+\" is not yet supported\")}var oi=function(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Vt.DENSE;var e=Yt(t),n=ua();this.outputShape=t,this.userCode=\"\\n ivec3 outCoordsFromFlatIndex(int index) {\\n \"+ca([\"r\",\"c\",\"d\"],t)+\"\\n return ivec3(r, c, d);\\n }\\n\\n void main() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+e[0]+\", \"+e[1]+\"));\\n int index = 4 * (resTexRC.x * \"+e[1]+\" + resTexRC.y);\\n\\n vec4 result = vec4(0.);\\n\\n for (int i=0; i<4; i++) {\\n int flatIndex = index + i;\\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\\n result[i] = getA(rc.x, rc.y, rc.z);\\n }\\n\\n \"+n.output+\" = result;\\n }\\n \"},ai=function(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Vt.DENSE;var e=Yt(t),n=ua();this.outputShape=t,this.userCode=\"\\n ivec3 outCoordsFromFlatIndex(int index) {\\n \"+ca([\"r\",\"c\",\"d\"],t)+\"\\n return ivec3(r, c, d);\\n }\\n\\n void main() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+e[0]+\", \"+e[1]+\"));\\n int index = 4 * (resTexRC.x * \"+e[1]+\" + resTexRC.y);\\n\\n vec4 result = vec4(0.);\\n\\n for (int i=0; i<4; i++) {\\n int flatIndex = index + i;\\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\\n }\\n\\n \"+n.output+\" = result;\\n }\\n \"},ii=function(){function t(t,e,n){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int h = \"+this.getHeightCoordString()+\";\\n int w = \"+this.getWidthCoordString()+\";\\n int d = \"+this.getDepthCoordString()+\";\\n\\n int in_h = h / \"+e+\";\\n int offset_h = imod(h, \"+e+\");\\n int in_w = w / \"+e+\";\\n int offset_w = imod(w, \"+e+\");\\n int offset_d = (offset_h * \"+e+\" + offset_w) *\\n \"+this.getOutputDepthSize()+\";\\n int in_d = d + offset_d;\\n\\n float result = \"+this.getInputSamplingString()+\";\\n setOutput(result);\\n }\\n \"}return t.prototype.getHeightCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[1]\":\"coords[2]\"},t.prototype.getWidthCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[2]\":\"coords[3]\"},t.prototype.getDepthCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[3]\":\"coords[1]\"},t.prototype.getOutputDepthSize=function(){return\"NHWC\"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return\"NHWC\"===this.dataFormat?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"},t}(),si=function(t){this.variableNames=[\"X\"],this.outputShape=[t,t],this.userCode=\"\\n void main() {\\n ivec2 coords = getOutputCoords();\\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\\n setOutput(val);\\n }\\n \"},ui=function(t){this.variableNames=[\"A\"],this.outTexUsage=zt.DOWNLOAD;var e=ua();this.outputShape=t,this.userCode=\"\\n \"+ha+\"\\n\\n void main() {\\n float x = getAAtOutCoords();\\n \"+e.output+\" = encode_float(x);\\n }\\n \"},ci=function(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=zt.DOWNLOAD;var e=ua();this.outputShape=t,this.userCode=\"\\n \"+ha+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\\n \"+e.output+\" = encode_float(x);\\n }\\n \"},li=function(t,e,n){void 0===n&&(n=!1),this.variableNames=[\"A\"];var r=ua(),o=e[0],a=e[1];this.outputShape=t;var i=\"result\";n&&(i=\"floor(result * 255. + 0.5)\"),this.userCode=\"\\n \"+la(t)+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n\\n int flatIndex = getFlatIndex(coords);\\n int offset = imod(flatIndex, 4);\\n\\n flatIndex = idiv(flatIndex, 4, 1.);\\n \\n int r = flatIndex / \"+a+\";\\n int c = imod(flatIndex, \"+a+\");\\n vec2 uv = (vec2(c, r) + halfCR) / vec2(\"+a+\".0, \"+o+\".0);\\n vec4 values = \"+r.texture2D+\"(A, uv);\\n\\n float result;\\n\\n if(offset == 0) {\\n result = values[0];\\n } else if(offset == 1) {\\n result = values[1];\\n } else if(offset == 2) {\\n result = values[2];\\n } else {\\n result = values[3];\\n }\\n\\n \"+r.output+\" = vec4(\"+i+\", 0., 0., 0.);\\n }\\n \"},hi=function(t,e,n){void 0===n&&(n=!1),this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;var r=ua(),o=e[0],a=e[1];this.outputShape=t;var i=\"\",s=\"result\";n&&(s=\"floor(result * 255. + 0.5)\");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var l=2*u+c;i+=\"\\n localCoords = coords;\\n if(localCoords[2] + \"+c+\" < \"+t[2]+\") {\\n localCoords[2] += \"+c+\";\\n if(localCoords[1] + \"+u+\" < \"+t[1]+\") {\\n localCoords[1] += \"+u+\";\\n\\n flatIndex = getFlatIndex(localCoords);\\n offset = imod(flatIndex, 4);\\n\\n flatIndex = idiv(flatIndex, 4, 1.);\\n\\n r = flatIndex / \"+a+\";\\n c = imod(flatIndex, \"+a+\");\\n uv = (vec2(c, r) + halfCR) / vec2(\"+a+\".0, \"+o+\".0);\\n values = \"+r.texture2D+\"(A, uv);\\n\\n if(offset == 0) {\\n result[\"+l+\"] = values[0];\\n } else if(offset == 1) {\\n result[\"+l+\"] = values[1];\\n } else if(offset == 2) {\\n result[\"+l+\"] = values[2];\\n } else {\\n result[\"+l+\"] = values[3];\\n }\\n }\\n }\\n \"}this.userCode=\"\\n \"+la(t)+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n\\n vec4 result = vec4(0.);\\n int flatIndex, r, c, offset;\\n ivec3 localCoords;\\n vec2 uv;\\n vec4 values;\\n\\n \"+i+\"\\n\\n \"+r.output+\" = \"+s+\";\\n }\\n \"},fi=\"return real * expR - imag * expI;\",di=\"return real * expI + imag * expR;\",pi=function(t,e,n){this.variableNames=[\"real\",\"imag\"];var r=e[1];this.outputShape=e;var o=n?\"2.0 * \"+Math.PI:\"-2.0 * \"+Math.PI,a=n?r+\".0\":\"1.0\";this.userCode=\"\\n const float exponentMultiplier = \"+o+\";\\n\\n float unaryOpComplex(float real, float expR, float imag, float expI) {\\n \"+t+\"\\n }\\n\\n float mulMatDFT(int batch, int index) {\\n float indexRatio = float(index) / float(\"+r+\");\\n float exponentMultiplierTimesIndexRatio =\\n exponentMultiplier * indexRatio;\\n\\n float result = 0.0;\\n\\n for (int i = 0; i < \"+r+\"; i++) {\\n // x = (-2|2 * PI / N) * index * i;\\n float x = exponentMultiplierTimesIndexRatio * float(i);\\n float expR = cos(x);\\n float expI = sin(x);\\n float real = getReal(batch, i);\\n float imag = getImag(batch, i);\\n\\n result +=\\n unaryOpComplex(real, expR, imag, expI) / \"+a+\";\\n }\\n\\n return result;\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n setOutput(mulMatDFT(coords[0], coords[1]));\\n }\\n \"},vi=function(){function t(t,e){this.outputShape=[],this.variableNames=[\"x\"],this.outputShape=t,this.userCode=\"\\n uniform float value;\\n void main() {\\n // Input can be obtained from uniform value.\\n setOutput(value);\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,\"value\")),n.gl.uniform1f(e.valueLoc,t)}},t}(),mi=function(t,e,n){this.variableNames=[\"A\",\"indices\"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var o=wa(this.rank),a=function(t,e){var n=t.length;if(n>4)throw Error(\"Gather for rank \"+n+\" is not yet supported\");if(1===n)return\"int(getIndices(resRC))\";for(var r=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[],a=0;a1?\"strides[j]\":\"strides\";this.userCode=\"\\n \"+r+\" strides = \"+r+\"(\"+this.strides+\");\\n void main() {\\n \"+o+\" coords = getOutputCoords();\\n int flattenIndex = 0;\\n for (int j = 0; j < \"+this.sliceDim+\"; j++) {\\n int index = round(getIndices(coords[0], j));\\n flattenIndex += index * \"+a+\";\\n }\\n setOutput(getX(flattenIndex, coords[1]));\\n }\\n \"};function yi(t,e){var n=ua();return oe(t,e,n.version+\"\\n precision highp float;\\n \"+n.attribute+\" vec3 clipSpacePos;\\n \"+n.attribute+\" vec2 uv;\\n \"+n.varyingVs+\" vec2 resultUV;\\n\\n void main() {\\n gl_Position = vec4(clipSpacePos, 1);\\n resultUV = uv;\\n }\")}function xi(t,e){return fe(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function bi(t,e){return de(t,e,new Uint16Array([0,1,2,2,1,3]))}function wi(t,e,n,r,o,a,i){ve(n,r);var s=pe(t,e),u=t.TEXTURE_2D;return Jt(t,e,(function(){return t.bindTexture(u,s)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texImage2D(u,0,o,n,r,0,a,i,null)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)})),s}function Ci(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],o.internalFormatFloat,o.textureFormatFloat,t.FLOAT)}function Ei(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function Ri(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function Ii(t,e,n,r,o){var a=$t(n,r);return wi(t,e,a[0],a[1],o.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function ki(t,e,n,r,o){var a=$t(n,r);return wi(t,e,a[0],a[1],o.internalFormatPackedHalfFloat,t.RGBA,o.textureTypeHalfFloat)}function Si(t,e,n,r){return Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,r)})),ge(t,e,n,\"clipSpacePos\",r,3,20,0)&&ge(t,e,n,\"uv\",r,2,20,12)}function Ai(t,e,n,r,o,a,i){var s,u,c;Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),a instanceof Uint8Array?(s=new Uint8Array(r*o*4),u=t.UNSIGNED_BYTE,c=t.RGBA):(s=new Float32Array(r*o*4),u=t.FLOAT,c=i.internalFormatPackedFloat),s.set(a),Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,c,r,o,0,t.RGBA,u,s)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))}function Di(t,e,n,r){Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),r.data instanceof Uint8Array?Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)})):Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))}function Ti(t,e,n,r,o){var a=t.createBuffer();Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,a)}));var i=16*n*r;return Jt(t,e,(function(){return t.bufferData(t.PIXEL_PACK_BUFFER,i,t.STREAM_READ)})),Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)})),Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)})),a}function Ni(t,e,n){var r=t,o=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,o),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),o}function Fi(t,e,n,r,o){var a=Xt(n,r),i=a[0],s=a[1],u=new Uint8Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,i,s,o.downloadTextureFormat,t.UNSIGNED_BYTE,u)})),new Float32Array(u.buffer)}function _i(t,e,n,r,o,a,i,s){var u=t,c=new Float32Array(function(t,e){var n=$t(t,e);return n[0]*n[1]*4}(a,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),c}function Oi(t,e,n,r){var o=new Float32Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,o)})),o}var Mi=Object.freeze({createVertexShader:yi,createVertexBuffer:xi,createIndexBuffer:bi,createFloat32MatrixTexture:Ci,createFloat16MatrixTexture:Ei,createUnsignedBytesMatrixTexture:Ri,createPackedMatrixTexture:Ii,createFloat16PackedMatrixTexture:ki,bindVertexProgramAttributeStreams:Si,uploadDenseMatrixToTexture:Ai,uploadPixelDataToTexture:Di,createBufferFromOutputTexture:Ti,downloadFloat32MatrixFromBuffer:Ni,downloadByteEncodedFloatMatrixFromOutputTexture:Fi,downloadPackedMatrixFromBuffer:_i,downloadMatrixFromPackedOutputTexture:Oi}),Bi=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=i().getNumber(\"WEBGL_VERSION\");null!=t?(this.gl=t,Kt(e,t)):this.gl=jt(e);var n=\"WEBGL_color_buffer_float\";if(1===i().getNumber(\"WEBGL_VERSION\")){if(this.textureFloatExtension=re(this.gl,this.debug,\"OES_texture_float\"),Pe(this.gl,\"OES_texture_half_float\"))this.textureHalfFloatExtension=re(this.gl,this.debug,\"OES_texture_half_float\");else if(i().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Pe(this.gl,\"EXT_color_buffer_half_float\"))this.colorBufferHalfFloatExtension=re(this.gl,this.debug,\"EXT_color_buffer_half_float\");else if(i().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\")}else if(n=\"EXT_color_buffer_float\",Pe(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else{if(!Pe(this.gl,\"EXT_color_buffer_half_float\"))throw new Error(\"GL context does not support color renderable floats\");this.colorBufferHalfFloatExtension=this.gl.getExtension(\"EXT_color_buffer_half_float\")}this.vertexBuffer=xi(this.gl,this.debug),this.indexBuffer=bi(this.gl,this.debug),this.framebuffer=me(this.gl,this.debug),this.textureConfig=Qt(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(t.prototype,\"debug\",{get:function(){return i().getBool(\"DEBUG\")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn(\"Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing.\"),null!=this.outputTexture&&console.warn(\"Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.\");var e=this.gl;Jt(e,this.debug,(function(){return e.finish()})),Jt(e,this.debug,(function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteFramebuffer(t.framebuffer)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteBuffer(t.indexBuffer)})),this.disposed=!0}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Ci(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Ei(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Ri(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Di(this.gl,this.debug,t,e)},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),Ai(this.gl,this.debug,t,e,n,r,this.textureConfig)},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),ki(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Ii(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(Ee(this.gl,this.debug,this.framebuffer),this.outputTexture=null),Jt(this.gl,this.debug,(function(){return e.gl.deleteTexture(t)}))},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return Fi(r.gl,r.debug,e,n,r.textureConfig)}))},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,o,a){return _i(this.gl,t,0,0,0,o,a,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Ni(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Ti(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(i().getBool(\"WEBGL_FENCE_API_ENABLED\")){var o=t,a=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=o.clientWaitSync(a,0,0);return t===o.ALREADY_SIGNALED||t===o.CONDITION_SATISFIED},e=a}else i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}):n=function(){return!0};return{query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return Oi(r.gl,r.debug,e,n)}))},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=ae(e,this.debug,t),r=yi(e,this.debug),o=ce(e,this.debug);return Jt(e,this.debug,(function(){return e.attachShader(o,r)})),Jt(e,this.debug,(function(){return e.attachShader(o,n)})),le(e,this.debug,o),this.debug&&he(e,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=Si(e,this.debug,this.program,this.vertexBuffer)),o},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&Jt(this.gl,this.debug,(function(){return e.gl.deleteProgram(t)}))},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&he(this.gl,this.debug,this.program),Jt(this.gl,this.debug,(function(){return e.gl.useProgram(t)}))},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?xe(this.gl,this.debug,t,e):be(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return n.gl.getAttribLocation(t,e)}))},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),we(this.gl,this.debug,this.program,t,e,n)},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=$t(e,n),o=r[0],a=r[1];this.setOutputMatrixTextureDriver(t,o,a)},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e)},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")},t.prototype.debugValidate=function(){null!=this.program&&he(this.gl,this.debug,this.program),Re(this.gl)},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),Jt(t,this.debug,(function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)}))},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return t.gl.finish()}))},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=re(this.gl,this.debug,2===i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")?\"EXT_disjoint_timer_query_webgl2\":\"EXT_disjoint_timer_query\")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},t.prototype.endQuery=function(){if(2!==i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},t.prototype.waitForQueryAndGetTime=function(t){return n(this,void 0,void 0,(function(){var e=this;return r(this,(function(n){switch(n.label){case 0:return[4,F((function(){return e.disposed||e.isQueryAvailable(t,i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}))];case 1:return n.sent(),[2,this.getQueryTime(t,i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))]}}))}))},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return!0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint}o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise((function(n){e.addItemToPoll((function(){return t.isFencePassed()}),(function(){return n()}))}))},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e1||F((function(){return n.pollItems(),0===n.itemsToPoll.length}))},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),Ce(this.gl,this.debug,t,this.framebuffer),this.debug&&Re(this.gl)},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(Ce(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Re(this.gl)):Ee(this.gl,this.debug,this.framebuffer)},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;Ce(r,this.debug,t,this.framebuffer),this.debug&&Re(r),this.outputTexture=t,Jt(r,this.debug,(function(){return r.viewport(0,0,e,n)})),Jt(r,this.debug,(function(){return r.scissor(0,0,e,n)}))},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var o=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return o.gl.scissor(t,e,n,r)}))},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error(\"Attempted to use disposed GPGPUContext.\")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error(\"No GPU program is currently set.\")},t}();function Pi(t,e){if(t.length!==e.length)throw Error(\"Binary was compiled with \"+t.length+\" inputs, but was executed with \"+e.length+\" inputs\");t.forEach((function(t,n){var r=t.logicalShape,o=e[n],a=o.shape;if(!S(r,a))throw Error(\"Binary was compiled with different shapes than the current args. Shapes \"+r+\" and \"+a+\" must match\");if(!t.isUniform||!o.isUniform){var i=t.texShape,s=o.isUniform?null:o.texData.texShape;if(!S(i,s))throw Error(\"Binary was compiled with different texture shapes than the current args. Shape \"+i+\" and \"+s+\" must match\")}}))}var Li=function(t,e,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var r=n.filterWidth,o=n.inChannels,a=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,c=n.dilationWidth,l=n.dilationHeight,h=n.dataFormat,f=s.left,d=s.top,p=o*r,v=ua(),m=\"channelsLast\"===h,g=m?0:1,y=m?1:2,x=\"\",b=0;b<=1;b++)for(var w=0;w<=1;w++)x+=\"\\n blockIndex = rc.y + \"+w+\";\\n pos = rc.x + \"+b+\";\\n\\n if(blockIndex < \"+t[1]+\" && pos < \"+t[0]+\") {\\n offsetY = int(blockIndex / (\"+u+\")) * \"+i+\" - \"+d+\";\\n d0 = offsetY + \"+l+\" * (pos / \"+p+\");\\n\\n if(d0 < \"+e[g]+\" && d0 >= 0) {\\n\\n offsetX = int(mod(float(blockIndex), \"+u+\".) * \"+a+\". - \"+f+\".);\\n d1 = offsetX + \"+c+\" * (int(mod(float(pos), \"+p+\".) / \"+o+\".));\\n\\n if(d1 < \"+e[y]+\" && d1 >= 0) {\\n\\n ch = int(mod(float(pos), \"+o+\".));\\n\\n if (\"+m+\") {\\n innerDims = vec2(d1, ch);\\n result[\"+(2*b+w)+\"] = getChannel(\\n getA(d0, int(innerDims.x),\\n int(innerDims.y)), innerDims);\\n } else {\\n innerDims = vec2(d0, d1);\\n result[\"+(2*b+w)+\"] = getChannel(\\n getA(ch, int(innerDims.x),\\n int(innerDims.y)), innerDims);\\n }\\n }\\n }\\n }\\n \";this.userCode=\"\\n void main() {\\n ivec2 rc = getOutputCoords();\\n\\n vec4 result = vec4(0);\\n\\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\\n vec2 innerDims;\\n\\n \"+x+\"\\n\\n \"+v.output+\" = result;\\n }\\n \"},Wi=function(t,e,n,r,o){this.variableNames=[\"x\"],this.outputShape=[];var a,i=e,s=t[3]-1;this.outputShape=t;var u=\"float(\"+n+\") + float(\"+r+\") * sum\";a=.5===o?\"inversesqrt(\"+u+\")\":1===o?\"1.0/(\"+u+\")\":\"exp(log(\"+u+\") * float(-\"+o+\"));\",this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int r = coords[1];\\n int c = coords[2];\\n int d = coords[3];\\n float x = getX(b, r, c, d);\\n float sum = 0.0;\\n for (int j = -\"+i+\"; j <= \"+i+\"; j++) {\\n int idx = d + j;\\n if (idx >= 0 && idx <= \"+s+\") {\\n float z = getX(b, r, c, idx);\\n sum += z * z;\\n }\\n }\\n float val = x * \"+a+\";\\n setOutput(val);\\n }\\n \"},Ui=function(t,e,n,r,o){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=o,this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float result = 0.0;\\n for (int d = 0; d < \"+this.depth+\"; ++d) {\\n int depthBegin = int(max(0.0, float(d - \"+e+\")));\\n int depthEnd = int(min(float(\"+this.depth+\"),\\n float(d + \"+e+\" + 1)));\\n\\n const int MIN_DEPTH_BEGIN = 0;\\n const int MAX_DEPTH_END = \"+this.depth+\";\\n\\n float norm = 0.0;\\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\\n if (k < depthBegin){\\n continue;\\n }\\n else if (k >= depthBegin && k < depthEnd) {\\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\\n }\\n else {\\n break;\\n }\\n }\\n\\n norm = float(\"+r+\") * norm + float(\"+n+\");\\n\\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\\n if (k < depthBegin){\\n continue;\\n }\\n else if (k >= depthBegin && k < depthEnd){\\n float dyi = -2.0 * float(\"+r+\")\\n * float(\"+o+\")\\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\\n / norm;\\n if (k == d) {\\n dyi += pow(norm, -1.0 * \"+o+\");\\n }\\n if (k == coords[3]) {\\n dyi *= getDy(b, r, c, d);\\n result += dyi;\\n }\\n }\\n else {\\n break;\\n }\\n }\\n }\\n setOutput(result);\\n }\\n \"},Vi=function(t,e,n,r,o){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var a,i=e,s=t[3]-1;this.outputShape=t;var u=\"float(\"+n+\") + float(\"+r+\") * sum\";a=.5===o?\"inversesqrt(\"+u+\")\":1===o?\"1.0/(\"+u+\")\":\"exp(log(\"+u+\") * float(-\"+o+\"));\",this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords.x;\\n int r = coords.y;\\n int c = coords.z;\\n int d = coords.w;\\n\\n bool hasNextCol = d < \"+this.outputShape[3]+\";\\n bool hasNextRow = c < \"+this.outputShape[2]+\";\\n\\n vec4 sum = vec4(0.);\\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\\n\\n vec4 xAtOutputCoords = vec4(\\n getChannel(xFragAtOutputCoords, vec2(c, d)),\\n hasNextCol ?\\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\\n hasNextRow ?\\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\\n );\\n\\n int firstChannel = d - \"+i+\";\\n vec2 cache = vec2(0.);\\n if(firstChannel >= 0){\\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\\n if(hasNextRow){\\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\\n }\\n }\\n\\n ivec2 depth = ivec2(d, d + 1);\\n for (int j = - \"+i+\"; j <= \"+i+\"; j++) {\\n ivec2 idx = depth + j;\\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(\"+s+\"));\\n\\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\\n\\n if(depthInRange || depthPlusOneInRange){\\n vec4 z = vec4(0.);\\n vec4 xFragAtCurrentDepth;\\n z.xz = cache.xy;\\n if(depthPlusOneInRange && hasNextCol){\\n xFragAtCurrentDepth = idx.y != d ?\\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\\n if(hasNextRow){\\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\\n }\\n }\\n cache.xy = z.yw;\\n sum += z * z;\\n }\\n }\\n vec4 result = xAtOutputCoords * \"+a+\";\\n setOutput(result);\\n }\\n \"},zi=function(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,o=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=o-1-t.padInfo.top,s=a-1-t.padInfo.left,u=o*a-1;this.userCode=\"\\n const ivec2 pads = ivec2(\"+i+\", \"+s+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n\\n ivec2 dyRCCorner = coords.yz - pads;\\n int dyRCorner = dyRCCorner.x;\\n int dyCCorner = dyRCCorner.y;\\n\\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+o+\";\\n wR += \"+r+\") {\\n float dyR = float(dyRCorner + wR) / \"+e+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+a+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+n+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(b, idyR, idyC, d);\\n int maxPosValue = \"+u+\" - int(getMaxPos(b, idyR, idyC, d));\\n\\n // Get the current value, check it against the value from the\\n // position matrix.\\n int curPosValue = wR * \"+a+\" + wC;\\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\\n\\n dotProd += dyValue * mask;\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Gi=function(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=s-1-t.padInfo.front,h=u-1-t.padInfo.top,f=c-1-t.padInfo.left,d=s*u*c-1;this.userCode=\"\\n const ivec3 pads = ivec3(\"+l+\", \"+h+\", \"+f+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int ch = coords.u;\\n\\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\\n int dyDCorner = dyCorner.x;\\n int dyRCorner = dyCorner.y;\\n int dyCCorner = dyCorner.z;\\n\\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\\n // dx(xD, xR, xC, ch).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n\\n for (int wD = 0; wD < \"+s+\";\\n wD += \"+o+\") {\\n float dyD = float(dyDCorner + wD) / \"+e+\".0;\\n\\n if (dyD < 0.0 || dyD >= \"+t.outDepth+\".0 || fract(dyD) > 0.0) {\\n continue;\\n }\\n int idyD = int(dyD);\\n\\n for (int wR = 0; wR < \"+u+\";\\n wR += \"+a+\") {\\n float dyR = float(dyRCorner + wR) / \"+n+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 ||\\n fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+c+\";\\n wC += \"+i+\") {\\n float dyC = float(dyCCorner + wC) / \"+r+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\\n int maxPosValue = \"+d+\" -\\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\\n\\n // Get the current value, check it against the value from the\\n // position matrix.\\n int curPosValue =\\n wD * \"+u+\" * \"+c+\" +\\n wR * \"+c+\" + wC;\\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\\n\\n dotProd += dyValue * mask;\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"},Hi=function(t,e,n,r,o,a,i){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===a&&(a=null),void 0===i&&(i=!1),this.variableNames=[\"matrixA\",\"matrixB\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;var s=n?t[1]:t[2],u=Math.ceil(s/2),c=n?\"i * 2, rc.y\":\"rc.y, i * 2\",l=r?\"rc.z, i * 2\":\"i * 2, rc.z\",h=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],f=r?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],d=\"\",p=\"\";a&&(d=i?\"vec4 activation(vec4 a) {\\n vec4 b = getPreluActivationWeightsAtOutCoords();\\n \"+a+\"\\n }\":\"vec4 activation(vec4 x) {\\n \"+a+\"\\n }\",p=\"result = activation(result);\");var v=o?\"result += getBiasAtOutCoords();\":\"\";o&&this.variableNames.push(\"bias\"),i&&this.variableNames.push(\"preluActivationWeights\"),this.userCode=\"\\n \"+d+\"\\n\\n const float sharedDimension = \"+u+\".0;\\n\\n vec4 dot2x2ARowBCol(ivec3 rc) {\\n vec4 result = vec4(0);\\n for (int i = 0; i < \"+u+\"; i++) {\\n vec4 a = getMatrixA(rc.x, \"+c+\");\\n vec4 b = getMatrixB(rc.x, \"+l+\");\\n\\n // These swizzled products need to be separately added.\\n // See: https://github.com/tensorflow/tfjs/issues/1735\\n result += (\"+h[0]+\" * \"+f[0]+\");\\n result += (\"+h[1]+\" * \"+f[1]+\");\\n }\\n return result;\\n }\\n\\n void main() {\\n ivec3 rc = getOutputCoords();\\n vec4 result = dot2x2ARowBCol(rc);\\n\\n \"+v+\"\\n\\n \"+p+\"\\n\\n setOutput(result);\\n }\\n \"},qi=function(){function t(t,e,n){this.variableNames=[\"probs\"],this.outputShape=[t,n],this.userCode=\"\\n uniform float seed;\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n\\n float r = random(seed);\\n float cdf = 0.0;\\n\\n for (int i = 0; i < \"+(e-1)+\"; i++) {\\n cdf += getProbs(batch, i);\\n\\n if (r < cdf) {\\n setOutput(float(i));\\n return;\\n }\\n }\\n\\n // If no other event happened, last event happened.\\n setOutput(float(\"+(e-1)+\"));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,\"seed\")),n.gl.uniform1f(e.seedLoc,t)}},t}(),Ki=function(t,e,n,r){this.variableNames=[\"indices\"],this.outputShape=[t,e],this.userCode=\"\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int index = round(getIndices(coords.x));\\n setOutput(mix(float(\"+r+\"), float(\"+n+\"),\\n float(index == coords.y)));\\n }\\n \"},ji=function(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t;var e=t.length;if(0===e)this.userCode=\"\\n void main() {\\n setOutput(vec4(getA(), 0., 0., 0.));\\n }\\n \";else{var n=sa(\"rc\",e),r=wa(e),o=function(t,e,n){if(1===t)return\"rc > \"+e[0];for(var r=\"\",o=t-2;o= \"+e[o],o= \"+e+\";\\n bool rEdge = rp1 >= \"+n+\";\\n \"}(e,t[t.length-1],t[t.length-2],n),i=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var a=(0===r?\"r\":\"rp1\")+\", \"+(0===o?\"c\":\"cp1\"),i=2;i= \"+t[0]+\" ? 0. : getA(rc + 1),\\n 0, 0\":\"getA(\"+r[0]+\"),\\n cEdge ? 0. : getA(\"+r[1]+\"),\\n rEdge ? 0. : getA(\"+r[2]+\"),\\n rEdge || cEdge ? 0. : getA(\"+r[3]+\")\"}(t,n);this.userCode=\"\\n void main() {\\n \"+r+\" rc = getOutputCoords();\\n\\n if(\"+o+\") {\\n setOutput(vec4(0));\\n } else {\\n \"+a+\"\\n\\n setOutput(vec4(\"+i+\"));\\n }\\n }\\n \"}};var Xi=function(t,e,n){this.variableNames=[\"x\"],this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));var r=t.length,o=wa(r),a=e.map((function(t){return t[0]})).join(\",\"),i=e.map((function(e,n){return e[0]+t[n]})).join(\",\"),s=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,r);this.userCode=1!==r?\"\\n \"+o+\" start = \"+o+\"(\"+a+\");\\n \"+o+\" end = \"+o+\"(\"+i+\");\\n\\n void main() {\\n \"+o+\" outC = getOutputCoords();\\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\\n setOutput(float(\"+n+\"));\\n } else {\\n \"+o+\" coords = outC - start;\\n setOutput(getX(\"+s+\"));\\n }\\n }\\n \":\"\\n int start = \"+a+\";\\n int end = \"+i+\";\\n\\n void main() {\\n int outC = getOutputCoords();\\n if (outC < start || outC >= end) {\\n setOutput(float(\"+n+\"));\\n } else {\\n setOutput(getX(outC - start));\\n }\\n }\\n \"},Yi=function(t,e,n){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));for(var r=t.length,o=wa(r),a=e.map((function(t){return t[0]})).join(\",\"),i=e.map((function(e,n){return e[0]+t[n]})).join(\",\"),s=sa(\"rc\",r),u=sa(\"source\",r),c=s[r-1]+\" < \"+this.outputShape[r-1],l=1===r?\"source\":\"vec2(\"+u.slice(-2).join()+\")\",h=[o+\" rc = outputLoc;\",s[r-1]+\" += 1;\\n if(\"+c+\") {\\n \",1===r?\"\":\"}\\n rc = outputLoc;\\n \"+s[r-2]+\" += 1;\\n if(\"+s[r-2]+\" < \"+this.outputShape[r-2]+\") {\",1===r?\"\":\" \"+s[r-1]+\" += 1;\\n if(\"+c+\") {\"],f=1===r?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",d=\"\",p=0,v=1===r?2:4;p= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+c+\";\\n wC += \"+s+\") {\\n int xC = xCCorner + wC;\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float value = getX(batch, xR, xC, d);\\n\\n // If a min / max value has already been found, use it. If not,\\n // use the current value.\\n float currMinMaxValue = mix(\\n value, minMaxValue, minMaxValueFound);\\n if (value >= currMinMaxValue) {\\n minMaxValue = value;\\n minMaxValueFound = 1.0;\\n minMaxPosition = wR * \"+c+\" + wC;\\n }\\n }\\n }\\n setOutput(float(minMaxPosition));\\n }\\n \";else{var p=e+\"(\"+e+\"(\"+e+\"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])\";\"avg\"===e&&(p=\"avgValue / count\");var v=4*Math.floor(r/4),m=r%4,g=\"\\n if (\"+f+\") {\\n avgValue += dot(values, ones);\\n } else {\\n minMaxValue = max(values, minMaxValue);\\n }\\n \";this.userCode=\"\\n const ivec2 strides = ivec2(\"+o+\", \"+a+\");\\n const ivec2 pads = ivec2(\"+l+\", \"+h+\");\\n const float initializationValue = \"+d+\";\\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n float count = 0.0;\\n\\n float getValue(int batch, int xR, int xC, int d) {\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n return initializationValue;\\n }\\n count += 1.0;\\n return getX(batch, xR, xC, d);\\n }\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d = coords[3];\\n\\n ivec2 xRCCorner = coords.yz * strides - pads;\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // max/min x(?, ?, d) to get y(yR, yC, d).\\n // ? = to be determined\\n vec4 minMaxValue = vec4(\"+d+\");\\n float avgValue = 0.0;\\n count = 0.0;\\n\\n for (int wR = 0; wR < \"+u+\";\\n wR += \"+i+\") {\\n int xR = xRCorner + wR;\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+v+\"; wC += 4) {\\n int xC = xCCorner + wC * \"+s+\";\\n\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n getValue(batch, xR, xC + 2 * \"+s+\", d),\\n getValue(batch, xR, xC + 3 * \"+s+\", d)\\n );\\n\\n \"+g+\"\\n }\\n\\n int xC = xCCorner + \"+v+\";\\n if (\"+(1===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+g+\"\\n } else if (\"+(2===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+g+\"\\n } else if (\"+(3===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n getValue(batch, xR, xC + 2 * \"+s+\", d),\\n initializationValue\\n );\\n\\n \"+g+\"\\n }\\n }\\n setOutput(\"+p+\");\\n }\\n \"}},Qi=function(t,e,n){if(this.variableNames=[\"x\"],\"avg\"===e&&n)throw new Error(\"Cannot compute positions for average pool.\");var r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=t.padInfo.front,p=t.padInfo.top,v=t.padInfo.left;this.outputShape=t.outShape;var m=\"avg\"===e,g=\"0.0\";if(m||(g=\"-1.0 / 1e-20\"),n)this.userCode=\"\\n const ivec3 strides =\\n ivec3(\"+o+\", \"+a+\", \"+i+\");\\n const ivec3 pads = ivec3(\"+d+\", \"+p+\", \"+v+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int ch = coords.u;\\n\\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\\n int xDCorner = xCorner.x;\\n int xRCorner = xCorner.y;\\n int xCCorner = xCorner.z;\\n\\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\\n // ? = to be determined\\n float minMaxValue = 0.0;\\n float minMaxValueFound = 0.0;\\n int minMaxPosition = 0;\\n\\n for (int wD = 0; wD < \"+l+\";\\n wD += \"+s+\") {\\n int xD = xDCorner + wD;\\n\\n if (xD < 0 || xD >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int wR = 0; wR < \"+h+\";\\n wR += \"+u+\") {\\n int xR = xRCorner + wR;\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+f+\";\\n wC += \"+c+\") {\\n int xC = xCCorner + wC;\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float value = getX(batch, xD, xR, xC, ch);\\n\\n // If a min / max value has already been found, use it. If not,\\n // use the current value.\\n float currMinMaxValue = mix(\\n value, minMaxValue, minMaxValueFound);\\n if (value >= currMinMaxValue) {\\n minMaxValue = value;\\n minMaxValueFound = 1.0;\\n minMaxPosition =\\n wD * \"+h+\" * \"+f+\" +\\n wR * \"+f+\" + wC;;\\n }\\n }\\n }\\n }\\n setOutput(float(minMaxPosition));\\n }\\n \";else{var y=e+\"(\"+e+\"(\"+e+\"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])\";\"avg\"===e&&(y=\"avgValue / count\");var x=4*Math.floor(r/4),b=r%4,w=\"\\n if (\"+m+\") {\\n avgValue += dot(values, ones);\\n } else {\\n minMaxValue = max(values, minMaxValue);\\n }\\n \";this.userCode=\"\\n const ivec3 strides =\\n ivec3(\"+o+\", \"+a+\", \"+i+\");\\n const ivec3 pads = ivec3(\"+d+\", \"+p+\", \"+v+\");\\n const float initializationValue = \"+g+\";\\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n float count = 0.0;\\n\\n float getValue(int batch, int xD, int xR, int xC, int ch) {\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n return initializationValue;\\n }\\n count += 1.0;\\n return getX(batch, xD, xR, xC, ch);\\n }\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int ch = coords.u;\\n\\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\\n int xDCorner = xCorner.x;\\n int xRCorner = xCorner.y;\\n int xCCorner = xCorner.z;\\n\\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\\n // ? = to be determined\\n vec4 minMaxValue = vec4(\"+g+\");\\n float avgValue = 0.0;\\n count = 0.0;\\n\\n for (int wD = 0; wD < \"+l+\";\\n wD += \"+s+\") {\\n int xD = xDCorner + wD;\\n\\n if (xD < 0 || xD >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int wR = 0; wR < \"+h+\";\\n wR += \"+u+\") {\\n int xR = xRCorner + wR;\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+x+\"; wC += 4) {\\n int xC = xCCorner + wC * \"+c+\";\\n\\n vec4 values = vec4(\\n getValue(batch, xD, xR, xC, ch),\\n getValue(batch, xD, xR, xC + \"+c+\", ch),\\n getValue(batch, xD, xR, xC + 2 * \"+c+\", ch),\\n getValue(batch, xD, xR, xC + 3 * \"+c+\", ch)\\n );\\n\\n \"+w+\"\\n }\\n\\n int xC = xCCorner + \"+x+\";\\n if (\"+(1===b)+\") {\\n vec4 values = vec4(\\n getValue(batch, xD, xR, xC, ch),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+w+\"\\n } else if (\"+(2===b)+\") {\\n vec4 values = vec4(\\n getValue(batch, xD, xR, xC, ch),\\n getValue(batch, xD, xR, xC + \"+c+\", ch),\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+w+\"\\n } else if (\"+(3===b)+\") {\\n vec4 values = vec4(\\n getValue(batch, xD, xR, xC, ch),\\n getValue(batch, xD, xR, xC + \"+c+\", ch),\\n getValue(batch, xD, xR, xC + 2 * \"+c+\", ch),\\n initializationValue\\n );\\n\\n \"+w+\"\\n }\\n }\\n setOutput(\"+y+\");\\n }\\n }\\n \"}},Ji=function(t,e){this.variableNames=[\"x\"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=Math.ceil(o/n);this.outputShape=[r,a];var i=\"0.0\",s=\"\";\"prod\"===e?i=\"1.0\":\"min\"===e?(i=\"1.0 / 1e-20\",s=\"min\"):\"max\"===e&&(i=\"-1.0 / 1e-20\",s=\"max\");var u=e+\"(\"+e+\"(\"+e+\"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])\";\"sum\"===e?u=\"sumValue\":\"prod\"===e?u=\"prodValue\":\"all\"===e?u=\"allValue\":\"any\"===e&&(u=\"anyValue\");var c=4*Math.floor(n/4),l=n%4,h=\"\\n if (\"+(\"sum\"===e)+\") {\\n sumValue += dot(values, ones);\\n } else if (\"+(\"prod\"===e)+\") {\\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\\n prodValue *= tmp[0] * tmp[1];\\n } else {\\n minMaxValue = \"+s+\"(values, minMaxValue);\\n }\\n \",f=\"vec4\";\"all\"===e?(i=\"1.0\",h=\"\\n bool reducedAllValue = all(values);\\n float floatedReducedAllValue = float(reducedAllValue);\\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\\n \",f=\"bvec4\"):\"any\"===e&&(i=\"0.0\",h=\"\\n bool reducedAnyValue = any(values);\\n float floatedReducedAnyValue = float(reducedAnyValue);\\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\\n \",f=\"bvec4\");var d=\"\";o%n>0&&(d=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return initializationValue;\\n }\\n \"),this.userCode=\"\\n const float initializationValue = \"+i+\";\\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n float getValue(int batch, int inIdx) {\\n \"+d+\"\\n return getX(batch, inIdx);\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = outIdx * \"+n+\";\\n\\n vec4 minMaxValue = vec4(\"+i+\");\\n float prodValue = 1.0;\\n float sumValue = 0.0;\\n float allValue = 1.0;\\n float anyValue = 0.0;\\n\\n for (int i = 0; i < \"+c+\"; i += 4) {\\n int inIdx = inOffset + i;\\n \"+f+\" values = \"+f+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n getValue(batch, inIdx + 3)\\n );\\n\\n \"+h+\"\\n }\\n\\n int inIdx = inOffset + \"+c+\";\\n if (\"+(1===l)+\") {\\n \"+f+\" values = \"+f+\"(\\n getValue(batch, inIdx),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+h+\"\\n } else if (\"+(2===l)+\") {\\n \"+f+\" values = \"+f+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+h+\"\\n } else if (\"+(3===l)+\") {\\n \"+f+\" values = \"+f+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n initializationValue\\n );\\n\\n \"+h+\"\\n }\\n setOutput(\"+u+\");\\n }\\n \"},Zi=function(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var n=\"\",r=0;r<4;r++){var o=\"thisRC = rc;\";r%2==1&&(o+=\"thisRC.z += 1;\"),r>1&&(o+=\"thisRC.y += 1;\"),n+=\"\\n \"+o+\"\\n \"+(r>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\")+\"\\n int flatIndex = getFlatIndex(thisRC);\\n\\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\\n\\n result[\"+r+\"] =\\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\\n \"+(r>0?\"}\":\"\")+\"\\n \"}this.userCode=\"\\n \\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\\n \"+ca([\"r\",\"c\",\"d\"],e)+\"\\n return ivec3(r, c, d);\\n }\\n \\n \"+la(t)+\"\\n\\n void main() {\\n ivec3 rc = getOutputCoords();\\n\\n vec4 result = vec4(0.);\\n\\n ivec3 thisRC;\\n int rows = \"+t[1]+\";\\n int cols = \"+t[2]+\";\\n\\n \"+n+\"\\n\\n setOutput(result);\\n }\\n \"};var ts=function(t,e,n){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=c[0]/l[0],f=c[1]/l[1],d=1/h,p=1/f,v=2*Math.ceil(d)+2,m=2*Math.ceil(p)+2;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float accumulator = 0.0;\\n\\n const float heightScale = float(\"+h+\");\\n const float widthScale = float(\"+f+\");\\n\\n const float invHeightScale = float(\"+d+\");\\n const float invWidthScale = float(\"+p+\");\\n\\n const int winHeight = int(\"+v+\");\\n const int winWidth = int(\"+m+\");\\n\\n // Compute bounds for where in dy we will look\\n float startRLerp = floor(float(r) * invHeightScale);\\n int startDyR = int(startRLerp - float(winHeight / 2));\\n\\n float startCLerp = floor(float(c) * invWidthScale);\\n int startDyC = int(startCLerp - float(winWidth / 2));\\n\\n // Loop over dy\\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\\n int dyR = dyROffset + startDyR;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyR < 0 || dyR >= \"+s+\") {\\n continue;\\n }\\n\\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\\n int dyC = dyCOffset + startDyC;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyC < 0 || dyC >= \"+u+\") {\\n continue;\\n }\\n\\n float dxR = float(dyR) * heightScale;\\n int topDxRIndex = int(floor(dxR));\\n int bottomDxRIndex = int(min(ceil(dxR), \"+(o-1)+\".0));\\n float dxRLerp = dxR - float(topDxRIndex);\\n float inverseDxRLerp = 1.0 - dxRLerp;\\n\\n float dxC = float(dyC) * widthScale;\\n int leftDxCIndex = int(floor(dxC));\\n int rightDxCIndex = int(min(ceil(dxC), \"+(a-1)+\".0));\\n float dxCLerp = dxC - float(leftDxCIndex);\\n float inverseDxCLerp = 1.0 - dxCLerp;\\n\\n if (r == topDxRIndex && c == leftDxCIndex) {\\n // topLeft\\n accumulator +=\\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\\n }\\n\\n if (r == topDxRIndex && c == rightDxCIndex) {\\n // topRight\\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\\n }\\n\\n if (r == bottomDxRIndex && c == leftDxCIndex) {\\n // bottomLeft\\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\\n }\\n\\n if (r == bottomDxRIndex && c == rightDxCIndex) {\\n // bottomRight\\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\\n }\\n }\\n }\\n // End loop over dy\\n\\n setOutput(accumulator);\\n }\\n \"},es=function(t,e,n,r){this.variableNames=[\"A\"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode=\"\\n const vec2 effectiveInputOverOutputRatioRC = vec2(\\n \"+u[0]/c[0]+\",\\n \"+u[1]/c[1]+\");\\n const vec2 inputShapeRC = vec2(\"+a+\".0, \"+i+\".0);\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n ivec2 yRC = coords.yz;\\n\\n // Fractional source index.\\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the four integer indices.\\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\\n ivec2 sourceCeilRC = ivec2(\\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\\n\\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\\n\\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\\n\\n float top = topLeft + (topRight - topLeft) * fracRC.y;\\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\\n float newValue = top + (bottom - top) * fracRC.x;\\n\\n setOutput(newValue);\\n }\\n \"},ns=function(t,e,n,r){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode=\"\\n const vec3 effectiveInputOverOutputRatioRC = vec3(\\n \"+u[0]/c[0]+\",\\n \"+u[1]/c[1]+\",\\n \"+u[1]/c[1]+\");\\n const vec3 inputShapeRC = vec3(\"+a+\".0, \"+i+\".0,\\n \"+i+\".0);\\n\\n float getAValue(int b, int r, int c, int d) {\\n return getChannel(getA(b, r, c, d), vec2(c, d));\\n }\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n // Calculate values for next column in yRC.z.\\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\\n\\n // Fractional source index.\\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the four integer indices.\\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\\n ivec3 sourceCeilRC = ivec3(\\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\\n\\n // Should we calculate next column and row elements in 2x2 packed cell.\\n bool hasNextCol = d < \"+(s-1)+\";\\n bool hasNextRow = coords.z < \"+(n-1)+\";\\n\\n // In parallel, construct four corners for all four components in\\n // packed 2x2 cell.\\n vec4 topLeft = vec4(\\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\\n\\n vec4 bottomLeft = vec4(\\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\\n\\n vec4 topRight = vec4(\\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\\n\\n vec4 bottomRight = vec4(\\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\\n\\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\\n\\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\\n vec4 newValue = mix(top, bottom, fracRC.x);\\n\\n setOutput(newValue);\\n }\\n \"},rs=function(t,e,n){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=c[0]/l[0],f=c[1]/l[1],d=1/h,p=1/f,v=2*Math.ceil(d)+2,m=2*Math.ceil(p)+2;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float accumulator = 0.0;\\n\\n const float heightScale = float(\"+h+\");\\n const float widthScale = float(\"+f+\");\\n\\n const float invHeightScale = float(\"+d+\");\\n const float invWidthScale = float(\"+p+\");\\n\\n const int winHeight = int(\"+v+\");\\n const int winWidth = int(\"+m+\");\\n\\n // Compute bounds for where in dy we will look\\n float startRLerp = floor(float(r) * invHeightScale);\\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\\n\\n float startCLerp = floor(float(c) * invWidthScale);\\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\\n\\n // Loop over dy\\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\\n int dyR = dyROffset + startDyR;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyR < 0 || dyR >= \"+s+\") {\\n continue;\\n }\\n\\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\\n int dyC = dyCOffset + startDyC;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyC < 0 || dyC >= \"+u+\") {\\n continue;\\n }\\n\\n float sourceFracRow =\\n float(\"+c[0]+\") *\\n (float(dyR) / float(\"+l[0]+\"));\\n\\n float sourceFracCol =\\n float(\"+c[1]+\") *\\n (float(dyC) / float(\"+l[1]+\"));\\n\\n int sourceNearestRow = int(min(\\n float(int(\"+o+\") - 1),\\n \"+n+\" ? float(round(sourceFracRow)) :\\n float(floor(sourceFracRow))));\\n\\n int sourceNearestCol = int(min(\\n float(int(\"+a+\") - 1),\\n \"+n+\" ? float(round(sourceFracCol)) :\\n float(floor(sourceFracCol))));\\n\\n if (r == sourceNearestRow && c == sourceNearestCol) {\\n accumulator += getDy(b, dyR, dyC, d);\\n }\\n }\\n }\\n // End loop over dy\\n\\n setOutput(accumulator);\\n }\\n \"},os=function(t,e,n,r){this.variableNames=[\"A\"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n],l=r?\"0.5\":\"0.0\";this.userCode=\"\\n const vec2 effectiveInputOverOutputRatioRC = vec2(\\n \"+u[0]/c[0]+\",\\n \"+u[1]/c[1]+\");\\n const vec2 inputShapeRC = vec2(\"+a+\".0, \"+i+\".0);\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n ivec2 yRC = coords.yz;\\n\\n // Fractional source index.\\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the coordinators of nearest neighbor point.\\n ivec2 sourceNearestRC = ivec2(\\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + \"+l+\")));\\n\\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\\n\\n setOutput(newValue);\\n }\\n \"},as=function(t,e){this.variableNames=[\"x\"];var n=t.length;if(n>4)throw new Error(\"WebGL backend: Reverse of rank-\"+n+\" tensor is not yet supported\");if(this.outputShape=t,1!==n){var r=t.map((function(n,r){return function(n){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+\" - coords[\"+n+\"] - 1\":\"coords[\"+n+\"]\"}(r)})).join(\",\"),o=wa(n);this.userCode=\"\\n void main() {\\n \"+o+\" coords = getOutputCoords();\\n setOutput(getX(\"+r+\"));\\n }\\n \"}else this.userCode=\"\\n void main() {\\n int coord = getOutputCoords();\\n setOutput(getX(\"+t[0]+\" - coord - 1));\\n }\\n \"},is=function(t,e){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;var n=t.length;if(n>4)throw new Error(\"WebGL backend: Reverse of rank-\"+n+\" tensor is not yet supported\");this.outputShape=t;var r=sa(\"rc\",n),o=r[n-1]+\" + 1 < \"+this.outputShape[n-1],a=r[n-2]+\" + 1 < \"+this.outputShape[n-2],i=wa(n);function s(n){var r=t.map((function(r,o){return function(n,r){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+\" - \"+r[n]+\" - 1\":\"\"+r[n]}(o,n)}));return\"getChannel(getX(\"+r.join(\",\")+\"), vec2(\"+r.slice(-2).join(\",\")+\"))\"}this.userCode=1===n?\"\\n void main(){\\n int rc = getOutputCoords();\\n vec4 result = vec4(0.);\\n result.r = getChannel(getX(\"+t[0]+\" - rc - 1),\\n \"+t[0]+\" - rc - 1);\\n if(\"+o+\"){\\n result.g = getChannel(getX(\"+t[0]+\" - (rc + 1) - 1),\\n \"+t[0]+\" - (rc + 1) - 1);\\n }\\n setOutput(result);\\n }\\n \":\"\\n void main() {\\n \"+i+\" rc = getOutputCoords();\\n vec4 result = vec4(0.);\\n result.r = \"+function(t){return s(t)}(r.slice())+\";\\n if(\"+o+\"){\\n result.g = \"+function(t){return t[n-1]=\"(\"+t[n-1]+\" + 1)\",s(t)}(r.slice())+\";\\n }\\n if(\"+a+\") {\\n result.b = \"+function(t){return t[n-2]=\"(\"+t[n-2]+\" + 1)\",s(t)}(r.slice())+\";\\n if(\"+o+\") {\\n result.a = \"+function(t){return t[n-1]=\"(\"+t[n-1]+\" + 1)\",t[n-2]=\"(\"+t[n-2]+\" + 1)\",s(t)}(r.slice())+\";\\n }\\n }\\n setOutput(result);\\n }\\n \"},ss=function(t,e,n,r,o,a,i){void 0===i&&(i=!0),this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;var s=wa(o.length),u=wa(a.length),c=\"\";1===n?c=\"i\":2===n&&(c=\"i, j\");var l=\"getIndices(\"+c+\")\",h=\"\";1===r?h=\"i\":2===r&&(h=\"i, coords[1]\");var f=\"getUpdates(\"+h+\")\",d=e>1?\"strides[j]\":\"strides\";this.userCode=\"\\n \"+s+\" strides = \"+s+\"(\"+o+\");\\n\\n void main() {\\n \"+u+\" coords = getOutputCoords();\\n float sum = 0.0;\\n bool found = false;\\n for (int i = 0; i < \"+t+\"; i++) {\\n int flattenedIndex = 0;\\n for (int j = 0; j < \"+e+\"; j++) {\\n int index = round(\"+l+\");\\n flattenedIndex += index * \"+d+\";\\n }\\n if (flattenedIndex == coords[0]) {\\n sum += \"+f+\";\\n found = true;\\n }\\n }\\n setOutput(mix(getDefaultValue(), sum, float(found)));\\n }\\n \"},us=function(t,e){this.variableNames=[\"x\",\"segmentIds\"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=t.numSegments,i=a*Math.ceil(o/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,c=\"\\n sumValue += dot(values, segFilter);\\n \",l=\"\";o%n>0&&(l=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return initializationValue;\\n }\\n \");var h=\"\";o%n>0&&(h=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return -1.0;\\n }\\n \"),this.userCode=\"\\n const float initializationValue = 0.0;\\n\\n float getValue(int batch, int inIdx) {\\n \"+l+\"\\n return getX(batch, inIdx);\\n }\\n\\n float getSegmentIdAtIndex(int inIdx) {\\n \"+h+\"\\n return getSegmentIds(inIdx);\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = int(floor(float(outIdx) / float(\\n \"+a+\")) * float(\"+n+\"));\\n int currentSeg = int(mod(float(outIdx), float(\"+a+\")));\\n\\n float sumValue = 0.0;\\n\\n for (int i = 0; i < \"+s+\"; i += 4) {\\n int inIdx = inOffset + i;\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n getValue(batch, inIdx + 3)\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\\n );\\n\\n \"+c+\"\\n }\\n\\n int inIdx = inOffset + \"+s+\";\\n if (\"+(1===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n 0,\\n 0,\\n 0\\n );\\n\\n \"+c+\"\\n } else if (\"+(2===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n initializationValue,\\n initializationValue\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n 0,\\n 0\\n );\\n\\n \"+c+\"\\n } else if (\"+(3===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n initializationValue\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\\n 0\\n );\\n\\n \"+c+\"\\n }\\n setOutput(sumValue);\\n }\\n \"},cs=function(t,e,n){var r,o;if(this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=e,n>4)throw Error(\"Where for rank \"+n+\" is not yet supported\");if(1===n)o=\"resRC\",r=\"resRC\";else{for(var a=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],i=[],s=[],u=0;u= 1.0) {\\n setOutput(getA(\"+o+\"));\\n } else {\\n setOutput(getB(\"+o+\"));\\n }\\n }\\n \"},ls=function(){function t(t){this.variableNames=[\"source\"],this.outputShape=t,this.rank=t.length;var e,n=wa(this.rank),r=\"uniform int start[\"+this.rank+\"];\",o=function(t){if(1===t)return\"sourceLoc\";if(t<=6)return hs.slice(0,t).map((function(t){return\"sourceLoc.\"+t})).join(\",\");throw Error(\"Slicing for rank \"+t+\" is not yet supported\")}(this.rank);e=\"\\n \"+n+\" sourceLoc;\\n \"+n+\" coords = getOutputCoords();\\n \"+t.map((function(t,e){return\"sourceLoc.\"+hs[e]+\" = start[\"+e+\"] + coords.\"+hs[e]+\";\"})).join(\"\\n\")+\"\\n \",this.userCode=\"\\n \"+r+\"\\n void main() {\\n \"+e+\"\\n setOutput(getSource(\"+o+\"));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error(\"The rank (\"+this.rank+\") of the program must match the length of start (\"+t.length+\")\");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,\"start\"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),hs=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];var fs=function(){function t(t){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=wa(this.rank),n=sa(\"coords\",this.rank),r=sa(\"sourceLoc\",this.rank),o=1===this.rank?\"sourceLoc\":\"vec2(\"+r.slice(-2).join()+\")\",a=\"getChannel(getSource(\"+r.join()+\"), \"+o+\")\",i=\"\\n result.x = \"+a+\";\\n if (++\"+n[this.rank-1]+\" < \"+t[this.rank-1]+\") {\\n ++\"+r[this.rank-1]+\";\\n result.y = \"+a+\";\\n --\"+r[this.rank-1]+\";\\n }\\n \",s=1===this.rank?\"\":\"\\n --\"+n[this.rank-1]+\";\\n if (++\"+n[this.rank-2]+\" < \"+t[this.rank-2]+\") {\\n ++\"+r[this.rank-2]+\";\\n result.z = \"+a+\";\\n if (++\"+n[this.rank-1]+\" < \"+t[this.rank-1]+\") {\\n ++\"+r[this.rank-1]+\";\\n result.w = \"+a+\";\\n }\\n }\\n \",u=this.rank<=4?\"sourceLoc = coords +\\n \"+e+\"(\"+t.map((function(t,e){return\"start[\"+e+\"]\"})).join()+\");\":t.map((function(t,e){return r[e]+\" = \"+n[e]+\" + start[\"+e+\"];\"})).join(\"\\n\");this.userCode=\"\\n uniform int start[\"+this.rank+\"];\\n void main() {\\n \"+e+\" coords = getOutputCoords();\\n \"+e+\" sourceLoc;\\n \"+u+\"\\n vec4 result = vec4(0.);\\n \"+i+\"\\n \"+s+\"\\n setOutput(result);\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error(\"The rank (\"+this.rank+\") of the program must match the length of start (\"+t.length+\")\");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,\"start\"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),ds=function(t,e,n){this.variableNames=[\"x\"],this.outputShape=n;var r=n.length,o=wa(n.length),a=wa(n.length),i=\"\";if(1===r)i=\"coords * strides + begin\";else{var s=0;i=n.map((function(t,e){return s++,1===n.length?\"coords * strides[\"+e+\"] + begin[\"+e+\"]\":\"coords[\"+(s-1)+\"] * strides[\"+e+\"] + begin[\"+e+\"]\"})).join(\",\")}this.userCode=\"\\n \"+o+\" begin = \"+o+\"(\"+t+\");\\n \"+o+\" strides = \"+o+\"(\"+e+\");\\n\\n void main() {\\n \"+a+\" coords = getOutputCoords();\\n setOutput(getX(\"+i+\"));\\n }\\n \"},ps=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return t.prototype.acquireTexture=function(t,e,n){var r,o=vs(e,n),a=ms(t,o,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[a].shift();return this.usedTextures[a].push(i),i}return this.numUsedTextures++,this.log(),o===Gt.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Gt.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Gt.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Gt.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Gt.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var o=ms(e,vs(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(t),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[o],i=a.indexOf(t);if(i<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");a.splice(i,1),this.log()}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",this.numFreeTextures+\" / \"+this.numUsedTextures,\"(\"+t+\")\")}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e)}));for(var e in this.usedTextures)this.usedTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e)}));this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},t}();function vs(t,e){if(t===zt.UPLOAD)return Gt.PACKED_2X2_FLOAT32;if(t===zt.RENDER||null==t)return function(t){return i().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?t?Gt.PACKED_2X2_FLOAT32:Gt.UNPACKED_FLOAT32:t?Gt.PACKED_2X2_FLOAT16:Gt.UNPACKED_FLOAT16}(e);if(t===zt.DOWNLOAD||t===zt.PIXELS)return Gt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(\"Unknown logical texture type \"+t)}function ms(t,e,n){return t[0]+\"_\"+t[1]+\"_\"+e+\"_\"+n}var gs=function(t,e){this.variableNames=[\"A\"];for(var n=new Array(t.length),r=0;r5)throw Error(\"Tile for rank \"+e+\" is not yet supported\");if(1===e)return\"imod(resRC, \"+t[0]+\")\";for(var n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],r=[],o=0;o6)throw Error(\"Transpose for rank \"+e+\" is not yet supported\");for(var n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],r=new Array(e),o=0;o6)throw Error(\"Packed transpose for rank \"+this.rank+\" is not yet supported.\");var o=wa(this.rank),a=ia(\"rc\",this.rank),i=new Array(this.rank);for(r=0;r= 0.0) ? x : (exp(x) - 1.0);\",Ds=\"\\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\\n // see: https://arxiv.org/abs/1706.02515\\n float scaleAlpha = \"+bs+\";\\n float scale = \"+ws+\";\\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\\n\";var Ts=\"return -x;\",Ns=\"return ceil(x);\",Fs=\"return floor(x);\",_s=\"return exp(x);\",Os=\"return exp(x) - 1.0;\",Ms=Es+\"\\n return sin(x);\\n\",Bs=Es+\"\\n return cos(x);\\n\",Ps=Es+\"\\n if (abs(x) > 1.) {\\n return NAN;\\n }\\n return asin(x);\\n\",Ls=Es+\"\\n if (abs(x) > 1.) {\\n return NAN;\\n }\\n return acos(x);\\n\",Ws=Es+\"\\n return atan(x);\\n\",Us=Es+\"return log(x + sqrt(x * x + 1.0));\",Vs=Es+\"\\n if (x < 1.0) return NAN;\\n return log(x + sqrt(x * x - 1.0));\",zs=Es+\"\\n if ((x < -1.0) || (x > 1.0)) return NAN;\\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;\",Gs=\"return x;\",Hs=\"return x;\",qs=\"\\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\\n bvec4 isNaN = isnan(x);\\n\\n result.r = isNaN.r ? x.r : result.r;\\n result.g = isNaN.g ? x.g : result.g;\\n result.b = isNaN.b ? x.b : result.b;\\n result.a = isNaN.a ? x.a : result.a;\\n\\n return result;\\n\",Ks=\"\\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\\n bvec4 isNaN = isnan(x);\\n\\n result.r = isNaN.r ? x.r : result.r;\\n result.g = isNaN.g ? x.g : result.g;\\n result.b = isNaN.b ? x.b : result.b;\\n result.a = isNaN.a ? x.a : result.a;\\n\\n return result;\\n\",js=\"\\n vec4 result;\\n\\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\\n\\n return result;\\n\",Xs=function(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode=\"\\n vec4 unaryOperation(vec4 x) {\\n \"+e+\"\\n }\\n\\n void main() {\\n vec4 x = getAAtOutCoords();\\n vec4 y = unaryOperation(x);\\n\\n setOutput(y);\\n }\\n \"},Ys=function(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t;var e=t.length,n=sa(\"rc\",e),r=wa(e),o=function(t,e){if(1===t)return\"rc\";for(var n=\"\",r=0;r0?[4,Promise.all(a)]:[3,2];case 1:return c=r.sent(),u.kernelMs=w(c),u.getExtraProfileInfo=function(){return c.map((function(t,e){return{name:s[e],ms:t}})).map((function(t){return t.name+\": \"+t.ms})).join(\", \")},[3,3];case 2:u.kernelMs={error:\"WebGL query timers are not supported in this environment.\"},r.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,u]}}))}))},o.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},o.prototype.startTimer=function(){return i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:et(),endMs:null}},o.prototype.endTimer=function(t){return i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),t):(t.endMs=et(),t)},o.prototype.getQueryTime=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){return i().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]}))}))},o.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t)){if(this.pendingRead.has(t))return this.pendingDisposal.add(t),void this.pendingDeletes++;if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t)}}},o.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,o=e.texShape,a=e.usage,i=e.isPacked,s=e.slice,u=s&&s.origDataId||t,c=this.dataRefCount.get(u);c>1?this.dataRefCount.set(u,c-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(o,r),this.textureManager.releaseTexture(n,o,a,i)));var l=this.texData.get(t);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null},o.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},o.prototype.getDataInfo=function(t){return this.texData.get(t)},o.prototype.getCPUBackend=function(){return i().getBool(\"WEBGL_CPU_FORWARD\")?(null==this.cpuBackend&&(this.cpuBackend=Lt.findBackend(\"cpu\")),this.cpuBackend):null},o.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every((function(t){return null==n.texData.get(t.dataId).texture&&t.sizei().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){var o=Math.floor(t.length/2),a=this.concat(t.slice(0,o),e),s=this.concat(t.slice(o),e);return this.concat([a,s],e)}if(i().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&t[0].rank>1){var u=new Ga(t.map((function(t){return t.shape})),e);return this.compileAndRun(u,t)}var c=Sn(t.map((function(t){return t.shape})),e),l=t.map((function(t){return t.as2D(-1,k(t.shape.slice(e)))})),h=new za(l.map((function(t){return t.shape})));return this.compileAndRun(h,l).reshape(c)},o.prototype.neg=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.neg(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,Ts,t.dtype);var e=new Cs(t.shape,Ts);return this.compileAndRun(e,[t])},o.prototype.batchMatMul=function(t,e,n,r){var o=n?t.shape[2]:t.shape[1],a=r?e.shape[1]:e.shape[2],i=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===o||1===a)&&i>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===a?t:t.as3D(s,i,1),c=1===a?2:1,l=1===a?e.as3D(s,1,i):e;return this.multiply(u,l).sum(c,!0)}var h=Dt(t.dtype,e.dtype),f=new Hi(t.shape,[s,o,a],n,r);return this.compileAndRun(f,[t,e],h)},o.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,o=t.transposeB,a=t.bias,i=t.activation,s=t.preluActivationWeights,u=r?e.shape[2]:e.shape[1],c=o?n.shape[1]:n.shape[2],l=e.shape[0],h=Dt(e.dtype,n.dtype),f=null!=a,d=null!=s,p=i?Qs(i,!0):null,v=new Hi(e.shape,[l,u,c],r,o,f,p,d),m=[e,n];return a&&m.push(a),s&&m.push(s),this.compileAndRun(v,m,h)},o.prototype.multiply=function(t,e){if(\"complex64\"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),o=new Na(Da,t.shape,e.shape),a=new Na(Ta,t.shape,e.shape),s=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag),this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)],u=this.compileAndRun(o,s),c=this.compileAndRun(a,s),l=this.complex(u,c);return u.dispose(),c.dispose(),l}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,Oa,t.dtype);var h=new Ba(Oa,t.shape,e.shape);return this.compileAndRun(h,[t,e],t.dtype)},o.prototype.batchNormalization=function(t,e,n,r,o,a){var s=[t,e,n],u=null;null!=a&&(u=a.shape,s.push(a));var c=null;if(null!=o&&(c=o.shape,s.push(o)),i().getBool(\"WEBGL_PACK_NORMALIZATION\")){var l=new Aa(t.shape,e.shape,n.shape,u,c,r);return this.compileAndRun(l,s)}var h=new Sa(t.shape,e.shape,n.shape,u,c,r);return this.compileAndRun(h,s)},o.prototype.localResponseNormalization4D=function(t,e,n,r,o){var a=i().getBool(\"WEBGL_PACK_NORMALIZATION\")?new Vi(t.shape,e,n,r,o):new Wi(t.shape,e,n,r,o);return this.compileAndRun(a,[t])},o.prototype.LRNGrad=function(t,e,n,r,o,a,i){var s=new Ui(e.shape,r,o,a,i);return this.compileAndRun(s,[e,n,t])},o.prototype.tile=function(t,e){if(\"string\"===t.dtype){var n=this.readSync(t.dataId).map((function(t){return ot(t)}));return ta(dr(t.shape,t.dtype,n),e)}var r=new gs(t.shape,e);return this.compileAndRun(r,[t])},o.prototype.pad=function(t,e,n){var r=i().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Yi(t.shape,e,n):new Xi(t.shape,e,n);return this.compileAndRun(r,[t])},o.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=i().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new xs(t.shape,e):new ys(t.shape,e);return this.compileAndRun(n,[t])},o.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new mi(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},o.prototype.batchToSpaceND=function(t,e,n){C(t.rank<=4,(function(){return\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\"}));var r=e.reduce((function(t,e){return t*e})),o=zr(t.shape,e,r),a=Gr(o.length,e.length),i=Hr(t.shape,e,r),s=qr(n,e.length),u=Kr(i,n,e.length);return t.reshape(o).transpose(a).reshape(i).slice(s,u)},o.prototype.spaceToBatchND=function(t,e,n){C(t.rank<=4,(function(){return\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\"}));var r=e.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,n);for(var a=1+e.length;ae||n===t?r=!0:n=Y(t,n+1);return n}(i,o),u=new us({windowSize:s,inSize:i,batchSize:a,numSegments:o},e),c=this.compileAndRun(u,[t,n],r);return c.shape[1]===o?c:(n=Kn(0,o).tile([i/s]),this.segOpCompute(c,e,n,r,o))},o.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(Cn(\"arg\"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!i().getBool(\"WEBGL_PACK_REDUCE\")||t.rank<=2){var o=bn(t.shape,r),a=o[0],s=k(o[1]),u=t.as2D(-1,s);return this.argReduce(u,n).reshape(a)}return this.argReducePacked(t,n)},o.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,\"min\")},o.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,\"max\")},o.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error(\"WebGL cumsum shader expects an inner-most axis=\"+(t.rank-1)+\" but got axis=\"+e);var o=new ni(t.shape,n,r);return this.compileAndRun(o,[t])},o.prototype.equal=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(equal(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a == b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.notEqual=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(notEqual(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a != b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(lessThan(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a < b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.lessEqual=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(lessThanEqual(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a <= b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(greaterThan(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a > b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.greaterEqual=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(greaterThanEqual(a, b));\\n\",\"bool\");var n=new Ba(\"return float(a >= b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.logicalNot=function(t){var e=new Cs(t.shape,\"return float(!(x >= 1.0));\");return this.compileAndRun(e,[t])},o.prototype.logicalAnd=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(\\n vec4(greaterThanEqual(a, vec4(1.0))) *\\n vec4(greaterThanEqual(b, vec4(1.0))));\\n\",\"bool\");var n=new Ba(\"return float(a >= 1.0 && b >= 1.0);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.logicalOr=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return min(\\n vec4(greaterThanEqual(a, vec4(1.0))) +\\n vec4(greaterThanEqual(b, vec4(1.0))),\\n vec4(1.0));\\n\",\"bool\");var n=new Ba(\"return float(a >= 1.0 || b >= 1.0);\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"bool\")},o.prototype.select=function(t,e,n){var r=new cs(t.rank,e.shape,e.rank);return this.compileAndRun(r,[t,e,n],Dt(e.dtype,n.dtype))},o.prototype.where=function(t){dn(\"tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead\");var e=t.dataSync();return na(t.shape,e)},o.prototype.topk=function(t,e,n){return ea(t.dataSync(),t.shape,t.dtype,e)},o.prototype.min=function(t,e){Cn(\"min\",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"min\",a.dtype).reshape(r)},o.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n vec4 result = vec4(min(a, b));\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Ba(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return min(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.mod=function(t,e){var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n vec4 result = mod(a, b);\\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Ba(\"if (b == 0.0) return NAN;\\n return mod(a, b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);Cn(\"max\",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"max\",a.dtype).reshape(r)},o.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n vec4 result = vec4(max(a, b));\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Ba(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return max(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.all=function(t,e){Cn(\"all\",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"all\",a.dtype).reshape(r)},o.prototype.any=function(t,e){Cn(\"any\",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"any\",a.dtype).reshape(r)},o.prototype.realDivide=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")){return this.packedBinaryOp(t,e,\"\\n // vec4 one = vec4(equal(a, b));\\n // return one + (vec4(1.0) - one) * a / b;\\n vec4 result = a / b;\\n if(a.x == b.x) {\\n result.x = 1.;\\n }\\n if(a.y == b.y) {\\n result.y = 1.;\\n }\\n if(a.z == b.z) {\\n result.z = 1.;\\n }\\n if(a.w == b.w) {\\n result.w = 1.;\\n }\\n\\n return result;\\n\",\"float32\",!0)}var n=new Ba(\"\\nif (a == b) {\\n return 1.0;\\n};\\nreturn a / b;\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"float32\")},o.prototype.floorDiv=function(t,e){if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n ivec4 ia = round(a);\\n ivec4 ib = round(b);\\n bvec4 cond = notEqual(ib, ivec4(0));\\n ivec4 result = ivec4(0);\\n vec4 s = sign(a) * sign(b);\\n\\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\\n if (cond[0]) {\\n result[0] = idiv(ia[0], ib[0], s[0]);\\n }\\n if (cond[1]) {\\n result[1] = idiv(ia[1], ib[1], s[1]);\\n }\\n if (cond[2]) {\\n result[2] = idiv(ia[2], ib[2], s[2]);\\n }\\n if (cond[3]) {\\n result[3] = idiv(ia[3], ib[3], s[3]);\\n }\\n return vec4(result);\\n\",\"int32\");var n=new Ba(\"\\n float s = sign(a) * sign(b);\\n int ia = round(a);\\n int ib = round(b);\\n if (ib != 0) {\\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\\n return float(idiv(ia, ib, s));\\n } else {\\n return NAN;\\n }\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e],\"int32\")},o.prototype.add=function(t,e){if(\"complex64\"===t.dtype&&\"complex64\"===e.dtype)return this.complexSeparableBinaryOp(t,e,Fa);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=Dt(t.dtype,e.dtype);if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,Fa,n);var r=new Ba(Fa,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},o.prototype.packedUnaryOp=function(t,e,n){var r=new Xs(t.shape,e);return this.compileAndRun(r,[t],n)},o.prototype.packedBinaryOp=function(t,e,n,r,o){void 0===o&&(o=!1);var a=new La(n,t.shape,e.shape,o);return this.compileAndRun(a,[t,e],r)},o.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,o=this.texData.get(t.dataId),a=this.texData.get(e.dataId),i=[[o.complexTensors.real,a.complexTensors.real],[o.complexTensors.imag,a.complexTensors.imag]].map((function(o){var a=o[0],i=o[1],s=r.makeComplexComponentTensorInfo(t,a),u=r.makeComplexComponentTensorInfo(e,i),c=new Ba(n,t.shape,e.shape);return r.compileAndRun(c,[s,u],Dt(a.dtype,i.dtype))})),s=i[0],u=i[1],c=this.complex(s,u);return s.dispose(),u.dispose(),c},o.prototype.makeComplexComponentTensorInfo=function(t,e){return{dataId:e.dataId,dtype:e.dtype,shape:t.shape}},o.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>i().get(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var o=t.map((function(t){return t.dtype})).reduce((function(t,e){return Dt(t,e)})),a=t.map((function(t){return t.shape})),s=i().getBool(\"WEBGL_PACK\")?new oa(t[0].shape,a):new ra(t[0].shape,a);return this.compileAndRun(s,t,o)},o.prototype.subtract=function(t,e){if(\"complex64\"===t.dtype&&\"complex64\"===e.dtype)return this.complexSeparableBinaryOp(t,e,_a);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=Dt(t.dtype,e.dtype);if(i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,_a,t.dtype);var r=new Ba(_a,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},o.prototype.pow=function(t,e){var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\\n vec4 result = multiplier * pow(abs(a), b);\\n\\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\\n bvec4 isExpZero = equal(b, vec4(0.0));\\n result.r = isExpZero.r ? 1.0 : result.r;\\n result.g = isExpZero.g ? 1.0 : result.g;\\n result.b = isExpZero.b ? 1.0 : result.b;\\n result.a = isExpZero.a ? 1.0 : result.a;\\n\\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Ba(\"\\nif(a < 0.0 && floor(b) < b){\\n return NAN;\\n}\\nif (b == 0.0) {\\n return 1.0;\\n}\\nreturn (round(mod(b, 2.0)) != 1) ?\\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\\n\",t.shape,e.shape),r=Dt(t.dtype,e.dtype);return this.compileAndRun(n,[t,e],r)},o.prototype.ceil=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.ceil(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,Ns,t.dtype);var e=new Cs(t.shape,Ns);return this.compileAndRun(e,[t])},o.prototype.floor=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.floor(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,Fs,t.dtype);var e=new Cs(t.shape,Fs);return this.compileAndRun(e,[t])},o.prototype.sign=function(t){var e=new Cs(t.shape,\"\\n if (isnan(x)) { return 0.0; }\\n return sign(x);\\n\");return this.compileAndRun(e,[t])},o.prototype.isNaN=function(t){var e=new Cs(t.shape,\"return float(isnan(x));\");return this.compileAndRun(e,[t],\"bool\")},o.prototype.isInf=function(t){var e=new Cs(t.shape,\"return float(isinf(x));\");return this.compileAndRun(e,[t],\"bool\")},o.prototype.isFinite=function(t){var e=new Cs(t.shape,\"return float(!isnan(x) && !isinf(x));\");return this.compileAndRun(e,[t],\"bool\")},o.prototype.round=function(t){var e=new Cs(t.shape,\"\\n // OpenGL ES does not support round function.\\n // The algorithm is based on banker's rounding.\\n float base = floor(x);\\n if ((x - base) < 0.5) {\\n return floor(x);\\n } else if ((x - base) > 0.5) {\\n return ceil(x);\\n } else {\\n if (mod(base, 2.0) == 0.0) {\\n return base;\\n } else {\\n return base + 1.0;\\n }\\n }\\n\");return this.compileAndRun(e,[t])},o.prototype.exp=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.exp(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,_s,t.dtype);var e=new Cs(t.shape,_s);return this.compileAndRun(e,[t])},o.prototype.expm1=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.expm1(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,Os,t.dtype);var e=new Cs(t.shape,Os);return this.compileAndRun(e,[t])},o.prototype.softmax=function(t,e){var n=O([e],t.shape),r=this.max(t,n),o=wn(r.shape,n),a=this.subtract(t,r.reshape(o)),i=this.exp(a),s=this.sum(i,n).reshape(o);return this.realDivide(i,s)},o.prototype.log=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.log(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,\"\\n vec4 result = log(x);\\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\\n result.r = isNaN.r == 1.0 ? NAN : result.r;\\n result.g = isNaN.g == 1.0 ? NAN : result.g;\\n result.b = isNaN.b == 1.0 ? NAN : result.b;\\n result.a = isNaN.a == 1.0 ? NAN : result.a;\\n\\n return result;\\n\",t.dtype);var e=new Cs(t.shape,\"if (x < 0.0) return NAN;\\n return log(x);\");return this.compileAndRun(e,[t])},o.prototype.log1p=function(t){var e=new Cs(t.shape,\"return log(1.0 + x);\");return this.compileAndRun(e,[t])},o.prototype.sqrt=function(t){var e=new Cs(t.shape,\"return sqrt(x);\");return this.compileAndRun(e,[t])},o.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new Cs(t.shape,\"return inversesqrt(x);\");return this.compileAndRun(e,[t])},o.prototype.reciprocal=function(t){var e=new Cs(t.shape,\"return 1.0 / x;\");return this.compileAndRun(e,[t])},o.prototype.relu=function(t){var e;return e=i().getBool(\"WEBGL_PACK\")?new Xs(t.shape,qs):new Cs(t.shape,ks),this.compileAndRun(e,[t])},o.prototype.relu6=function(t){var e;return e=i().getBool(\"WEBGL_PACK\")?new Xs(t.shape,Ks):new Cs(t.shape,Ss),this.compileAndRun(e,[t])},o.prototype.prelu=function(t,e){var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(Pa,t.shape,e.shape):new Ba(Ma,t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.elu=function(t){if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,js,t.dtype);var e=new Cs(t.shape,As);return this.compileAndRun(e,[t])},o.prototype.eluDer=function(t,e){var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\\n\",t.shape,e.shape):new Ba(\"return (b >= 1.0) ? a : a * (b + 1.0);\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.selu=function(t){var e=new Cs(t.shape,Ds);return this.compileAndRun(e,[t])},o.prototype.int=function(t){var e=new Cs(t.shape,\"return float(int(x));\");return this.compileAndRun(e,[t],\"int32\")},o.prototype.clip=function(t,e,n){var r,o=(r=i().getBool(\"WEBGL_PACK_CLIP\")?new Ua(t.shape):new Wa(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,o)},o.prototype.abs=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.abs(t);if(i().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\"))return this.packedUnaryOp(t,Is,t.dtype);var e=new Cs(t.shape,Is);return this.compileAndRun(e,[t])},o.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new Va(t.shape),r=[this.makeComplexComponentTensorInfo(t,e.complexTensors.real),this.makeComplexComponentTensorInfo(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},o.prototype.sigmoid=function(t){var e=new Cs(t.shape,\"return 1.0 / (1.0 + exp(-1.0 * x));\");return this.compileAndRun(e,[t])},o.prototype.softplus=function(t){var e=new Cs(t.shape,\"\\n float epsilon = 1.1920928955078125e-7;\\n float threshold = log(epsilon) + 2.0;\\n\\n bool too_large = x > -threshold;\\n bool too_small = x < threshold;\\n\\n float result;\\n float exp_x = exp(x);\\n\\n if (too_large){\\n result = x;\\n }\\n else if (too_small){\\n result = exp_x;\\n }\\n else{\\n result = log(exp_x + 1.0);\\n }\\n return result;\\n\");return this.compileAndRun(e,[t])},o.prototype.sin=function(t){var e=new Cs(t.shape,Ms);return this.compileAndRun(e,[t])},o.prototype.cos=function(t){var e=new Cs(t.shape,Bs);return this.compileAndRun(e,[t])},o.prototype.tan=function(t){var e=new Cs(t.shape,\"return tan(x);\");return this.compileAndRun(e,[t])},o.prototype.asin=function(t){var e=new Cs(t.shape,Ps);return this.compileAndRun(e,[t])},o.prototype.acos=function(t){var e=new Cs(t.shape,Ls);return this.compileAndRun(e,[t])},o.prototype.atan=function(t){var e=new Cs(t.shape,Ws);return this.compileAndRun(e,[t])},o.prototype.atan2=function(t,e){var n=i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new La(\"\\n vec4 result = atan(a, b);\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Ba(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return atan(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.sinh=function(t){var e=new Cs(t.shape,\"\\n float e2x = exp(x);\\n return (e2x - 1.0 / e2x) / 2.0;\\n\");return this.compileAndRun(e,[t])},o.prototype.cosh=function(t){var e=new Cs(t.shape,\"\\n float e2x = exp(-x);\\n return (e2x + 1.0 / e2x) / 2.0;\\n\");return this.compileAndRun(e,[t])},o.prototype.tanh=function(t){var e=new Cs(t.shape,\"\\n float e2x = exp(-2.0 * abs(x));\\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\\n\");return this.compileAndRun(e,[t])},o.prototype.asinh=function(t){var e=new Cs(t.shape,Us);return this.compileAndRun(e,[t])},o.prototype.acosh=function(t){var e=new Cs(t.shape,Vs);return this.compileAndRun(e,[t])},o.prototype.atanh=function(t){var e=new Cs(t.shape,zs);return this.compileAndRun(e,[t])},o.prototype.erf=function(t){var e=new Cs(t.shape,'\\n // Error function is calculated approximately with elementary function.\\n // See \"Handbook of Mathematical Functions with Formulas,\\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\\n float p = 0.3275911;\\n float a1 = 0.254829592;\\n float a2 = -0.284496736;\\n float a3 = 1.421413741;\\n float a4 = -1.453152027;\\n float a5 = 1.061405429;\\n\\n float sign = sign(x);\\n x = abs(x);\\n float t = 1.0 / (1.0 + p * x);\\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\\n');return this.compileAndRun(e,[t])},o.prototype.step=function(t,e){var n=new Cs(t.shape,function(t){return void 0===t&&(t=0),Es+\"\\n return x > 0.0 ? 1.0 : float(\"+t+\");\\n \"}(e));return this.compileAndRun(n,[t])},o.prototype.conv2dByMatMul=function(t,e,n,r,o,a){var s=t.shape,u=this.texData.get(t.dataId),c=n.inChannels,l=s[0]*s[1]*s[2],h=n.outChannels,f=\"channelsLast\"===n.dataFormat,d=(1===l||1===h)&&c>1e3,p=s[2]%2!=0&&!!u.isPacked;if(d||!i().getBool(\"WEBGL_LAZILY_UNPACK\")||!i().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")||!p){var v=f?s[0]*s[1]*s[2]:s[0]*s[2]*s[3],m=this.reshape(t,[1,v,n.inChannels]),g=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.fusedBatchMatMul({a:m,b:g,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:a}),n.outShape)}var y=f?s[0]*s[1]*(s[2]+1):s[0]*s[2]*(s[3]+1),x={dataId:t.dataId,shape:[1,y,n.inChannels],dtype:t.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,C(_e(u.shape,x.shape),(function(){return\"packed reshape \"+u.shape+\" to \"+x.shape+\" isn't free\"}));var w=this.reshape(e,[1,n.inChannels,n.outChannels]),E=this.fusedBatchMatMul({a:x,b:w,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:a}),R=this.texData.get(E.dataId);return C(R.isPacked,(function(){return\"batchMatMul result is expected to be packed\"})),u.shape=b,R.shape=n.outShape,Lt.makeTensorFromDataId(E.dataId,n.outShape,E.dtype)},o.prototype.conv2dWithIm2Row=function(t,e,n,r,o,a){var i=n.filterWidth,s=n.filterHeight,u=n.inChannels,c=n.outWidth,l=n.outHeight,h=\"channelsLast\"===n.dataFormat,f=i*s*u,d=l*c,p=[f,d],v=t.squeeze([0]),m=e.reshape([1,f,-1]),g=new Li(p,v.shape,n),y=this.compileAndRun(g,[v]).reshape([1,p[0],p[1]]),x=null!=r,b=null!=a,w=o?Qs(o,!0):null,C=new Hi(y.shape,[1,d,n.outChannels],!0,!1,x,w,b),E=[y,m];r&&E.push(r),b&&E.push(a);var R=this.compileAndRun(C,E);return h?R.reshape([1,l,c,n.outChannels]):R.reshape([1,n.outChannels,l,c])},o.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,o=t.bias,a=t.activation,s=t.preluActivationWeights;if(1===r.filterHeight&&1===r.filterWidth&&1===r.dilationHeight&&1===r.dilationWidth&&1===r.strideHeight&&1===r.strideWidth&&(\"SAME\"===r.padInfo.type||\"VALID\"===r.padInfo.type))return this.conv2dByMatMul(e,n,r,o,a,s);if(i().getBool(\"WEBGL_CONV_IM2COL\")&&1===e.shape[0])return this.conv2dWithIm2Row(e,n,r,o,a,s);var u=null!=o,c=null!=s,l=a?Qs(a,!1):null,h=new Qa(r,u,l,c),f=[e,n];return o&&f.push(o),s&&f.push(s),this.compileAndRun(h,f)},o.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&(\"SAME\"===n.padInfo.type||\"VALID\"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(i().getBool(\"WEBGL_CONV_IM2COL\")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new Qa(n);return this.compileAndRun(r,[t,e])},o.prototype.conv2dDerInput=function(t,e,n){var r=new Ka(n);return this.compileAndRun(r,[t,e])},o.prototype.conv2dDerFilter=function(t,e,n){var r=new qa(n);return this.compileAndRun(r,[t,e])},o.prototype.fusedDepthwiseConv2D=function(t){var e,n=t.input,r=t.filter,o=t.convInfo,a=t.bias,s=t.activation,u=t.preluActivationWeights,c=i().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&o.strideWidth<=2&&o.outChannels/o.inChannels==1,l=s?Qs(s,c):null,h=[n,r],f=null!=a,d=null!=u;return f&&h.push(a),d&&h.push(u),c?(e=new ti(o,f,l,d),this.compileAndRun(e,h)):(e=new Za(o,f,l,d),this.compileAndRun(e,h))},o.prototype.depthwiseConv2D=function(t,e,n){var r;return i().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new ti(n),this.compileAndRun(r,[t,e])):(r=new Za(n),this.compileAndRun(r,[t,e]))},o.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new $a(n);return this.compileAndRun(r,[t,e])},o.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new Ya(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3d=function(t,e,n){var r=new Ja(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3dDerInput=function(t,e,n){var r=new Xa(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3dDerFilter=function(t,e,n){var r=new ja(n);return this.compileAndRun(r,[t,e])},o.prototype.maxPool=function(t,e){var n=new $i(e,\"max\",!1);return this.compileAndRun(n,[t])},o.prototype.avgPool=function(t,e){var n=new $i(e,\"avg\",!1);return this.compileAndRun(n,[t],\"float32\")},o.prototype.maxPoolBackprop=function(t,e,n,r){var o=new $i(r,\"max\",!0),a=this.compileAndRun(o,[e]),i=new zi(r),s=this.compileAndRun(i,[t,a],e.dtype);return a.dispose(),s},o.prototype.avgPoolBackprop=function(t,e,n){var r=new Ia(n);return this.compileAndRun(r,[t],e.dtype)},o.prototype.cast=function(t,e){return Po(t,e,this)},o.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,a=0;a1,(function(){return\"blockSize should be > 1 for depthToSpace, but was: \"+e}));var r=t.shape[0],o=\"NHWC\"===n?t.shape[1]:t.shape[2],a=\"NHWC\"===n?t.shape[2]:t.shape[3],i=\"NHWC\"===n?t.shape[3]:t.shape[1],s=o*e,u=a*e,c=i/(e*e),l=new ii(\"NHWC\"===n?[r,s,u,c]:[r,c,s,u],e,n);return this.compileAndRun(l,[t])},o.prototype.split=function(t,e,n){return Zo(t,e,n)},o.prototype.scatterND=function(t,e,n){var r=Zr(0,t,n),o=r.sliceRank,a=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,c=[u/i,i],l=t.reshape([a,o]),h=e.reshape([a,i]);if(0===u)return Lo(Fn([]),n);var f=On(0),d=new ss(a,o,l.rank,h.rank,s,c);return this.compileAndRun(d,[h,l,f]).reshape(n)},o.prototype.sparseToDense=function(t,e,n,r){var o=Zr(0,t,n),a=o.sliceRank,i=o.numUpdates,s=o.strides,u=o.outputSize,c=new ss(i,a,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(c,[e,t,r]).reshape(n)},o.prototype.fft=function(t){return this.fftImpl(t,!1)},o.prototype.ifft=function(t){return this.fftImpl(t,!0)},o.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new pi(fi,t.shape,e),o=new pi(di,t.shape,e),a=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag)],i=this.compileAndRun(r,a),s=this.compileAndRun(o,a),u=this.complex(i,s).as2D(t.shape[0],t.shape[1]);return i.dispose(),s.dispose(),u},o.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=jr(t,e),a=o[0],i=o[1],s=o[2],u=o[3],c=e.reshape([i,r]),l=t.reshape([t.size/s,s]),h=new gi(r,u,[i,s]);return this.compileAndRun(h,[l,c]).reshape(a)},o.prototype.fill=function(t,e,n){if(\"string\"===(n=n||j(e))){var r=P(n,k(t));return r.fill(e),Lt.makeTensor(r,t,n,this)}var o=new vi(t,e),a=o.getCustomSetupFunc(e);return this.compileAndRun(o,[],n,a)},o.prototype.onesLike=function(t){if(\"string\"===t.dtype)throw new Error(\"onesLike is not supported under string dtype\");return this.fill(t.shape,1,t.dtype)},o.prototype.zerosLike=function(t){return this.fill(t.shape,\"string\"===t.dtype?\"\":0,t.dtype)},o.prototype.linspace=function(t,e,n){return Wo(t,e,n)},o.prototype.makeTensorInfo=function(t,e){var n=this.write(null,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}},o.prototype.makeOutput=function(t,e){var n=this.makeTensorInfo(t,e).dataId;return Lt.makeTensorFromDataId(n,t,e,this)},o.prototype.unpackTensor=function(t){var e=new Ys(t.shape);return this.runWebGLProgram(e,[t],t.dtype)},o.prototype.packTensor=function(t){var e=new ji(t.shape);return this.runWebGLProgram(e,[t],t.dtype,null,!0)},o.prototype.packedReshape=function(t,e){var n=[Ae(t.shape)].concat(De(t.shape)),r={dtype:t.dtype,shape:n,dataId:t.dataId},o=[Ae(e)].concat(De(e)),a=new Zi(o,n),i=this.runWebGLProgram(a,[r],t.dtype,null,!0);return{dataId:i.dataId,shape:e,dtype:i.dtype}},o.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,o=n.shape,a=n.dtype,i=Te(o);e=r?new ai(i):new oi(i);return{dtype:a,shape:o,dataId:this.runWebGLProgram(e,[{shape:i,dtype:a,dataId:t}],a,null,!0).dataId}},o.prototype.runWebGLProgram=function(t,e,n,r,o){var a=this;void 0===o&&(o=!1);var s=this.makeTensorInfo(t.outputShape,n),u=this.texData.get(s.dataId);if(t.packedOutput&&(u.isPacked=!0),t.outPackingScheme===Vt.DENSE){var c=Yt(t.outputShape);u.texShape=c.map((function(t){return 2*t}))}if(null!=t.outTexUsage&&(u.usage=t.outTexUsage),0===k(s.shape))return u.values=B(s.dtype,0),s;var l=[],h=e.map((function(e){if(\"complex64\"===e.dtype)throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");var n=a.texData.get(e.dataId);if(null==n.texture){if(!t.packedInputs&&k(e.shape)<=i().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.packedInputs&&(n.isPacked=!0,n.shape=e.shape)}else if(!!n.isPacked!=!!t.packedInputs)e=n.isPacked?a.unpackTensor(e):a.packTensor(e),l.push(e),n=a.texData.get(e.dataId);else if(n.isPacked&&!_e(n.shape,e.shape)){var r=e,o=e.shape;e.shape=n.shape,e=a.packedReshape(e,o),l.push(e),n=a.texData.get(e.dataId),r.shape=o}return a.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}}));this.uploadToGPU(s.dataId);var f,d={shape:s.shape,texData:u,isUniform:!1},p=function(t,e,n){var r=\"\";e.concat(n).forEach((function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?\"uniform\":t.texData.texShape;r+=t.shape+\"_\"+n+\"_\"+e}));var o=t.userCode,a=t.constructor.name;return a+=\"_\"+r+\"_\"+o}(t,h,d),v=this.getAndSaveBinary(p,(function(){return function(t,e,n,r){var o=e.userCode,a=n.map((function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}})),s=a.map((function(t){return t.shapeInfo})),u={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},c=fa(a,u,o,e.packedInputs),l=t.createProgram(c),h=null,f=t.getUniformLocation(l,\"NAN\",!1);1===i().getNumber(\"WEBGL_VERSION\")&&(h=t.getUniformLocation(l,\"INFINITY\",!1));for(var d={},p=0;p0)return 32}return 16}))),this.floatPrecisionValue},o.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},o.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,o=n.dtype,a=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var c,l=null!=this.activeTimers;l&&(c=et());var h=n.texShape;if(null==h&&(h=Ne(r,u),n.texShape=h),null!=a){var f=Te(r),d=void 0,p=h[1],v=h[0],m=a instanceof Uint8Array;u?(p=(e=$t(h[0],h[1]))[0],v=e[1],d=new hi(f,[v,p],m)):d=new li(f,[v,p],m);var g=this.makeTensorInfo([v,p],o);this.texData.get(g.dataId).usage=m?zt.PIXELS:zt.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),p,v,a);var y=this.runWebGLProgram(d,[g],o,null,!0),x=this.texData.get(y.dataId);n.texture=x.texture,n.texShape=x.texShape,n.isPacked=x.isPacked,n.usage=x.usage,this.disposeData(g.dataId),this.texData.delete(y.dataId),n.values=null,l&&(this.uploadWaitMs+=et()-c)}else{var b=this.acquireTexture(h,s,o,u);n.texture=b}}},o.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if(\"float32\"===e||\"complex64\"===e)return t;if(\"int32\"===e||\"bool\"===e){for(var n=\"int32\"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r1024*this.numMBBeforeWarning*1024){var o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(\"High memory usage in GPU: \"+o+\" MB, most likely due to a memory leak\")}return this.textureManager.acquireTexture(t,e,r)},o.prototype.computeBytes=function(t,e){return t[0]*t[1]*z(e)},o}(bo);Wt()&&Lt.registerBackend(\"webgl\",(function(){return new Zs}),2);var tu=An({square_:function(t){var e=mn(t,\"x\",\"square\"),n=[e];return Lt.runKernelFunc((function(t,n){return n([e]),t.square(e)}),{x:e},null,\"Square\",{},n,[])}}),eu=\"SquaredDifference\";var nu=An({squaredDifference_:function(t,e){var n,r=mn(t,\"a\",\"squaredDifference\"),o=mn(e,\"b\",\"squaredDifference\");n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape);var a={a:r,b:o},i=[r,o];return Lt.runKernelFunc((function(t,e){var n=t.squaredDifference(r,o);return e([r,o]),n}),a,(function(t,e){var n=e[0],r=e[1],o=On(2);return{a:function(){return t.mul(n.sub(r).mul(o))},b:function(){return t.mul(r.sub(n).mul(o))}}}),eu,{},i,[])}});var ru=An({abs_:function(t){var e=mn(t,\"x\",\"abs\");return\"complex64\"===e.dtype?Lt.runKernelFunc((function(t){return t.complexAbs(e)}),{$x:e}):Lt.runKernelFunc((function(t,n){var r=t.abs(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mul(n.toFloat().step(-1))}}}),\"Abs\")}}),ou=An({acos_:function(t){var e=mn(t,\"x\",\"acos\");return Lt.runKernelFunc((function(t,n){var r=t.acos(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(On(1).sub(n.toFloat().square()).sqrt()).neg()}}}))}}),au=An({acosh_:function(t){var e=mn(t,\"x\",\"acosh\");return Lt.runKernelFunc((function(t,n){var r=t.acosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}}))}}),iu=An({asin_:function(t){var e=mn(t,\"x\",\"asin\");return Lt.runKernelFunc((function(t,n){var r=t.asin(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(On(1).sub(n.toFloat().square()).sqrt())}}}))}}),su=An({asinh_:function(t){var e=mn(t,\"x\",\"asinh\");return Lt.runKernelFunc((function(t,n){var r=t.asinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(On(1).add(n.toFloat().square()).sqrt())}}}))}}),uu=An({atan_:function(t){var e=mn(t,\"x\",\"atan\");return Lt.runKernelFunc((function(t,n){var r=t.atan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().square().add(1))}}}))}}),cu=An({atanh_:function(t){var e=mn(t,\"x\",\"atanh\");return Lt.runKernelFunc((function(t,n){var r=t.atanh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(On(1).sub(n.toFloat().square()))}}}))}}),lu=An({ceil_:function(t){var e=mn(t,\"x\",\"ceil\");return Lt.runKernelFunc((function(t){return t.ceil(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),hu=An({clipByValue_:function(t,e,n){var r=mn(t,\"x\",\"clipByValue\");C(e<=n,(function(){return\"Error in clip: min (\"+e+\") must be less than or equal to max (\"+n+\").\"}));var o=[r],a={min:e,max:n};return Lt.runKernelFunc((function(t,o){var a=t.clip(r,e,n);return o([r]),a}),{x:r},(function(t,r){var o=r[0];return{x:function(){return t.where(o.greaterEqual(e).logicalAnd(o.lessEqual(n)),Xn(t))}}}),\"ClipByValue\",a,o)}}),fu=An({cos_:function(t){var e=mn(t,\"x\",\"cos\"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.cos(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return n.toFloat().sin().neg().mul(t)}}}),\"Cos\",{},n)}}),du=An({cosh_:function(t){var e=mn(t,\"x\",\"cosh\");return Lt.runKernelFunc((function(t,n){var r=t.cosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sinh().mulStrict(t)}}}))}}),pu=An({erf_:function(t){var e=mn(t,\"x\",\"erf\");return C(\"int32\"===e.dtype||\"float32\"===e.dtype,(function(){return\"Input dtype must be `int32` or `float32`.\"})),\"int32\"===e.dtype&&(e=e.toFloat()),Lt.runKernelFunc((function(t,n){var r=t.erf(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}}))}}),vu=An({exp_:function(t){var e=mn(t,\"x\",\"exp\");return Lt.runKernelFunc((function(t,n){var r=t.exp(e);return n([r]),r}),{x:e},(function(t,e){return{x:function(){return t.mulStrict(e[0])}}}),\"Exp\",{},[],[!0])}}),mu=An({expm1_:function(t){var e=mn(t,\"x\",\"expm1\");return Lt.runKernelFunc((function(t,n){var r=t.expm1(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.exp())}}}))}}),gu=An({floor_:function(t){var e=mn(t,\"x\",\"floor\");return Lt.runKernelFunc((function(t){return t.floor(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),yu=An({log_:function(t){var e=mn(t,\"x\",\"log\"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.log(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.div(n.toFloat())}}}),\"Log\",{},n)}}),xu=An({log1p_:function(t){var e=mn(t,\"x\",\"log1p\");return Lt.runKernelFunc((function(t,n){var r=t.log1p(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.add(1))}}}))}}),bu=An({logSigmoid_:function(t){var e=mn(t,\"x\",\"logSigmoid\");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.neg().sigmoid())}}}))}}),wu=An({neg_:function(t){var e=mn(t,\"x\",\"neg\"),n=[e];return Lt.runKernelFunc((function(t){return t.neg(e)}),{x:e},(function(t){return{x:function(){return t.neg()}}}),\"Neg\",{},n)}}),Cu=An({reciprocal_:function(t){var e=mn(t,\"x\",\"reciprocal\");return Lt.runKernelFunc((function(t,n){var r=t.reciprocal(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.square().neg())}}}))}}),Eu=An({round_:function(t){var e=mn(t,\"x\",\"round\");return Lt.runKernelFunc((function(t){return t.round(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),Ru=An({rsqrt_:function(t){var e=mn(t,\"x\",\"rsqrt\"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.rsqrt(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}}),\"Rsqrt\",{},n)}}),Iu=An({sigmoid_:function(t){var e=mn(t,\"x\",\"sigmoid\");return Lt.runKernelFunc((function(t,n){var r=t.sigmoid(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mul(n.mul(On(1).sub(n)))}}}),\"Sigmoid\")}}),ku=An({sign_:function(t){var e=mn(t,\"x\",\"sign\");return Lt.runKernelFunc((function(t){return t.sign(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),Su=An({isNaN_:function(t){var e=mn(t,\"x\",\"isNaN\");return Lt.runKernelFunc((function(t){return t.isNaN(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),Au=An({isInf_:function(t){var e=mn(t,\"x\",\"isInf\");return Lt.runKernelFunc((function(t){return t.isInf(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),Du=An({isFinite_:function(t){var e=mn(t,\"x\",\"isFinite\");return Lt.runKernelFunc((function(t){return t.isFinite(e)}),{$x:e},(function(t){return{$x:function(){return Xn(t)}}}))}}),Tu=An({sin_:function(t){var e=mn(t,\"x\",\"sin\"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.sin(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return n.toFloat().cos().mul(t)}}}),\"Sin\",{},n)}}),Nu=An({sinh_:function(t){var e=mn(t,\"x\",\"sinh\");return Lt.runKernelFunc((function(t,n){var r=t.sinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cosh().mulStrict(t)}}}))}}),Fu=An({softplus_:function(t){var e=mn(t,\"x\",\"softplus\");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.sigmoid())}}}))}}),_u=An({sqrt_:function(t){var e=mn(t,\"x\",\"sqrt\");return Lt.runKernelFunc((function(t,n){var r=t.sqrt(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}}))}}),Ou=An({step_:function(t,e){void 0===e&&(e=0);var n=mn(t,\"x\",\"step\");return Lt.runKernelFunc((function(t){return t.step(n,e)}),{$x:n},(function(t){return{$x:function(){return Xn(t)}}}))}}),Mu=An({tan_:function(t){var e=mn(t,\"x\",\"tan\");return Lt.runKernelFunc((function(t,n){var r=t.tan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.cos().square())}}}))}}),Bu=An({tanh_:function(t){var e=mn(t,\"x\",\"tanh\");return Lt.runKernelFunc((function(t,n){var r=t.tanh(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return On(1).sub(n.square()).mulStrict(t)}}}),\"Tanh\",{},null,[!0])}});function Pu(t,e,n,r,o,a){var i,s,u=mn(t,\"x\",\"batchNorm\"),c=mn(e,\"mean\",\"batchNorm\"),l=mn(n,\"variance\",\"batchNorm\");return null!=o&&(i=mn(o,\"scale\",\"batchNorm\")),null!=r&&(s=mn(r,\"offset\",\"batchNorm\")),C(2===u.rank,(function(){return\"Error in batchNorm3D: x must be rank 3 but got rank \"+u.rank+\".\"})),C(2===c.rank||1===c.rank,(function(){return\"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank \"+c.rank+\".\"})),C(2===l.rank||1===l.rank,(function(){return\"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank \"+l.rank+\".\"})),null!=i&&C(2===i.rank||1===i.rank,(function(){return\"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank \"+i.rank+\".\"})),null!=s&&C(2===s.rank||1===s.rank,(function(){return\"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank \"+s.rank+\".\"})),Uu(u,c,l,s,i,a)}function Lu(t,e,n,r,o,a){var i,s,u=mn(t,\"x\",\"batchNorm\"),c=mn(e,\"mean\",\"batchNorm\"),l=mn(n,\"variance\",\"batchNorm\");return null!=o&&(i=mn(o,\"scale\",\"batchNorm\")),null!=r&&(s=mn(r,\"offset\",\"batchNorm\")),C(3===u.rank,(function(){return\"Error in batchNorm3D: x must be rank 3 but got rank \"+u.rank+\".\"})),C(3===c.rank||1===c.rank,(function(){return\"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank \"+c.rank+\".\"})),C(3===l.rank||1===l.rank,(function(){return\"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank \"+l.rank+\".\"})),null!=i&&C(3===i.rank||1===i.rank,(function(){return\"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank \"+i.rank+\".\"})),null!=s&&C(3===s.rank||1===s.rank,(function(){return\"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank \"+s.rank+\".\"})),Uu(u,c,l,s,i,a)}function Wu(t,e,n,r,o,a){var i,s,u=mn(t,\"x\",\"batchNorm\"),c=mn(e,\"mean\",\"batchNorm\"),l=mn(n,\"variance\",\"batchNorm\");return null!=o&&(i=mn(o,\"scale\",\"batchNorm\")),null!=r&&(s=mn(r,\"offset\",\"batchNorm\")),C(4===u.rank,(function(){return\"Error in batchNorm4D: x must be rank 4 but got rank \"+u.rank+\".\"})),C(4===c.rank||1===c.rank,(function(){return\"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank \"+c.rank+\".\"})),C(4===l.rank||1===l.rank,(function(){return\"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank \"+l.rank+\".\"})),null!=i&&C(4===i.rank||1===i.rank,(function(){return\"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank \"+i.rank+\".\"})),null!=s&&C(4===s.rank||1===s.rank,(function(){return\"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank \"+s.rank+\".\"})),Uu(u,c,l,s,i,a)}function Uu(t,e,n,r,o,a){null==a&&(a=.001);var i,s,u,c=mn(t,\"x\",\"batchNorm\"),l=mn(e,\"mean\",\"batchNorm\"),h=mn(n,\"variance\",\"batchNorm\");null!=o&&(i=mn(o,\"scale\",\"batchNorm\")),null!=r&&(s=mn(r,\"offset\",\"batchNorm\")),C(l.rank===h.rank,(function(){return\"Batch normalization gradient requires mean and variance to have equal ranks.\"})),C(null==s||l.rank===s.rank,(function(){return\"Batch normalization gradient requires mean and offset to have equal ranks.\"})),C(null==i||l.rank===i.rank,(function(){return\"Batch normalization gradient requires mean and scale to have equal ranks.\"})),u=0===c.rank||1===c.rank?c.as4D(1,1,1,c.size):2===c.rank?c.as4D(1,1,c.shape[0],c.shape[1]):3===c.rank?c.as4D(1,c.shape[0],c.shape[1],c.shape[2]):c;var f=[c,l,h,i];return Lt.runKernelFunc((function(t,e){var n=t.batchNormalization(u,Vu(l),Vu(h),a,Vu(i),Vu(s));return e([c,l,h,i]),n}),{x:c,mean:l,variance:h,scale:i,offset:s},(function(t,e){var n=e,r=n[0],o=n[1],i=n[2],s=n[3],c=null==s?On(1):s,l=Eo(o.shape,u.shape),h=[];if(1===o.rank){for(var f=0;f0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=Eo(o.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(o.shape)}}}),\"Add\")}}),oc=An({addN_:function(t){C(Array.isArray(t),(function(){return\"The argument passed to tf.addN() must be a list of tensors\"})),C(t.length>=1,(function(){return\"Must pass at least one tensor to tf.addN(), but got \"+t.length}));var e=t.map((function(t,e){return mn(t,\"tensors\"+e,\"addN\")})),n=e[0];e.forEach((function(t){if(t.dtype!==n.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")})),e.forEach((function(t){if(!S(t.shape,n.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")}));var r=e;return Lt.runKernelFunc((function(t){return t.addN(e)}),r,(function(t){var n={};return e.forEach((function(e,r){n[r]=function(){return t.clone()}})),n}),\"AddN\")}}),ac=An({addStrict_:function(t,e){var n=mn(t,\"a\",\"addStrict\"),r=mn(e,\"b\",\"addStrict\");return E(n.shape,r.shape,\"Error in addStrict: \"),n.add(r)}}),ic=An({atan2_:function(t,e){var n,r=mn(t,\"a\",\"atan2\"),o=mn(e,\"b\",\"atan2\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.atan2(r,o);return e([r,o]),n}),{$a:r,$b:o},(function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=rc(n.square(),r.square()),o=t.mul(r.div(e)),i=Eo(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$b:function(){var e=rc(n.square(),r.square()),o=wu(t.mul(n.div(e))),i=Eo(r.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(r.shape)}}}))}}),sc=An({div_:function(t,e){var n,r=mn(t,\"a\",\"div\"),o=mn(e,\"b\",\"div\");if(n=Nt(r,o),r=n[0],o=n[1],\"int32\"===r.dtype&&\"int32\"===o.dtype)return lc(r,o);var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.realDivide(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.div(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),\"Div\")}}),uc=An({divNoNan_:function(t,e){var n,r=mn(t,\"a\",\"div\"),o=mn(e,\"b\",\"div\");r=(n=Nt(r,o))[0],o=n[1];var a=sc(r,o),i=Xn(a),s=o.equal(i);return ec(s,i,a)}}),cc=An({divStrict_:function(t,e){var n=mn(t,\"a\",\"div\"),r=mn(e,\"b\",\"div\");return E(n.shape,r.shape,\"Error in divideStrict: \"),n.div(r)}}),lc=An({floorDiv_:function(t,e){var n,r=mn(t,\"a\",\"floorDiv\"),o=mn(e,\"b\",\"floorDiv\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.floorDiv(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.div(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),\"FloorDiv\")}}),hc=An({maximum_:function(t,e){var n,r=mn(t,\"a\",\"maximum\"),o=mn(e,\"b\",\"maximum\");return n=Nt(r,o),r=n[0],o=n[1],\"bool\"===r.dtype&&(r=r.toInt(),o=o.toInt()),Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.maximum(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){return t.mul(n.greaterEqual(r).toFloat())},b:function(){return t.mul(n.less(r).toFloat())}}}),\"Maximum\")}}),fc=An({maximumStrict_:function(t,e){var n=mn(t,\"a\",\"maximumStrict\"),r=mn(e,\"b\",\"maximumStrict\");return E(n.shape,r.shape,\"Error in maximumStrict: \"),n.maximum(r)}}),dc=An({minimum_:function(t,e){var n,r=mn(t,\"a\",\"minimum\"),o=mn(e,\"b\",\"minimum\");return n=Nt(r,o),r=n[0],o=n[1],\"bool\"===r.dtype&&(r=r.toInt(),o=o.toInt()),Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.minimum(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){return t.mul(n.lessEqual(r).toFloat())},b:function(){return t.mul(n.greater(r).toFloat())}}}),\"Minimum\")}}),pc=An({minimumStrict_:function(t,e){var n=mn(t,\"a\",\"minimumStrict\"),r=mn(e,\"b\",\"minimumStrict\");return E(n.shape,r.shape,\"Error in minimumStrict: \"),n.minimum(r)}}),vc=An({mod_:function(t,e){var n,r=mn(t,\"a\",\"mod\"),o=mn(e,\"b\",\"mod\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.mod(r,o);return e([r,o]),n}),{$a:r,$b:o},(function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=Eo(n.shape,a);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),o=Eo(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}}))}}),mc=An({modStrict_:function(t,e){var n=mn(t,\"a\",\"modStrict\"),r=mn(e,\"b\",\"modStrict\");return E(n.shape,r.shape,\"Error in modStrict: \"),n.mod(r)}}),gc=An({mul_:function(t,e){var n,r=mn(t,\"a\",\"mul\"),o=mn(e,\"b\",\"mul\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.multiply(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.mul(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}}),\"Mul\")}}),yc=An({mulStrict_:function(t,e){var n=mn(t,\"a\",\"mul\"),r=mn(e,\"b\",\"mul\");return E(n.shape,r.shape,\"Error in multiplyStrict: \"),n.mul(r)}}),xc=An({pow_:function(t,e){var n,r=mn(t,\"base\",\"pow\"),o=mn(e,\"exp\",\"pow\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape),i=[r,o];return Lt.runKernelFunc((function(t,e){var n=t.pow(r,o);return e([r,o,n]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1],o=e[2];return{a:function(){var e=r.toFloat(),o=t.mul(e.mul(n.pow(e.sub(On(1))))),i=Eo(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},b:function(){var e=n.greater(0),i=n.log().where(e,Xn(n)),s=t.mul(o.mul(i)),u=Eo(r.shape,a);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}}),\"Pow\",{},i,[!0])}}),bc=An({powStrict_:function(t,e){return E(t.shape,e.shape,\"Error in powStrict: \"),t.pow(e)}}),wc=An({squaredDifferenceStrict_:function(t,e){var n=mn(t,\"a\",\"squaredDifferenceStrict\"),r=mn(e,\"b\",\"squaredDifferenceStrict\");return E(n.shape,r.shape,\"Error in squaredDifferenceStrict: \"),n.squaredDifference(r)}}),Cc=An({sub_:function(t,e){var n,r=mn(t,\"a\",\"sub\"),o=mn(e,\"b\",\"sub\");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t){return t.subtract(r,o)}),{a:r,b:o},(function(t){return{a:function(){var e=t,n=Eo(r.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=Eo(o.shape,a);return n.length>0&&(e=e.sum(n)),e.neg().reshape(o.shape)}}}),\"Sub\")}}),Ec=An({subStrict_:function(t,e){var n=mn(t,\"a\",\"subStrict\"),r=mn(e,\"b\",\"subStrict\");return E(n.shape,r.shape,\"Error in subStrict: \"),n.sub(r)}});var Rc=An({equal_:function(t,e){var n,r=mn(t,\"a\",\"equal\"),o=mn(e,\"b\",\"equal\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.equal(r,o)}),{$a:r,$b:o})}}),Ic=An({equalStrict_:function(t,e){var n=mn(t,\"a\",\"equalStrict\"),r=mn(e,\"b\",\"equalStrict\");return E(n.shape,r.shape,\"Error in equalStrict: \"),n.equal(r)}}),kc=An({greater_:function(t,e){var n,r=mn(t,\"a\",\"greater\"),o=mn(e,\"b\",\"greater\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.greater(r,o)}),{a:r,b:o},null,\"Greater\")}}),Sc=An({greaterEqual_:function(t,e){var n,r=mn(t,\"a\",\"greaterEqual\"),o=mn(e,\"b\",\"greaterEqual\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.greaterEqual(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return{a:function(){return Xn(n)},b:function(){return Xn(r)}}}),\"GreaterEqual\")}}),Ac=An({greaterEqualStrict_:function(t,e){var n=mn(t,\"a\",\"greaterEqualStrict\"),r=mn(e,\"b\",\"greaterEqualStrict\");return E(n.shape,r.shape,\"Error in greaterEqualStrict: \"),n.greaterEqual(r)}}),Dc=An({greaterStrict_:function(t,e){var n=mn(t,\"a\",\"greaterStrict\"),r=mn(e,\"b\",\"greaterStrict\");return E(n.shape,r.shape,\"Error in greaterStrict: \"),n.greater(r)}}),Tc=An({less_:function(t,e){var n,r=mn(t,\"a\",\"less\"),o=mn(e,\"b\",\"less\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.less(r,o)}),{a:r,b:o},null,\"Less\")}}),Nc=An({lessEqual_:function(t,e){var n,r=mn(t,\"a\",\"lessEqual\"),o=mn(e,\"b\",\"lessEqual\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.lessEqual(r,o);return e([r,o]),n}),{a:r,b:o},null,\"LessEqual\")}}),Fc=An({lessEqualStrict_:function(t,e){var n=mn(t,\"a\",\"lessEqualStrict\"),r=mn(e,\"b\",\"lessEqualStrict\");return E(n.shape,r.shape,\"Error in lessEqualStrict: \"),n.lessEqual(r)}}),_c=An({lessStrict_:function(t,e){var n=mn(t,\"a\",\"lessStrict\"),r=mn(e,\"b\",\"lessStrict\");return E(n.shape,r.shape,\"Error in lessStrict: \"),n.less(r)}}),Oc=An({notEqual_:function(t,e){var n,r=mn(t,\"a\",\"notEqual\"),o=mn(e,\"b\",\"notEqual\");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.notEqual(r,o)}),{a:r,b:o},null,\"NotEqual\")}}),Mc=An({notEqualStrict_:function(t,e){var n=mn(t,\"a\",\"notEqualStrict\"),r=mn(e,\"b\",\"notEqualStrict\");return E(n.shape,r.shape,\"Error in notEqualStrict: \"),n.notEqual(r)}});function Bc(t,e){for(var n=[],r=t;r0,(function(){return\"mask cannot be scalar\"})),E(u.slice(i,i+s),a.shape,\"mask's shape must match the first K dimensions of tensor's shape,\"),c=1,l=i;l=2&&i.rank>=2&&a.rank===i.rank,(function(){return\"Error in matMul: inputs must have the same rank of at least 2, got ranks \"+a.rank+\" and \"+i.rank+\".\"})),C(S(h,f),(function(){return\"Error in matMul: outer dimensions (\"+h+\") and (\"+f+\") of Tensors with shapes \"+a.shape+\" and \"+i.shape+\" must match.\"})),C(s===u,(function(){return\"Error in matMul: inner shapes (\"+s+\") and (\"+u+\") of Tensors with shapes \"+a.shape+\" and \"+i.shape+\" and transposeA=\"+n+\" and transposeB=\"+r+\" must match.\"}));var v=a.shape.slice(0,-2).concat([c,l]),m=n?a.as3D(d,s,c):a.as3D(d,c,s),g=r?i.as3D(p,l,u):i.as3D(p,u,l),y={transposeA:n,transposeB:r};return Lt.runKernelFunc((function(t,e){var o=t.batchMatMul(m,g,n,r);return e([m,g]),o}),{a:m,b:g},(function(t,e){var o=e,a=o[0],i=o[1];return n||r?!n&&r?{a:function(){return t.matMul(i,!1,!1)},b:function(){return t.matMul(a,!0,!1)}}:n&&!r?{a:function(){return i.matMul(t,!1,!0)},b:function(){return a.matMul(t,!1,!1)}}:{a:function(){return i.matMul(t,!0,!0)},b:function(){return t.matMul(a,!0,!0)}}:{a:function(){return t.matMul(i,!1,!0)},b:function(){return a.matMul(t,!0,!1)}}}),\"BatchMatMul\",y).reshape(v)}}),nl=An({dot_:function(t,e){var n=mn(t,\"t1\",\"dot\"),r=mn(e,\"t2\",\"dot\");C(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),(function(){return\"Error in dot: inputs must all be rank 1 or 2, but got ranks \"+n.rank+\" and \"+r.rank+\".\"}));var o=1===n.rank?n.size:n.shape[1],a=1===r.rank?r.size:r.shape[0];return C(o===a,(function(){return\"Error in dot: inner dimensions of inputs must match, but got \"+o+\" and \"+a+\".\"})),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),rl=An({outerProduct_:function(t,e){var n=mn(t,\"v1\",\"outerProduct\"),r=mn(e,\"v2\",\"outerProduct\");return C(1===n.rank&&1===r.rank,(function(){return\"Error in outerProduct: inputs must be rank 1, but got ranks \"+n.rank+\" and \"+r.rank+\".\"})),n.as2D(-1,1).matMul(r.as2D(1,-1))}});var ol=An({reverse_:function(t,e){var n=mn(t,\"x\",\"reverse\");if(0===n.rank)return n.clone();var r=O(e,n.shape);return Lt.runKernelFunc((function(t){return t.reverse(n,r)}),{$x:n},(function(t){return{$x:function(){return t.reverse(r)}}})).reshapeAs(n)}}),al=An({reverse1d_:function(t){var e=mn(t,\"x\",\"reverse\");return C(1===e.rank,(function(){return\"Error in reverse1D: x must be rank 1 but got rank \"+e.rank+\".\"})),ol(e,0)}}),il=An({reverse2d_:function(t,e){var n=mn(t,\"x\",\"reverse\");return C(2===n.rank,(function(){return\"Error in reverse2D: x must be rank 2 but got rank \"+n.rank+\".\"})),ol(n,e)}}),sl=An({reverse3d_:function(t,e){var n=mn(t,\"x\",\"reverse\");return C(3===n.rank,(function(){return\"Error in reverse3D: x must be rank 3 but got rank \"+n.rank+\".\"})),ol(n,e)}}),ul=An({reverse4d_:function(t,e){var n=mn(t,\"x\",\"reverse\");return C(4===n.rank,(function(){return\"Error in reverse4D: x must be rank 4 but got rank \"+n.rank+\".\"})),ol(n,e)}});function cl(t,e,n,r,o,a){var i=mn(t,\"x\",\"maxPool\"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),C(4===s.rank,(function(){return\"Error in maxPool: input must be rank 4 but got rank \"+s.rank+\".\"})),C(Mo(n,r),(function(){return\"Error in maxPool: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+r+\"'\"})),null!=a&&C(A(o),(function(){return\"Error in maxPool: pad must be an integer when using, dimRoundingMode \"+a+\" but got pad \"+o+\".\"}));var c=Io(s.shape,e,n,r,o,a);if(1===c.filterWidth&&1===c.filterHeight&&S(c.inShape,c.outShape))return i.clone();var l=[s],h=Lt.runKernelFunc((function(t,e){var n=t.maxPool(s,c);return e([s,n]),n}),{x:s},(function(t,a){var i=a[0],s=a[1];return{x:function(){return function(t,e,n,r,o,a,i,s){var u=mn(t,\"dy\",\"maxPoolBackprop\"),c=mn(e,\"input\",\"maxPoolBackprop\"),l=mn(n,\"output\",\"maxPoolBackprop\");C(c.rank===u.rank,(function(){return\"Rank of input (\"+c.rank+\") does not match rank of dy (\"+u.rank+\")\"})),null==a&&(a=[1,1]);C(Mo(o,a),(function(){return\"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides \"+o+\" and dilations '\"+a+\"'\"})),C(4===u.rank,(function(){return\"Error in maxPoolBackprop: dy must be rank 4 but got rank \"+u.rank+\".\"})),C(4===c.rank,(function(){return\"Error in maxPoolBackprop: input must be rank 4 but got rank \"+c.rank+\".\"})),null!=s&&C(A(i),(function(){return\"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode \"+s+\" but got pad \"+i+\".\"}));var h=Io(c.shape,r,o,a,i,s);return Lt.runKernelFunc((function(t){return t.maxPoolBackprop(u,c,l,h)}),{$dy:u,$input:c})}(t,i,s,e,n,r,o)}}}),\"MaxPool\",c,l);return u?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}function ll(t,e,n,r,o,a){var i=mn(t,\"x\",\"avgPool\",\"float32\");null==r&&(r=[1,1]),C(Mo(n,r),(function(){return\"Error in avgPool: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+r+\"'\"}));var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),C(4===s.rank,(function(){return\"Error in avgPool: x must be rank 4 but got rank \"+s.rank+\".\"})),null!=a&&C(A(o),(function(){return\"Error in avgPool: pad must be an integer when using, dimRoundingMode \"+a+\" but got pad \"+o+\".\"}));var c=Io(s.shape,e,n,r,o,a);if(1===c.filterWidth&&1===c.filterHeight&&S(c.inShape,c.outShape))return i.clone();var l=Lt.runKernelFunc((function(t){return t.avgPool(s,c)}),{x:s},(function(t){return{x:function(){return function(t,e,n,r,o,a){var i=mn(t,\"dy\",\"avgPoolBackprop\"),s=mn(e,\"input\",\"avgPoolBackprop\");C(s.rank===i.rank,(function(){return\"Rank of input (\"+s.rank+\") does not match rank of dy (\"+i.rank+\")\"})),null==o&&(o=[1,1]);C(Mo(r,o),(function(){return\"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides \"+r+\" and dilations '\"+o+\"'\"}));var u=s,c=i,l=!1;3===s.rank&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),c=i.as4D(1,i.shape[0],i.shape[1],i.shape[2]));C(4===c.rank,(function(){return\"Error in avgPoolBackprop: dy must be rank 4 but got rank \"+c.rank+\".\"})),C(4===u.rank,(function(){return\"Error in avgPoolBackprop: input must be rank 4 but got rank \"+u.rank+\".\"}));var h=Io(u.shape,n,r,o,a),f=Lt.runKernelFunc((function(t){return t.avgPoolBackprop(c,u,h)}),{dy4D:c,input4D:u});if(l)return f.as3D(f.shape[1],f.shape[2],f.shape[3]);return f}(t,s,e,n,r,o)}}}),\"AvgPool\",c);return l=l.cast(i.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}var hl=An({maxPool_:function(t,e,n,r,o){return cl(t,e,n,1,r,o)}}),fl=An({avgPool_:function(t,e,n,r,o){return ll(t,e,n,1,r,o)}}),dl=An({pool_:function(t,e,n,r,o,a){null==o&&(o=[1,1]),null==a&&(a=1),0===r&&(r=\"valid\");var i=mn(t,\"x\",\"maxPool\"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),C(Mo(a,o),(function(){return\"Error in pool: Either strides or dilations must be 1. Got strides \"+a+\" and dilations '\"+o+\"'\"}));var c,l=Io(s.shape,e,a,o,r),h=[l.dilationHeight,l.dilationWidth];c=\"same\"===r?function(t,e){var n=t.map((function(t,n){return t+(t-1)*(e[n]-1)})).map((function(t){return t-1})),r=n.map((function(t){return Math.floor(t/2)})),o=n.map((function(t,e){return t-r[e]}));return n.map((function(t,e){return[r[e],o[e]]}))}([l.filterHeight,l.filterWidth],h):[[0,0],[0,0]];var f=1===h[0]&&1===h[1],d=function(t,e,n){var r=n.map((function(t){return t[0]})),o=n.map((function(t){return t[1]})),a=t.concat(r,o),i=e.map((function(t,e){return(t-a[e]%t)%t})),s=o.map((function(t,e){return t+i[e]})),u=e.map((function(t,e){return[r[e],s[e]]})),c=e.map((function(t,e){return[0,i[e]]}));return[u,c]}([l.inHeight,l.inWidth],h,c),p=d[0],v=d[1],m=f?r:\"valid\",g=f?s:Mr(s,h,p),y=(\"avg\"===n?function(){return ll(g,e,a,1,m)}:function(){return cl(g,e,a,1,m)})(),x=f?y:vr(y,h,v);return u?x.as3D(x.shape[1],x.shape[2],x.shape[3]):x}}),pl=An({maxPool3d_:function(t,e,n,r,o,a,i){void 0===a&&(a=\"NDHWC\");var s=mn(t,\"x\",\"maxPool3d\"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),C(5===u.rank,(function(){return\"Error in maxPool3d: x must be rank 5 but got rank \"+u.rank+\".\"})),C(\"NDHWC\"===a,(function(){return\"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of \"+a})),C(Mo(n,i),(function(){return\"Error in maxPool3d: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+i+\"'\"})),null!=o&&C(A(r),(function(){return\"Error in maxPool3d: pad must be an integer when using, dimRoundingMode \"+o+\" but got pad \"+r+\".\"}));var l=ko(u.shape,e,n,i,r,o,a),h=Lt.runKernelFunc((function(t,e){var n=t.maxPool3d(u,l);return e([u,n]),n}),{x:u},(function(t,a){var s=a[0],u=a[1];return{x:function(){return function(t,e,n,r,o,a,i,s){var u=mn(t,\"dy\",\"maxPool3dBackprop\"),c=mn(e,\"input\",\"maxPool3dBackprop\"),l=mn(n,\"output\",\"maxPool3dBackprop\"),h=u,f=c,d=l,p=!1;4===c.rank&&(p=!0,h=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),f=c.as5D(1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]),d=l.as5D(1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]));C(5===h.rank,(function(){return\"Error in maxPool3dBackprop: dy must be rank 5 but got rank \"+h.rank+\".\"})),C(5===f.rank,(function(){return\"Error in maxPool3dBackprop: input must be rank 5 but got rank \"+f.rank+\".\"})),C(5===d.rank,(function(){return\"Error in maxPool3dBackprop: output must be rank 5 but got rank \"+d.rank+\".\"})),null==a&&(a=[1,1,1]);C(Mo(o,a),(function(){return\"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides \"+o+\" and dilations '\"+a+\"'\"})),null!=s&&C(A(i),(function(){return\"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode \"+s+\" but got pad \"+i+\".\"}));var v=ko(f.shape,r,o,a,i,s),m=Lt.runKernelFunc((function(t){return t.maxPool3dBackprop(h,f,d,v)}),{dy5D:h,input5D:f});if(p)return m.as4D(m.shape[1],m.shape[2],m.shape[3],m.shape[4]);return m}(t,s,u,e,n,i,r,o)}}}));return c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}}),vl=An({avgPool3d_:function(t,e,n,r,o,a,i){void 0===a&&(a=\"NDHWC\");var s=mn(t,\"x\",\"avgPool3d\",\"float32\"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),C(5===u.rank,(function(){return\"Error in avgPool3d: x must be rank 5 but got rank \"+u.rank+\".\"})),C(\"NDHWC\"===a,(function(){return\"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of \"+a})),C(Mo(n,i),(function(){return\"Error in avgPool3d: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+i+\"'\"})),null!=o&&C(A(r),(function(){return\"Error in avgPool3d: pad must be an integer when using, dimRoundingMode \"+o+\" but got pad \"+r+\".\"}));var l=ko(u.shape,e,n,i,r,o,a),h=Lt.runKernelFunc((function(t){return t.avgPool3d(u,l)}),{x:u},(function(t){return{x:function(){return function(t,e,n,r,o,a,i){var s=mn(t,\"dy\",\"avgPool3dBackprop\"),u=mn(e,\"input\",\"avgPool3dBackprop\"),c=s,l=u,h=!1;4===u.rank&&(h=!0,c=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]));C(5===c.rank,(function(){return\"Error in avgPool3dBackprop: dy must be rank 5 but got rank \"+c.rank+\".\"})),C(5===l.rank,(function(){return\"Error in avgPool3dBackprop: input must be rank 5 but got rank \"+l.rank+\".\"})),null==o&&(o=[1,1,1]);C(Mo(r,o),(function(){return\"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides \"+r+\" and dilations '\"+o+\"'\"})),null!=i&&C(A(a),(function(){return\"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode \"+i+\" but got pad \"+a+\".\"}));var f=ko(l.shape,n,r,o,a,i),d=Lt.runKernelFunc((function(t){return t.avgPool3dBackprop(c,l,f)}),{dy5D:c,input5D:l});if(h)return d.as4D(d.shape[1],d.shape[2],d.shape[3],d.shape[4]);return d}(t,u,e,n,i,r,o)}}}));return h=h.cast(u.dtype),c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}});var ml=An({slice_:function(t,e,n){var r,o,a=mn(t,\"x\",\"slice\");if(0===a.rank)throw new Error(\"Slicing scalar is not possible\");(r=\"number\"==typeof e?[e].concat(new Array(a.rank-1).fill(0)):e.length=0?t:(C(-1===t,(function(){return\"Negative size values should be exactly -1 but got \"+t+\" for the slice() size at index \"+e+\".\"})),a.shape[e]-r[e])})),eo(a,r,o);var i=a.shape,s={begin:r,size:o};return Lt.runKernelFunc((function(t){return t.slice(a,r,o)}),{x:a},(function(t){for(var e=[],n=0;n0&&(e=e.sum(a)),e.reshape(r.shape)}}}),\"Prelu\")}}),Bl=An({relu_:function(t){var e=mn(t,\"x\",\"relu\");return\"bool\"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mulStrict(n.step().toFloat())}}}),\"Relu\")}}),Pl=An({relu6_:function(t){var e=mn(t,\"x\",\"relu6\");return\"bool\"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu6(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0],r=n.lessEqual(6).mul(n.step());return{x:function(){return t.mulStrict(r.toFloat())}}}),\"Relu6\")}}),Ll=An({selu_:function(t){var e=mn(t,\"x\",\"selu\");return Lt.runKernelFunc((function(t,n){var r=t.selu(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){var e=n.greater(On(0)),r=On(bs),o=On(ws),a=t.mul(o),i=t.mul(r).mul(n.toFloat().exp());return ec(e,a,i)}}}))}});var Wl=An({transpose_:function(t,e){var n=mn(t,\"x\",\"transpose\");if(null==e&&(e=n.shape.map((function(t,e){return e})).reverse()),C(n.rank===e.length,(function(){return\"Error in transpose: rank of input \"+n.rank+\" must match length of perm \"+e+\".\"})),e.forEach((function(t){C(t>=0&&to)throw new Error(\"'k' passed to topk() must be <= the last dimension (\"+o+\") but got \"+e);var a=Lt.runKernelFunc((function(t){return t.topk(r,e,n)}),{$x:r});return{values:a[0],indices:a[1]}}});var jl=An({scatterND_:function(t,e,n){var r=mn(t,\"indices\",\"scatterND\",\"int32\"),o=mn(e,\"updates\",\"scatterND\");return Jr(o,r,n),Lt.runKernelFunc((function(t){return t.scatterND(r,o,n)}),{indices:r,updates:o},null,\"ScatterNd\",{shape:n})}});var Xl=An({fft_:function(t){C(\"complex64\"===t.dtype,(function(){return\"The dtype for tf.spectral.fft() must be complex64 but got \"+t.dtype+\".\"}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.fft(r)}),{input:t}).reshape(t.shape)}}),Yl=An({ifft_:function(t){C(\"complex64\"===t.dtype,(function(){return\"The dtype for tf.spectral.ifft() must be complex64 but got \"+t.dtype+\".\"}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.ifft(r)}),{input:t}).reshape(t.shape)}}),$l=An({rfft_:function(t,e){C(\"float32\"===t.dtype,(function(){return\"The dtype for rfft() must be real value but got \"+t.dtype}));var n,r=t.shape[t.shape.length-1],o=t.size/r;if(null!=e&&er){var s=t.shape.map((function(t){return t}));s[t.shape.length-1]=e-r,n=t.concat(Gn(s),t.shape.length-1),r=e}else n=t;var u=n.zerosLike(),c=Dn(n,u).as2D(o,r),l=Xl(c),h=Math.floor(r/2)+1,f=Tn(l),d=Nn(l),p=f.split([h,r-h],f.shape.length-1),v=d.split([h,r-h],d.shape.length-1),m=n.shape.slice();return m[n.shape.length-1]=h,Dn(p[0],v[0]).reshape(m)}}),Ql=An({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),o=Yl(r);return Tn(o)}var a=[n,2*(e-1)],i=Tn(t).as2D(n,e),s=Nn(t).as2D(n,e),u=i.slice([0,1],[n,e-2]).reverse(1),c=s.slice([0,1],[n,e-2]).reverse(1).mul(On(-1)),l=i.concat(u,1),h=s.concat(c,1);return r=Dn(l,h).as2D(a[0],a[1]),o=Yl(r),Tn(o)}}),Jl=Object.freeze({fft:Xl,ifft:Yl,rfft:$l,irfft:Ql});var Zl=An({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var o=mn(t,\"sparseIndices\",\"sparseToDense\",\"int32\"),a=mn(e,\"sparseValues\",\"sparseToDense\"),i=mn(r,\"defaultValue\",\"sparseToDense\",a.dtype);return function(t,e,n,r){if(\"int32\"!==t.dtype)throw new Error(\"tf.sparseToDense() expects the indices to be int32 type, but the dtype was \"+t.dtype+\".\");if(t.rank>2)throw new Error(\"sparseIndices should be a scalar, vector, or matrix, but got shape \"+t.shape+\".\");var o=t.rank>0?t.shape[0]:1,a=t.rank>1?t.shape[1]:1;if(n.length!==a)throw new Error(\"outputShape has incorrect number of elements:, \"+n.length+\", should be: \"+a+\".\");var i=e.size;if(0!==e.rank&&(1!==e.rank||i!==o))throw new Error(\"sparseValues has incorrect shape \"+e.shape+\", should be [] or [\"+o+\"]\");if(e.dtype!==r.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}(o,a,n,i),Lt.runKernelFunc((function(t){return t.sparseToDense(o,a,n,i)}),{$sparseIndices:o,$sparseValues:a,$defaultValue:i})}});var th=An({gatherND_:function(t,e){var n=mn(e,\"indices\",\"gatherND\",\"int32\"),r=mn(t,\"x\",\"gatherND\");return Lt.runKernelFunc((function(t){return t.gatherND(r,n)}),{x:r,indices:n},null,\"GatherNd\")}});var eh=An({diag_:function(t){var e=mn(t,\"x\",\"diag\").flatten(),n=t.shape.concat(t.shape);return Lt.runKernelFunc((function(t){return t.diag(e)}),{$x:e}).reshape(n)}});var nh=An({dropout_:function(t,e,n,r){var o=mn(t,\"x\",\"dropout\");if(C(\"float32\"===o.dtype,(function(){return\"x has to be a floating point tensor since it's going to be scaled, but got a \"+o.dtype+\" tensor instead.\"})),C(e>=0&&e<1,(function(){return\"rate must be a float in the range [0, 1), but got \"+e+\".\"})),0===e)return t instanceof wt?o.clone():o;var a=function(t,e){if(null==e)return t.shape.slice();if(S(t.shape,e))return e;if(t.shape.length===e.length){for(var n=[],r=0;r1,(function(){return\"inTopK() expects the predictions to be of rank 2 or higher, but got \"+n.rank})),C(n.rank-1===a.rank,(function(){return\"predictions rank should be 1 larger than targets rank, but got predictions rank \"+n.rank+\" and targets rank \"+a.rank})),E(n.shape.slice(0,n.shape.length-1),a.shape,\"predictions's shape should be align with the targets' shape, except the last dimension.\"),i=n.shape[n.shape.length-1],C(o>0&&o<=i,(function(){return\"'k' passed to inTopK() must be > 0 && <= the predictions last dimension (\"+i+\"), but got \"+o})),[4,n.data()];case 1:return s=r.sent(),[4,a.data()];case 2:for(u=r.sent(),c=[s.length/i,i],h=c[1],f=B(\"bool\",l=c[0]),d=0;d1?s.div(On(i)):s}if(n===ch.SUM_BY_NONZERO_WEIGHTS){if(null==o)return a.sum().div(On(r.size));var u=o.mul(zn(r.shape)).notEqual(On(0)).sum().toFloat();return a.sum().div(u)}throw Error(\"Unknown reduction: \"+n)}}),dh=An({cosineDistance_:function(t,e,n,r,o){void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,\"labels\",\"cosineDistance\"),i=mn(e,\"predictions\",\"cosineDistance\"),s=null;null!=r&&(s=mn(r,\"weights\",\"cosineDistance\")),E(a.shape,i.shape,\"Error in cosineDistance: \");var u=On(1).sub(a.mul(i).sum(n,!0));return fh(u,s,o)}}),ph=An({hingeLoss_:function(t,e,n,r){void 0===r&&(r=ch.SUM_BY_NONZERO_WEIGHTS);var o=mn(t,\"labels\",\"hingeLoss\"),a=mn(e,\"predictions\",\"hingeLoss\"),i=null;null!=n&&(i=mn(n,\"weights\",\"hingeLoss\")),E(o.shape,a.shape,\"Error in hingeLoss: \");var s=On(1);o=On(2).mul(o).sub(s);var u=s.sub(o.mul(a)).relu();return fh(u,i,r)}}),vh=An({huberLoss_:function(t,e,n,r,o){void 0===r&&(r=1),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,\"labels\",\"huberLoss\"),i=mn(e,\"predictions\",\"huberLoss\"),s=null;null!=n&&(s=mn(n,\"weights\",\"huberLoss\")),E(a.shape,i.shape,\"Error in huberLoss: \");var u=On(r),c=i.sub(a).abs(),l=dc(c,u),h=c.sub(l),f=On(.5).mul(l.square()).add(u.mul(h));return fh(f,s,o)}}),mh=An({logLoss_:function(t,e,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,\"labels\",\"logLoss\"),i=mn(e,\"predictions\",\"logLoss\"),s=null;null!=n&&(s=mn(n,\"weights\",\"logLoss\")),E(a.shape,i.shape,\"Error in logLoss: \");var u=On(1),c=On(r),l=a.mul(i.add(c).log()).neg().sub(u.sub(a).mul(u.sub(i).add(c).log()));return fh(l,s,o)}}),gh=An({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=ch.SUM_BY_NONZERO_WEIGHTS);var o=mn(t,\"labels\",\"meanSquaredError\"),a=mn(e,\"predictions\",\"meanSquaredError\"),i=null;null!=n&&(i=mn(n,\"weights\",\"meanSquaredError\")),E(o.shape,a.shape,\"Error in meanSquaredError: \");var s=o.squaredDifference(a);return fh(s,i,r)}}),yh=An({sigmoidCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,\"multiClassLabels\",\"sigmoidCrossEntropy\"),i=mn(e,\"logits\",\"sigmoidCrossEntropy\"),s=null;if(null!=n&&(s=mn(n,\"weights\",\"sigmoidCrossEntropy\")),E(a.shape,i.shape,\"Error in sigmoidCrossEntropy: \"),r>0){var u=On(r),c=On(1),l=On(.5);a=a.mul(c.sub(u)).add(l.mul(u))}var h=function(t,e){var n=mn(t,\"labels\",\"sigmoidCrossEntropyWithLogits\"),r=mn(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");E(n.shape,r.shape,\"Error in sigmoidCrossEntropyWithLogits: \");var o=r.relu(),a=r.mul(n),i=r.abs().neg().exp().log1p();return o.sub(a).add(i)}(a,i);return fh(h,s,o)}}),xh=An({softmaxCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,\"onehotLabels\",\"softmaxCrossEntropy\"),i=mn(e,\"logits\",\"softmaxCrossEntropy\"),s=null;if(null!=n&&(s=mn(n,\"weights\",\"softmaxCrossEntropy\")),E(a.shape,i.shape,\"Error in softmaxCrossEntropy: \"),r>0){var u=On(r),c=On(1),l=On(a.shape[1]);a=a.mul(c.sub(u)).add(u.div(l))}var h=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error(\"Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank \"+e.rank+\" and dim was \"+n);return vo((function(t,e,r){var o=e.logSumExp([n],!0),a=e.toFloat().sub(o);r([t,a]);return{value:a.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],o=e[1],a=wn(t.shape,[n]);return[t.reshape(a).mul(r.toFloat().sub(o.exp())),t.reshape(a).mul(o.exp().sub(r.toFloat()))]}}}))(t,e)}(a,i);return fh(h,s,o)}}),bh=Object.freeze({get Reduction(){return ch},absoluteDifference:hh,computeWeightedLoss:fh,cosineDistance:dh,hingeLoss:ph,huberLoss:vh,logLoss:mh,meanSquaredError:gh,sigmoidCrossEntropy:yh,softmaxCrossEntropy:xh});function wh(t,e){return void 0===e&&(e=!1),Lt.tidy((function(){if(2!==t.shape.length)throw new Error(\"qr2d() requires a 2D Tensor, but got a \"+t.shape.length+\"D Tensor.\");for(var n=t.shape[0],r=t.shape[1],o=Cr(n),a=t.clone(),i=Bn([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,c=function(t){var e,u=a,c=s,l=o;e=Lt.tidy((function(){var e=a.slice([t,t],[n-t,1]),u=e.norm(),c=a.slice([t,t],[1,1]),l=Bn([[-1]]).where(c.greater(0),Bn([[1]])),h=c.sub(l.mul(u)),f=e.div(h);s=1===f.shape[0]?i.clone():i.concat(f.slice([1,0],[f.shape[0]-1,f.shape[1]]),0);var d=l.matMul(h).div(u).neg(),p=a.slice([t,0],[n-t,r]),v=d.mul(s);if(0===t)a=p.sub(v.matMul(s.transpose().matMul(p)));else{var m=p.sub(v.matMul(s.transpose().matMul(p)));a=a.slice([0,0],[t,r]).concat(m,0)}var g=o.slice([0,t],[n,o.shape[1]-t]);if(0===t)o=g.sub(g.matMul(s).matMul(v.transpose()));else{var y=g.sub(g.matMul(s).matMul(v.transpose()));o=o.slice([0,0],[n,t]).concat(y,1)}return[s,a,o]})),s=e[0],a=e[1],o=e[2],tn([u,c,l])},l=0;lr&&(o=o.slice([0,0],[n,r]),a=a.slice([0,0],[r,r])),[o,a]}))}var Ch=An({bandPart_:function(t,e,n){if(e%1!=0)throw new Error(\"bandPart(): numLower must be an integer, got \"+e+\".\");if(n%1!=0)throw new Error(\"bandPart(): numUpper must be an integer, got \"+n+\".\");var r=mn(t,\"a\",\"bandPart\");if(r.rank<2)throw new Error(\"bandPart(): Rank must be at least 2, got \"+r.rank+\".\");var o=r.shape,a=r.shape.slice(-2),i=a[0],s=a[1];if(!(e<=i))throw new Error(\"bandPart(): numLower (\"+e+\") must not be greater than the number of rows (\"+i+\").\");if(!(n<=s))throw new Error(\"bandPart(): numUpper (\"+n+\") must not be greater than the number of columns (\"+s+\").\");e<0&&(e=i),n<0&&(n=s);var u=Kn(0,i,1,\"int32\").reshape([-1,1]),c=Kn(0,s,1,\"int32\"),l=Cc(u,c),h=Qu(l.lessEqual(On(+e,\"int32\")),l.greaterEqual(On(-n,\"int32\"))),f=Gn([i,s],r.dtype);return Pr(Ur(r.reshape([-1,i,s])).map((function(t){return ec(h,t,f)}))).reshape(o)}}),Eh=An({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,C(null!=t&&t.length>0,(function(){return\"Gram-Schmidt process: input must not be null, undefined, or empty\"}));for(var n=t[0].shape[0],r=function(e){C(t[e].shape[0]===n,(function(){return\"Gram-Schmidt: Non-unique lengths found in the input vectors: (\"+t[e].shape[0]+\" vs. \"+n+\")\"}))},o=1;o0)for(var n=0;n= 2, but got rank \"+t.rank);if(2===t.rank)return wh(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce((function(t,e){return t*e})),r=Ur(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),o=[],a=[];return r.forEach((function(t){var n=wh(t,e),r=n[0],i=n[1];o.push(r),a.push(i)})),[Pr(o,0).reshape(t.shape),Pr(a,0).reshape(t.shape)]}}),Ih=Object.freeze({bandPart:Ch,gramSchmidt:Eh,qr:Rh});function kh(t,e,n,r,o,a){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY),null==a&&(a=0);var i=t.shape[0];return n=Math.min(n,i),C(0<=r&&r<=1,(function(){return\"iouThreshold must be in [0, 1], but was '\"+r+\"'\"})),C(2===t.rank,(function(){return\"boxes must be a 2D tensor, but was of rank '\"+t.rank+\"'\"})),C(4===t.shape[1],(function(){return\"boxes must have 4 columns, but 2nd dimension was \"+t.shape[1]})),C(1===e.rank,(function(){return\"scores must be a 1D tensor\"})),C(e.shape[0]===i,(function(){return\"scores has incompatible shape with boxes. Expected \"+i+\", but was \"+e.shape[0]})),C(0<=a&&a<=1,(function(){return\"softNmsSigma must be in [0, 1], but was '\"+a+\"'\"})),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:a}}var Sh=An({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=mn(t,\"images\",\"resizeBilinear\");C(3===r.rank||4===r.rank,(function(){return\"Error in resizeBilinear: x must be rank 3 or 4, but got rank \"+r.rank+\".\"})),C(2===e.length,(function(){return\"Error in resizeBilinear: new shape must 2D, but got shape \"+e+\".\"}));var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([o]),t.resizeBilinear(o,i,s,n)}),{x:o},(function(t,e){return{x:function(){return Lt.runKernelFunc((function(r){return r.resizeBilinearBackprop(t,e[0],n)}),{})}}}),\"ResizeBilinear\",{alignCorners:n,newHeight:i,newWidth:s});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Ah=An({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=mn(t,\"images\",\"resizeNearestNeighbor\");C(3===r.rank||4===r.rank,(function(){return\"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank \"+r.rank+\".\"})),C(2===e.length,(function(){return\"Error in resizeNearestNeighbor: new shape must 2D, but got shape \"+e+\".\"})),C(\"float32\"===r.dtype||\"int32\"===r.dtype,(function(){return\"`images` must have `int32` or `float32` as dtype\"}));var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([o]),t.resizeNearestNeighbor(o,i,s,n)}),{batchImages:o},(function(t,e){return{batchImages:function(){return Lt.runKernelFunc((function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)}),{})}}}));return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Dh=An({nonMaxSuppression_:function(t,e,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var a=mn(t,\"boxes\",\"nonMaxSuppression\"),i=mn(e,\"scores\",\"nonMaxSuppression\"),s=kh(a,i,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;var u={maxOutputSize:n,iouThreshold:r,scoreThreshold:o};return Lt.runKernelFunc((function(t){return t.nonMaxSuppression(a,i,n,r,o)}),{boxes:a,scores:i},null,\"NonMaxSuppressionV3\",u)}}),Th=function(t,e,o,a,i){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),n(this,void 0,void 0,(function(){var n,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return n=mn(t,\"boxes\",\"nonMaxSuppressionAsync\"),s=mn(e,\"scores\",\"nonMaxSuppressionAsync\"),u=kh(n,s,o,a,i),o=u.maxOutputSize,a=u.iouThreshold,i=u.scoreThreshold,[4,Promise.all([n.data(),s.data()])];case 1:return c=r.sent(),l=c[0],h=c[1],f=jo(l,h,o,a,i),n!==t&&n.dispose(),s!==e&&s.dispose(),[2,f]}}))}))},Nh=An({nonMaxSuppressionWithScore_:function(t,e,n,r,o,a){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY),void 0===a&&(a=0);var i=mn(t,\"boxes\",\"nonMaxSuppression\"),s=mn(e,\"scores\",\"nonMaxSuppression\"),u=kh(i,s,n,r,o,a),c={maxOutputSize:n=u.maxOutputSize,iouThreshold:r=u.iouThreshold,scoreThreshold:o=u.scoreThreshold,softNmsSigma:a=u.softNmsSigma},l=Lt.runKernel(\"NonMaxSuppressionV5\",{boxes:i,scores:s},c);return{selectedIndices:l[0],selectedScores:l[1]}}}),Fh=function(t,e,o,a,i,s){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===s&&(s=0),n(this,void 0,void 0,(function(){var n,u,c,l,h,f,d;return r(this,(function(r){switch(r.label){case 0:return n=mn(t,\"boxes\",\"nonMaxSuppressionAsync\"),u=mn(e,\"scores\",\"nonMaxSuppressionAsync\"),c=kh(n,u,o,a,i,s),o=c.maxOutputSize,a=c.iouThreshold,i=c.scoreThreshold,s=c.softNmsSigma,[4,Promise.all([n.data(),u.data()])];case 1:return l=r.sent(),h=l[0],f=l[1],d=Xo(h,f,o,a,i,s),n!==t&&n.dispose(),u!==e&&u.dispose(),[2,d]}}))}))},_h=An({cropAndResize_:function(t,e,n,r,o,a){var i=mn(t,\"image\",\"cropAndResize\"),s=mn(e,\"boxes\",\"cropAndResize\",\"float32\"),u=mn(n,\"boxInd\",\"cropAndResize\",\"int32\");o=o||\"bilinear\",a=a||0;var c=s.shape[0];return C(4===i.rank,(function(){return\"Error in cropAndResize: image must be rank 4,but got rank \"+i.rank+\".\"})),C(2===s.rank&&4===s.shape[1],(function(){return\"Error in cropAndResize: boxes must be have size [\"+c+\",4] but had shape \"+s.shape+\".\"})),C(1===u.rank&&u.shape[0]===c,(function(){return\"Error in cropAndResize: boxInd must be have size [\"+c+\"] but had shape \"+s.shape+\".\"})),C(2===r.length,(function(){return\"Error in cropAndResize: cropSize must be of length 2, but got length \"+r.length+\".\"})),C(r[0]>=1&&r[1]>=1,(function(){return\"cropSize must be atleast [1,1], but was \"+r})),C(\"bilinear\"===o||\"nearest\"===o,(function(){return\"method must be bilinear or nearest, but was \"+o})),Lt.runKernelFunc((function(t,e){return t.cropAndResize(i,s,u,r,o,a)}),{images:i,boxes:s,boxInd:u},null,\"CropAndResize\",{method:o,extrapolationValue:a,cropSize:r})}}),Oh=Object.freeze({resizeBilinear:Sh,resizeNearestNeighbor:Ah,nonMaxSuppression:Dh,nonMaxSuppressionAsync:Th,nonMaxSuppressionWithScore:Nh,nonMaxSuppressionWithScoreAsync:Fh,cropAndResize:_h}),Mh=function(t,e){return!(t>0)||\"linear\"===e},Bh=function(t,e,n){if(null==n||\"linear\"===n)return t;if(\"relu\"===n)return t.mul(e.step());throw new Error(\"Gradient for activation \"+n+\" has not been implemented yet.\")},Ph=function(t,e){var n=e,r=Eo(t.shape,e.shape);return r.length>0&&(n=n.sum(r)),n.reshape(t.shape)},Lh=function(t,e,n){if(\"linear\"===e)return t;if(\"relu\"===e)return Bl(t);if(\"elu\"===e)return _l(t);if(\"relu6\"===e)return Pl(t);if(\"prelu\"===e)return Ml(t,n);throw new Error(\"Unknown fused activation \"+e+\".\")};var Wh=An({fusedMatMul_:function(t){var e,n=t.a,r=t.b,o=t.transposeA,a=void 0!==o&&o,i=t.transposeB,s=void 0!==i&&i,u=t.bias,c=t.activation,l=void 0===c?\"linear\":c,h=t.preluActivationWeights;if(!1===Mh(Lt.state.gradientDepth,l)){var f=el(n,r,a,s);return null!=u&&(f=rc(f,u)),Lh(f,l,h)}var d=mn(n,\"a\",\"fused matMul\"),p=mn(r,\"b\",\"fused matMul\");e=Nt(d,p),d=e[0],p=e[1];var v=a?d.shape[d.rank-2]:d.shape[d.rank-1],m=s?p.shape[p.rank-1]:p.shape[p.rank-2],g=a?d.shape[d.rank-1]:d.shape[d.rank-2],y=s?p.shape[p.rank-2]:p.shape[p.rank-1],x=d.shape.slice(0,-2),b=p.shape.slice(0,-2),w=k(x),E=k(b);C(d.rank>=2&&p.rank>=2&&d.rank===p.rank,(function(){return\"Error in fused matMul: inputs must have the same rank of at least 2, got ranks \"+d.rank+\" and \"+p.rank+\".\"})),C(S(x,b),(function(){return\"Error in fused matMul: outer dimensions (\"+x+\") and (\"+b+\") of Tensors with shapes \"+d.shape+\" and \"+p.shape+\" must match.\"})),C(v===m,(function(){return\"Error in fused matMul: inner shapes (\"+v+\") and (\"+m+\") of Tensors with shapes \"+d.shape+\" and \"+p.shape+\" and transposeA=\"+a+\" and transposeB=\"+s+\" must match.\"}));var R,I,A=d.shape.slice(0,-2).concat([g,y]),D=a?d.as3D(w,v,g):d.as3D(w,g,v),T=s?p.as3D(E,y,m):p.as3D(E,m,y);null!=u&&Ro(A,(R=Nt(R=mn(u,\"bias\",\"fused matMul\"),d)[0]).shape),null!=h&&(I=mn(h,\"prelu weights\",\"fused matMul\"));var N={a:D,b:T};null!=u&&(N.bias=R),null!=h&&(N.preluActivationWeights=I);var F=[D,T];return Lt.runKernelFunc((function(t,e){var n=t.fusedBatchMatMul({a:D,b:T,transposeA:a,transposeB:s,bias:R,activation:l,preluActivationWeights:I});return e([D,T,n]),n}),N,(function(t,e){var n=e[0],r=e[1],o=e[2],i=Bh(t,o,l),c={};return null!=u&&(c={bias:function(){return Ph(R,i)}}),a||s?!a&&s?Object.assign({a:function(){return i.matMul(r,!1,!1)},b:function(){return i.matMul(n,!0,!1)}},c):a&&!s?Object.assign({a:function(){return r.matMul(i,!1,!0)},b:function(){return n.matMul(i,!1,!1)}},c):Object.assign({a:function(){return r.matMul(i,!0,!0)},b:function(){return i.matMul(n,!0,!0)}},c):Object.assign({a:function(){return i.matMul(r,!1,!0)},b:function(){return n.matMul(i,!0,!1)}},c)}),\"_FusedMatMul\",{transposeA:a,transposeB:s,activation:l},F,[!0]).reshape(A)}}),Uh=An({fusedConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,o=t.pad,a=t.dataFormat,i=void 0===a?\"NHWC\":a,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,h=t.activation,f=void 0===h?\"linear\":h,d=t.preluActivationWeights;if(f=f||\"linear\",!1===Mh(Lt.state.gradientDepth,f)){var p=qc(e,n,r,o,i,u,c);return null!=l&&(p=rc(p,l)),Lh(p,f,d)}var v=mn(e,\"x\",\"conv2d\"),m=mn(n,\"filter\",\"conv2d\"),g=v,y=!1;3===v.rank&&(y=!0,g=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),C(4===g.rank,(function(){return\"Error in fused conv2d: input must be rank 4, but got rank \"+g.rank+\".\"})),C(4===m.rank,(function(){return\"Error in fused conv2d: filter must be rank 4, but got rank \"+m.rank+\".\"})),null!=c&&C(A(o),(function(){return\"Error in fused conv2d: pad must be an integer when using, dimRoundingMode \"+c+\" but got pad \"+o+\".\"})),C(g.shape[3]===m.shape[2],(function(){return\"Error in conv2d: depth of input (\"+g.shape[3]+\") must match input depth for filter \"+m.shape[2]+\".\"})),C(Mo(r,u),(function(){return\"Error in conv2D: Either strides or dilations must be 1. Got strides \"+r+\" and dilations '\"+u+\"'\"})),C(\"NHWC\"===i,(function(){return\"Error in conv2d: got dataFormat of \"+i+\" but only NHWC is currently supported.\"}));var x,b,w=So(g.shape,m.shape,r,u,o,c);null!=l&&(x=Nt(x=mn(l,\"bias\",\"fused conv2d\"),v)[0],Ro(w.outShape,x.shape)),null!=d&&(b=mn(d,\"prelu weights\",\"fused conv2d\"));var E={x:g,filter:m};null!=l&&(E.bias=x),null!=d&&(E.preluActivationWeights=b);var R=[m,g],I=Lt.runKernelFunc((function(t,e){var n=t.fusedConv2d({input:g,filter:m,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([m,g,n]),n}),E,(function(t,e){var n=e,a=n[0],i=n[1],s=n[2],c=Bh(t,s,f);C(Oo(u),(function(){return\"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '\"+u+\"'\"}));var h={};return null!=l&&(h={bias:function(){return Ph(x,c)}}),Object.assign({x:function(){return Xc(i.shape,c,a,r,o)},filter:function(){return jc(i,c,a.shape,r,o)}},h)}),\"FusedConv2D\",{convInfo:w,activation:f},R,[!0]);return y?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),Vh=An({fusedDepthwiseConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,o=t.pad,a=t.dataFormat,i=void 0===a?\"NHWC\":a,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,h=t.activation,f=void 0===h?\"linear\":h,d=t.preluActivationWeights;if(!1===Mh(Lt.state.gradientDepth,f)){var p=Yc(e,n,r,o,i,u,c);return null!=l&&(p=rc(p,l)),Lh(p,f,d)}var v=mn(e,\"x\",\"depthwiseConv2d\"),m=mn(n,\"filter\",\"depthwiseConv2d\"),g=v,y=!1;3===v.rank&&(y=!0,g=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),C(4===g.rank,(function(){return\"Error in fused depthwiseConv2d: input must be rank 4, but got rank \"+g.rank+\".\"})),C(4===m.rank,(function(){return\"Error in fused depthwiseConv2d: filter must be rank 4, but got rank \"+m.rank+\".\"})),C(g.shape[3]===m.shape[2],(function(){return\"Error in fused depthwiseConv2d: number of input channels (\"+g.shape[3]+\") must match the inChannels dimension in filter \"+m.shape[2]+\".\"})),null==u&&(u=[1,1]),C(Mo(r,u),(function(){return\"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides \"+r+\" and dilations '\"+u+\"'\"})),null!=c&&C(A(o),(function(){return\"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode \"+c+\" but got pad \"+o+\".\"}));var x,b,w=So(g.shape,m.shape,r,u,o,c,!0);null!=l&&(x=Nt(x=mn(l,\"bias\",\"fused conv2d\"),v)[0],Ro(w.outShape,x.shape)),null!=d&&(b=mn(d,\"prelu weights\",\"fused depthwiseConv2d\"));var E={x:g,filter:m};null!=l&&(E.bias=x),null!=d&&(E.preluActivationWeights=b);var R=[m,g],I=Lt.runKernelFunc((function(t,e){var n=t.fusedDepthwiseConv2D({input:g,filter:m,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([m,g,n]),n}),E,(function(t,e){C(Oo(u),(function(){return\"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '\"+u+\"'\"}));var n=e[0],r=e[1],o=e[2],a=Bh(t,o,f),i={};return null!=l&&(i={bias:function(){return Ph(x,a)}}),Object.assign({x:function(){return $c(r.shape,a,n,w)},filter:function(){return Qc(r,a,n.shape,w)}},i)}),\"FusedDepthwiseConv2D\",{convInfo:w,activation:f},R,[!0]);return y?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),zh=Object.freeze({matMul:Wh,conv2d:Uh,depthwiseConv2d:Vh}),Gh=Object.freeze({image:Oh,linalg:Ih,losses:bh,spectral:Jl,fused:zh,signal:uh,square:tu,squaredDifference:nu,conv1d:Hc,conv2d:qc,conv3d:Kc,depthwiseConv2d:Yc,separableConv2d:Jc,conv2dTranspose:Zc,conv3dTranspose:tl,op:An,batchNormalization2d:Gu,batchNormalization3d:Hu,batchNormalization4d:qu,batchNormalization:Ku,batchNorm:ju,batchNorm2d:Xu,batchNorm3d:Yu,batchNorm4d:$u,booleanMaskAsync:Uc,complex:Dn,real:Tn,imag:Nn,concat:Yn,concat1d:$n,concat2d:Qn,concat3d:Jn,concat4d:Zn,split:tr,matMul:el,dot:nl,outerProduct:rl,reverse:ol,reverse1d:al,reverse2d:il,reverse3d:sl,reverse4d:ul,maxPool:hl,avgPool:fl,pool:dl,maxPool3d:pl,avgPool3d:vl,slice:ml,slice1d:gl,slice2d:yl,slice3d:xl,slice4d:bl,abs:ru,acos:ou,acosh:au,asin:iu,asinh:su,atan:uu,atanh:cu,ceil:lu,clipByValue:hu,cos:fu,cosh:du,erf:pu,exp:vu,expm1:mu,floor:gu,log:yu,log1p:xu,logSigmoid:bu,neg:wu,reciprocal:Cu,round:Eu,rsqrt:Ru,sigmoid:Iu,sign:ku,isNaN:Su,isInf:Au,isFinite:Du,sin:Tu,sinh:Nu,softplus:Fu,sqrt:_u,step:Ou,tan:Mu,tanh:Bu,all:Cl,any:El,argMax:Rl,argMin:Il,logSumExp:kl,max:Sl,mean:Al,min:Dl,moments:Tl,sum:Nl,prod:Fl,equal:Rc,equalStrict:Ic,greater:kc,greaterEqual:Sc,greaterEqualStrict:Ac,greaterStrict:Dc,less:Tc,lessEqual:Nc,lessEqualStrict:Fc,lessStrict:_c,notEqual:Oc,notEqualStrict:Mc,add:rc,addN:oc,addStrict:ac,atan2:ic,div:sc,divNoNan:uc,divStrict:cc,floorDiv:lc,maximum:hc,maximumStrict:fc,minimum:dc,minimumStrict:pc,mod:vc,modStrict:mc,mul:gc,mulStrict:yc,pow:xc,powStrict:bc,squaredDifferenceStrict:wc,sub:Cc,subStrict:Ec,elu:_l,leakyRelu:Ol,prelu:Ml,relu:Bl,relu6:Pl,selu:Ll,logicalAnd:Qu,logicalNot:Ju,logicalOr:Zu,logicalXor:tc,where:ec,whereAsync:nc,buffer:dr,print:pr,batchToSpaceND:vr,broadcastTo:mr,cast:gr,clone:yr,cumsum:xr,depthToSpace:br,expandDims:wr,eye:Cr,multinomial:Er,oneHot:Rr,pad:Ir,pad1d:kr,pad2d:Sr,pad3d:Ar,pad4d:Dr,rand:Tr,randomNormal:Nr,randomGamma:Fr,randomUniform:_r,reshape:Or,spaceToBatchND:Mr,squeeze:Br,stack:Pr,tile:Lr,truncatedNormal:Wr,unstack:Ur,setdiff1dAsync:Vr,fill:Hn,linspace:qn,ones:zn,range:Kn,scalar:On,tensor:Fn,tensor1d:Mn,tensor2d:Bn,tensor3d:Pn,tensor4d:Ln,tensor5d:Wn,tensor6d:Un,variable:Vn,zeros:Gn,onesLike:jn,zerosLike:Xn,transpose:Wl,softmax:go,logSoftmax:yo,localResponseNormalization:Ul,norm:Vl,gather:Lc,unsortedSegmentSum:Wc,basicLSTMCell:zl,multiRNNCell:Gl,movingAverage:Hl,stridedSlice:ql,topk:Kl,scatterND:jl,fft:Xl,ifft:Yl,rfft:$l,irfft:Ql,sparseToDense:Zl,gatherND:th,diag:eh,dropout:nh,hannWindow:oh,hammingWindow:ah,frame:ih,stft:sh,inTopKAsync:lh});function Hh(t,e){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&C(\"complex64\"!==t.dtype,(function(){return e+\" does not support complex64 tensors.\"}))}))}function qh(t,e,n,r){if(\"linear\"===n)return t.linear(e);if(\"relu\"===n)return t.relu(e);if(\"elu\"===n)return t.elu(e);if(\"relu6\"===n)return t.relu6(e);if(\"prelu\"===n)return t.prelu(e,r);throw new Error(\"Activation \"+n+\" has not been implemented for the CPU backend.\")}var Kh=function(t){function o(){var e=t.call(this)||this;return e.blockSize=48,e.firstUse=!0,e.data=new xo(e,Lt),e}return e(o,t),o.prototype.write=function(t,e,n){this.firstUse&&(this.firstUse=!1,i().get(\"IS_NODE\")&&dn(\"\\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 r={};return this.data.set(r,{values:t,dtype:n}),r},o.prototype.move=function(t,e,n,r){this.data.set(t,{values:e,dtype:r})},o.prototype.numDataIds=function(){return this.data.numDataIds()},o.prototype.read=function(t){return n(this,void 0,void 0,(function(){return r(this,(function(e){return[2,this.readSync(t)]}))}))},o.prototype.readSync=function(t){var e=this.data.get(t),n=e.dtype,r=e.complexTensors;return\"complex64\"===n?Vo(this.readSync(r.real.dataId),this.readSync(r.imag.dataId)):this.data.get(t).values},o.prototype.bufferSync=function(t){var e=this.readSync(t.dataId),n=e;if(\"string\"===t.dtype)try{n=e.map((function(t){return ot(t)}))}catch(t){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return dr(t.shape,t.dtype,n)},o.prototype.makeOutput=function(t,e,n){var r=this.write(t,e,n);return Lt.makeTensorFromDataId(r,e,n,this)},o.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)}},o.prototype.time=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){return e=et(),t(),[2,{kernelMs:et()-e}]}))}))},o.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.\"]}},o.prototype.complex=function(t,e){var n=this.makeOutput(null,t.shape,\"complex64\");return this.data.get(n.dataId).complexTensors={real:Lt.keep(t.clone()),imag:Lt.keep(e.clone())},n},o.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},o.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},o.prototype.slice=function(t,e,n){if(Hh(t,\"slice\"),io(t.shape,e,n)){var r=so(e,t.strides),o=k(n);return Fn(this.readSync(t.dataId).subarray(r,r+o),n,t.dtype)}for(var a=dr(n,t.dtype),i=this.bufferSync(t),s=0;sf&&(f=v,d=p)}u[l]=d}return i},o.prototype.cumsum=function(t,e,n,r){if(Hh(t,\"cumsum\"),e!==t.rank-1)throw new Error(\"backend.cumsum in CPU expects an inner-most axis=\"+(t.rank-1)+\" but got axis=\"+e);for(var o=Dt(t.dtype,\"int32\"),a=Gn(t.shape,o),i=this.readSync(a.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],c=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},l=0;le?1:0}))},o.prototype.greaterEqual=function(t,e){return Hh([t,e],\"greaterEqual\"),this.broadcastedBinaryOp(t,e,\"bool\",(function(t,e){return t>=e?1:0}))},o.prototype.logicalNot=function(t){Hh(t,\"logicalNot\");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r1||1===e.rank?1:k(e.shape.slice(1)),l=0;l=0&&e>=0?n:(n+e)%e}))},o.prototype.max=function(t,e){Hh(t,\"max\"),Cn(\"max\",e,t.rank);for(var n=bn(t.shape,e),r=n[0],o=n[1],a=Gn(r,t.dtype),i=k(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),c=0;ch&&(h=d)}s[c]=h}return a},o.prototype.maximum=function(t,e){return Hh([t,e],\"maximum\"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},o.prototype.all=function(t,e){Hh(t,\"all\"),Cn(\"all\",e,t.rank);for(var n=bn(t.shape,e),r=n[0],o=n[1],a=Gn(r,t.dtype),i=k(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),c=0;c0?n[r]=1:n[r]=0;return this.makeOutput(n,t.shape,\"float32\")},o.prototype.isNaN=function(t){Hh(t,\"x\");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r.5?n[r]=Math.ceil(e[r]):n[r]=o%2==0?o:o+1}return this.makeOutput(n,t.shape,\"float32\")},o.prototype.exp=function(t){Hh(t,\"exp\");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r=0?o:Math.exp(o)-1}return this.makeOutput(e,t.shape,\"float32\")},o.prototype.eluDer=function(t,e){Hh([t,e],\"eluDer\");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),o=this.readSync(t.dataId),a=0;a=1?o[a]:o[a]*(i+1)}return this.makeOutput(n,e.shape,\"float32\")},o.prototype.selu=function(t){Hh(t,\"selu\");for(var e=bs,n=ws,r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;a=0?n*i:e*(Math.exp(i)-1)}return this.makeOutput(r,t.shape,\"float32\")},o.prototype.clip=function(t,e,n){Hh(t,\"clip\");for(var r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;an?n:i-e,i=r[o]0?1:e}return this.makeOutput(n,t.shape,\"float32\")},o.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,o=t.bias,a=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,n,r);return o&&(s=this.add(s,o)),a&&(s=qh(this,s,a,i)),s},o.prototype.conv2d=function(t,e,n){Hh([t,e],\"conv2d\");for(var r=n.filterHeight,o=n.filterWidth,a=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c=\"channelsLast\"===n.dataFormat,l=dr(n.outShape,t.dtype),h=t.strides[0],f=c?t.strides[1]:t.strides[2],d=c?t.strides[2]:1,p=c?1:t.strides[1],v=l.strides[0],m=c?l.strides[1]:l.strides[2],g=c?l.strides[2]:1,y=c?1:l.strides[1],x=this.readSync(t.dataId),b=this.readSync(e.dataId),w=l.values,C=0;C=n.inHeight))for(var T=A*e.strides[0],N=E+D*f,F=0;F=n.inWidth))for(var P=N+B*d,L=T+M*e.strides[1],W=0;W=n.inDepth))for(var R=C*e.strides[0],I=g+E*t.strides[1],k=0;k=n.inHeight))for(var N=R+D*e.strides[1],F=I+T*t.strides[2],_=0;_=n.inWidth))for(var L=N+B*e.strides[2],W=F+P*n.inChannels,U=L,V=0;V=n.inHeight))for(var C=b*e.strides[0],E=v+w*t.strides[1],R=0;R=n.inWidth))for(var D=C+S*e.strides[1],T=E+A*n.inChannels,N=I,F=D,_=0;_N?N=P:\"avg\"===n&&(F+=P,_++)}if(isNaN(N))break}p[k+S*g+w]=\"avg\"===n?F/_:N}return d.toTensor()},o.prototype.maxPool=function(t,e){return this.pool(t,e,\"max\")},o.prototype.maxPoolPositions=function(t,e){for(var n=dr(e.outShape,\"int32\"),r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,h=this.bufferSync(t),f=0;fC&&(C=A,E=I*u+S)}n.set(E,f,p,y,d)}}return n.toTensor()},o.prototype.maxPoolBackprop=function(t,e,n,r){Hh([e,n],\"maxPoolBackprop\");for(var o=this.maxPoolPositions(e,r),a=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,c=r.effectiveFilterHeight,l=r.effectiveFilterWidth,h=l-1-r.padInfo.left,f=c-1-r.padInfo.top,d=dr(e.shape,\"float32\"),p=this.bufferSync(o),v=this.bufferSync(t),m=0;m=r.outHeight||Math.floor(R)!==R))for(var I=0;I=r.outWidth||Math.floor(k)!==k)){var S=c*l-1-p.get(m,R,k,g)===E*l+I?1:0;if(0!==S)C+=v.get(m,R,k,g)*S}}}d.set(C,m,y,x,g)}return d.toTensor()},o.prototype.avgPoolBackprop=function(t,e,n){Hh([t,e],\"avgPoolBackprop\");for(var r=n.strideHeight,o=n.strideWidth,a=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,h=l-1-n.padInfo.left,f=c-1-n.padInfo.top,d=dr(e.shape,\"float32\"),p=1/(a*i),v=this.bufferSync(t),m=0;m=n.outHeight||Math.floor(R)!==R))for(var I=0;I=n.outWidth||Math.floor(k)!==k))C+=v.get(m,R,k,g)}}d.set(C*p,m,y,x,g)}return d.toTensor()},o.prototype.pool3d=function(t,e,n){Hh(t,\"pool3d\");for(var r=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,p=e.padInfo.left,v=\"max\"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=this.readSync(t.dataId),g=dr(e.outShape,t.dtype),y=g.values,x=e.outShape[1]*e.outShape[2]*e.outShape[3]*e.outShape[4],b=e.outShape[2]*e.outShape[3]*e.outShape[4],w=e.outShape[3]*e.outShape[4],C=e.outShape[4],E=0;Ez?z=$:\"avg\"===n&&(G+=$,H++),isNaN(z))break}if(isNaN(z))break}if(isNaN(z))break}y[V+k]=\"avg\"===n?G/H:z}}}return g.toTensor()},o.prototype.avgPool3d=function(t,e){return Hh(t,\"avgPool3d\"),this.pool3d(t,e,\"avg\").toFloat()},o.prototype.avgPool3dBackprop=function(t,e,n){Hh([t,e],\"avgPool3dBackprop\");for(var r=n.strideDepth,o=n.strideHeight,a=n.strideWidth,i=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=n.dilationDepth,l=n.dilationHeight,h=n.dilationWidth,f=n.effectiveFilterDepth,d=n.effectiveFilterHeight,p=n.effectiveFilterWidth,v=f-1-n.padInfo.front,m=p-1-n.padInfo.left,g=d-1-n.padInfo.top,y=dr(e.shape,\"float32\"),x=1/(i*s*u),b=this.bufferSync(t),w=0;w=n.outDepth||Math.floor(N)!==N))for(var F=0;F=n.outHeight||Math.floor(_)!==_))for(var O=0;O=n.outWidth||Math.floor(M)!==M))D+=b.get(w,N,_,M,C)}}}y.set(D*x,w,E,R,I,C)}return y.toTensor()},o.prototype.maxPool3d=function(t,e){return Hh(t,\"maxPool3d\"),this.pool3d(t,e,\"max\").toFloat()},o.prototype.maxPool3dPositions=function(t,e){for(var n=dr(e.outShape,\"int32\"),r=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,p=e.padInfo.left,v=this.bufferSync(t),m=0;m=T&&(T=L,N=_*l*h+M*l+P)}n.set(N,m,y,C,k,g)}}}return n.toTensor()},o.prototype.maxPool3dBackprop=function(t,e,n,r){Hh([e,n],\"maxPool3dBackprop\");for(var o=this.maxPool3dPositions(e,r),a=r.strideDepth,i=r.strideHeight,s=r.strideWidth,u=r.dilationDepth,c=r.dilationHeight,l=r.dilationWidth,h=r.effectiveFilterDepth,f=r.effectiveFilterHeight,d=r.effectiveFilterWidth,p=h-1-r.padInfo.front,v=d-1-r.padInfo.left,m=f-1-r.padInfo.top,g=dr(e.shape,\"float32\"),y=this.bufferSync(o),x=this.bufferSync(t),b=0;b=r.outDepth||Math.floor(T)!==T))for(var N=0;N=r.outHeight||Math.floor(F)!==F))for(var _=0;_=r.outWidth||Math.floor(O)!==O)){var M=h*f*d-1-y.get(b,T,F,O,w)===D*f*d+N*d+_?1:0;if(0!==M)A+=x.get(b,T,F,O,w)*M}}}}g.set(A,b,C,E,R,w)}return g.toTensor()},o.prototype.cast=function(t,e){return Po(t,e,this)},o.prototype.reshape=function(t,e){return Lo(t,e)},o.prototype.avgPool=function(t,e){return Hh(t,\"avgPool\"),this.pool(t,e,\"avg\").toFloat()},o.prototype.resizeBilinear=function(t,e,n,r){Hh(t,\"resizeBilinear\");for(var o=t.shape,a=o[0],i=o[1],s=o[2],u=o[3],c=this.readSync(t.dataId),l=new Float32Array(k([a,e,n,u])),h=[r&&e>1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=0,p=h[0]/f[0],v=h[1]/f[1],m=0;m1?a-1:a,n&&l>1?i-1:i],d=[n&&c>1?c-1:c,n&&l>1?l-1:l],p=f[0]/d[0],v=f[1]/d[1],m=this.readSync(t.dataId),g=0,y=0;y1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=h[0]/f[0],p=h[1]/f[1],v=0,m=0;m1?a-1:a,n&&l>1?i-1:i],p=[n&&c>1?c-1:c,n&&l>1?l-1:l],v=d[0]/p[0],m=d[1]/p[1],g=1/v,y=1/m,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w=c)){var M=C+O*t.strides[1],B=O*v;if(E===Math.min(a-1,n?Math.round(B):Math.floor(B)))for(var P=0;P=l)){var W=M+L*t.strides[2],U=L*m;S===Math.min(i-1,n?Math.round(U):Math.floor(U))&&(F+=f[W+N])}}}}h[A+N]=F}return Ln(h,e.shape,e.dtype)},o.prototype.batchNormalization=function(t,e,n,r,o,a){Hh([t,e,n,o,a],\"batchNorm\");for(var i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),c=o?this.readSync(o.dataId):new Float32Array([1]),l=a?this.readSync(a.dataId):new Float32Array([0]),h=new Float32Array(i.length),f=l.length,d=c.length,p=u.length,v=s.length,m=0,g=0,y=0,x=0,b=0;b=f&&(m=0),g>=v&&(g=0),y>=d&&(y=0),x>=p&&(x=0);return Ln(h,t.shape)},o.prototype.localResponseNormalization4D=function(t,e,n,r,o){Hh(t,\"localResponseNormalization4D\");var a=t.shape[3],i=a-1,s=this.readSync(t.dataId),u=t.size,c=new Float32Array(u);function l(t){for(var n=t%a,r=t-n+Math.max(0,n-e),o=t-n+Math.min(n+e,i),u=0;r<=o;r++){var c=s[r];u+=c*c}return u}for(var h=0;h=0&&a[i]1,(function(){return\"blockSize should be > 1 for depthToSpace, but was: \"+e}));for(var r=t.shape[0],o=t.shape[1],a=t.shape[2],i=t.shape[3],s=o*e,u=a*e,c=i/(e*e),l=this.readSync(t.dataId),h=new Float32Array(r*s*u*c),f=0,d=0;d=s))for(var S=f>1?(R-C)*(u-1)/(f-1):0,A=d>1?(I-E)*(c-1)/(d-1):0,D=0;D1?C*(u-1)+D*S:.5*(C+R)*(u-1);if(T<0||T>u-1)for(var N=0;N1?E*(c-1)+N*A:.5*(E+I)*(c-1))<0||q>c-1)for(F=0;F1?E*(c-1)+N*A:.5*(E+I)*(c-1))<0||q>c-1)for(F=0;F=t.size/s)throw new Error(\"Invalid indices: \"+d+\" does not index into \"+t.shape);for(var g=0;g=r/o)throw new Error(\"Invalid indices: \"+v+\" does not index into \"+n);for(var x=0;x0,(function(){return\"scheme must not be an empty string.\"}));var r=t.getInstance();C(null==r.managers[e],(function(){return\"A model store manager is already registered for scheme '\"+e+\"'.\"})),r.managers[e]=n},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error(\"Cannot find model manager for scheme '\"+t+\"'\");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function xf(t){if(-1===t.indexOf(gf))throw new Error(\"The url string provided does not contain a scheme. Supported schemes are: \"+yf.getSchemes().join(\",\"));return{scheme:t.split(gf)[0],path:t.split(gf)[1]}}function bf(t,e,o){return void 0===o&&(o=!1),n(this,void 0,void 0,(function(){var n,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return C(t!==e,(function(){return\"Old path and new path are the same: '\"+t+\"'\"})),C((n=mf.getLoadHandlers(t)).length>0,(function(){return\"Copying failed because no load handler is found for source URL \"+t+\".\"})),C(n.length<2,(function(){return\"Copying failed because more than one (\"+n.length+\") load handlers for source URL \"+t+\".\"})),a=n[0],C((i=mf.getSaveHandlers(e)).length>0,(function(){return\"Copying failed because no save handler is found for destination URL \"+e+\".\"})),C(i.length<2,(function(){return\"Copying failed because more than one (\"+n.length+\") save handlers for destination URL \"+e+\".\"})),s=i[0],u=xf(t).scheme,c=xf(t).path,l=u===xf(t).scheme,[4,a.load()];case 1:return h=r.sent(),o&&l?[4,yf.getManager(u).removeModel(c)]:[3,3];case 2:r.sent(),r.label=3;case 3:return[4,s.save(h)];case 4:return f=r.sent(),!o||l?[3,6]:[4,yf.getManager(u).removeModel(c)];case 5:r.sent(),r.label=6;case 6:return[2,f.modelArtifactsInfo]}}))}))}var wf=\"models_store\",Cf=\"model_info_store\";function Ef(){if(!i().getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");var t=window||self,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function Rf(t){var e=t.result;e.createObjectStore(wf,{keyPath:\"modelPath\"}),e.createObjectStore(Cf,{keyPath:\"modelPath\"})}var If=function(){function t(t){if(this.indexedDB=Ef(),null==t||!t)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=t}return t.prototype.save=function(t){return n(this,void 0,void 0,(function(){return r(this,(function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return[2,this.databaseAction(this.modelPath,t)]}))}))},t.prototype.load=function(){return n(this,void 0,void 0,(function(){return r(this,(function(t){return[2,this.databaseAction(this.modelPath)]}))}))},t.prototype.databaseAction=function(t,e){var n=this;return new Promise((function(t,r){var o=n.indexedDB.open(\"tensorflowjs\",1);o.onupgradeneeded=function(){return Rf(o)},o.onsuccess=function(){var a=o.result;if(null==e){var i=a.transaction(wf,\"readonly\"),s=i.objectStore(wf).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return a.close(),r(new Error(\"Cannot find model with path '\"+n.modelPath+\"' in IndexedDB.\"));t(s.result.modelArtifacts)},s.onerror=function(t){return a.close(),r(s.error)},i.oncomplete=function(){return a.close()}}else{var u,c=vf(e),l=a.transaction(Cf,\"readwrite\"),h=l.objectStore(Cf),f=h.put({modelPath:n.modelPath,modelArtifactsInfo:c});f.onsuccess=function(){var o=(u=a.transaction(wf,\"readwrite\")).objectStore(wf).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:c});o.onsuccess=function(){return t({modelArtifactsInfo:c})},o.onerror=function(t){var e=(h=l.objectStore(Cf)).delete(n.modelPath);e.onsuccess=function(){return a.close(),r(o.error)},e.onerror=function(t){return a.close(),r(o.error)}}},f.onerror=function(t){return a.close(),r(f.error)},l.oncomplete=function(){null==u?a.close():u.oncomplete=function(){return a.close()}}}},o.onerror=function(t){return r(o.error)}}))},t.URL_SCHEME=\"indexeddb://\",t}(),kf=function(t){return i().getBool(\"IS_BROWSER\")&&!Array.isArray(t)&&t.startsWith(If.URL_SCHEME)?(e=t.slice(If.URL_SCHEME.length),new If(e)):null;var e};mf.registerSaveRouter(kf),mf.registerLoadRouter(kf);var Sf=function(){function t(){this.indexedDB=Ef()}return t.prototype.listModels=function(){return n(this,void 0,void 0,(function(){var t=this;return r(this,(function(e){return[2,new Promise((function(e,n){var r=t.indexedDB.open(\"tensorflowjs\",1);r.onupgradeneeded=function(){return Rf(r)},r.onsuccess=function(){var t=r.result,o=t.transaction(Cf,\"readonly\"),a=o.objectStore(Cf).getAll();a.onsuccess=function(){for(var t={},n=0,r=a.result;n0,(function(){return\"promises must be a none empty array\"}))}(t),function(t,e){C(t>=0&&t<=1,(function(){return\"Progress fraction must be in range [0, 1], but got startFraction \"+t})),C(e>=0&&e<=1,(function(){return\"Progress fraction must be in range [0, 1], but got endFraction \"+e})),C(e>=t,(function(){return\"startFraction must be no more than endFraction, but got startFraction \"+t+\" and endFraction \"+e}))}(n=null==n?0:n,r=null==r?1:r);var o=0;return Promise.all(t.map((function(a){return a.then((function(a){var i=n+ ++o/t.length*(r-n);return e(i),a})),a})))}function jf(t,e){return n(this,void 0,void 0,(function(){var n,o,a,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?i().platform.fetch:e.fetchFunc,o=t.map((function(t){return n(t,e.requestInit,{isBinary:!0})})),a=0,s=.5,null!=e.onProgress?[3,2]:[4,Promise.all(o)];case 1:return u=r.sent(),[3,4];case 2:return[4,Kf(o,e.onProgress,a,s)];case 3:u=r.sent(),r.label=4;case 4:return c=u.map((function(t){return t.arrayBuffer()})),l=.5,h=1,null!=e.onProgress?[3,6]:[4,Promise.all(c)];case 5:return f=r.sent(),[3,8];case 6:return[4,Kf(c,e.onProgress,l,h)];case 7:f=r.sent(),r.label=8;case 8:return[2,f]}}))}))}function Xf(t){var e=this;return function(o,a,i){return void 0===a&&(a=\"\"),n(e,void 0,void 0,(function(){var e,n,s,u,c,l,h,f,d,p;return r(this,(function(r){switch(r.label){case 0:if(e=o.map((function(){return!1})),n={},s=null!=i?i.map((function(){return!1})):[],u=[],o.forEach((function(t,r){var o=0;t.weights.forEach((function(t){var a=\"quantization\"in t?t.quantization.dtype:t.dtype,c=sf[a]*k(t.shape),l=function(){e[r]=!0,null==n[r]&&(n[r]=[]),n[r].push({manifestEntry:t,groupOffset:o,sizeBytes:c})};null!=i?i.forEach((function(e,n){e===t.name&&(l(),s[n]=!0)})):l(),u.push(t.name),o+=c}))})),!s.every((function(t){return t})))throw c=i.filter((function(t,e){return!s[e]})),new Error(\"Could not find weights in manifest with names: \"+c.join(\", \")+\". \\nManifest JSON has weights with names: \"+u.join(\", \")+\".\");return l=e.reduce((function(t,e,n){return e&&t.push(n),t}),[]),h=[],l.forEach((function(t){o[t].paths.forEach((function(t){var e=a+(a.endsWith(\"/\")?\"\":\"/\")+t;h.push(e)}))})),[4,t(h)];case 1:return f=r.sent(),d={},p=0,l.forEach((function(t){for(var e=o[t].paths.length,r=0,a=0;a0,(function(){return\"URL path for http must not be null, undefined or empty.\"})),Array.isArray(t)&&C(2===t.length,(function(){return\"URL paths for http must have a length of 2, (actual length is \"+t.length+\").\"})),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=e.requestInit||{}}return t.prototype.save=function(t){return n(this,void 0,void 0,(function(){var e,n,o,a;return r(this,(function(r){switch(r.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:[\"./model.weights.bin\"],weights:t.weightSpecs}],o={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:n},e.body.append(\"model.json\",new Blob([JSON.stringify(o)],{type:\"application/json\"}),\"model.json\"),null!=t.weightData&&e.body.append(\"model.weights.bin\",new Blob([t.weightData],{type:\"application/octet-stream\"}),\"model.weights.bin\"),[4,this.fetch(this.path,e)];case 1:if((a=r.sent()).ok)return[2,{modelArtifactsInfo:vf(t),responses:[a]}];throw new Error(\"BrowserHTTPRequest.save() failed due to HTTP response status \"+a.status+\".\")}}))}))},t.prototype.load=function(){return n(this,void 0,void 0,(function(){var t,e,n,o,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=r.sent()).ok)throw new Error(\"Request to \"+this.path+\" failed with status code \"+t.status+\". Please verify this URL points to the model JSON of the model to load.\");r.label=2;case 2:return r.trys.push([2,4,,5]),[4,t.json()];case 3:return e=r.sent(),[3,5];case 4:throw r.sent(),n=\"Failed to parse model JSON of response from \"+this.path+\".\",this.path.endsWith(\".pb\")?n+=\" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.\":n+=\" Please make sure the server is serving valid JSON for this request.\",new Error(n);case 5:if(o=e.modelTopology,a=e.weightsManifest,i=e.generatedBy,s=e.convertedBy,u=e.format,c=e.userDefinedMetadata,null==o&&null==a)throw new Error(\"The JSON from HTTP path \"+this.path+\" contains neither model topology or manifest for weights.\");return null==a?[3,7]:[4,this.loadWeights(a)];case 6:f=r.sent(),l=f[0],h=f[1],r.label=7;case 7:return[2,{modelTopology:o,weightSpecs:l,weightData:h,userDefinedMetadata:c,generatedBy:i,convertedBy:s,format:u}]}}))}))},t.prototype.loadWeights=function(t){return n(this,void 0,void 0,(function(){var e,n,o,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf(\"/\"),n=t.lastIndexOf(\"?\"),r=t.substring(0,e),o=n>e?t.substring(n):\"\";return[r+\"/\",o]}(e),o=n[0],a=n[1],i=this.weightPathPrefix||o,s=[],u=0,c=t;u0&&Number.isInteger(n),(function(){return\"If provided, numClasses must be a positive integer, but got \"+n})),C(1===r.rank,(function(){return\"Expected the rank of labels to be 1, but got \"+r.rank})),C(1===o.rank,(function(){return\"Expected the rank of predictions to be 1, but got \"+o.rank})),C(r.shape[0]===o.shape[0],(function(){return\"Mismatch in the number of examples: \"+r.shape[0]+\" vs. \"+o.shape[0]+\". Labels and predictions should have the same number of elements.\"})),C(n>0&&Number.isInteger(n),(function(){return\"numClasses is required to be a positive integer, but got \"+n}));var a=Rr(r.asType(\"int32\"),n),i=Rr(o.asType(\"int32\"),n);return a.transpose().matMul(i).asType(\"int32\")}}),od=Object.freeze({confusionMatrix:rd});var ad=An({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");if(null==t)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");var n=!1,r=!1,o=!1,a=!1,i=!1;if(t.data instanceof Uint8Array)n=!0;else if(\"undefined\"!=typeof ImageData&&t instanceof ImageData)r=!0;else if(\"undefined\"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement)o=!0;else if(\"undefined\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement)a=!0;else{if(null==t.getContext)throw new Error(\"pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was \"+t.constructor.name);i=!0}if(o){if(o&&t.readyState<2)throw new Error(\"The video element has not loaded data yet. Please wait for `loadeddata` event on the