var human=(()=>{var Ap=Object.defineProperty;var be=(n,t)=>()=>(t||(t={exports:{}},n(t.exports,t)),t.exports),xI=n=>Ap(n,"__esModule",{value:!0}),Tp=(n,t)=>{xI(n);for(var e in t)Ap(n,e,{get:t[e],enumerable:!0})};var Np=be(()=>{});var xp=be(()=>{});var hs=be(()=>{});var $i=be(I=>{"use strict";Object.defineProperty(I,"__esModule",{value:!0});var Zo=function(n,t){return Zo=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,i){e.__proto__=i}||function(e,i){for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])},Zo(n,t)};function Vn(n,t){Zo(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function de(n,t,e,i){return new(e||(e=Promise))(function(r,a){function s(u){try{l(i.next(u))}catch(c){a(c)}}function o(u){try{l(i.throw(u))}catch(c){a(c)}}function l(u){u.done?r(u.value):new e(function(c){c(u.value)}).then(s,o)}l((i=i.apply(n,t||[])).next())})}function pe(n,t){var e={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,r,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(u){return function(c){return l([u,c])}}function l(u){if(i)throw new TypeError("Generator is already executing.");for(;e;)try{if(i=1,r&&(a=u[0]&2?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;(r=0,a)&&(u=[u[0]&2,a.value]);switch(u[0]){case 0:case 1:a=u;break;case 4:return e.label++,{value:u[1],done:!1};case 5:e.label++,r=u[1],u=[0];continue;case 7:u=e.ops.pop(),e.trys.pop();continue;default:if(!(a=e.trys,a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]0;)i=Math.random()*t|0,t--,e=n[t],n[t]=n[i],n[i]=e}function da(n,t,e){return Math.max(n,Math.min(t,e))}function MI(n){return n%2===0?n:n+1}function HI(n){for(var t=0,e=0;e=e){r();return}setTimeout(s,o)};s()})}function kf(n,t){for(var e=1,i=-1,r=0;r=0)e*=n[r];else if(n[r]===-1){if(i!==-1)throw Error("Shapes can only have 1 implicit size. "+("Found -1 at dim "+i+" and dim "+r));i=r}else if(n[r]<0)throw Error("Shapes can not be < 0. Found "+n[r]+" at dim "+r);if(i===-1){if(t>0&&t!==e)throw Error("Size("+t+") must match the product of shape "+n);return n}if(e===0)throw Error("Cannot infer the missing size in ["+n+"] when there are 0 elements");if(t%e!==0)throw Error("The implicit shape can't be a fractional number. "+("Got "+t+" / "+e));var a=n.slice();return a[i]=t/e,a}function Qe(n,t){var e=t.length;return n=n==null?t.map(function(i,r){return r}):[].concat(n),E(n.every(function(i){return i>=-e&&io)&&n[o]===1&&(e.push(n[o]),i.push(o)),a[s]<=o&&s++}n[o]!==1&&(e.push(n[o]),i.push(o))}return{newShape:e,keptDims:i}}function ms(n,t){var e=null;if(n==null||n==="float32")e=new Float32Array(t);else if(n==="int32")e=new Int32Array(t);else if(n==="bool")e=new Uint8Array(t);else throw new Error("Unknown data type "+n);return e}function Wf(n,t){var e=null;if(n==null||n==="float32")e=new Float32Array(t);else if(n==="int32")e=new Int32Array(t);else if(n==="bool")e=new Uint8Array(t);else if(n==="string")e=new Array(t);else throw new Error("Unknown data type "+n);return e}function Uf(n,t){for(var e=0;e=0;--i)e[i]=e[i+1]*n[i+1];return e}function XI(n,t){return t==="string"?qu(n):ys([n],t)}function ys(n,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(n)&&(n=Fi(n)),He().getBool("DEBUG")&&Uf(n,t),JI(n,t))return n;if(t==null||t==="float32"||t==="complex64")return new Float32Array(n);if(t==="int32")return new Int32Array(n);if(t==="bool"){for(var e=new Uint8Array(n.length),i=0;i=0,function(){return"Tensor must have a shape comprised of positive integers but got "+("shape ["+n+"].")})})}function QI(n,t){return He().platform.fetch(n,t)}function qu(n,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",He().platform.encode(n,t)}function ju(n,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",He().platform.decode(n,t)}function e2(n,t,e){if(t===0)return 0;if(t===1)return n[0];for(var i=n[n.length-1],r=0;r0?m:"")+" "}}console.log("%c"+l+" %c"+o+" %c"+u+"D "+h+" %c"+c+" %c"+d+" %c"+s,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},n}();function s2(n,t,e){for(var i={},r={},a=0;a=0;a--)for(var s=n[a],o=s.inputs,h=0;h=0;a--)r(a)}var qf=20,fa=3,$u=7;function u2(n,t,e,i){var r=br(t),a=l2(n,t,e,r),s=t.length,o=bs(n,t,e,r,a),l=["Tensor"];return i&&(l.push(" dtype: "+e),l.push(" rank: "+s),l.push(" shape: ["+t+"]"),l.push(" values:")),l.push(o.map(function(u){return" "+u}).join(` `)),l.join(` `)}function l2(n,t,e,i){var r=ot(t),a=i[i.length-1],s=new Array(a).fill(0),o=t.length,l=e==="complex64"?ga(n):n;if(o>1)for(var u=0;uqf){var c=fa*s,h=Array.from(n.slice(0,c)),d=Array.from(n.slice((o-fa)*s,o*s));return e==="complex64"&&(h=ga(h),d=ga(d)),["["+h.map(function(C,R){return ma(C,r[R],e)}).join(", ")+", ..., "+d.map(function(C,R){return ma(C,r[o-fa+R],e)}).join(", ")+"]"]}var p=e==="complex64"?ga(n):Array.from(n);return["["+p.map(function(C,R){return ma(C,r[R],e)}).join(", ")+"]"]}var f=t.slice(1),m=i.slice(1),g=i[0]*s,v=[];if(o>qf){for(var b=0;b=this.shape[i]){var o="Requested out of range element at "+t+". "+(" Buffer shape="+this.shape);throw new Error(o)}i++}for(var l=t[t.length-1],u=0;u0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak "+("("+o+" data ids) after running '"+t+"'"))},n.prototype.runKernelFunc=function(t,e,i,r,a,s,o){var l=this,u,c=[],h=this.isTapeOn();r==null&&(r=this.state.activeScope!=null?this.state.activeScope.name:"");var d=this.state.numBytes,p=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var f,m=Hu(r,this.backendName),g;if(m!=null)f=function(){var w=l.backend.numDataIds();g=m.kernelFunc({inputs:e,attrs:a,backend:l.backend});var S=Array.isArray(g)?g:[g];l.shouldCheckForMemLeaks()&&l.checkKernelForMemLeak(r,w,S);var L=S.map(function(R){var D=R.dataId,k=R.shape,W=R.dtype;return l.makeTensorFromDataId(D,k,W)});if(h){var x=l.getTensorsForGradient(r,e,L);if(x==null){o==null&&(o=[]);var C=L.filter(function(R,D){return o[D]});x=(s||[]).slice().concat(C)}c=l.saveTensorsForBackwardMode(x)}return L};else{var v=function(w){if(!h)return;c=w.map(function(S){return l.keep(l.clone(S))})};f=function(){var w=l.backend.numDataIds();g=l.tidy(function(){return t(l.backend,v)});var S=Array.isArray(g)?g:[g];return l.shouldCheckForMemLeaks()&&l.checkKernelForMemLeak(r,w,S),S}}var b;return this.scopedRun(function(){return l.state.kernelDepth++},function(){return l.state.kernelDepth--},function(){!l.ENV.getBool("DEBUG")&&!l.state.profiling?u=f():(b=l.profiler.profileKernel(r,e,function(){return f()}),l.ENV.getBool("DEBUG")&&l.profiler.logKernelProfile(b),u=b.outputs)}),h&&this.addTapeNode(r,e,u,i,c,a),this.state.profiling&&this.state.activeProfile.kernels.push({name:r,bytesAdded:this.state.numBytes-d,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-p,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map(function(w){return e[w]!=null?e[w].shape:null}),outputShapes:u.map(function(w){return w.shape}),kernelTimeMs:b.timeMs,extraInfo:b.extraInfo}),Array.isArray(g)?u:u[0]},n.prototype.saveTensorsForBackwardMode=function(t){var e=this,i=t.map(function(r){return e.keep(e.clone(r))});return i},n.prototype.getTensorsForGradient=function(t,e,i){var r=Vu(t);if(r!=null){var a=r.inputsToSave||[],s=r.outputsToSave||[],o=void 0;r.saveAllInputs?(E(Array.isArray(e),function(){return"saveAllInputs is true, expected inputs to be an array."}),o=Object.keys(e).map(function(u){return e[u]})):o=a.map(function(u){return e[u]});var l=i.filter(function(u,c){return s[c]});return o.concat(l)}return null},n.prototype.makeTensor=function(t,e,i,r){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");i=i||"float32",r=r||this.backend;var a=t;i==="string"&&ti(t[0])&&(a=t.map(function(c){return qu(c)}));var s=r.write(a,e,i),o=new Y(e,i,s,this.nextTensorId());if(this.incRef(o,r),i==="string"){var l=this.state.tensorInfo.get(s),u=_f(a);this.state.numBytes+=u-l.bytes,l.bytes=u}return o},n.prototype.makeTensorFromDataId=function(t,e,i,r){i=i||"float32";var a=new Y(e,i,t,this.nextTensorId());return this.incRef(a,r),a},n.prototype.makeVariable=function(t,e,i,r){e===void 0&&(e=!0),i=i||this.nextVariableId().toString(),r!=null&&r!==t.dtype&&(t=t.cast(r));var a=new va(t,e,i,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error("Variable with name "+a.name+" was already registered");return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a},n.prototype.incRef=function(t,e){var i=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++,i===0){this.state.numDataBuffers++;var r=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(r=t.size*Pf(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 va||this.track(t)},n.prototype.disposeTensor=function(t){if(!this.state.tensorInfo.has(t.dataId))return;this.state.numTensors--,t.dtype==="string"&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId),i=e.refCount;i<=1?(t.dtype!=="complex64"&&(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--},n.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},n.prototype.disposeVariable=function(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]},n.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,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},n.prototype.profile=function(t){return de(this,void 0,void 0,function(){var e,i,r,a,s,o,l,u;return pe(this,function(c){switch(c.label){case 0:return this.state.profiling=!0,e=this.state.numBytes,i=this.state.numTensors,this.state.activeProfile.kernels=[],r=this.state.activeProfile,[4,t()];case 1:r.result=c.sent(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(h){return h.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-i,a=0,s=this.state.activeProfile.kernels,c.label=2;case 2:return a0&&this.state.kernelDepth===0},n.prototype.addTapeNode=function(t,e,i,r,a,s){var o=this,l={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:i,saved:a},u=Vu(t);u!=null&&(r=u.gradFunc),r!=null&&(l.gradient=function(c){return c=c.map(function(h,d){if(h==null){var p=i[d],f=Sr(p.size,p.dtype);return o.makeTensor(f,p.shape,p.dtype)}return h}),r(c.length>1?c:c[0],a,s)}),this.state.activeTape.push(l)},n.prototype.keep=function(t){return t.kept=!0,t},n.prototype.startTape=function(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++},n.prototype.endTape=function(){this.state.gradientDepth--},n.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},n.prototype.endScope=function(t){for(var e=this,i=ec(t),r=new Set(i.map(function(l){return l.id})),a=0;a0,function(){return"gradients() received an empty list of xs."}),i!=null&&i.dtype!=="float32")throw new Error("dy must have 'float32' dtype, but has '"+i.dtype+"'");var s=this.scopedRun(function(){return a.startTape()},function(){return a.endTape()},function(){return a.tidy("forward",t)});E(s instanceof Y,function(){return"The result y returned by f() must be a tensor."});var o=s2(this.state.activeTape,e,s);if(!r&&o.length===0&&e.length>0)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 l={};l[s.id]=i??v2(s.shape),o2(l,o,function(c){return a.tidy(c)},y2);var u=e.map(function(c){return l[c.id]});return a.state.gradientDepth===0&&(a.state.activeTape.forEach(function(c){for(var h=0,d=c.saved;h0,function(){return"Element arr["+e.join("][")+"] should be a primitive, "+("but is an array of "+n.length+" elements")}),E(n.length===t[0],function(){return"Element arr["+e.join("][")+"] should have "+t[0]+" "+("elements, but has "+n.length+" elements")});for(var i=t.slice(1),r=0;r=0&&(r=i),Zf(i,r,t,e),n==null||!Ot(n)&&!Array.isArray(n)&&typeof n!="number"&&typeof n!="boolean"&&typeof n!="string"){var a=n==null?"null":n.constructor.name;throw new Error("Argument '"+t+"' passed to '"+e+"' must be a "+("Tensor or TensorLike, but got '"+a+"'"))}var s=Rn(n,r);!Ot(n)&&!Array.isArray(n)&&(n=[n]);var o=!0,l=r!=="string"?ys(n,r):Fi(n,[],o);return z.makeTensor(l,s,r)}function ya(n,t,e,i){if(i===void 0&&(i="numeric"),!Array.isArray(n))throw new Error("Argument "+t+" passed to "+e+" must be a `Tensor[]` or `TensorLike[]`");var r=n;return r.map(function(a,s){return O(a,t+"["+s+"]",e)},i)}var Qf="__op";function U(n){var t=Object.keys(n);if(t.length!==1)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+(t.length+" keys."));var e=t[0],i=n[e];e.endsWith("_")&&(e=e.substring(0,e.length-1)),e=e+Qf;var r=function(){for(var a=[],s=0;s>10]+(o&1023)]+t[o>>10];a[s]=l}return new Float32Array(r)}}var Qt=function(){function n(){this.saveRouters=[],this.loadRouters=[]}return n.getInstance=function(){return n.instance==null&&(n.instance=new n),n.instance},n.registerSaveRouter=function(t){n.getInstance().saveRouters.push(t)},n.registerLoadRouter=function(t){n.getInstance().loadRouters.push(t)},n.getSaveHandlers=function(t){return n.getHandlers(t,"save")},n.getLoadHandlers=function(t,e){return n.getHandlers(t,"load",e)},n.getHandlers=function(t,e,i){var r=[],a=e==="load"?n.getInstance().loadRouters:n.getInstance().saveRouters;return a.forEach(function(s){var o=s(t,i);o!==null&&r.push(o)}),r},n}(),D2=function(n){return Qt.registerSaveRouter(n)},k2=function(n){return Qt.registerLoadRouter(n)},F2=function(n){return Qt.getSaveHandlers(n)},W2=function(n,t){return Qt.getLoadHandlers(n,t)};var rc="tensorflowjs",ac=1,Wi="models_store",si="model_info_store";function im(){if(!He().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var n=typeof window=="undefined"?self:window,t=n.indexedDB||n.mozIndexedDB||n.webkitIndexedDB||n.msIndexedDB||n.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function sc(n){var t=n.result;t.createObjectStore(Wi,{keyPath:"modelPath"}),t.createObjectStore(si,{keyPath:"modelPath"})}var Ir=function(){function n(t){if(this.indexedDB=im(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}return n.prototype.save=function(t){return de(this,void 0,void 0,function(){return pe(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)]})})},n.prototype.load=function(){return de(this,void 0,void 0,function(){return pe(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},n.prototype.databaseAction=function(t,e){var i=this;return new Promise(function(r,a){var s=i.indexedDB.open(rc,ac);s.onupgradeneeded=function(){return sc(s)},s.onsuccess=function(){var o=s.result;if(e==null){var l=o.transaction(Wi,"readonly"),u=l.objectStore(Wi),c=u.get(i.modelPath);c.onsuccess=function(){if(c.result==null)return o.close(),a(new Error("Cannot find model with path '"+i.modelPath+"' in IndexedDB."));r(c.result.modelArtifacts)},c.onerror=function(g){return o.close(),a(c.error)},l.oncomplete=function(){return o.close()}}else{var h=ba(e),d=o.transaction(si,"readwrite"),p=d.objectStore(si),f=p.put({modelPath:i.modelPath,modelArtifactsInfo:h}),m;f.onsuccess=function(){m=o.transaction(Wi,"readwrite");var g=m.objectStore(Wi),v=g.put({modelPath:i.modelPath,modelArtifacts:e,modelArtifactsInfo:h});v.onsuccess=function(){return r({modelArtifactsInfo:h})},v.onerror=function(b){p=d.objectStore(si);var w=p.delete(i.modelPath);w.onsuccess=function(){return o.close(),a(v.error)},w.onerror=function(S){return o.close(),a(v.error)}}},f.onerror=function(g){return o.close(),a(f.error)},d.oncomplete=function(){m==null?o.close():m.oncomplete=function(){return o.close()}}}},s.onerror=function(o){return a(s.error)}})},n.URL_SCHEME="indexeddb://",n}(),rm=function(n){return He().getBool("IS_BROWSER")&&(!Array.isArray(n)&&n.startsWith(Ir.URL_SCHEME))?U2(n.slice(Ir.URL_SCHEME.length)):null};Qt.registerSaveRouter(rm);Qt.registerLoadRouter(rm);function U2(n){return new Ir(n)}function B2(n){return n.startsWith(Ir.URL_SCHEME)?n.slice(Ir.URL_SCHEME.length):n}var z2=function(){function n(){this.indexedDB=im()}return n.prototype.listModels=function(){return de(this,void 0,void 0,function(){var t=this;return pe(this,function(e){return[2,new Promise(function(i,r){var a=t.indexedDB.open(rc,ac);a.onupgradeneeded=function(){return sc(a)},a.onsuccess=function(){var s=a.result,o=s.transaction(si,"readonly"),l=o.objectStore(si),u=l.getAll();u.onsuccess=function(){for(var c={},h=0,d=u.result;h0,function(){return"scheme must not be an empty string."});var i=n.getInstance();E(i.managers[t]==null,function(){return"A model store manager is already registered for scheme '"+t+"'."}),i.managers[t]=e},n.getManager=function(t){var e=this.getInstance().managers[t];if(e==null)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},n.getSchemes=function(){return Object.keys(this.getInstance().managers)},n}();function Is(n){if(n.indexOf(Nr)===-1)throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+(""+oi.getSchemes().join(",")));return{scheme:n.split(Nr)[0],path:n.split(Nr)[1]}}function lm(n,t,e){return e===void 0&&(e=!1),de(this,void 0,void 0,function(){var i,r,a,s,o,l,u,c,h;return pe(this,function(d){switch(d.label){case 0:return E(n!==t,function(){return"Old path and new path are the same: '"+n+"'"}),i=Qt.getLoadHandlers(n),E(i.length>0,function(){return"Copying failed because no load handler is found for source URL "+n+"."}),E(i.length<2,function(){return"Copying failed because more than one ("+i.length+") "+("load handlers for source URL "+n+".")}),r=i[0],a=Qt.getSaveHandlers(t),E(a.length>0,function(){return"Copying failed because no save handler is found for destination "+("URL "+t+".")}),E(a.length<2,function(){return"Copying failed because more than one ("+i.length+") "+("save handlers for destination URL "+t+".")}),s=a[0],o=Is(n).scheme,l=Is(n).path,u=o===Is(n).scheme,[4,r.load()];case 1:return c=d.sent(),e&&u?[4,oi.getManager(o).removeModel(l)]:[3,3];case 2:d.sent(),d.label=3;case 3:return[4,s.save(c)];case 4:return h=d.sent(),e&&!u?[4,oi.getManager(o).removeModel(l)]:[3,6];case 5:d.sent(),d.label=6;case 6:return[2,h.modelArtifactsInfo]}})})}function K2(){return de(this,void 0,void 0,function(){var n,t,e,i,r,a,s,o;return pe(this,function(l){switch(l.label){case 0:n=oi.getSchemes(),t={},e=0,i=n,l.label=1;case 1:return e0,function(){return"promises must be a none empty array"})}function o(l,u){E(l>=0&&l<=1,function(){return"Progress fraction must be in range [0, 1], but "+("got startFraction "+l)}),E(u>=0&&u<=1,function(){return"Progress fraction must be in range [0, 1], but "+("got endFraction "+u)}),E(u>=l,function(){return"startFraction must be no more than endFraction, but "+("got startFraction "+l+" and endFraction ")+(""+u)})}return Promise.all(n.map(a))}function dm(n,t){return de(this,void 0,void 0,function(){var e,i,r,a,s,o,l,u,c,h,d;return pe(this,function(p){switch(p.label){case 0:return t==null&&(t={}),e=t.fetchFunc==null?He().platform.fetch:t.fetchFunc,i=n.map(function(f){return e(f,t.requestInit,{isBinary:!0})}),r=0,a=.5,t.onProgress==null?[4,Promise.all(i)]:[3,2];case 1:return o=p.sent(),[3,4];case 2:return[4,hm(i,t.onProgress,r,a)];case 3:o=p.sent(),p.label=4;case 4:return s=o,l=s.map(function(f){return f.arrayBuffer()}),u=.5,c=1,t.onProgress==null?[4,Promise.all(l)]:[3,6];case 5:return d=p.sent(),[3,8];case 6:return[4,hm(l,t.onProgress,u,c)];case 7:d=p.sent(),p.label=8;case 8:return h=d,[2,h]}})})}function cA(n,t,e,i){return t===void 0&&(t=""),de(this,void 0,void 0,function(){var r,a;return pe(this,function(s){return r=function(o){return dm(o,{requestInit:i})},a=pm(r),[2,a(n,t,e)]})})}function pm(n){var t=this;return function(e,i,r){return i===void 0&&(i=""),de(t,void 0,void 0,function(){var a,s,o,l,u,c,h,d,p,f;return pe(this,function(m){switch(m.label){case 0:if(a=e.map(function(){return!1}),s={},o=r!=null?r.map(function(){return!1}):[],l=[],e.forEach(function(g,v){var b=0;g.weights.forEach(function(w){var S="quantization"in w?w.quantization.dtype:w.dtype,L=tc[S]*ot(w.shape),x=function(){a[v]=!0,s[v]==null&&(s[v]=[]),s[v].push({manifestEntry:w,groupOffset:b,sizeBytes:L})};r!=null?r.forEach(function(C,R){C===w.name&&(x(),o[R]=!0)}):x(),l.push(w.name),b+=L})}),!o.every(function(g){return g}))throw u=r.filter(function(g,v){return!o[v]}),new Error("Could not find weights in manifest with names: "+(u.join(", ")+`. `)+"Manifest JSON has weights with names: "+(l.join(", ")+"."));return c=a.reduce(function(g,v,b){return v&&g.push(b),g},[]),h=[],c.forEach(function(g){e[g].paths.forEach(function(v){var b=i+(i.endsWith("/")?"":"/")+v;h.push(b)})}),[4,n(h)];case 1:return d=m.sent(),p={},f=0,c.forEach(function(g){for(var v=e[g].paths.length,b=0,w=0;w0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&E(t.length===2,function(){return"URL paths for http must have a length of 2, "+("(actual length is "+t.length+").")}),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}return n.prototype.save=function(t){return de(this,void 0,void 0,function(){var e,i,r,a;return pe(this,function(s){switch(s.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),e.body=new FormData,i=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:i},e.body.append("model.json",new Blob([JSON.stringify(r)],{type:dA}),"model.json"),t.weightData!=null&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:hA}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if(a=s.sent(),a.ok)return[2,{modelArtifactsInfo:ba(t),responses:[a]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+(a.status+"."))}})})},n.prototype.load=function(){return de(this,void 0,void 0,function(){var t,e,i,r,a,s,o,l,u,c,h,d,p,f,m;return pe(this,function(g){switch(g.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(t=g.sent(),!t.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.");g.label=2;case 2:return g.trys.push([2,4,,5]),[4,t.json()];case 3:return e=g.sent(),[3,5];case 4:throw i=g.sent(),r="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?r+=" 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.":r+=" Please make sure the server is serving valid JSON for this request.",new Error(r);case 5:if(a=e.modelTopology,s=e.weightsManifest,o=e.generatedBy,l=e.convertedBy,u=e.format,c=e.userDefinedMetadata,a==null&&s==null)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return s!=null?[4,this.loadWeights(s)]:[3,7];case 6:p=g.sent(),h=p[0],d=p[1],g.label=7;case 7:return f={modelTopology:a,weightSpecs:h,weightData:d,userDefinedMetadata:c,generatedBy:o,convertedBy:l,format:u},m=e.modelInitializer,m&&(f.modelInitializer=m),[2,f]}})})},n.prototype.loadWeights=function(t){return de(this,void 0,void 0,function(){var e,i,r,a,s,o,l,u,c,h,d,p,f,m,g,v,b,w,S,L,x;return pe(this,function(C){switch(C.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,i=pA(e),r=i[0],a=i[1],s=this.weightPathPrefix||r,o=[],l=0,u=t;lt?n.substring(e):"";return[i+"/",r]}function uc(n){return n.match(fm.URL_SCHEME_REGEX)!=null}var mm=function(n,t){if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;var e=!0;return Array.isArray(n)?e=n.every(function(i){return uc(i)}):e=uc(n),e?cc(n,t):null};Qt.registerSaveRouter(mm);Qt.registerLoadRouter(mm);function cc(n,t){return new fm(n,t)}function fA(n,t){return cc(n,t)}var hc=function(){function n(t){this.modelArtifacts=t}return n.prototype.load=function(){return de(this,void 0,void 0,function(){return pe(this,function(t){return[2,this.modelArtifacts]})})},n}(),mA=function(){function n(t){this.saveHandler=t}return n.prototype.save=function(t){return de(this,void 0,void 0,function(){return pe(this,function(e){return[2,this.saveHandler(t)]})})},n}();function gA(n,t,e,i){if(arguments.length===1){var r=n.modelTopology!=null||n.weightSpecs!=null;return r?new hc(n):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new hc({modelTopology:n}))}else return console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new hc({modelTopology:n,weightSpecs:t,weightData:e,trainingConfig:i})}function vA(n){return new mA(n)}var yA={__proto__:null,browserFiles:uA,browserHTTPRequest:fA,concatenateArrayBuffers:ic,decodeWeights:em,encodeWeights:T2,fromMemory:gA,getLoadHandlers:W2,getModelArtifactsInfoForJSON:ba,getSaveHandlers:F2,http:cc,isHTTPScheme:uc,loadWeights:cA,registerLoadRouter:k2,registerSaveRouter:D2,weightsLoaderFactory:pm,withSaveHandler:vA,copyModel:$2,listModels:K2,moveModel:X2,removeModel:j2};function bA(n,t){var e=O(n,"x","reshape",null),i={x:e},r={shape:t},a=function(s,o){return t=kf(t,e.size),E(e.size===ot(t),function(){return"new shape and old shape must have the same number of elements."}),o([e]),s.reshape(e,t)};return z.runKernelFunc(a,i,null,ou,r)}var V=U({reshape_:bA});function wA(n,t,e,i){var r;e===void 0&&(e=!1),i===void 0&&(i=!1);var a=O(n,"a","matMul"),s=O(t,"b","matMul");r=at(a,s),a=r[0],s=r[1],E(a.rank>=2&&s.rank>=2&&a.rank===s.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, "+("got ranks "+a.rank+" and "+s.rank+".")});var o=e?a.shape[a.rank-2]:a.shape[a.rank-1],l=i?s.shape[s.rank-1]:s.shape[s.rank-2],u=e?a.shape[a.rank-1]:a.shape[a.rank-2],c=i?s.shape[s.rank-2]:s.shape[s.rank-1],h=a.shape.slice(0,-2),d=s.shape.slice(0,-2),p=ot(h),f=ot(d);E(ln(h,d),function(){return"Error in matMul: outer dimensions ("+h+") and ("+(d+") of Tensors with shapes "+a.shape+" and ")+(s.shape+" must match.")}),E(o===l,function(){return"Error in matMul: inner shapes ("+o+") and ("+(l+") of Tensors with shapes "+a.shape+" and ")+(s.shape+" and transposeA="+e)+(" and transposeB="+i+" must match.")});var m=a.shape.slice(0,-2).concat([u,c]),g=e?V(a,[p,o,u]):V(a,[p,u,o]),v=i?V(s,[f,c,l]):V(s,[f,l,c]),b=function(x,C){return C([g,v]),x.batchMatMul(g,v,e,i)},w={a:g,b:v},S={transposeA:e,transposeB:i},L=z.runKernelFunc(b,w,null,pl,S);return V(L,m)}var Fe=U({matMul_:wA});function SA(n,t,e,i){if(e===void 0&&(e=1),i===void 0&&(i=0),t<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+t);var r=O(n,"indices","oneHot","int32"),a=r.shape.concat([t]),s=function(u,c){return c([r]),V(u.oneHot(V(r,[r.size]),t,e,i),a)},o={indices:r},l={depth:t,onValue:e,offValue:i};return z.runKernelFunc(s,o,null,tu,l)}var As=U({oneHot_:SA});function LA(n,t){var e=O(n,"x","transpose");if(t==null&&(t=e.shape.map(function(a,s){return s}).reverse()),E(e.rank===t.length,function(){return"Error in transpose: rank of input "+e.rank+" "+("must match length of perm "+t+".")}),t.forEach(function(a){E(a>=0&&a0&&Number.isInteger(e),function(){return"If provided, numClasses must be a positive integer, "+("but got "+e)}),E(i.rank===1,function(){return"Expected the rank of labels to be 1, but got "+i.rank}),E(r.rank===1,function(){return"Expected the rank of predictions to be 1, "+("but got "+r.rank)}),E(i.shape[0]===r.shape[0],function(){return"Mismatch in the number of examples: "+(i.shape[0]+" vs. "+r.shape[0]+". ")+"Labels and predictions should have the same number of elements."}),E(e>0&&Number.isInteger(e),function(){return"numClasses is required to be a positive integer, but got "+(""+e)});var a=As(ue(i,"int32"),e),s=As(ue(r,"int32"),e),o=ut(a);return ue(Fe(o,s),"int32")}var AA=U({confusionMatrix_:IA});var TA={__proto__:null,confusionMatrix:AA};function gm(n,t,e){if(ki(n),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");var i=Rn(n,e);if(i.length!==3&&i.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(i.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return ri(n,t,i,e)}var xr;function NA(n,t){if(t===void 0&&(t=3),t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(n==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var e=!1,i=!1,r=!1,a=!1,s=!1;if(n.data instanceof Uint8Array)e=!0;else if(typeof ImageData!="undefined"&&n instanceof ImageData)i=!0;else if(typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement)a=!0;else if(n.getContext!=null)s=!0;else 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 "+n.constructor.name));if(r){var o=2;if(r&&n.readyState element.")}var l=Hu(Bu,z.backendName);if(l!=null){var u={pixels:n},c={numChannels:t};return z.runKernel(Bu,u,c)}var h=r?[n.videoWidth,n.videoHeight]:[n.width,n.height],d=h[0],p=h[1],f;s?f=n.getContext("2d").getImageData(0,0,d,p).data:i||e?f=n.data:(a||r)&&(xr==null&&(xr=document.createElement("canvas").getContext("2d")),xr.canvas.width=d,xr.canvas.height=p,xr.drawImage(n,0,0,d,p),f=xr.getImageData(0,0,d,p).data);var m;if(t===4)m=new Int32Array(f);else{var g=d*p;m=new Int32Array(g*t);for(var v=0;v4||o===2)throw new Error("toPixels only supports depth of size "+("1, 3 or 4 but got "+o));if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error("Unsupported type for toPixels: "+e.dtype+". Please use float32 or int32 tensors.");return[4,e.data()];case 1:for(l=b.sent(),u=e.dtype==="float32"?255:1,c=new Uint8ClampedArray(s*a*4),h=0;h1)throw new Error("Tensor values for a float32 Tensor must be in the "+("range [0 - 1] but encountered "+f+"."))}else if(e.dtype==="int32"&&(f<0||f>255))throw new Error("Tensor values for a int32 Tensor must be in the "+("range [0 - 255] but encountered "+f+"."));o===1?(d[0]=f*u,d[1]=f*u,d[2]=f*u):d[p]=f*u}m=h*4,c[m+0]=Math.round(d[0]),c[m+1]=Math.round(d[1]),c[m+2]=Math.round(d[2]),c[m+3]=Math.round(d[3])}return t!=null&&(t.width=s,t.height=a,g=t.getContext("2d"),v=new ImageData(c,s,a),g.putImageData(v,0,0)),e!==n&&e.dispose(),[2,c]}})})}var CA=U({fromPixels_:NA}),RA={__proto__:null,toPixels:xA,fromPixels:CA};function vm(n,t){if(n.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher,"+(" but the rank was "+n.rank+"."));if(t.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher,"+(" but the rank was "+t.rank+"."));if(t.dtype!=="int32")throw new Error("tf.gatherND() expects the indices to be int32 type,"+(" but the dtype was "+t.dtype+"."));if(t.shape[t.rank-1]>n.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+(t.shape[t.rank-1]+" vs. "+n.rank));if(n.size===0)throw new Error("Requested more than 0 entries, but input is empty."+(" Input shape: "+n.shape+"."));for(var e=t.shape,i=e[e.length-1],r=1,a=0;a1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,a="Must have updates.shape = indices.shape[:batchDim] + "+("shape[sliceDim:], got updates.shape: "+e.shape)+(", indices.shape: "+t.shape+", shape: "+n)+(", sliceDim: "+i+", and batchDim: "+r+".");if(e.rank1?t.shape[i-1]:1,a=e.length,s=1,o=r;o0;)n&1&&t.push(e),n/=2,e++;return t}function wm(n,t,e){for(var i=[],r=0;r0){var p=t[0],f=e+1;c=Am(s,p,f,i,n),h=Tm(o,p,f,r,n),d=Sm(a,p,f,n)}else for(var m=0;m-1)a[o]=0;else{var l=Lm(t,e,o),u=i[l];n&1<-1)a[o]=Number.MAX_SAFE_INTEGER;else{var l=Lm(t,e,o),u=i[l];n&1<0?s=Number.MIN_SAFE_INTEGER:s=Number.MAX_SAFE_INTEGER);var l=i[r];return s<0&&(s+=l),s=da(0,s,l-1),s}function Cm(n,t,e,i,r,a){var s=t[r],o=e[r]||1;(n&1<0?s=Number.MAX_SAFE_INTEGER:s=Number.MIN_SAFE_INTEGER);var l=i[r];return s<0&&(s+=l),o>0?s=da(0,s,l):s=da(-1,s,l-1),s}function DA(n,t,e){for(var i=e.length,r=0;r1){i=r;break}for(var r=i+1;r0||e[r]!==n[r])return!1;return!0}function kA(n,t){for(var e=n.length>0?n[n.length-1]:1,i=0;i=0?s:(E(s===-1,function(){return"Negative size values should be exactly -1 but got "+(s+" for the slice() size at index "+o+".")}),n.shape[o]-i[o])}),[i,a]}var Om={__proto__:null,assertParamsValid:bm,maskToAxes:Ts,computeOutShape:wm,stridesWithElidedDims:Sm,getNormalizedAxes:Rm,startIndicesWithElidedDims:Am,stopIndicesWithElidedDims:Tm,stridesForAxis:Nm,startForAxis:xm,stopForAxis:Cm,isSliceContinous:DA,computeFlatOffset:kA,parseSliceParams:fc};var Em=function(){function n(){}return n.prototype.getClassName=function(){return this.constructor.className},n.fromConfig=function(t,e){return new t(e)},n}(),Dm=function(){function n(){this.classNameMap={}}return n.getMap=function(){return n.instance==null&&(n.instance=new n),n.instance},n.register=function(t){n.getMap().classNameMap[t.className]=[t,t.fromConfig]},n}();function li(n){E(n.className!=null,function(){return"Class being registered does not have the static className property defined."}),E(typeof n.className=="string",function(){return"className is required to be a string, but got type "+typeof n.className}),E(n.className.length>0,function(){return"Class being registered has an empty-string as its className, which is disallowed."}),Dm.register(n)}var FA={__proto__:null,Serializable:Em,SerializationMap:Dm,registerClass:li};var WA=.001,km=.1;function UA(n,t,e){return e==null&&(e=mc()),gc(n,t,function(i,r){return vc(i,r,e)})}function mc(){return z.backend.floatPrecision()===32?WA:km}function gc(n,t,e){var i=!0;if((Ot(n)||Ot(t))&&(i=!1),Ot(n)&&Ot(t)&&(i=!0),i){var r=n.constructor.name,a=t.constructor.name;if(r!==a)throw new Error("Arrays are of different type. Actual: "+r+". "+("Expected: "+a))}if(Array.isArray(n)&&Array.isArray(t)){var s=Rn(n),o=Rn(t);if(!ln(s,o))throw new Error("Arrays have different shapes. "+("Actual: ["+s+"]. Expected: ["+o+"]"))}var l=Ot(n)?n:Fi(n),u=Ot(t)?t:Fi(t);if(l.length!==u.length)throw new Error("Arrays have different lengths actual: "+l.length+" vs "+("expected: "+u.length+`. `)+("Actual: "+l+`. `)+("Expected: "+u+"."));for(var c=0;ce)}function _A(n,t,e){for(var i=0;ie)throw new Error("Value out of range:"+n[i]+" low: "+t+", high: "+e)}function MA(n,t){expect(new Float32Array(n)).toEqual(new Float32Array(t))}var HA={__proto__:null,TEST_EPSILON_FLOAT16:km,expectArraysClose:UA,testEpsilon:mc,expectPromiseToFail:BA,expectArraysEqual:zA,expectNumbersClose:PA,expectValuesInRange:_A,expectArrayBuffersEqual:MA};var VA="2.6.0";function qA(){He().set("PROD",!0)}function GA(){He().set("DEBUG",!0)}function YA(){He().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function It(n){He().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(n+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function KA(){z.disposeVariables()}function jA(){return z}function $A(){return z.memory()}function XA(n){return z.profile(n)}function ft(n,t){return z.tidy(n,t)}function zt(n){var t=ec(n);t.forEach(function(e){return e.dispose()})}function Fm(n){return z.keep(n)}function JA(n){return z.time(n)}function ZA(n){return z.setBackend(n)}function QA(){return z.ready()}function eT(){return z.backendName}function tT(n){z.removeBackend(n)}function nT(n){return z.findBackend(n)}function iT(n){return z.findBackendFactory(n)}function rT(n,t,e){return e===void 0&&(e=1),z.registerBackend(n,t,e)}function aT(){return z.backend}function sT(n,t){He().setPlatform(n,t)}function oT(n,t){var e,i=O(n,"a","add"),r=O(t,"b","add");e=at(i,r),i=e[0],r=e[1];var a=function(o,l){var u=o.add(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,ds)}var fe=U({add_:oT});function lT(n,t){var e,i=O(n,"a","floorDiv"),r=O(t,"b","floorDiv");e=at(i,r),i=e[0],r=e[1];var a=function(o,l){var u=o.floorDiv(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,kl)}var yc=U({floorDiv_:lT});function uT(n,t){var e,i=O(n,"a","div"),r=O(t,"b","div");if(e=at(i,r),i=e[0],r=e[1],i.dtype==="int32"&&r.dtype==="int32")return yc(i,r);var a=function(l,u){var c=l.realDivide(i,r);return u([i,r]),c},s={a:i,b:r},o={};return z.runKernelFunc(a,s,null,xl,o)}var Ie=U({div_:uT});function cT(n,t){var e,i=O(n,"a","mul"),r=O(t,"b","mul");e=at(i,r),i=e[0],r=e[1];var a=function(o,l){var u=o.multiply(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,Zl)}var J=U({mul_:cT});function hT(n){var t=O(n,"x","abs"),e={x:t};return z.runKernelFunc(function(i,r){return r([t]),t.dtype==="complex64"?i.complexAbs(t):i.abs(t)},e,null,el)}var qt=U({abs_:hT});function dT(n){var t=O(n,"x","acos"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.acos(t);return r([t]),a},e,null,tl)}var Wm=U({acos_:dT});function pT(n){var t=O(n,"x","acosh"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.acosh(t);return r([t]),a},e,null,nl)}var Um=U({acosh_:pT});function fT(n){E(Array.isArray(n),function(){return"The argument passed to tf.addN() must be a list of tensors"}),E(n.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+(""+n.length)});var t=n.map(function(a,s){return O(a,"tensors"+s,"addN")}),e=t[0];t.forEach(function(a){if(a.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(function(a){if(!ln(a.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var i=function(a,s){var o=a.addN(t);return s(t),o},r=t;return z.runKernelFunc(i,r,null,il)}var mT=U({addN_:fT});function bc(n,t){for(var e=0;e=0&&t=1,function(){return"Pass at least one tensor to concat"});var e=ya(n,"tensors","concat");e[0].dtype==="complex64"&&e.forEach(function(s){if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype `+s.dtype+". ")});var i=function(s,o){var l=Qe(t,e[0].shape)[0],u=$m(e.map(function(d){return d.shape}),l);if(ot(u)===0)return ai([],u);if(e=e.filter(function(d){return d.size>0}),e.length===1)return e[0];var c=e.map(function(d){return d.shape});jm(c,l);var h=s.concat(e,l);return o(e),h},r=e,a={axis:t};return z.runKernelFunc(i,r,null,yl,a)}var xt=U({concat_:FT});function WT(n){var t=O(n,"x","sigmoid"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.sigmoid(t);return r([a]),a},e,null,wu)}var zi=U({sigmoid_:WT});function UT(n,t,e){var i=O(n,"x","slice");if(i.rank===0)throw new Error("Slicing scalar is not possible");var r=function(o,l){var u=fc(i,t,e),c=u[0],h=u[1];return bm(i,c,h),l([i]),o.slice(i,c,h)},a={x:i},s={begin:t,size:e};return z.runKernelFunc(r,a,null,gu,s)}var ze=U({slice_:UT});function BT(n){var t=O(n,"x","tanh"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.tanh(t);return r([a]),a},e,null,Ou)}var Cs=U({tanh_:BT});function zT(n,t,e,i,r,a){var s=O(n,"forgetBias","basicLSTMCell"),o=O(t,"lstmKernel","basicLSTMCell"),l=O(e,"lstmBias","basicLSTMCell"),u=O(i,"data","basicLSTMCell"),c=O(r,"c","basicLSTMCell"),h=O(a,"h","basicLSTMCell"),d=xt([u,h],1),p=Fe(d,o),f=fe(p,l),m=f.shape[0],g=f.shape[1]/4,v=[m,g],b=ze(f,[0,0],v),w=ze(f,[0,g],v),S=ze(f,[0,g*2],v),L=ze(f,[0,g*3],v),x=fe(J(zi(b),Cs(w)),J(c,zi(fe(s,S)))),C=J(Cs(x),zi(L));return[x,C]}var PT=U({basicLSTMCell_:zT});function _T(n,t,e){var i=O(n,"x","batchToSpaceND"),r=t.reduce(function(l,u){return l*u});E(i.rank>=1+t.length,function(){return"input rank is "+i.rank+" but should be > than blockShape.length "+t.length}),E(e.length===t.length,function(){return"crops.length is "+e.length+" but should be equal to blockShape.length "+t.length}),E(i.shape[0]%r===0,function(){return"input tensor batch is "+i.shape[0]+" but is not divisible by the product of "+("the elements of blockShape "+t.join(" * ")+" === "+r)});var a=function(l){return l.batchToSpaceND(i,t,e)},s={x:i},o={blockShape:t,crops:e};return z.runKernelFunc(a,s,null,fl,o)}var Rs=U({batchToSpaceND_:_T});function MT(n){var t;return n.rank===0||n.rank===1?t=V(n,[1,1,1,n.size]):n.rank===2?t=V(n,[1,1,n.shape[0],n.shape[1]]):n.rank===3?t=V(n,[1,n.shape[0],n.shape[1],n.shape[2]]):t=n,t}function HT(n,t,e,i,r,a){a==null&&(a=.001);var s=O(n,"x","batchNorm"),o=O(t,"mean","batchNorm"),l=O(e,"variance","batchNorm"),u;r!=null&&(u=O(r,"scale","batchNorm"));var c;i!=null&&(c=O(i,"offset","batchNorm")),E(o.rank===l.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),E(c==null||o.rank===c.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),E(u==null||o.rank===u.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."});var h=MT(s),d=function(g,v){return v([h,o,l,u]),g.batchNorm(h,Os(o),Os(l),Os(c),Os(u),a)},p={x:h,scale:u,offset:c,mean:o,variance:l},f={varianceEpsilon:a},m=z.runKernelFunc(d,p,null,Fl,f);return V(m,s.shape)}function Os(n){return n==null?null:n.rank===0?V(n,[n.size]):n.rank===1?n:n.rank===2?V(n,[1,1,n.shape[0],n.shape[1]]):n.rank===3?V(n,[1,n.shape[0],n.shape[1],n.shape[2]]):n}var Ia=U({batchNorm_:HT});function VT(n,t,e,i,r,a){var s=O(n,"x","batchNorm"),o=O(t,"mean","batchNorm"),l=O(e,"variance","batchNorm"),u;r!=null&&(u=O(r,"scale","batchNorm"));var c;return i!=null&&(c=O(i,"offset","batchNorm")),E(s.rank===2,function(){return"Error in batchNorm2D: x must be rank 2 but got rank "+(s.rank+".")}),E(o.rank===2||o.rank===1,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but "+("got rank "+o.rank+".")}),E(l.rank===2||l.rank===1,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 "+("but got rank "+l.rank+".")}),u!=null&&E(u.rank===2||u.rank===1,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 "+("but got rank "+u.rank+".")}),c!=null&&E(c.rank===2||c.rank===1,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 "+("but got rank "+c.rank+".")}),Ia(s,o,l,c,u,a)}var qT=U({batchNorm2d_:VT});function GT(n,t,e,i,r,a){var s=O(n,"x","batchNorm"),o=O(t,"mean","batchNorm"),l=O(e,"variance","batchNorm"),u;r!=null&&(u=O(r,"scale","batchNorm"));var c;return i!=null&&(c=O(i,"offset","batchNorm")),E(s.rank===3,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+(s.rank+".")}),E(o.rank===3||o.rank===1,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but "+("got rank "+o.rank+".")}),E(l.rank===3||l.rank===1,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 "+("but got rank "+l.rank+".")}),u!=null&&E(u.rank===3||u.rank===1,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 "+("but got rank "+u.rank+".")}),c!=null&&E(c.rank===3||c.rank===1,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 "+("but got rank "+c.rank+".")}),Ia(s,o,l,c,u,a)}var YT=U({batchNorm3d_:GT});function KT(n,t,e,i,r,a){var s=O(n,"x","batchNorm"),o=O(t,"mean","batchNorm"),l=O(e,"variance","batchNorm"),u;r!=null&&(u=O(r,"scale","batchNorm"));var c;return i!=null&&(c=O(i,"offset","batchNorm")),E(s.rank===4,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+(s.rank+".")}),E(o.rank===4||o.rank===1,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but "+("got rank "+o.rank+".")}),E(l.rank===4||l.rank===1,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 "+("but got rank "+l.rank+".")}),u!=null&&E(u.rank===4||u.rank===1,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 "+("but got rank "+u.rank+".")}),c!=null&&E(c.rank===4||c.rank===1,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 "+("but got rank "+c.rank+".")}),Ia(s,o,l,c,u,a)}var jT=U({batchNorm4d_:KT});function $T(n,t){var e=O(n,"broadcastTo","x"),i=e.shape;if(t.some(function(d){return!(d>0)||d%1!==0}))throw new Error("broadcastTo(): Invalid broadcast shape ["+t+"].");if(t.lengthe.rank){for(var r=e.shape.slice();r.length=0;o--)if(a[o]===t[o])s[o]=1;else if(e.shape[o]!==1)throw new Error("broadcastTo(): ["+i+"] cannot be broadcast to ["+t+"].");var l=s.map(function(d,p){return d>1?p:-1}).filter(function(d){return d>=0});if(l.length===0)return Ui(e);var u=function(d){return d.tile(e,s)},c={x:e},h={shape:t,inputShape:a};return z.runKernelFunc(u,c,null,ml,h)}var Es=U({broadcastTo_:$T});function XT(n){var t=O(n,"x","ceil"),e={x:t};return z.runKernelFunc(function(i){return i.ceil(t)},e,null,gl)}var Xm=U({ceil_:XT});function JT(n,t,e){var i=O(n,"x","clipByValue");E(t<=e,function(){return"Error in clip: min ("+t+") must be "+("less than or equal to max ("+e+").")});var r={x:i},a={clipValueMin:t,clipValueMax:e};return z.runKernelFunc(function(s,o){var l=s.clip(i,t,e);return o([i]),l},r,null,vl,a)}var Jm=U({clipByValue_:JT});function ZT(n){return xt(n,0)}var QT=U({concat1d_:ZT});function e1(n,t){return xt(n,t)}var t1=U({concat2d_:e1});function n1(n,t){return xt(n,t)}var i1=U({concat3d_:n1});function r1(n,t){return xt(n,t)}var a1=U({concat4d_:r1});function s1(n,t,e,i,r,a,s){r===void 0&&(r="NHWC"),a===void 0&&(a=[1,1]);var o=O(n,"x","conv2d"),l=O(t,"filter","conv2d"),u=o,c=!1;o.rank===3&&(c=!0,u=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),E(u.rank===4,function(){return"Error in conv2d: input must be rank 4, but got rank "+u.rank+"."}),E(l.rank===4,function(){return"Error in conv2d: filter must be rank 4, but got rank "+(l.rank+".")}),s!=null&&E(rt(i),function(){return"Error in conv2d: pad must be an integer when using, "+("dimRoundingMode "+s+" but got pad "+i+".")});var h=r==="NHWC"?u.shape[3]:u.shape[1];E(h===l.shape[2],function(){return"Error in conv2d: depth of input ("+h+") must match "+("input depth for filter "+l.shape[2]+".")}),E(Pt(e,a),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+e+" and dilations '"+a+"'")});var d=function(g,v){var b=wa(r),w=Dn(u.shape,l.shape,e,a,i,s,!1,b),S=g.conv2d(u,l,w);return v([u,l]),S},p={x:u,filter:l},f={strides:e,pad:i,dataFormat:r,dilations:a,dimRoundingMode:s},m=z.runKernelFunc(d,p,null,bl,f);return c?V(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Or=U({conv2d_:s1});function o1(n,t,e,i,r,a,s){r===void 0&&(r="NWC"),a===void 0&&(a=1);var o=O(n,"x","conv1d"),l=O(t,"filter","conv1d"),u=o,c=!1;o.rank===2&&(c=!0,u=V(o,[1,o.shape[0],o.shape[1]])),E(u.rank===3,function(){return"Error in conv1d: input must be rank 3, but got rank "+u.rank+"."}),E(l.rank===3,function(){return"Error in conv1d: filter must be rank 3, but got rank "+(l.rank+".")}),s!=null&&E(rt(i),function(){return"Error in conv1d: pad must be an integer when using, "+("dimRoundingMode "+s+" but got pad "+i+".")}),E(u.shape[2]===l.shape[1],function(){return"Error in conv1d: depth of input ("+u.shape[2]+") must match "+("input depth for filter "+l.shape[1]+".")}),E(Pt(e,a),function(){return"Error in conv1D: Either stride or dilation must be 1. "+("Got stride "+e+" and dilation '"+a+"'")}),E(r==="NWC",function(){return"Error in conv1d: got dataFormat of "+r+" but only NWC is currently supported."});var h=V(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=V(u,[u.shape[0],1,u.shape[1],u.shape[2]]),p=[1,e],f=[1,a],m="NHWC",g=Or(d,h,p,i,m,f,s);return c?V(g,[g.shape[2],g.shape[3]]):V(g,[g.shape[0],g.shape[2],g.shape[3]])}var Zm=U({conv1d_:o1});function l1(n,t,e,i,r,a,s){a===void 0&&(a="NHWC"),E(n.length===t.rank,function(){return"Length of inShape "+("("+n.length+") and rank of dy ("+t.rank+") must match")});var o=n,l=t,u=!1;t.rank===3&&(u=!0,l=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,n[0],n[1],n[2]]),E(o.length===4,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+(o.length+".")}),E(l.rank===4,function(){return"Error in conv2dDerInput: dy must be rank 4, but got "+("rank "+l.rank)}),E(e.rank===4,function(){return"Error in conv2dDerInput: filter must be rank 4, but got "+("rank "+e.rank)});var c=a==="NHWC"?o[3]:o[1],h=a==="NHWC"?l.shape[3]:l.shape[1];E(c===e.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+c+") must "+("match input depth for filter "+e.shape[2]+".")}),E(h===e.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+h+") must "+("match output depth for filter "+e.shape[3]+".")}),s!=null&&E(rt(r),function(){return"Error in conv2dDerInput: pad must be an integer when using, "+("dimRoundingMode "+s+" but got pad "+r+".")});var d=function(g,v){var b=1,w=wa(a),S=Dn(o,e.shape,i,b,r,s,!1,w),L=g.conv2dDerInput(l,e,S);return v([l,e]),L},p={dy:l,filter:e},f={strides:i,pad:r,dataFormat:a,dimRoundingMode:s,inputShape:o},m=z.runKernelFunc(d,p,null,wl,f);return u?V(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Ic=U({conv2DBackpropInput_:l1});function u1(n,t,e,i,r,a){var s=O(n,"x","conv2dTranspose"),o=O(t,"filter","conv2dTranspose");return Ic(e,s,o,i,r,"NHWC",a)}var Qm=U({conv2dTranspose_:u1});function c1(n,t,e,i,r,a){r===void 0&&(r="NDHWC"),a===void 0&&(a=[1,1,1]);var s=O(n,"x","conv3d"),o=O(t,"filter","conv3d"),l=s,u=!1;s.rank===4&&(u=!0,l=V(s,[1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]])),E(l.rank===5,function(){return"Error in conv3d: input must be rank 5, but got rank "+l.rank+"."}),E(o.rank===5,function(){return"Error in conv3d: filter must be rank 5, but got rank "+(o.rank+".")}),E(l.shape[4]===o.shape[3],function(){return"Error in conv3d: depth of input ("+l.shape[4]+") must match "+("input depth for filter "+o.shape[3]+".")}),E(Pt(e,a),function(){return"Error in conv3D: Either strides or dilations must be 1. "+("Got strides "+e+" and dilations '"+a+"'")}),E(r==="NDHWC",function(){return"Error in conv3d: got dataFormat of "+r+" but only NDHWC is currently supported."});var c=function(f,m){var g=Sa(l.shape,o.shape,e,a,i),v=f.conv3d(l,o,g);return m([l,o]),v},h={x:l,filter:o},d={strides:e,pad:i,dataFormat:r,dilations:a},p=z.runKernelFunc(c,h,null,Sl,d);return u?V(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var h1=U({conv3d_:c1});function d1(n,t,e,i,r){E(n.length===t.rank,function(){return"Length of inShape "+("("+n.length+") and rank of dy ("+t.rank+") must match")});var a=n,s=t,o=!1;t.rank===4&&(o=!0,s=V(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),a=[1,n[0],n[1],n[2],n[3]]);var l=a[4],u=s.shape[4];E(a.length===5,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+(a.length+".")}),E(s.rank===5,function(){return"Error in conv3dDerInput: dy must be rank 5, but got "+("rank "+s.rank)}),E(e.rank===5,function(){return"Error in conv3dDerInput: filter must be rank 5, but got "+("rank "+e.rank)}),E(l===e.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+l+") must "+("match input depth for filter "+e.shape[3]+".")}),E(u===e.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+u+") must "+("match output depth for filter "+e.shape[4]+".")});var c=function(f){var m=1,g=Sa(a,e.shape,i,m,r);return f.conv3dDerInput(s,e,g)},h={dy:s},d={pad:r},p=z.runKernelFunc(c,h,null,_p,d);return o?V(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var eg=U({conv3DBackpropInput_:d1});function p1(n,t,e,i,r){var a=O(n,"x","conv3dTranspose"),s=O(t,"filter","conv3dTranspose");return eg(e,a,s,i,r)}var f1=U({conv3dTranspose_:p1});function m1(n){var t=O(n,"x","cos"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.cos(t);return r([t]),a},e,null,Ll)}var Ds=U({cos_:m1});function g1(n){var t=O(n,"x","cosh"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.cosh(t);return r([t]),a},e,null,Il)}var Ac=U({cosh_:g1});function v1(n,t,e,i){t===void 0&&(t=0),e===void 0&&(e=!1),i===void 0&&(i=!1);var r=O(n,"x","cumsum"),a=function(l,u){var c=tn([t],r.rank),h=r;c!=null&&(h=ut(r,c));var d=En(1,r.rank)[0],p=l.cumsum(h,d,e,i);if(u([r]),c!=null){var f=Ns(c);p=ut(p,f)}return p},s={x:r},o={axis:t,exclusive:e,reverse:i};return z.runKernelFunc(a,s,null,Al,o)}var Tc=U({cumsum_:v1});function y1(n,t,e){e===void 0&&(e="NHWC");var i=O(n,"x","depthToSpace"),r=e==="NHWC"?i.shape[1]:i.shape[2],a=e==="NHWC"?i.shape[2]:i.shape[3],s=e==="NHWC"?i.shape[3]:i.shape[1];E(r*t>=0,function(){return`Negative dimension size caused by overflow when multiplying `+r+" and "+t+` for depthToSpace with input shape `+i.shape}),E(a*t>=0,function(){return`Negative dimension size caused by overflow when multiplying `+a+" and "+t+` for depthToSpace with input shape `+i.shape}),E(s%(t*t)===0,function(){return"Dimension size must be evenly divisible by "+t*t+" but is "+s+" for depthToSpace with input shape "+i.shape});var o=function(c){return c.depthToSpace(i,t,e)},l={x:i},u={blockSize:t,dataFormat:e};return z.runKernelFunc(o,l,null,Hp,u)}var tg=U({depthToSpace_:y1});function b1(n,t,e,i,r,a,s){r===void 0&&(r="NHWC"),a===void 0&&(a=[1,1]);var o=O(n,"x","depthwiseConv2d"),l=O(t,"filter","depthwiseConv2d"),u=o,c=!1;o.rank===3&&(c=!0,u=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),E(u.rank===4,function(){return"Error in depthwiseConv2d: input must be rank 4, but got "+("rank "+u.rank+".")}),E(l.rank===4,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+(l.rank+".")}),E(u.shape[3]===l.shape[2],function(){return"Error in depthwiseConv2d: number of input channels "+("("+u.shape[3]+") must match the inChannels dimension in ")+("filter "+l.shape[2]+".")}),s!=null&&E(rt(i),function(){return"Error in depthwiseConv2d: pad must be an integer when using, "+("dimRoundingMode "+s+" but got pad "+i+".")});var h=function(m,g){a==null&&(a=[1,1]),E(Pt(e,a),function(){return"Error in depthwiseConv2d: Either strides or dilations must be "+("1. Got strides "+e+" and dilations '"+a+"'")});var v=Dn(u.shape,l.shape,e,a,i,s,!0),b=m.depthwiseConv2D(u,l,v);return g([u,l]),b},d={x:u,filter:l},p={strides:e,pad:i,dataFormat:r,dilations:a,dimRoundingMode:s},f=z.runKernelFunc(h,d,null,Tl,p);return c?V(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Aa=U({depthwiseConv2d_:b1});function w1(n){var t=O(n,"x","diag"),e=function(r){var a=V(t,[t.size]),s=r.diag(a),o=n.shape.concat(n.shape);return V(s,o)},i={x:t};return z.runKernelFunc(e,i,null,Gp)}var S1=U({diag_:w1});function L1(n,t,e,i,r,a){r===void 0&&(r=[1,1]),a===void 0&&(a="NHWC");var s=O(n,"x","dilation2d"),o=O(t,"filter","dilation2d");E(s.rank===3||s.rank===4,function(){return"Error in dilation2d: input must be rank 3 or 4, but got rank "+(s.rank+".")}),E(o.rank===3,function(){return"Error in dilation2d: filter must be rank 3, but got rank "+(o.rank+".")}),E(a==="NHWC",function(){return"Error in dilation2d: Only NHWC is currently supported, "+("but got dataFormat of "+a)});var l=s,u=!1;s.rank===3&&(l=V(s,[1,s.shape[0],s.shape[1],s.shape[2]]),u=!0);var c={x:l,filter:o},h={strides:e,pad:i,dilations:r},d=z.runKernel(Nl,c,h);return u?V(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var ng=U({dilation2d_:L1});function I1(n,t){for(var e=n.length,i=[],r=0;r1&&s===1&&i.unshift(a)}return i}function mt(n,t){for(var e=[],i=0;i1)&&e.unshift(a)}return e}function et(n,t){for(var e=[],i=Math.max(n.length,t.length),r=0;rt||i===n?e=!0:i=vs(n,i+1);return i}function P1(n,t,e){for(var i=[],r=n.length,a=0;a0,function(){return"variableGrads() expects at least one of the input variables to "+("be trainable, but none of the "+a+" variables is ")+"trainable."});var s=!0,o=z.gradients(n,t,null,s),l=o.value,u=o.grads;E(u.some(function(h){return h!=null}),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()."}),E(l.rank===0,function(){return"The f passed in variableGrads(f) must return a scalar, but it "+("returned a rank-"+l.rank+" tensor")});var c={};return t.forEach(function(h,d){u[d]!=null&&(c[h.name]=u[d])}),r!=null&&r.forEach(function(h){return c[h.name]=null}),{value:l,grads:c}}function kn(n){return z.customGrad(n)}function Bs(n){var t=n.filter(function(e){return e==null}).length;if(t>0)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.`)}function sN(n){var t=O(n,"x","neg"),e={x:t};return z.runKernelFunc(function(i){return i.neg(t)},e,null,Ql)}var gt=U({neg_:sN});function oN(n){var t=O(n,"x","softplus"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.softplus(t);return r([t]),a},e,null,Su)}var Oc=U({softplus_:oN});function lN(n){var t=O(n,"x","logSigmoid"),e=kn(function(i){var r=gt(Oc(gt(i))),a=function(s){var o=J(s,zi(gt(i)));return o};return{value:r,gradFunc:a}});return e(t)}var mg=U({logSigmoid_:lN});function uN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","max"),r=function(o,l){var u=Qe(t,i.shape),c=u,h=tn(c,i.rank),d=i;h!=null&&(d=ut(i,h),c=En(c.length,d.rank));var p=o.max(d,c);h!=null&&d.dispose();var f=p;if(e){var m=en(f.shape,Qe(t,i.shape));f=V(f,m),p.dispose()}return l([i,f]),f},a={x:i},s={reductionIndices:t,keepDims:e};return z.runKernelFunc(r,a,null,Gl,s)}var Hi=U({max_:uN});function cN(n,t){var e,i=O(n,"a","sub"),r=O(t,"b","sub");e=at(i,r),i=e[0],r=e[1];var a=function(o,l){var u=o.subtract(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,Cu)}var ge=U({sub_:cN});function hN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","sum");i.dtype==="bool"&&(i=ue(i,"int32"));var r=function(o,l){l([i]);var u=Qe(t,i.shape),c=tn(u,i.rank),h=u,d=i;c!=null&&(d=ut(i,c),h=En(h.length,i.rank));var p=o.sum(d,h);if(e){var f=en(p.shape,u);p=V(p,f)}return p},a={x:i},s={axis:t,keepDims:e};return z.runKernelFunc(r,a,null,Iu,s)}var Ae=U({sum_:hN});function dN(n,t){t===void 0&&(t=-1);var e=O(n,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+e.rank+" and axis was "+t));var i=function(s,o){var l=!0,u=Hi(n,t,!0),c=ge(n,u),h=ge(ue(c,"float32"),Mi(Ae(fn(c),t,l)));return o([h]),h},r={logits:e},a={axis:t};return z.runKernelFunc(i,r,null,Vl,a)}var gg=U({logSoftmax_:dN});function pN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","logSumExp"),r=Qe(t,i.shape),a=Hi(i,r,!0),s=ge(i,a),o=fn(s),l=Ae(o,r),u=Mi(l),c=fe(V(a,u.shape),u);if(e){var h=en(c.shape,r);return V(c,h)}return c}var Ec=U({logSumExp_:pN});function fN(n,t){var e=O(n,"a","logicalAnd","bool"),i=O(t,"b","logicalAnd","bool");et(e.shape,i.shape);var r={a:e,b:i};return z.runKernelFunc(function(a){return a.logicalAnd(e,i)},r,null,of)}var Vi=U({logicalAnd_:fN});function mN(n){var t=O(n,"x","logicalNot","bool"),e={x:t};return z.runKernelFunc(function(i){return i.logicalNot(t)},e,null,lf)}var zs=U({logicalNot_:mN});function gN(n,t){var e=O(n,"a","logicalOr","bool"),i=O(t,"b","logicalOr","bool");et(e.shape,i.shape);var r={a:e,b:i};return z.runKernelFunc(function(a){return a.logicalOr(e,i)},r,null,uf)}var Dc=U({logicalOr_:gN});function vN(n,t){var e=O(n,"a","logicalXor","bool"),i=O(t,"b","logicalXor","bool");return et(e.shape,i.shape),Vi(Dc(n,t),zs(Vi(n,t)))}var vg=U({logicalXor_:vN});function yN(n,t,e,i,r){var a=O(n,"x","maxPool"),s=1,o=a,l=!1;a.rank===3&&(l=!0,o=V(a,[1,a.shape[0],a.shape[1],a.shape[2]])),E(o.rank===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+o.rank+"."}),E(Pt(e,s),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+e+" and dilations '"+s+"'")}),r!=null&&E(rt(i),function(){return"Error in maxPool: pad must be an integer when using, "+("dimRoundingMode "+r+" but got pad "+i+".")});var u=function(p,f){var m=Cr(o.shape,t,e,1,i,r),g;return m.filterWidth===1&&m.filterHeight===1&&ln(m.inShape,m.outShape)?g=o.clone():g=p.maxPool(o,m),f([o,g]),g},c={x:o},h={filterSize:t,strides:e,pad:i,dimRoundingMode:r},d=z.runKernelFunc(u,c,null,Kl,h);return l?V(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var kc=U({maxPool_:yN});function bN(n,t,e,i,r,a,s){t===void 0&&(t=[1,1,1]),a===void 0&&(a="NDHWC"),s==null?s=[1,1,1]:It("dilations is deprecated, this field will be gone in v3.0.0.");var o=O(n,"x","maxPool3d"),l=o,u=!1;o.rank===4&&(u=!0,l=V(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),E(l.rank===5,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+l.rank+"."}),E(a==="NDHWC",function(){return"Error in maxPool3d: Only NDHWC is currently supported, "+("but got dataFormat of "+a)}),E(Pt(e,s),function(){return"Error in maxPool3d: Either strides or dilations must be 1. "+("Got strides "+e+" and dilations '"+s+"'")}),r!=null&&E(rt(i),function(){return"Error in maxPool3d: pad must be an integer when using, "+("dimRoundingMode "+r+" but got pad "+i+".")});var c=function(f,m){s==null&&(s=[1,1,1]);var g=La(l.shape,t,e,s,i,r,a),v=f.maxPool3d(l,g);return m([l,v]),v},h={x:l},d={filterSize:t,strides:e,pad:i,dimRoundingMode:r,dataFormat:a,dilations:s},p=z.runKernelFunc(c,h,null,jl,d);return u?V(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var wN=U({maxPool3d_:bN});function SN(n,t,e,i,r){r===void 0&&(r=!1);var a=O(n,"x","maxPoolWithArgmax"),s={x:a},o={filterSize:t,strides:e,pad:i,includeBatchInIndex:r},l=z.runKernel(pf,s,o);return{result:l[0],indexes:l[1]}}var LN=U({maxPoolWithArgmax_:SN});function Yn(n,t){if(t===void 0&&(t="float32"),t==="complex64"){var e=Yn(n,"float32"),i=Yn(n,"float32");return ii(e,i)}var r=Sr(ot(n),t);return z.makeTensor(r,n,t)}function kr(n,t){if(t===void 0&&(t="float32"),t==="complex64"){var e=kr(n,"float32"),i=Yn(n,"float32");return ii(e,i)}var r=Gu(ot(n),t);return z.makeTensor(r,n,t)}function IN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","mean"),r=Qe(t,i.shape),a=zm(i.shape,r),s=a[1],o=ot(s),l=kn(function(u){var c=we(o),h=c.dtype===u.dtype?u:ue(u,c.dtype),d=Ie(h,c),p=Ae(d,t,e),f=function(m){var g=u.shape.slice();r.forEach(function(w){g[w]=1});var v=V(m,g),b=Ie(J(v,kr(u.shape,"float32")),o);return b};return{value:p,gradFunc:f}});return l(i)}var Na=U({mean_:IN});function AN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","min"),r=function(o,l){var u=Qe(t,i.shape),c=u,h=tn(c,i.rank),d=i;h!=null&&(d=ut(i,h),c=En(c.length,i.rank));var p=o.min(d,c);h!=null&&d.dispose();var f=p;if(e){var m=en(f.shape,u);f=V(p,m),p.dispose()}return l([i,f]),f},a={x:i},s={axis:t,keepDims:e};return z.runKernelFunc(r,a,null,$l,s)}var Ps=U({min_:AN});function TN(n,t){var e,i=O(n,"a","minimum"),r=O(t,"b","minimum");e=at(i,r),i=e[0],r=e[1],i.dtype==="bool"&&(i=ue(i,"int32"),r=ue(r,"int32")),et(i.shape,r.shape);var a=function(o,l){var u=o.minimum(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,Xl)}var _s=U({minimum_:TN});function NN(n,t){var e,i=O(n,"a","mod"),r=O(t,"b","mod");e=at(i,r),i=e[0],r=e[1];var a=function(o,l){var u=o.mod(i,r);return l([i,r]),u},s={a:i,b:r};return z.runKernelFunc(a,s,null,Jl)}var Fc=U({mod_:NN});function xN(n){var t=O(n,"x","square"),e={},i=[t],r=[];return z.runKernelFunc(function(a,s){return s([t]),a.square(t)},{x:t},null,"Square",e,i,r)}var Ye=U({square_:xN});function CN(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1),n=O(n,"x","moments");var i=Qe(t,n.shape),r=Na(n,i,e),a=r.shape;e||(a=en(r.shape,i));var s=Ye(ge(ue(n,"float32"),V(r,a))),o=Na(s,i,e);return{mean:r,variance:o}}var RN=U({moments_:CN});function ON(n,t,e,i){for(var r=O(t,"data","multiRNNCell"),a=ya(e,"c","multiRNNCell"),s=ya(i,"h","multiRNNCell"),o=r,l=[],u=0;u2)throw new Error("Rank of probabilities must be 1 or 2, but is "+s);e=e||Math.random();var o=s===1?V(r,[1,-1]):r,l=z.runKernelFunc(function(u){return u.multinomial(o,i,t,e)},{logits2D:o});return s===1?V(l,[l.size]):l}var kN=U({multinomial_:DN});function FN(n,t){var e,i=O(n,"a","notEqual"),r=O(t,"b","notEqual");e=at(i,r),i=e[0],r=e[1],et(i.shape,r.shape);var a=function(o){return o.notEqual(i,r)},s={a:i,b:r};return z.runKernelFunc(a,s,null,ff)}var Ms=U({notEqual_:FN});function WN(n){var t=O(n,"input","real"),e=function(r){return r.real(t)},i={input:t};return z.runKernelFunc(e,i,null,wf)}var xa=U({real_:WN});function UN(n){var t=O(n,"x","onesLike"),e=function(r,a){if(t.dtype==="complex64"){var s=Wc(xa(t)),o=Ee(Ws(t));return ii(s,o)}return r.onesLike(t)},i={x:t};return z.runKernelFunc(e,i,null,eu)}var Wc=U({onesLike_:UN});function BN(n,t){var e=O(n,"v1","outerProduct"),i=O(t,"v2","outerProduct");E(e.rank===1&&i.rank===1,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+(e.rank+" and "+i.rank+".")});var r=V(e,[-1,1]),a=V(i,[1,-1]);return Fe(r,a)}var zN=U({outerProduct_:BN});function PN(n,t,e){e===void 0&&(e=0);var i=O(n,"x","pad");if(i.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var r=function(o,l){return l([i]),o.pad(i,t,e)},a={paddings:t,constantValue:e},s={x:i};return z.runKernelFunc(r,s,null,nu,a)}var qi=U({pad_:PN});function _N(n,t,e){return e===void 0&&(e=0),E(t.length===2,function(){return"Invalid number of paddings. Must be length of 2."}),qi(n,[t],e)}var MN=U({pad1d_:_N});function HN(n,t,e){return e===void 0&&(e=0),E(t.length===2&&t[0].length===2&&t[1].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),qi(n,t,e)}var VN=U({pad2d_:HN});function qN(n,t,e){return e===void 0&&(e=0),E(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),qi(n,t,e)}var GN=U({pad3d_:qN});function YN(n,t,e){return e===void 0&&(e=0),E(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),qi(n,t,e)}var KN=U({pad4d_:YN});function jN(n,t,e){var i=O(n,"x","spaceToBatchND");E(i.rank>=1+t.length,function(){return"input rank "+i.rank+" should be > than [blockShape] "+t.length}),E(e.length===t.length,function(){return"paddings.shape[0] "+e.length+" must be equal to [blockShape] "+t.length}),E(i.shape.reduce(function(o,l,u){return u>0&&u<=t.length?o&&(l+e[u-1][0]+e[u-1][1])%t[u-1]===0:o},!0),function(){return"input spatial dimensions "+i.shape.slice(1)+" with paddings "+e.toString()+" must be divisible by blockShapes "+t.toString()});var r=function(o){return o.spaceToBatchND(i,t,e)},a={x:i},s={blockShape:t,paddings:e};return z.runKernelFunc(r,a,null,Au,s)}var Hs=U({spaceToBatchND_:jN});function JN(n,t,e,i,r,a){r==null&&(r=[1,1]),a==null&&(a=1),i===0&&(i="valid");var s=O(n,"x","maxPool"),o=s,l=!1;s.rank===3&&(l=!0,o=V(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(Pt(a,r),function(){return"Error in pool: Either strides or dilations must be 1. "+("Got strides "+a+" and dilations '"+r+"'")});var u=Cr(o.shape,t,a,r,i),c=[u.dilationHeight,u.dilationWidth],h;i==="same"?h=XN([u.filterHeight,u.filterWidth],c):h=[[0,0],[0,0]];var d=c[0]===1&&c[1]===1,p=$N([u.inHeight,u.inWidth],c,h),f=p[0],m=p[1],g=d?i:"valid",v=d?o:Hs(o,c,f),b=e==="avg"?function(){return Lc(v,t,a,g)}:function(){return kc(v,t,a,g)},w=b(),S=d?w:Rs(w,c,m);return l?V(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function $N(n,t,e){var i=e.map(function(c){return c[0]}),r=e.map(function(c){return c[1]}),a=n.concat(i,r),s=t.map(function(c,h){return(c-a[h]%c)%c}),o=r.map(function(c,h){return c+s[h]}),l=t.map(function(c,h){return[i[h],o[h]]}),u=t.map(function(c,h){return[0,s[h]]});return[l,u]}function XN(n,t){var e=n.map(function(s,o){return s+(s-1)*(t[o]-1)}),i=e.map(function(s){return s-1}),r=i.map(function(s){return Math.floor(s/2)}),a=i.map(function(s,o){return s-r[o]});return i.map(function(s,o){return[r[o],a[o]]})}var yg=U({pool_:JN});function ZN(n,t){var e,i=O(n,"base","pow"),r=O(t,"exp","pow");e=at(i,r),i=e[0],r=e[1];var a={a:i,b:r},s=function(o,l){var u=o.pow(i,r);return l([i,r,u]),u};return z.runKernelFunc(s,a,null,iu)}var Kn=U({pow_:ZN});function QN(n,t){var e=O(n,"x","prelu"),i=O(t,"alpha","prelu"),r=function(s,o){var l=s.prelu(e,i);return o([e,i]),l},a={x:e,alpha:i};return z.runKernelFunc(r,a,null,ru)}var Uc=U({prelu_:QN});function ex(n,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var i=O(n,"x","prod"),r=function(o){i.dtype==="bool"&&(i=ue(i,"int32"));var l=Qe(t,i.shape),u=tn(l,i.rank),c=l,h=i;u!=null&&(h=ut(i,u),c=En(c.length,i.rank));var d=o.prod(h,c);if(e){var p=en(d.shape,l);d=V(d,p)}return d},a={x:i},s={axis:t,keepDims:e};return z.runKernelFunc(r,a,null,yf,s)}var bg=U({prod_:ex});function tx(n,t,e){var i=ot(n),r=null;if(e==null||e==="float32")r=new Float32Array(i);else if(e==="int32")r=new Int32Array(i);else if(e==="bool")r=new Uint8Array(i);else throw new Error("Unknown data type "+e);for(var a=0;a>>0,d-=l,d*=l,l=d>>>0,d-=l,l+=d*4294967296}return(l>>>0)*23283064365386963e-26};return u}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.alea=s})(Fr,n,!1)}),rx=Gi(function(n){(function(t,e,i){function r(o){var l=this,u="";l.x=0,l.y=0,l.z=0,l.w=0,l.next=function(){var h=l.x^l.x<<11;return l.x=l.y,l.y=l.z,l.z=l.w,l.w^=l.w>>>19^h^h>>>8},o===(o|0)?l.x=o:u+=o;for(var c=0;c>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xor128=s})(Fr,n,!1)}),ax=Gi(function(n){(function(t,e,i){function r(o){var l=this,u="";l.next=function(){var h=l.x^l.x>>>2;return l.x=l.y,l.y=l.z,l.z=l.w,l.w=l.v,(l.d=l.d+362437|0)+(l.v=l.v^l.v<<4^(h^h<<1))|0},l.x=0,l.y=0,l.z=0,l.w=0,l.v=0,o===(o|0)?l.x=o:u+=o;for(var c=0;c>>4),l.next()}function a(o,l){return l.x=o.x,l.y=o.y,l.z=o.z,l.w=o.w,l.v=o.v,l.d=o.d,l}function s(o,l){var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xorwow=s})(Fr,n,!1)}),sx=Gi(function(n){(function(t,e,i){function r(o){var l=this;l.next=function(){var c=l.x,h=l.i,d,p;return d=c[h],d^=d>>>7,p=d^d<<24,d=c[h+1&7],p^=d^d>>>10,d=c[h+3&7],p^=d^d>>>3,d=c[h+4&7],p^=d^d<<7,d=c[h+7&7],d=d^d<<13,p^=d^d<<9,c[h]=p,l.i=h+1&7,p};function u(c,h){var d,p,f=[];if(h===(h|0))p=f[0]=h;else for(h=""+h,d=0;d0;--d)c.next()}u(l,o)}function a(o,l){return l.x=o.x.slice(),l.i=o.i,l}function s(o,l){o==null&&(o=+new Date);var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(c.x&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xorshift7=s})(Fr,n,!1)}),ox=Gi(function(n){(function(t,e,i){function r(o){var l=this;l.next=function(){var c=l.w,h=l.X,d=l.i,p,f;return l.w=c=c+1640531527|0,f=h[d+34&127],p=h[d=d+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,f=h[d]=f^p,l.i=d,f+(c^c>>>16)|0};function u(c,h){var d,p,f,m,g,v=[],b=128;for(h===(h|0)?(p=h,h=null):(h=h+"\0",p=0,b=Math.max(b,h.length)),f=0,m=-32;m>>15,p^=p<<4,p^=p>>>13,m>=0&&(g=g+1640531527|0,d=v[m&127]^=p+g,f=d==0?f+1:0);for(f>=128&&(v[(h&&h.length||0)&127]=-1),f=127,m=4*128;m>0;--m)p=v[f+34&127],d=v[f=f+1&127],p^=p<<13,d^=d<<17,p^=p>>>15,d^=d>>>12,v[f]=p^d;c.w=g,c.X=v,c.i=f}u(l,o)}function a(o,l){return l.i=o.i,l.w=o.w,l.X=o.X.slice(),l}function s(o,l){o==null&&(o=+new Date);var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(c.X&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xor4096=s})(Fr,n,!1)}),lx=Gi(function(n){(function(t,e,i){function r(o){var l=this,u="";l.next=function(){var h=l.b,d=l.c,p=l.d,f=l.a;return h=h<<25^h>>>7^d,d=d-p|0,p=p<<24^p>>>8^f,f=f-h|0,l.b=h=h<<20^h>>>12^d,l.c=d=d-p|0,l.d=p<<16^d>>>16^f,l.a=f-h|0},l.a=0,l.b=0,l.c=2654435769|0,l.d=1367130551,o===Math.floor(o)?(l.a=o/4294967296|0,l.b=o|0):u+=o;for(var c=0;c>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.tychei=s})(Fr,n,!1)}),Yi=Gi(function(n){(function(t,e){var i=this,r=256,a=6,s=52,o="random",l=e.pow(r,a),u=e.pow(2,s),c=u*2,h=r-1,d;function p(S,L,x){var C=[];L=L==!0?{entropy:!0}:L||{};var R=v(g(L.entropy?[S,w(t)]:S??b(),3),C),D=new f(C),k=function(){for(var W=D.g(a),F=l,P=0;W=c;)W/=2,F/=2,P>>>=1;return(W+P)/F};return k.int32=function(){return D.g(4)|0},k.quick=function(){return D.g(4)/4294967296},k.double=k,v(w(D.S),t),(L.pass||x||function(W,F,P,H){return H&&(H.S&&m(H,D),W.state=function(){return m(D,{})}),P?(e[o]=W,F):W})(k,R,"global"in L?L.global:this==e,L.state)}e["seed"+o]=p;function f(S){var L,x=S.length,C=this,R=0,D=C.i=C.j=0,k=C.S=[];for(x||(S=[x++]);R=1||o===0);var l=Math.sqrt(-2*Math.log(o)/o);e=this.mean+this.stdDev*a*l,i=this.mean+this.stdDev*s*l,(!this.truncated||this.isValidTruncated(e))&&(r=!0)}return(!this.truncated||this.isValidTruncated(i))&&(this.nextVal=this.convertValue(i)),this.convertValue(e)},n.prototype.convertValue=function(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)},n.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},n}(),cx=function(){function n(t,e,i,r){this.alpha=t,this.beta=1/e,this.dtype=i;var a=r||Math.random();this.randu=Bc(a.toString()),this.randn=new zc(0,1,i,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}return n.prototype.nextValue=function(){for(var t,e,i,r,a,s;;){do r=this.randn.nextValue(),s=1+this.c*r;while(s<=0);if(s*=s*s,t=r*r,e=1-.331*t*t,i=.5*t+this.d*(1-s+Math.log(s)),a=this.randu(),a1;if(s||o||l)return Yn([0],i);var u=Math.abs(Math.ceil((t-n)/e)),c=Sr(u,i);t0?o+l:o});t[a]=n.shape[e]-s}E(n.shape[e]===t.reduce(function(o,l){return o+l}),function(){return"The sum of sizes must match the size of the axis dimension."}),i=t}return i}function Xx(n,t,e){e===void 0&&(e=0);var i=O(n,"x","split"),r=function(o,l){var u=Qe(e,i.shape)[0],c=xg(i,t,u);return o.split(i,c,u)},a={x:i},s={numOrSizeSplits:t,axis:e};return z.runKernelFunc(r,a,null,Tu,s)}var Ur=U({split_:Xx});function Jx(n,t){E(n.dtype==="float32",function(){return"The dtype for rfft() must be real value but got "+n.dtype});var e=n.shape[n.shape.length-1],i=n.size/e,r;if(t!=null&&te){var o=n.shape.map(function(v){return v});o[n.shape.length-1]=t-e,r=xt([n,Yn(o)],n.shape.length-1),e=t}else r=n;var l=Ee(r),u=V(ii(r,l),[i,e]),c=Vs(u),h=Math.floor(e/2)+1,d=xa(c),p=Ws(c),f=Ur(d,[h,e-h],d.shape.length-1),m=Ur(p,[h,e-h],p.shape.length-1),g=r.shape.slice();return g[r.shape.length-1]=h,V(ii(f[0],m[0]),g)}var qs=U({rfft_:Jx});function Zx(n){var t=O(n,"x","sqrt"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.sqrt(t);return r([t]),a},e,null,Lu)}var _t=U({sqrt_:Zx});function Qx(n,t){var e,i=O(n,"a","squaredDifference"),r=O(t,"b","squaredDifference");e=at(i,r),i=e[0],r=e[1],et(i.shape,r.shape);var a=function(l,u){var c=l.squaredDifference(i,r);return u([i,r]),c},s={a:i,b:r},o={};return z.runKernelFunc(a,s,null,xu,o)}var Gs=U({squaredDifference_:Qx});function eC(n,t){var e=O(n,"x","squeeze");return V(e,Ff(e.shape,t).newShape)}var Ys=U({squeeze_:eC});function tC(n,t){t===void 0&&(t=0);var e=ya(n,"tensors","stack");if(E(e.length>=1,function(){return"Pass at least one tensor to tf.stack"}),e.length===1)return mn(e[0],t);var i=e[0].rank,r=e[0].shape,a=e[0].dtype;E(t<=i,function(){return"Axis must be <= rank of the tensor"}),e.forEach(function(o){Ue(r,o.shape,"All tensors passed to stack must have matching shapes"),E(a===o.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var s=e.map(function(o){return mn(o,t)});return xt(s,t)}var Ki=U({stack_:tC});function nC(n,t){t===void 0&&(t=0);var e=O(n,"x","step"),i={x:e},r={alpha:t};return z.runKernelFunc(function(a){return a.step(e,t)},i,null,Uu,r)}var Br=U({step_:nC});function iC(n,t,e,i,r,a,s,o,l){r===void 0&&(r=0),a===void 0&&(a=0),s===void 0&&(s=0),o===void 0&&(o=0),l===void 0&&(l=0);var u=O(n,"x","stridedSlice"),c=function(p){i==null&&(i=new Array(t.length));var f=Ts(s);if(f.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(s!==0&&o!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(s!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");var m=u.rank-t.length,g=Ts(o),v=u.shape.slice();g.forEach(function(W){t[W]=0,e[W]=1,v.splice(W,0,1)}),u=V(u,v);var b=Rm(u.shape,f,m,t,e,i,r,a,s),w=b.begin,S=b.end,L=b.strides;t=w,e=S,i=L;var x=Ts(l);x.forEach(function(W){e[W]=t[W]+1,i[W]=1});var C=wm(t,e,i),R=C.filter(function(W,F){return x.indexOf(F)===-1}),D=i.every(function(W){return W===1});if(D)return V(ze(u,t,C),R);var k=p.stridedSlice(u,t,e,i);return V(k,R)},h={x:u},d={begin:t,end:e,strides:i,beginMask:r,endMask:a,ellipsisMask:s,newAxisMask:o,shrinkAxisMask:l};return z.runKernelFunc(c,h,null,Nf,d)}var Cg=U({stridedSlice_:iC});function rC(n){var t=O(n,"x","tan"),e={x:t};return z.runKernelFunc(function(i,r){var a=i.tan(t);return r([t]),a},e,null,Ru)}var Rg=U({tan_:rC});function Oa(n,t,e){if(ki(n),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");var i=Rn(n,e);if(i.length!==2&&i.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(i.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return ri(n,t,i,e)}function aC(n,t,e){if(ki(n),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");var i=Rn(n,e);if(i.length!==4&&i.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(i.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return ri(n,t,i,e)}function sC(n,t,e){if(ki(n),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");var i=Rn(n,e);if(i.length!==5&&i.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(i.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return ri(n,t,i,e)}function oC(n,t,e){if(ki(n),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");var i=Rn(n,e);if(i.length!==6&&i.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(i.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||i,ri(n,t,i,e)}function lC(n,t,e){t===void 0&&(t=1),e===void 0&&(e=!0);var i=O(n,"x","topk");if(i.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");var r=i.shape[i.shape.length-1];if(t>r)throw new Error("'k' passed to topk() must be <= the last dimension ("+r+") "+("but got "+t));var a={x:i},s={k:t,sorted:e},o=z.runKernelFunc(function(c){return c.topk(i,t,e)},a,null,xf,s),l=o[0],u=o[1];return{values:l,indices:u}}var Og=U({topk_:lC});function uC(n,t,e,i,r){if(t===void 0&&(t=0),e===void 0&&(e=1),i!=null&&i==="bool")throw new Error("Unsupported data type $ { dtype }");for(var a=new zc(t,e,i,!0,r),s=On(n,i),o=0;o0,function(){return"The input tensor must be at least 1D"});var i={x:e},r={axis:t},a=z.runKernel(Cf,i,r),s=a[0],o=a[1];return{values:s,indices:o}}var Eg=U({unique_:hC});function dC(n,t,e){var i=O(n,"x","unsortedSegmentSum"),r=O(t,"segmentIds","unsortedSegmentSum","int32");E(rt(e),function(){return"numSegments must be of dtype int"});var a={x:i,segmentIds:r},s={numSegments:e},o=function(l,u){var c=l.unsortedSegmentSum(i,r,e);return u([r]),c};return z.runKernelFunc(o,a,null,Fu,s)}var Gc=U({unsortedSegmentSum_:dC});function pC(n,t){t===void 0&&(t=0);var e=O(n,"x","unstack");E(t>=-e.shape.length&&t0,function(){return"mask cannot be scalar"}),Ue(o.slice(a,a+s),r.shape,"mask's shape must match the first K dimensions of tensor's shape,"),l=1,u=a;u2)throw new Error("sparseIndices should be a scalar, vector, or matrix,"+(" but got shape "+n.shape+"."));var r=n.rank>0?n.shape[0]:1,a=n.rank>1?n.shape[1]:1;if(e.length!==a)throw new Error("outputShape has incorrect number of elements:,"+(" "+e.length+", should be: "+a+"."));var s=t.size;if(!(t.rank===0||t.rank===1&&s===r))throw new Error("sparseValues has incorrect shape "+(t.shape+", should be [] or ["+r+"]"));if(t.dtype!==i.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function PC(n,t,e,i){i===void 0&&(i=0);var r=O(n,"sparseIndices","sparseToDense","int32"),a=O(t,"sparseValues","sparseToDense"),s=O(i,"defaultValue","sparseToDense",a.dtype);zC(r,a,e,s);var o={sparseIndices:r,sparseValues:a,defaultValue:s},l={outputShape:e};return z.runKernelFunc(function(u){return u.sparseToDense(r,a,e,s)},o,null,Tf,l)}var _C=U({sparseToDense_:PC});function MC(n,t){var e=O(t,"indices","gatherND","int32"),i=O(n,"x","gatherND"),r=function(s){return s.gatherND(i,e)},a={params:i,indices:e};return z.runKernelFunc(r,a,null,Qp)}var HC=U({gatherND_:MC});function VC(n,t){if(t==null)return n.shape.slice();if(ln(n.shape,t))return t;if(n.shape.length===t.length){for(var e=[],i=0;i=0&&t<1,function(){return"rate must be a float in the range [0, 1), but got "+t+"."}),t===0)return n instanceof Y?r.clone():r;var a=VC(r,e),s=1-t,o=Ie(ks(fe(wg(a,0,1,"float32",i),s)),s);return J(r,o)}var GC=U({dropout_:qC});function Xg(n){return Math.floor(Math.pow(2,Math.ceil(Math.log(n)/Math.log(2))))}function Yc(n,t,e){for(var i=1-n%2,r=new Float32Array(n),a=0;a1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, "+("but got "+i.rank)}),E(i.rank-1===r.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+(i.rank+" and targets rank "+r.rank)}),Ue(i.shape.slice(0,i.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),a=i.shape[i.shape.length-1],E(e>0&&e<=a,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last "+("dimension ("+a+"), but got "+e)}),[4,i.data()];case 1:return s=v.sent(),[4,r.data()];case 2:for(o=v.sent(),l=[s.length/a,a],u=l[0],c=l[1],h=ms("bool",u),d=0;d0&&(e=Ae(e,i)),V(e,n.shape)}function Js(n,t,e){if(t==="linear")return n;if(t==="relu")return Ca(n);if(t==="elu")return Nc(n);if(t==="relu6")return _c(n);if(t==="prelu")return Uc(n,e);throw new Error("Unknown fused activation "+t+".")}var Zs=function(n,t){var e=n>0;return!e||t==="linear"};function $C(n){var t=n.x,e=n.filter,i=n.strides,r=n.pad,a=n.dataFormat,s=a===void 0?"NHWC":a,o=n.dilations,l=o===void 0?[1,1]:o,u=n.dimRoundingMode,c=n.bias,h=n.activation,d=h===void 0?"linear":h,p=n.preluActivationWeights;if(d=d||"linear",Zs(z.state.gradientDepth,d)===!1){var f=Or(t,e,i,r,s,l,u);return c!=null&&(f=fe(f,c)),Js(f,d,p)}var m=O(t,"x","conv2d"),g=O(e,"filter","conv2d"),v=m,b=!1;m.rank===3&&(b=!0,v=V(m,[1,m.shape[0],m.shape[1],m.shape[2]])),E(v.rank===4,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+(v.rank+".")}),E(g.rank===4,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+(g.rank+".")}),u!=null&&E(rt(r),function(){return"Error in fused conv2d: pad must be an integer when using, "+("dimRoundingMode "+u+" but got pad "+r+".")}),E(v.shape[3]===g.shape[2],function(){return"Error in conv2d: depth of input ("+v.shape[3]+") must match "+("input depth for filter "+g.shape[2]+".")}),E(Pt(i,l),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+i+" and dilations '"+l+"'")}),E(s==="NHWC",function(){return"Error in conv2d: got dataFormat of "+s+" but only NHWC is currently supported."});var w=Dn(v.shape,g.shape,i,l,r,u),S;c!=null&&(S=O(c,"bias","fused conv2d"),S=at(S,m)[0],et(w.outShape,S.shape));var L;p!=null&&(L=O(p,"prelu weights","fused conv2d"));var x=function(F,P){var H=P,_=H[0],K=H[1],j=H[2],q=H[3],G=$s(F,j,d);E(ui(l),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 "+("are not yet supported in gradients. Got dilations '"+l+"'")});var Z=Ic(K.shape,G,_,i,r),X=Kc(K,G,_.shape,i,r),ee=[Z,X];if(q!=null){var ne=Xs(q,G);ee.push(ne)}return ee},C=function(F){var P=F.fusedConv2d({input:v,filter:g,convInfo:w,bias:S,activation:d,preluActivationWeights:L});return P},R={x:v,filter:g,bias:S,preluActivationWeights:L},D={strides:i,pad:r,dataFormat:s,dilations:l,dimRoundingMode:u,activation:d};if(c==null){var k=kn(function(F,P,H){var _=z.runKernelFunc(C,R,null,Pu,D);return H([P,F,_]),b&&(_=V(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:x}});return k(v,g)}else{var W=kn(function(F,P,H,_){var K=z.runKernelFunc(C,R,null,Pu,D);return _([P,F,K,H]),b&&(K=V(K,[K.shape[1],K.shape[2],K.shape[3]])),{value:K,gradFunc:x}});return W(v,g,S)}}var XC=U({fusedConv2d_:$C});function JC(n,t,e,i){var r=n;n.rank===3&&(r=V(n,[1,n.shape[0],n.shape[1],n.shape[2]]));var a=t;a.rank===3&&(a=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]));var s=function(l){return l.depthwiseConv2DDerFilter(r,a,i)},o={x:r,dy:a};return z.runKernelFunc(s,o,null,Vp)}var Jg=U({depthwiseConv2dNativeBackpropFilter_:JC});function ZC(n,t,e,i){var r=t,a=!1;t.rank===3&&(a=!0,r=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]));var s=function(u){return u.depthwiseConv2DDerInput(r,e,i)},o={dy:r},l=z.runKernelFunc(s,o,null,qp);return a?V(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Zg=U({depthwiseConv2dNativeBackpropInput_:ZC});function QC(n){var t=n.x,e=n.filter,i=n.strides,r=n.pad,a=n.dataFormat,s=a===void 0?"NHWC":a,o=n.dilations,l=o===void 0?[1,1]:o,u=n.dimRoundingMode,c=n.bias,h=n.activation,d=h===void 0?"linear":h,p=n.preluActivationWeights;if(Zs(z.state.gradientDepth,d)===!1){var f=Aa(t,e,i,r,s,l,u);return c!=null&&(f=fe(f,c)),Js(f,d,p)}var m=O(t,"x","depthwiseConv2d"),g=O(e,"filter","depthwiseConv2d"),v=m,b=!1;m.rank===3&&(b=!0,v=V(m,[1,m.shape[0],m.shape[1],m.shape[2]])),E(v.rank===4,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got "+("rank "+v.rank+".")}),E(g.rank===4,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, "+("but got rank "+g.rank+".")}),E(v.shape[3]===g.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels "+("("+v.shape[3]+") must match the inChannels dimension in ")+("filter "+g.shape[2]+".")}),l==null&&(l=[1,1]),E(Pt(i,l),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must "+("be 1. Got strides "+i+" and dilations '"+l+"'")}),u!=null&&E(rt(r),function(){return"Error in fused depthwiseConv2d: pad must be an integer when "+("using dimRoundingMode "+u+" but got pad "+r+".")});var w=Dn(v.shape,g.shape,i,l,r,u,!0),S;c!=null&&(S=O(c,"bias","fused conv2d"),S=at(S,m)[0],et(w.outShape,S.shape));var L;p!=null&&(L=O(p,"prelu weights","fused depthwiseConv2d"));var x=function(F,P){E(ui(l),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations "+("'"+l+"'")});var H=P[0],_=P[1],K=P[2],j=P[3],q=$s(F,K,d),G=Zg(_.shape,q,H,w),Z=Jg(_,q,H.shape,w);if(j!=null){var X=Xs(S,q);return[G,Z,X]}return[G,Z]},C=function(F){var P=F.fusedDepthwiseConv2D({input:v,filter:g,convInfo:w,bias:S,activation:d,preluActivationWeights:L});return P},R={x:v,filter:g,bias:S,preluActivationWeights:L},D={strides:i,pad:r,dataFormat:s,dilations:l,dimRoundingMode:u,activation:d};if(c==null){var k=kn(function(F,P,H){var _=z.runKernelFunc(C,R,null,_u,D);return H([P,F,_]),b&&(_=V(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:x}});return k(v,g)}else{var W=kn(function(F,P,H,_){var K=z.runKernelFunc(C,R,null,_u,D);return _([P,F,K,H]),b&&(K=V(K,[K.shape[1],K.shape[2],K.shape[3]])),{value:K,gradFunc:x}});return W(v,g,S)}}var eR=U({fusedDepthwiseConv2d_:QC});function tR(n){var t,e=n.a,i=n.b,r=n.transposeA,a=r===void 0?!1:r,s=n.transposeB,o=s===void 0?!1:s,l=n.bias,u=n.activation,c=u===void 0?"linear":u,h=n.preluActivationWeights;if(Zs(z.state.gradientDepth,c)===!1){var d=Fe(e,i,a,o);return l!=null&&(d=fe(d,l)),Js(d,c,h)}var p=O(e,"a","fused matMul"),f=O(i,"b","fused matMul");t=at(p,f),p=t[0],f=t[1];var m=a?p.shape[p.rank-2]:p.shape[p.rank-1],g=o?f.shape[f.rank-1]:f.shape[f.rank-2],v=a?p.shape[p.rank-1]:p.shape[p.rank-2],b=o?f.shape[f.rank-2]:f.shape[f.rank-1],w=p.shape.slice(0,-2),S=f.shape.slice(0,-2),L=ot(w),x=ot(S);E(p.rank>=2&&f.rank>=2&&p.rank===f.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least "+("2, got ranks "+p.rank+" and "+f.rank+".")}),E(ln(w,S),function(){return"Error in fused matMul: outer dimensions ("+w+") and ("+(S+") of Tensors with shapes "+p.shape+" and ")+(f.shape+" must match.")}),E(m===g,function(){return"Error in fused matMul: inner shapes ("+m+") and ("+(g+") of Tensors with shapes "+p.shape+" and ")+(f.shape+" and transposeA="+a)+(" and transposeB="+o+" must match.")});var C=p.shape.slice(0,-2).concat([v,b]),R=a?V(p,[L,m,v]):V(p,[L,v,m]),D=o?V(f,[x,b,g]):V(f,[x,g,b]),k;l!=null&&(k=O(l,"bias","fused matMul"),k=at(k,p)[0],et(C,k.shape));var W;h!=null&&(W=O(h,"prelu weights","fused matMul"));var F=function(q,G){var Z=G[0],X=G[1],ee=G[2],ne=G[3],ie=$s(V(q,ee.shape),ee,c),te,re;if(!a&&!o?(te=Fe(ie,X,!1,!0),re=Fe(Z,ie,!0,!1)):!a&&o?(te=Fe(ie,X,!1,!1),re=Fe(ie,Z,!0,!1)):a&&!o?(te=Fe(X,ie,!1,!0),re=Fe(Z,ie,!1,!1)):(te=Fe(X,ie,!0,!0),re=Fe(ie,Z,!0,!0)),l!=null){var le=Xs(ne,ie);return[te,re,le]}else return[te,re]},P=function(q){var G=q.fusedBatchMatMul({a:R,b:D,transposeA:a,transposeB:o,bias:k,activation:c,preluActivationWeights:W});return G},H={a:R,b:D,bias:k,preluActivationWeights:W},_={transposeA:a,transposeB:o,activation:c};if(l==null){var K=kn(function(q,G,Z){var X=z.runKernelFunc(P,H,null,zu,_);return Z([q,G,X]),{value:V(X,C),gradFunc:F}});return K(R,D)}else{var j=kn(function(q,G,Z,X){var ee=z.runKernelFunc(P,H,null,zu,_);return X([q,G,ee,Z]),{value:V(ee,C),gradFunc:F}});return j(R,D,k)}}var nR=U({fusedMatMul_:tR});var iR={__proto__:null,conv2d:XC,depthwiseConv2d:eR,matMul:nR};function rR(n){return Yc(n,.54,.46)}var aR=U({hammingWindow_:rR});function sR(n){return Yc(n,.5,.5)}var Qg=U({hannWindow_:sR});function oR(n,t,e,i,r){i===void 0&&(i=!1),r===void 0&&(r=0);for(var a=0,s=[];a+t<=n.size;)s.push(ze(n,a,t)),a+=e;if(i)for(;a=1&&i[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+i}),E(r==="bilinear"||r==="nearest",function(){return"method must be bilinear or nearest, but was "+r});var c=function(f){return f.cropAndResize(s,o,l,i,r,a)},h={image:s,boxes:o,boxInd:l},d={method:r,extrapolationValue:a,cropSize:i},p=z.runKernelFunc(c,h,null,Mp,d);return p}var hR=U({cropAndResize_:cR});function dR(n){var t=O(n,"image","flipLeftRight","float32");E(t.rank===4,function(){return"Error in flipLeftRight: image must be rank 4,"+("but got rank "+t.rank+".")});var e={image:t},i=z.runKernel(Zp,e,{});return i}var pR=U({flipLeftRight_:dR});function fR(n,t,e,i){e===void 0&&(e=0),i===void 0&&(i=.5);var r=O(n,"image","rotateWithOffset","float32");E(r.rank===4,function(){return"Error in rotateWithOffset: image must be rank 4,"+("but got rank "+r.rank+".")});var a={image:r},s={radians:t,fillValue:e,center:i},o=z.runKernel(Rf,a,s);return o}var mR=U({rotateWithOffset_:fR});function zr(n,t,e,i,r,a){i==null&&(i=.5),r==null&&(r=Number.NEGATIVE_INFINITY),a==null&&(a=0);var s=n.shape[0];return e=Math.min(e,s),E(0<=i&&i<=1,function(){return"iouThreshold must be in [0, 1], but was '"+i+"'"}),E(n.rank===2,function(){return"boxes must be a 2D tensor, but was of rank '"+n.rank+"'"}),E(n.shape[1]===4,function(){return"boxes must have 4 columns, but 2nd dimension was "+n.shape[1]}),E(t.rank===1,function(){return"scores must be a 1D tensor"}),E(t.shape[0]===s,function(){return"scores has incompatible shape with boxes. Expected "+s+", "+("but was "+t.shape[0])}),E(0<=a&&a<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+a+"'"}),{maxOutputSize:e,iouThreshold:i,scoreThreshold:r,softNmsSigma:a}}function gR(n,t,e,i,r){i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY);var a=O(n,"boxes","nonMaxSuppression"),s=O(t,"scores","nonMaxSuppression"),o=zr(a,s,e,i,r);e=o.maxOutputSize,i=o.iouThreshold,r=o.scoreThreshold;var l={maxOutputSize:e,iouThreshold:i,scoreThreshold:r};return z.runKernelFunc(function(u){return u.nonMaxSuppression(a,s,e,i,r)},{boxes:a,scores:s},null,mf,l)}var vR=U({nonMaxSuppression_:gR});function bR(n,t,e){var i=yR(n,t,e),r=i<0?-(i+1):i;n.splice(r,0,t)}function yR(n,t,e){return SR(n,t,e||wR)}function wR(n,t){return n>t?1:n>>1);var o=e(t,n[a]);o>0?i=a+1:(r=a,s=!o)}return s?i:-i-1}function tv(n,t,e,i,r){return jc(n,t,e,i,r,0).selectedIndices}function nv(n,t,e,i,r,a){return jc(n,t,e,i,r,0,!1,a,!0)}function iv(n,t,e,i,r,a){return jc(n,t,e,i,r,a,!0)}function jc(n,t,e,i,r,a,s,o,l){s===void 0&&(s=!1),o===void 0&&(o=!1),l===void 0&&(l=!1);for(var u=[],c=0;cr&&u.push({score:t[c],boxIndex:c,suppressBeginIndex:0});u.sort(rv);for(var h=a>0?-.5/a:0,d=[],p=[];d.length0;){var f=u.pop(),m=f.score,g=f.boxIndex,v=f.suppressBeginIndex;if(m=v;--w){var S=LR(n,g,d[w]);if(S>=i){b=!0;break}if(f.score=f.score*IR(i,h,S),f.score<=r)break}f.suppressBeginIndex=d.length,b||(f.score===m?(d.push(g),p.push(f.score)):f.score>r&&bR(u,f,rv))}var L=d.length,x=e-L;o&&x>0&&(d.push.apply(d,new Array(x).fill(0)),p.push.apply(p,new Array(x).fill(0)));var C={selectedIndices:Wr(d,"int32")};return s&&(C.selectedScores=Wr(p,"float32")),l&&(C.validOutputs=we(L,"int32")),C}function LR(n,t,e){var i=n.subarray(t*4,t*4+4),r=n.subarray(e*4,e*4+4),a=Math.min(i[0],i[2]),s=Math.min(i[1],i[3]),o=Math.max(i[0],i[2]),l=Math.max(i[1],i[3]),u=Math.min(r[0],r[2]),c=Math.min(r[1],r[3]),h=Math.max(r[0],r[2]),d=Math.max(r[1],r[3]),p=(o-a)*(l-s),f=(h-u)*(d-c);if(p<=0||f<=0)return 0;var m=Math.max(a,u),g=Math.max(s,c),v=Math.min(o,h),b=Math.min(l,d),w=Math.max(v-m,0)*Math.max(b-g,0);return w/(p+f-w)}function IR(n,t,e){var i=Math.exp(t*e*e);return e<=n?i:0}function rv(n,t){return n.score-t.score||n.score===t.score&&t.boxIndex-n.boxIndex}function AR(n,t,e,i,r){return i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY),de(this,void 0,void 0,function(){var a,s,o,l,u,c,h;return pe(this,function(d){switch(d.label){case 0:return a=O(n,"boxes","nonMaxSuppressionAsync"),s=O(t,"scores","nonMaxSuppressionAsync"),o=zr(a,s,e,i,r),e=o.maxOutputSize,i=o.iouThreshold,r=o.scoreThreshold,[4,Promise.all([a.data(),s.data()])];case 1:return l=d.sent(),u=l[0],c=l[1],h=tv(u,c,e,i,r),a!==n&&a.dispose(),s!==t&&s.dispose(),[2,h]}})})}var TR=AR;function NR(n,t,e,i,r,a){i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY),a===void 0&&(a=0);var s=O(n,"boxes","nonMaxSuppression"),o=O(t,"scores","nonMaxSuppression"),l=zr(s,o,e,i,r,a);e=l.maxOutputSize,i=l.iouThreshold,r=l.scoreThreshold,a=l.softNmsSigma;var u={boxes:s,scores:o},c={maxOutputSize:e,iouThreshold:i,scoreThreshold:r,softNmsSigma:a},h=z.runKernel(vf,u,c);return{selectedIndices:h[0],selectedScores:h[1]}}var xR=U({nonMaxSuppressionWithScore_:NR});function CR(n,t,e,i,r,a){return i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY),a===void 0&&(a=0),de(this,void 0,void 0,function(){var s,o,l,u,c,h,d;return pe(this,function(p){switch(p.label){case 0:return s=O(n,"boxes","nonMaxSuppressionAsync"),o=O(t,"scores","nonMaxSuppressionAsync"),l=zr(s,o,e,i,r,a),e=l.maxOutputSize,i=l.iouThreshold,r=l.scoreThreshold,a=l.softNmsSigma,[4,Promise.all([s.data(),o.data()])];case 1:return u=p.sent(),c=u[0],h=u[1],d=iv(c,h,e,i,r,a),s!==n&&s.dispose(),o!==t&&o.dispose(),[2,d]}})})}var RR=CR;function OR(n,t,e,i,r,a){i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY),a===void 0&&(a=!1);var s=O(n,"boxes","nonMaxSuppression"),o=O(t,"scores","nonMaxSuppression"),l=zr(s,o,e,i,r,null),u=l.maxOutputSize,c=l.iouThreshold,h=l.scoreThreshold,d={boxes:s,scores:o},p={maxOutputSize:u,iouThreshold:c,scoreThreshold:h,padToMaxOutputSize:a},f=z.runKernel(gf,d,p);return{selectedIndices:f[0],validOutputs:f[1]}}var ER=U({nonMaxSuppressionPadded_:OR});function DR(n,t,e,i,r,a){return i===void 0&&(i=.5),r===void 0&&(r=Number.NEGATIVE_INFINITY),a===void 0&&(a=!1),de(this,void 0,void 0,function(){var s,o,l,u,c,h,d,p,f,m;return pe(this,function(g){switch(g.label){case 0:return s=O(n,"boxes","nonMaxSuppressionAsync"),o=O(t,"scores","nonMaxSuppressionAsync"),l=zr(s,o,e,i,r,null),u=l.maxOutputSize,c=l.iouThreshold,h=l.scoreThreshold,[4,Promise.all([s.data(),o.data()])];case 1:return d=g.sent(),p=d[0],f=d[1],m=nv(p,f,u,c,h,a),s!==n&&s.dispose(),o!==t&&o.dispose(),[2,m]}})})}var kR=DR;function FR(n,t,e){e===void 0&&(e=!1);var i=O(n,"images","resizeBilinear");E(i.rank===3||i.rank===4,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got "+("rank "+i.rank+".")}),E(t.length===2,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+(t+".")});var r=i,a=!1;i.rank===3&&(a=!0,r=V(i,[1,i.shape[0],i.shape[1],i.shape[2]]));var s=t[0],o=t[1],l=function(d,p){return p([r]),d.resizeBilinear(r,s,o,e)},u={images:r},c={alignCorners:e,size:t},h=z.runKernelFunc(l,u,null,uu,c);return a?V(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var av=U({resizeBilinear_:FR});function WR(n,t,e){e===void 0&&(e=!1);var i=O(n,"images","resizeNearestNeighbor");E(i.rank===3||i.rank===4,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got "+("rank "+i.rank+".")}),E(t.length===2,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+(t+".")}),E(i.dtype==="float32"||i.dtype==="int32",function(){return"`images` must have `int32` or `float32` as dtype"});var r=i,a=!1;i.rank===3&&(a=!0,r=V(i,[1,i.shape[0],i.shape[1],i.shape[2]]));var s=t[0],o=t[1],l={images:r},u={alignCorners:e,size:t},c=function(d,p){return p([r]),d.resizeNearestNeighbor(r,s,o,e)},h=z.runKernelFunc(c,l,null,lu,u);return a?V(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var sv=U({resizeNearestNeighbor_:WR});function UR(n,t,e){E(t%1===0,function(){return"bandPart(): numLower must be an integer, got "+t+"."}),E(e%1===0,function(){return"bandPart(): numUpper must be an integer, got "+e+"."});var i=O(n,"a","bandPart");E(i.rank>=2,function(){return"bandPart(): Rank must be at least 2, got "+i.rank+"."});var r=i.shape,a=i.shape.slice(-2),s=a[0],o=a[1];if(!(t<=s))throw new Error("bandPart(): numLower ("+t+")"+(" must not be greater than the number of rows ("+s+")."));if(!(e<=o))throw new Error("bandPart(): numUpper ("+e+")"+(" must not be greater than the number of columns ("+o+")."));t<0&&(t=s),e<0&&(e=o);var l=V(Pc(0,s,1,"int32"),[-1,1]),u=Pc(0,o,1,"int32"),c=ge(l,u),h=Vi(_i(c,we(+t,"int32")),Pi(c,we(-e,"int32"))),d=Yn([s,o],i.dtype);return V(Ki(Ks(V(i,[-1,s,o])).map(function(p){return pn(h,p,d)})),r)}var BR=U({bandPart_:UR});function zR(n){var t;if(Array.isArray(n)){t=!1,E(n!=null&&n.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var e=n[0].shape[0],i=function(l){E(n[l].shape[0]===e,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: "+("("+n[l].shape[0]+" vs. "+e+")")})},r=1;r0)for(var c=0;c=2,function(){return"qr() requires input tensor to have a rank >= 2, but got rank "+n.rank}),n.rank===2)return ov(n,t);var e=n.shape.slice(0,n.shape.length-2).reduce(function(l,u){return l*u}),i=Ks(V(n,[e,n.shape[n.shape.length-2],n.shape[n.shape.length-1]]),0),r=[],a=[];i.forEach(function(l){var u=ov(l,t),c=u[0],h=u[1];r.push(c),a.push(h)});var s=V(Ki(r,0),n.shape),o=V(Ki(a,0),n.shape);return[s,o]}function ov(n,t){return t===void 0&&(t=!1),z.tidy(function(){E(n.shape.length===2,function(){return"qr2d() requires a 2D Tensor, but got a "+n.shape.length+"D Tensor."});for(var e=n.shape[0],i=n.shape[1],r=og(e),a=Ui(n),s=Oa([[1]],[1,1]),o=Ui(s),l=e>=i?i:e,u=function(h){var d,p=a,f=o,m=r;d=z.tidy(function(){var g=ze(a,[h,h],[e-h,1]),v=js(g),b=ze(a,[h,h],[1,1]),w=pn(ci(b,0),Oa([[-1]]),Oa([[1]])),S=ge(b,J(w,v)),L=Ie(g,S);L.shape[0]===1?o=Ui(s):o=xt([s,ze(L,[1,0],[L.shape[0]-1,L.shape[1]])],0);var x=gt(Ie(Fe(w,S),v)),C=ze(a,[h,0],[e-h,i]),R=J(x,o),D=ut(o);if(h===0)a=ge(C,Fe(R,Fe(D,C)));else{var k=ge(C,Fe(R,Fe(D,C)));a=xt([ze(a,[0,0],[h,i]),k],0)}var W=ut(R),F=ze(r,[0,h],[e,r.shape[1]-h]);if(h===0)r=ge(F,Fe(Fe(F,o),W));else{var P=ge(F,Fe(Fe(F,o),W));r=xt([ze(r,[0,0],[e,h]),P],1)}return[o,a,r]}),o=d[0],a=d[1],r=d[2],zt([p,f,m])},c=0;ci&&(r=ze(r,[0,0],[e,i]),a=ze(a,[0,0],[i,i])),[r,a]})}var MR=U({qr_:_R});(function(n){n[n.NONE=0]="NONE",n[n.MEAN=1]="MEAN",n[n.SUM=2]="SUM",n[n.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(I.Reduction||(I.Reduction={}));function HR(n,t,e){e===void 0&&(e=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var i=O(n,"losses","computeWeightedLoss"),r=null;t!=null&&(r=O(t,"weights","computeWeightedLoss"));var a=r==null?i:J(i,r);if(e===I.Reduction.NONE)return a;if(e===I.Reduction.SUM)return Ae(a);if(e===I.Reduction.MEAN){if(r==null)return Na(a);var s=i.size/r.size,o=Ie(Ae(a),Ae(r));return s>1?Ie(o,we(s)):o}if(e===I.Reduction.SUM_BY_NONZERO_WEIGHTS){if(r==null)return Ie(Ae(a),we(i.size));var l=J(r,kr(i.shape)),u=ue(Ae(Ms(l,we(0))),"float32");return Ie(Ae(a),u)}throw Error("Unknown reduction: "+e)}var $n=U({computeWeightedLoss_:HR});function VR(n,t,e,i){i===void 0&&(i=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var r=O(n,"labels","absoluteDifference"),a=O(t,"predictions","absoluteDifference"),s=null;e!=null&&(s=O(e,"weights","absoluteDifference")),Ue(r.shape,a.shape,"Error in absoluteDifference: ");var o=qt(ge(r,a));return $n(o,s,i)}var qR=U({absoluteDifference_:VR});function GR(n,t,e,i,r){r===void 0&&(r=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var a=O(n,"labels","cosineDistance"),s=O(t,"predictions","cosineDistance"),o=null;i!=null&&(o=O(i,"weights","cosineDistance")),Ue(a.shape,s.shape,"Error in cosineDistance: ");var l=we(1),u=ge(l,Ae(J(a,s),e,!0));return $n(u,o,r)}var YR=U({cosineDistance_:GR});function KR(n,t,e,i){i===void 0&&(i=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var r=O(n,"labels","hingeLoss"),a=O(t,"predictions","hingeLoss"),s=null;e!=null&&(s=O(e,"weights","hingeLoss")),Ue(r.shape,a.shape,"Error in hingeLoss: ");var o=we(1);r=ge(J(we(2),r),o);var l=Ca(ge(o,J(r,a)));return $n(l,s,i)}var jR=U({hingeLoss_:KR});function $R(n,t,e,i,r){i===void 0&&(i=1),r===void 0&&(r=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var a=O(n,"labels","huberLoss"),s=O(t,"predictions","huberLoss"),o=null;e!=null&&(o=O(e,"weights","huberLoss")),Ue(a.shape,s.shape,"Error in huberLoss: ");var l=we(i),u=qt(ge(s,a)),c=_s(u,l),h=ge(u,c),d=fe(J(we(.5),Ye(c)),J(l,h));return $n(d,o,r)}var XR=U({huberLoss_:$R});function JR(n,t,e,i,r){i===void 0&&(i=1e-7),r===void 0&&(r=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var a=O(n,"labels","logLoss"),s=O(t,"predictions","logLoss"),o=null;e!=null&&(o=O(e,"weights","logLoss")),Ue(a.shape,s.shape,"Error in logLoss: ");var l=we(1),u=we(i),c=gt(J(a,Mi(fe(s,u)))),h=J(ge(l,a),Mi(fe(ge(l,s),u))),d=ge(c,h);return $n(d,o,r)}var ZR=U({logLoss_:JR});function QR(n,t,e,i){i===void 0&&(i=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var r=O(n,"labels","meanSquaredError"),a=O(t,"predictions","meanSquaredError"),s=null;e!=null&&(s=O(e,"weights","meanSquaredError")),Ue(r.shape,a.shape,"Error in meanSquaredError: ");var o=Gs(r,a);return $n(o,s,i)}var eO=U({meanSquaredError_:QR});function tO(n,t){var e=O(n,"labels","sigmoidCrossEntropyWithLogits"),i=O(t,"logits","sigmoidCrossEntropyWithLogits");Ue(e.shape,i.shape,"Error in sigmoidCrossEntropyWithLogits: ");var r=Ca(i),a=J(i,e),s=Rc(fn(gt(qt(i))));return fe(ge(r,a),s)}function nO(n,t,e,i,r){i===void 0&&(i=0),r===void 0&&(r=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var a=O(n,"multiClassLabels","sigmoidCrossEntropy"),s=O(t,"logits","sigmoidCrossEntropy"),o=null;if(e!=null&&(o=O(e,"weights","sigmoidCrossEntropy")),Ue(a.shape,s.shape,"Error in sigmoidCrossEntropy: "),i>0){var l=we(i),u=we(1),c=we(.5);a=fe(J(a,ge(u,l)),J(c,l))}var h=tO(a,s);return $n(h,o,r)}var iO=U({sigmoidCrossEntropy_:nO});function rO(n,t,e){if(e===void 0&&(e=-1),e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet "+("supported. Labels / logits was rank "+t.rank+" ")+("and dim was "+e));var i=kn(function(r,a,s){var o=!0,l=Ec(a,[e],o),u=ge(ue(a,"float32"),l);s([r,u]);var c=gt(J(u,r)),h=Ae(c,[e]),d=function(p,f){var m=f[0],g=f[1],v=en(p.shape,[e]);return[J(V(p,v),ge(ue(m,"float32"),fn(g))),J(V(p,v),ge(fn(g),ue(m,"float32")))]};return{value:h,gradFunc:d}});return i(n,t)}function aO(n,t,e,i,r){i===void 0&&(i=0),r===void 0&&(r=I.Reduction.SUM_BY_NONZERO_WEIGHTS);var a=O(n,"onehotLabels","softmaxCrossEntropy"),s=O(t,"logits","softmaxCrossEntropy"),o=null;if(e!=null&&(o=O(e,"weights","softmaxCrossEntropy")),Ue(a.shape,s.shape,"Error in softmaxCrossEntropy: "),i>0){var l=we(i),u=we(1),c=we(a.shape[1]);a=fe(J(a,ge(u,l)),Ie(l,c))}var h=rO(a,s);return $n(h,o,r)}var sO=U({softmaxCrossEntropy_:aO});var oO={fft:Vs,ifft:Ra,rfft:qs,irfft:qc},lO={hammingWindow:aR,hannWindow:Qg,frame:ev,stft:uR},uO={flipLeftRight:pR,resizeNearestNeighbor:sv,resizeBilinear:av,rotateWithOffset:mR,cropAndResize:hR,nonMaxSuppression:vR,nonMaxSuppressionAsync:TR,nonMaxSuppressionWithScore:xR,nonMaxSuppressionWithScoreAsync:RR,nonMaxSuppressionPadded:ER,nonMaxSuppressionPaddedAsync:kR},cO={bandPart:BR,gramSchmidt:PR,qr:MR},hO={absoluteDifference:qR,computeWeightedLoss:$n,cosineDistance:YR,hingeLoss:jR,huberLoss:XR,logLoss:ZR,meanSquaredError:eO,sigmoidCrossEntropy:iO,softmaxCrossEntropy:sO};var hi=function(n){Vn(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.minimize=function(e,i,r){i===void 0&&(i=!1);var a=this.computeGradients(e,r),s=a.value,o=a.grads;if(r!=null){var l=r.map(function(u){return{name:u.name,tensor:o[u.name]}});this.applyGradients(l)}else this.applyGradients(o);return zt(o),i?s:(s.dispose(),null)},Object.defineProperty(t.prototype,"iterations",{get:function(){return this.iterations_==null&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),t.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},t.prototype.computeGradients=function(e,i){return fg(e,i)},t.prototype.dispose=function(){this.iterations_!=null&&zt(this.iterations_)},t.prototype.saveIterations=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){return this.iterations_==null&&(this.iterations_=0),[2,{name:"iter",tensor:we(this.iterations_,"int32")}]})})},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){return pe(this,function(i){throw new Error("setWeights() is not implemented for this optimizer class "+(""+this.getClassName()))})})},t.prototype.extractIterations=function(e){return de(this,void 0,void 0,function(){var i;return pe(this,function(r){switch(r.label){case 0:return i=this,[4,e[0].tensor.data()];case 1:return i.iterations_=r.sent()[0],[2,e.slice(1)]}})})},t}(Em);Object.defineProperty(hi,Symbol.hasInstance,{value:function(n){return n.minimize!=null&&n.computeGradients!=null&&n.applyGradients!=null}});var $c=function(n){Vn(t,n);function t(e,i,r){r===void 0&&(r=null);var a=n.call(this)||this;return a.learningRate=e,a.rho=i,a.epsilon=r,a.accumulatedGrads=[],a.accumulatedUpdates=[],r==null&&(a.epsilon=z.backend.epsilon()),a}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);r.forEach(function(a,s){var o=z.registeredVariables[a],l=!1;i.accumulatedGrads[s]==null&&(i.accumulatedGrads[s]={originalName:a+"/accum_grad",variable:ft(function(){return Ee(o).variable(l)})}),i.accumulatedUpdates[s]==null&&(i.accumulatedUpdates[s]={originalName:a+"/accum_var",variable:ft(function(){return Ee(o).variable(l)})});var u=Array.isArray(e)?e[s].tensor:e[a];if(u==null)return;var c=i.accumulatedGrads[s].variable,h=i.accumulatedUpdates[s].variable;ft(function(){var d=fe(J(c,i.rho),J(Ye(u),1-i.rho)),p=J(Ie(_t(fe(h,i.epsilon)),_t(fe(c,i.epsilon))),u),f=fe(J(h,i.rho),J(Ye(p),1-i.rho));c.assign(d),h.assign(f);var m=fe(J(p,-i.learningRate),o);o.assign(m)})}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedUpdates!=null&&(zt(this.accumulatedGrads.map(function(e){return e.variable})),zt(this.accumulatedUpdates.map(function(e){return e.variable})))},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){var e;return pe(this,function(i){switch(i.label){case 0:return e=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[i.sent()].concat(e.map(function(r){return{name:r.originalName,tensor:r.variable}}))]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){var i,r;return pe(this,function(a){switch(a.label){case 0:return[4,this.extractIterations(e)];case 1:return e=a.sent(),i=e.length/2,r=!1,this.accumulatedGrads=e.slice(0,i).map(function(s){return{originalName:s.name,variable:s.tensor.variable(r)}}),this.accumulatedUpdates=e.slice(i,i*2).map(function(s){return{originalName:s.name,variable:s.tensor.variable(r)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},t.fromConfig=function(e,i){return new e(i.learningRate,i.rho,i.epsilon)},t.className="Adadelta",t}(hi);li($c);var Xc=function(n){Vn(t,n);function t(e,i){i===void 0&&(i=.1);var r=n.call(this)||this;return r.learningRate=e,r.initialAccumulatorValue=i,r.accumulatedGrads=[],r}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);r.forEach(function(a,s){var o=z.registeredVariables[a];if(i.accumulatedGrads[s]==null){var l=!1;i.accumulatedGrads[s]={originalName:a+"/accumulator",variable:ft(function(){return xc(o.shape,i.initialAccumulatorValue).variable(l)})}}var u=Array.isArray(e)?e[s].tensor:e[a];if(u==null)return;var c=i.accumulatedGrads[s].variable;ft(function(){var h=fe(c,Ye(u));c.assign(h);var d=fe(J(Ie(u,_t(fe(h,z.backend.epsilon()))),-i.learningRate),o);o.assign(d)})}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedGrads!=null&&zt(this.accumulatedGrads.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(this.accumulatedGrads.map(function(i){return{name:i.originalName,tensor:i.variable}}))]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){var i;return pe(this,function(r){switch(r.label){case 0:return[4,this.extractIterations(e)];case 1:return e=r.sent(),i=!1,this.accumulatedGrads=e.map(function(a){return{originalName:a.name,variable:a.tensor.variable(i)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},t.fromConfig=function(e,i){return new e(i.learningRate,i.initialAccumulatorValue)},t.className="Adagrad",t}(hi);li(Xc);var Jc=function(n){Vn(t,n);function t(e,i,r,a){a===void 0&&(a=null);var s=n.call(this)||this;return s.learningRate=e,s.beta1=i,s.beta2=r,s.epsilon=a,s.accumulatedFirstMoment=[],s.accumulatedSecondMoment=[],ft(function(){s.accBeta1=we(i).variable(),s.accBeta2=we(r).variable()}),a==null&&(s.epsilon=z.backend.epsilon()),s}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);ft(function(){var a=ge(1,i.accBeta1),s=ge(1,i.accBeta2);r.forEach(function(o,l){var u=z.registeredVariables[o],c=!1;i.accumulatedFirstMoment[l]==null&&(i.accumulatedFirstMoment[l]={originalName:o+"/m",variable:ft(function(){return Ee(u).variable(c)})}),i.accumulatedSecondMoment[l]==null&&(i.accumulatedSecondMoment[l]={originalName:o+"/v",variable:ft(function(){return Ee(u).variable(c)})});var h=Array.isArray(e)?e[l].tensor:e[o];if(h==null)return;var d=i.accumulatedFirstMoment[l].variable,p=i.accumulatedSecondMoment[l].variable,f=fe(J(d,i.beta1),J(h,1-i.beta1)),m=fe(J(p,i.beta2),J(Ye(h),1-i.beta2)),g=Ie(f,a),v=Ie(m,s);d.assign(f),p.assign(m);var b=fe(J(Ie(g,fe(_t(v),i.epsilon)),-i.learningRate),u);u.assign(b)}),i.accBeta1.assign(J(i.accBeta1,i.beta1)),i.accBeta2.assign(J(i.accBeta2,i.beta2))}),this.incrementIterations()},t.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&zt(this.accumulatedFirstMoment.map(function(e){return e.variable})),this.accumulatedSecondMoment!=null&&zt(this.accumulatedSecondMoment.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){var e;return pe(this,function(i){switch(i.label){case 0:return e=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[i.sent()].concat(e.map(function(r){return{name:r.originalName,tensor:r.variable}}))]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){var i,r,a=this;return pe(this,function(s){switch(s.label){case 0:return[4,this.extractIterations(e)];case 1:return e=s.sent(),ft(function(){a.accBeta1.assign(Kn(a.beta1,a.iterations_+1)),a.accBeta2.assign(Kn(a.beta2,a.iterations_+1))}),i=e.length/2,r=!1,this.accumulatedFirstMoment=e.slice(0,i).map(function(o){return{originalName:o.name,variable:o.tensor.variable(r)}}),this.accumulatedSecondMoment=e.slice(i,i*2).map(function(o){return{originalName:o.name,variable:o.tensor.variable(r)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},t.fromConfig=function(e,i){return new e(i.learningRate,i.beta1,i.beta2,i.epsilon)},t.className="Adam",t}(hi);li(Jc);var Zc=function(n){Vn(t,n);function t(e,i,r,a,s){a===void 0&&(a=null),s===void 0&&(s=0);var o=n.call(this)||this;return o.learningRate=e,o.beta1=i,o.beta2=r,o.epsilon=a,o.decay=s,o.accumulatedFirstMoment=[],o.accumulatedWeightedInfNorm=[],ft(function(){o.iteration=we(0).variable(),o.accBeta1=we(i).variable()}),a==null&&(o.epsilon=z.backend.epsilon()),o}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);ft(function(){var a=ge(1,i.accBeta1),s=Ie(-i.learningRate,fe(J(i.iteration,i.decay),1));r.forEach(function(o,l){var u=z.registeredVariables[o],c=!1;i.accumulatedFirstMoment[l]==null&&(i.accumulatedFirstMoment[l]={originalName:o+"/m",variable:Ee(u).variable(c)}),i.accumulatedWeightedInfNorm[l]==null&&(i.accumulatedWeightedInfNorm[l]={originalName:o+"/v",variable:Ee(u).variable(c)});var h=Array.isArray(e)?e[l].tensor:e[o];if(h==null)return;var d=i.accumulatedFirstMoment[l].variable,p=i.accumulatedWeightedInfNorm[l].variable,f=fe(J(d,i.beta1),J(h,1-i.beta1)),m=J(p,i.beta2),g=qt(h),v=Dr(m,g);d.assign(f),p.assign(v);var b=fe(J(Ie(s,a),Ie(f,fe(v,i.epsilon))),u);u.assign(b)}),i.iteration.assign(fe(i.iteration,1)),i.accBeta1.assign(J(i.accBeta1,i.beta1))}),this.incrementIterations()},t.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&zt(this.accumulatedFirstMoment.map(function(e){return e.variable})),this.accumulatedWeightedInfNorm!=null&&zt(this.accumulatedWeightedInfNorm.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){throw new Error("getWeights() is not implemented for Adamax yet.")})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){return pe(this,function(i){throw new Error("setWeights() is not implemented for Adamax yet.")})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},t.fromConfig=function(e,i){return new e(i.learningRate,i.beta1,i.beta2,i.epsilon,i.decay)},t.className="Adamax",t}(hi);li(Zc);var Qs=function(n){Vn(t,n);function t(e){var i=n.call(this)||this;return i.learningRate=e,i.setLearningRate(e),i}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);r.forEach(function(a,s){var o=Array.isArray(e)?e[s].tensor:e[a];if(o==null)return;var l=z.registeredVariables[a];ft(function(){var u=fe(J(i.c,o),l);l.assign(u)})}),this.incrementIterations()},t.prototype.setLearningRate=function(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Fm(we(-e))},t.prototype.dispose=function(){this.c.dispose()},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()]]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){return pe(this,function(i){switch(i.label){case 0:return[4,this.extractIterations(e)];case 1:if(e=i.sent(),e.length!==0)throw new Error("SGD optimizer does not have settable weights.");return[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate}},t.fromConfig=function(e,i){return new e(i.learningRate)},t.className="SGD",t}(hi);li(Qs);var Qc=function(n){Vn(t,n);function t(e,i,r){r===void 0&&(r=!1);var a=n.call(this,e)||this;return a.learningRate=e,a.momentum=i,a.useNesterov=r,a.accumulations=[],a.m=we(a.momentum),a}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);r.forEach(function(a,s){var o=z.registeredVariables[a];if(i.accumulations[s]==null){var l=!1;i.accumulations[s]={originalName:a+"/momentum",variable:ft(function(){return Ee(o).variable(l)})}}var u=i.accumulations[s].variable,c=Array.isArray(e)?e[s].tensor:e[a];if(c==null)return;ft(function(){var h,d=fe(J(i.m,u),c);i.useNesterov?h=fe(J(i.c,fe(c,J(d,i.m))),o):h=fe(J(i.c,d),o),u.assign(d),o.assign(h)})}),this.incrementIterations()},t.prototype.dispose=function(){this.m.dispose(),this.accumulations!=null&&zt(this.accumulations.map(function(e){return e.variable}))},t.prototype.setMomentum=function(e){this.momentum=e},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){return pe(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(this.accumulations.map(function(i){return{name:i.originalName,tensor:i.variable}}))]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){var i;return pe(this,function(r){switch(r.label){case 0:return[4,this.extractIterations(e)];case 1:return e=r.sent(),i=!1,this.accumulations=e.map(function(a){return{originalName:a.name,variable:a.tensor.variable(i)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},t.fromConfig=function(e,i){return new e(i.learningRate,i.momentum,i.useNesterov)},t.className="Momentum",t}(Qs);li(Qc);var eh=function(n){Vn(t,n);function t(e,i,r,a,s){i===void 0&&(i=.9),r===void 0&&(r=0),a===void 0&&(a=null),s===void 0&&(s=!1);var o=n.call(this)||this;if(o.learningRate=e,o.decay=i,o.momentum=r,o.epsilon=a,o.accumulatedMeanSquares=[],o.accumulatedMoments=[],o.accumulatedMeanGrads=[],o.centered=s,a==null&&(o.epsilon=z.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.");return o}return t.prototype.applyGradients=function(e){var i=this,r=Array.isArray(e)?e.map(function(a){return a.name}):Object.keys(e);r.forEach(function(a,s){var o=z.registeredVariables[a],l=!1;i.accumulatedMeanSquares[s]==null&&(i.accumulatedMeanSquares[s]={originalName:a+"/rms",variable:ft(function(){return Ee(o).variable(l)})}),i.accumulatedMoments[s]==null&&(i.accumulatedMoments[s]={originalName:a+"/momentum",variable:ft(function(){return Ee(o).variable(l)})}),i.accumulatedMeanGrads[s]==null&&i.centered&&(i.accumulatedMeanGrads[s]={originalName:a+"/mg",variable:ft(function(){return Ee(o).variable(l)})});var u=Array.isArray(e)?e[s].tensor:e[a];if(u==null)return;var c=i.accumulatedMeanSquares[s].variable,h=i.accumulatedMoments[s].variable;ft(function(){var d=fe(J(c,i.decay),J(Ye(u),1-i.decay));if(i.centered){var p=i.accumulatedMeanGrads[s].variable,f=fe(J(p,i.decay),J(u,1-i.decay)),m=Ie(J(u,i.learningRate),_t(ge(d,fe(Ye(f),i.epsilon)))),g=fe(J(h,i.momentum),m);c.assign(d),p.assign(f),h.assign(g);var v=ge(o,g);o.assign(v)}else{var b=fe(J(c,i.decay),J(Ye(u),1-i.decay)),g=fe(J(h,i.momentum),Ie(J(u,i.learningRate),_t(fe(b,i.epsilon))));c.assign(b),h.assign(g);var v=ge(o,g);o.assign(v)}})}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedMeanSquares!=null&&zt(this.accumulatedMeanSquares.map(function(e){return e.variable})),this.accumulatedMeanGrads!=null&&this.centered&&zt(this.accumulatedMeanGrads.map(function(e){return e.variable})),this.accumulatedMoments!=null&&zt(this.accumulatedMoments.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return de(this,void 0,void 0,function(){var e;return pe(this,function(i){switch(i.label){case 0:return e=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&e.push.apply(e,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[i.sent()].concat(e.map(function(r){return{name:r.originalName,tensor:r.variable}}))]}})})},t.prototype.setWeights=function(e){return de(this,void 0,void 0,function(){var i,r;return pe(this,function(a){switch(a.label){case 0:return[4,this.extractIterations(e)];case 1:return e=a.sent(),i=this.centered?e.length/3:e.length/2,r=!1,this.accumulatedMeanSquares=e.slice(0,i).map(function(s){return{originalName:s.name,variable:s.tensor.variable(r)}}),this.accumulatedMoments=e.slice(i,i*2).map(function(s){return{originalName:s.name,variable:s.tensor.variable(r)}}),this.centered&&(this.accumulatedMeanGrads=e.slice(i*2,i*3).map(function(s){return{originalName:s.name,variable:s.tensor.variable(r)}})),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},t.fromConfig=function(e,i){return new e(i.learningRate,i.decay,i.momentum,i.epsilon,i.centered)},t.className="RMSProp",t}(hi);li(eh);var ji=function(){function n(){}return n.sgd=function(t){return new Qs(t)},n.momentum=function(t,e,i){return i===void 0&&(i=!1),new Qc(t,e,i)},n.rmsprop=function(t,e,i,r,a){return e===void 0&&(e=.9),i===void 0&&(i=0),r===void 0&&(r=null),a===void 0&&(a=!1),new eh(t,e,i,r,a)},n.adam=function(t,e,i,r){return t===void 0&&(t=.001),e===void 0&&(e=.9),i===void 0&&(i=.999),r===void 0&&(r=null),new Jc(t,e,i,r)},n.adadelta=function(t,e,i){return t===void 0&&(t=.001),e===void 0&&(e=.95),i===void 0&&(i=null),new $c(t,e,i)},n.adamax=function(t,e,i,r,a){return t===void 0&&(t=.002),e===void 0&&(e=.9),i===void 0&&(i=.999),r===void 0&&(r=null),a===void 0&&(a=0),new Zc(t,e,i,r,a)},n.adagrad=function(t,e){return e===void 0&&(e=.1),new Xc(t,e)},n}();var dO={sgd:ji.sgd,momentum:ji.momentum,adadelta:ji.adadelta,adagrad:ji.adagrad,rmsprop:ji.rmsprop,adamax:ji.adamax,adam:ji.adam};var pO=function(){return typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:function(n){return n()}}();function fO(){return new Promise(function(n){return pO(function(){return n()})})}function mO(n,t,e){var i=e*(typeof n=="number"?n:n[0]),r=t*(typeof n=="number"?n:n[1]);return[i,r]}function gO(n,t,e,i){i===void 0&&(i=!0);var r=[];if(i)r=r.concat(t.slice(0)),r.push(n[0]/e),r=r.concat(n.slice(1));else{r=r.concat(n[0]);for(var a=t.length,s=0;s=t*2+1||r%2===1?s.push(r):a.push(r);i.push.apply(i,a),i.push(0),i.push.apply(i,s)}return i}function yO(n,t,e,i){i===void 0&&(i=!0);var r=[];i?r.push(n[0]/e):r.push(n[0]*e);for(var a=1;a0&&(o=Ae(o,l)),V(o,e.shape)},s=function(){var o=n,l=mt(i.shape,r);return l.length>0&&(o=Ae(o,l)),V(o,i.shape)};return{a,b:s}}};var $O={kernelName:il,saveAllInputs:!0,gradFunc:function(n,t){var e={};return t.forEach(function(i,r){e[r]=function(){return n.clone()}}),e}};var XO={kernelName:rl,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ee(e)}}}};var JO={kernelName:al,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ee(e)}}}};var ZO={kernelName:sl,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ie(n,_t(ge(we(1),Ye(ue(e,"float32")))))}}}};var QO={kernelName:ol,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){var i=_t(fe(we(1),Ye(ue(e,"float32"))));return Ie(n,i)}}}};var eE={kernelName:cl,inputsToSave:["a","b"],gradFunc:function(n,t){var e=t[0],i=t[1],r=et(e.shape,i.shape),a=function(){var o=fe(Ye(e),Ye(i)),l=J(n,Ie(i,o)),u=mt(e.shape,r);return u.length>0&&(l=Ae(l,u)),V(l,e.shape)},s=function(){var o=fe(Ye(e),Ye(i)),l=gt(J(n,Ie(e,o))),u=mt(i.shape,r);return u.length>0&&(l=Ae(l,u)),V(l,i.shape)};return{a,b:s}}};var tE={kernelName:ll,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ie(n,fe(Ye(ue(e,"float32")),1))}}}};var nE={kernelName:ul,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ie(n,ge(we(1),Ye(ue(e,"float32"))))}}}};function iE(n,t,e,i,r,a,s){r===void 0&&(r=[1,1,1]);var o=O(n,"dy","avgPool3dBackprop"),l=O(t,"input","avgPool3dBackprop"),u=o,c=l,h=!1;l.rank===4&&(h=!0,u=V(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),c=V(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),E(u.rank===5,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+(u.rank+".")}),E(c.rank===5,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+(c.rank+".")}),E(Pt(i,r),function(){return"Error in avgPool3dBackprop: Either strides or dilations "+("must be 1. Got strides "+i+" and dilations '"+r+"'")}),s!=null&&E(rt(a),function(){return"Error in maxPool3dBackprop: pad must be an integer when "+("using, dimRoundingMode "+s+" but got pad "+a+".")});var d=function(g){var v=La(c.shape,e,i,r,a,s);return g.avgPool3dBackprop(u,c,v)},p={dy:u,input:c},f={filterSize:e,strides:i,dilations:r,pad:a,dimRoundingMode:s},m=z.runKernelFunc(d,p,null,Up,f);return h?V(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var rE=U({avgPool3dBackprop_:iE});var aE={kernelName:dl,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e,a=r.filterSize,s=r.strides,o=r.dilations,l=r.pad,u=r.dimRoundingMode,c=o??[1,1,1];return{x:function(){return rE(n,i,a,s,c,l,u)}}}};function sE(n,t,e,i,r){var a=O(n,"dy","avgPoolBackprop"),s=O(t,"input","avgPoolBackprop");E(s.rank===a.rank,function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+a.rank+")"});var o=s,l=a,u=!1;s.rank===3&&(u=!0,o=V(s,[1,s.shape[0],s.shape[1],s.shape[2]]),l=V(a,[1,a.shape[0],a.shape[1],a.shape[2]])),E(l.rank===4,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+(l.rank+".")}),E(o.rank===4,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+(o.rank+".")});var c=function(f){var m=Cr(o.shape,e,i,1,r);return f.avgPoolBackprop(l,o,m)},h={dy:l,input:o},d={filterSize:e,strides:i,pad:r},p=z.runKernelFunc(c,h,null,Wp,d);return u?V(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var oE=U({avgPoolBackprop_:sE});var lE={kernelName:hl,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e,a=r.filterSize,s=r.strides,o=r.pad;return{x:function(){return oE(n,i,a,s,o)}}}};var uE={kernelName:pl,inputsToSave:["a","b"],gradFunc:function(n,t,e){var i=t,r=i[0],a=i[1],s=e,o=s.transposeA,l=s.transposeB;return!o&&!l?{a:function(){return Fe(n,a,!1,!0)},b:function(){return Fe(r,n,!0,!1)}}:!o&&l?{a:function(){return Fe(n,a,!1,!1)},b:function(){return Fe(n,r,!0,!1)}}:o&&!l?{a:function(){return Fe(a,n,!1,!0)},b:function(){return Fe(r,n,!1,!1)}}:{a:function(){return Fe(a,n,!0,!0)},b:function(){return Fe(n,r,!0,!0)}}}};var cE={kernelName:fl,gradFunc:function(n,t,e){var i=e,r=i.blockShape,a=i.crops;return{x:function(){return Hs(n,r,a)}}}};var hE={kernelName:ml,gradFunc:function(n,t,e){for(var i=e,r=i.inputShape,a=i.shape,s=Array.from(a),o=r.length-1;o>=0;o--)if(r[o]===a[o])s[o]=1;else if(r[o]!==1)throw new Error("broadcastTo(): ["+r+"] cannot be broadcast to ["+a+"].");for(var l=[],o=0;o1&&l.push(o);return{x:function(){return Ae(n,l,!0)}}}};var dE={kernelName:ps,gradFunc:function(n){return{x:function(){return n.clone()}}}};var pE={kernelName:gl,gradFunc:function(n){return{x:function(){return Ee(n)}}}};var fE={kernelName:vl,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e,a=r.clipValueMin,s=r.clipValueMax;return{x:function(){return pn(Vi(Pi(i,a),_i(i,s)),n,Ee(n))}}}};var mE={kernelName:yl,saveAllInputs:!0,gradFunc:function(n,t,e){var i=t.map(function(l){return l.shape}),r=e.axis,a=Qe(r,t[0].shape)[0],s=i.map(function(l){return l[a]}),o=Ur(n,s,a);return o.map(function(l){return function(){return l}})}};var gE={kernelName:bl,inputsToSave:["x","filter"],gradFunc:function(n,t,e){var i=t,r=i[0],a=i[1],s=e,o=s.dilations,l=s.strides,u=s.pad,c=s.dataFormat;return E(ui(o),function(){return"Error in gradient of conv2D: dilation rates greater than 1 "+("are not yet supported in gradients. Got dilations '"+o+"'")}),{x:function(){return Ic(r.shape,n,a,l,u,c)},filter:function(){return Kc(r,n,a.shape,l,u,c)}}}};var vE={kernelName:wl,inputsToSave:["dy","filter"],gradFunc:function(n,t,e){var i=t,r=i[0],a=i[1],s=e,o=s.strides,l=s.pad,u=s.dataFormat,c=s.dimRoundingMode;return{dy:function(){return Or(n,a,o,l,u,1,c)},filter:function(){return Kc(n,r,a.shape,o,l,u,c)}}}};function yE(n,t,e,i,r){var a=n;n.rank===4&&(a=V(n,[1,n.shape[0],n.shape[1],n.shape[2],n.shape[3]]));var s=t;s.rank===4&&(s=V(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),E(a.rank===5,function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+(a.shape+".")}),E(s.rank===5,function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+(s.shape+".")}),E(e.length===5,function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+(e+".")}),E(a.shape[4]===e[3],function(){return"Error in conv3dDerFilter: depth of input "+a.shape[4]+") must "+("match input depth in filter ("+e[3]+".")}),E(s.shape[4]===e[4],function(){return"Error in conv3dDerFilter: depth of dy ("+s.shape[4]+") must "+("match output depth for filter ("+e[4]+").")});var o=function(c){var h=1,d=Sa(a.shape,e,i,h,r);return c.conv3dDerFilter(a,s,d)},l={x:a,y:s},u={strides:i,pad:r};return z.runKernelFunc(o,l,null,Pp,u)}var bE=U({conv3DBackpropFilter_:yE});var wE={kernelName:Sl,inputsToSave:["x","filter"],gradFunc:function(n,t,e){var i=e,r=i.dilations,a=i.strides,s=i.pad;E(ui(r),function(){return"Error in gradient of conv3D: dilation rates greater than 1 are "+("not yet supported in gradients. Got dilations '"+r+"'")});var o=t[0],l=t[1];return{x:function(){return eg(o.shape,n,l,a,s)},filter:function(){return bE(o,n,l.shape,a,s)}}}};var SE={kernelName:Ll,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(gt(Hc(ue(e,"float32"))),n)}}}};var LE={kernelName:Il,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(Vc(ue(e,"float32")),n)}}}};var IE={kernelName:Al,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e,a=r.axis,s=r.exclusive,o=r.reverse;return{x:function(){var l=tn([a],i.rank),u=Tc(n,a,s,!o);return l!=null&&(u=ut(u,l)),u}}}};var AE={kernelName:Tl,inputsToSave:["x","filter"],gradFunc:function(n,t,e){var i=e,r=i.dilations,a=i.strides,s=i.pad,o=i.dimRoundingMode,l=r??[1,1];E(ui(l),function(){return"Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations "+("'"+l+"'")});var u=t,c=u[0],h=u[1];E(c.rank===4,function(){return"Error in gradient of depthwiseConv2dNative: input must be "+("rank 4, but got rank "+c.rank+".")}),E(h.rank===4,function(){return"Error in gradient of depthwiseConv2dNative: filter must be "+("rank 4, but got rank "+h.rank+".")}),E(c.shape[3]===h.shape[2],function(){return"Error in gradient of depthwiseConv2d: number of input "+("channels ("+c.shape[3]+") must match the inChannels dimension ")+("in filter "+h.shape[2]+".")}),E(Pt(a,l),function(){return"Error in gradient of depthwiseConv2d: Either strides or "+("dilations must be 1. Got strides "+a+" and dilations ")+("'"+l+"'.")}),o!=null&&E(rt(s),function(){return"Error in depthwiseConv2d: pad must be an integer when using, "+("dimRoundingMode "+o+" but got pad "+s+".")});var d=Dn(c.shape,h.shape,a,l,s,o,!0);return{x:function(){return Zg(c.shape,n,h,d)},filter:function(){return Jg(c,n,h.shape,d)}}}};var TE={kernelName:Nl,inputsToSave:["x","filter"],gradFunc:function(n,t,e){var i=t,r=i[0],a=i[1],s={x:r,filter:a,dy:n},o={x:r,filter:a,dy:n};return{x:function(){return z.runKernel(Yp,s,e)},filter:function(){return z.runKernel(Kp,o,e)}}}};var NE={kernelName:xl,inputsToSave:["a","b"],gradFunc:function(n,t){var e=t[0],i=t[1],r=et(e.shape,i.shape),a=function(){var o=Ie(n,ue(i,"float32")),l=mt(e.shape,r);return l.length>0?V(Ae(o,l),e.shape):o},s=function(){var o=J(n,ue(e,"float32")),l=mt(i.shape,r);l.length>0&&(o=V(Ae(o,l),i.shape));var u=Ye(i);return gt(Ie(o,ue(u,"float32")))};return{a,b:s}}};var xE={kernelName:Cl,outputsToSave:[!0],gradFunc:function(n,t){var e=t[0],i=function(a){return a.eluDer(n,e)},r={dy:n,y:e};return{x:function(){return z.runKernelFunc(i,r,null,jp)}}}};var CE={kernelName:Rl,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0],i=J(fn(gt(Ye(e))),2/Math.sqrt(Math.PI));return{x:function(){return J(n,i)}}}};var RE={kernelName:Ol,outputsToSave:[!0],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(n,e)}}}};var OE={kernelName:El,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(n,fn(e))}}}};var EE={kernelName:Dl,gradFunc:function(n){return{x:function(){return Ee(n)}}}};var DE={kernelName:kl,inputsToSave:["a","b"],gradFunc:function(n,t){var e=t[0],i=t[1],r=et(e.shape,i.shape),a=function(){var o=Ie(n,ue(i,"float32")),l=mt(e.shape,r);return l.length>0?V(Ae(o,l),e.shape):o},s=function(){var o=J(n,ue(e,"float32")),l=mt(i.shape,r);l.length>0&&(o=V(Ae(o,l),i.shape));var u=Ye(i);return gt(Ie(o,ue(u,"float32")))};return{a,b:s}}};var kE={kernelName:Fl,inputsToSave:["x","mean","variance","scale"],gradFunc:function(n,t,e){var i=e.varianceEpsilon,r=t[0],a=t[1],s=t[2],o=t[3],l=o??we(1),u=mt(a.shape,r.shape),c=[];if(a.rank===1){for(var h=0;h0?V(Ae(n,o),e.shape):n},s=function(){var o=J(n,gt(ks(Ie(e,i)))),l=mt(i.shape,r);return l.length>0?V(Ae(o,l),i.shape):o};return{a,b:s}}};var nD={kernelName:Zl,inputsToSave:["a","b"],gradFunc:function(n,t){var e=t[0],i=t[1],r=et(e.shape,i.shape),a=function(){var o=J(n,ue(i,"float32")),l=mt(e.shape,r);return l.length>0?V(Ae(o,l),e.shape):o},s=function(){var o=J(n,ue(e,"float32")),l=mt(i.shape,r);return l.length>0?V(Ae(o,l),i.shape):o};return{a,b:s}}};var iD={kernelName:Ql,gradFunc:function(n){return{x:function(){return gt(n)}}}};var rD={kernelName:tu,inputsToSave:["indices"],gradFunc:function(n,t){var e=t[0];return{indices:function(){return Yn(e.shape,"float32")}}}};var aD={kernelName:eu,gradFunc:function(n){return{x:function(){return Ee(n)}}}};var fv={kernelName:nu,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e.paddings,a=r.map(function(s){return s[0]});return{x:function(){return ze(n,a,i.shape)}}}};var sD={kernelName:iu,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:function(n,t){var e=t[0],i=t[1],r=t[2],a=e,s=i,o=et(a.shape,s.shape),l=function(){var c=ue(s,"float32"),h=J(n,J(c,Kn(a,ge(c,we(1))))),d=mt(a.shape,o);return d.length>0&&(h=Ae(h,d)),V(h,a.shape)},u=function(){var c=ci(a,0),h=pn(c,Mi(a),Ee(a)),d=J(n,J(r,h)),p=mt(s.shape,o);return p.length>0&&(d=Ae(d,p)),V(d,s.shape)};return{a:l,b:u}}};var oD={kernelName:ru,inputsToSave:["x","alpha"],gradFunc:function(n,t){var e=t[0],i=t[1],r=ci(e,0);return{x:function(){return pn(r,n,J(n,i))},alpha:function(){var a=pn(r,Ee(n),J(n,e)),s=mt(i.shape,n.shape);return s.length>0&&(a=Ae(a,s)),V(a,i.shape)}}}};var lD={kernelName:au,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ie(n,gt(Ye(e)))}}}};var uD={kernelName:cu,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0],i=J(_i(e,6),Br(e));return{x:function(){return J(n,ue(i,"float32"))}}}};var cD={kernelName:su,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(n,ue(Br(e),"float32"))}}}};var hD={kernelName:ou,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return V(n,e.shape)}}}};var dD={kernelName:uu,inputsToSave:["images"],gradFunc:function(n,t,e){var i=t[0],r=function(o){var l=e.alignCorners;return o.resizeBilinearBackprop(n,i,l)},a={images:i},s=function(){return z.runKernelFunc(r,a,null,Lf,e)};return{images:s}}};var pD={kernelName:lu,inputsToSave:["images"],gradFunc:function(n,t,e){var i=t[0],r=function(o){var l=e.alignCorners;return o.resizeNearestNeighborBackprop(n,i,l)},a={images:i},s=function(){return z.runKernelFunc(r,a,null,Sf,e)};return{images:s}}};var fD={kernelName:hu,gradFunc:function(n,t,e){var i=e.dims,r=Qe(i,n.shape);return{x:function(){return jn(n,r)}}}};var mD={kernelName:du,gradFunc:function(n){return{x:function(){return Ee(n)}}}};var gD={kernelName:pu,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return gt(Ie(n,J(Kn(e,1.5),2)))}}}};var vD={kernelName:fu,inputsToSave:["condition"],gradFunc:function(n,t){var e=t[0];return{condition:function(){return ue(Ee(e),"float32")},t:function(){return J(n,ue(e,n.dtype))},e:function(){return J(n,ue(zs(e),n.dtype))}}}};var yD={kernelName:mu,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){var i=ci(e,we(0)),r=we(lv),a=we(uv),s=J(n,a),o=J(J(n,r),fn(ue(e,"float32")));return pn(i,s,o)}}}};var bD={kernelName:wu,outputsToSave:[!0],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(n,J(e,ge(we(1),e)))}}}};var wD={kernelName:bu,gradFunc:function(n){return{x:function(){return Ee(n)}}}};var SD={kernelName:vu,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(Ds(ue(e,"float32")),n)}}}};var LD={kernelName:yu,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(Ac(ue(e,"float32")),n)}}}};var ID={kernelName:gu,inputsToSave:["x"],gradFunc:function(n,t,e){for(var i=t[0],r=e,a=r.begin,s=r.size,o=i.shape,l=fc(i,a,s),u=l[0],c=l[1],h=[],d=0;d0&&(o=Ae(o,l)),V(o,e.shape)},s=function(){var o=n,l=mt(i.shape,r);return l.length>0&&(o=Ae(o,l)),V(gt(o),i.shape)};return{a,b:s}}};var ED={kernelName:Iu,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=i.shape.slice(),a=e.axis,s=Qe(a,i.shape);s.forEach(function(u){r[u]=1});var o=V(n,r),l=J(o,kr(i.shape,"float32"));return{x:function(){return l}}}};var DD={kernelName:Ru,inputsToSave:["x"],gradFunc:function(n,t){var e=t[0];return{x:function(){return Ie(n,Ye(Ds(e)))}}}};var kD={kernelName:Ou,outputsToSave:[!0],gradFunc:function(n,t){var e=t[0];return{x:function(){return J(ge(we(1),Ye(e)),n)}}}};var FD={kernelName:Eu,inputsToSave:["x"],gradFunc:function(n,t,e){var i=t[0],r=e.reps,a=function(){var s=Ee(i);if(i.rank===1)for(var o=0;o{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});var y=$i();var nh=function(n,t){return nh=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,i){e.__proto__=i}||function(e,i){for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])},nh(n,t)};function Q(n,t){nh(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}var Gt=function(){return Gt=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]t?1:0}function eo(n,t){return-1*qD(n,t)}function pi(n){if(n==null)return n;for(var t=[],e=0,i=n;e=0),Wn(i>=e),Array.isArray(n)&&n.length>=e&&n.length<=i&&n.every(function(r){return typeof r===t})}function At(n,t){Array.isArray(n)?(y.util.assert(n.length>0,function(){return t+" is unexpectedly an empty array."}),n.forEach(function(e,i){return At(e,"element "+(i+1)+" of "+t)})):y.util.assert(Number.isInteger(n)&&n>0,function(){return"Expected "+t+" to be a positive integer, but got "+(bv(n)+".")})}function bv(n){return n===null?"null":Array.isArray(n)?"["+n.map(function(t){return bv(t)}).join(",")+"]":typeof n=="string"?'"'+n+'"':""+n}function YD(n,t){var e=y.util.now(),i,r=function(){for(var a=[],s=0;s0){var e=n+"_"+t;return _r.set(e,1),e}else return n}var ik=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function Rv(n){return!!n.match(ik)}function rk(n){return n===parseInt(n.toString(),10)}function fi(n,t,e){t==null&&(t=0),e==null&&(e=n.length);for(var i=1,r=t;r= 2"+(" but got x shape = "+n.shape+" and y shape = "+t.shape));if(t.rank>=3){var r=n.shape.slice(-1)[0],a=t.shape.slice(-2)[0];if(r!==a)throw new Te("If rank y >= 3, then the second last dim"+(" of y must equal the last dim of x but got x shape = "+n.shape+" and ")+(" y shape = "+t.shape))}if(n.rank===2&&t.rank===2){var s=!1,o=!1;return y.fused.matMul({a:n,b:t,transposeA:s,transposeB:o,bias:i?hh(n.rank,i,gn()):null,activation:e})}else{var l=n.shape.slice(),u=l.pop();n=n.reshape([-1,u]);var c=t.shape.slice(),h=c.pop(),a=c.pop(),d=c.concat([h]),p=Array.from({length:t.rank},function(b,w){return w===0?t.rank-2:w<=t.rank-2?w-1:w});t=t.transpose(p).reshape([a,-1]);var f=l.concat(d),s=!1,o=!1;return y.fused.matMul({a:n,b:t,transposeA:s,transposeB:o,bias:i?hh(n.rank,i,gn()):null,activation:e}).reshape(f)}}function Fv(n,t,e){return y.tidy(function(){return Array.isArray(t)?t=y.tensor1d(t,"int32"):t=t.toInt(),y.gather(n,t,e)})}function Ua(n){return y.mul(n,n)}function hh(n,t,e){var i=t.shape;if(t.rank!==1&&t.rank!==n)throw new M("Unexpected bias dimensions: "+t.rank+("; expected it to be 1 or "+n));if(n===5){if(e==="channelsFirst")return i.length===1?t.reshape([1,i[0],1,1,1]):t.reshape([1,i[3],i[0],i[1],i[2]]);if(e==="channelsLast")return i.length===1?t.reshape([1,1,1,1,i[0]]):t.reshape([1].concat(i))}else if(n===4){if(e==="channelsFirst")return i.length===1?t.reshape([1,i[0],1,1]):t.reshape([1,i[2],i[0],i[1]]);if(e==="channelsLast")return i.length===1?t.reshape([1,1,1,i[0]]):t.reshape([1].concat(i))}else if(n===3){if(e==="channelsFirst")return i.length===1?t.reshape([1,i[0],1]):t.reshape([1,i[1],i[0]]);if(e==="channelsLast")return i.length===1?t.reshape([1,1,i[0]]):t.reshape([1].concat(i))}else if(n<3)return t;throw new M("Unsupported input rank by biasAdd: "+t.rank)}function Bn(n,t,e){return y.tidy(function(){return e==null&&(e=gn()),ct(e),n.add(hh(n.rank,t,e))})}function lk(n,t){if(t===void 0&&(t=1),t!==1)throw new Te("Support for alpha values other than 1 ("+t+") is not implemented yet.");return y.elu(n)}function uk(n){return y.tidy(function(){return y.div(n,y.abs(n).add(1))})}function Wv(n,t,e,i){return y.tidy(function(){return y.dropout(n,t,e,i)})}function ck(n){return y.tidy(function(){var t=y.add(.5,y.mul(.2,n));return y.clipByValue(t,0,1)})}function Ba(n,t,e){return e===void 0&&(e=!1),e?n():t()}var hk=["fanIn","fanOut","fanAvg"],dk=["normal","uniform","truncatedNormal"];function pk(n){Pr(hk,"FanMode",n)}function fk(n){Pr(dk,"Distribution",n)}var cn=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.fromConfigUsesCustomObjects=function(){return!1},t.prototype.getConfig=function(){return{}},t}(y.serialization.Serializable),Uv=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.apply=function(e,i){return y.zeros(e,i)},t.className="Zeros",t}(cn);y.serialization.registerClass(Uv);var dh=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.apply=function(e,i){return y.ones(e,i)},t.className="Ones",t}(cn);y.serialization.registerClass(dh);var Bv=function(n){Q(t,n);function t(e){var i=n.call(this)||this;if(typeof e!="object")throw new M("Expected argument of type ConstantConfig but got "+e);if(e.value===void 0)throw new M("config must have value set but got "+e);return i.value=e.value,i}return t.prototype.apply=function(e,i){var r=this;return y.tidy(function(){return y.mul(y.scalar(r.value),y.ones(e,i))})},t.prototype.getConfig=function(){return{value:this.value}},t.className="Constant",t}(cn);y.serialization.registerClass(Bv);var zv=function(n){Q(t,n);function t(e){var i=n.call(this)||this;return i.DEFAULT_MINVAL=-.05,i.DEFAULT_MAXVAL=.05,i.minval=e.minval||i.DEFAULT_MINVAL,i.maxval=e.maxval||i.DEFAULT_MAXVAL,i.seed=e.seed,i}return t.prototype.apply=function(e,i){return y.randomUniform(e,this.minval,this.maxval,i)},t.prototype.getConfig=function(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}},t.className="RandomUniform",t}(cn);y.serialization.registerClass(zv);var Pv=function(n){Q(t,n);function t(e){var i=n.call(this)||this;return i.DEFAULT_MEAN=0,i.DEFAULT_STDDEV=.05,i.mean=e.mean||i.DEFAULT_MEAN,i.stddev=e.stddev||i.DEFAULT_STDDEV,i.seed=e.seed,i}return t.prototype.apply=function(e,i){if(i=i||"float32",i!=="float32"&&i!=="int32")throw new Te("randomNormal does not support dType "+i+".");return no(e,this.mean,this.stddev,i,this.seed)},t.prototype.getConfig=function(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}},t.className="RandomNormal",t}(cn);y.serialization.registerClass(Pv);var _v=function(n){Q(t,n);function t(e){var i=n.call(this)||this;return i.DEFAULT_MEAN=0,i.DEFAULT_STDDEV=.05,i.mean=e.mean||i.DEFAULT_MEAN,i.stddev=e.stddev||i.DEFAULT_STDDEV,i.seed=e.seed,i}return t.prototype.apply=function(e,i){if(i=i||"float32",i!=="float32"&&i!=="int32")throw new Te("truncatedNormal does not support dType "+i+".");return y.truncatedNormal(e,this.mean,this.stddev,i,this.seed)},t.prototype.getConfig=function(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}},t.className="TruncatedNormal",t}(cn);y.serialization.registerClass(_v);var Mv=function(n){Q(t,n);function t(e){var i=n.call(this)||this;return i.gain=e.gain!=null?e.gain:1,i}return t.prototype.apply=function(e,i){var r=this;return y.tidy(function(){if(e.length!==2||e[0]!==e[1])throw new M("Identity matrix initializer can only be used for 2D square matrices.");return y.mul(r.gain,y.eye(e[0]))})},t.prototype.getConfig=function(){return{gain:this.gain}},t.className="Identity",t}(cn);y.serialization.registerClass(Mv);function mk(n,t){t===void 0&&(t="channelsLast");var e,i;if(ct(t),n.length===2)e=n[0],i=n[1];else if([3,4,5].indexOf(n.length)!==-1){if(t==="channelsFirst"){var r=fi(n,2);e=n[1]*r,i=n[0]*r}else if(t==="channelsLast"){var r=fi(n,0,n.length-2);e=n[n.length-2]*r,i=n[n.length-1]*r}}else{var a=fi(n);e=Math.sqrt(a),i=Math.sqrt(a)}return[e,i]}var Yt=function(n){Q(t,n);function t(e){var i=n.call(this)||this;if(e.scale<0)throw new M("scale must be a positive float. Got: "+e.scale);return i.scale=e.scale==null?1:e.scale,i.mode=e.mode==null?"fanIn":e.mode,pk(i.mode),i.distribution=e.distribution==null?"normal":e.distribution,fk(i.distribution),i.seed=e.seed,i}return t.prototype.apply=function(e,i){var r=mk(e),a=r[0],s=r[1],o=this.scale;if(this.mode==="fanIn"?o/=Math.max(1,a):this.mode==="fanOut"?o/=Math.max(1,s):o/=Math.max(1,(a+s)/2),this.distribution==="normal"){var l=Math.sqrt(o);if(i=i||"float32",i!=="float32"&&i!=="int32")throw new Te(this.getClassName()+" does not support dType "+i+".");return y.truncatedNormal(e,0,l,i,this.seed)}else{var u=Math.sqrt(3*o);return y.randomUniform(e,-u,u,i)}},t.prototype.getConfig=function(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}},t.className="VarianceScaling",t}(cn);y.serialization.registerClass(Yt);var ph=function(n){Q(t,n);function t(e){return n.call(this,{scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="GlorotUniform",t}(Yt);y.serialization.registerClass(ph);var fh=function(n){Q(t,n);function t(e){return n.call(this,{scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="GlorotNormal",t}(Yt);y.serialization.registerClass(fh);var mh=function(n){Q(t,n);function t(e){return n.call(this,{scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="HeNormal",t}(Yt);y.serialization.registerClass(mh);var gh=function(n){Q(t,n);function t(e){return n.call(this,{scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="HeUniform",t}(Yt);y.serialization.registerClass(gh);var vh=function(n){Q(t,n);function t(e){return n.call(this,{scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="LeCunNormal",t}(Yt);y.serialization.registerClass(vh);var yh=function(n){Q(t,n);function t(e){return n.call(this,{scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})||this}return t.prototype.getClassName=function(){return Yt.className},t.className="LeCunNormal",t}(Yt);y.serialization.registerClass(yh);var Hv=function(n){Q(t,n);function t(e){var i=n.call(this)||this;if(i.DEFAULT_GAIN=1,i.gain=e.gain==null?i.DEFAULT_GAIN:e.gain,i.seed=e.seed,i.seed!=null)throw new Te("Random seed is not implemented for Orthogonal Initializer yet.");return i}return t.prototype.apply=function(e,i){var r=this;return y.tidy(function(){if(e.length<2)throw new Te("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn("Orthogonal initializer is being called on a matrix with more "+("than 2000 ("+e[0]*e[1]+") elements: ")+"Slowness may result.");var a=e[0]>e[1]?[e[1],e[0]]:e,s=no(a,0,1,"float32"),o=y.linalg.gramSchmidt(s);return e[0]>e[1]&&(o=o.transpose()),y.mul(r.gain,o)})},t.prototype.getConfig=function(){return{gain:this.gain,seed:this.seed}},t.className="Orthogonal",t}(cn);y.serialization.registerClass(Hv);var Vv={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function qv(n,t){return t===void 0&&(t={}),Ea(n,y.serialization.SerializationMap.getMap().classNameMap,t,"initializer")}function st(n){return rh(n)}function tt(n){if(typeof n=="string"){var t=n in Vv?Vv[n]:n;if(t==="GlorotNormal")return new fh;if(t==="GlorotUniform")return new ph;if(t==="HeNormal")return new mh;if(t==="HeUniform")return new gh;if(t==="LeCunNormal")return new vh;if(t==="LeCunUniform")return new yh;var e={};return e.className=t,e.config={},qv(e)}else return n instanceof cn?n:qv(n)}function gk(){return new Uv}function vk(){return new dh}function yk(n){return new Bv(n)}function bk(n){return new zv(n)}function wk(n){return new Pv(n)}function Sk(n){return new _v(n)}function Lk(n){return new Mv(n)}function Ik(n){return new Yt(n)}function Ak(n){return new ph(n)}function Tk(n){return new fh(n)}function Nk(n){return new mh(n)}function xk(n){return new gh(n)}function Ck(n){return new vh(n)}function Rk(n){return new yh(n)}function Ok(n){return new Hv(n)}var Ek={__proto__:null,zeros:gk,ones:vk,constant:yk,randomUniform:bk,randomNormal:wk,truncatedNormal:Sk,identity:Lk,varianceScaling:Ik,glorotUniform:Ak,glorotNormal:Tk,heNormal:Nk,heUniform:xk,leCunNormal:Ck,leCunUniform:Rk,orthogonal:Ok};var Dk=0;function Gv(){return Dk++}var io={};function ro(n){return n===void 0&&(n=""),n in io||(io[n]=0),io[n]+=1,n+io[n].toString()}function bh(n){return Array.isArray(n)&&Array.isArray(n[0])}function ao(n){return n.length===0?[]:Array.isArray(n[0])?n:[n]}function xe(n){var t;if(Array.isArray(n)){if(n.length!==1)throw new M("Expected Tensor length to be 1; got "+n.length);t=n[0]}else t=n;return t}function Ke(n){if(Array.isArray(n)&&Array.isArray(n[0])){if(n.length===1)return n=n,n[0];throw new M("Expected exactly 1 Shape; got "+n.length)}else return n}function so(n){for(var t=0,e=0,i=n;e1)throw new di("Layer "+this.name+' has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use `getInputAt(nodeIndex)` instead.');if(this.inboundNodes.length===0)throw new di("Layer "+this.name+" is not connected, no input to return.");return Mt(this.getNodeAtIndex(0,"input").inputTensors)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"output",{get:function(){if(this.inboundNodes.length===0)throw new di("Layer "+this.name+" has no inbound nodes.");if(this.inboundNodes.length>1)throw new di("Layer "+this.name+' has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use `getOutputAt(nodeIndex)` instead.');return Mt(this.getNodeAtIndex(0,"output").outputTensors)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"losses",{get:function(){return this._losses},enumerable:!0,configurable:!0}),t.prototype.calculateLosses=function(){return this.losses.map(function(e){return e()})},Object.defineProperty(t.prototype,"updates",{get:function(){return this._updates},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"built",{get:function(){return this._built},set:function(e){this._built=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trainable",{get:function(){return this.trainable_},set:function(e){this._trainableWeights.forEach(function(i){return i.trainable=e}),this.trainable_=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trainableWeights",{get:function(){return this.trainable_?this._trainableWeights.filter(function(e){return e.trainable}):[]},set:function(e){this._trainableWeights=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nonTrainableWeights",{get:function(){return this.trainable?this._trainableWeights.filter(function(e){return!e.trainable}).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)},set:function(e){this._nonTrainableWeights=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"weights",{get:function(){return this.trainableWeights.concat(this.nonTrainableWeights)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stateful",{get:function(){return this._stateful},enumerable:!0,configurable:!0}),t.prototype.resetStates=function(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")},t.prototype.assertInputCompatibility=function(e){if(e=Je(e),this.inputSpec==null||this.inputSpec.length===0)return;var i=Je(this.inputSpec);if(e.length!==i.length)throw new M("Layer "+this.name+" expects "+i.length+" inputs, "+("but it received "+e.length+" input tensors. ")+("Input received: "+e));for(var r=0;r=0?l[c]:l[l.length+c];if(h!=null&&[h,null].indexOf(d)===-1)throw new M("Input "+r+" is incompatible with layer "+(this.name+": expected axis "+c+" of input shape to ")+("have value "+h+" but got shape "+l+"."))}}if(s.shape!=null)for(var p=0;p0&&Array.isArray(R[0])?v=R.map(function(W,F){return new yn(D,W,r,Je(e),i,r.name,F)}):v=new yn(D,R,r,Je(e),i,r.name),r.addInboundNode(e,v,null,null,C,R,i),r._refCount++,r.activityRegularizer!=null)throw new Te("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return v}})},t.prototype.warnOnIncompatibleInputShape=function(e){if(this.batchInputShape==null)return;if(e.length!==this.batchInputShape.length)console.warn("The rank of the input tensor provided (shape: "+(JSON.stringify(e)+") does not match that of the ")+("batchInputShape ("+JSON.stringify(this.batchInputShape)+") ")+("of the layer "+this.name));else{var i=!1;this.batchInputShape.forEach(function(r,a){r!=null&&e[a]!=null&&e[a]!==r&&(i=!0)}),i&&console.warn("The shape of the input tensor "+("("+JSON.stringify(e)+") does not ")+("match the expectation of layer "+this.name+": ")+(""+JSON.stringify(this.batchInputShape)))}},Object.defineProperty(t.prototype,"outputShape",{get:function(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new di("The layer "+this.name+" has never been called and thus has no defined output shape.");for(var e=[],i=0,r=this.inboundNodes;i0)&&(t=n.sourceLayer,e=n.nodeIndex),t.inboundNodes.length===0)return[n];var i=t.inboundNodes[e];if(i.inboundLayers.length===0)return i.inputTensors;for(var r=[],a=0;a0?[4,Promise.all(t)]:[3,2];case 1:for(o=u.sent(),l=0;l=0&&Number.isInteger(t),function(){return"Verbosity level is expected to be an integer >= 0, "+("but got "+t)}),n.checkForDuplicate(e),n.constructors[t]==null&&(n.constructors[t]=[]),n.constructors[t].push(e)},n.checkForDuplicate=function(t){for(var e in n.constructors){var i=n.constructors[+e];i.forEach(function(r){if(r===t)throw new M("Duplicate callback constructor.")})}},n.clear=function(){n.constructors={}},n.createCallbacks=function(t){var e=[];for(var i in n.constructors){var r=+i;t>=r&&e.push.apply(e,n.constructors[r])}return e.map(function(a){return new a})},n.constructors={},n}();function iy(n,t,e,i,r,a,s,o,l){var u=new Qv,c=[new Pk].concat(ny.createCallbacks(t));n!=null&&c.push.apply(c,n),c.push(u);var h=new Zv(c);return h.setParams({epochs:e,initialEpoch:i,samples:r,steps:a,batchSize:s,verbose:t,doValidation:o,metrics:l}),{callbackList:h,history:u}}function bn(n,t,e){return t===void 0&&(t={}),e===void 0&&(e=!1),Ea(n,y.serialization.SerializationMap.getMap().classNameMap,t,"layer",e)}function lo(n,t){return y.tidy(function(){n.dtype!=="float32"&&(n=n.asType("float32"));var e=y.sum(Ua(n),t,!0),i=y.fill(e.shape,vt()),r=y.sqrt(y.maximum(e,i));return y.div(n,r)})}function er(n,t){return y.tidy(function(){return y.mean(Ua(y.sub(t,n)),-1)})}function uo(n,t){return y.tidy(function(){return y.mean(y.abs(y.sub(t,n)),-1)})}function Vr(n,t){return y.tidy(function(){var e=y.sub(n,t),i=y.clipByValue(y.abs(n),vt(),Number.MAX_VALUE),r=y.abs(y.div(e,i));return y.mul(100,y.mean(r,-1))})}function _k(n,t){return y.tidy(function(){var e=y.clipByValue(t,vt(),Number.MAX_VALUE),i=y.log(y.add(1,e)),r=y.clipByValue(n,vt(),Number.MAX_VALUE),a=y.log(y.add(1,r));return y.mean(Ua(y.sub(i,a)),-1)})}function Mk(n,t){return y.tidy(function(){var e=y.maximum(0,y.sub(1,y.mul(n,t)));return y.mean(Ua(e),-1)})}function Hk(n,t){return y.tidy(function(){var e=y.maximum(0,y.sub(1,y.mul(n,t)));return y.mean(e,-1)})}function Vk(n,t){return y.tidy(function(){var e=y.sum(y.mul(n,t),-1),i=y.max(y.mul(y.sub(1,n),t),-1);return y.maximum(0,y.add(1,y.sub(i,e)))})}function qk(n,t){return y.tidy(function(){var e=Math.log(2),i=y.sub(t,n),r=y.sub(y.add(i,y.softplus(y.mul(-2,i))),e);return y.mean(r,-1)})}function Pa(n,t,e){return e===void 0&&(e=!1),y.tidy(function(){if(e)t=y.softmax(t);else{var i=y.sum(t,t.shape.length-1,!0);t=y.div(t,i)}return t=y.clipByValue(t,vt(),1-vt()),y.neg(y.sum(y.mul(n.toFloat(),y.log(t)),t.shape.length-1))})}function co(n,t,e){return e===void 0&&(e=!1),y.tidy(function(){var i=y.floor(sk(n)).toInt();t=y.clipByValue(t,vt(),1-vt());var r=t.shape,a=y.oneHot(i,r[r.length-1]).reshape(r);return Pa(a,t,e)})}function Gk(n,t){if(!y.util.arraysEqual(n.shape,t.shape))throw new M("logits and labels must have the same shape, but got shapes "+(JSON.stringify(n.shape)+" and "+JSON.stringify(t.shape)));return y.tidy(function(){var e=t.relu(),i=t.abs().neg();return e.sub(t.mul(n)).add(i.exp().log1p())})}function ho(n,t){return y.tidy(function(){var e;return e=y.clipByValue(t,vt(),1-vt()),e=y.log(y.div(e,y.sub(1,e))),y.mean(Gk(n,e),-1)})}function Yk(n,t){return y.tidy(function(){var e=y.clipByValue(n,vt(),1),i=y.clipByValue(t,vt(),1);return y.sum(y.mul(n,y.log(y.div(e,i))),-1)})}function Kk(n,t){return y.tidy(function(){var e=y.log(y.add(vt(),t));return y.mean(y.sub(t,y.mul(n,e)),-1)})}function Lh(n,t){return y.tidy(function(){var e=lo(n,-1),i=lo(t,-1),r=y.mul(e,i);return y.neg(y.sum(r,-1))})}var po={meanSquaredError:er,meanAbsoluteError:uo,meanAbsolutePercentageError:Vr,meanSquaredLogarithmicError:_k,squaredHinge:Mk,hinge:Hk,categoricalHinge:Vk,logcosh:qk,categoricalCrossentropy:Pa,sparseCategoricalCrossentropy:co,binaryCrossentropy:ho,kullbackLeiblerDivergence:Yk,poisson:Kk,cosineProximity:Lh};function Ih(n){if(typeof n=="string"){if(n in po)return po[n];var t="Unknown loss "+n;throw n.toLowerCase().includes("softmaxcrossentropy")&&(t="Unknown loss "+n+'. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy'),new M(t)}else return n}function Ah(n,t){return y.tidy(function(){var e=y.mul(.5,y.onesLike(t)),i=Fa(y.greater(t,e),n.dtype);return y.mean(y.equal(n,i),-1)})}function Th(n,t){return y.tidy(function(){return Fa(y.equal(y.argMax(n,-1),y.argMax(t,-1)),"float32")})}function ry(n,t){return y.tidy(function(){return y.logicalAnd(n.equal(1),t.equal(1)).sum().cast("float32")})}function jk(n,t){return y.tidy(function(){return y.logicalAnd(n.equal(1),t.equal(0)).sum().cast("float32")})}function $k(n,t){return y.tidy(function(){return y.logicalAnd(n.equal(0),t.equal(1)).sum().cast("float32")})}function ay(n,t){return y.tidy(function(){var e=ry(n,t),i=$k(n,t),r=e.add(i);return y.where(y.greater(r,0),e.div(r),0).cast("float32")})}function Xk(n,t){return y.tidy(function(){var e=ry(n,t),i=jk(n,t),r=e.add(i);return y.where(y.greater(r,0),e.div(r),0).cast("float32")})}function sy(n,t){return ho(n,t)}function oy(n,t){return n.rank===t.rank&&(n=n.squeeze([n.rank-1])),t=t.argMax(-1),t.dtype!==n.dtype&&(t=t.asType(n.dtype)),y.equal(n,t).asType("float32")}var Jk=er,Zk=er,Qk=uo,e3=uo,t3=Vr,n3=Vr,Nh=Pa,i3=Lh,ly=co,fo={binaryAccuracy:Ah,categoricalAccuracy:Th,precision:ay,categoricalCrossentropy:Nh,sparseCategoricalCrossentropy:ly,mse:Jk,MSE:Zk,mae:Qk,MAE:e3,mape:t3,MAPE:n3,cosine:i3};function r3(n){if(typeof n=="string"&&n in fo)return fo[n];if(typeof n!="string"&&n!=null)return n;throw new M("Unknown metric "+n)}function mo(n){if(Wn(n!==null,"Unknown LossOrMetricFn "+n),typeof n=="string")return n;for(var t=void 0,e=0,i=Object.keys(po);euy&&console.warn('User-defined metadata of model "'+t+'" is too large in '+("size (length="+i.length+" when serialized). It is not ")+"recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= "+(uy+"."))}}function xh(n){if(n===null)return!0;if(typeof n=="object")if(Object.getPrototypeOf(n)===Object.prototype){for(var t=Object.keys(n),e=0,i=t;e1||o.length===1&&o[0].inboundLayers.length>1){t=!1;break}i.push.apply(i,o)}if(t)for(var l=0,u=n.layers;l0&&(i=i.slice(0,i.length-1)+" "),i+=n[r],i=i.slice(0,t[r]),i+=" ".repeat(t[r]-i.length);e(i)}function l3(n,t,e){var i;try{i=JSON.stringify(n.outputShape)}catch(o){i="multiple"}var r=n.name,a=n.getClassName(),s=[r+" ("+a+")",i,n.countParams().toString()];go(s,t,e)}function u3(n,t,e,i){var r;try{r=JSON.stringify(n.outputShape)}catch(v){r="multiple"}for(var a=[],s=0,o=n.inboundNodes;s0&&e.indexOf(l)===-1)continue;for(var u=0;ui.maxNumTensors&&(i.maxNumTensors=w),w0,function(){return"Expected at least one fetch, got none"});var e=[],i={};if(n.length===1){var r=py(n[0],t);e=r.sorted,i=r.recipientMap}else for(var a=new Set,s=0,o=n;s0;){var c=l[l.length-1];if(e.has(c.name)){l.pop();continue}var h=u[u.length-1]===l.length-1;if(c.inputs.length===0||h)l.pop(),i.push(c),e.add(c.name),h&&u.pop();else{u.push(l.length-1);for(var d=0,p=c.inputs;d1 nodes"),Wn(c===0,"input layer has >1 tensors"),i.inputLayers.push(l),i.inputLayersNodeIndices.push(u),i.inputLayersTensorIndices.push(c)}i.inputNames=[],i.outputNames=[],i.feedInputShapes=[],i.feedInputNames=[],i.feedOutputNames=[];for(var p=0;p=0;)pt.splice(pt.indexOf(Bt),1);L.push(Bt)},C=[],R=[],D=0,k=i.outputs;Don?1:0});for(var he=0,ye=le;he0)throw new M("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];for(var e=[],i=0,r=this.layers;i0)throw new M(v.length+" of "+a+" weights are not set: "+(""+v))}Sh(d)},t.prototype.updatedConfig=function(){var e=this.getConfig(),i={};return i.className=this.getClassName(),i.config=e,i.kerasVersion="tfjs-layers "+Rh,i.backend="TensorFlow.js",i},t.prototype.toJSON=function(e,i){i===void 0&&(i=!0);var r=Ch(this.updatedConfig());return i?JSON.stringify(r):r},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){e=Je(e);for(var a=new qr,s=0;s1)for(var c=0,h=u;c0){for(var m=[],g=0;g0&&G.apply(Mt(X),ee)}function c(G){var Z=G.name,X=bn(G,i.customObjects!=null?i.customObjects:{});X.setFastWeightInitDuringBuild(a),s[Z]=X;var ee=G.inboundNodes;ee.forEach(function(ne){if(!(ne instanceof Array))throw new M("Corrupted configuration, expected array for nodeData: "+ne);l(X,ne)})}for(var h=i.name,d=i.layers,p=0,f=d;p0&&typeof n[Object.keys(n)[0]]=="object"){var r=[];return t.forEach(function(a){a in n?r.push(n[a]):r.push(null)}),r}else throw new Error("The model has multiple ("+i+") outputs, "+("so "+e+" must be either an array with ")+(i+" elements or an object with "+t+" keys. ")+("Provided "+e+" not understood: "+JSON.stringify(n)))}function fy(n,t){return g3(n,t,"classWeight")}function my(n,t,e,i){return Le(this,void 0,void 0,function(){var r,a,s,o,l;return ve(this,function(u){switch(u.label){case 0:if(t!=null||i!=null)throw new Error("Support sampleWeight is not implemented yet");return e!=null?(r=y.tidy(function(){if(n.shape.length===1)return n.clone();if(n.shape.length===2)if(n.shape[1]>1){var c=1;return n.argMax(c)}else{if(n.shape[1]===1)return n.reshape([n.shape[0]]);throw new Error("Encountered unexpected last-dimension size ("+n.shape[1]+") during handling of class weights. The size is expected to be >= 1.")}else throw new Error("Unexpected rank of target (y) tensor ("+n.rank+") during handling of class weights. The rank is expected to be 1 or 2.")}),o=(s=Array).from,[4,r.data()]):[3,2];case 1:return a=o.apply(s,[u.sent()]),y.dispose(r),l=[],a.forEach(function(c){if(e[c]==null)throw new Error("classWeight must contain all classes in the training data. "+("The class "+c+" exists in the data but not in ")+"classWeight");l.push(e[c])}),[2,y.tensor1d(l,"float32")];case 2:return[2,null]}})})}function v3(n,t){return y.mul(n,t)}var y3=32;function vy(n,t){var e,i,r=t;e=r.xs,i=r.ys,y.util.assert(e!=null&&i!=null,function(){return"A Dataset iterator for fitDataset() is expected to generate objects of the form `{xs: xVal, ys: yVal}`, where the two values may be `tf.Tensor`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates "+(""+t)});var a=gy("input",n.inputNames,e),s=gy("output",n.outputNames,i),o=a[0].shape[0];y.util.assert(a.length===n.inputs.length,function(){return"LayersModel has "+n.inputs.length+" inputs, but the dataset "+("provides "+a.length+" inputs. (Expected input keys: ")+(JSON.stringify(n.inputNames)+")")}),y.util.assert(s.length===n.outputs.length,function(){return"LayersModel has "+n.outputs.length+" outputs, but the dataset "+("provides "+s.length+" outputs. (Expected output keys: ")+(JSON.stringify(n.outputNames)+")")});for(var l=function(d){y.util.assert(a[d].shape[0]===o,function(){return"Batch size mismatch: input "+(n.inputNames[d]+" has "+a[d].shape[0]+"; ")+("expected "+o+" based on input "+n.inputNames[0]+".")})},u=0;u0&&Number.isInteger(e.epochs),function(){return"For fitDataset(), config.epochs is expected to be a positive "+("integer, but got "+e.epochs)}),y.util.assert(!i||e.batchesPerEpoch>0&&Number.isInteger(e.batchesPerEpoch),function(){return"For fitDataset(), config.batchesPerEpoch is expected to be a "+("positive integer if specified, but got "+e.batchesPerEpoch)}),y.util.assert(e.validationSplit==null,function(){return"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."}),n.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");n.isTraining=!0,X.label=1;case 1:return X.trys.push([1,,26,27]),r=e.validationData!=null,a=void 0,s=void 0,r&&(yy(e.validationData)?y.util.assert(e.validationBatches==null||e.validationBatches>0&&Number.isInteger(e.validationBatches),function(){return"For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, "+("but got "+e.validationBatches)}):(o=b3(e.validationData),a=o.xs,s=o.ys)),l=n.makeTrainFunction(),u=n.getDedupedMetricsNames(),c=void 0,r?c=u.slice().concat(u.map(function(ee){return"val_"+ee})):c=u.slice(),h=ty(e.callbacks,e.yieldEvery),d=e.verbose==null?1:e.verbose,p=iy(h,d,e.epochs,null,null,w3(t,e),null,r,c),f=p.callbackList,m=p.history,f.setModel(n),n.history=m,[4,f.onTrainBegin()];case 2:return X.sent(),n.stopTraining_=!1,g=e.initialEpoch==null?0:e.initialEpoch,[4,t.iterator()];case 3:v=X.sent(),X.label=4;case 4:return g=e.batchesPerEpoch:L.done)?r?(G=void 0,yy(e.validationData)?(Z=Je,[4,n.evaluateDataset(e.validationData,{batches:e.validationBatches})]):[3,17]):[3,19]:[3,20];case 16:return G=Z.apply(void 0,[X.sent()]),[3,18];case 17:G=Je(n.evaluate(a,s,{batchSize:e.validationBatchSize==null?y3:e.validationBatchSize,verbose:0})),X.label=18;case 18:for(F=0;F0)throw new Te("Verbose mode is not implemented yet.");return y.util.assert(!i||e.batches>0&&Number.isInteger(e.batches),function(){return"Test loop expects `batches` to be a positive integer, but "+("received "+JSON.stringify(e.batches))}),L3(t)?(o=t,[3,3]):[3,1];case 1:return[4,t.iterator()];case 2:o=f.sent(),f.label=3;case 3:s=o,l=0,u=0,c=function(){var m;return ve(this,function(g){switch(g.label){case 0:return[4,s.next()];case 1:return m=g.sent(),a=y.tidy(function(){if(m.value){var v=vy(n,m.value),b=v.xs,w=v.ys,S=b.concat(w),L=y.tidy(function(){return r(S)});if(y.dispose(S),u===0)for(var x=0;x0&&y.dispose(W)},x=0;x0&&Number.isInteger(n),function(){return"batchSize is required to be a positive integer, but got "+n})}function Ha(n,t,e){return n==null?[null]:Array.isArray(n)?n.map(function(i){return Qi(i,t,e-t)}):Qi(n,t,e-t)}function Dh(n,t){return y.tidy(function(){return n==null?null:Array.isArray(n)?n.map(function(e){return Dh(e,t)}):Fv(n,t.dtype==="int32"?t:t.toInt())})}function kh(n,t){for(var e=[],i=0,r=null;i=n&&(r=n),e.push([i,r]),i=r;return e}function A3(n,t,e,i,r,a,s,o,l,u,c,h,d,p,f){return Le(this,void 0,void 0,function(){var m,g,v,b,w,S,L,x,C;return ve(this,function(R){switch(R.label){case 0:if(r==null&&(r=32),a==null&&(a=1),c==null&&(c=!0),d==null&&(d=0),m=!1,l!=null&&u!=null&&(m=!0),f!=null&&(m=!0,p==null))throw new M("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");return g=n.checkNumSamples(e,r,p,"steps_per_epoch"),g!=null&&(v=vn(0,g)),s==null&&(s=1),b=iy(o,s,a,d,g,p,r,m,h),w=b.callbackList,S=b.history,w.setModel(n),n.history=S,[4,w.onTrainBegin()];case 1:R.sent(),n.stopTraining_=!1,L=function(D){var k,W,F,P,H,_;return ve(this,function(K){switch(K.label){case 0:return[4,w.onEpochBegin(D)];case 1:if(K.sent(),k={},!(p!=null))return[3,2];throw new Te("stepsPerEpoch mode is not implemented yet.");case 2:if(c==="batch")throw new Te("batch shuffling is not implemneted yet");c&&y.util.shuffle(v),W=y.tensor1d(v),F=kh(g,r),P=function(j){var q;return ve(this,function(G){switch(G.label){case 0:return q={},[4,w.onBatchBegin(j,q)];case 1:return G.sent(),y.tidy(function(){var Z=F[j][0],X=F[j][1],ee=Qi(W,Z,X-Z);q.batch=j,q.size=X-Z;for(var ne=Dh(e,ee),ie=t(ne),te=0;te0))return[3,4];if(f=!0,i.validationData.length===2)s=i.validationData[0],o=i.validationData[1];else throw i.validationData.length===3?new Te("validationData including sample weights is not supported yet."):new M("When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; "+(i.validationData+" is invalid."));return g=!0,[4,n.standardizeUserData(s,o,null,null,g,h)];case 3:return v=W.sent(),l=v[0],u=v[1],m=l.concat(u),[3,5];case 4:i.validationSplit!=null&&i.validationSplit>0&&i.validationSplit<1?(f=!0,b=Math.floor(r[0].shape[0]*(1-i.validationSplit)),w=r[0].shape[0],l=Ha(r,b,w),r=Ha(r,0,b),u=Ha(a,b,w),a=Ha(a,0,b),m=l.concat(u)):i.validationSteps!=null&&(f=!0),W.label=5;case 5:return S=r.concat(a).concat(c),n.checkTrainableWeightsConsistency(),L=n.makeTrainFunction(),x=n.getDedupedMetricsNames(),C=void 0,R=void 0,f?(n.makeTestFunction(),C=n.testFunction,R=x.slice().concat(x.map(function(F){return"val_"+F}))):(C=null,m=[],R=x.slice()),D=ty(i.callbacks,i.yieldEvery),[4,A3(n,L,S,x,h,i.epochs,i.verbose,D,C,m,i.shuffle,R,i.initialEpoch,null,null)];case 6:return k=W.sent(),[2,k];case 7:return n.isTraining=!1,tr(r,t),tr(a,e),tr(l,s),tr(u,o),c!=null&&y.dispose(c),[7];case 8:return[2]}})})}function by(n){var t=[];n instanceof y.Tensor&&(n=[n]);for(var e=0;e0)a=!0;else if(wy(n)){for(var s in n)if(n.hasOwnProperty(s)){a=!0;break}}else a=!0;if(a)throw new M("Error when checking model "+r+" expected no data, "+("but got "+n))}return[]}if(n==null)return t.map(function(g){return null});var o;if(wy(n)){n=n,o=[];for(var l=0,u=t;l1)throw new M("The model "+r+" expects "+t.length+" Tensor(s), "+("but only received one Tensor. Found: Tensor with shape "+n.shape));o=[n]}if(o=by(o),e!=null)for(var h=0;h=0&&f!==m)throw new M("Error when checking "+r+": expected "+t[h]+" "+("to have shape ["+e[h]+"], but got array with shape ")+("["+d.shape+"]."))}}return o}function x3(n,t,e){var i=pi(n.map(function(a){return a.shape[0]}));i.sort();var r=pi(t.map(function(a){return a.shape[0]}));if(r.sort(),i.length>1)throw new M("All input Tensors (x) should have the same number of samples. Got array shapes: "+(""+JSON.stringify(n.map(function(a){return a.shape}))));if(r.length>1)throw new M("All target Tensors (y) should have the same number of samples. Got array shapes: "+(""+JSON.stringify(t.map(function(a){return a.shape}))));if(i.length>0&&r.length>0&&!y.util.arraysEqual(i,r))throw new M("Input Tensors should have the same number of samples as target "+("Tensors. Found "+i[0]+" input sample(s) and "+r[0]+" target ")+"sample(s).")}function C3(n,t,e){for(var i=[er,ho,Pa],r=0;r1)throw new M("The model expects "+t.length+" "+r+" Tensors, but only received one Tensor. Found: array with shape "+(JSON.stringify(n.shape)+"."));a=[n]}if(e!=null)for(var s=0;s1&&(i.metricsTensors.push([b,v]),i.metricsNames.push(i.outputNames[v]+"_loss"))}});var m=R3(e.metrics,this.outputNames),g=function(v,b,w){i.outputNames.length>1&&(b=i.outputNames[v]+"_"+b),i.metricsNames.push(b),i.metricsTensors.push([w,v])};Zi("metric",function(){for(var v=function(w){if(f.indexOf(w)!==-1)return"continue";var S=m[w],L=function(x){for(var C="",R,D,k,W=function(_){if(typeof _=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(_)!==-1){var K=i.internalOutputShapes[w];K[K.length-1]===1||i.lossFunctions[w]===ho?["accuracy","acc"].indexOf(_)!==-1?D=Ah:["crossentropy","ce"].indexOf(_)!==-1&&(D=sy):i.lossFunctions[w]===co?["accuracy","acc"].indexOf(_)!==-1?D=oy:["crossentropy","ce"].indexOf(_)!==-1&&(D=ly):["accuracy","acc"].indexOf(_)!==-1?D=Th:["crossentropy","ce"].indexOf(_)!==-1&&(D=Nh);var j=void 0;["accuracy","acc"].indexOf(_)!==-1?j="acc":["crossentropy","ce"].indexOf(_)!==-1&&(j="ce"),k=D,R=C+j}else{var q=r3(_);k=q,R=C+mo(_)}var G;Zi(R,function(){G=k}),g(w,R,G)},F=0,P=x;F0){var d=[];throw i.forEach(function(p,f){p==null&&d.push(e[f])}),new M("Cannot find SymbolicTensors for output name(s): "+(""+JSON.stringify(d)))}return i},t.prototype.predictLoop=function(e,i,r){var a=this;return i===void 0&&(i=32),r===void 0&&(r=!1),y.tidy(function(){var s=a.checkNumSamples(e);if(r)throw new Te("Verbose predictLoop() is not implemented yet.");for(var o=kh(s,i),l=a.outputs.map(function(h){return[]}),u=function(h){var d=y.tidy(function(){var p=o[h][0],f=o[h][1],m=Ha(e,p,f),g=[];if(Array.isArray(m))for(var v=0;v0&&e[0].shape[0]%a!==0)throw new M("In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size "+(a+". Found: "+e[0].shape[0]+" sample(s)."));return[e,i]},t.prototype.standardizeUserData=function(e,i,r,a,s,o){return s===void 0&&(s=!0),Le(this,void 0,void 0,function(){var l,u,c,h,d,p,f,m;return ve(this,function(g){switch(g.label){case 0:if(l=this.standardizeUserDataXY(e,i,s,o),u=l[0],c=l[1],r!=null)throw new Error("sample weight is not supported yet.");if(h=null,!(a!=null))return[3,4];d=fy(a,this.outputNames),h=[],p=0,g.label=1;case 1:return p0)throw new Te("Verbose mode is not implemented yet.");if(s!=null)throw new Te("steps mode in testLoop() is not implemented yet");for(var c=kh(l,r),h=y.tensor1d(vn(0,l)),d=0;d1){var o=yv(e.slice(0,r),a);s+="_"+o}i.push(s)}return i},t.prototype.makeTrainFunction=function(){var e=this;return function(i){var r=[],a=i.slice(0,e.inputs.length),s=i.slice(e.inputs.length,e.inputs.length+e.outputs.length),o=i.slice(e.inputs.length+e.outputs.length,e.inputs.length+e.outputs.length*2),l=[],u=function(){for(var p=[],f=0;f1&&f1)throw new M("Found more than one ("+r.length+") save handlers for "+("URL '"+e+"'"));e=r[0]}if(e.save==null)throw new M("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return[4,y.io.encodeWeights(this.getNamedWeights(i))];case 1:return a=w.sent(),s=!1,o=null,l=this.toJSON(o,s),u={modelTopology:l,format:O3,generatedBy:"TensorFlow.js tfjs-layers v"+Rh,convertedBy:null},c=i==null?!1:i.includeOptimizer,c&&this.optimizer!=null?(u.trainingConfig=this.getTrainingConfig(),h="optimizer",g=(m=y.io).encodeWeights,[4,this.optimizer.getWeights()]):[3,4];case 2:return[4,g.apply(m,[w.sent(),h])];case 3:d=w.sent(),p=d.data,f=d.specs,(b=a.specs).push.apply(b,f),a.data=y.io.concatenateArrayBuffers([a.data,p]),w.label=4;case 4:return this.userDefinedMetadata!=null&&(v=!0,cy(this.userDefinedMetadata,this.name,v),u.userDefinedMetadata=this.userDefinedMetadata),u.weightData=a.data,u.weightSpecs=a.specs,[2,e.save(u)]}})})},t.prototype.setUserDefinedMetadata=function(e){cy(e,this.name),this.userDefinedMetadata=e},t.prototype.getUserDefinedMetadata=function(){return this.userDefinedMetadata},t.className="Model",t}(m3);y.serialization.registerClass(vi);var E3=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.className="Functional",t}(vi);y.serialization.registerClass(E3);function D3(n,t){return Le(this,void 0,void 0,function(){var e,i,r,a,s,o,l,u;return ve(this,function(c){switch(c.label){case 0:return"modelTopology"in n||(n={modelTopology:n}),n=n,e=n.modelTopology,e.model_config!=null&&(e=e.model_config),i=_a(e),r=bn(i,t),n.weightsManifest!=null?[4,y.io.loadWeights(n.weightsManifest,n.pathPrefix,r.weights.map(function(h){return h.originalName}))]:[3,2];case 1:for(a=c.sent(),s={},o=0,l=r.weights;o1)throw new M("Found more than one ("+e.length+") load handlers for "+("URL '"+n+"'"));n=e[0]}return[2,k3(n,void 0,t)]})})}function k3(n,t,e){return Le(this,void 0,void 0,function(){var i,r,a,s,o,l,u,c,h;return ve(this,function(d){switch(d.label){case 0:if(e==null&&(e={}),n.load==null)throw new M("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");return[4,n.load()];case 1:if(i=d.sent(),r=i.modelTopology,r.model_config!=null&&(r=r.model_config),a=e.strict==null?!0:e.strict,s=i.weightData!=null&&i.weightSpecs!=null&&a,o=bn(_a(r),t,s),l=i.trainingConfig,l!=null&&o.loadTrainingConfig(l),i.userDefinedMetadata!=null&&o.setUserDefinedMetadata(i.userDefinedMetadata),!(i.weightData!=null))return[3,4];if(i.weightSpecs==null)throw new M("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");return u=W3(i.weightData,i.weightSpecs),c=u.modelWeights,h=u.optimizerWeights,o.loadWeights(c,a),o.optimizer!=null&&h.length>0?[4,o.optimizer.setWeights(h)]:[3,3];case 2:d.sent(),d.label=3;case 3:y.dispose(c),y.dispose(h.map(function(p){return p.tensor})),d.label=4;case 4:return[2,o]}})})}function W3(n,t){var e=y.io.decodeWeights(n,t),i={},r=[];return t.forEach(function(a){a.group==="optimizer"?r.push({name:a.name,tensor:e[a.name]}):i[a.name]=e[a.name]}),{modelWeights:i,optimizerWeights:r}}var Wh=function(n){Q(t,n);function t(e){var i=n.call(this,{inputs:[],outputs:[]})||this;if(e=e||{},i.trainable=!0,i.built=!1,i.name=e.name!=null?e.name:ro("sequential_"),e.layers!=null)for(var r=0,a=e.layers;r 0 "+("but got "+JSON.stringify(e.filters)))},t}(Uy),Ph=function(n){Q(t,n);function t(e){var i=n.call(this,2,e)||this;return t.verifyArgs(e),i}return t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this);return delete e.rank,e},t.verifyArgs=function(e){if(typeof e.kernelSize!="number"&&!sh(e.kernelSize,"number",1,2))throw new M("Conv2D expects config.kernelSize to be number or number[] with "+("length 1 or 2, but received "+JSON.stringify(e.kernelSize)+"."))},t.className="Conv2D",t}(bo);y.serialization.registerClass(Ph);var By=function(n){Q(t,n);function t(e){var i=n.call(this,3,e)||this;return t.verifyArgs(e),i}return t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this);return delete e.rank,e},t.verifyArgs=function(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new M("Conv3D expects config.kernelSize to be number or"+(" [number, number, number], but received "+JSON.stringify(e.kernelSize)+"."))},t.className="Conv3D",t}(bo);y.serialization.registerClass(By);var zy=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;if(i.inputSpec=[new Tt({ndim:4})],i.padding!=="same"&&i.padding!=="valid")throw new M("Conv2DTranspose currently supports only padding modes 'same' "+("and 'valid', but received padding mode "+i.padding));return i}return t.prototype.build=function(e){var i;if(e=Ke(e),e.length!==4)throw new M("Input should have rank 4; Received input shape: "+JSON.stringify(e));var r=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[r]==null)throw new M("The channel dimension of the inputs should be defined. Found `None`.");var a=e[r],s=this.kernelSize.concat([this.filters,a]);this.kernel=this.addWeight("kernel",s,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Tt({ndim:4,axes:(i={},i[r]=a,i)})],this.built=!0},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){var a=xe(e);if(a.shape.length!==4)throw new M("Conv2DTranspose.call() expects input tensor to be rank-4, but "+("received a tensor of rank-"+a.shape.length));var s=a.shape,o=s[0],l,u;r.dataFormat==="channelsFirst"?(l=2,u=3):(l=1,u=2);var c=s[l],h=s[u],d=r.kernelSize[0],p=r.kernelSize[1],f=r.strides[0],m=r.strides[1],g=yo(c,f,d,r.padding),v=yo(h,m,p,r.padding),b=[o,g,v,r.filters];r.dataFormat!=="channelsLast"&&(a=y.transpose(a,[0,2,3,1]));var w=y.conv2dTranspose(a,r.kernel.read(),b,r.strides,r.padding);return r.dataFormat!=="channelsLast"&&(w=y.transpose(w,[0,3,1,2])),r.bias!=null&&(w=Bn(w,r.bias.read(),r.dataFormat)),r.activation!=null&&(w=r.activation.apply(w)),w})},t.prototype.computeOutputShape=function(e){e=Ke(e);var i=e.slice(),r,a,s;this.dataFormat==="channelsFirst"?(r=1,a=2,s=3):(r=3,a=1,s=2);var o=this.kernelSize[0],l=this.kernelSize[1],u=this.strides[0],c=this.strides[1];return i[r]=this.filters,i[a]=yo(i[a],u,o,this.padding),i[s]=yo(i[s],c,l,this.padding),i},t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this);return delete e.dilationRate,e},t.className="Conv2DTranspose",t}(Ph);y.serialization.registerClass(zy);var n4=function(n){Q(t,n);function t(e,i){var r=n.call(this,e,i)||this;if(r.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",r.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",r.depthwiseKernel=null,r.pointwiseKernel=null,i.filters==null)throw new M("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(i.kernelInitializer!=null||i.kernelRegularizer!=null||i.kernelConstraint!=null)throw new M("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(i.padding!=null&&i.padding!=="same"&&i.padding!=="valid")throw new M("SeparableConv"+r.rank+"D supports only padding modes: "+("'same' and 'valid', but received "+JSON.stringify(i.padding)));return r.depthMultiplier=i.depthMultiplier==null?1:i.depthMultiplier,r.depthwiseInitializer=tt(i.depthwiseInitializer||r.DEFAULT_DEPTHWISE_INITIALIZER),r.depthwiseRegularizer=nt(i.depthwiseRegularizer),r.depthwiseConstraint=bt(i.depthwiseConstraint),r.pointwiseInitializer=tt(i.depthwiseInitializer||r.DEFAULT_POINTWISE_INITIALIZER),r.pointwiseRegularizer=nt(i.pointwiseRegularizer),r.pointwiseConstraint=bt(i.pointwiseConstraint),r}return t.prototype.build=function(e){var i;if(e=Ke(e),e.length1&&(t=n.slice(1,n.length)),n=n[0]}function r(a){return a==null||Array.isArray(a)?a:[a]}return t=r(t),e=r(e),{inputs:n,initialState:t,constants:e}}function Gy(n,t,e,i,r,a,s,o){return i===void 0&&(i=!1),s===void 0&&(s=!1),o===void 0&&(o=!1),y.tidy(function(){var l=t.shape.length;if(l<3)throw new M("Input should be at least 3D, but is "+l+"D.");var u=[1,0].concat(vn(2,l));if(t=y.transpose(t,u),a!=null)throw new Te("The rnn() functoin of the deeplearn.js backend does not support constants yet.");s&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),r!=null&&(r=r.asType("bool").asType("float32"),r.rank===l-1&&(r=y.expandDims(r,-1)),r=y.transpose(r,u)),i&&(t=y.reverse(t,0),r!=null&&(r=y.reverse(r,0)));var c=[],h,d=e,p=t.shape[0],f=y.unstack(t),m;r!=null&&(m=y.unstack(r));for(var g=function(S){var L=f[S],x=y.tidy(function(){return n(L,d)});if(r==null)h=x[0],d=x[1];else{var C=y.tidy(function(){var R=m[S],D=y.onesLike(R).sub(R),k=x[0].mul(R).add(d[0].mul(D)),W=d.map(function(F,P){return x[1][P].mul(R).add(F.mul(D))});return{output:k,newStates:W}});h=C.output,d=C.newStates}o&&c.push(h)},v=0;v1?lh(r,[1,a]):r}):i.cell.stateSize>1?[lh(r,[1,i.cell.stateSize])]:[r]})},Object.defineProperty(t.prototype,"trainableWeights",{get:function(){return this.trainable?this.cell.trainableWeights:[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nonTrainableWeights",{get:function(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights},enumerable:!0,configurable:!0}),t.prototype.setFastWeightInitDuringBuild=function(e){n.prototype.setFastWeightInitDuringBuild.call(this,e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)},t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this),i={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(i.numConstants=this.numConstants);var r=this.cell.getConfig();return this.getClassName()===t.className&&(i.cell={className:this.cell.getClassName(),config:r}),Gt({},r,e,i)},t.fromConfig=function(e,i,r){r===void 0&&(r={});var a=i.cell,s=bn(a,r);return new e(Object.assign(i,{cell:s}))},t.className="RNN",t}(De);y.serialization.registerClass(wi);var Yr=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t}(De),Mh=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.DEFAULT_ACTIVATION="tanh",i.DEFAULT_KERNEL_INITIALIZER="glorotNormal",i.DEFAULT_RECURRENT_INITIALIZER="orthogonal",i.DEFAULT_BIAS_INITIALIZER="zeros",i.units=e.units,At(i.units,"units"),i.activation=bi(e.activation==null?i.DEFAULT_ACTIVATION:e.activation),i.useBias=e.useBias==null?!0:e.useBias,i.kernelInitializer=tt(e.kernelInitializer||i.DEFAULT_KERNEL_INITIALIZER),i.recurrentInitializer=tt(e.recurrentInitializer||i.DEFAULT_RECURRENT_INITIALIZER),i.biasInitializer=tt(e.biasInitializer||i.DEFAULT_BIAS_INITIALIZER),i.kernelRegularizer=nt(e.kernelRegularizer),i.recurrentRegularizer=nt(e.recurrentRegularizer),i.biasRegularizer=nt(e.biasRegularizer),i.kernelConstraint=bt(e.kernelConstraint),i.recurrentConstraint=bt(e.recurrentConstraint),i.biasConstraint=bt(e.biasConstraint),i.dropout=Mr([1,mi([0,e.dropout==null?0:e.dropout])]),i.recurrentDropout=Mr([1,mi([0,e.recurrentDropout==null?0:e.recurrentDropout])]),i.stateSize=i.units,i.dropoutMask=null,i.recurrentDropoutMask=null,i}return t.prototype.build=function(e){e=Ke(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){if(e=e,e.length!==2)throw new M("SimpleRNNCell expects 2 input Tensors, got "+e.length+".");var a=e[1];e=e[0];var s=i.training==null?!1:i.training;01){for(var s=[0],o=2;o1)throw new M("Can not merge tensors with different batch sizes. "+("Got tensors with shapes: "+JSON.stringify(e)+"."));for(var o=e[0]==null?null:e[0].slice(1),l=1;l1){var S=vn(1,h).concat([0]);a.push(y.transpose(c,S)),p=!0}else a.push(c)}var L=r.mergeFunction(a),x=L.rank;if(p){if(x==null){var C=L.shape,R=C.length,v=C[R-1],b=[v].concat(C.slice(0,C.length-1));L=y.transpose(L.reshape([-1,v]),[1,0]).reshape(b)}else if(x>1){var S=[x-1].concat(vn(0,x-1));L=y.transpose(L,S)}}return L}}else return r.mergeFunction(e)})},t.prototype.computeOutputShape=function(e){e=e;var i;e[0]==null?i=null:i=e[0].slice(1);for(var r=1;r1)throw new M("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))},t.prototype.mergeFunction=function(e){var i=this;return y.tidy(function(){return ch(e,i.axis)})},t.prototype.computeOutputShape=function(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new M("A `Concatenate` layer should be called on a list of inputs.");for(var i=e,r=i[0].slice(),a=this.axis<0?r.length+this.axis:this.axis,s=0,o=i.slice(1);s3||t.shape.length>3)throw new Te("batchDot is not implemented for tensors of 4D or higher rank yet");if(y.util.assert(n.shape.length>=2,function(){return"batchDot requires the rank of x to be >= 2, "+("but got "+n.shape.length)}),y.util.assert(n.shape.length>=2,function(){return"batchDot requires the rank of y to be >= 2, "+("but got "+t.shape.length)}),typeof e=="number"&&(e=[e,e]),n.dtype==="complex64"||t.dtype==="complex64")throw new Te("batchDot is not implemented for complex64-type Tensors yet.");var i=n.shape.length,r=t.shape.length;e==null&&(e=[i-1,r-2]);var a=e;return y.tidy(function(){var s;if(i>r){s=i-r;for(var o=[],l=0;li){s=r-i;for(var o=[],l=0;l0){var d=void 0;i>r?d=i+r-3:d=i-1;for(var p=[],l=d;l3||r.length>3)throw new Te("Dot layer does not support tensors of 4D or higher rank yet.");var a=this.interpretAxes(i,r);if(i[a[0]]!==r[a[1]])throw new M("Dimension incompatibility: "+(i[a[0]]+" !== "+r[a[1]]))},t.prototype.mergeFunction=function(e){if(e.length!==2)throw new M("A `Dot` layer must be called on exactly 2 inputs, "+("but received "+e.length+" input(s)."));var i=e[0],r=e[1],a;return Array.isArray(this.axes)?a=this.axes.map(function(s,o){return Va(s,e[o].shape.length)}):a=[Va(this.axes,i.shape.length),Va(this.axes,r.shape.length)],this.normalize&&(i=lo(i,a[0]),r=lo(r,a[1])),a4(i,r,a)},t.prototype.interpretAxes=function(e,i){var r;return Array.isArray(this.axes)?r=this.axes:r=[Va(this.axes,e.length),Va(this.axes,i.length)],r},t.prototype.computeOutputShape=function(e){y.util.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),function(){return"A `Dot` layer should be called on a list of exactly 2 inputs."});var i=e[0].slice(),r=e[1].slice();if(i.length>3||r.length>3)throw new Te("Dot layer does not support tensors of 4D or higher rank yet.");var a=this.interpretAxes(i,r);i.splice(a[0],1),r.splice(a[1],1),r.splice(0,1);var s=i.concat(r);return s.length===1&&s.push(1),s},t.prototype.computeMask=function(e,i){return null},t.prototype.getConfig=function(){var e={axes:this.axes,normalize:this.normalize},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t.className="Dot",t}(nr);y.serialization.registerClass(hb);var db=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.supportsMasking=!0,i.stddev=e.stddev,i}return t.prototype.computeOutputShape=function(e){return e},t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this),i={stddev:this.stddev};return Object.assign(i,e),i},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){r.invokeCallHook(e,i);var a=xe(e),s=function(){return no(a.shape,0,r.stddev).add(a)},o=Ba(s,function(){return a},i.training||!1);return o})},t.className="GaussianNoise",t}(De);y.serialization.registerClass(db);var pb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.supportsMasking=!0,i.rate=e.rate,i}return t.prototype.computeOutputShape=function(e){return e},t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this),i={rate:this.rate};return Object.assign(i,e),i},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){r.invokeCallHook(e,i);var a=xe(e);if(r.rate>0&&r.rate<1){var s=function(){var o=Math.sqrt(r.rate/(1-r.rate));return a.mul(no(a.shape,1,o))};return Ba(s,function(){return a},i.training||!1)}return a})},t.className="GaussianDropout",t}(De);y.serialization.registerClass(pb);var fb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.supportsMasking=!0,i.rate=e.rate,i.noiseShape=e.noiseShape,i}return t.prototype._getNoiseShape=function(e){return this.noiseShape||xe(e).shape},t.prototype.computeOutputShape=function(e){return e},t.prototype.getConfig=function(){var e=n.prototype.getConfig.call(this),i={rate:this.rate};return Object.assign(i,e),i},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){if(r.rate<1&&r.rate>0){var a=r._getNoiseShape(e),s=function(){var o=xe(e),l=1.6732632423543772,u=1.0507009873554805,c=-l*u,h=y.greaterEqual(y.randomUniform(a),r.rate);h=Fa(h,"float32");var d=Math.pow((1-r.rate)*(1+r.rate*Math.pow(c,2)),-.5),p=-d*c*r.rate,f=o.mul(h).add(h.add(-1).mul(c));return f.mul(d).add(p)};return Ba(s,function(){return xe(e)},i.training||!1)}return e})},t.className="AlphaDropout",t}(De);y.serialization.registerClass(fb);function qa(n,t,e,i,r,a){a===void 0&&(a=.001);var s;if(n.rank===2)s=y.batchNorm2d(n,t,e,i,r,a);else if(n.rank===3)s=y.batchNorm3d(n,t,e,i,r,a);else if(n.rank===4)s=y.batchNorm4d(n,t,e,i,r,a);else throw new Te("batchNormalization is not implemented for array of rank "+n.rank+" yet");return s}function s4(n,t,e,i,r){return r===void 0&&(r=.001),y.tidy(function(){var a=y.moments(n,i),s=a.mean,o=a.variance,l=qa(n,s,o,e,t,r);return[l,s,o]})}function o4(n,t,e,i,r){return r===void 0&&(r=.001),y.tidy(function(){for(var a=y.moments(n,i),s=a.mean,o=a.variance,l=[],u=0,c=vn(0,n.rank);u=0?this.axis:this.axis+e.length,a=e[r];if(a==null)throw new M("Axis "+r+" of input tensor should have a defined dimension but the layer received an input with shape "+(JSON.stringify(e)+"."));this.inputSpec=[new Tt({ndim:e.length,axes:(i={},i[r]=a,i)})];var s=[a];this.scale&&(this.gamma=this.addWeight("gamma",s,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",s,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",s,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",s,null,this.movingVarianceInitializer,null,!1),this.built=!0},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){var a=i.training==null?!1:i.training,s=xe(e),o=s.shape,l=o.length,u=vn(0,l),c=r.axis>=0?r.axis:r.axis+l;u.splice(c,1);var h=Xi(1,l);h[c]=o[c];var d=u.slice();d.sort();var p=!y.util.arraysEqual(d,vn(0,l).slice(0,l-1)),f=function(){if(p){var L=r.movingMean.read().reshape(h),x=r.movingVariance.read().reshape(h),C=r.center?r.beta.read().reshape(h):null,R=r.scale?r.gamma.read().reshape(h):null;return qa(s,L,x,C,R,r.epsilon)}else return qa(s,r.movingMean.read(),r.movingVariance.read(),r.beta==null?null:r.beta.read(),r.gamma==null?null:r.gamma.read(),r.epsilon)};if(!a)return f();var m=l4(s,r.gamma.read(),r.beta.read(),u,r.epsilon),g=m[0],v=m[1],b=m[2],w=function(L,x,C){y.tidy(function(){var R=1-C,D=L.read(),k=D.sub(x).mul(R);L.write(D.sub(k))})},S=function(){w(r.movingMean,v,r.momentum),w(r.movingVariance,b,r.momentum)};return S(),g})},t.prototype.getConfig=function(){var e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:st(this.betaInitializer),gammaInitializer:st(this.gammaInitializer),movingMeanInitializer:st(this.movingMeanInitializer),movingVarianceInitializer:st(this.movingVarianceInitializer),betaRegularizer:je(this.betaRegularizer),gammaRegularizer:je(this.gammaRegularizer),betaConstraint:yt(this.betaConstraint),gammaConstraint:yt(this.gammaConstraint)},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t.className="BatchNormalization",t}(De);y.serialization.registerClass(mb);var gb=function(n){Q(t,n);function t(e){var i=this;if(e==null&&(e={}),i=n.call(this,e)||this,i.axis=e.axis==null?-1:e.axis,typeof i.axis=="number"){if(!Number.isInteger(i.axis))throw new Error("Expected axis to be an integer, but received "+i.axis)}else if(Array.isArray(i.axis))for(var r=0,a=i.axis;r=i)throw new Error("Invalid axis: "+o)}if(this.axis.length!==pi(this.axis).length)throw new Error("Found duplicate axes in: "+this.axis);var l=this.axis.map(function(c){return e[c]}),u=!0;this.scale?this.gamma=this.addWeight("gamma",l,"float32",this.gammaInitializer,this.gammaRegularizer,u):this.gamma=null,this.center?this.beta=this.addWeight("beta",l,"float32",this.betaInitializer,this.betaRegularizer,u):this.beta=null,this.built=!0},t.prototype.call=function(e,i){var r=this,a=xe(e),s=a.shape,o=s.length;return y.tidy(function(){for(var l=!0,u=y.moments(a,r.axis,l),c=u.mean,h=u.variance,d=Xi(1,o),p=0,f=r.axis;p=0?i=e[2]+this.padding[0][0]+this.padding[0][1]:i=null,e[3]!=null&&e[3]>=0?r=e[3]+this.padding[1][0]+this.padding[1][1]:r=null,[e[0],e[1],i,r]):(e[1]!=null&&e[1]>=0?i=e[1]+this.padding[0][0]+this.padding[0][1]:i=null,e[2]!=null&&e[2]>=0?r=e[2]+this.padding[1][0]+this.padding[1][1]:r=null,[e[0],i,r,e[3]])},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){return u4(xe(e),r.padding,r.dataFormat)})},t.prototype.getConfig=function(){var e={padding:this.padding,dataFormat:this.dataFormat},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t.className="ZeroPadding2D",t}(De);y.serialization.registerClass(vb);function So(n,t,e,i,r,a){return y.tidy(function(){ct(r),xv(a),nn(i),e==null&&(e=[1,1]),i==null&&(i="valid"),r==null&&(r=gn()),a==null&&(a="max"),n=zh(n,r);var s,o=i==="same"?"same":"valid";return a==="max"?s=y.maxPool(n,t,e,o):s=y.avgPool(n,t,e,o),r==="channelsFirst"&&(s=y.transpose(s,[0,3,1,2])),s})}function yb(n,t,e,i,r,a){return y.tidy(function(){ct(r),xv(a),nn(i),e==null&&(e=[1,1,1]),i==null&&(i="valid"),r==null&&(r=gn()),a==null&&(a="max"),n=Fy(n,r);var s,o=i==="same"?"same":"valid";return a==="max"?s=y.maxPool3d(n,t,e,o):s=y.avgPool3d(n,t,e,o),r==="channelsFirst"&&(s=y.transpose(s,[0,4,1,2,3])),s})}var bb=function(n){Q(t,n);function t(e){var i=this;if(e.poolSize==null&&(e.poolSize=2),i=n.call(this,e)||this,typeof e.poolSize=="number")i.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")i.poolSize=e.poolSize;else throw new M("poolSize for 1D convolutional layer must be a number or an Array of a single number, but received "+(""+JSON.stringify(e.poolSize)));if(At(i.poolSize,"poolSize"),e.strides==null)i.strides=i.poolSize;else if(typeof e.strides=="number")i.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")i.strides=e.strides;else throw new M("strides for 1D convolutional layer must be a number or an Array of a single number, but received "+(""+JSON.stringify(e.strides)));return At(i.strides,"strides"),i.padding=e.padding==null?"valid":e.padding,nn(i.padding),i.inputSpec=[new Tt({ndim:3})],i}return t.prototype.computeOutputShape=function(e){e=Ke(e);var i=wn(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],i,e[2]]},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){r.invokeCallHook(e,i),e=Wa(xe(e),2);var a=r.poolingFunction(xe(e),[r.poolSize[0],1],[r.strides[0],1],r.padding,"channelsLast");return y.squeeze(a,[2])})},t.prototype.getConfig=function(){var e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t}(De),wb=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),So(e,i,r,a,s,"max")},t.className="MaxPooling1D",t}(bb);y.serialization.registerClass(wb);var Sb=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),So(e,i,r,a,s,"avg")},t.className="AveragePooling1D",t}(bb);y.serialization.registerClass(Sb);var Lb=function(n){Q(t,n);function t(e){var i=this;if(e.poolSize==null&&(e.poolSize=[2,2]),i=n.call(this,e)||this,i.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)i.strides=i.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new M("If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length "+(e.strides.length+"."));i.strides=e.strides}else i.strides=[e.strides,e.strides];return At(i.poolSize,"poolSize"),At(i.strides,"strides"),i.padding=e.padding==null?"valid":e.padding,i.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,ct(i.dataFormat),nn(i.padding),i.inputSpec=[new Tt({ndim:4})],i}return t.prototype.computeOutputShape=function(e){e=Ke(e);var i=this.dataFormat==="channelsFirst"?e[2]:e[1],r=this.dataFormat==="channelsFirst"?e[3]:e[2];return i=wn(i,this.poolSize[0],this.padding,this.strides[0]),r=wn(r,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],i,r]:[e[0],i,r,e[3]]},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){return r.invokeCallHook(e,i),r.poolingFunction(xe(e),r.poolSize,r.strides,r.padding,r.dataFormat)})},t.prototype.getConfig=function(){var e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t}(De),Ib=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),So(e,i,r,a,s,"max")},t.className="MaxPooling2D",t}(Lb);y.serialization.registerClass(Ib);var Ab=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),So(e,i,r,a,s,"avg")},t.className="AveragePooling2D",t}(Lb);y.serialization.registerClass(Ab);var Tb=function(n){Q(t,n);function t(e){var i=this;if(e.poolSize==null&&(e.poolSize=[2,2,2]),i=n.call(this,e)||this,i.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)i.strides=i.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new M("If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length "+(e.strides.length+"."));i.strides=e.strides}else i.strides=[e.strides,e.strides,e.strides];return At(i.poolSize,"poolSize"),At(i.strides,"strides"),i.padding=e.padding==null?"valid":e.padding,i.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,ct(i.dataFormat),nn(i.padding),i.inputSpec=[new Tt({ndim:5})],i}return t.prototype.computeOutputShape=function(e){e=Ke(e);var i=this.dataFormat==="channelsFirst"?e[2]:e[1],r=this.dataFormat==="channelsFirst"?e[3]:e[2],a=this.dataFormat==="channelsFirst"?e[4]:e[3];return i=wn(i,this.poolSize[0],this.padding,this.strides[0]),r=wn(r,this.poolSize[1],this.padding,this.strides[1]),a=wn(a,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],i,r,a]:[e[0],i,r,a,e[4]]},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){return r.invokeCallHook(e,i),r.poolingFunction(xe(e),r.poolSize,r.strides,r.padding,r.dataFormat)})},t.prototype.getConfig=function(){var e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t}(De),Nb=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),yb(e,i,r,a,s,"max")},t.className="MaxPooling3D",t}(Tb);y.serialization.registerClass(Nb);var xb=function(n){Q(t,n);function t(e){return n.call(this,e)||this}return t.prototype.poolingFunction=function(e,i,r,a,s){return ct(s),nn(a),yb(e,i,r,a,s,"avg")},t.className="AveragePooling3D",t}(Tb);y.serialization.registerClass(xb);var Cb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.inputSpec=[new Tt({ndim:3})],i}return t.prototype.computeOutputShape=function(e){return[e[0],e[2]]},t.prototype.call=function(e,i){throw new Te},t}(De),Rb=function(n){Q(t,n);function t(e){return n.call(this,e||{})||this}return t.prototype.call=function(e,i){return y.tidy(function(){var r=xe(e);return y.mean(r,1)})},t.className="GlobalAveragePooling1D",t}(Cb);y.serialization.registerClass(Rb);var Ob=function(n){Q(t,n);function t(e){return n.call(this,e||{})||this}return t.prototype.call=function(e,i){return y.tidy(function(){var r=xe(e);return y.max(r,1)})},t.className="GlobalMaxPooling1D",t}(Cb);y.serialization.registerClass(Ob);var Eb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,ct(i.dataFormat),i.inputSpec=[new Tt({ndim:4})],i}return t.prototype.computeOutputShape=function(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]},t.prototype.call=function(e,i){throw new Te},t.prototype.getConfig=function(){var e={dataFormat:this.dataFormat},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t}(De),Db=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.call=function(e,i){var r=this;return y.tidy(function(){var a=xe(e);return r.dataFormat==="channelsLast"?y.mean(a,[1,2]):y.mean(a,[2,3])})},t.className="GlobalAveragePooling2D",t}(Eb);y.serialization.registerClass(Db);var kb=function(n){Q(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.call=function(e,i){var r=this;return y.tidy(function(){var a=xe(e);return r.dataFormat==="channelsLast"?y.max(a,[1,2]):y.max(a,[2,3])})},t.className="GlobalMaxPooling2D",t}(Eb);y.serialization.registerClass(kb);var Fb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.layer=e.layer,i}return t.prototype.build=function(e){this.built=!0},Object.defineProperty(t.prototype,"trainable",{get:function(){return this.layer!=null?this.layer.trainable:!1},set:function(e){this.layer!=null&&(this.layer.trainable=e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trainableWeights",{get:function(){return this.layer.trainableWeights},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nonTrainableWeights",{get:function(){return this.layer.nonTrainableWeights},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"updates",{get:function(){return this.layer._updates},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"losses",{get:function(){return this.layer.losses},enumerable:!0,configurable:!0}),t.prototype.getWeights=function(){return this.layer.getWeights()},t.prototype.setWeights=function(e){this.layer.setWeights(e)},t.prototype.getConfig=function(){var e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},i=n.prototype.getConfig.call(this);return Object.assign(e,i),e},t.prototype.setFastWeightInitDuringBuild=function(e){n.prototype.setFastWeightInitDuringBuild.call(this,e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)},t.fromConfig=function(e,i,r){r===void 0&&(r={});var a=i.layer,s=bn(a,r);delete i.layer;var o={layer:s};return Object.assign(o,i),new e(o)},t}(De),Wb=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this;return i.supportsMasking=!0,i}return t.prototype.build=function(e){if(e=Ke(e),e.length<3)throw new M("TimeDistributed layer expects an input shape >= 3D, but received "+("input shape "+JSON.stringify(e)));this.inputSpec=[{shape:e}];var i=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(i),this.layer.built=!0),n.prototype.build.call(this,e)},t.prototype.computeOutputShape=function(e){e=Ke(e);var i=[e[0]].concat(e.slice(2)),r=this.layer.computeOutputShape(i),a=e[1];return[r[0],a].concat(r.slice(1))},t.prototype.call=function(e,i){var r=this;return y.tidy(function(){e=xe(e);var a=function(l,u){var c=xe(r.layer.call(l,i));return[c,[]]},s=Gy(a,e,[],!1,null,null,!1,!0),o=s[1];return o})},t.className="TimeDistributed",t}(Fb);y.serialization.registerClass(Wb);function c4(n){Pr(tk,"BidirectionalMergeMode",n)}var h4="concat",Ub=function(n){Q(t,n);function t(e){var i=n.call(this,e)||this,r=e.layer.getConfig(),a={};a.className=e.layer.getClassName(),a.config=r,i.forwardLayer=bn(a),r.goBackwards=!(r.goBackwards===!0);var s={};if(s.className=e.layer.getClassName(),s.config=r,i.backwardLayer=bn(s),i.forwardLayer.name="forward_"+i.forwardLayer.name,i.backwardLayer.name="backward_"+i.backwardLayer.name,i.mergeMode=e.mergeMode===void 0?h4:e.mergeMode,c4(i.mergeMode),e.weights)throw new Te("weights support is not implemented for Bidirectional layer yet.");return i._stateful=e.layer.stateful,i.returnSequences=e.layer.returnSequences,i.returnState=e.layer.returnState,i.supportsMasking=!0,i._trainable=!0,i.inputSpec=e.layer.inputSpec,i.numConstants=null,i}return Object.defineProperty(t.prototype,"trainable",{get:function(){return this._trainable},set:function(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)},enumerable:!0,configurable:!0}),t.prototype.getWeights=function(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())},t.prototype.setWeights=function(e){var i=e.length,r=Math.floor(i/2);this.forwardLayer.setWeights(e.slice(0,r)),this.backwardLayer.setWeights(e.slice(r))},t.prototype.computeOutputShape=function(e){var i=this.forwardLayer.computeOutputShape(e);Array.isArray(i)&&Array.isArray(i[0])||(i=[i]),i=i;var r,a,s;return this.returnState&&(s=i.slice(1)),r=i[0],r=r,this.mergeMode==="concat"?(r[r.length-1]*=2,a=[r]):this.mergeMode==null?a=[r,r.slice()]:a=[r],this.returnState?this.mergeMode==null?a.concat(s).concat(s.slice()):[r].concat(s).concat(s.slice()):Mt(a)},t.prototype.apply=function(e,i){var r=i==null?null:i.initialState,a=i==null?null:i.constants;i==null&&(i={});var s=qy(e,r,a,this.numConstants);if(e=s.inputs,r=s.initialState,a=s.constants,Array.isArray(e)&&(r=e.slice(1),e=e[0]),(r==null||r.length===0)&&a==null)return n.prototype.apply.call(this,e,i);var o=[],l=[];if(r!=null){var u=r.length;if(u%2>0)throw new M("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");i.initialState=r,o.push.apply(o,r);var c=r.map(function(w){return new Tt({shape:w.shape})});this.forwardLayer.stateSpec=c.slice(0,u/2),this.backwardLayer.stateSpec=c.slice(u/2),l.push.apply(l,c)}if(a!=null)throw new Te("Support for constants in Bidirectional layers is not implemented yet.");for(var h=o[0]instanceof yn,d=0,p=o;dt}var Vb=function(n){Q(t,n);function t(e){var i=n.call(this)||this;if(e==null&&(e={}),e.restoreBestWeights)throw new Te("restoreBestWeights = True is not implemented in EarlyStopping yet.");return i.monitor=e.monitor||"val_loss",i.minDelta=Math.abs(e.minDelta||0),i.patience=e.patience||0,i.verbose=e.verbose||0,i.mode=e.mode||"auto",i.baseline=e.baseline,["auto","min","max"].indexOf(i.mode)===-1&&(console.warn("EarlyStopping mode '"+i.mode+"' is invalid. Falling back to mode 'auto'."),i.mode="auto"),i.mode==="min"?i.monitorFunc=Lo:i.mode==="max"||i.monitor.indexOf("acc")!==-1?i.monitorFunc=Hb:i.monitorFunc=Lo,i.monitorFunc===Lo&&(i.minDelta*=-1),i}return t.prototype.onTrainBegin=function(e){return Le(this,void 0,void 0,function(){return ve(this,function(i){return this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Lo?Infinity:-Infinity,[2]})})},t.prototype.onEpochEnd=function(e,i){return Le(this,void 0,void 0,function(){var r;return ve(this,function(a){switch(a.label){case 0:return[4,gi(i)];case 1:return a.sent(),r=this.getMonitorValue(i),r==null?[2]:(this.monitorFunc(r-this.minDelta,this.best)?(this.best=r,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)),[2])}})})},t.prototype.onTrainEnd=function(e){return Le(this,void 0,void 0,function(){return ve(this,function(i){return this.stoppedEpoch>0&&this.verbose&&console.log("Epoch "+this.stoppedEpoch+": early stopping."),[2]})})},t.prototype.getMonitorValue=function(e){e==null&&(e={});var i=e[this.monitor];return i==null&&console.warn("Metric for EarlyStopping "+this.monitor+" is not available. "+("Available metrics are: "+Object.keys(e))),i},t}(Mb);function VF(n){return new Vb(n)}var qF={earlyStopping:VF};Xe.Callback=Mb;Xe.CallbackList=Zv;Xe.CustomCallback=ey;Xe.EarlyStopping=Vb;Xe.History=Qv;Xe.InputSpec=Tt;Xe.LayerVariable=Kv;Xe.LayersModel=vi;Xe.RNN=wi;Xe.Sequential=Wh;Xe.SymbolicTensor=yn;Xe.callbacks=qF;Xe.constraints=JD;Xe.initializers=Ek;Xe.input=Iy;Xe.layers=SF;Xe.loadLayersModel=z3;Xe.metrics=BF;Xe.model=U3;Xe.models=zF;Xe.registerCallbackConstructor=P3;Xe.regularizers=HF;Xe.sequential=B3;Xe.version_layers=Rh});var aw=be(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});var B=$i();var Gb=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]0?Object.keys(h).forEach(function(g){var v=Jn(g)[0],b=l[v];b&&(b.signatureKey=h[g],u.push(b))}):u=a;var f={};t.library!=null&&t.library.function!=null&&(f=t.library.function.reduce(function(g,v){return g[v.signature.name]=i.mapFunction(v),g},{}));var m={nodes:l,inputs:u,outputs:c,weights:s,placeholders:a,signature:e,functions:f};return o.length>0&&(m.initNodes=o),m},n.prototype.mapSignatureEntries=function(t){return Object.keys(t||{}).reduce(function(e,i){return e[t[i].name]=i,e},{})},n.prototype.mapNode=function(t){var e=Kb(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});var i={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(function(r){return r.startsWith("^")?r.substr(1):r}),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr};return e.inputs!=null&&(i.inputParams=e.inputs.reduce(function(r,a){return r[a.name]={type:a.type,inputIndexStart:a.start,inputIndexEnd:a.end},r},{})),e.attrs!=null&&(i.attrParams=e.attrs.reduce(function(r,a){var s=a.type,o=void 0;switch(a.type){case"string":o=$h(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=$h(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"string[]":o=id(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=id(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"number":o=Jh(t.attr,a.tfName,a.defaultValue||0),o===void 0&&!!a.tfDeprecatedName&&(o=Jh(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"number[]":o=nd(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=nd(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool":o=Xh(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=Xh(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool[]":o=ad(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=ad(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape":o=td(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=td(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape[]":o=rd(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=rd(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype":o=Qh(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=Qh(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype[]":o=ed(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=ed(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"func":o=jb(t.attr,a.tfName,a.defaultValue),o===void 0&&!!a.tfDeprecatedName&&(o=jb(t.attr,a.tfDeprecatedName,a.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error("Unsupported param type: "+a.type+" for op: "+t.op)}return r[a.name]={value:o,type:s},r},{})),i},n.prototype.mapFunction=function(t){var e=this,i=t.nodeDef,r=[],a=[],s={};i!=null&&(s=i.reduce(function(d,p){return d[p.name]=e.mapNode(p),p.op==="Const"&&a.push(d[p.name]),d},{}));var o=[],l=[];t.signature.inputArg.forEach(function(d){var p=Jn(d.name)[0],f={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:Zh(d.type),type:"dtype"}},children:[]};f.signatureKey=d.name,o.push(f),s[p]=f});var u=Object.keys(s);u.forEach(function(d){var p=s[d];p.inputNames.forEach(function(f){var m=Jn(f)[0];p.inputs.push(s[m]),s[m].children.push(p)})});var c=t.ret;t.signature.outputArg.forEach(function(d){var p=Jn(c[d.name]),f=p[0],m=p[1],g=s[f];g!=null&&(g.defaultOutput=m,l.push(g))});var h=this.mapArgsToSignature(t);return{nodes:s,inputs:o,outputs:l,weights:a,placeholders:r,signature:h}},n.prototype.mapArgsToSignature=function(t){var e=this;return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce(function(i,r){return i[r.name]=e.mapArgToTensorInfo(r),i},{}),outputs:t.signature.outputArg.reduce(function(i,r){return i[r.name]=e.mapArgToTensorInfo(r,t.ret),i},{})}},n.prototype.mapArgToTensorInfo=function(t,e){var i=t.name;return e!=null&&(i=e[i]),{name:i,dtype:t.type}},n}();function NW(n){var t=B.env().global;if(typeof t.atob!="undefined")return t.atob(n);if(typeof Buffer!="undefined")return new Buffer(n,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function Xb(n,t){var e=Array.isArray(n)?String.fromCharCode.apply(null,n):NW(n);return t?e:e.toLowerCase()}function $h(n,t,e,i){i===void 0&&(i=!1);var r=n[t];return r!=null?Xb(r.s,i):e}function Xh(n,t,e){var i=n[t];return i?i.b:e}function Jh(n,t,e){var i=n[t]||{},r=i.i!=null?i.i:i.f!=null?i.f:e;return typeof r=="number"?r:parseInt(r,10)}function Zh(n){typeof n=="string"&&(n=Ln[n]);switch(n){case Ln.DT_FLOAT:return"float32";case Ln.DT_INT32:case Ln.DT_INT64:case Ln.DT_INT8:case Ln.DT_UINT8:return"int32";case Ln.DT_BOOL:return"bool";case Ln.DT_DOUBLE:return"float32";case Ln.DT_STRING:return"string";default:return null}}function jb(n,t,e){var i=n[t];return i&&i.func?i.func.name:e}function Qh(n,t,e){var i=n[t];return i&&i.type?Zh(i.type):e}function ed(n,t,e){var i=n[t];return i&&i.list&&i.list.type?i.list.type.map(function(r){return Zh(r)}):e}function Jb(n){return n.unknownRank?void 0:n.dim!=null?n.dim.map(function(t){return typeof t.size=="number"?t.size:parseInt(t.size,10)}):[]}function td(n,t,e){var i=n[t];return i&&i.shape?Jb(i.shape):e}function nd(n,t,e){var i=n[t];return i?((i.list.f&&i.list.f.length?i.list.f:i.list.i)||[]).map(function(r){return typeof r=="number"?r:parseInt(r,10)}):e}function id(n,t,e,i){i===void 0&&(i=!1);var r=n[t];return r&&r.list&&r.list.s?r.list.s.map(function(a){return Xb(a,i)}):e}function rd(n,t,e){var i=n[t];return i&&i.list&&i.list.shape?i.list.shape.map(function(r){return Jb(r)}):e}function ad(n,t,e){var i=n[t];return i&&i.list&&i.list.b?i.list.b:e}var xW=function(){function n(t,e,i){var r=this;this.node=t,this.tensorMap=e,this.context=i,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(function(a){return r.getInput(a)}),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce(function(a,s){return a[s]=r.getAttr(s),a},{}))}return n.prototype.getInput=function(t){return Ht(t,this.tensorMap,this.context)},n.prototype.getAttr=function(t,e){var i=this.node.rawAttrs[t];if(i.tensor!=null)return Ht(t,this.tensorMap,this.context);if(i.i!=null||i.f!=null)return Jh(this.node.rawAttrs,t,e);if(i.s!=null)return $h(this.node.rawAttrs,t,e);if(i.b!=null)return Xh(this.node.rawAttrs,t,e);if(i.shape!=null)return td(this.node.rawAttrs,t,e);if(i.type!=null)return Qh(this.node.rawAttrs,t,e);if(i.list!=null){if(i.list.i!=null||i.list.f!=null)return nd(this.node.rawAttrs,t,e);if(i.list.s!=null)return id(this.node.rawAttrs,t,e);if(i.list.shape!=null)return rd(this.node.rawAttrs,t,e);if(i.list.b!=null)return ad(this.node.rawAttrs,t,e);if(i.list.type!=null)return ed(this.node.rawAttrs,t,e)}return e},n}();var CW=function(n,t,e){switch(n.op){case"BiasAdd":case"AddV2":case"Add":return[B.add(A("a",n,t,e),A("b",n,t,e))];case"AddN":return[B.addN(A("tensors",n,t,e))];case"FloorMod":case"Mod":return[B.mod(A("a",n,t,e),A("b",n,t,e))];case"Mul":return[B.mul(A("a",n,t,e),A("b",n,t,e))];case"RealDiv":case"Div":return[B.div(A("a",n,t,e),A("b",n,t,e))];case"DivNoNan":return[B.divNoNan(A("a",n,t,e),A("b",n,t,e))];case"FloorDiv":return[B.floorDiv(A("a",n,t,e),A("b",n,t,e))];case"Sub":return[B.sub(A("a",n,t,e),A("b",n,t,e))];case"Minimum":return[B.minimum(A("a",n,t,e),A("b",n,t,e))];case"Maximum":return[B.maximum(A("a",n,t,e),A("b",n,t,e))];case"Pow":return[B.pow(A("a",n,t,e),A("b",n,t,e))];case"SquaredDifference":return[B.squaredDifference(A("a",n,t,e),A("b",n,t,e))];default:throw TypeError("Node type "+n.op+" is not implemented")}};var RW=function(n,t,e){switch(n.op){case"Abs":case"ComplexAbs":return[B.abs(A("x",n,t,e))];case"Acos":return[B.acos(A("x",n,t,e))];case"Acosh":return[B.acosh(A("x",n,t,e))];case"Asin":return[B.asin(A("x",n,t,e))];case"Asinh":return[B.asinh(A("x",n,t,e))];case"Atan":return[B.atan(A("x",n,t,e))];case"Atan2":return[B.atan2(A("x",n,t,e),A("y",n,t,e))];case"Atanh":return[B.atanh(A("x",n,t,e))];case"Ceil":return[B.ceil(A("x",n,t,e))];case"Complex":return[B.complex(A("real",n,t,e),A("imag",n,t,e))];case"Cos":return[B.cos(A("x",n,t,e))];case"Cosh":return[B.cosh(A("x",n,t,e))];case"Elu":return[B.elu(A("x",n,t,e))];case"Erf":return[B.erf(A("x",n,t,e))];case"Exp":return[B.exp(A("x",n,t,e))];case"Expm1":return[B.expm1(A("x",n,t,e))];case"Floor":return[B.floor(A("x",n,t,e))];case"Log":return[B.log(A("x",n,t,e))];case"Log1p":return[B.log1p(A("x",n,t,e))];case"Imag":return[B.imag(A("x",n,t,e))];case"Neg":return[B.neg(A("x",n,t,e))];case"Reciprocal":return[B.reciprocal(A("x",n,t,e))];case"Real":return[B.real(A("x",n,t,e))];case"Relu":return[B.relu(A("x",n,t,e))];case"Round":return[B.round(A("x",n,t,e))];case"Selu":return[B.selu(A("x",n,t,e))];case"Sigmoid":return[B.sigmoid(A("x",n,t,e))];case"Sin":return[B.sin(A("x",n,t,e))];case"Sign":return[B.sign(A("x",n,t,e))];case"Sinh":return[B.sinh(A("x",n,t,e))];case"Softplus":return[B.softplus(A("x",n,t,e))];case"Sqrt":return[B.sqrt(A("x",n,t,e))];case"Square":return[B.square(A("x",n,t,e))];case"Tanh":return[B.tanh(A("x",n,t,e))];case"Tan":return[B.tan(A("x",n,t,e))];case"Relu6":case"ClipByValue":return[B.clipByValue(A("x",n,t,e),A("clipValueMin",n,t,e),A("clipValueMax",n,t,e))];case"Rsqrt":return[B.rsqrt(Ht(n.inputNames[0],t,e))];case"Prod":return[B.prod(A("x",n,t,e),A("axes",n,t,e))];case"LeakyRelu":return[B.leakyRelu(A("x",n,t,e),A("alpha",n,t,e))];case"Prelu":return[B.prelu(A("x",n,t,e),A("alpha",n,t,e))];default:throw TypeError("Node type "+n.op+" is not implemented")}};function hn(n,t,e){e===void 0&&(e=""),B.util.assert(OW(n,t),function(){return e+(" Shapes "+n+" and "+t+" must match")})}function OW(n,t){if(n.length!==t.length)return!1;for(var e=0;e=this.size())throw new Error("Tried to read from index "+t+", but array size is: "+this.size());var e=this.tensors[t];if(e.cleared)throw new Error("TensorArray "+this.name+": Could not read index "+t+" twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).");return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor},n.prototype.readMany=function(t){var e=this;return t.map(function(i){return e.read(i)})},n.prototype.write=function(t,e){if(this.closed_)throw new Error("TensorArray "+this.name+" has already been closed.");if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error("Tried to write to index "+t+", but array is not resizeable and size is: "+this.maxSize);var i=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+`, because the value dtype is `+e.dtype+", but TensorArray dtype is "+this.dtype+".");if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),hn(this.elementShape,e.shape,"TensorArray "+this.name+": Could not write to TensorArray index "+t+"."),i.read)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+", because it has already been read.");if(i.written)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+", because it has already been written.");i.tensor=e,B.keep(e),i.written=!0,this.tensors[t]=i},n.prototype.writeMany=function(t,e){var i=this;if(t.length!==e.length)throw new Error("TensorArray "+this.name+": could not write multiple tensors,"+("because the index size: "+t.length+" is not the same as tensors size: "+e.length+"."));t.forEach(function(r,a){return i.write(r,e[a])})},n.prototype.gather=function(t,e){if(!!e&&e!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but gather requested dtype "+e);if(t)t=t.slice(0,this.size());else{t=[];for(var i=0;i=this.maxSize)throw new Error("Max index must be < array size ("+i+" vs. "+this.maxSize+")");this.writeMany(t,B.unstack(e,0))},n.prototype.split=function(t,e){var i=this;if(e.dtype!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but tensor has dtype "+e.dtype);var r=0,a=t.map(function(c){return r+=c,r});if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is `+r+", and tensor's shape is: "+e.shape);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error("TensorArray's size is not equal to the size of lengths ("+this.maxSize+" vs. "+t.length+"), and the TensorArray is not marked as dynamically resizeable");var s=r===0?0:e.size/r,o=[];B.tidy(function(){e=B.reshape(e,[1,r,s]);for(var c=0;cthis.maxNumElements)throw new Error("TensorListResize input size "+t+" is greater maxNumElement "+this.maxNumElements+".");this.tensors.length=t},n.prototype.getItem=function(t,e,i){if(i!==this.elementDtype)throw new Error("Invalid data types; op elements "+i+", but list elements "+this.elementDtype);if(t<0||t>this.tensors.length)throw new Error("Trying to access element "+t+" in a list with "+this.tensors.length+" elements.");if(this.tensors[t]==null)throw new Error("element at index "+t+" is null.");return hn(this.tensors[t].shape,e,"TensorList shape mismatch: "),this.tensors[t]},n.prototype.setItem=function(t,e){if(e.dtype!==this.elementDtype)throw new Error("Invalid data types; op elements "+e.dtype+", but list elements "+this.elementDtype);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error("Trying to set element "+t+" in a list with max "+this.maxNumElements+" elements.");hn(this.elementShape,e.shape,"TensorList shape mismatch: "),B.keep(e),this.tensors[t]=e},n.prototype.gather=function(t,e,i){var r=this;if(e!==this.elementDtype)throw new Error("Invalid data types; op elements "+e+", but list elements "+this.elementDtype);return hn(this.elementShape,i,"TensorList shape mismatch: "),t=t.slice(0,this.size()),t.length===0?B.tensor([],[0].concat(this.elementShape)):B.tidy(function(){var a=t.map(function(s){return B.reshape(r.tensors[s],i)});return B.stack(a,0)})},n.prototype.concat=function(t,e){var i=this;if(!!t&&t!==this.elementDtype)throw new Error("TensorList dtype is "+this.elementDtype+" but concat requested dtype "+t);return hn(this.elementShape,e,"TensorList shape mismatch: "),this.size()===0?B.tensor([],[0].concat(this.elementShape)):B.tidy(function(){var r=i.tensors.map(function(a){return B.reshape(a,e)});return B.concat(r,0)})},n}();function DW(n,t,e){var i=n.dtype;if(n.shape.length<1)throw new Error("Tensor must be at least a vector, but saw shape: "+n.shape);if(n.dtype!==e)throw new Error("Invalid data types; op elements "+n.dtype+", but list elements "+e);var r=n.shape.slice(1);hn(r,t,"TensorList shape mismatch: ");var a=B.unstack(n);return new To(a,t,i)}function kW(n,t,e){return new To([],n,t,e)}function FW(n,t,e,i){if(t.length!==n.shape[0])throw new Error("Expected len(indices) == tensor.shape[0], but saw: "+t.length+" vs. "+n.shape[0]);var r=Math.max.apply(Math,t);if(i!=null&&i!==-1&&r>=i)throw new Error("Max index must be < array size ("+r+" vs. "+i+")");var a=new To([],e,n.dtype,i),s=B.unstack(n,0);return t.forEach(function(o,l){a.setItem(o,s[l])}),a}function WW(n,t,e){var i=0,r=t.map(function(u){return i+=u,i});if(i!==n.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is `+i+", and tensor's shape is: "+n.shape);for(var a=i===0?0:n.size/i,s=B.tidy(function(){var u=[];n=B.reshape(n,[1,i,a]);for(var c=0;c1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")},n.prototype.nextIteration=function(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;var t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")},n.prototype.getWeight=function(t){return this.weightMap[t]},n.prototype.addTensorArray=function(t){this.tensorArrayMap[t.id]=t},n.prototype.getTensorArray=function(t){return this.tensorArrayMap[t]},n.prototype.addTensorList=function(t){this.tensorListMap[t.id]=t},n.prototype.getTensorList=function(t){return this.tensorListMap[t]},n.prototype.dispose=function(t){for(var e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(var e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)},n}();function nw(n,t,e,i){var r=new Set,a=[],s=null,o=null,l=new Set,u=Object.keys(n).map(function(p){return jt(p)[0]}),c=[];i!=null&&(c=i.map(function(p){return jt(p.name)[0]}));for(var h=t.slice();h.length>0;){var d=h.pop();if((tw(d)||ZW(d))&&(s==null&&(s=d,o=s.children.map(function(p){return p.name}).filter(function(p){return r.has(p)}))),r.add(d.name),e[d.name]!=null)continue;if(u.indexOf(d.name)!==-1)continue;if(c.indexOf(d.name)!==-1)continue;if(d.inputs.length===0){a.push(d.name);continue}d.inputs.forEach(function(p){if(l.has(p.name))return;l.add(p.name),h.push(p)})}return{inputs:n,outputs:t,usedNodes:r,missingInputs:a,dynamicNode:s,syncInputs:o}}function QW(n,t,e){var i=e.usedNodes,r=e.inputs,a=[],s=Object.keys(r).map(function(h){return jt(h)[0]}).map(function(h){return n.nodes[h]}),o=n.initNodes;s.forEach(function(h){i.has(h.name)&&a.push(h)}),n.weights.forEach(function(h){i.has(h.name)&&a.push(h)}),o!=null&&o.forEach(function(h){i.has(h.name)&&a.push(h)});for(var l=new Set,u=[];a.length>0;){var c=a.pop();l.add(c.name),t[c.name]||u.push(c),c.children.forEach(function(h){!l.has(h.name)&&i.has(h.name)&&h.inputs.every(function(d){return l.has(d.name)})&&a.push(h)})}return u}var eU=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],tU=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"];function tw(n){return eU.indexOf(n.op)>=0}function ZW(n){return tU.indexOf(n.op)>=0}var iw=function(){function n(t,e){var i=this;this.graph=t,this.parent=e,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(function(r){i._functionExecutorMap[r]=new n(t.functions[r],i)})}return Object.defineProperty(n.prototype,"weightIds",{get:function(){return this.parent?this.parent.weightIds:this._weightIds},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"functionExecutorMap",{get:function(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"weightMap",{get:function(){return this.parent?this.parent.weightMap:this._weightMap},set:function(t){var e=Object.keys(t).map(function(i){return t[i].map(function(r){return r.id})});this._weightIds=[].concat.apply([],e),this._weightMap=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputs",{get:function(){return this._inputs.map(function(t){return{name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}})},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"outputs",{get:function(){return this._outputs.map(function(t){return{name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}})},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputNodes",{get:function(){return this._inputs.map(function(t){return t.signatureKey||t.name})},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"outputNodes",{get:function(){return this._outputs.map(function(t){var e=t.signatureKey||t.name;return t.defaultOutput?e+":"+t.defaultOutput:e})},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"functions",{get:function(){var t=this;return Object.keys(this._functions).reduce(function(e,i){return e[i]=t._functions[i].signature,e},{})},enumerable:!0,configurable:!0}),n.prototype.getCompilationKey=function(t,e){var i=t.map(function(a){return a.name}).sort(),r=e.map(function(a){return a.name}).sort();return i.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)},n.prototype.compile=function(t,e){var i=nw(t,e,this.weightMap,this._initNodes),r=i.missingInputs,a=i.dynamicNode,s=i.syncInputs;if(a!=null)throw new Error("This execution contains the node '"+a.name+"', which has "+("the dynamic op '"+a.op+"'. Please use ")+"model.executeAsync() instead. Alternatively, to avoid the "+("dynamic ops, specify the inputs ["+s+"]"));if(r.length>0){var o=e.map(function(u){return u.name}),l=Object.keys(t);throw new Error("Cannot compute the outputs ["+o+"] from the provided inputs "+("["+l+"]. Missing the following inputs: ["+r+"]"))}return QW(this.graph,this.weightMap,i)},n.prototype.execute=function(t,e){var i=this;t=this.mapInputs(t);var r=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);var a=r.map(function(d){return i.graph.nodes[jt(d)[0]]}),s=e.map(function(d){return jt(d)[0]}),o=s.map(function(d){return i.graph.nodes[d]});o.length===0&&(o=this._outputs);var l=this.getCompilationKey(a,o),u=this.compiledMap.get(l);u==null&&(u=this.compile(t,o),this.compiledMap.set(l,u));var c={},h={};return B.tidy(function(){var d=new ew(i.weightMap,c,h,i.functionExecutorMap),p=Gb({},i.weightMap);Object.keys(t).forEach(function(w){var S=jt(w),L=S[0],x=S[1],C=[];C[x]=t[w],p[L]=C});for(var f=i.getFrozenTensorIds(p),m={},g=0;g0?(w=this.processStack(s,f,e,m,b,v,o,g,c),[4,Promise.all(w)]):[3,3];case 2:return C.sent(),[3,1];case 3:if(d==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead."),S=l.filter(function(R){return!tw(R)&&!Ht(R.name,m,e)}).map(function(R){return R.name}),S.length>0)throw L="",d!=null&&(L="Alternatively, to avoid the dynamic ops, use model.execute() "+("and specify the inputs ["+p+"]")),new Error("Cannot compute the outputs ["+S+"] from the provided "+("inputs ["+a+"]. Consider providing the following inputs: ")+("["+h+"]. "+L));return[2,m]}})})},n.prototype.processStack=function(t,e,i,r,a,s,o,l,u){for(var c=this,h=[],d=function(){var f=e.pop();i.currentContext=f.contexts;var m="";if(f.node.op==="Enter"&&A("isConstant",f.node,r,i)&&(m=Jn(f.node.name,i)[0]),t.indexOf(f.node)===-1){var g=Qb(f.node,r,i);m||(m=Jn(f.node.name,i)[0]);var v=i.currentContext;g instanceof Promise?h.push(g.then(function(b){return r[m]=b,i.currentContext=v,c.checkTensorForDisposal(m,f.node,r,i,s,o,l),c.processChildNodes(f.node,e,i,r,a,u),b})):(r[m]=g,p.checkTensorForDisposal(m,f.node,r,i,s,o,l),p.processChildNodes(f.node,e,i,r,a,u))}else p.processChildNodes(f.node,e,i,r,a,u)},p=this;e.length>0;)d();return h},n.prototype.processChildNodes=function(t,e,i,r,a,s){t.children.forEach(function(o){var l=Jn(o.name,i)[0];if(a[l]||!s.has(o.name))return;o.op==="Merge"?o.inputNames.some(function(u){return!!Ht(u,r,i)})&&(a[l]=!0,e.push({contexts:i.currentContext,node:o})):o.inputNames.every(function(u){return!!Ht(u,r,i)})&&(a[l]=!0,e.push({contexts:i.currentContext,node:o}))})},n.prototype.dispose=function(){var t=this;Object.keys(this.weightMap).forEach(function(e){return t.weightMap[e].forEach(function(i){return i.dispose()})})},n.prototype.checkInputShapeAndType=function(t){var e=this;Object.keys(t).forEach(function(i){var r=t[i],a=jt(i)[0],s=e.graph.nodes[a];if(s.attrParams.shape&&s.attrParams.shape.value){var o=s.attrParams.shape.value,l=o.length===r.shape.length&&r.shape.every(function(u,c){return o[c]===-1||o[c]===u});B.util.assert(l,function(){return"The shape of dict['"+s.name+"'] provided in "+("model.execute(dict) must be ["+o+"], but was ")+("["+r.shape+"]")})}s.attrParams.dtype&&s.attrParams.dtype.value&&B.util.assert(r.dtype===s.attrParams.dtype.value,function(){return"The dtype of dict['"+s.name+"'] provided in model.execute(dict) must be "+(s.attrParams.dtype.value+", but was "+r.dtype)})})},n.prototype.mapInputs=function(t){var e={};for(var i in t)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[i]!=null){var r=this._signature.inputs[i];e[r.name]=t[i]}else e[i]=t[i];return e},n.prototype.checkInputs=function(t){var e=this,i=Object.keys(t).filter(function(r){var a=jt(r)[0];return e.graph.nodes[a]==null});if(i.length>0)throw new Error("The dict provided in model.execute(dict) has "+("keys: ["+i+"] that are not part of graph"))},n.prototype.mapOutputs=function(t){var e=this;return t.map(function(i){if(e._signature!=null&&e._signature.outputs!=null&&e._signature.outputs[i]!=null){var r=e._signature.outputs[i];return r.name}return i},{})},n.prototype.checkOutputs=function(t){var e=this;t.forEach(function(i){var r=jt(i)[0];if(!e.graph.nodes[r])throw new Error("The output '"+i+"' is not found in the graph")})},n}();var nU="?tfjs-format=file",iU="model.json",rw=function(){function n(t,e){e===void 0&&(e={}),this.modelUrl=t,this.loadOptions=e,this.version="n/a",e==null&&(this.loadOptions={})}return Object.defineProperty(n.prototype,"modelVersion",{get:function(){return this.version},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputNodes",{get:function(){return this.executor.inputNodes},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"outputNodes",{get:function(){return this.executor.outputNodes},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputs",{get:function(){return this.executor.inputs},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"outputs",{get:function(){return this.executor.outputs},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"weights",{get:function(){return this.executor.weightMap},enumerable:!0,configurable:!0}),n.prototype.findIOHandler=function(){var t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=B.io.browserHTTPRequest(t,this.loadOptions);else{var e=B.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(B.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error("Found more than one ("+e.length+") load handlers for "+("URL '"+[t]+"'"));this.handler=e[0]}},n.prototype.load=function(){return zn(this,void 0,void 0,function(){var t;return Sn(this,function(e){switch(e.label){case 0:if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");return[4,this.handler.load()];case 1:return t=e.sent(),[2,this.loadSync(t)]}})})},n.prototype.loadSync=function(t){this.artifacts=t;var e=this.artifacts.modelTopology,i={};this.artifacts.userDefinedMetadata!=null&&(i=this.artifacts.userDefinedMetadata.signature),this.version=e.versions.producer+"."+e.versions.minConsumer;var r=B.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new iw($b.Instance.transformGraph(e,i)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),t.modelInitializer!=null){var a=$b.Instance.transformGraph(t.modelInitializer);this.initializer=new iw(a),this.initializer.weightMap=this.executor.weightMap,this.initializer.execute({},[])}return!0},n.prototype.save=function(t,e){return zn(this,void 0,void 0,function(){var i;return Sn(this,function(r){if(typeof t=="string"){if(i=B.io.getSaveHandlers(t),i.length===0)throw new Error("Cannot find any save handlers for URL '"+t+"'");if(i.length>1)throw new Error("Found more than one ("+i.length+") save handlers for "+("URL '"+t+"'"));t=i[0]}if(t.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return[2,t.save(this.artifacts)]})})},n.prototype.predict=function(t,e){return this.execute(t,this.outputNodes)},n.prototype.normalizeInputs=function(t){if(!(t instanceof B.Tensor)&&!Array.isArray(t))return t;if(t=Array.isArray(t)?t:[t],t.length!==this.inputNodes.length)throw new Error("Input tensor count mismatch,"+("the graph model has "+this.inputNodes.length+" placeholders, ")+("while there are "+t.length+" input tensors."));return this.inputNodes.reduce(function(e,i,r){return e[i]=t[r],e},{})},n.prototype.normalizeOutputs=function(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]},n.prototype.execute=function(t,e){t=this.normalizeInputs(t),e=this.normalizeOutputs(e);var i=this.executor.execute(t,e);return i.length>1?i:i[0]},n.prototype.executeAsync=function(t,e){return zn(this,void 0,void 0,function(){var i;return Sn(this,function(r){switch(r.label){case 0:return t=this.normalizeInputs(t),e=this.normalizeOutputs(e),[4,this.executor.executeAsync(t,e)];case 1:return i=r.sent(),[2,i.length>1?i:i[0]]}})})},n.prototype.convertTensorMapToTensorsMap=function(t){return Object.keys(t).reduce(function(e,i){return e[i]=[t[i]],e},{})},n.prototype.dispose=function(){this.executor.dispose(),this.initializer&&this.initializer.dispose()},n}();function rU(n,t){return t===void 0&&(t={}),zn(this,void 0,void 0,function(){var e;return Sn(this,function(i){switch(i.label){case 0:if(n==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");return t==null&&(t={}),t.fromTFHub&&(n.load==null&&(n.endsWith("/")||(n=n+"/"),n=""+n+iU+nU)),e=new rw(n,t),[4,e.load()];case 1:return i.sent(),[2,e]}})})}var aU="2.6.0";ir.GraphModel=rw;ir.deregisterOp=YF;ir.loadGraphModel=rU;ir.registerOp=GF;ir.version_converter=aU});var sw=be(()=>{});var Nw=be(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});var Ne=$i();var od=function(n,t){return od=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,i){e.__proto__=i}||function(e,i){for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])},od(n,t)};function Ve(n,t){od(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function se(n,t,e,i){return new(e||(e=Promise))(function(r,a){function s(u){try{l(i.next(u))}catch(c){a(c)}}function o(u){try{l(i.throw(u))}catch(c){a(c)}}function l(u){u.done?r(u.value):new e(function(c){c(u.value)}).then(s,o)}l((i=i.apply(n,t||[])).next())})}function oe(n,t){var e={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,r,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(u){return function(c){return l([u,c])}}function l(u){if(i)throw new TypeError("Generator is already executing.");for(;e;)try{if(i=1,r&&(a=u[0]&2?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;(r=0,a)&&(u=[u[0]&2,a.value]);switch(u[0]){case 0:case 1:a=u;break;case 4:return e.label++,{value:u[1],done:!1};case 5:e.label++,r=u[1],u=[0];continue;case 7:u=e.ops.pop(),e.trys.pop();continue;default:if(!(a=e.trys,a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]>>0,d-=l,d*=l,l=d>>>0,d-=l,l+=d*4294967296}return(l>>>0)*23283064365386963e-26};return u}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.alea=s})(Kr,n,!1)}),oU=rr(function(n){(function(t,e,i){function r(o){var l=this,u="";l.x=0,l.y=0,l.z=0,l.w=0,l.next=function(){var h=l.x^l.x<<11;return l.x=l.y,l.y=l.z,l.z=l.w,l.w^=l.w>>>19^h^h>>>8},o===(o|0)?l.x=o:u+=o;for(var c=0;c>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xor128=s})(Kr,n,!1)}),lU=rr(function(n){(function(t,e,i){function r(o){var l=this,u="";l.next=function(){var h=l.x^l.x>>>2;return l.x=l.y,l.y=l.z,l.z=l.w,l.w=l.v,(l.d=l.d+362437|0)+(l.v=l.v^l.v<<4^(h^h<<1))|0},l.x=0,l.y=0,l.z=0,l.w=0,l.v=0,o===(o|0)?l.x=o:u+=o;for(var c=0;c>>4),l.next()}function a(o,l){return l.x=o.x,l.y=o.y,l.z=o.z,l.w=o.w,l.v=o.v,l.d=o.d,l}function s(o,l){var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xorwow=s})(Kr,n,!1)}),uU=rr(function(n){(function(t,e,i){function r(o){var l=this;l.next=function(){var c=l.x,h=l.i,d,p;return d=c[h],d^=d>>>7,p=d^d<<24,d=c[h+1&7],p^=d^d>>>10,d=c[h+3&7],p^=d^d>>>3,d=c[h+4&7],p^=d^d<<7,d=c[h+7&7],d=d^d<<13,p^=d^d<<9,c[h]=p,l.i=h+1&7,p};function u(c,h){var d,p,f=[];if(h===(h|0))p=f[0]=h;else for(h=""+h,d=0;d0;--d)c.next()}u(l,o)}function a(o,l){return l.x=o.x.slice(),l.i=o.i,l}function s(o,l){o==null&&(o=+new Date);var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(c.x&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xorshift7=s})(Kr,n,!1)}),cU=rr(function(n){(function(t,e,i){function r(o){var l=this;l.next=function(){var c=l.w,h=l.X,d=l.i,p,f;return l.w=c=c+1640531527|0,f=h[d+34&127],p=h[d=d+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,f=h[d]=f^p,l.i=d,f+(c^c>>>16)|0};function u(c,h){var d,p,f,m,g,v=[],b=128;for(h===(h|0)?(p=h,h=null):(h=h+"\0",p=0,b=Math.max(b,h.length)),f=0,m=-32;m>>15,p^=p<<4,p^=p>>>13,m>=0&&(g=g+1640531527|0,d=v[m&127]^=p+g,f=d==0?f+1:0);for(f>=128&&(v[(h&&h.length||0)&127]=-1),f=127,m=4*128;m>0;--m)p=v[f+34&127],d=v[f=f+1&127],p^=p<<13,d^=d<<17,p^=p>>>15,d^=d>>>12,v[f]=p^d;c.w=g,c.X=v,c.i=f}u(l,o)}function a(o,l){return l.i=o.i,l.w=o.w,l.X=o.X.slice(),l}function s(o,l){o==null&&(o=+new Date);var u=new r(o),c=l&&l.state,h=function(){return(u.next()>>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(c.X&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.xor4096=s})(Kr,n,!1)}),hU=rr(function(n){(function(t,e,i){function r(o){var l=this,u="";l.next=function(){var h=l.b,d=l.c,p=l.d,f=l.a;return h=h<<25^h>>>7^d,d=d-p|0,p=p<<24^p>>>8^f,f=f-h|0,l.b=h=h<<20^h>>>12^d,l.c=d=d-p|0,l.d=p<<16^d>>>16^f,l.a=f-h|0},l.a=0,l.b=0,l.c=2654435769|0,l.d=1367130551,o===Math.floor(o)?(l.a=o/4294967296|0,l.b=o|0):u+=o;for(var c=0;c>>0)/4294967296};return h.double=function(){do var d=u.next()>>>11,p=(u.next()>>>0)/4294967296,f=(d+p)/(1<<21);while(f===0);return f},h.int32=u.next,h.quick=h,c&&(typeof c=="object"&&a(c,u),h.state=function(){return a(u,{})}),h}e&&e.exports?e.exports=s:i&&i.amd?i(function(){return s}):this.tychei=s})(Kr,n,!1)}),ar=rr(function(n){(function(t,e){var i=this,r=256,a=6,s=52,o="random",l=e.pow(r,a),u=e.pow(2,s),c=u*2,h=r-1,d;function p(S,L,x){var C=[];L=L==!0?{entropy:!0}:L||{};var R=v(g(L.entropy?[S,w(t)]:S??b(),3),C),D=new f(C),k=function(){for(var W=D.g(a),F=l,P=0;W=c;)W/=2,F/=2,P>>>=1;return(W+P)/F};return k.int32=function(){return D.g(4)|0},k.quick=function(){return D.g(4)/4294967296},k.double=k,v(w(D.S),t),(L.pass||x||function(W,F,P,H){return H&&(H.S&&m(H,D),W.state=function(){return m(D,{})}),P?(e[o]=W,F):W})(k,R,"global"in L?L.global:this==e,L.state)}e["seed"+o]=p;function f(S){var L,x=S.length,C=this,R=0,D=C.i=C.j=0,k=C.S=[];for(x||(S=[x++]);R=this.items.length?[2,{value:null,done:!0}]:(e=this.items[this.trav],this.trav++,[2,{value:yU(e),done:!1}])})})},t}(Nt),SU=function(n){Ve(t,n);function t(e){var i=n.call(this)||this;return i.nextFn=e,i}return t.prototype.summary=function(){return"Function call"},t.prototype.next=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){try{return[2,this.nextFn()]}catch(i){throw i.message="Error thrown while iterating through a dataset: "+i.message,i}return[2]})})},t}(Nt),TU=function(n){Ve(t,n);function t(e){var i=n.call(this)||this;return i.upstream=e,i.lastRead=Promise.resolve({value:null,done:!1}),i}return t.prototype.summary=function(){return this.upstream.summary()+" -> Serial"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return[2,this.upstream.next()]})})},t}(Nt),NU=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.maxCount=i,r.count=0,r.lastRead=Promise.resolve({value:null,done:!1}),r}return t.prototype.summary=function(){return this.upstream.summary()+" -> Skip"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){var e;return oe(this,function(i){switch(i.label){case 0:return this.count++ Take"},t.prototype.next=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return this.count++>=this.maxCount?[2,{value:null,done:!0}]:[2,this.upstream.next()]})})},t}(Nt),CU=function(n){Ve(t,n);function t(e,i,r){r===void 0&&(r=!0);var a=n.call(this)||this;return a.upstream=e,a.batchSize=i,a.enableSmallLastBatch=r,a.lastRead=Promise.resolve({value:null,done:!1}),a}return t.prototype.summary=function(){return this.upstream.summary()+" -> RowMajorBatch"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){var e,i;return oe(this,function(r){switch(r.label){case 0:e=[],r.label=1;case 1:return e.length0?[2,{value:e,done:!1}]:[2,{value:null,done:!0}]:(e.push(i.value),[3,1]);case 3:return[2,{value:e,done:!1}]}})})},t}(Nt),RU=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.predicate=i,r.lastRead=Promise.resolve({value:null,done:!1}),r}return t.prototype.summary=function(){return this.upstream.summary()+" -> Filter"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){var e;return oe(this,function(i){switch(i.label){case 0:return[4,this.upstream.next()];case 1:return e=i.sent(),e.done||this.predicate(e.value)?[2,e]:(Ne.dispose(e.value),[3,0]);case 2:return[2]}})})},t}(Nt),OU=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.transform=i,r}return t.prototype.summary=function(){return this.upstream.summary()+" -> Map"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e,i,r,a,s,o,l;return oe(this,function(u){switch(u.label){case 0:return[4,this.upstream.next()];case 1:if(e=u.sent(),e.done)return[2,{value:null,done:!0}];for(i=Ne.tensor_util.getTensorsInContainer(e.value),r=this.transform(e.value),a=Ne.tensor_util.getTensorsInContainer(r),s=0,o=i;s handleErrors"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){var e;return oe(this,function(i){switch(i.label){case 0:i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.upstream.next()];case 2:return[2,i.sent()];case 3:return e=i.sent(),this.handler(e)?[3,4]:[2,{value:null,done:!0}];case 4:return[3,0];case 5:return[2]}})})},t}(Nt),fw=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.transform=i,r}return t.prototype.summary=function(){return this.upstream.summary()+" -> AsyncMap"},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e,i,r,a,s,o,l;return oe(this,function(u){switch(u.label){case 0:return[4,this.upstream.next()];case 1:return e=u.sent(),e.done?[2,{value:null,done:!0}]:(i=Ne.tensor_util.getTensorsInContainer(e.value),[4,this.transform(e.value)]);case 2:for(r=u.sent(),a=Ne.tensor_util.getTensorsInContainer(r),s=0,o=i;s Flatmap"},t.prototype.pump=function(){return se(this,void 0,void 0,function(){var e,i,r,a,s,o,l;return oe(this,function(u){switch(u.label){case 0:return[4,this.upstream.next()];case 1:if(e=u.sent(),e.done)return[2,!1];for(i=Ne.tensor_util.getTensorsInContainer(e.value),r=this.transform(e.value),a=Ne.tensor_util.getTensorsInContainer(r),this.outputQueue.pushAll(r),s=0,o=i;s Chained"},t.prototype.next=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return this.lastRead=this.readFromChain(this.lastRead),[2,this.lastRead]})})},t.prototype.readFromChain=function(e){return se(this,void 0,void 0,function(){var i,r;return oe(this,function(a){switch(a.label){case 0:return[4,e];case 1:return a.sent(),this.iterator==null?[4,this.moreIterators.next()]:[3,3];case 2:if(i=a.sent(),i.done)return[2,{value:null,done:!0}];this.iterator=i.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler)),a.label=3;case 3:return[4,this.iterator.next()];case 4:return r=a.sent(),r.done?(this.iterator=null,[2,this.readFromChain(e)]):[2,r]}})})},t}(Nt),Li;(function(n){n[n.FAIL=0]="FAIL",n[n.SHORTEST=1]="SHORTEST",n[n.LONGEST=2]="LONGEST"})(Li||(Li={}));var IU=function(n){Ve(t,n);function t(e,i){i===void 0&&(i=Li.FAIL);var r=n.call(this)||this;return r.iterators=e,r.mismatchMode=i,r.count=0,r.currentPromise=null,r}return t.prototype.summary=function(){var e="TODO: fill in upstream of zip summaries";return"{"+e+"} -> Zip"},t.prototype.nextState=function(e){return se(this,void 0,void 0,function(){function i(o){if(o instanceof Nt){var l=o.next();return{value:l.then(function(u){return r++,u.done&&a++,u.value}),recurse:!1}}else return{value:null,recurse:!0}}var r,a,s;return oe(this,function(o){switch(o.label){case 0:return[4,e];case 1:return o.sent(),r=0,a=0,[4,cw(this.iterators,i)];case 2:if(s=o.sent(),r===a)return[2,{value:null,done:!0}];if(a>0)switch(this.mismatchMode){case Li.FAIL:throw new Error("Zipped streams should have the same length. "+("Mismatched at element "+this.count+"."));case Li.SHORTEST:return[2,{value:null,done:!0}];case Li.LONGEST:}return this.count++,[2,{value:s,done:!1}]}})})},t.prototype.next=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return this.currentPromise=this.nextState(this.currentPromise),[2,this.currentPromise]})})},t}(Nt),mw=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.bufferSize=i,r.buffer=new hw(i),r}return t.prototype.summary=function(){return this.upstream.summary()+" -> Prefetch"},t.prototype.refill=function(){for(;!this.buffer.isFull();){var e=this.upstream.next();this.buffer.push(e)}},t.prototype.next=function(){return this.refill(),this.buffer.shift()},t}(Nt),kU=function(n){Ve(t,n);function t(e,i,r){var a=n.call(this,e,i)||this;return a.upstream=e,a.windowSize=i,a.upstreamExhausted=!1,a.random=ow(r||Ne.util.now().toString()),a.lastRead=Promise.resolve({value:null,done:!1}),a}return t.prototype.next=function(){return se(this,void 0,void 0,function(){var e=this;return oe(this,function(i){return this.lastRead=this.lastRead.then(function(){return e.serialNext()}),[2,this.lastRead]})})},t.prototype.randomInt=function(e){return Math.floor(this.random()*e)},t.prototype.chooseIndex=function(){return this.randomInt(this.buffer.length())},t.prototype.serialNext=function(){return se(this,void 0,void 0,function(){var e,i;return oe(this,function(r){switch(r.label){case 0:this.upstreamExhausted||this.refill(),r.label=1;case 1:return this.buffer.isEmpty()?[3,3]:(e=this.chooseIndex(),[4,this.buffer.shuffleExcise(e)]);case 2:if(i=r.sent(),i.done)this.upstreamExhausted=!0;else return this.refill(),[2,i];return[3,1];case 3:return[2,{value:null,done:!0}]}})})},t}(mw);var Ga=function(){function n(){this.size=null}return n.prototype.batch=function(t,e){var i=this;e===void 0&&(e=!0);var r=this;Ne.util.assert(t>0,function(){return`batchSize needs to be positive, but it is `+t});var a;return this.size===Infinity||this.size==null?a=this.size:e?a=Math.ceil(this.size/t):a=Math.floor(this.size/t),$t(function(){return se(i,void 0,void 0,function(){return oe(this,function(s){switch(s.label){case 0:return[4,r.iterator()];case 1:return[2,s.sent().columnMajorBatch(t,e,FU)]}})})},a)},n.prototype.concatenate=function(t){var e=this,i=this,r;return this.size===Infinity||t.size===Infinity?r=Infinity:this.size!=null&&t.size!=null?r=this.size+t.size:r=null,$t(function(){return se(e,void 0,void 0,function(){var a,s;return oe(this,function(o){switch(o.label){case 0:return[4,i.iterator()];case 1:return s=(a=o.sent()).concatenate,[4,t.iterator()];case 2:return[2,s.apply(a,[o.sent()])]}})})},r)},n.prototype.filter=function(t){var e=this,i=this,r;return this.size===Infinity?r=Infinity:r=null,$t(function(){return se(e,void 0,void 0,function(){return oe(this,function(a){switch(a.label){case 0:return[4,i.iterator()];case 1:return[2,a.sent().filter(function(s){return Ne.tidy(function(){return t(s)})})]}})})},r)},n.prototype.forEachAsync=function(t){return se(this,void 0,void 0,function(){return oe(this,function(e){switch(e.label){case 0:return[4,this.iterator()];case 1:return[2,e.sent().forEachAsync(t)]}})})},n.prototype.map=function(t){var e=this,i=this;return $t(function(){return se(e,void 0,void 0,function(){return oe(this,function(r){switch(r.label){case 0:return[4,i.iterator()];case 1:return[2,r.sent().map(function(a){return Ne.tidy(function(){return t(a)})})]}})})},this.size)},n.prototype.mapAsync=function(t){var e=this,i=this;return $t(function(){return se(e,void 0,void 0,function(){return oe(this,function(r){switch(r.label){case 0:return[4,i.iterator()];case 1:return[2,r.sent().mapAsync(t)]}})})},this.size)},n.prototype.prefetch=function(t){var e=this;if(t==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");var i=this;return $t(function(){return se(e,void 0,void 0,function(){return oe(this,function(r){switch(r.label){case 0:return[4,i.iterator()];case 1:return[2,r.sent().prefetch(t)]}})})},this.size)},n.prototype.repeat=function(t){var e=this,i=this,r;return this.size!=null&&t>0?r=this.size*t:t===0?r=0:this.size!=null&&(t===void 0||t<0)?r=Infinity:r=null,$t(function(){return se(e,void 0,void 0,function(){var a,s=this;return oe(this,function(o){return a=ld(function(){return se(s,void 0,void 0,function(){var l;return oe(this,function(u){switch(u.label){case 0:return l={},[4,i.iterator()];case 1:return[2,(l.value=u.sent(),l.done=!1,l)]}})})}),[2,LU(a.take(t))]})})},r)},n.prototype.skip=function(t){var e=this,i=this,r;return this.size!=null&&t>=0&&this.size>=t?r=this.size-t:this.size!=null&&(this.sizet?r=t:this.size!=null&&this.size<=t?r=this.size:r=null,$t(function(){return se(e,void 0,void 0,function(){return oe(this,function(a){switch(a.label){case 0:return[4,i.iterator()];case 1:return[2,a.sent().take(t)]}})})},r)},n.prototype.toArray=function(){return se(this,void 0,void 0,function(){return oe(this,function(t){switch(t.label){case 0:if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return[4,this.iterator()];case 1:return[2,t.sent().toArray()]}})})},n.prototype.toArrayForTest=function(){return se(this,void 0,void 0,function(){return oe(this,function(t){switch(t.label){case 0:if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return[4,this.iterator()];case 1:return[2,t.sent().toArrayForTest()]}})})},n.MAX_BUFFER_SIZE=1e4,n}();function $t(n,t){return t===void 0&&(t=null),new(function(e){Ve(i,e);function i(){var r=e!==null&&e.apply(this,arguments)||this;return r.size=t,r}return i.prototype.iterator=function(){return se(this,void 0,void 0,function(){return oe(this,function(r){return[2,n()]})})},i}(Ga))}function WU(n){var t=this;return $t(function(){return se(t,void 0,void 0,function(){return oe(this,function(e){return[2,dw(n)]})})},n.length)}function UU(n){var t=this;if(!jr(n))throw new Error("The argument to zip() must be an object or array.");var e;if(Array.isArray(n))for(var i=0;i1}),Ne.util.assert(r.length===0,function(){return"Duplicate column names found: "+r.toString()}),this.columnConfigs){for(a=0,s=Object.keys(this.columnConfigs);a14||!Number.isInteger(r))throw new Error("Invalid fftSize: it must be a power of 2 between "+("2 to 4 and 2 to 14, but got "+i.fftSize));if(i.numFrames=e.numFramesPerSpectrogram||43,i.sampleRateHz=e.sampleRateHz,i.columnTruncateLength=e.columnTruncateLength||i.fftSize,i.audioTrackConstraints=e.audioTrackConstraints,i.smoothingTimeConstant=e.smoothingTimeConstant||0,i.includeSpectrogram=!(e.includeSpectrogram===!1),i.includeWaveform=e.includeWaveform===!0,!i.includeSpectrogram&&!i.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.");return i}return t.prototype.summary=function(){return"microphone"},t.create=function(e){return e===void 0&&(e={}),se(this,void 0,void 0,function(){var i;return oe(this,function(r){switch(r.label){case 0:if(Ne.env().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");return i=new t(e),[4,i.start()];case 1:return r.sent(),[2,i]}})})},t.prototype.start=function(){return se(this,void 0,void 0,function(){var e,i,r,a;return oe(this,function(s){switch(s.label){case 0:return s.trys.push([0,2,,3]),e=this,[4,navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})];case 1:return e.stream=s.sent(),[3,3];case 2:throw i=s.sent(),new Error("Error thrown while initializing video stream: "+i.message);case 3:if(!this.stream)throw new Error("Could not obtain audio from microphone.");if(r=window.AudioContext||window.webkitAudioContext,this.audioContext=new r,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error("Mismatch in sampling rate: "+("Expected: "+this.sampleRateHz+"; ")+("Actual: "+this.audioContext.sampleRate));return a=this.audioContext.createMediaStreamSource(this.stream),this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,a.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize),[2]}})})},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e,i,r,a,s;return oe(this,function(o){switch(o.label){case 0:return this.isClosed?[2,{value:null,done:!0}]:[4,this.getAudioData()];case 1:return r=o.sent(),this.includeSpectrogram&&(a=this.flattenQueue(r.freqDataQueue),e=this.getTensorFromAudioDataArray(a,[this.numFrames,this.columnTruncateLength,1])),this.includeWaveform&&(s=this.flattenQueue(r.timeDataQueue),i=this.getTensorFromAudioDataArray(s,[this.numFrames*this.fftSize,1])),[2,{value:{spectrogram:e,waveform:i},done:!1}]}})})},t.prototype.capture=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){switch(e.label){case 0:return[4,this.next()];case 1:return[2,e.sent().value]}})})},t.prototype.getAudioData=function(){return se(this,void 0,void 0,function(){var e,i,r,a=this;return oe(this,function(s){return e=[],i=[],r=0,[2,new Promise(function(o){var l=setInterval(function(){a.includeSpectrogram&&(a.analyser.getFloatFrequencyData(a.freqData),a.freqData[0]===-Infinity&&o({freqDataQueue:e,timeDataQueue:i}),e.push(a.freqData.slice(0,a.columnTruncateLength))),a.includeWaveform&&(a.analyser.getFloatTimeDomainData(a.timeData),i.push(a.timeData.slice())),++r===a.numFrames&&(clearInterval(l),o({freqDataQueue:e,timeDataQueue:i}))},a.fftSize/a.sampleRateHz*1e3)})]})})},t.prototype.stop=function(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())},t.prototype.toArray=function(){throw new Error("Can not convert infinite audio stream to array.")},t.prototype.getSampleRate=function(){return this.sampleRateHz},t.prototype.flattenQueue=function(e){var i=e[0].length,r=new Float32Array(e.length*i);return e.forEach(function(a,s){return r.set(a,s*i)}),r},t.prototype.getTensorFromAudioDataArray=function(e,i){var r=new Float32Array(Ne.util.sizeFromShape(i));return r.set(e,r.length-e.length),Ne.tensor(r,i)},t}(Nt);var PU=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;if(r.webcamVideoElement=e,r.webcamConfig=i,r.isClosed=!0,r.resize=!1,r.needToResize())if(r.resize=!0,r.cropSize=[r.webcamConfig.resizeHeight,r.webcamConfig.resizeWidth],r.cropBoxInd=Ne.tensor1d([0],"int32"),r.webcamConfig.centerCrop){var a=r.webcamConfig.resizeWidth*1/r.webcamVideoElement.width,s=r.webcamConfig.resizeHeight*1/r.webcamVideoElement.height,o=(1-a)/2,l=(1-s)/2,u=o+a,c=s+l;r.cropBox=Ne.tensor2d([l,o,c,u],[1,4])}else r.cropBox=Ne.tensor2d([0,0,1,1],[1,4]);return r}return t.prototype.summary=function(){return"webcam"},t.create=function(e,i){return i===void 0&&(i={}),se(this,void 0,void 0,function(){var r;return oe(this,function(a){switch(a.label){case 0:if(Ne.env().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!i.resizeWidth||!i.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=i.resizeWidth,e.height=i.resizeHeight}return r=new t(e,i),[4,r.start()];case 1:return a.sent(),[2,r]}})})},t.prototype.start=function(){return se(this,void 0,void 0,function(){var e,i,r=this;return oe(this,function(a){switch(a.label){case 0:this.webcamConfig.facingMode&&Ne.util.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",function(){return"Invalid webcam facing mode: "+r.webcamConfig.facingMode+". Please provide 'user' or 'environment'"}),a.label=1;case 1:return a.trys.push([1,3,,4]),e=this,[4,navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})];case 2:return e.stream=a.sent(),[3,4];case 3:throw i=a.sent(),i.message="Error thrown while initializing video stream: "+i.message,i;case 4:if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(s){console.log(s),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,[2,new Promise(function(s){r.webcamVideoElement.onloadedmetadata=function(){s()}})]}})})},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e;return oe(this,function(i){if(this.isClosed)return[2,{value:null,done:!0}];try{e=Ne.browser.fromPixels(this.webcamVideoElement)}catch(r){throw new Error("Error thrown converting video to pixels: "+JSON.stringify(r))}if(this.resize)try{return[2,{value:this.cropAndResizeFrame(e),done:!1}]}catch(r){throw new Error("Error thrown cropping the video: "+r.message)}finally{e.dispose()}else return[2,{value:e,done:!1}];return[2]})})},t.prototype.needToResize=function(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))},t.prototype.cropAndResizeFrame=function(e){var i=this;return Ne.tidy(function(){var r=e.toFloat().expandDims(0),a;a=Ne.image.cropAndResize(r,i.cropBox,i.cropBoxInd,i.cropSize,"bilinear");var s=a.shape;return a.reshape(s.slice(1))})},t.prototype.capture=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){switch(e.label){case 0:return[4,this.next()];case 1:return[2,e.sent().value]}})})},t.prototype.stop=function(){var e=this.stream.getTracks();e.forEach(function(i){return i.stop()});try{this.webcamVideoElement.srcObject=null}catch(i){console.log(i),this.webcamVideoElement.src=null}this.isClosed=!0},t.prototype.toArray=function(){throw new Error("Can not convert infinite video stream to array.")},t}(Nt);var ww=function(){function n(){}return n}();var Sw=function(n){Ve(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.prototype.split=function(e){return new _U(this,e)},t}(Nt),_U=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.impl=new MU(e,i),r}return t.prototype.summary=function(){return this.impl.summary()},t.prototype.next=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return[2,this.impl.next()]})})},t}(Sw),MU=function(n){Ve(t,n);function t(e,i){var r=n.call(this)||this;return r.upstream=e,r.separator=i,r.carryover="",r}return t.prototype.summary=function(){return this.upstream.summary()+" -> Split('"+this.separator+"')"},t.prototype.pump=function(){return se(this,void 0,void 0,function(){var e,i,r,a,s;return oe(this,function(o){switch(o.label){case 0:return[4,this.upstream.next()];case 1:if(e=o.sent(),e.done)return this.carryover===""?[2,!1]:(this.outputQueue.push(this.carryover),this.carryover="",[2,!0]);for(i=e.value.split(this.separator),i[0]=this.carryover+i[0],r=0,a=i.slice(0,-1);r Utf8"},t.prototype.pump=function(){return se(this,void 0,void 0,function(){var e,i,r;return oe(this,function(a){switch(a.label){case 0:return[4,this.upstream.next()];case 1:return e=a.sent(),e.done?[2,!1]:(i=e.value,Ne.env().get("IS_BROWSER")?r=this.decoder.decode(i,{stream:!0}):r=this.decoder.write(Buffer.from(i.buffer)),this.outputQueue.push(r),[2,!0])}})})},t}(ud);var Lw=function(n){Ve(t,n);function t(e,i){i===void 0&&(i={});var r=n.call(this)||this;return r.file=e,r.options=i,Ne.util.assert(e instanceof Uint8Array||(Ne.env().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),function(){return"FileChunkIterator only supports File, Blob and Uint8Array right now."}),r.offset=i.offset||0,r.chunkSize=i.chunkSize||1024*1024,r}return t.prototype.summary=function(){return"FileChunks "+this.file},t.prototype.next=function(){return se(this,void 0,void 0,function(){var e,i,r=this;return oe(this,function(a){switch(a.label){case 0:return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?[2,{value:null,done:!0}]:(e=new Promise(function(s,o){var l=r.offset+r.chunkSize;if(r.file instanceof Uint8Array)s(new Uint8Array(r.file.slice(r.offset,l)));else{var u=new FileReader;u.onload=function(h){var d=u.result;if(d instanceof ArrayBuffer&&(d=new Uint8Array(d)),!(d instanceof Uint8Array))return o(new TypeError("FileReader returned unknown type."));s(d)},u.onabort=function(h){return o(new Error("Aborted"))},u.onerror=function(h){return o(new Error(h.type))};var c=r.file.slice(r.offset,l);u.readAsArrayBuffer(c)}r.offset=l}),i={},[4,e]);case 1:return[2,(i.value=a.sent(),i.done=!1,i)]}})})},t}(VU);function YU(n,t){return t===void 0&&(t={}),se(this,void 0,void 0,function(){var e,i,r,a,s;return oe(this,function(o){switch(o.label){case 0:return typeof n=="string"?e=n:(e=n.url,i=GU(n)),[4,Ne.util.fetch(e,i)];case 1:return r=o.sent(),r.ok?(s=Uint8Array.bind,[4,r.arrayBuffer()]):[3,3];case 2:return a=new(s.apply(Uint8Array,[void 0,o.sent()])),[2,new Lw(a,t)];case 3:throw new Error(r.statusText)}})})}var GU=function(n){var t={method:n.method,headers:n.headers,body:n.body,mode:n.mode,credentials:n.credentials,cache:n.cache,redirect:n.redirect,referrer:n.referrer,integrity:n.integrity};return t};function Iw(n){return typeof n=="string"&&n.substr(0,7)==="file://"}var Aw=function(n){Ve(t,n);function t(e,i){i===void 0&&(i={});var r=n.call(this)||this;return r.input=e,r.options=i,r}return t.prototype.iterator=function(){return se(this,void 0,void 0,function(){var e;return oe(this,function(i){return Iw(this.input)&&Ne.env().get("IS_NODE")&&(e=require("fs"),this.input=e.readFileSync(this.input.substr(7))),[2,new Lw(this.input,this.options)]})})},t}(ww);var Tw=function(n){Ve(t,n);function t(e,i){i===void 0&&(i={});var r=n.call(this)||this;return r.url=e,r.fileOptions=i,r}return t.prototype.iterator=function(){return se(this,void 0,void 0,function(){return oe(this,function(e){return Iw(this.url)?[2,new Aw(this.url,this.fileOptions).iterator()]:[2,YU(this.url,this.fileOptions)]})})},t}(ww);function KU(n,t){return t===void 0&&(t={}),new bw(new Tw(n),t)}function jU(n){var t=this,e=ld(n);return $t(function(){return se(t,void 0,void 0,function(){return oe(this,function(i){return[2,e]})})})}function $U(n){var t=this;return $t(function(){return se(t,void 0,void 0,function(){var e;return oe(this,function(i){switch(i.label){case 0:return[4,n()];case 1:return e=i.sent(),[2,ld(function(){return e.next()})]}})})})}function XU(n,t){return se(this,void 0,void 0,function(){return oe(this,function(e){return[2,PU.create(n,t)]})})}function JU(n){return se(this,void 0,void 0,function(){return oe(this,function(t){return[2,zU.create(n)]})})}var ZU="2.6.0";Vt.CSVDataset=bw;Vt.Dataset=Ga;Vt.FileDataSource=Aw;Vt.TextLineDataset=gw;Vt.URLDataSource=Tw;Vt.array=WU;Vt.csv=KU;Vt.func=jU;Vt.generator=$U;Vt.microphone=JU;Vt.version_data=ZU;Vt.webcam=XU;Vt.zip=UU});var Cw=be((xw,hd)=>{(function(n,t,e){function i(o){var l=this,u=s();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(o),l.s0<0&&(l.s0+=1),l.s1-=u(o),l.s1<0&&(l.s1+=1),l.s2-=u(o),l.s2<0&&(l.s2+=1),u=null}function r(o,l){return l.c=o.c,l.s0=o.s0,l.s1=o.s1,l.s2=o.s2,l}function a(o,l){var u=new i(o),c=l&&l.state,h=u.next;return h.int32=function(){return u.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&r(c,u),h.state=function(){return r(u,{})}),h}function s(){var o=4022871197,l=function(u){u=u.toString();for(var c=0;c>>0,h-=o,h*=o,o=h>>>0,h-=o,o+=h*4294967296}return(o>>>0)*23283064365386963e-26};return l}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.alea=a})(xw,typeof hd=="object"&&hd,typeof define=="function"&&define)});var Ow=be((Rw,dd)=>{(function(n,t,e){function i(s){var o=this,l="";o.x=0,o.y=0,o.z=0,o.w=0,o.next=function(){var c=o.x^o.x<<11;return o.x=o.y,o.y=o.z,o.z=o.w,o.w^=o.w>>>19^c^c>>>8},s===(s|0)?o.x=s:l+=s;for(var u=0;u>>0)/4294967296};return c.double=function(){do var h=l.next()>>>11,d=(l.next()>>>0)/4294967296,p=(h+d)/(1<<21);while(p===0);return p},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&r(u,l),c.state=function(){return r(l,{})}),c}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.xor128=a})(Rw,typeof dd=="object"&&dd,typeof define=="function"&&define)});var Dw=be((Ew,pd)=>{(function(n,t,e){function i(s){var o=this,l="";o.next=function(){var c=o.x^o.x>>>2;return o.x=o.y,o.y=o.z,o.z=o.w,o.w=o.v,(o.d=o.d+362437|0)+(o.v=o.v^o.v<<4^(c^c<<1))|0},o.x=0,o.y=0,o.z=0,o.w=0,o.v=0,s===(s|0)?o.x=s:l+=s;for(var u=0;u>>4),o.next()}function r(s,o){return o.x=s.x,o.y=s.y,o.z=s.z,o.w=s.w,o.v=s.v,o.d=s.d,o}function a(s,o){var l=new i(s),u=o&&o.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var h=l.next()>>>11,d=(l.next()>>>0)/4294967296,p=(h+d)/(1<<21);while(p===0);return p},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&r(u,l),c.state=function(){return r(l,{})}),c}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.xorwow=a})(Ew,typeof pd=="object"&&pd,typeof define=="function"&&define)});var Fw=be((kw,fd)=>{(function(n,t,e){function i(s){var o=this;o.next=function(){var u=o.x,c=o.i,h,d,p;return h=u[c],h^=h>>>7,d=h^h<<24,h=u[c+1&7],d^=h^h>>>10,h=u[c+3&7],d^=h^h>>>3,h=u[c+4&7],d^=h^h<<7,h=u[c+7&7],h=h^h<<13,d^=h^h<<9,u[c]=d,o.i=c+1&7,d};function l(u,c){var h,d,p=[];if(c===(c|0))d=p[0]=c;else for(c=""+c,h=0;h0;--h)u.next()}l(o,s)}function r(s,o){return o.x=s.x.slice(),o.i=s.i,o}function a(s,o){s==null&&(s=+new Date);var l=new i(s),u=o&&o.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var h=l.next()>>>11,d=(l.next()>>>0)/4294967296,p=(h+d)/(1<<21);while(p===0);return p},c.int32=l.next,c.quick=c,u&&(u.x&&r(u,l),c.state=function(){return r(l,{})}),c}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.xorshift7=a})(kw,typeof fd=="object"&&fd,typeof define=="function"&&define)});var Uw=be((Ww,md)=>{(function(n,t,e){function i(s){var o=this;o.next=function(){var u=o.w,c=o.X,h=o.i,d,p;return o.w=u=u+1640531527|0,p=c[h+34&127],d=c[h=h+1&127],p^=p<<13,d^=d<<17,p^=p>>>15,d^=d>>>12,p=c[h]=p^d,o.i=h,p+(u^u>>>16)|0};function l(u,c){var h,d,p,f,m,g=[],v=128;for(c===(c|0)?(d=c,c=null):(c=c+"\0",d=0,v=Math.max(v,c.length)),p=0,f=-32;f>>15,d^=d<<4,d^=d>>>13,f>=0&&(m=m+1640531527|0,h=g[f&127]^=d+m,p=h==0?p+1:0);for(p>=128&&(g[(c&&c.length||0)&127]=-1),p=127,f=4*128;f>0;--f)d=g[p+34&127],h=g[p=p+1&127],d^=d<<13,h^=h<<17,d^=d>>>15,h^=h>>>12,g[p]=d^h;u.w=m,u.X=g,u.i=p}l(o,s)}function r(s,o){return o.i=s.i,o.w=s.w,o.X=s.X.slice(),o}function a(s,o){s==null&&(s=+new Date);var l=new i(s),u=o&&o.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var h=l.next()>>>11,d=(l.next()>>>0)/4294967296,p=(h+d)/(1<<21);while(p===0);return p},c.int32=l.next,c.quick=c,u&&(u.X&&r(u,l),c.state=function(){return r(l,{})}),c}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.xor4096=a})(Ww,typeof md=="object"&&md,typeof define=="function"&&define)});var zw=be((Bw,gd)=>{(function(n,t,e){function i(s){var o=this,l="";o.next=function(){var c=o.b,h=o.c,d=o.d,p=o.a;return c=c<<25^c>>>7^h,h=h-d|0,d=d<<24^d>>>8^p,p=p-c|0,o.b=c=c<<20^c>>>12^h,o.c=h=h-d|0,o.d=d<<16^h>>>16^p,o.a=p-c|0},o.a=0,o.b=0,o.c=2654435769|0,o.d=1367130551,s===Math.floor(s)?(o.a=s/4294967296|0,o.b=s|0):l+=s;for(var u=0;u>>0)/4294967296};return c.double=function(){do var h=l.next()>>>11,d=(l.next()>>>0)/4294967296,p=(h+d)/(1<<21);while(p===0);return p},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&r(u,l),c.state=function(){return r(l,{})}),c}t&&t.exports?t.exports=a:e&&e.amd?e(function(){return a}):this.tychei=a})(Bw,typeof gd=="object"&&gd,typeof define=="function"&&define)});var Pw=be((xH,Ro)=>{(function(n,t){var e=this,i=256,r=6,a=52,s="random",o=t.pow(i,r),l=t.pow(2,a),u=l*2,c=i-1,h;function d(w,S,L){var x=[];S=S==!0?{entropy:!0}:S||{};var C=g(m(S.entropy?[w,b(n)]:w??v(),3),x),R=new p(x),D=function(){for(var k=R.g(r),W=o,F=0;k=u;)k/=2,W/=2,F>>>=1;return(k+F)/W};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),n),(S.pass||L||function(k,W,F,P){return P&&(P.S&&f(P,R),k.state=function(){return f(R,{})}),F?(t[s]=k,W):k})(D,C,"global"in S?S.global:this==t,S.state)}t["seed"+s]=d;function p(w){var S,L=w.length,x=this,C=0,R=x.i=x.j=0,D=x.S=[];for(L||(w=[L++]);C{var QU=Cw(),eB=Ow(),tB=Dw(),nB=Fw(),iB=Uw(),rB=zw(),sr=Pw();sr.alea=QU;sr.xor128=eB;sr.xorwow=tB;sr.xorshift7=nB;sr.xor4096=iB;sr.tychei=rB;_w.exports=sr});var p0=be(Ka=>{"use strict";Object.defineProperty(Ka,"__esModule",{value:!0});var T=$i(),aB=Mw();var vd=function(n,t){return vd=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,i){e.__proto__=i}||function(e,i){for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])},vd(n,t)};function sB(n,t){vd(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function Hw(n,t,e,i){function r(a){return a instanceof e?a:new e(function(s){s(a)})}return new(e||(e=Promise))(function(a,s){function o(c){try{u(i.next(c))}catch(h){s(h)}}function l(c){try{u(i.throw(c))}catch(h){s(h)}}function u(c){c.done?a(c.value):r(c.value).then(o,l)}u((i=i.apply(n,t||[])).next())})}function Vw(n,t){var e={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,r,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(u){return function(c){return l([u,c])}}function l(u){if(i)throw new TypeError("Generator is already executing.");for(;e;)try{if(i=1,r&&(a=u[0]&2?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;(r=0,a)&&(u=[u[0]&2,a.value]);switch(u[0]){case 0:case 1:a=u;break;case 4:return e.label++,{value:u[1],done:!1};case 5:e.label++,r=u[1],u=[0];continue;case 7:u=e.ops.pop(),e.trys.pop();continue;default:if(!(a=e.trys,a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]f&&(f=v,m=g)}c[d]=m}return l},t.prototype.cumsum=function(e,i,r,a){if(ae(e,"cumsum"),i!==e.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(e.rank-1)+" "+("but got axis="+i));for(var s=T.upcastType(e.dtype,"int32"),o=T.zeros(e.shape,s),l=this.readSync(o.dataId),u=this.readSync(e.dataId),c=e.shape[e.rank-1],h=a?function(g,v){return g+c-v-1}:function(g,v){return g+v},d=0;da?1:0})},t.prototype.greaterEqual=function(e,i){return ae([e,i],"greaterEqual"),this.broadcastedBinaryOp(e,i,"bool",function(r,a){return r>=a?1:0})},t.prototype.logicalAnd=function(e,i){return ae([e,i],"logicalAnd"),this.broadcastedBinaryOp(e,i,"bool",function(r,a){return r&&a})},t.prototype.logicalOr=function(e,i){return ae([e,i],"logicalOr"),this.broadcastedBinaryOp(e,i,"bool",function(r,a){return r||a})},t.prototype.select=function(e,i,r){ae([e,i,r],"select");for(var a=this.readSync(e.dataId),s=this.readSync(i.dataId),o=this.readSync(r.dataId),l=T.zeros(i.shape,T.upcastType(i.dtype,r.dtype)),u=this.readSync(l.dataId),c=0,h=e.rank===0||e.rank>1||i.rank===1?1:T.util.sizeFromShape(i.shape.slice(1)),d=0;d=0&&a>=0?s:(s+a)%a})},t.prototype.maximum=function(e,i){return ae([e,i],"maximum"),this.broadcastedBinaryOp(e,i,e.dtype,function(r,a){return Math.max(r,a)})},t.prototype.all=function(e,i){ae(e,"all"),T.backend_util.assertAxesAreInnerMostDims("all",i,e.rank);for(var r=T.backend_util.computeOutAndReduceShapes(e.shape,i),a=r[0],s=r[1],o=T.zeros(a,e.dtype),l=T.util.sizeFromShape(s),u=this.readSync(o.dataId),c=this.readSync(e.dataId),h=0;h=1?r[o]=s[o]:r[o]=s[o]*(l+1)}return this.makeOutput(r,i.shape,"float32")},t.prototype.atan2=function(e,i){return ae([e,i],"atan2"),this.broadcastedBinaryOp(e,i,e.dtype,function(r,a){return Math.atan2(r,a)})},t.prototype.fusedConv2d=function(e){var i=e.input,r=e.filter,a=e.convInfo,s=e.bias,o=e.activation,l=e.preluActivationWeights,u=this.conv2d(i,r,a);return s&&(u=T.add(u,s)),o&&(u=yd(this,u,o,l)),u},t.prototype.conv2d=function(e,i,r){ae([e,i],"conv2d");for(var a=r.filterHeight,s=r.filterWidth,o=r.dilationHeight,l=r.dilationWidth,u=r.padInfo.left,c=r.padInfo.top,h=r.dataFormat==="channelsLast",d=T.buffer(r.outShape,e.dtype),p=e.strides[0],f=h?e.strides[1]:e.strides[2],m=h?e.strides[2]:1,g=h?1:e.strides[1],v=d.strides[0],b=h?d.strides[1]:d.strides[2],w=h?d.strides[2]:1,S=h?1:d.strides[1],L=this.readSync(e.dataId),x=this.readSync(i.dataId),C=d.values,R=0;R=r.inHeight)continue;for(var K=H*i.strides[0],j=D+_*f,q=0;q=r.inWidth)continue;for(var ne=K+X*i.strides[1],ie=j+ee*m,te=ne,re=0;re=r.inDepth)continue;for(var k=R*i.strides[0],W=w+D*e.strides[1],F=0;F=r.inHeight)continue;for(var j=k+_*i.strides[1],q=W+K*e.strides[2],G=0;G=r.inWidth)continue;for(var ie=j+ee*i.strides[2],te=q+ne*r.inChannels,re=ie,le=0;le=r.inHeight)continue;for(var R=x*i.strides[0],D=v+C*e.strides[1],k=0;k=r.inWidth)continue;for(var _=R+P*i.strides[1],K=D+H*r.inChannels,j=W,q=_,G=0;Ghe?he=We:r==="avg"&&(ye+=We,Oe++),isNaN(he))break}if(isNaN(he))break}if(isNaN(he))break}var me=le+F;S[me]=r==="avg"?ye/Oe:he}}}return w.toTensor()},t.prototype.avgPool3d=function(e,i){return ae(e,"avgPool3d"),this.pool3d(e,i,"avg").toFloat()},t.prototype.avgPool3dBackprop=function(e,i,r){ae([e,i],"avgPool3dBackprop");for(var a=r.strideDepth,s=r.strideHeight,o=r.strideWidth,l=r.filterDepth,u=r.filterHeight,c=r.filterWidth,h=r.dilationDepth,d=r.dilationHeight,p=r.dilationWidth,f=r.effectiveFilterDepth,m=r.effectiveFilterHeight,g=r.effectiveFilterWidth,v=f-1-r.padInfo.front,b=g-1-r.padInfo.left,w=m-1-r.padInfo.top,S=T.buffer(i.shape,"float32"),L=1/(l*u*c),x=this.bufferSync(e),C=0;C=r.outDepth||Math.floor(j)!==j)continue;for(var q=0;q=r.outHeight||Math.floor(G)!==G)continue;for(var Z=0;Z=r.outWidth||Math.floor(X)!==X)continue;var ee=x.get(C,j,G,X,R);_+=ee}}}S.set(_*L,C,D,k,W,R)}return S.toTensor()},t.prototype.maxPool3d=function(e,i){return ae(e,"maxPool3d"),this.pool3d(e,i,"max").toFloat()},t.prototype.maxPool3dPositions=function(e,i){for(var r=T.buffer(i.outShape,"int32"),a=i.strideDepth,s=i.strideHeight,o=i.strideWidth,l=i.dilationDepth,u=i.dilationHeight,c=i.dilationWidth,h=i.effectiveFilterDepth,d=i.effectiveFilterHeight,p=i.effectiveFilterWidth,f=i.padInfo.front,m=i.padInfo.top,g=i.padInfo.left,v=this.bufferSync(e),b=0;b=K&&(K=ie,j=G*d*p+X*d+ne)}r.set(j,b,S,R,F,w)}}}return r.toTensor()},t.prototype.maxPool3dBackprop=function(e,i,r,a){ae([i,r],"maxPool3dBackprop");for(var s=this.maxPool3dPositions(i,a),o=a.strideDepth,l=a.strideHeight,u=a.strideWidth,c=a.dilationDepth,h=a.dilationHeight,d=a.dilationWidth,p=a.effectiveFilterDepth,f=a.effectiveFilterHeight,m=a.effectiveFilterWidth,g=p-1-a.padInfo.front,v=m-1-a.padInfo.left,b=f-1-a.padInfo.top,w=T.buffer(i.shape,"float32"),S=this.bufferSync(s),L=this.bufferSync(e),x=0;x=a.outDepth||Math.floor(K)!==K)continue;for(var j=0;j=a.outHeight||Math.floor(q)!==q)continue;for(var G=0;G=a.outWidth||Math.floor(Z)!==Z)continue;var X=p*f*m-1-S.get(x,K,q,Z,C),ee=_*f*m+j*m+G,ne=X===ee?1:0;if(ne===0)continue;var ie=L.get(x,K,q,Z,C);H+=ie*ne}}}w.set(H,x,R,D,k,C)}return w.toTensor()},t.prototype.resizeBilinear=function(e,i,r,a){ae(e,"resizeBilinear");for(var s=e.shape,o=s[0],l=s[1],u=s[2],c=s[3],h=this.readSync(e.dataId),d=new Float32Array(T.util.sizeFromShape([o,i,r,c])),p=[a&&i>1?l-1:l,a&&r>1?u-1:u],f=[a&&i>1?i-1:i,a&&r>1?r-1:r],m=0,g=p[0]/f[0],v=p[1]/f[1],b=0;b1?o-1:o,r&&d>1?l-1:l],m=[r&&h>1?h-1:h,r&&d>1?d-1:d],g=f[0]/m[0],v=f[1]/m[1],b=this.readSync(e.dataId),w=0,S=0;S1?l-1:l,a&&r>1?u-1:u],f=[a&&i>1?i-1:i,a&&r>1?r-1:r],m=p[0]/f[0],g=p[1]/f[1],v=0,b=0;b1?o-1:o,r&&d>1?l-1:l],g=[r&&h>1?h-1:h,r&&d>1?d-1:d],v=m[0]/g[0],b=m[1]/g[1],w=1/v,S=1/b,L=Math.ceil(w)*2+2,x=Math.ceil(S)*2+2,C=0;C=h)continue;var X=R+Z*e.strides[1],ee=Z*v,ne=Math.min(o-1,r?Math.round(ee):Math.floor(ee));if(D!==ne)continue;for(var ie=0;ie=d)continue;var re=X+te*e.strides[2],le=te*b,he=Math.min(l-1,r?Math.round(le):Math.floor(le));P===he&&(q+=f[re+j])}}p[H+j]=q}return T.tensor4d(p,i.shape,i.dtype)},t.prototype.localResponseNormalization4D=function(e,i,r,a,s){ae(e,"localResponseNormalization4D");var o=e.shape[3],l=o-1,u=this.readSync(e.dataId),c=e.size,h=new Float32Array(c);function d(g){for(var v=g%o,b=g-v+Math.max(0,v-i),w=g-v+Math.min(v+i,l),S=0;b<=w;b++){var L=u[b];S+=L*L}return S}for(var p=0;p=0&&o[l]1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+i});for(var a=e.shape[0],s=e.shape[1],o=e.shape[2],l=e.shape[3],u=s*i,c=o*i,h=l/(i*i),d=this.readSync(e.dataId),p=new Float32Array(a*u*c*h),f=0,m=0;m=u)continue;for(var P=f>1?(k-R)*(c-1)/(f-1):0,H=m>1?(W-D)*(h-1)/(m-1):0,_=0;_1?R*(c-1)+_*P:.5*(R+k)*(c-1);if(K<0||K>c-1){for(var j=0;j1?D*(h-1)+j*H:.5*(D+W)*(h-1);if(ne<0||ne>h-1){for(var q=0;q1?D*(h-1)+j*H:.5*(D+W)*(h-1);if(ne<0||ne>h-1){for(var q=0;q=e.size/u)throw new Error("Invalid indices: "+m+" does not index into "+e.shape);for(var w=0;w=a/s)throw new Error("Invalid indices: "+v+" does not index into "+r);for(var L=0;Lo&&(o=u)}r[a]=o}return r}var e0=or(function(n,t){return n*t}),OB=bd(function(n,t,e,i){return{real:n*e-t*i,imag:n*i+t*e}}),t0=Xr(T.Multiply,e0,OB),EB={kernelName:T.Multiply,backendName:"cpu",kernelFunc:t0};var n0=Jr(function(n){return 1/Math.sqrt(n)}),DB=Zr(T.Rsqrt,n0),kB={kernelName:T.Rsqrt,backendName:"cpu",kernelFunc:DB};function i0(n,t,e,i,r){var a=T.slice_util.isSliceContinous(i,t,e),s=T.util.sizeFromShape(e),o=T.util.computeStrides(i);if(a){var l=T.slice_util.computeFlatOffset(t,o);return n.subarray(l,l+s)}for(var u=T.util.getTypedArrayFromDType(r,s),c=0;cj?j=ie:a==="avg"&&(q+=ie,G++)}if(isNaN(j))break}var te=F+P*w+C;g[te]=a==="avg"?q/G:j}return m}function o0(n,t,e,i,r,a){r===void 0&&(r=!1),a===void 0&&(a=!1);for(var s=T.buffer(i.outShape,"int32"),o=i.strideHeight,l=i.strideWidth,u=i.dilationHeight,c=i.dilationWidth,h=i.effectiveFilterHeight,d=i.effectiveFilterWidth,p=i.padInfo.top,f=i.padInfo.left,m=T.buffer(t,e,n),g=0;gk&&(k=K,r?W=a?((g*i.inHeight+F)*i.inWidth+H)*i.inChannels+v:(F*i.inWidth+H)*i.inChannels+v:W=P*d+_)}s.set(W,g,b,x,v)}}return s}function JB(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.x;ae(r,"avgPool");var a=i.filterSize,s=i.strides,o=i.pad,l=i.dimRoundingMode,u=1;T.util.assert(T.backend_util.eitherStridesOrDilationsAreOne(s,u),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+s+" and dilations '"+u+"'")});var c=T.backend_util.computePool2DInfo(r.shape,a,s,u,o,l),h;if(c.filterWidth===1&&c.filterHeight===1&&T.util.arraysEqual(c.inShape,c.outShape))h=$r({inputs:{x:r},backend:e});else{var d=e.data.get(r.dataId).values,p=T.util.computeStrides(r.shape),f=Ld(d,r.shape,r.dtype,p,c,"avg");h=e.makeTensorInfo(c.outShape,r.dtype,f.values)}return h}var ZB={kernelName:T.AvgPool,backendName:"cpu",kernelFunc:JB};function QB(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.dy,a=t.input,s=a;ae([r,a],"avgPoolBackprop");for(var o=i.filterSize,l=i.strides,u=i.pad,c=T.backend_util.computePool2DInfo(s.shape,o,l,1,u),h=c.strideHeight,d=c.strideWidth,p=c.filterHeight,f=c.filterWidth,m=c.dilationHeight,g=c.dilationWidth,v=c.effectiveFilterHeight,b=c.effectiveFilterWidth,w=b-1-c.padInfo.left,S=v-1-c.padInfo.top,L=T.buffer(s.shape,"float32"),x=1/(p*f),C=e.data.get(r.dataId).values,R=T.buffer(r.shape,"float32",C),D=0;D=c.outHeight||Math.floor(j)!==j)continue;for(var q=0;q=c.outWidth||Math.floor(G)!==G)continue;var Z=R.get(D,j,G,k);_+=Z}}L.set(_*x,D,W,F,k)}return e.makeTensorInfo(L.shape,L.dtype,L.values)}var ez={kernelName:T.AvgPoolBackprop,backendName:"cpu",kernelFunc:QB};function tz(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.x,a=t.scale,s=t.offset,o=t.mean,l=t.variance;T.util.assert(o.shape.length===l.shape.length,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),T.util.assert(s==null||o.shape.length===s.shape.length,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),T.util.assert(a==null||o.shape.length===a.shape.length,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),ae([r,o,l,a,s],"batchNorm");var u=i.varianceEpsilon;u==null&&(u=.001);for(var c=e.data.get(r.dataId).values,h=e.data.get(o.dataId).values,d=e.data.get(l.dataId).values,p=a?e.data.get(a.dataId).values:new Float32Array([1]),f=s?e.data.get(s.dataId).values:new Float32Array([0]),m=new Float32Array(c.length),g=f.length,v=p.length,b=d.length,w=h.length,S=0,L=0,x=0,C=0,R=0;R=g&&(S=0),L>=w&&(L=0),x>=v&&(x=0),C>=b&&(C=0);return e.makeTensorInfo(r.shape,r.dtype,m)}var nz={kernelName:T.FusedBatchNorm,backendName:"cpu",kernelFunc:tz};var iz=$e(T.ClipByValue,function(n,t){var e=t;return n>e.clipValueMax?e.clipValueMax:n0});if(o.length===1)return o[0];var l=o.map(function(S){return S.shape});if(T.backend_util.assertParamsConsistent(l,a),o[0].dtype==="complex64"){var u=o.map(function(S){return ja({inputs:{input:S},backend:e})}),c=o.map(function(S){return Oo({inputs:{input:S},backend:e})}),h=Xa({inputs:u,backend:e,attrs:{axis:r}}),d=Xa({inputs:c,backend:e,attrs:{axis:r}}),p=In({inputs:{real:h,imag:d},backend:e});return u.forEach(function(S){return e.disposeIntermediateTensorInfo(S)}),c.forEach(function(S){return e.disposeIntermediateTensorInfo(S)}),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(d),p}var f=o.map(function(S){var L=T.util.sizeFromShape(S.shape.slice(a)),x=[-1,L];return Ii({inputs:{x:S},backend:e,attrs:{shape:x}})});s=T.backend_util.computeOutShape(f.map(function(S){return S.shape}),1);var m=T.util.getTypedArrayFromDType(o[0].dtype,T.util.sizeFromShape(s));if(f[0].shape[0]===1){var g=0;f.forEach(function(S){var L=e.data.get(S.dataId).values,x=T.util.sizeFromShape(S.shape);m.set(L,g),g+=x})}else{var v=0;f.forEach(function(S){for(var L=e.data.get(S.dataId).values,x=0,C=0;C=0&&re=0&&heie&&(ie=ke)}}}var _e=T.util.locToIndex([q,G,X,ne],K,T.util.computeStrides(H));j[_e]=ie}var Me=h.write(T.util.toTypedArray(j,a.dtype),H,a.dtype);return{dataId:Me,shape:H,dtype:a.dtype}}};var pz={kernelName:T.Dilation2DBackpropFilter,backendName:"cpu",kernelFunc:function(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t,a=r.x,s=r.filter,o=r.dy,l=i,u=l.strides,c=l.pad,h=l.dilations,d=e,p=T.util.toNestedArray(a.shape,d.data.get(a.dataId).values),f=T.util.toNestedArray(s.shape,d.data.get(s.dataId).values),m=T.backend_util.computeDilation2DInfo(a.shape,s.shape,u,c,"NHWC",h),g=m.batchSize,v=m.inHeight,b=m.inWidth,w=m.inChannels,S=m.outHeight,L=m.outWidth,x=m.padInfo,C=m.strideHeight,R=m.strideWidth,D=m.filterHeight,k=m.filterWidth,W=m.dilationHeight,F=m.dilationWidth,P=m.outShape;T.util.assert(o.rank===P.length,function(){return"Error in "+T.Dilation2DBackpropFilter+", dy "+("must have the same rank as output "+P.length+", but got ")+(""+o.rank)});for(var H=T.util.toNestedArray(P,d.data.get(o.dataId).values),_=T.util.makeZerosNestedTypedArray(s.shape,s.dtype),K=0;K=0&&re=0&&heee&&(ee=ye,ne=te,ie=le)}}}_[ne][ie][X]+=H[K][j][G][X]}var Oe=d.write(T.util.toTypedArray(_,a.dtype),s.shape,s.dtype);return{dataId:Oe,shape:s.shape,dtype:s.dtype}}};var fz={kernelName:T.Dilation2DBackpropInput,backendName:"cpu",kernelFunc:function(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t,a=r.x,s=r.filter,o=r.dy,l=i,u=l.strides,c=l.pad,h=l.dilations,d=e,p=T.util.toNestedArray(a.shape,d.data.get(a.dataId).values),f=T.util.toNestedArray(s.shape,d.data.get(s.dataId).values),m=T.backend_util.computeDilation2DInfo(a.shape,s.shape,u,c,"NHWC",h),g=m.batchSize,v=m.inHeight,b=m.inWidth,w=m.inChannels,S=m.outHeight,L=m.outWidth,x=m.padInfo,C=m.strideHeight,R=m.strideWidth,D=m.filterHeight,k=m.filterWidth,W=m.dilationHeight,F=m.dilationWidth,P=m.outShape;T.util.assert(o.rank===P.length,function(){return"Error in "+T.Dilation2DBackpropInput+", dy "+("must have the same rank as output "+P.length+", but got ")+(""+o.rank)});for(var H=T.util.toNestedArray(P,d.data.get(o.dataId).values),_=T.util.makeZerosNestedTypedArray(a.shape,a.dtype),K=0;K=0&&re=0&&heee&&(ee=ye,ne=re,ie=he)}}}_[K][ne][ie][X]+=H[K][j][G][X]}var Oe=d.write(T.util.toTypedArray(_,a.dtype),a.shape,a.dtype);return{dataId:Oe,shape:a.shape,dtype:a.dtype}}};var mz=or(function(n,t){return n/t}),gz=Xr(T.Div,mz),Id={kernelName:T.Div,backendName:"cpu",kernelFunc:gz};var vz=$e(T.Elu,function(n){return n>=0?n:Math.exp(n)-1}),yz={kernelName:T.Elu,backendName:"cpu",kernelFunc:vz};var bz=T.backend_util.ERF_P,wz=T.backend_util.ERF_A1,Sz=T.backend_util.ERF_A2,Lz=T.backend_util.ERF_A3,Iz=T.backend_util.ERF_A4,Az=T.backend_util.ERF_A5,Tz=$e(T.Erf,function(n){var t=Math.sign(n),e=Math.abs(n),i=1/(1+bz*e);return t*(1-((((Az*i+Iz)*i+Lz)*i+Sz)*i+wz)*i*Math.exp(-e*e))}),Nz={kernelName:T.Erf,backendName:"cpu",kernelFunc:Tz};function l0(n,t,e){for(var i=n.shape,r=i[0],a=i[1],s=e.data.get(n.dataId),o=s.complexTensorInfos.real,l=s.complexTensorInfos.imag,u=[r,a],c=T.util.sizeFromShape(u),h=T.util.getTypedArrayFromDType("float32",c),d=T.util.getTypedArrayFromDType("float32",c),p=0;p=0&&x=d.outHeight||Math.floor(q)!==q)continue;for(var G=0;G=d.outWidth||Math.floor(Z)!==Z)continue;var X=w*S-1-f.get(k,q,Z,W),ee=j*S+G,ne=X===ee?1:0;if(ne===0)continue;var ie=D.get(k,q,Z,W);K+=ie*ne}}C.set(K,k,F,P,W)}return e.makeTensorInfo(C.shape,C.dtype,C.values)}var $z={kernelName:T.MaxPoolBackprop,backendName:"cpu",kernelFunc:jz};function Xz(n,t,e,i,r){var a=T.util.computeStrides(t),s=Ld(n,t,e,a,r,"max"),o=o0(n,t,e,r,!0,i);return[s.values,o.values]}var Jz={kernelName:T.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(n){var t=n.inputs,e=n.attrs,i=n.backend,r=t.x,a=e,s=a.filterSize,o=a.strides,l=a.pad,u=a.includeBatchInIndex,c=i;ae(r,"MaxPoolWithArgmax");var h=c.data.get(r.dataId).values,d=T.backend_util.computePool2DInfo(r.shape,s,o,[1,1],l),p=Xz(h,r.shape,r.dtype,u,d),f=p[0],m=p[1],g=c.write(f,d.outShape,r.dtype),v=c.write(m,d.outShape,r.dtype);return[{dataId:g,shape:d.outShape,dtype:r.dtype},{dataId:v,shape:d.outShape,dtype:"int32"}]}};var Zz=T.kernel_impls.nonMaxSuppressionV4Impl,Qz={kernelName:T.NonMaxSuppressionV4,backendName:"cpu",kernelFunc:function(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t,a=r.boxes,s=r.scores,o=i,l=o.maxOutputSize,u=o.iouThreshold,c=o.scoreThreshold,h=o.padToMaxOutputSize,d=e;ae(a,"NonMaxSuppressionPadded");var p=d.data.get(a.dataId).values,f=d.data.get(s.dataId).values,m=Zz(p,f,l,u,c,h),g=m.selectedIndices,v=m.validOutputs;return[g,v]}};var eP=T.kernel_impls.nonMaxSuppressionV5Impl,tP={kernelName:T.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:function(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t,a=r.boxes,s=r.scores,o=i,l=o.maxOutputSize,u=o.iouThreshold,c=o.scoreThreshold,h=o.softNmsSigma,d=e;ae(a,"NonMaxSuppressionWithScore");var p=d.data.get(a.dataId).values,f=d.data.get(s.dataId).values,m=l,g=u,v=c,b=h,w=eP(p,f,m,g,v,b),S=w.selectedIndices,L=w.selectedScores;return[S,L]}};var nP=or(function(n,t){return n!==t?1:0}),iP=Xr(T.NotEqual,nP,null,"bool"),rP={kernelName:T.NotEqual,backendName:"cpu",kernelFunc:iP};function aP(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.x,a=i.paddings,s=i.constantValue;ae(r,"pad");var o=a.map(function(x,C){return x[0]+r.shape[C]+x[1]}),l=a.map(function(x){return x[0]}),u=e.data.get(r.dataId).values,c=T.util.sizeFromShape(r.shape),h=r.shape.length,d=T.util.computeStrides(r.shape),p=T.util.sizeFromShape(o),f=o.length,m=T.util.computeStrides(o),g=T.util.getTypedArrayFromDType(r.dtype,p);s!==0&&g.fill(s);for(var v=0;v=0&&j=0&&q.5?Math.ceil(n):t%2===0?t:t+1}),cP={kernelName:T.Round,backendName:"cpu",kernelFunc:uP};var hP=T.backend_util.SELU_SCALEALPHA,dP=T.backend_util.SELU_SCALE,pP=$e(T.Selu,function(n){return n>=0?dP*n:hP*(Math.exp(n)-1)}),fP={kernelName:T.Selu,backendName:"cpu",kernelFunc:pP};var mP=$e(T.Sigmoid,function(n){return 1/(1+Math.exp(-n))}),gP={kernelName:T.Sigmoid,backendName:"cpu",kernelFunc:mP};var vP=$e(T.Sign,function(n){return n<0?-1:n>0?1:0}),yP={kernelName:T.Sign,backendName:"cpu",kernelFunc:vP};var bP=$e(T.Sin,function(n){return Math.sin(n)}),wP={kernelName:T.Sin,backendName:"cpu",kernelFunc:bP};var SP=$e(T.Sinh,function(n){return Math.sinh(n)}),LP={kernelName:T.Sinh,backendName:"cpu",kernelFunc:SP};var IP=11920928955078125e-23,c0=Math.log(IP)+2,AP=$e(T.Softplus,function(n){var t=n>-c0,e=n0?1:e.alpha}),UP={kernelName:T.Step,backendName:"cpu",kernelFunc:WP};var BP=$e(T.Tan,function(n){return Math.tan(n)}),zP={kernelName:T.Tan,backendName:"cpu",kernelFunc:BP};var PP=$e(T.Tanh,function(n){return Math.tanh(n)}),_P={kernelName:T.Tanh,backendName:"cpu",kernelFunc:PP};function MP(n){var t=n.inputs,e=n.attrs,i=n.backend,r=e.axis,a=t.x;ae(a,"unique");var s=i.data.get(a.dataId).values,o=s0(s,r,a.shape,a.dtype),l=o.outputValues,u=o.outputShape,c=o.indices;return[i.makeTensorInfo(u,a.dtype,l),i.makeTensorInfo([c.length],"int32",c)]}var HP={kernelName:T.Unique,backendName:"cpu",kernelFunc:MP};var VP=[pB,_B,HB,bB,qB,YB,jB,XB,ZB,ez,nz,vB,SB,rz,fB,oz,uz,hz,dz,fz,pz,Id,yz,Nz,IB,TB,Ez,Dz,xB,mB,Fz,az,Uz,zz,_z,RB,Hz,qz,Kz,$z,Jz,Gz,EB,Qz,tP,rP,u0,gB,oP,sz,lP,cP,kB,fP,gP,yP,wP,LP,FB,TP,CP,OP,EP,FP,UP,UB,zP,_P,NP,HP];for(var Td=0,d0=VP;Td{"use strict";Object.defineProperty(Pn,"__esModule",{value:!0});var N=$i();var Nd=function(n,t){return Nd=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,i){e.__proto__=i}||function(e,i){for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])},Nd(n,t)};function GP(n,t){Nd(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function Eo(n,t,e,i){function r(a){return a instanceof e?a:new e(function(s){s(a)})}return new(e||(e=Promise))(function(a,s){function o(c){try{u(i.next(c))}catch(h){s(h)}}function l(c){try{u(i.throw(c))}catch(h){s(h)}}function u(c){c.done?a(c.value):r(c.value).then(o,l)}u((i=i.apply(n,t||[])).next())})}function Do(n,t){var e={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,r,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(u){return function(c){return l([u,c])}}function l(u){if(i)throw new TypeError("Generator is already executing.");for(;e;)try{if(i=1,r&&(a=u[0]&2?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;(r=0,a)&&(u=[u[0]&2,a.value]);switch(u[0]){case 0:case 1:a=u;break;case 4:return e.label++,{value:u[1],done:!1};case 5:e.label++,r=u[1],u=[0];continue;case 7:u=e.ops.pop(),e.trys.pop();continue;default:if(!(a=e.trys,a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]e||t>e){var i="["+n+"x"+t+"]",r="["+e+"x"+e+"]";throw new Error("Requested texture size "+i+" greater than WebGL maximum on this browser / GPU "+r+".")}}function T0(n){return Qn(n,function(){return n.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function Rd(n,t,e,i,r,a,s){var o=n.getAttribLocation(t,e);return o===-1?!1:(ce(n,function(){return n.bindBuffer(n.ARRAY_BUFFER,i)}),ce(n,function(){return n.vertexAttribPointer(o,r,n.FLOAT,!1,a,s)}),ce(n,function(){return n.enableVertexAttribArray(o)}),!0)}function x0(n,t,e){N0(n,e),ce(n,function(){return n.activeTexture(n.TEXTURE0+e)}),ce(n,function(){return n.bindTexture(n.TEXTURE_2D,t)})}function n_(n,t){N0(n,t),ce(n,function(){return n.activeTexture(n.TEXTURE0+t)}),ce(n,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function C0(n,t,e){return Qn(n,function(){return n.getUniformLocation(t,e)},'uniform "'+e+'" not present in program.')}function R0(n,t,e){return n.getUniformLocation(t,e)}function O0(n,t,e,i){ce(n,function(){return x0(n,t,i)}),ce(n,function(){return n.uniform1i(e,i)})}function i_(n){ce(n,function(){return n.bindFramebuffer(n.FRAMEBUFFER,null)}),ce(n,function(){return n.viewport(0,0,n.canvas.width,n.canvas.height)}),ce(n,function(){return n.scissor(0,0,n.canvas.width,n.canvas.height)})}function Fo(n,t,e){ce(n,function(){return n.bindFramebuffer(n.FRAMEBUFFER,e)}),ce(n,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0)})}function Od(n,t){ce(n,function(){return n.bindFramebuffer(n.FRAMEBUFFER,t)}),ce(n,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,null,0)})}function ts(n){var t=n.checkFramebufferStatus(n.FRAMEBUFFER);if(t!==n.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+E0(n,t))}function E0(n,t){switch(t){case n.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case n.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+t}}function Qn(n,t,e){var i=ce(n,function(){return t()});if(i==null)throw new Error(e);return i}function N0(n,t){var e=n.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,i=t+n.TEXTURE0;if(ie){var r="[gl.TEXTURE0, gl.TEXTURE"+e+"]";throw new Error("textureUnit must be in "+r+".")}}function ur(n,t){return t===void 0&&(t=2),N.util.sizeFromShape(n.slice(0,n.length-t))}function cr(n){if(n.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[n.length>1?n[n.length-2]:1,n[n.length-1]]}function Wo(n){var t=[1,1,1],e=n.length===0||n.length===1&&n[0]===1;return e||(t=[ur(n)].concat(cr(n))),t}function D0(n,t){var e;t===void 0&&(t=!1);var i=N.env().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t&&(i=i*2,n=n.map(function(u,c){return c>=n.length-2?N.util.nearestLargerEven(n[c]):n[c]}),n.length===1&&(n=[2,n[0]])),n.length!==2){var r=N.util.squeezeShape(n);n=r.newShape}var a=N.util.sizeFromShape(n);if(n.length<=1&&a<=i)return[1,a];if(n.length===2&&n[0]<=i&&n[1]<=i)return n;if(n.length===3&&n[0]*n[1]<=i&&n[2]<=i)return[n[0]*n[1],n[2]];if(n.length===3&&n[0]<=i&&n[1]*n[2]<=i)return[n[0],n[1]*n[2]];if(n.length===4&&n[0]*n[1]*n[2]<=i&&n[3]<=i)return[n[0]*n[1]*n[2],n[3]];if(n.length===4&&n[0]<=i&&n[1]*n[2]*n[3]<=i)return[n[0],n[1]*n[2]*n[3]];if(t){var s=ur(n),o=2,l=2;return n.length&&(e=cr(n),o=e[0],l=e[1]),a=s*(o/2)*(l/2),N.util.sizeToSquarishShape(a).map(function(u){return u*2})}return N.util.sizeToSquarishShape(a)}function Uo(n){return n%2===0}function ns(n,t){if(n=n.slice(-2),t=t.slice(-2),N.util.arraysEqual(n,t))return!0;if(!n.length||!t.length)return!0;if(n[0]===0||n[1]===0||t[0]===0||t[1]===0)return!0;if(n.length!==t.length){var e=n.slice(-1)[0],i=t.slice(-1)[0];if(e===i)return!0;if(Uo(e)&&Uo(i)&&(n[0]===1||t[0]===1))return!0}return n[1]===t[1]&&Uo(n[0])&&Uo(t[0])}var Bo,zo;function k0(n){if(Bo==null){var t=_n(n);Bo=t.getParameter(t.MAX_TEXTURE_SIZE)}return Bo}function r_(){Bo=null}function a_(){zo=null}function F0(n){if(zo==null){var t=_n(n);zo=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,zo)}function W0(n){if(n===0)return 0;var t,e=_n(n);return an(e,"EXT_disjoint_timer_query_webgl2")&&n===2?t=2:an(e,"EXT_disjoint_timer_query")?t=1:t=0,t}function an(n,t){var e=n.getExtension(t);return e!=null}function Ed(n){try{var t=_n(n);if(t!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function U0(n){if(n===0)return!1;var t=_n(n);if(n===1){if(!an(t,"OES_texture_float"))return!1}else if(!an(t,"EXT_color_buffer_float"))return!1;var e=Dd(t);return e}function B0(n){if(n===0)return!1;var t=_n(n);if(n===1){if(!an(t,"OES_texture_float"))return!1;if(!an(t,"WEBGL_color_buffer_float"))return!1}else{if(an(t,"EXT_color_buffer_float"))return Dd(t);var e="EXT_color_buffer_half_float";if(an(t,e)){var i=t.getExtension(e);return s_(t,i)}return!1}var r=Dd(t);return r}function Dd(n){var t=Cd(n),e=n.createTexture();n.bindTexture(n.TEXTURE_2D,e);var i=1,r=1;n.texImage2D(n.TEXTURE_2D,0,t.internalFormatFloat,i,r,0,t.textureFormatFloat,t.textureTypeFloat,null);var a=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,a),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0);var s=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(e),n.deleteFramebuffer(a),s}function s_(n,t){var e=Cd(n,t),i=n.createTexture();n.bindTexture(n.TEXTURE_2D,i);var r=1,a=1;n.texImage2D(n.TEXTURE_2D,0,e.internalFormatHalfFloat,r,a,0,e.textureFormatFloat,e.textureTypeHalfFloat,null);var s=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,s),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,i,0);var o=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(i),n.deleteFramebuffer(s),o}function z0(n){if(n!==2)return!1;var t=_n(n),e=t.fenceSync!=null;return e}function ea(n,t){Array.isArray(n)||(n=[n]),n.forEach(function(e){e!=null&&N.util.assert(e.dtype!=="complex64",function(){return t+" does not support complex64 tensors in the WebGL backend."})})}var o_={__proto__:null,callAndCheck:ce,canBeRepresented:g0,getWebGLErrorMessage:m0,getExtensionOrThrow:es,createVertexShader:v0,createFragmentShader:y0,createProgram:b0,linkProgram:w0,validateProgram:ko,createStaticVertexBuffer:S0,createStaticIndexBuffer:L0,getNumChannels:t_,createTexture:I0,validateTextureSize:A0,createFramebuffer:T0,bindVertexBufferToProgramAttribute:Rd,bindTextureUnit:x0,unbindTextureUnit:n_,getProgramUniformLocationOrThrow:C0,getProgramUniformLocation:R0,bindTextureToProgramUniformSampler:O0,bindCanvasToFramebuffer:i_,bindColorTextureToFramebuffer:Fo,unbindColorTextureFromFramebuffer:Od,validateFramebuffer:ts,getFramebufferErrorMessage:E0,getBatchDim:ur,getRowsCols:cr,getShapeAs3D:Wo,getTextureShapeFromLogicalShape:D0,isReshapeFree:ns,getWebGLMaxTextureSize:k0,resetMaxTextureSize:r_,resetMaxTexturesInShader:a_,getMaxTexturesInShader:F0,getWebGLDisjointQueryTimerVersion:W0,hasExtension:an,isWebGLVersionEnabled:Ed,isCapableOfRenderingToFloatTexture:U0,isDownloadFloatTextureEnabled:B0,isWebGLFenceEnabled:z0,assertNotComplex:ea};var Se=N.env();Se.registerFlag("HAS_WEBGL",function(){return Se.getNumber("WEBGL_VERSION")>0});Se.registerFlag("WEBGL_VERSION",function(){return Ed(2)?2:Ed(1)?1:0});Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",function(){return!1});Se.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return Se.get("WEBGL_VERSION")===2});Se.registerFlag("WEBGL_CPU_FORWARD",function(){return!0});Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1});Se.registerFlag("WEBGL_PACK",function(){return Se.getBool("HAS_WEBGL")});Se.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_CLIP",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1});Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_PACK_REDUCE",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_LAZILY_UNPACK",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_CONV_IM2COL",function(){return Se.getBool("WEBGL_PACK")});Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return k0(Se.getNumber("WEBGL_VERSION"))});Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return F0(Se.getNumber("WEBGL_VERSION"))});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var n=Se.getNumber("WEBGL_VERSION");return n===0?0:W0(n)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!N.device_util.isMobile()});Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return U0(Se.getNumber("WEBGL_VERSION"))});Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")});Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return B0(Se.getNumber("WEBGL_VERSION"))});Se.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return z0(Se.getNumber("WEBGL_VERSION"))});Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){var n=Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED");return n?4:0});Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",function(){return-1},function(n){if(n<0&&n!==-1)throw new Error("WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never "+("delete) or at least 0, but got "+n+"."))});function l_(n){const t=new Float32Array(n.length);for(let e=0;e{const s=N.backend_util.assertAndGetBroadcastShape(t,e),o=s.length,l=N.util.computeStrides(s),u=N.util.sizeFromShape(s),c=N.util.getTypedArrayFromDType(a,u),h=t.length,d=e.length,p=N.util.computeStrides(t),f=N.util.computeStrides(e),m=N.backend_util.getBroadcastDims(t,s),g=N.backend_util.getBroadcastDims(e,s);if(m.length+g.length===0)for(let v=0;vw[C]=0);const S=N.util.locToIndex(w,h,p),L=b.slice(-d);g.forEach(C=>L[C]=0);const x=N.util.locToIndex(L,d,f);c[v]=n(i[S],r[x])}return[c,s]}}const u_=kd((n,t)=>n+t);function ta(n){return(t,e,i)=>{const r=N.util.getTypedArrayFromDType(e,t.length);for(let a=0;aMath.ceil(n));const h_=ta(n=>Math.exp(n));const d_=ta(n=>Math.expm1(n));const p_=ta(n=>Math.floor(n));const f_=ta(n=>Math.log(n));function m_(n,t,e,i){const r=N.util.getTypedArrayFromDType(i,N.util.sizeFromShape(e));for(let a=0;ao&&(o=u)}r[a]=o}return r}const g_=kd((n,t)=>n*t);const v_=ta(n=>1/Math.sqrt(n));function y_(n,t,e,i,r){const a=N.slice_util.isSliceContinous(i,t,e),s=N.util.sizeFromShape(e),o=N.util.computeStrides(i);if(a){const u=N.slice_util.computeFlatOffset(t,o);return n.subarray(u,u+s)}const l=N.util.getTypedArrayFromDType(r,s);for(let u=0;um+t[g]),f=N.util.locToIndex(p,i.length,o);l[u]=n[f]}return l}const b_=kd((n,t)=>n-t);function w_(n,t,e,i,r){const a=t.length,s=N.util.sizeFromShape(t),o=N.util.computeStrides(t),l=N.util.computeStrides(r),u=N.util.getTypedArrayFromDType(e,N.util.sizeFromShape(r));for(let c=0;c{for(let g=0;g":"<",l=i?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * `+r+`; int bestIndex = inOffset; float bestValue = getA(batch, bestIndex); for (int i = 0; i < `+r+`; i++) { int inIdx = `+l+`; float candidate = getA(batch, inIdx); if (candidate `+o+` bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `}return n}();function _0(n,t){return["x","y","z","w","u","v"].slice(0,t).map(function(e){return n+"."+e})}function Xt(n,t){return t===1?[n]:_0(n,t)}function z_(n,t){if(n===1)return"rc";for(var e="",i=0;i 0.0 || val < 0.0) ? false : val != 0.0; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `,l="",u=` #define round(value) newRound(value) int newRound(float value) { return int(floor(value + 0.5)); } ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `):(n="",t="attribute",e="varying",i="varying",r="texture2D",a="gl_FragColor",s="",o=` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); } `,l=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,u=` int round(float value) { return int(floor(value + 0.5)); } ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `),{version:n,attribute:t,varyingVs:e,varyingFs:i,texture2D:r,output:a,defineOutput:s,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function hr(n,t,e){e===void 0&&(e="index");var i=N.util.computeStrides(t);return i.map(function(r,a){var s="int "+n[a]+" = "+e+" / "+r,o=a===i.length-1?"int "+n[a+1]+" = "+e+" - "+n[a]+" * "+r:"index -= "+n[a]+" * "+r;return s+"; "+o+";"}).join("")}function Fd(n){var t=N.util.computeStrides(n).map(function(e){return e.toString()});return` int getFlatIndex(ivec3 coords) { return coords.x * `+t[0]+" + coords.y * "+t[1]+` + coords.z; } `}var M0=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; lowp vec4 encode_float(highp float v) { if (isnan(v)) { return vec4(255, 255, 255, 255); } highp float av = abs(v); if(av < FLOAT_MIN) { return vec4(0.0, 0.0, 0.0, 0.0); } else if(v > FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; } else if(v < -FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; } highp vec4 c = vec4(0,0,0,0); highp float e = floor(log2(av)); highp float m = exp2(fract(log2(av))) - 1.0; c[2] = floor(128.0 * m); m -= c[2] / 128.0; c[1] = floor(32768.0 * m); m -= c[1] / 32768.0; c[0] = floor(8388608.0 * m); highp float ebias = e + 127.0; c[3] = floor(ebias / 2.0); ebias -= c[3] * 2.0; c[2] += floor(ebias) * 128.0; c[3] += 128.0 * step(0.0, -v); return c / 255.0; } `;var H0=N.backend_util.getBroadcastDims;function K_(n,t,e,i){var r=[];n.forEach(function(f){var m=N.util.sizeFromShape(f.shapeInfo.logicalShape);f.shapeInfo.isUniform?r.push("uniform float "+f.name+(m>1?"["+m+"]":"")+";"):(r.push("uniform sampler2D "+f.name+";"),r.push("uniform int offset"+f.name+";"))});var a=r.join(` `),s=n.map(function(f){return P_(f,t,i)}).join(` `),o=t.texShape,l=Ft(),u=H_(l),c,h,d=G_(l);t.isPacked?(c=__(t.logicalShape,o),h=q_(l)):(c=M_(t.logicalShape,o),h=V_(l)),i&&(d+=Y_);var p=[d,u,h,a,c,s,e].join(` `);return p}function na(n){var t=n.shapeInfo.logicalShape;switch(t.length){case 0:return j_(n);case 1:return $_(n);case 2:return X_(n);case 3:return J_(n);case 4:return Z_(n);case 5:return Q_(n);case 6:return eM(n);default:throw new Error(t.length+"-D input sampling is not yet supported")}}function V0(n){var t=n.shapeInfo.logicalShape;switch(t.length){case 0:return tM(n);case 1:return nM(n);case 2:return iM(n);case 3:return rM(n);default:return aM(n)}}function P_(n,t,e){e===void 0&&(e=!1);var i="";e?i+=V0(n):i+=na(n);var r=n.shapeInfo.logicalShape,a=t.logicalShape;return r.length<=a.length&&(e?i+=sM(n,t):i+=oM(n,t)),i}function __(n,t){switch(n.length){case 0:return q0();case 1:return lM(n,t);case 2:return hM(n,t);case 3:return uM(n,t);default:return cM(n,t)}}function M_(n,t){switch(n.length){case 0:return q0();case 1:return dM(n,t);case 2:return vM(n,t);case 3:return pM(n,t);case 4:return fM(n,t);case 5:return mM(n,t);case 6:return gM(n,t);default:throw new Error(n.length+"-D output sampling is not yet supported")}}function H_(n){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return `+n.texture2D+`(textureSampler, uv).r; } `}function V_(n){return` void setOutput(float val) { `+n.output+` = vec4(val, 0, 0, 0); } `}function q_(n){return` void setOutput(vec4 val) { `+n.output+` = val; } `}function G_(n){var t=n.version+` precision highp float; precision highp int; precision highp sampler2D; `+n.varyingFs+` vec2 resultUV; `+n.defineOutput+` const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 { int x; int y; int z; int w; int u; }; struct ivec6 { int x; int y; int z; int w; int u; int v; }; uniform float NAN; `+n.defineSpecialNaN+` `+n.defineSpecialInf+` `+n.defineRound+` int imod(int x, int y) { return x - y * (x / y); } int idiv(int a, int b, float sign) { int res = a / b; int mod = imod(a, b); if (sign < 0. && mod != 0) { res -= 1; } return res; } //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW #define HASHSCALE1 443.8975 float random(float seed){ vec2 p = resultUV * seed; vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } `+yM+` `+bM+` `+wM+` `;return t}var yM=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texelIndex = index / 2; int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,bM=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,wM=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2); int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,Y_=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? (modCoord.y == 0. ? frag.r : frag.g) : (modCoord.y == 0. ? frag.b : frag.a); } float getChannel(vec4 frag, int dim) { float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } `;function q0(){return` int getOutputCoords() { return 0; } `}function lM(n,t){var e=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return e[0]===1?` int getOutputCoords() { return 2 * int(resultUV.x * `+e[1]+`.0); } `:e[1]===1?` int getOutputCoords() { return 2 * int(resultUV.y * `+e[0]+`.0); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+e[0]+", "+e[1]+`)); return 2 * (resTexRC.x * `+e[1]+` + resTexRC.y); } `}function dM(n,t){return t[0]===1?` int getOutputCoords() { return int(resultUV.x * `+t[1]+`.0); } `:t[1]===1?` int getOutputCoords() { return int(resultUV.y * `+t[0]+`.0); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+t[0]+", "+t[1]+`)); return resTexRC.x * `+t[1]+` + resTexRC.y; } `}function uM(n,t){var e=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],i=Math.ceil(n[2]/2),r=i*Math.ceil(n[1]/2);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+e[0]+", "+e[1]+`)); int index = resTexRC.x * `+e[1]+` + resTexRC.y; int b = index / `+r+`; index -= b * `+r+`; int r = 2 * (index / `+i+`); int c = imod(index, `+i+`) * 2; return ivec3(b, r, c); } `}function pM(n,t){var e=hr(["r","c","d"],n);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+t[0]+", "+t[1]+`)); int index = resTexRC.x * `+t[1]+` + resTexRC.y; `+e+` return ivec3(r, c, d); } `}function cM(n,t){for(var e=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],i=Math.ceil(n[n.length-1]/2),r=i*Math.ceil(n[n.length-2]/2),a=r,s="",o="b, r, c",l=2;l=1?c="coords = 0;":c=o.map(function(S){return"coords."+h[S+u]+" = 0;"}).join(` `);var d="";s<2&&a>0?d="coords":d=n.shapeInfo.logicalShape.map(function(S,L){return"coords."+h[L+u]}).join(", ");var p="return outputValue;",f=N.util.sizeFromShape(n.shapeInfo.logicalShape),m=f===1,g=N.util.sizeFromShape(t.logicalShape),v=g===1;if(a===1&&!m&&!v)p=` return vec4(outputValue.xy, outputValue.xy); `;else if(m&&!v)s===1?p=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:p=` return vec4(outputValue.x); `;else if(o.length){var b=a-2,w=a-1;o.indexOf(b)>-1&&o.indexOf(w)>-1?p="return vec4(outputValue.x);":o.indexOf(b)>-1?p="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(w)>-1&&(p="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 `+r+`() { `+l+` coords = getOutputCoords(); `+c+` vec4 outputValue = get`+i+"("+d+`); `+p+` } `}function oM(n,t){var e=n.name,i=e.charAt(0).toUpperCase()+e.slice(1),r="get"+i+"AtOutCoords",a=t.texShape,s=n.shapeInfo.texShape,o=n.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!n.shapeInfo.isUniform&&o===l&&n.shapeInfo.flatOffset==null&&N.util.arraysEqual(s,a))return` float `+r+`() { return sampleTexture(`+e+`, resultUV); } `;var u=Ze(l),c=H0(n.shapeInfo.logicalShape,t.logicalShape),h=l-o,d,p=["x","y","z","w","u","v"];o===0?d="":l<2&&c.length>=1?d="coords = 0;":d=c.map(function(m){return"coords."+p[m+h]+" = 0;"}).join(` `);var f="";return l<2&&o>0?f="coords":f=n.shapeInfo.logicalShape.map(function(m,g){return"coords."+p[g+h]}).join(", "),` float `+r+`() { `+u+` coords = getOutputCoords(); `+d+` return get`+i+"("+f+`); } `}function Ze(n){if(n<=1)return"int";if(n===2)return"ivec2";if(n===3)return"ivec3";if(n===4)return"ivec4";if(n===5)return"ivec5";if(n===6)return"ivec6";throw Error("GPU for rank "+n+" is not yet supported")}function ra(n,t){var e=JSON.parse(JSON.stringify(n));return e.shapeInfo.logicalShape=t,e}function aa(n,t){return t.map(function(e){return n[e]}).join(", ")}var SM=function(){function n(t,e,i,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,N.util.assert(t.length>2,function(){return"Packed arg"+(i.charAt(0).toUpperCase()+i.slice(1))+" supports only inputs with rank above 2."});var a=t[t.length-1],s=Math.ceil(a/e);this.outputShape=t.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");var o=this.outputShape,l=o.length,u=Ze(l),c=Xt("coords",l),h,d;if(s===1){d=l+1;var p=Ze(d);h=` `+p+" sourceLocR = "+p+"("+c.join()+`, 0); ++`+c[l-1]+`; `+p+" sourceLocG = "+p+"("+c.join()+`, 0); ++`+c[l-2]+`; `+p+" sourceLocA = "+p+"("+c.join()+`, 0); --`+c[l-1]+`; `+p+" sourceLocB = "+p+"("+c.join()+`, 0); --`+c[l-2]+";"}else d=l,h=` `+u+` sourceLocR = coords; ++`+c[l-1]+`; `+u+` sourceLocG = coords; ++`+c[l-2]+`; `+u+` sourceLocA = coords; --`+c[l-1]+`; `+u+` sourceLocB = coords; --`+c[l-2]+";";var f=["x","y","z","w","u","v"].slice(0,d),m="."+f[d-1],g=f.map(function(D){return"int "+D}),v=Xt("sourceLocR",d-1).concat("inIdx.r"),b=Xt("sourceLocG",d-1).concat("inIdx.g"),w=Xt("sourceLocB",d-1).concat("inIdx.b"),S=Xt("sourceLocA",d-1).concat("inIdx.a"),L=i==="max"?"greaterThan":"lessThan",x=r?"":` inIdx = round(vec4(getBestIndicesAChannel(`+v.join()+`), getBestIndicesAChannel(`+b.join()+`), getBestIndicesAChannel(`+w.join()+`), getBestIndicesAChannel(`+S.join()+")));",C=`vec4( getAChannel(`+v.join()+`), hasNextCol ? getAChannel(`+b.join()+`) : 0., hasNextRow ? getAChannel(`+w.join()+`) : 0., hasNextRow && hasNextCol ? getAChannel(`+S.join()+") : 0.)",R=r?"":` float getBestIndicesAChannel(`+g.join()+`) { return getChannel(getBestIndicesA(`+f.join()+`), vec2(`+f.slice(-2).join()+`)); }`;this.userCode=` float getAChannel(`+g.join()+`) { return getChannel(getA(`+f.join()+`), vec2(`+f.slice(-2).join()+`)); } `+R+` void main() { `+u+` coords = getOutputCoords(); bool hasNextCol = `+c[l-1]+" < "+(o[l-1]-1)+`; bool hasNextRow = `+c[l-2]+" < "+(o[l-2]-1)+`; `+h+` ivec4 srcIdx = ivec4(sourceLocR`+m+", sourceLocG"+m+`, sourceLocB`+m+", sourceLocA"+m+") * "+e+`; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = `+C+`; for (int i = 0; i < `+e+`; i++) { inIdx = srcIdx; `+x+` vec4 candidate = `+C+`; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(`+L+`(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); bestValue = vec4(replace.x ? candidate.x : bestValue.x, replace.y ? candidate.y : bestValue.y, replace.z ? candidate.z : bestValue.z, replace.w ? candidate.w : bestValue.w); bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); srcIdx++; } setOutput(bestIndex); } `}return n}();var LM=function(){function n(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,i=t.filterWidth,r=t.strideHeight,a=t.strideWidth,s=t.dilationHeight,o=t.dilationWidth,l=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=l-1-t.padInfo.top,h=u-1-t.padInfo.left,d=1/(e*i);this.userCode=` const ivec2 pads = ivec2(`+c+", "+h+`); const float avgMultiplier = float(`+d+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+l+`; wR += `+s+`) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+u+`; wC+= `+o+`) { float dyC = float(dyCCorner + wC) / `+a+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); dotProd += dyValue * avgMultiplier; } } setOutput(dotProd); } `}return n}(),IM=function(){function n(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterDepth,i=t.filterHeight,r=t.filterWidth,a=t.strideDepth,s=t.strideHeight,o=t.strideWidth,l=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,h=t.effectiveFilterDepth,d=t.effectiveFilterHeight,p=t.effectiveFilterWidth,f=h-1-t.padInfo.front,m=d-1-t.padInfo.top,g=p-1-t.padInfo.left,v=1/(e*i*r);this.userCode=` const ivec3 pads = ivec3(`+f+", "+m+", "+g+`); const float avgMultiplier = float(`+v+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < `+h+`; wD += `+l+`) { float dyD = float(dyDCorner + wD) / `+a+`.0; if (dyD < 0.0 || dyD >= `+t.outDepth+`.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < `+d+`; wR += `+u+`) { float dyR = float(dyRCorner + wR) / `+s+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+p+`; wC += `+c+`) { float dyC = float(dyCCorner + wC) / `+o+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); dotProd += dyValue * avgMultiplier; } } } setOutput(dotProd); } `}return n}();var G0={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},Y0=function(){function n(t,e,i){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=N.backend_util.assertAndGetBroadcastShape(e,i),this.userCode=` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { `+t+` } void main() { float areal = getARealAtOutCoords(); float aimag = getAImagAtOutCoords(); float breal = getBRealAtOutCoords(); float bimag = getBImagAtOutCoords(); setOutput(binaryOpComplex(areal, aimag, breal, bimag)); } `}return n}();var K0=` if (isnan(a)) return a; if (isnan(b)) return b; `,Wd="return a + b;",Ud="return a - b;",j0="return a * b;",AM=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); if (ib != 0) { // Windows (D3D) wants guaranteed non-zero int division at compile-time. return float(idiv(ia, ib, s)); } else { return NAN; } `,TM=` if(a < 0.0 && floor(b) < b){ return NAN; } if (b == 0.0) { return 1.0; } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `,NM="return float(a == b);",xM="return float(a != b);",CM="return float(a < b);",RM="return float(a <= b);",OM="return float(a > b);",EM="return float(a >= b);",DM="return float(a >= 1.0 && b >= 1.0);",kM="return float(a >= 1.0 || b >= 1.0);",FM=K0+` return max(a, b); `,WM=K0+` return min(a, b); `,UM=`if (b == 0.0) return NAN; return mod(a, b);`,BM="return (b >= 1.0) ? a : a * (b + 1.0);",$0="return (a < 0.) ? b * a : a;",wt=function(){function n(t,e,i){this.variableNames=["A","B"],this.outputShape=N.backend_util.assertAndGetBroadcastShape(e,i),this.userCode=` float binaryOperation(float a, float b) { `+t+` } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}return n}();var Po=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `,zM=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); ivec4 result = ivec4(0); vec4 s = sign(a) * sign(b); // Windows (D3D) wants guaranteed non-zero int division at compile-time. if (cond[0]) { result[0] = idiv(ia[0], ib[0], s[0]); } if (cond[1]) { result[1] = idiv(ia[1], ib[1], s[1]); } if (cond[2]) { result[2] = idiv(ia[2], ib[2], s[2]); } if (cond[3]) { result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); `,PM=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); `+Po+` return result; `,X0=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `,_M=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,MM=` return vec4(equal(a, b)); `,HM=` return vec4(notEqual(a, b)); `,VM=` return vec4(lessThan(a, b)); `,qM=` return vec4(lessThanEqual(a, b)); `,GM=` return vec4(greaterThan(a, b)); `,YM=` return vec4(greaterThanEqual(a, b)); `,KM=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,jM=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,$M=` vec4 result = vec4(max(a, b)); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+Po+` return result; `,XM=` vec4 result = vec4(min(a, b)); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+Po+` return result; `,JM=` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); `+Po+` return result; `,Ai=function(){function n(t,e,i,r){r===void 0&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=N.backend_util.assertAndGetBroadcastShape(e,i);var a=this.outputShape.length,s="";if(r)if(a===0||N.util.sizeFromShape(this.outputShape)===1)s=` result.y = 0.; result.z = 0.; result.w = 0.; `;else{var o=Ze(a);if(s=` `+o+` coords = getOutputCoords(); `,a===1)s+=` result.y = (coords + 1) >= `+this.outputShape[0]+` ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{var l=Xt("coords",a);s+=` bool nextRowOutOfBounds = (`+l[a-2]+" + 1) >= "+this.outputShape[a-2]+`; bool nextColOutOfBounds = (`+l[a-1]+" + 1) >= "+this.outputShape[a-1]+`; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `}}this.userCode=` vec4 binaryOperation(vec4 a, vec4 b) { `+t+` } void main() { vec4 a = getAAtOutCoords(); vec4 b = getBAtOutCoords(); vec4 result = binaryOperation(a, b); `+s+` setOutput(result); } `}return n}();var ZM=function(){function n(t){this.variableNames=["A"],this.outputShape=t,this.userCode=` uniform float minVal; uniform float maxVal; void main() { float value = getAAtOutCoords(); if (isnan(value)) { setOutput(value); return; } setOutput(clamp(value, minVal, maxVal)); } `}return n.prototype.getCustomSetupFunc=function(t,e){var i=this;return function(r,a){i.minLoc==null&&(i.minLoc=r.getUniformLocationNoThrow(a,"minVal"),i.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(i.minLoc,t),r.gl.uniform1f(i.maxLoc,e)}},n}();var QM=function(){function n(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode=` uniform float minVal; uniform float maxVal; void main() { vec4 value = getAAtOutCoords(); if (any(isnan(value))) { setOutput(value); return; } setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } `}return n.prototype.getCustomSetupFunc=function(t,e){var i=this;return function(r,a){i.minLoc==null&&(i.minLoc=r.getUniformLocationNoThrow(a,"minVal"),i.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(i.minLoc,t),r.gl.uniform1f(i.maxLoc,e)}},n}();var e5=function(){function n(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); float mx = max(re, im); // sadly the length function in glsl is not underflow-safe // (at least not on Intel GPUs). So the safe solution is // to ensure underflow-safety in all cases. setOutput( mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } `}return n}();var t5=function(){function n(t){this.outputShape=[],this.outputShape=N.backend_util.computeOutShape(t,1),this.variableNames=t.map(function(l,u){return"T"+u});var e=new Array(t.length-1);e[0]=t[0][1];for(var i=1;i= "+l[u-1]+`) { return getChannel( getT`+u+"("+_o(o,c,f)+`), vec2(`+_o(h,c,f)+`)); }`}var m=l.length,g=l[l.length-1];p+=` return getChannel( getT`+m+"("+_o(o,c,g)+`), vec2(`+_o(h,c,g)+"));",this.userCode=` float getValue(`+o.map(function(v){return"int "+v})+`) { `+p+` } void main() { `+a+` coords = getOutputCoords(); vec4 result = vec4(getValue(`+s+`), 0., 0., 0.); `+s[r-1]+" = "+s[r-1]+` + 1; if (`+s[r-1]+" < "+i[r-1]+`) { result.g = getValue(`+s+`); } `+s[r-2]+" = "+s[r-2]+` + 1; if (`+s[r-2]+" < "+i[r-2]+`) { result.a = getValue(`+s+`); } `+s[r-1]+" = "+s[r-1]+` - 1; if (`+s[r-2]+" < "+i[r-2]+` && `+s[r-1]+" < "+i[r-1]+`) { result.b = getValue(`+s+`); } setOutput(result); } `}return n}();function _o(n,t,e){var i=n.indexOf(t),r=n.map(function(a,s){return s===i?a+" - "+e:a});return r.join()}var i5=function(){function n(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,i=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,s=t.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int d2 = coords.w; // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int b = 0; b < `+t.batchSize+`; b++) { for (int yR = 0; yR < `+t.outHeight+`; yR++) { int xR = wR + yR * `+e+" - "+r+`; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int yC = 0; yC < `+t.outWidth+`; yC++) { int xC = wC + yC * `+i+" - "+a+`; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } if (`+s+`) { float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } else { float dyValue = getDy(b, d2, yR, yC); float xValue = getX(b, d1, xR, xC); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}return n}(),r5=function(){function n(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,i=t.filterWidth,r=t.strideHeight,a=t.strideWidth,s=t.dataFormat==="channelsLast",o=e-1-t.padInfo.top,l=i-1-t.padInfo.left,u=s?1:2,c=s?2:3,h=s?3:1;this.userCode=` const ivec2 pads = ivec2(`+o+", "+l+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[`+h+`]; ivec2 dyCorner = ivec2(coords[`+u+"], coords["+c+`]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+e+`; wR++) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+e+` - 1 - wR; for (int wC = 0; wC < `+i+`; wC++) { float dyC = float(dyCCorner + wC) / `+a+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+i+` - 1 - wC; for (int d2 = 0; d2 < `+t.outChannels+`; d2++) { if (`+s+`) { float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } else { float xValue = getDy(batch, d2, idyR, idyC); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}return n}(),a5=function(){function n(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,a=t.padInfo.front,s=t.padInfo.top,o=t.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; int wR = coords.y; int wC = coords.z; int d1 = coords.w; int d2 = coords.u; float dotProd = 0.0; for (int b = 0; b < `+t.batchSize+`; b++) { for (int yF = 0; yF < `+t.outDepth+`; yF++) { int xF = wF + yF * `+e+" - "+a+`; if (xF < 0 || xF >= `+t.inDepth+`) { continue; } for (int yR = 0; yR < `+t.outHeight+`; yR++) { int xR = wR + yR * `+i+" - "+s+`; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int yC = 0; yC < `+t.outWidth+`; yC++) { int xC = wC + yC * `+r+" - "+o+`; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } float dyValue = getDy(b, yF, yR, yC, d2); float xValue = getX(b, xF, xR, xC, d1); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}return n}(),s5=function(){function n(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,i=t.filterHeight,r=t.filterWidth,a=t.strideDepth,s=t.strideHeight,o=t.strideWidth,l=e-1-t.padInfo.front,u=i-1-t.padInfo.top,c=r-1-t.padInfo.left;this.userCode=` const ivec3 pads = ivec3(`+l+", "+u+", "+c+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyFCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; float dotProd = 0.0; for (int wF = 0; wF < `+e+`; wF++) { float dyF = float(dyFCorner + wF) / `+a+`.0; if (dyF < 0.0 || dyF >= `+t.outDepth+`.0 || fract(dyF) > 0.0) { continue; } int idyF = int(dyF); int wFPerm = `+e+` - 1 - wF; for (int wR = 0; wR < `+i+`; wR++) { float dyR = float(dyRCorner + wR) / `+s+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+i+` - 1 - wR; for (int wC = 0; wC < `+r+`; wC++) { float dyC = float(dyCCorner + wC) / `+o+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+r+` - 1 - wC; for (int d2 = 0; d2 < `+t.outChannels+`; d2++) { float xValue = getDy(batch, idyF, idyR, idyC, d2); float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}return n}();var o5=function(){function n(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,i=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int dm = coords.w; int d2 = d1 * `+s+` + dm; float dotProd = 0.0; // TO DO: Vec4 over the batch size for (int b = 0; b < `+t.batchSize+`; b++) { for (int yR = 0; yR < `+t.outHeight+`; yR++) { int xR = wR + yR * `+e+" - "+r+`; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int yC = 0; yC < `+t.outWidth+`; yC++) { int xC = wC + yC * `+i+" - "+a+`; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } } } setOutput(dotProd); } `}return n}(),l5=function(){function n(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,i=t.filterWidth,r=t.strideHeight,a=t.strideWidth,s=e-1-t.padInfo.top,o=i-1-t.padInfo.left,l=t.outChannels/t.inChannels;this.userCode=` const ivec2 pads = ivec2(`+s+", "+o+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < `+e+`; wR++) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+e+` - 1 - wR; for (int wC = 0; wC < `+i+`; wC++) { float dyC = float(dyCCorner + wC) / `+a+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+i+` - 1 - wC; // TO DO: Vec4 over the channelMul for (int dm = 0; dm < `+l+`; dm++) { int d2 = d1 * `+l+` + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `}return n}();var J0=function(){function n(t,e,i,r){e===void 0&&(e=!1),i===void 0&&(i=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.padInfo.top,s=t.padInfo.left,o=t.strideHeight,l=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,h=t.filterHeight,d=t.filterWidth,p=Math.floor(t.inChannels/4)*4,f=t.inChannels%4,m=t.dataFormat==="channelsLast",g=m?1:2,v=m?2:3,b=m?3:1,w="",S="";i&&(r?w=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); `+i+` }`:w=` float activation(float x) { `+i+` } `,S="result = activation(result);");var L=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+w+` const ivec2 strides = ivec2(`+o+", "+l+`); const ivec2 pads = ivec2(`+a+", "+s+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[`+b+`]; ivec2 xRCCorner = ivec2(coords[`+g+"], coords["+v+`]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+h+`; wR++) { int xR = xRCorner + wR * `+u+`; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+d+`; wC++) { int xC = xCCorner + wC * `+c+`; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } for (int d1 = 0; d1 < `+p+`; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), getW(wR, wC, d1 + 2, d2), getW(wR, wC, d1 + 3, d2) ); if (`+m+`) { vec4 xValues = vec4( getX(batch, xR, xC, d1), getX(batch, xR, xC, d1 + 1), getX(batch, xR, xC, d1 + 2), getX(batch, xR, xC, d1 + 3) ); dotProd += dot(xValues, wValues); } else { vec4 xValues = vec4( getX(batch, d1, xR, xC), getX(batch, d1 + 1, xR, xC), getX(batch, d1 + 2, xR, xC), getX(batch, d1 + 3, xR, xC) ); dotProd += dot(xValues, wValues); } } if (`+(f===1)+`) { if (`+m+`) { dotProd += getX(batch, xR, xC, `+p+`) * getW(wR, wC, `+p+`, d2); } else { dotProd += getX(batch, `+p+`, xR, xC) * getW(wR, wC, `+p+`, d2); } } else if (`+(f===2)+`) { vec2 wValues = vec2( getW(wR, wC, `+p+`, d2), getW(wR, wC, `+p+` + 1, d2) ); if (`+m+`) { vec2 xValues = vec2( getX(batch, xR, xC, `+p+`), getX(batch, xR, xC, `+p+` + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( getX(batch, `+p+`, xR, xC), getX(batch, `+p+` + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (`+(f===3)+`) { vec3 wValues = vec3( getW(wR, wC, `+p+`, d2), getW(wR, wC, `+p+` + 1, d2), getW(wR, wC, `+p+` + 2, d2) ); if (`+m+`) { vec3 xValues = vec3( getX(batch, xR, xC, `+p+`), getX(batch, xR, xC, `+p+` + 1), getX(batch, xR, xC, `+p+` + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( getX(batch, `+p+`, xR, xC), getX(batch, `+p+` + 1, xR, xC), getX(batch, `+p+` + 2, xR, xC) ); dotProd += dot(xValues, wValues); } } } } float result = dotProd; `+L+` `+S+` setOutput(result); } `}return n}(),u5=function(){function n(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,i=t.padInfo.top,r=t.padInfo.left,a=t.strideDepth,s=t.strideHeight,o=t.strideWidth,l=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,h=t.filterDepth,d=t.filterHeight,p=t.filterWidth,f=Math.floor(t.inChannels/4)*4,m=t.inChannels%4;this.userCode=` const ivec3 strides = ivec3(`+a+", "+s+", "+o+`); const ivec3 pads = ivec3(`+e+", "+i+", "+r+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d2 = coords.u; ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xFCorner = xFRCCorner.x; int xRCorner = xFRCCorner.y; int xCCorner = xFRCCorner.z; // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; for (int wF = 0; wF < `+h+`; wF++) { int xF = xFCorner + wF * `+l+`; if (xF < 0 || xF >= `+t.inDepth+`) { continue; } for (int wR = 0; wR < `+d+`; wR++) { int xR = xRCorner + wR * `+u+`; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+p+`; wC++) { int xC = xCCorner + wC * `+c+`; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } for (int d1 = 0; d1 < `+f+`; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), getX(batch, xF, xR, xC, d1 + 2), getX(batch, xF, xR, xC, d1 + 3) ); vec4 wValues = vec4( getW(wF, wR, wC, d1, d2), getW(wF, wR, wC, d1 + 1, d2), getW(wF, wR, wC, d1 + 2, d2), getW(wF, wR, wC, d1 + 3, d2) ); dotProd += dot(xValues, wValues); } if (`+(m===1)+`) { dotProd += getX(batch, xF, xR, xC, `+f+`) * getW(wF, wR, wC, `+f+`, d2); } else if (`+(m===2)+`) { vec2 xValues = vec2( getX(batch, xF, xR, xC, `+f+`), getX(batch, xF, xR, xC, `+f+` + 1) ); vec2 wValues = vec2( getW(wF, wR, wC, `+f+`, d2), getW(wF, wR, wC, `+f+` + 1, d2) ); dotProd += dot(xValues, wValues); } else if (`+(m===3)+`) { vec3 xValues = vec3( getX(batch, xF, xR, xC, `+f+`), getX(batch, xF, xR, xC, `+f+` + 1), getX(batch, xF, xR, xC, `+f+` + 2) ); vec3 wValues = vec3( getW(wF, wR, wC, `+f+`, d2), getW(wF, wR, wC, `+f+` + 1, d2), getW(wF, wR, wC, `+f+` + 2, d2) ); dotProd += dot(xValues, wValues); } } } } setOutput(dotProd); } `}return n}();var Z0=function(){function n(t,e,i,r){e===void 0&&(e=!1),i===void 0&&(i=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.inHeight,s=t.inWidth,o=t.padInfo.top,l=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,h=t.dilationHeight,d=t.dilationWidth,p=t.filterHeight,f=t.filterWidth,m=t.outChannels/t.inChannels,g="",v="";i&&(r?g=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); `+i+` }`:g=` float activation(float x) { `+i+` } `,v="result = activation(result);");var b=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+g+` const ivec2 strides = ivec2(`+u+", "+c+`); const ivec2 pads = ivec2(`+o+", "+l+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / `+m+`; int q = d2 - d1 * `+m+`; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. for (int wR = 0; wR < `+p+`; wR++) { int xR = xRCorner + wR * `+h+`; if (xR < 0 || xR >= `+a+`) { continue; } for (int wC = 0; wC < `+f+`; wC++) { int xC = xCCorner + wC * `+d+`; if (xC < 0 || xC >= `+s+`) { continue; } float xVal = getX(batch, xR, xC, d1); float wVal = getW(wR, wC, d1, q); dotProd += xVal * wVal; } } float result = dotProd; `+b+` `+v+` setOutput(result); } `}return n}();var Q0=function(){function n(t,e,i,r){e===void 0&&(e=!1),i===void 0&&(i=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.outShape;for(var a=t.inHeight,s=t.inWidth,o=t.padInfo.top,l=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,h=t.dilationHeight,d=t.dilationWidth,p=t.filterHeight,f=t.filterWidth,m=f,g="int xR; int xC; int xCOffset;",v=0;v= 0 && xR < `+a+" && xCOffset >= 0 && xCOffset < "+s+`) { xTexelR`+v+"C"+b+` = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= `+s+`) { xTexelR`+v+"C"+b+`.zw = vec2(0.); } } else { xTexelR`+v+"C"+b+` = vec4(0.); } xCOffset = xC + 1 - 2; if(xR >= 0 && xR < `+a+" && xCOffset >= 0 && xCOffset < "+s+`) { vec4 previous = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= `+s+`) { previous.zw = vec2(0.); } xR`+v+"C"+b+" = vec4(previous.zw, xTexelR"+v+"C"+b+`.xy); } else { xR`+v+"C"+b+" = vec4(0, 0, xTexelR"+v+"C"+b+`.xy); } `:g+=` if(xR >= 0 && xR < `+a+" && xC >= 0 && xC < "+s+`) { xTexelR`+v+"C"+b+` = getX(batch, xR, xC, d1); } else { xTexelR`+v+"C"+b+` = vec4(0.); } xR`+v+"C"+b+" = xTexelR"+v+"C"+b+`; `,b+1= 0 && xR < `+a+` && xCOffset >= 0 && xCOffset < `+s+`) { xTexelR`+v+"C"+(b+2)+` = getX(batch, xR, xCOffset, d1); } `,d>1&&(g+=` xCOffset -= 2; if(xR >= 0 && xR < `+a+` && xCOffset >= 0 && xCOffset < `+s+`) { xTexelR`+v+"C"+b+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+v+"C"+b+` = vec4(0.); } `),g+=` xR`+v+"C"+(b+1)+` = vec4( xTexelR`+v+"C"+b+".zw, xTexelR"+v+"C"+(b+2)+`.xy); `):g+=` xCOffset = xC + `+S+`; if(xR >= 0 && xR < `+a+` && xCOffset >= 0 && xCOffset < `+s+`) { xTexelR`+v+"C"+(b+2)+` = getX(batch, xR, xCOffset, d1); } xR`+v+"C"+(b+1)+" = xTexelR"+v+"C"+(b+2)+`; `}}else b= 0 && xR < `+a+`) { `,l%2===1?(g+=` xCOffset = xC + 1 - `+c+`; if(xCOffset >= 0 && xCOffset < `+s+`) { xTexelR`+v+"C"+b+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+v+"C"+b+` = vec4(0.); } if(xC + 1 >= 0 && xC + 1 < `+s+`) { xTexelR`+v+"C"+(b+2)+` = getX(batch, xR, xC + 1, d1); } else { xTexelR`+v+"C"+(b+2)+` = vec4(0.); } xR`+v+"C"+b+` = vec4( xTexelR`+v+"C"+b+".zw, xTexelR"+v+"C"+(b+2)+`.zw); `,b+1= 0 && xCOffset < `+s+`) { final = getX(batch, xR, xCOffset, d1); } xR`+v+"C"+(b+1)+" = vec4(xTexelR"+v+"C"+(b+2)+`.xy, final.xy); `)):(g+=` if(xC >= 0 && xC < `+s+`) { xTexelR`+v+"C"+b+` = getX(batch, xR, xC, d1); } else { xTexelR`+v+"C"+b+` = vec4(0.); } xCOffset = xC + `+c+`; if(xCOffset >= 0 && xCOffset < `+s+`) { xTexelR`+v+"C"+(b+2)+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+v+"C"+(b+2)+` = vec4(0.); } xR`+v+"C"+b+` = vec4( xTexelR`+v+"C"+b+".xy, xTexelR"+v+"C"+(b+2)+`.xy); `,b+11?[""+(o-1)/(h-1),"(y2-y1) * height_ratio","y1*"+m+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+m],b=v[0],w=v[1],S=v[2],L=d>1?[""+(l-1)/(d-1),"(x2-x1) * width_ratio","x1*"+g+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+g],x=L[0],C=L[1],R=L[2];this.userCode=` const float height_ratio = float(`+b+`); const float width_ratio = float(`+x+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int y = coords[1]; int x = coords[2]; int d = coords[3]; // get box vals float y1 = getBoxes(b,0); float x1 = getBoxes(b,1); float y2 = getBoxes(b,2); float x2 = getBoxes(b,3); // get image in batch index int bInd = round(getBoxInd(b)); if(bInd < 0 || bInd >= `+s+`) { return; } float height_scale = `+w+`; float width_scale = `+C+`; float in_y = `+S+`; if( in_y < 0.0 || in_y > `+m+` ) { setOutput(float(`+a+`)); return; } float in_x = `+R+`; if( in_x < 0.0 || in_x > `+g+` ) { setOutput(float(`+a+`)); return; } vec2 sourceFracIndexCR = vec2(in_x,in_y); if(`+p+` == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); float top = topLeft + (topRight - topLeft) * fracCR.x; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; float newValue = top + (bottom - top) * fracCR.y; setOutput(newValue); } else { // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestCR = ivec2(floor( sourceFracIndexCR + vec2(0.5,0.5))); float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); setOutput(newValue); } } `}return n}(),nS=function(){function n(t,e,i){this.variableNames=["x"],this.outputShape=t;var r=t.length,a=e?"0.0":"getX("+eS(r,"coords")+")",s=t[t.length-1],o="",l="";e?(o=i?"end != "+(s-1):"end != 0",l=i?"end + 1":"end - 1"):(o=i?"end + pow2 < "+s:"end >= pow2",l=i?"end + pow2":"end - pow2"),this.userCode=` uniform float index; void main() { `+Ze(r)+` coords = getOutputCoords(); int end = `+tS(r,"coords")+`; float val = `+a+`; int pow2 = int(pow(2.0, index)); if (`+o+`) { int idx = `+l+`; `+tS(r,"coords")+` = idx; val += getX(`+eS(r,"coords")+`); } setOutput(val); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;return function(i,r){e.index==null&&(e.index=i.getUniformLocation(r,"index")),i.gl.uniform1f(e.index,t)}},n}();function eS(n,t){if(n===1)return""+t;if(n===2)return t+".x, "+t+".y";if(n===3)return t+".x, "+t+".y, "+t+".z";if(n===4)return t+".x, "+t+".y, "+t+".z, "+t+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}function tS(n,t){if(n===1)return""+t;if(n===2)return t+".y";if(n===3)return t+".z";if(n===4)return t+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}var h5=function(){function n(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Ja.DENSE;var e=Qa(t),i=Ft();this.outputShape=t,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { `+hr(["r","c","d"],t)+` return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+e[0]+", "+e[1]+`)); int index = 4 * (resTexRC.x * `+e[1]+` + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getA(rc.x, rc.y, rc.z); } `+i.output+` = result; } `}return n}();var d5=function(){function n(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Ja.DENSE;var e=Qa(t),i=Ft();this.outputShape=t,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { `+hr(["r","c","d"],t)+` return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+e[0]+", "+e[1]+`)); int index = 4 * (resTexRC.x * `+e[1]+` + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); } `+i.output+` = result; } `}return n}();var p5=function(){function n(t,e,i){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=i,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int h = `+this.getHeightCoordString()+`; int w = `+this.getWidthCoordString()+`; int d = `+this.getDepthCoordString()+`; int in_h = h / `+e+`; int offset_h = imod(h, `+e+`); int in_w = w / `+e+`; int offset_w = imod(w, `+e+`); int offset_d = (offset_h * `+e+` + offset_w) * `+this.getOutputDepthSize()+`; int in_d = d + offset_d; float result = `+this.getInputSamplingString()+`; setOutput(result); } `}return n.prototype.getHeightCoordString=function(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"},n.prototype.getWidthCoordString=function(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"},n.prototype.getDepthCoordString=function(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"},n.prototype.getOutputDepthSize=function(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]},n.prototype.getInputSamplingString=function(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},n}();var f5=function(){function n(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } `}return n}();var m5=function(){function n(t){this.variableNames=["A"],this.outTexUsage=rn.DOWNLOAD;var e=Ft();this.outputShape=t,this.userCode=` `+M0+` void main() { float x = getAAtOutCoords(); `+e.output+` = encode_float(x); } `}return n}();var g5=function(){function n(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=rn.DOWNLOAD;var e=Ft();this.outputShape=t,this.userCode=` `+M0+` void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); `+e.output+` = encode_float(x); } `}return n}();var v5=function(){function n(t,e,i){i===void 0&&(i=!1),this.variableNames=["A"];var r=Ft(),a=e[0],s=e[1];this.outputShape=t;var o="result";i&&(o="floor(result * 255. + 0.5)"),this.userCode=` `+Fd(t)+` void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / `+s+`; int c = imod(flatIndex, `+s+`); vec2 uv = (vec2(c, r) + halfCR) / vec2(`+s+".0, "+a+`.0); vec4 values = `+r.texture2D+`(A, uv); float result; if(offset == 0) { result = values[0]; } else if(offset == 1) { result = values[1]; } else if(offset == 2) { result = values[2]; } else { result = values[3]; } `+r.output+" = vec4("+o+`, 0., 0., 0.); } `}return n}();var y5=function(){function n(t,e,i){i===void 0&&(i=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var r=Ft(),a=e[0],s=e[1];this.outputShape=t;var o="",l="result";i&&(l="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var h=u*2+c;o+=` localCoords = coords; if(localCoords[2] + `+c+" < "+t[2]+`) { localCoords[2] += `+c+`; if(localCoords[1] + `+u+" < "+t[1]+`) { localCoords[1] += `+u+`; flatIndex = getFlatIndex(localCoords); offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); r = flatIndex / `+s+`; c = imod(flatIndex, `+s+`); uv = (vec2(c, r) + halfCR) / vec2(`+s+".0, "+a+`.0); values = `+r.texture2D+`(A, uv); if(offset == 0) { result[`+h+`] = values[0]; } else if(offset == 1) { result[`+h+`] = values[1]; } else if(offset == 2) { result[`+h+`] = values[2]; } else { result[`+h+`] = values[3]; } } } `}this.userCode=` `+Fd(t)+` void main() { ivec3 coords = getOutputCoords(); vec4 result = vec4(0.); int flatIndex, r, c, offset; ivec3 localCoords; vec2 uv; vec4 values; `+o+` `+r.output+" = "+l+`; } `}return n}();var iS={REAL:"return real * expR - imag * expI;",IMAG:"return real * expI + imag * expR;"},rS=function(){function n(t,e,i){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var a=i?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,s=i?r+".0":"1.0";this.userCode=` const float exponentMultiplier = `+a+`; float unaryOpComplex(float real, float expR, float imag, float expI) { `+t+` } float mulMatDFT(int batch, int index) { float indexRatio = float(index) / float(`+r+`); float exponentMultiplierTimesIndexRatio = exponentMultiplier * indexRatio; float result = 0.0; for (int i = 0; i < `+r+`; i++) { // x = (-2|2 * PI / N) * index * i; float x = exponentMultiplierTimesIndexRatio * float(i); float expR = cos(x); float expI = sin(x); float real = getReal(batch, i); float imag = getImag(batch, i); result += unaryOpComplex(real, expR, imag, expI) / `+s+`; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `}return n}();var b5=function(){function n(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode=` uniform float value; void main() { // Input can be obtained from uniform value. setOutput(value); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;return function(i,r){e.valueLoc==null&&(e.valueLoc=i.getUniformLocationNoThrow(r,"value")),i.gl.uniform1f(e.valueLoc,t)}},n}();var S5=function(){function n(t,e,i){this.variableNames=["A","indices"];var r=t.slice();r[i]=e,this.outputShape=r,this.rank=r.length;var a=Ze(this.rank),s=w5(t,i);this.userCode=` void main() { `+a+` resRC = getOutputCoords(); setOutput(getA(`+s+`)); } `}return n}();function w5(n,t){var e=n.length;if(e>4)throw Error("Gather for rank "+e+" is not yet supported");if(e===1)return"int(getIndices(resRC))";for(var i=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[],a=0;a1?"strides[j]":"strides";this.userCode=` `+r+" strides = "+r+"("+this.strides+`); void main() { `+a+` coords = getOutputCoords(); int flattenIndex = 0; for (int j = 0; j < `+this.sliceDim+`; j++) { int index = round(getIndices(coords[0], j)); flattenIndex += index * `+s+`; } setOutput(getX(flattenIndex, coords[1])); } `}return n}();function aS(n){var t=Ft(),e=t.version+` precision highp float; `+t.attribute+` vec3 clipSpacePos; `+t.attribute+` vec2 uv; `+t.varyingVs+` vec2 resultUV; void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`;return v0(n,e)}function sS(n){var t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return S0(n,t)}function oS(n){var t=new Uint16Array([0,1,2,2,1,3]);return L0(n,t)}function is(n,t,e,i,r,a){A0(t,e);var s=I0(n),o=n.TEXTURE_2D;return ce(n,function(){return n.bindTexture(o,s)}),ce(n,function(){return n.texParameteri(o,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE)}),ce(n,function(){return n.texParameteri(o,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}),ce(n,function(){return n.texParameteri(o,n.TEXTURE_MIN_FILTER,n.NEAREST)}),ce(n,function(){return n.texParameteri(o,n.TEXTURE_MAG_FILTER,n.NEAREST)}),ce(n,function(){return n.texImage2D(o,0,i,t,e,0,r,a,null)}),ce(n,function(){return n.bindTexture(n.TEXTURE_2D,null)}),s}function Bd(n){return n.internalFormatFloat}function lS(n,t,e,i){var r=Za(t,e),a=r[0],s=r[1];return is(n,a,s,Bd(i),i.textureFormatFloat,n.FLOAT)}function zd(n){return n.internalFormatHalfFloat}function uS(n,t,e,i){var r=Za(t,e),a=r[0],s=r[1];return is(n,a,s,zd(i),i.textureFormatFloat,i.textureTypeHalfFloat)}function Pd(n){return n.downloadTextureFormat}function cS(n,t,e,i){var r=Za(t,e),a=r[0],s=r[1];return is(n,a,s,Pd(i),n.RGBA,n.UNSIGNED_BYTE)}function _d(n){return n.internalFormatPackedFloat}function hS(n,t,e,i){var r=Qr(t,e),a=r[0],s=r[1];return is(n,a,s,_d(i),n.RGBA,n.FLOAT)}function Md(n){return n.internalFormatPackedHalfFloat}function dS(n,t,e,i){var r=Qr(t,e),a=r[0],s=r[1];return is(n,a,s,Md(i),n.RGBA,i.textureTypeHalfFloat)}function pS(n,t,e){var i=0,r=3*4,a=3*4+2*4;ce(n,function(){return n.bindBuffer(n.ARRAY_BUFFER,e)});var s=Rd(n,t,"clipSpacePos",e,3,a,i);return s&&Rd(n,t,"uv",e,2,a,r)}function fS(n,t,e,i,r,a){ce(n,function(){return n.bindTexture(n.TEXTURE_2D,t)});var s,o,l;r instanceof Uint8Array?(s=new Uint8Array(e*i*4),o=n.UNSIGNED_BYTE,l=n.RGBA):(s=new Float32Array(e*i*4),o=n.FLOAT,l=a.internalFormatPackedFloat),s.set(r),ce(n,function(){return n.texImage2D(n.TEXTURE_2D,0,l,e,i,0,n.RGBA,o,s)}),ce(n,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function mS(n,t,e){ce(n,function(){return n.bindTexture(n.TEXTURE_2D,t)}),e.data instanceof Uint8Array?ce(n,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,e.width,e.height,0,n.RGBA,n.UNSIGNED_BYTE,e.data)}):ce(n,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e)}),ce(n,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function gS(n,t,e,i){var r=n.createBuffer();ce(n,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,r)});var a=4,s=4,o=a*s*t*e;return ce(n,function(){return n.bufferData(n.PIXEL_PACK_BUFFER,o,n.STREAM_READ)}),ce(n,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,0)}),ce(n,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,null)}),r}function vS(n,t,e){var i=n,r=new Float32Array(e);return i.bindBuffer(i.PIXEL_PACK_BUFFER,t),i.getBufferSubData(i.PIXEL_PACK_BUFFER,0,r),i.bindBuffer(i.PIXEL_PACK_BUFFER,null),r}function yS(n,t,e,i){var r=Za(t,e),a=r[0],s=r[1],o=4,l=new Uint8Array(jP(t*e,o));return ce(n,function(){return n.readPixels(0,0,a,s,i.downloadTextureFormat,n.UNSIGNED_BYTE,l)}),new Float32Array(l.buffer)}function bS(n,t,e,i,r,a,s,o){var l=n,u=new Float32Array($P(a,s));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function wS(n,t,e){var i=new Float32Array(t*e*4);return ce(n,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,i)}),i}var I5={__proto__:null,createVertexShader:aS,createVertexBuffer:sS,createIndexBuffer:oS,getInternalFormatForFloat32MatrixTexture:Bd,createFloat32MatrixTexture:lS,getInternalFormatForFloat16MatrixTexture:zd,createFloat16MatrixTexture:uS,getInternalFormatForUnsignedBytesMatrixTexture:Pd,createUnsignedBytesMatrixTexture:cS,getInternalFormatForPackedMatrixTexture:_d,createPackedMatrixTexture:hS,getInternalFormatForFloat16PackedMatrixTexture:Md,createFloat16PackedMatrixTexture:dS,bindVertexProgramAttributeStreams:pS,uploadDenseMatrixToTexture:fS,uploadPixelDataToTexture:mS,createBufferFromOutputTexture:gS,downloadFloat32MatrixFromBuffer:vS,downloadByteEncodedFloatMatrixFromOutputTexture:yS,downloadPackedMatrixFromBuffer:bS,downloadMatrixFromPackedOutputTexture:wS};var SS=function(){function n(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=N.env().getNumber("WEBGL_VERSION");t!=null?(this.gl=t,f0(e,t)):this.gl=_n(e);var i="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(N.env().getNumber("WEBGL_VERSION")===1){var a="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=es(this.gl,a),an(this.gl,s))this.textureHalfFloatExtension=es(this.gl,s);else if(N.env().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(i),an(this.gl,r))this.colorBufferHalfFloatExtension=es(this.gl,r);else if(N.env().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(i="EXT_color_buffer_float",an(this.gl,i))this.colorBufferFloatExtension=this.gl.getExtension(i);else if(an(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=sS(this.gl),this.indexBuffer=oS(this.gl),this.framebuffer=T0(this.gl),this.textureConfig=Cd(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(n.prototype,"debug",{get:function(){return N.env().getBool("DEBUG")},enumerable:!0,configurable:!0}),n.prototype.dispose=function(){var t=this;if(this.disposed)return;this.program!=null&&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."),this.outputTexture!=null&&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;ce(e,function(){return e.finish()}),ce(e,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),ce(e,function(){return e.deleteFramebuffer(t.framebuffer)}),ce(e,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),ce(e,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),ce(e,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0},n.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),lS(this.gl,t,e,this.textureConfig)},n.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),uS(this.gl,t,e,this.textureConfig)},n.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),cS(this.gl,t,e,this.textureConfig)},n.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),mS(this.gl,t,e)},n.prototype.uploadDenseMatrixToTexture=function(t,e,i,r){this.throwIfDisposed(),fS(this.gl,t,e,i,r,this.textureConfig)},n.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),dS(this.gl,t,e,this.textureConfig)},n.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),hS(this.gl,t,e,this.textureConfig)},n.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(Od(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,function(){return e.gl.deleteTexture(t)})},n.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,i){var r=this;return this.downloadMatrixDriver(t,function(){return yS(r.gl,e,i,r.textureConfig)})},n.prototype.downloadPackedMatrixFromBuffer=function(t,e,i,r,a,s){return bS(this.gl,t,e,i,r,a,s,this.textureConfig)},n.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return vS(this.gl,t,e)},n.prototype.createBufferFromTexture=function(t,e,i){this.bindTextureToFrameBuffer(t);var r=gS(this.gl,e,i,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},n.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},n.prototype.createFence=function(t){var e=this,i,r;if(N.env().getBool("WEBGL_FENCE_API_ENABLED")){var a=t,s=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),r=function(){var o=a.clientWaitSync(s,0,0);return o===a.ALREADY_SIGNALED||o===a.CONDITION_SATISFIED},i=s}else N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(i=this.beginQuery(),this.endQuery(),r=function(){return e.isQueryAvailable(i,N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):r=function(){return!0};return{query:i,isFencePassed:r}},n.prototype.downloadMatrixFromPackedTexture=function(t,e,i){var r=this;return this.downloadMatrixDriver(t,function(){return wS(r.gl,e,i)})},n.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,i=y0(e,t),r=aS(e),a=b0(e);return ce(e,function(){return e.attachShader(a,r)}),ce(e,function(){return e.attachShader(a,i)}),w0(e,a),this.debug&&ko(e,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=pS(e,this.program,this.vertexBuffer)),a},n.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&ce(this.gl,function(){return e.gl.deleteProgram(t)})},n.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&ko(this.gl,this.program),ce(this.gl,function(){return e.gl.useProgram(t)})},n.prototype.getUniformLocation=function(t,e,i){return i===void 0&&(i=!0),this.throwIfDisposed(),i?C0(this.gl,t,e):R0(this.gl,t,e)},n.prototype.getAttributeLocation=function(t,e){var i=this;return this.throwIfDisposed(),ce(this.gl,function(){return i.gl.getAttribLocation(t,e)})},n.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},n.prototype.setInputMatrixTexture=function(t,e,i){this.throwIfDisposed(),this.throwIfNoProgram(),O0(this.gl,t,e,i)},n.prototype.setOutputMatrixTexture=function(t,e,i){this.setOutputMatrixTextureDriver(t,i,e)},n.prototype.setOutputPackedMatrixTexture=function(t,e,i){this.throwIfDisposed();var r=Qr(e,i),a=r[0],s=r[1];this.setOutputMatrixTextureDriver(t,a,s)},n.prototype.setOutputMatrixWriteRegion=function(t,e,i,r){this.setOutputMatrixWriteRegionDriver(i,t,r,e)},n.prototype.setOutputPackedMatrixWriteRegion=function(t,e,i,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},n.prototype.debugValidate=function(){this.program!=null&&ko(this.gl,this.program),ts(this.gl)},n.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),ce(t,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},n.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),ce(this.gl,function(){return t.gl.finish()})},n.prototype.getQueryTimerExtension=function(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=es(this.gl,N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},n.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},n.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},n.prototype.beginQuery=function(){if(N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),i=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,i),i}var r=this.getQueryTimerExtensionWebGL1(),a=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,a),a},n.prototype.endQuery=function(){if(N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var t=this.gl,e=this.getQueryTimerExtensionWebGL2();t.endQuery(e.TIME_ELAPSED_EXT);return}var i=this.getQueryTimerExtensionWebGL1();i.endQueryEXT(i.TIME_ELAPSED_EXT)},n.prototype.waitForQueryAndGetTime=function(t){return Eo(this,void 0,void 0,function(){var e=this;return Do(this,function(i){switch(i.label){case 0:return[4,N.util.repeatedTry(function(){return e.disposed||e.isQueryAvailable(t,N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return i.sent(),[2,this.getQueryTime(t,N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},n.prototype.getQueryTime=function(t,e){if(e===0)return null;if(e===2){var i=this.gl,r=i.getQueryParameter(t,i.QUERY_RESULT);return r/1e6}else{var a=this.getQueryTimerExtensionWebGL1(),r=a.getQueryObjectEXT(t,a.QUERY_RESULT_EXT);return r/1e6}},n.prototype.isQueryAvailable=function(t,e){if(e===0)return!0;if(e===2){var i=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=i.getQueryParameter(t,i.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}else{var r=this.getQueryTimerExtensionWebGL1(),a=r.getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}},n.prototype.pollFence=function(t){var e=this;return new Promise(function(i){e.addItemToPoll(function(){return t.isFencePassed()},function(){return i()})})},n.prototype.pollItems=function(){for(var t=A5(this.itemsToPoll.map(function(r){return r.isDoneFn})),e=0;e<=t;++e){var i=this.itemsToPoll[e].resolveFn;i()}this.itemsToPoll=this.itemsToPoll.slice(t+1)},n.prototype.addItemToPoll=function(t,e){var i=this;if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),this.itemsToPoll.length>1)return;N.util.repeatedTry(function(){return i.pollItems(),i.itemsToPoll.length===0})},n.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),Fo(this.gl,t,this.framebuffer),this.debug&&ts(this.gl)},n.prototype.unbindTextureToFrameBuffer=function(){this.outputTexture!=null?(Fo(this.gl,this.outputTexture,this.framebuffer),this.debug&&ts(this.gl)):Od(this.gl,this.framebuffer)},n.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var i=e();return this.unbindTextureToFrameBuffer(),i},n.prototype.setOutputMatrixTextureDriver=function(t,e,i){this.throwIfDisposed();var r=this.gl;Fo(r,t,this.framebuffer),this.debug&&ts(r),this.outputTexture=t,ce(r,function(){return r.viewport(0,0,e,i)}),ce(r,function(){return r.scissor(0,0,e,i)})},n.prototype.setOutputMatrixWriteRegionDriver=function(t,e,i,r){var a=this;this.throwIfDisposed(),ce(this.gl,function(){return a.gl.scissor(t,e,i,r)})},n.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},n.prototype.throwIfNoProgram=function(){if(this.program==null)throw new Error("No GPU program is currently set.")},n}();function A5(n){for(var t=0;t0&&(b.flatOffset=g.texData.slice.flatOffset),{name:t.variableNames[v],shapeInfo:b}}),s=a.map(function(g){return g.shapeInfo}),o={logicalShape:i.shape,texShape:i.texData.texShape,isUniform:!1,isPacked:i.texData.isPacked,flatOffset:null},l=K_(a,o,r,t.packedInputs),u=n.createProgram(l),c=null,h=n.getUniformLocation(u,"NAN",!1);N.env().getNumber("WEBGL_VERSION")===1&&(c=n.getUniformLocation(u,"INFINITY",!1));for(var d={},p=0;p0,l=s.isUniform?"uniform":s.texData.texShape;i+=s.shape+"_"+l+"_"+o});var r=n.userCode,a=n.constructor.name;return a+="_"+i+"_"+r,a}var C5=function(){function n(t,e,i){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var r=i.filterWidth,a=i.inChannels,s=i.strideWidth,o=i.strideHeight,l=i.padInfo,u=i.outWidth,c=i.dilationWidth,h=i.dilationHeight,d=i.dataFormat,p=l.left,f=l.top,m=a*r,g=Ft(),v=d==="channelsLast",b=v?0:1,w=v?1:2,S="",L=0;L<=1;L++)for(var x=0;x<=1;x++)S+=` blockIndex = rc.y + `+x+`; pos = rc.x + `+L+`; if(blockIndex < `+t[1]+" && pos < "+t[0]+`) { offsetY = int(blockIndex / (`+u+")) * "+o+" - "+f+`; d0 = offsetY + `+h+" * (pos / "+m+`); if(d0 < `+e[b]+` && d0 >= 0) { offsetX = int(mod(float(blockIndex), `+u+".) * "+s+". - "+p+`.); d1 = offsetX + `+c+" * (int(mod(float(pos), "+m+".) / "+a+`.)); if(d1 < `+e[w]+` && d1 >= 0) { ch = int(mod(float(pos), `+a+`.)); if (`+v+`) { innerDims = vec2(d1, ch); result[`+(L*2+x)+`] = getChannel( getA(d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[`+(L*2+x)+`] = getChannel( getA(ch, int(innerDims.x), int(innerDims.y)), innerDims); } } } } `;this.userCode=` void main() { ivec2 rc = getOutputCoords(); vec4 result = vec4(0); int blockIndex, pos, offsetY, d0, offsetX, d1, ch; vec2 innerDims; `+S+` `+g.output+` = result; } `}return n}();var R5=function(){function n(t,e,i,r,a){this.variableNames=["x"],this.outputShape=[];var s=e,o=t[3]-1;this.outputShape=t;var l,u="float("+i+") + float("+r+") * sum";a===.5?l="inversesqrt("+u+")":a===1?l="1.0/("+u+")":l="exp(log("+u+") * float(-"+a+"));",this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; int d = coords[3]; float x = getX(b, r, c, d); float sum = 0.0; for (int j = -`+s+"; j <= "+s+`; j++) { int idx = d + j; if (idx >= 0 && idx <= `+o+`) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * `+l+`; setOutput(val); } `}return n}();var O5=function(){function n(t,e,i,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=i,this.alpha=r,this.beta=a,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; float result = 0.0; for (int d = 0; d < `+this.depth+`; ++d) { int depthBegin = int(max(0.0, float(d - `+e+`))); int depthEnd = int(min(float(`+this.depth+`), float(d + `+e+` + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = `+this.depth+`; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(`+r+") * norm + float("+i+`); for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd){ float dyi = -2.0 * float(`+r+`) * float(`+a+`) * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) / norm; if (k == d) { dyi += pow(norm, -1.0 * `+a+`); } if (k == coords[3]) { dyi *= getDy(b, r, c, d); result += dyi; } } else { break; } } } setOutput(result); } `}return n}();var E5=function(){function n(t,e,i,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var s=e,o=t[3]-1;this.outputShape=t;var l,u="float("+i+") + float("+r+") * sum";a===.5?l="inversesqrt("+u+")":a===1?l="1.0/("+u+")":l="exp(log("+u+") * float(-"+a+"));",this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; int r = coords.y; int c = coords.z; int d = coords.w; bool hasNextCol = d < `+this.outputShape[3]+`; bool hasNextRow = c < `+this.outputShape[2]+`; vec4 sum = vec4(0.); vec4 xFragAtOutputCoords = getX(b, r, c, d); vec4 xAtOutputCoords = vec4( getChannel(xFragAtOutputCoords, vec2(c, d)), hasNextCol ? getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, hasNextRow ? getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, (hasNextRow && hasNextCol) ? getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 ); int firstChannel = d - `+s+`; vec2 cache = vec2(0.); if(firstChannel >= 0){ vec4 firstChannelFrag = getX(b, r, c, firstChannel); cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); if(hasNextRow){ cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); } } ivec2 depth = ivec2(d, d + 1); for (int j = - `+s+"; j <= "+s+`; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(`+o+`)); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * `+l+`; setOutput(result); } `}return n}();var D5=function(){function n(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,i=t.strideWidth,r=t.dilationHeight,a=t.effectiveFilterHeight,s=t.effectiveFilterWidth,o=a-1-t.padInfo.top,l=s-1-t.padInfo.left,u=a*s-1;this.userCode=` const ivec2 pads = ivec2(`+o+", "+l+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+a+`; wR += `+r+`) { float dyR = float(dyRCorner + wR) / `+e+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+s+`; wC++) { float dyC = float(dyCCorner + wC) / `+i+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); int maxPosValue = `+u+` - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * `+s+` + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `}return n}(),k5=function(){function n(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,a=t.dilationDepth,s=t.dilationHeight,o=t.dilationWidth,l=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,h=l-1-t.padInfo.front,d=u-1-t.padInfo.top,p=c-1-t.padInfo.left,f=l*u*c-1;this.userCode=` const ivec3 pads = ivec3(`+h+", "+d+", "+p+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < `+l+`; wD += `+a+`) { float dyD = float(dyDCorner + wD) / `+e+`.0; if (dyD < 0.0 || dyD >= `+t.outDepth+`.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < `+u+`; wR += `+s+`) { float dyR = float(dyRCorner + wR) / `+i+`.0; if (dyR < 0.0 || dyR >= `+t.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+c+`; wC += `+o+`) { float dyC = float(dyCCorner + wC) / `+r+`.0; if (dyC < 0.0 || dyC >= `+t.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); int maxPosValue = `+f+` - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wD * `+u+" * "+c+` + wR * `+c+` + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `}return n}();var Hd=function(){function n(t,e,i,r,a,s,o){i===void 0&&(i=!1),r===void 0&&(r=!1),a===void 0&&(a=!1),s===void 0&&(s=null),o===void 0&&(o=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;var l=i?t[1]:t[2],u=Math.ceil(l/2),c=i?"i * 2, rc.y":"rc.y, i * 2",h=r?"rc.z, i * 2":"i * 2, rc.z",d=i?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],p=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",m="";s&&(o?f=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); `+s+` }`:f=`vec4 activation(vec4 x) { `+s+` }`,m="result = activation(result);");var g=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+f+` const float sharedDimension = `+u+`.0; vec4 dot2x2ARowBCol(ivec3 rc) { vec4 result = vec4(0); for (int i = 0; i < `+u+`; i++) { vec4 a = getMatrixA(rc.x, `+c+`); vec4 b = getMatrixB(rc.x, `+h+`); // These swizzled products need to be separately added. // See: https://github.com/tensorflow/tfjs/issues/1735 result += (`+d[0]+" * "+p[0]+`); result += (`+d[1]+" * "+p[1]+`); } return result; } void main() { ivec3 rc = getOutputCoords(); vec4 result = dot2x2ARowBCol(rc); `+g+` `+m+` setOutput(result); } `}return n}();var F5=function(){function n(t,e,i){this.variableNames=["probs"],this.outputShape=[t,i],this.userCode=` uniform float seed; void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; float r = random(seed); float cdf = 0.0; for (int i = 0; i < `+(e-1)+`; i++) { cdf += getProbs(batch, i); if (r < cdf) { setOutput(float(i)); return; } } // If no other event happened, last event happened. setOutput(float(`+(e-1)+`)); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;return function(i,r){e.seedLoc==null&&(e.seedLoc=i.getUniformLocation(r,"seed")),i.gl.uniform1f(e.seedLoc,t)}},n}();var W5=function(){function n(t,e,i,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(`+r+"), float("+i+`), float(index == coords.y))); } `}return n}();var P5=function(){function n(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t;var e=t.length;if(e===0)this.userCode=` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } `;else{var i=Xt("rc",e),r=Ze(e),a=U5(e,t,i),s=B5(e,t[t.length-1],t[t.length-2],i),o=z5(t,i);this.userCode=` void main() { `+r+` rc = getOutputCoords(); if(`+a+`) { setOutput(vec4(0)); } else { `+s+` setOutput(vec4(`+o+`)); } } `}}return n}();function _5(n,t){for(var e=[],i=0;i<=1;i++)for(var r=0;r<=1;r++){for(var a=(i===0?"r":"rp1")+", "+(r===0?"c":"cp1"),s=2;s "+t[0];for(var i="",r=n-2;r= "+t[r],r= `+t+`; bool rEdge = rp1 >= `+e+`; `}function z5(n,t){var e=n.length,i=_5(e,t);return e===1?`getA(rc), rc + 1 >= `+n[0]+` ? 0. : getA(rc + 1), 0, 0`:"getA("+i[0]+`), cEdge ? 0. : getA(`+i[1]+`), rEdge ? 0. : getA(`+i[2]+`), rEdge || cEdge ? 0. : getA(`+i[3]+")"}var M5=function(){function n(t,e,i){this.variableNames=["x"],this.outputShape=e.map(function(u,c){return u[0]+t[c]+u[1]});var r=t.length,a=Ze(r),s=e.map(function(u){return u[0]}).join(","),o=e.map(function(u,c){return u[0]+t[c]}).join(","),l=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=` int start = `+s+`; int end = `+o+`; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(float(`+i+`)); } else { setOutput(getX(outC - start)); } } `;return}this.userCode=` `+a+" start = "+a+"("+s+`); `+a+" end = "+a+"("+o+`); void main() { `+a+` outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(float(`+i+`)); } else { `+a+` coords = outC - start; setOutput(getX(`+l+`)); } } `}return n}();var H5=function(){function n(t,e,i){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map(function(v,b){return v[0]+t[b]+v[1]});for(var r=t.length,a=Ze(r),s=e.map(function(v){return v[0]}).join(","),o=e.map(function(v,b){return v[0]+t[b]}).join(","),l=Xt("rc",r),u=Xt("source",r),c=l[r-1]+" < "+this.outputShape[r-1],h=r===1?"source":"vec2("+u.slice(-2).join()+")",d=[a+" rc = outputLoc;",l[r-1]+` += 1; if(`+c+`) { `,r===1?"":`} rc = outputLoc; `+l[r-2]+` += 1; if(`+l[r-2]+" < "+this.outputShape[r-2]+") {",r===1?"":" "+l[r-1]+` += 1; if(`+c+") {"],p=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="",m=0,g=r===1?2:4;m= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+d+`; wC += `+c+`) { int xC = xCCorner + wC; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } float value = getX(batch, xR, xC, d); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value `+w+` currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = `+(r?a?g:v:"wR * "+d+" + wC")+`; } } } setOutput(float(minMaxPosition)); } `;return}var S="max",L=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";e==="avg"&&(L="avgValue / count");var x=Math.floor(s/4)*4,C=s%4,R=` if (`+m+`) { avgValue += dot(values, ones); } else { minMaxValue = `+S+`(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(`+o+", "+l+`); const ivec2 pads = ivec2(`+p+", "+f+`); const float initializationValue = `+b+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= `+t.inWidth+`) { return initializationValue; } count += 1.0; return getX(batch, xR, xC, d); } void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined vec4 minMaxValue = vec4(`+b+`); float avgValue = 0.0; count = 0.0; for (int wR = 0; wR < `+h+`; wR += `+u+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+x+`; wC += 4) { int xC = xCCorner + wC * `+c+`; vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+c+`, d), getValue(batch, xR, xC + 2 * `+c+`, d), getValue(batch, xR, xC + 3 * `+c+`, d) ); `+R+` } int xC = xCCorner + `+x+`; if (`+(C===1)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); `+R+` } else if (`+(C===2)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+c+`, d), initializationValue, initializationValue ); `+R+` } else if (`+(C===3)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+c+`, d), getValue(batch, xR, xC + 2 * `+c+`, d), initializationValue ); `+R+` } } setOutput(`+L+`); } `}return n}(),Vd=function(){function n(t,e,i,r,a){if(r===void 0&&(r=!1),a===void 0&&(a=!1),this.variableNames=["x"],e==="avg"&&i)throw new Error("Cannot compute positions for average pool.");var s=t.filterWidth,o=t.strideDepth,l=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,h=t.dilationHeight,d=t.dilationWidth,p=t.effectiveFilterDepth,f=t.effectiveFilterHeight,m=t.effectiveFilterWidth,g=t.padInfo.front,v=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;var w=e==="avg",S="0.0";if(w||(S="-1.0 / 1e-20"),i){var L=">=";this.userCode=` const ivec3 strides = ivec3(`+o+", "+l+", "+u+`); const ivec3 pads = ivec3(`+g+", "+v+", "+b+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; for (int wD = 0; wD < `+p+`; wD += `+c+`) { int xD = xDCorner + wD; if (xD < 0 || xD >= `+t.inDepth+`) { continue; } for (int wR = 0; wR < `+f+`; wR += `+h+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+m+`; wC += `+d+`) { int xC = xCCorner + wC; if (xC < 0 || xC >= `+t.inWidth+`) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value `+L+` currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = `+(r?a?"(((batch * "+t.inDepth+" + xD) * "+t.inHeight+" + xR) * "+t.inWidth+" + xC) * "+t.inChannels+" + ch":"((xD * "+t.inHeight+" + xR) * "+t.inWidth+" + xC) * "+t.inChannels+" + ch":"wD * "+f+" * "+m+` + wR * `+m+" + wC")+`; } } } } setOutput(float(minMaxPosition)); } `;return}var x="max",C=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";e==="avg"&&(C="avgValue / count");var R=Math.floor(s/4)*4,D=s%4,k=` if (`+w+`) { avgValue += dot(values, ones); } else { minMaxValue = `+x+`(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(`+o+", "+l+", "+u+`); const ivec3 pads = ivec3(`+g+", "+v+", "+b+`); const float initializationValue = `+S+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xD, int xR, int xC, int ch) { if (xC < 0 || xC >= `+t.inWidth+`) { return initializationValue; } count += 1.0; return getX(batch, xD, xR, xC, ch); } void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined vec4 minMaxValue = vec4(`+S+`); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < `+p+`; wD += `+c+`) { int xD = xDCorner + wD; if (xD < 0 || xD >= `+t.inDepth+`) { continue; } for (int wR = 0; wR < `+f+`; wR += `+h+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+t.inHeight+`) { continue; } for (int wC = 0; wC < `+R+`; wC += 4) { int xC = xCCorner + wC * `+d+`; vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), getValue(batch, xD, xR, xC + 2 * `+d+`, ch), getValue(batch, xD, xR, xC + 3 * `+d+`, ch) ); `+k+` } int xC = xCCorner + `+R+`; if (`+(D===1)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); `+k+` } else if (`+(D===2)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), initializationValue, initializationValue ); `+k+` } else if (`+(D===3)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), getValue(batch, xD, xR, xC + 2 * `+d+`, ch), initializationValue ); `+k+` } } setOutput(`+C+`); } } `}return n}();var IS=function(){function n(t,e){this.variableNames=["x"];var i=t.windowSize,r=t.batchSize,a=t.inSize,s=t.outSize;this.outputShape=[r,s];var o="0.0",l="";e==="prod"?o="1.0":e==="min"?(o="1.0 / 1e-20",l="min"):e==="max"&&(o="-1.0 / 1e-20",l="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";e==="sum"?u="sumValue":e==="prod"?u="prodValue":e==="all"?u="allValue":e==="any"&&(u="anyValue");var c=Math.floor(i/4)*4,h=i%4,d=` if (`+(e==="sum")+`) { sumValue += dot(values, ones); } else if (`+(e==="prod")+`) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = `+l+`(values, minMaxValue); } `,p="vec4";e==="all"?(o="1.0",d=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,p="bvec4"):e==="any"&&(o="0.0",d=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); `,p="bvec4");var f="";a%i>0&&(f=` if (inIdx < 0 || inIdx >= `+a+`) { return initializationValue; } `),this.userCode=` const float initializationValue = `+o+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { `+f+` return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * `+i+`; vec4 minMaxValue = vec4(`+o+`); float prodValue = 1.0; float sumValue = 0.0; float allValue = 1.0; float anyValue = 0.0; for (int i = 0; i < `+c+`; i += 4) { int inIdx = inOffset + i; `+p+" values = "+p+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); `+d+` } int inIdx = inOffset + `+c+`; if (`+(h===1)+`) { `+p+" values = "+p+`( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); `+d+` } else if (`+(h===2)+`) { `+p+" values = "+p+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); `+d+` } else if (`+(h===3)+`) { `+p+" values = "+p+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); `+d+` } setOutput(`+u+`); } `}return n}();var AS=function(){function n(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var i="",r=0;r<4;r++){var a="thisRC = rc;";r%2===1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),i+=` `+a+` `+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+` int flatIndex = getFlatIndex(thisRC); ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); result[`+r+`] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); `+(r>0?"}":"")+` `}this.userCode=` `+V5(e)+` `+Fd(t)+` void main() { ivec3 rc = getOutputCoords(); vec4 result = vec4(0.); ivec3 thisRC; int rows = `+t[1]+`; int cols = `+t[2]+`; `+i+` setOutput(result); } `}return n}();function V5(n){var t=hr(["r","c","d"],n);return` ivec3 inputCoordsFromReshapedOutCoords(int index) { `+t+` return ivec3(r, c, d); } `}var q5=function(){function n(t,e,i){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],s=r[2],o=t.shape,l=o[1],u=o[2],c=[i&&l>1?a-1:a,i&&u>1?s-1:s],h=[i&&l>1?l-1:l,i&&u>1?u-1:u],d=c[0]/h[0],p=c[1]/h[1],f=1/d,m=1/p,g=Math.ceil(f)*2+2,v=Math.ceil(m)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(`+d+`); const float widthScale = float(`+p+`); const float invHeightScale = float(`+f+`); const float invWidthScale = float(`+m+`); const int winHeight = int(`+g+`); const int winWidth = int(`+v+`); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(startRLerp - float(winHeight / 2)); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(startCLerp - float(winWidth / 2)); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= `+l+`) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= `+u+`) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), `+(a-1)+`.0)); float dxRLerp = dxR - float(topDxRIndex); float inverseDxRLerp = 1.0 - dxRLerp; float dxC = float(dyC) * widthScale; int leftDxCIndex = int(floor(dxC)); int rightDxCIndex = int(min(ceil(dxC), `+(s-1)+`.0)); float dxCLerp = dxC - float(leftDxCIndex); float inverseDxCLerp = 1.0 - dxCLerp; if (r == topDxRIndex && c == leftDxCIndex) { // topLeft accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; } if (r == topDxRIndex && c == rightDxCIndex) { // topRight accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; } if (r == bottomDxRIndex && c == leftDxCIndex) { // bottomLeft accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; } if (r == bottomDxRIndex && c == rightDxCIndex) { // bottomRight accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; } } } // End loop over dy setOutput(accumulator); } `}return n}();var G5=function(){function n(t,e,i,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],s=t[1],o=t[2],l=t[3];this.outputShape=[a,e,i,l];var u=[r&&e>1?s-1:s,r&&i>1?o-1:o],c=[r&&e>1?e-1:e,r&&i>1?i-1:i];this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( `+u[0]/c[0]+`, `+u[1]/c[1]+`); const vec2 inputShapeRC = vec2(`+s+".0, "+o+`.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC; // Compute the four integer indices. ivec2 sourceFloorRC = ivec2(sourceFracIndexRC); ivec2 sourceCeilRC = ivec2( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); float top = topLeft + (topRight - topLeft) * fracRC.y; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; float newValue = top + (bottom - top) * fracRC.x; setOutput(newValue); } `}return n}();var Y5=function(){function n(t,e,i,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var a=t[0],s=t[1],o=t[2],l=t[3];this.outputShape=[a,e,i,l];var u=[r&&e>1?s-1:s,r&&i>1?o-1:o],c=[r&&e>1?e-1:e,r&&i>1?i-1:i];this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( `+u[0]/c[0]+`, `+u[1]/c[1]+`, `+u[1]/c[1]+`); const vec3 inputShapeRC = vec3(`+s+".0, "+o+`.0, `+o+`.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC; // Compute the four integer indices. ivec3 sourceFloorRC = ivec3(sourceFracIndexRC); ivec3 sourceCeilRC = ivec3( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < `+(l-1)+`; bool hasNextRow = coords.z < `+(i-1)+`; // In parallel, construct four corners for all four components in // packed 2x2 cell. vec4 topLeft = vec4( getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 bottomLeft = vec4( getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 topRight = vec4( getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); vec4 bottomRight = vec4( getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); vec4 top = mix(topLeft, topRight, fracRC.yyzz); vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); vec4 newValue = mix(top, bottom, fracRC.x); setOutput(newValue); } `}return n}();var K5=function(){function n(t,e,i){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],s=r[2],o=t.shape,l=o[1],u=o[2],c=[i&&l>1?a-1:a,i&&u>1?s-1:s],h=[i&&l>1?l-1:l,i&&u>1?u-1:u],d=c[0]/h[0],p=c[1]/h[1],f=1/d,m=1/p,g=Math.ceil(f)*2+2,v=Math.ceil(m)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(`+d+`); const float widthScale = float(`+p+`); const float invHeightScale = float(`+f+`); const float invWidthScale = float(`+m+`); const int winHeight = int(`+g+`); const int winWidth = int(`+v+`); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(floor(startRLerp - float(winHeight / 2))); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(floor(startCLerp - float(winWidth / 2))); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= `+l+`) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= `+u+`) { continue; } float sourceFracRow = float(`+c[0]+`) * (float(dyR) / float(`+h[0]+`)); float sourceFracCol = float(`+c[1]+`) * (float(dyC) / float(`+h[1]+`)); int sourceNearestRow = int(min( float(int(`+a+`) - 1), `+i+` ? float(round(sourceFracRow)) : float(floor(sourceFracRow)))); int sourceNearestCol = int(min( float(int(`+s+`) - 1), `+i+` ? float(round(sourceFracCol)) : float(floor(sourceFracCol)))); if (r == sourceNearestRow && c == sourceNearestCol) { accumulator += getDy(b, dyR, dyC, d); } } } // End loop over dy setOutput(accumulator); } `}return n}();var j5=function(){function n(t,e,i,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],s=t[1],o=t[2],l=t[3];this.outputShape=[a,e,i,l];var u=[r&&e>1?s-1:s,r&&i>1?o-1:o],c=[r&&e>1?e-1:e,r&&i>1?i-1:i],h=r?"0.5":"0.0";this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( `+u[0]/c[0]+`, `+u[1]/c[1]+`); const vec2 inputShapeRC = vec2(`+s+".0, "+o+`.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + `+h+`))); float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); setOutput(newValue); } `}return n}();var $5=function(){function n(t,e){this.variableNames=["x"];var i=t.length;if(i>4)throw new Error("WebGL backend: Reverse of rank-"+i+" tensor is not yet supported");if(this.outputShape=t,i===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(`+t[0]+` - coord - 1)); } `;return}var r=function(o){return e.indexOf(o)!==-1&&t[o]!==1?t[o]+" - coords["+o+"] - 1":"coords["+o+"]"},a=t.map(function(o,l){return r(l)}).join(","),s=Ze(i);this.userCode=` void main() { `+s+` coords = getOutputCoords(); setOutput(getX(`+a+`)); } `}return n}();var X5=function(){function n(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var i=t.length;if(i>4)throw new Error("WebGL backend: Reverse of rank-"+i+" tensor is not yet supported");this.outputShape=t;var r=Xt("rc",i),a=r[i-1]+" + 1 < "+this.outputShape[i-1],s=r[i-2]+" + 1 < "+this.outputShape[i-2],o=Ze(i);i===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); result.r = getChannel(getX(`+t[0]+` - rc - 1), `+t[0]+` - rc - 1); if(`+a+`){ result.g = getChannel(getX(`+t[0]+` - (rc + 1) - 1), `+t[0]+` - (rc + 1) - 1); } setOutput(result); } `:this.userCode=` void main() { `+o+` rc = getOutputCoords(); vec4 result = vec4(0.); result.r = `+l(r.slice())+`; if(`+a+`){ result.g = `+u(r.slice())+`; } if(`+s+`) { result.b = `+c(r.slice())+`; if(`+a+`) { result.a = `+h(r.slice())+`; } } setOutput(result); } `;function l(f){return d(f)}function u(f){return f[i-1]="("+f[i-1]+" + 1)",d(f)}function c(f){return f[i-2]="("+f[i-2]+" + 1)",d(f)}function h(f){return f[i-1]="("+f[i-1]+" + 1)",f[i-2]="("+f[i-2]+" + 1)",d(f)}function d(f){var m=t.map(function(b,w){return p(w,f)}),g=m.join(","),v=m.slice(-2).join(",");return"getChannel(getX("+g+"), vec2("+v+"))"}function p(f,m){return e.indexOf(f)!==-1&&t[f]!==1?t[f]+" - "+m[f]+" - 1":""+m[f]}}return n}();var TS=function(){function n(t,e,i,r,a,s,o){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;var l=Ze(a.length),u=Ze(s.length),c="";i===1?c="i":i===2&&(c="i, j");var h="getIndices("+c+")",d="";r===1?d="i":r===2&&(d="i, coords[1]");var p="getUpdates("+d+")",f=e>1?"strides[j]":"strides";this.userCode=` `+l+" strides = "+l+"("+a+`); void main() { `+u+` coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < `+t+`; i++) { int flattenedIndex = 0; for (int j = 0; j < `+e+`; j++) { int index = round(`+h+`); flattenedIndex += index * `+f+`; } if (flattenedIndex == coords[0]) { sum += `+p+`; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } `}return n}();var J5=function(){function n(t,e){this.variableNames=["x","segmentIds"];var i=t.windowSize,r=t.batchSize,a=t.inSize,s=t.numSegments,o=s*Math.ceil(a/i);this.outputShape=[r,o];var l="0.0",u="sumValue",c=Math.floor(i/4)*4,h=i%4,d=` sumValue += dot(values, segFilter); `,p="";a%i>0&&(p=` if (inIdx < 0 || inIdx >= `+a+`) { return initializationValue; } `);var f="";a%i>0&&(f=` if (inIdx < 0 || inIdx >= `+a+`) { return -1.0; } `),this.userCode=` const float initializationValue = `+l+`; float getValue(int batch, int inIdx) { `+p+` return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { `+f+` return getSegmentIds(inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = int(floor(float(outIdx) / float( `+s+")) * float("+i+`)); int currentSeg = int(mod(float(outIdx), float(`+s+`))); float sumValue = 0.0; for (int i = 0; i < `+c+`; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 ); `+d+` } int inIdx = inOffset + `+c+`; if (`+(h===1)+`) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, 0, 0, 0 ); `+d+` } else if (`+(h===2)+`) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, 0, 0 ); `+d+` } else if (`+(h===3)+`) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, 0 ); `+d+` } setOutput(`+u+`); } `}return n}();var Z5=function(){function n(t,e,i){this.variableNames=["c","a","b"],this.outputShape=e;var r,a;if(i>4)throw Error("Where for rank "+i+" is not yet supported");if(i===1)a="resRC",r="resRC";else{for(var s=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[],u=0;u= 1.0) { setOutput(getA(`+a+`)); } else { setOutput(getB(`+a+`)); } } `}return n}();var e9=function(){function n(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e=Ze(this.rank),i="uniform int start["+this.rank+"];",r=Q5(this.rank),a,s=t.map(function(o,l){return"sourceLoc."+qd[l]+" = start["+l+"] + coords."+qd[l]+";"});a=` `+e+` sourceLoc; `+e+` coords = getOutputCoords(); `+s.join(` `)+` `,this.userCode=` `+i+` void main() { `+a+` setOutput(getSource(`+r+`)); } `}return n.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(i,r){if(e.startLoc==null&&(e.startLoc=i.getUniformLocationNoThrow(r,"start"),e.startLoc==null))return;i.gl.uniform1iv(e.startLoc,t)}},n}(),qd=["x","y","z","w","u","v"];function Q5(n){if(n===1)return"sourceLoc";if(n<=6)return qd.slice(0,n).map(function(t){return"sourceLoc."+t}).join(",");throw Error("Slicing for rank "+n+" is not yet supported")}var t9=function(){function n(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=Ze(this.rank),i=Xt("coords",this.rank),r=Xt("sourceLoc",this.rank),a=this.rank===1?"sourceLoc":"vec2("+r.slice(-2).join()+")",s="getChannel(getSource("+r.join()+"), "+a+")",o=` result.x = `+s+`; if (++`+i[this.rank-1]+" < "+t[this.rank-1]+`) { ++`+r[this.rank-1]+`; result.y = `+s+`; --`+r[this.rank-1]+`; } `,l=this.rank===1?"":` --`+i[this.rank-1]+`; if (++`+i[this.rank-2]+" < "+t[this.rank-2]+`) { ++`+r[this.rank-2]+`; result.z = `+s+`; if (++`+i[this.rank-1]+" < "+t[this.rank-1]+`) { ++`+r[this.rank-1]+`; result.w = `+s+`; } } `,u=this.rank<=4?`sourceLoc = coords + `+e+"("+t.map(function(c,h){return"start["+h+"]"}).join()+");":t.map(function(c,h){return r[h]+" = "+i[h]+" + start["+h+"];"}).join(` `);this.userCode=` uniform int start[`+this.rank+`]; void main() { `+e+` coords = getOutputCoords(); `+e+` sourceLoc; `+u+` vec4 result = vec4(0.); `+o+` `+l+` setOutput(result); } `}return n.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(i,r){if(e.startLoc==null&&(e.startLoc=i.getUniformLocationNoThrow(r,"start"),e.startLoc==null))return;i.gl.uniform1iv(e.startLoc,t)}},n}();var n9=function(){function n(t,e,i){this.variableNames=["x"],this.outputShape=i;var r=i.length,a=Ze(i.length),s=Ze(i.length),o="";if(r===1)o="coords * strides + begin";else{var l=0;o=i.map(function(u,c){return l++,i.length===1?"coords * strides["+c+"] + begin["+c+"]":"coords["+(l-1)+"] * strides["+c+"] + begin["+c+"]"}).join(",")}this.userCode=` `+a+" begin = "+a+"("+t+`); `+a+" strides = "+a+"("+e+`); void main() { `+s+` coords = getOutputCoords(); setOutput(getX(`+o+`)); } `}return n}();var i9=function(){function n(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return n.prototype.acquireTexture=function(t,e,i){var r=xS(e,i),a=CS(t,r,i);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);var s=NS(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,i);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();var o=this.freeTextures[a].shift();return this.usedTextures[a].push(o),o}var l;return r===Ct.PACKED_2X2_FLOAT32?l=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):r===Ct.PACKED_2X2_FLOAT16?l=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):r===Ct.UNPACKED_FLOAT32?l=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):r===Ct.UNPACKED_FLOAT16?l=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):r===Ct.PACKED_4X1_UNSIGNED_BYTE&&(l=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(l),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),l},n.prototype.releaseTexture=function(t,e,i,r){if(this.freeTextures==null)return;var a=xS(i,r),s=CS(e,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);var o=NS(e,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),l=N.env().get("WEBGL_DELETE_TEXTURE_THRESHOLD");l!==-1&&this._numBytesAllocated>l?(this.gpgpu.deleteMatrixTexture(t),this._numBytesAllocated-=o):(this.freeTextures[s].push(t),this.numFreeTextures++,this._numBytesFree+=o),this.numUsedTextures--;var u=this.usedTextures[s],c=u.indexOf(t);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u.splice(c,1),this.log()},n.prototype.log=function(){if(!this.logEnabled)return;var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")");var e=this._numBytesFree/this._numBytesAllocated;console.log("Bytes allocated: "+this._numBytesAllocated),console.log("Bytes unused: "+this._numBytesFree+" ("+Math.round(100*e)+"%)")},Object.defineProperty(n.prototype,"numBytesAllocated",{get:function(){return this._numBytesAllocated},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"numBytesFree",{get:function(){return this._numBytesFree},enumerable:!0,configurable:!0}),n.prototype.getNumUsedTextures=function(){return this.numUsedTextures},n.prototype.getNumFreeTextures=function(){return this.numFreeTextures},n.prototype.dispose=function(){var t=this;if(this.freeTextures==null)return;for(var e in this.freeTextures)this.freeTextures[e].forEach(function(i){t.gpgpu.deleteMatrixTexture(i)});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(r){t.gpgpu.deleteMatrixTexture(r)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0},n}();function r9(n,t){var e=n;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===n.RGBA)return 16;if(t===e.RGBA16F)return 8;throw new Error("Unknown internal format "+t)}function NS(n,t,e,i,r){var a=a9(t,i),s;if(r){var o=Qr(n[0],n[1]),l=o[0],u=o[1];s=l*u}else{var c=Za(n[0],n[1]),h=c[0],d=c[1];s=h*d}var p=r9(e,a);return s*p}function a9(n,t){switch(n){case Ct.PACKED_2X2_FLOAT32:return _d(t);case Ct.PACKED_2X2_FLOAT16:return Md(t);case Ct.UNPACKED_FLOAT32:return Bd(t);case Ct.UNPACKED_FLOAT16:return zd(t);case Ct.PACKED_4X1_UNSIGNED_BYTE:return Pd(t);default:throw new Error("Unknown physical texture type "+n)}}function s9(n){return N.env().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?n?Ct.PACKED_2X2_FLOAT32:Ct.UNPACKED_FLOAT32:n?Ct.PACKED_2X2_FLOAT16:Ct.UNPACKED_FLOAT16}function xS(n,t){if(n===rn.UPLOAD)return Ct.PACKED_2X2_FLOAT32;if(n===rn.RENDER||n==null)return s9(t);if(n===rn.DOWNLOAD||n===rn.PIXELS)return Ct.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+n)}function CS(n,t,e){return n[0]+"_"+n[1]+"_"+t+"_"+e}var l9=function(){function n(t,e){this.variableNames=["A"];for(var i=new Array(t.length),r=0;r5)throw Error("Tile for rank "+t+" is not yet supported");if(t===1)return"imod(resRC, "+n[0]+")";for(var e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],i=[],r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `;function h9(n){return n===void 0&&(n=0),ei+(` return x > 0.0 ? 1.0 : float(`+n+`); `)}var kS="return -x;",FS="return ceil(x);",WS="return floor(x);",d9=` if (isnan(x)) { return 0.0; } return sign(x); `,p9="return float(isnan(x));",f9="return float(isinf(x));",m9="return float(!isnan(x) && !isinf(x));",g9=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); if ((x - base) < 0.5) { return floor(x); } else if ((x - base) > 0.5) { return ceil(x); } else { if (mod(base, 2.0) == 0.0) { return base; } else { return base + 1.0; } } `,US="return exp(x);",BS="return exp(x) - 1.0;",v9=`if (x < 0.0) return NAN; return log(x);`,y9="return log(1.0 + x);",b9="return sqrt(x);",w9="return inversesqrt(x);",S9="return 1.0 / (1.0 + exp(-1.0 * x));",L9=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; bool too_large = x > -threshold; bool too_small = x < threshold; float result; float exp_x = exp(x); if (too_large){ result = x; } else if (too_small){ result = exp_x; } else{ result = log(exp_x + 1.0); } return result; `,I9=ei+` if (abs(x) > 1.) { return NAN; } return asin(x); `,A9=ei+` if (abs(x) > 1.) { return NAN; } return acos(x); `,T9=ei+` return atan(x); `,N9=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,x9=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,C9=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,R9=ei+"return log(x + sqrt(x * x + 1.0));",O9=ei+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,E9=ei+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = `+N.backend_util.ERF_P+`; float a1 = `+N.backend_util.ERF_A1+`; float a2 = `+N.backend_util.ERF_A2+`; float a3 = `+N.backend_util.ERF_A3+`; float a4 = `+N.backend_util.ERF_A4+`; float a5 = `+N.backend_util.ERF_A5+`; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `,k9="return 1.0 / x;",F9="return float(!(x >= 1.0));",W9="return float(int(x));",Mo="return x;";var U9="return x;",B9=` vec4 result = log(x); vec4 isNaN = vec4(lessThan(x, vec4(0.0))); result.r = isNaN.r == 1.0 ? NAN : result.r; result.g = isNaN.g == 1.0 ? NAN : result.g; result.b = isNaN.b == 1.0 ? NAN : result.b; result.a = isNaN.a == 1.0 ? NAN : result.a; return result; `,zS=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,PS=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,_S=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,as=function(){function n(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode=` vec4 unaryOperation(vec4 x) { `+e+` } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}return n}();var z9=function(){function n(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t;var e=t.length,i=Xt("rc",e),r=Ze(e),a=z_(e,i),s=i.slice(-2),o=e<=1?"rc":"vec2("+s.join(",")+")";this.userCode=` void main() { `+r+` rc = getOutputCoords(); vec4 packedInput = getA(`+a+`); setOutput(getChannel(packedInput, `+o+`)); } `}return n}();var MS=N.backend_util.segment_util,P9=N.kernel_impls.split,_9=N.kernel_impls.tile,M9=N.kernel_impls.topkImpl,H9=N.kernel_impls.whereImpl,V9=1e-7,q9=1e-4,Ho={};function G9(n){return n in Ho||(Ho[n]={}),Ho[n]}function Vo(n,t){if(t===void 0&&(t=!1),n==="linear")return t?U9:u9;if(n==="relu")return t?zS:OS;if(n==="elu")return t?_S:DS;if(n==="relu6")return t?PS:ES;if(n==="prelu")return t?X0:$0;throw new Error("Activation "+n+" has not been implemented for the WebGL backend.")}var Y9=128,K9=600;function j9(){return N.env().global.screen==null?1024:N.env().global.screen.height*N.env().global.screen.width*window.devicePixelRatio*K9/1024/1024}var HS=1e3,VS=function(n){GP(t,n);function t(e){var i=n.call(this)||this;if(i.pendingRead=new WeakMap,i.pendingDisposal=new WeakSet,i.dataRefCount=new WeakMap,i.numBytesInGPU=0,i.uploadWaitMs=0,i.downloadWaitMs=0,i.warnedAboutMemory=!1,i.warnedAboutCPUBackend=!1,i.pendingDeletes=0,i.disposed=!1,!N.env().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){var r=_n(N.env().getNumber("WEBGL_VERSION"));i.binaryCache=G9(N.env().getNumber("WEBGL_VERSION")),i.gpgpu=new SS(r),i.canvas=r.canvas,i.gpgpuCreatedLocally=!0}else i.gpgpu=e,i.binaryCache={},i.gpgpuCreatedLocally=!1,i.canvas=e.gl.canvas;return i.textureManager=new i9(i.gpgpu),i.numMBBeforeWarning=j9(),i.texData=new N.DataStorage(i,N.engine()),i}return t.prototype.numDataIds=function(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes},t.prototype.write=function(e,i,r){if((N.env().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||N.env().getBool("DEBUG"))&&this.checkNumericalProblems(e),r==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");var a={};return this.texData.set(a,{shape:i,dtype:r,values:e,usage:rn.UPLOAD,refCount:1}),a},t.prototype.incRef=function(e){var i=this.texData.get(e);i.refCount++},t.prototype.decRef=function(e){if(this.texData.has(e)){var i=this.texData.get(e);i.refCount--}},t.prototype.move=function(e,i,r,a){if(N.env().getBool("DEBUG")&&this.checkNumericalProblems(i),a==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:r,dtype:a,values:i,usage:rn.UPLOAD,refCount:1})},t.prototype.disposeIntermediateTensorInfo=function(e){var i=e.dataId;if(this.texData.has(i)){var r=this.texData.get(i);r.refCount--,r.refCount<1&&this.disposeData(i)}},t.prototype.readSync=function(e){var i=this.texData.get(e),r=i.values,a=i.dtype,s=i.complexTensors,o=i.slice,l=i.shape,u=i.isPacked;if(o!=null){var c=void 0;u?c=new as(l,Mo):c=new Re(l,Mo);var h=this.runWebGLProgram(c,[{dataId:e,shape:l,dtype:a}],a),d=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),d}if(r!=null)return this.convertAndCacheOnCPU(e);if(a==="string")return r;var p=this.activeTimers!=null,f;p&&(f=N.util.now());var m;if(a==="complex64"){var g=s.real.dataSync(),v=s.imag.dataSync();m=N.backend_util.mergeRealAndImagArrays(g,v)}else m=this.getValuesFromTexture(e);return p&&(this.downloadWaitMs+=N.util.now()-f),this.convertAndCacheOnCPU(e,m)},t.prototype.read=function(e){return Eo(this,void 0,void 0,function(){var i,r,a,s,o,l,u,c,h,d,p,f,m,g,v,b,w,S,L,x,C,R;return Do(this,function(D){switch(D.label){case 0:if(this.pendingRead.has(e))return i=this.pendingRead.get(e),[2,new Promise(function(k){return i.push(k)})];if(r=this.texData.get(e),a=r.values,s=r.shape,o=r.slice,l=r.dtype,u=r.complexTensors,c=r.isPacked,o!=null)return h=void 0,c?h=new as(s,Mo):h=new Re(s,Mo),d=this.runWebGLProgram(h,[{dataId:e,shape:s,dtype:l}],l),p=this.read(d.dataId),this.disposeIntermediateTensorInfo(d),[2,p];if(a!=null)return[2,this.convertAndCacheOnCPU(e)];if(!N.env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&N.env().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return f=null,l!=="complex64"&&N.env().get("WEBGL_BUFFER_SUPPORTED")&&(m=this.decode(e),g=this.texData.get(m.dataId),f=(R=this.gpgpu).createBufferFromTexture.apply(R,[g.texture].concat(Qa(s)))),this.pendingRead.set(e,[]),l!=="complex64"?[4,this.gpgpu.createAndWaitForFence()]:[3,2];case 1:D.sent(),D.label=2;case 2:return l==="complex64"?[4,Promise.all([u.real.data(),u.imag.data()])]:[3,4];case 3:return b=D.sent(),w=b[0],S=b[1],v=N.backend_util.mergeRealAndImagArrays(w,S),[3,5];case 4:f==null?v=this.getValuesFromTexture(e):(L=N.util.sizeFromShape(s),v=this.gpgpu.downloadFloat32MatrixFromBuffer(f,L)),D.label=5;case 5:return m!=null&&this.disposeIntermediateTensorInfo(m),x=this.convertAndCacheOnCPU(e,v),C=this.pendingRead.get(e),this.pendingRead.delete(e),C.forEach(function(k){return k(x)}),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e),this.pendingDeletes--),[2,x]}})})},t.prototype.checkNumericalProblems=function(e){if(e==null)return;for(var i=0;i0?[4,Promise.all(s)]:[3,2];case 1:return u=c.sent(),l.kernelMs=N.util.sum(u),l.getExtraProfileInfo=function(){return u.map(function(h,d){return{name:o[d],ms:h}}).map(function(h){return h.name+": "+h.ms}).join(", ")},[3,3];case 2:l.kernelMs={error:"WebGL query timers are not supported in this environment."},c.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,l]}})})},t.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}},t.prototype.startTimer=function(){return N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:N.util.now(),endMs:null}},t.prototype.endTimer=function(e){return N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=N.util.now(),e)},t.prototype.getQueryTime=function(e){return Eo(this,void 0,void 0,function(){var i;return Do(this,function(r){return N.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(e)]:(i=e,[2,i.endMs-i.startMs])})})},t.prototype.disposeData=function(e){if(this.pendingDisposal.has(e))return;if(this.pendingRead.has(e)){this.pendingDisposal.add(e),this.pendingDeletes++;return}if(!this.texData.has(e))return;this.releaseGPUData(e);var i=this.texData.get(e).complexTensors;i!=null&&(i.real.dispose(),i.imag.dispose()),this.texData.delete(e)},t.prototype.releaseGPUData=function(e){var i=this.texData.get(e),r=i.texture,a=i.dtype,s=i.texShape,o=i.usage,l=i.isPacked,u=i.slice,c=u&&u.origDataId||e,h=this.dataRefCount.get(c);h>1?this.dataRefCount.set(c,h-1):(this.dataRefCount.delete(c),r!=null&&(this.numBytesInGPU-=this.computeBytes(s,a),this.textureManager.releaseTexture(r,s,o,l)));var d=this.texData.get(e);d.texture=null,d.texShape=null,d.isPacked=!1,d.slice=null},t.prototype.getTexture=function(e){return this.uploadToGPU(e),this.texData.get(e).texture},t.prototype.getDataInfo=function(e){return this.texData.get(e)},t.prototype.getCPUBackend=function(){return N.env().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=N.engine().findBackend("cpu")),this.cpuBackend):null},t.prototype.shouldExecuteOnCPU=function(e,i){var r=this;i===void 0&&(i=Y9);var a=this.getCPUBackend();return!this.warnedAboutCPUBackend&&a==null&&(console.warn("Your application contains ops that are small enough to be executed on the CPU backend, however the CPU backend cannot be found. Consider importing the CPU backend (@tensorflow/tfjs-backend-cpu) for better performance."),this.warnedAboutCPUBackend=!0),a!=null&&e.every(function(s){return r.texData.get(s.dataId).texture==null&&N.util.sizeFromShape(s.shape)N.env().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var s=Math.floor(e.length/2),o=this.concat(e.slice(0,s),i),l=this.concat(e.slice(s),i);return this.concat([o,l],i)}if(N.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].rank>1){var u=new n5(e.map(function(f){return f.shape}),i);return this.compileAndRun(u,e)}var c=N.backend_util.computeOutShape(e.map(function(f){return f.shape}),i),h=e.map(function(f){return f.as2D(-1,N.util.sizeFromShape(f.shape.slice(i)))}),d=new t5(h.map(function(f){return f.shape})),p=this.compileAndRun(d,h);return p.reshape(c)},t.prototype.neg=function(e){var i=this,r=this.tryRunOnCpuOrThrow([e],function(){return i.cpuBackend.neg(e)});if(r)return r;if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,kS,e.dtype);var a=new Re(e.shape,kS);return this.compileAndRun(a,[e])},t.prototype.batchMatMul=function(e,i,r,a){var s=r?e.shape[2]:e.shape[1],o=a?i.shape[1]:i.shape[2],l=r?e.shape[1]:e.shape[2],u=e.shape,c=u[0];if((s===1||o===1)&&l>HS){r&&(e=N.transpose(e,[0,2,1])),a&&(i=N.transpose(i,[0,2,1]));var h=o===1?e:e.as3D(c,l,1),d=o===1?2:1,p=o===1?i.as3D(c,1,l):i;return this.multiply(h,p).sum(d,!0)}var f=N.upcastType(e.dtype,i.dtype),m=new Hd(e.shape,[c,s,o],r,a);return this.compileAndRun(m,[e,i],f)},t.prototype.fusedBatchMatMul=function(e){var i=e.a,r=e.b,a=e.transposeA,s=e.transposeB,o=e.bias,l=e.activation,u=e.preluActivationWeights,c=a?i.shape[2]:i.shape[1],h=s?r.shape[1]:r.shape[2],d=i.shape,p=d[0],f=N.upcastType(i.dtype,r.dtype),m=o!=null,g=u!=null,v=l?Vo(l,!0):null,b=new Hd(i.shape,[p,c,h],a,s,m,v,g),w=[i,r];return o&&w.push(o),u&&w.push(u),this.compileAndRun(b,w,f)},t.prototype.multiply=function(e,i){if(e.dtype==="complex64"){var r=this.texData.get(e.dataId),a=this.texData.get(i.dataId),s=new Y0(G0.REAL,e.shape,i.shape),o=new Y0(G0.IMAG,e.shape,i.shape),l=[this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag),this.makeComplexComponentTensorInfo(i,a.complexTensors.real),this.makeComplexComponentTensorInfo(i,a.complexTensors.imag)],u=this.compileAndRun(s,l),c=this.compileAndRun(o,l),h=this.complex(u,c);return u.dispose(),c.dispose(),h}var d=N.upcastType(e.dtype,i.dtype);if(this.shouldExecuteOnCPU([e,i])){var r=this.texData.get(e.dataId),a=this.texData.get(i.dataId),p=O_(e.shape,i.shape,r.values,a.values,d),f=p[0],m=p[1];return this.makeOutput(m,d,f)}if(N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,i,j0,e.dtype);var g=new wt(j0,e.shape,i.shape);return this.compileAndRun(g,[e,i],e.dtype)},t.prototype.localResponseNormalization4D=function(e,i,r,a,s){var o=N.env().getBool("WEBGL_PACK_NORMALIZATION")?new E5(e.shape,i,r,a,s):new R5(e.shape,i,r,a,s);return this.compileAndRun(o,[e])},t.prototype.LRNGrad=function(e,i,r,a,s,o,l){var u=new O5(i.shape,a,s,o,l);return this.compileAndRun(u,[i,r,e])},t.prototype.tile=function(e,i){if(e.dtype==="string"){var r=this.readSync(e.dataId),a=r.map(function(l){return N.util.decodeString(l)}),s=N.buffer(e.shape,e.dtype,a);return _9(s,i)}var o=new l9(e.shape,i);return this.compileAndRun(o,[e])},t.prototype.pad=function(e,i,r){var a=N.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new H5(e.shape,i,r):new M5(e.shape,i,r);return this.compileAndRun(a,[e])},t.prototype.gather=function(e,i,r){var a=this,s=this.tryRunOnCpuOrThrow([e,i],function(){return a.cpuBackend.gather(e,i,r)});if(s)return s;var o=new S5(e.shape,i.size,r);return this.compileAndRun(o,[e,i])},t.prototype.batchToSpaceND=function(e,i,r){N.util.assert(e.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var a=i.reduce(function(h,d){return h*d}),s=N.backend_util.getReshaped(e.shape,i,a),o=N.backend_util.getPermuted(s.length,i.length),l=N.backend_util.getReshapedPermuted(e.shape,i,a),u=N.backend_util.getSliceBeginCoords(r,i.length),c=N.backend_util.getSliceSize(l,r,i.length);return N.transpose(e.reshape(s),o).reshape(l).slice(u,c)},t.prototype.spaceToBatchND=function(e,i,r){N.util.assert(e.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var a=i.reduce(function(p,f){return p*f}),s=[[0,0]];s.push.apply(s,r);for(var o=1+i.length;oN.env().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var i=Math.floor(e.length/2),r=this.addN(e.slice(0,i)),a=this.addN(e.slice(i));return this.addN([r,a])}var s=e.map(function(c){return c.dtype}).reduce(function(c,h){return N.upcastType(c,h)}),o=e.map(function(c){return c.shape}),l=N.env().getBool("WEBGL_PACK"),u=l?new U_(e[0].shape,o):new W_(e[0].shape,o);return this.compileAndRun(u,e,s)},t.prototype.subtract=function(e,i){if(e.dtype==="complex64"&&i.dtype==="complex64")return this.complexSeparableBinaryOp(e,i,Ud);var r=N.upcastType(e.dtype,i.dtype);if(this.shouldExecuteOnCPU([e,i])){var a=this.texData.get(e.dataId),s=this.texData.get(i.dataId),o=k_(e.shape,i.shape,a.values,s.values,r),l=o[0],u=o[1];return this.makeOutput(u,r,l)}if(N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,i,Ud,e.dtype);var c=new wt(Ud,e.shape,i.shape);return this.compileAndRun(c,[e,i],r)},t.prototype.pow=function(e,i){var r=N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS"),a=r?new Ai(PM,e.shape,i.shape):new wt(TM,e.shape,i.shape),s=N.upcastType(e.dtype,i.dtype);return this.compileAndRun(a,[e,i],s)},t.prototype.ceil=function(e){if(this.shouldExecuteOnCPU([e])){var i=A_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,FS,e.dtype);var r=new Re(e.shape,FS);return this.compileAndRun(r,[e])},t.prototype.floor=function(e){if(this.shouldExecuteOnCPU([e])){var i=x_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,WS,e.dtype);var r=new Re(e.shape,WS);return this.compileAndRun(r,[e])},t.prototype.sign=function(e){var i=new Re(e.shape,d9);return this.compileAndRun(i,[e])},t.prototype.isNaN=function(e){var i=new Re(e.shape,p9);return this.compileAndRun(i,[e],"bool")},t.prototype.isInf=function(e){var i=new Re(e.shape,f9);return this.compileAndRun(i,[e],"bool")},t.prototype.isFinite=function(e){var i=new Re(e.shape,m9);return this.compileAndRun(i,[e],"bool")},t.prototype.round=function(e){var i=new Re(e.shape,g9);return this.compileAndRun(i,[e])},t.prototype.exp=function(e){if(this.shouldExecuteOnCPU([e])){var i=T_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,US,e.dtype);var r=new Re(e.shape,US);return this.compileAndRun(r,[e])},t.prototype.expm1=function(e){if(this.shouldExecuteOnCPU([e])){var i=N_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,BS,e.dtype);var r=new Re(e.shape,BS);return this.compileAndRun(r,[e])},t.prototype.softmax=function(e,i){var r=N.util.parseAxisParam([i],e.shape),a=N.max(e,r),s=N.backend_util.expandShapeToKeepDim(a.shape,r),o=this.subtract(e,a.reshape(s)),l=this.exp(o),u=this.sum(l,r).reshape(s);return N.div(l,u)},t.prototype.log=function(e){if(this.shouldExecuteOnCPU([e])){var i=C_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,B9,e.dtype);var r=new Re(e.shape,v9);return this.compileAndRun(r,[e])},t.prototype.log1p=function(e){var i=new Re(e.shape,y9);return this.compileAndRun(i,[e])},t.prototype.sqrt=function(e){var i=new Re(e.shape,b9);return this.compileAndRun(i,[e])},t.prototype.rsqrt=function(e){if(this.shouldExecuteOnCPU([e])){var i=E_(this.texData.get(e.dataId).values,e.dtype);return this.makeOutput(e.shape,e.dtype,i)}var r=new Re(e.shape,w9);return this.compileAndRun(r,[e])},t.prototype.reciprocal=function(e){var i=new Re(e.shape,k9);return this.compileAndRun(i,[e])},t.prototype.relu=function(e){var i;return N.env().getBool("WEBGL_PACK")?i=new as(e.shape,zS):i=new Re(e.shape,OS),this.compileAndRun(i,[e])},t.prototype.relu6=function(e){var i;return N.env().getBool("WEBGL_PACK")?i=new as(e.shape,PS):i=new Re(e.shape,ES),this.compileAndRun(i,[e])},t.prototype.prelu=function(e,i){var r=N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ai(X0,e.shape,i.shape):new wt($0,e.shape,i.shape);return this.compileAndRun(r,[e,i])},t.prototype.elu=function(e){if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,_S,e.dtype);var i=new Re(e.shape,DS);return this.compileAndRun(i,[e])},t.prototype.eluDer=function(e,i){var r=N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ai(_M,e.shape,i.shape):new wt(BM,e.shape,i.shape);return this.compileAndRun(r,[e,i])},t.prototype.selu=function(e){var i=new Re(e.shape,c9);return this.compileAndRun(i,[e])},t.prototype.int=function(e){var i=new Re(e.shape,W9);return this.compileAndRun(i,[e],"int32")},t.prototype.clip=function(e,i,r){var a;N.env().getBool("WEBGL_PACK_CLIP")?a=new QM(e.shape):a=new ZM(e.shape);var s=a.getCustomSetupFunc(i,r);return this.compileAndRun(a,[e],null,s)},t.prototype.abs=function(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){var i=L_(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,i)}if(N.env().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,RS,e.dtype);var r=new Re(e.shape,RS);return this.compileAndRun(r,[e])},t.prototype.complexAbs=function(e){var i=this.texData.get(e.dataId),r=new e5(e.shape),a=[this.makeComplexComponentTensorInfo(e,i.complexTensors.real),this.makeComplexComponentTensorInfo(e,i.complexTensors.imag)];return this.compileAndRun(r,a)},t.prototype.sigmoid=function(e){var i=new Re(e.shape,S9);return this.compileAndRun(i,[e])},t.prototype.softplus=function(e){var i=new Re(e.shape,L9);return this.compileAndRun(i,[e])},t.prototype.asin=function(e){var i=new Re(e.shape,I9);return this.compileAndRun(i,[e])},t.prototype.acos=function(e){var i=new Re(e.shape,A9);return this.compileAndRun(i,[e])},t.prototype.atan=function(e){var i=new Re(e.shape,T9);return this.compileAndRun(i,[e])},t.prototype.sinh=function(e){var i=new Re(e.shape,N9);return this.compileAndRun(i,[e])},t.prototype.cosh=function(e){var i=new Re(e.shape,x9);return this.compileAndRun(i,[e])},t.prototype.tanh=function(e){var i=new Re(e.shape,C9);return this.compileAndRun(i,[e])},t.prototype.asinh=function(e){var i=new Re(e.shape,R9);return this.compileAndRun(i,[e])},t.prototype.acosh=function(e){var i=new Re(e.shape,O9);return this.compileAndRun(i,[e])},t.prototype.atanh=function(e){var i=new Re(e.shape,E9);return this.compileAndRun(i,[e])},t.prototype.erf=function(e){var i=new Re(e.shape,D9);return this.compileAndRun(i,[e])},t.prototype.step=function(e,i){var r=new Re(e.shape,h9(i));return this.compileAndRun(r,[e])},t.prototype.conv2dByMatMul=function(e,i,r,a,s,o){var l=e.shape,u=this.texData.get(e.dataId),c=r.inChannels,h=l[0]*l[1]*l[2],d=r.outChannels,p=r.dataFormat==="channelsLast",f=!1,m=!1,g=(h===1||d===1)&&c>HS,v=l[2]%2!==0&&!!u.isPacked;if(g||!N.env().getBool("WEBGL_LAZILY_UNPACK")||!N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!v){var b=p?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],w=N.reshape(e,[1,b,r.inChannels]),S=N.reshape(i,[1,r.inChannels,r.outChannels]),L=this.fusedBatchMatMul({a:w,b:S,transposeA:f,transposeB:m,bias:a,activation:s,preluActivationWeights:o});return N.reshape(L,r.outShape)}var x=p?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),C={dataId:e.dataId,shape:[1,x,r.inChannels],dtype:e.dtype},R=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,N.util.assert(ns(u.shape,C.shape),function(){return"packed reshape "+u.shape+" to "+C.shape+" isn't free"});var D=N.reshape(i,[1,r.inChannels,r.outChannels]),k=this.fusedBatchMatMul({a:C,b:D,transposeA:f,transposeB:m,bias:a,activation:s,preluActivationWeights:o}),W=this.texData.get(k.dataId);return N.util.assert(W.isPacked,function(){return"batchMatMul result is expected to be packed"}),u.shape=R,W.shape=r.outShape,N.engine().makeTensorFromDataId(k.dataId,r.outShape,k.dtype)},t.prototype.conv2dWithIm2Row=function(e,i,r,a,s,o){var l=r.filterWidth,u=r.filterHeight,c=r.inChannels,h=r.outWidth,d=r.outHeight,p=r.dataFormat,f=p==="channelsLast",m=l*u*c,g=d*h,v=[m,g],b=!0,w=!1,S=e.squeeze([0]),L=i.reshape([1,m,-1]),x=new C5(v,S.shape,r),C=this.compileAndRun(x,[S]).reshape([1,v[0],v[1]]),R=a!=null,D=o!=null,k=s?Vo(s,!0):null,W=new Hd(C.shape,[1,g,r.outChannels],b,w,R,k,D),F=[C,L];a&&F.push(a),D&&F.push(o);var P=this.compileAndRun(W,F);return f?P.reshape([1,d,h,r.outChannels]):P.reshape([1,r.outChannels,d,h])},t.prototype.fusedConv2d=function(e){var i=e.input,r=e.filter,a=e.convInfo,s=e.bias,o=e.activation,l=e.preluActivationWeights;if(a.filterHeight===1&&a.filterWidth===1&&a.dilationHeight===1&&a.dilationWidth===1&&a.strideHeight===1&&a.strideWidth===1&&(a.padInfo.type==="SAME"||a.padInfo.type==="VALID"))return this.conv2dByMatMul(i,r,a,s,o,l);if(N.env().getBool("WEBGL_CONV_IM2COL")&&i.shape[0]===1)return this.conv2dWithIm2Row(i,r,a,s,o,l);var u=s!=null,c=l!=null,h=o?Vo(o,!1):null,d=new J0(a,u,h,c),p=[i,r];return s&&p.push(s),l&&p.push(l),this.compileAndRun(d,p)},t.prototype.conv2d=function(e,i,r){if(r.filterHeight===1&&r.filterWidth===1&&r.dilationHeight===1&&r.dilationWidth===1&&r.strideHeight===1&&r.strideWidth===1&&(r.padInfo.type==="SAME"||r.padInfo.type==="VALID"))return this.conv2dByMatMul(e,i,r);if(N.env().getBool("WEBGL_CONV_IM2COL")&&e.shape[0]===1)return this.conv2dWithIm2Row(e,i,r);var a=new J0(r);return this.compileAndRun(a,[e,i])},t.prototype.conv2dDerInput=function(e,i,r){var a=new r5(r);return this.compileAndRun(a,[e,i])},t.prototype.conv2dDerFilter=function(e,i,r){var a=new i5(r);return this.compileAndRun(a,[e,i])},t.prototype.fusedDepthwiseConv2D=function(e){var i=e.input,r=e.filter,a=e.convInfo,s=e.bias,o=e.activation,l=e.preluActivationWeights,u=N.env().getBool("WEBGL_PACK_DEPTHWISECONV")&&a.strideWidth<=2&&a.outChannels/a.inChannels===1,c=o?Vo(o,u):null,h=[i,r],d=s!=null,p=l!=null;d&&h.push(s),p&&h.push(l);var f;return u?(f=new Q0(a,d,c,p),this.compileAndRun(f,h)):(f=new Z0(a,d,c,p),this.compileAndRun(f,h))},t.prototype.depthwiseConv2D=function(e,i,r){var a;return N.env().getBool("WEBGL_PACK_DEPTHWISECONV")&&r.strideWidth<=2&&r.outChannels/r.inChannels===1?(a=new Q0(r),this.compileAndRun(a,[e,i])):(a=new Z0(r),this.compileAndRun(a,[e,i]))},t.prototype.depthwiseConv2DDerInput=function(e,i,r){var a=new l5(r);return this.compileAndRun(a,[e,i])},t.prototype.depthwiseConv2DDerFilter=function(e,i,r){var a=new o5(r);return this.compileAndRun(a,[e,i])},t.prototype.conv3d=function(e,i,r){var a=new u5(r);return this.compileAndRun(a,[e,i])},t.prototype.conv3dDerInput=function(e,i,r){var a=new s5(r);return this.compileAndRun(a,[e,i])},t.prototype.conv3dDerFilter=function(e,i,r){var a=new a5(r);return this.compileAndRun(a,[e,i])},t.prototype.cast=function(e,i){return N.backend_util.castTensor(e,i,this)},t.prototype.unstack=function(e,i){for(var r=e.shape[i],a=new Array(e.rank-1),s=0,o=0;o1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+i});var a=e.shape[0],s=r==="NHWC"?e.shape[1]:e.shape[2],o=r==="NHWC"?e.shape[2]:e.shape[3],l=r==="NHWC"?e.shape[3]:e.shape[1],u=s*i,c=o*i,h=l/(i*i),d=r==="NHWC"?[a,u,c,h]:[a,h,u,c],p=new p5(d,i,r);return this.compileAndRun(p,[e])},t.prototype.split=function(e,i,r){return P9(e,i,r)},t.prototype.scatterND=function(e,i,r){var a=N.backend_util.calculateShapes(i,e,r),s=a.sliceRank,o=a.numUpdates,l=a.sliceSize,u=a.strides,c=a.outputSize,h=[c/l,l],d=e.reshape([o,s]),p=i.reshape([o,l]);if(c===0)return N.backend_util.reshapeTensor(N.tensor([]),r);var f=N.scalar(0),m=new TS(o,s,d.rank,p.rank,u,h),g=this.compileAndRun(m,[p,d,f]);return g.reshape(r)},t.prototype.sparseToDense=function(e,i,r,a){var s=N.backend_util.calculateShapes(i,e,r),o=s.sliceRank,l=s.numUpdates,u=s.strides,c=s.outputSize,h=!1,d=new TS(l,o,e.rank,i.rank,u,[c,1],h),p=this.compileAndRun(d,[i,e,a]);return p.reshape(r)},t.prototype.fft=function(e){var i=!1;return this.fftImpl(e,i)},t.prototype.ifft=function(e){var i=!0;return this.fftImpl(e,i)},t.prototype.fftImpl=function(e,i){var r=this.texData.get(e.dataId),a=new rS(iS.REAL,e.shape,i),s=new rS(iS.IMAG,e.shape,i),o=[this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)],l=this.compileAndRun(a,o),u=this.compileAndRun(s,o),c=this.complex(l,u).as2D(e.shape[0],e.shape[1]);return l.dispose(),u.dispose(),c},t.prototype.gatherND=function(e,i){var r=i.shape,a=r[r.length-1],s=N.backend_util.prepareAndValidate(e,i),o=s[0],l=s[1],u=s[2],c=s[3],h=i.reshape([l,a]),d=e.reshape([e.size/u,u]),p=new L5(a,c,[l,u]),f=this.compileAndRun(p,[d,h]);return f.reshape(o)},t.prototype.fill=function(e,i,r){if(r=r||N.util.inferDtype(i),r==="string"){var a=N.util.getArrayFromDType(r,N.util.sizeFromShape(e));return a.fill(i),N.engine().makeTensor(a,e,r,this)}else{var s=new b5(e,i),o=s.getCustomSetupFunc(i);return this.compileAndRun(s,[],r,o)}},t.prototype.onesLike=function(e){if(e.dtype==="string")throw new Error("onesLike is not supported under string dtype");return this.fill(e.shape,1,e.dtype)},t.prototype.zerosLike=function(e){return this.fill(e.shape,e.dtype==="string"?"":0,e.dtype)},t.prototype.linspace=function(e,i,r){return N.backend_util.linspaceImpl(e,i,r)},t.prototype.makeTensorInfo=function(e,i,r){var a=this.write(r,e,i);return this.texData.get(a).usage=null,{dataId:a,shape:e,dtype:i}},t.prototype.makeOutput=function(e,i,r){var a=this.makeTensorInfo(e,i,r).dataId;return N.engine().makeTensorFromDataId(a,e,i,this)},t.prototype.unpackTensor=function(e){var i=new z9(e.shape);return this.runWebGLProgram(i,[e],e.dtype)},t.prototype.packTensor=function(e){var i=new P5(e.shape),r=!0;return this.runWebGLProgram(i,[e],e.dtype,null,r)},t.prototype.packedReshape=function(e,i){var r=[ur(e.shape)].concat(cr(e.shape)),a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[ur(i)].concat(cr(i)),o=new AS(s,r),l=!0,u=this.runWebGLProgram(o,[a],e.dtype,null,l);return{dataId:u.dataId,shape:i,dtype:u.dtype}},t.prototype.decode=function(e){var i=this.texData.get(e),r=i.isPacked,a=i.shape,s=i.dtype,o=Wo(a),l;r?l=new d5(o):l=new h5(o);var u=!0,c=this.runWebGLProgram(l,[{shape:o,dtype:s,dataId:e}],s,null,u);return{dtype:s,shape:a,dataId:c.dataId}},t.prototype.runWebGLProgram=function(e,i,r,a,s){var o=this;s===void 0&&(s=!1);var l=this.makeTensorInfo(e.outputShape,r),u=this.texData.get(l.dataId);if(e.packedOutput&&(u.isPacked=!0),e.outPackingScheme===Ja.DENSE){var c=Qa(e.outputShape);u.texShape=c.map(function(w){return w*2})}if(e.outTexUsage!=null&&(u.usage=e.outTexUsage),N.util.sizeFromShape(l.shape)===0)return u.values=N.util.getTypedArrayFromDType(l.dtype,0),l;var h=[],d=i.map(function(w){if(w.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var S=o.texData.get(w.dataId);if(S.texture==null){if(!e.packedInputs&&N.util.sizeFromShape(w.shape)<=N.env().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:w.shape,texData:null,isUniform:!0,uniformValues:S.values};e.packedInputs&&(S.isPacked=!0,S.shape=w.shape)}else if(!!S.isPacked!==!!e.packedInputs)w=S.isPacked?o.unpackTensor(w):o.packTensor(w),h.push(w),S=o.texData.get(w.dataId);else if(S.isPacked&&!ns(S.shape,w.shape)){var L=w,x=w.shape;w.shape=S.shape,w=o.packedReshape(w,x),h.push(w),S=o.texData.get(w.dataId),L.shape=x}return o.uploadToGPU(w.dataId),{shape:w.shape,texData:S,isUniform:!1}});this.uploadToGPU(l.dataId);var p={shape:l.shape,texData:u,isUniform:!1},f=x5(e,d,p),m=this.getAndSaveBinary(f,function(){return T5(o.gpgpu,e,d,p)}),g=this.activeTimers!=null,v;if(g&&(v=this.startTimer()),N5(this.gpgpu,m,d,p,a),h.forEach(function(w){return o.disposeIntermediateTensorInfo(w)}),g&&(v=this.endTimer(v),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(v)})),!N.env().getBool("WEBGL_LAZILY_UNPACK")&&u.isPacked&&s===!1){var b=this.unpackTensor(l);return this.disposeIntermediateTensorInfo(l),b}return l},t.prototype.compileAndRun=function(e,i,r,a,s){s===void 0&&(s=!1),r=r||i[0].dtype;var o=this.runWebGLProgram(e,i,r,a,s);return N.engine().makeTensorFromDataId(o.dataId,o.shape,o.dtype)},t.prototype.getAndSaveBinary=function(e,i){return e in this.binaryCache||(this.binaryCache[e]=i()),this.binaryCache[e]},t.prototype.getTextureManager=function(){return this.textureManager},t.prototype.dispose=function(){var e=this;if(this.disposed)return;if(!N.env().getBool("IS_TEST")){var i=Object.keys(this.binaryCache);i.forEach(function(r){e.gpgpu.deleteProgram(e.binaryCache[r].webGLProgram),delete e.binaryCache[r]})}this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0},t.prototype.floatPrecision=function(){var e=this;return this.floatPrecisionValue==null&&(this.floatPrecisionValue=N.tidy(function(){if(!N.env().get("WEBGL_RENDER_FLOAT32_ENABLED")){var i=N.env().getBool("DEBUG");N.env().set("DEBUG",!1);var r=e.abs(N.scalar(1e-8)).dataSync()[0];if(N.env().set("DEBUG",i),r>0)return 32}return 16})),this.floatPrecisionValue},t.prototype.epsilon=function(){return this.floatPrecision()===32?V9:q9},t.prototype.uploadToGPU=function(e){var i,r=this.texData.get(e),a=r.shape,s=r.dtype,o=r.values,l=r.texture,u=r.usage,c=r.isPacked;if(l!=null)return;var h=this.activeTimers!=null,d;h&&(d=N.util.now());var p=r.texShape;if(p==null&&(p=D0(a,c),r.texShape=p),o!=null){var f=Wo(a),m=void 0,g=p[1],v=p[0],b=o instanceof Uint8Array;c?(i=Qr(p[0],p[1]),g=i[0],v=i[1],m=new y5(f,[v,g],b)):m=new v5(f,[v,g],b);var w=this.makeTensorInfo([v,g],s);b?this.texData.get(w.dataId).usage=rn.PIXELS:this.texData.get(w.dataId).usage=rn.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(w.dataId),g,v,o);var S=!0,L=this.runWebGLProgram(m,[w],s,null,S),x=this.texData.get(L.dataId);r.texture=x.texture,r.texShape=x.texShape,r.isPacked=x.isPacked,r.usage=x.usage,this.disposeIntermediateTensorInfo(w),this.texData.delete(L.dataId),r.values=null,h&&(this.uploadWaitMs+=N.util.now()-d)}else{var C=this.acquireTexture(p,u,s,c);r.texture=C}},t.prototype.convertAndCacheOnCPU=function(e,i){var r=this.texData.get(e),a=r.dtype;return this.releaseGPUData(e),i!=null&&(r.values=$9(i,a)),r.values},t.prototype.acquireTexture=function(e,i,r,a){if(this.numBytesInGPU+=this.computeBytes(e,r),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){var s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+s+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(e,i,a)},t.prototype.computeBytes=function(e,i){return e[0]*e[1]*N.util.bytesPerElement(i)},t.prototype.tryRunOnCpuOrThrow=function(e,i){if(this.shouldExecuteOnCPU(e))try{return i()}catch(r){if(N.env().getBool("IS_TEST"))throw new Error("CPU forwarding failed")}return null},t}(N.KernelBackend);function $9(n,t){if(t==="float32"||t==="complex64")return n;if(t==="int32"||t==="bool"){for(var e=t==="int32"?new Int32Array(n.length):new Uint8Array(n.length),i=0;i 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;function qo(n){return function(t){var e=t.inputs,i=t.backend,r=e.x,a=i,s=new Re(r.shape,n);return a.runWebGLProgram(s,[r],r.dtype)}}function Gd(n,t,e,i){return function(r){var a=r.inputs,s=r.backend,o=a,l=o.a,u=o.b,c=s,h=N.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ai(t,l.shape,u.shape,!!e):new wt(n,l.shape,u.shape),d=i||l.dtype,p=c.runWebGLProgram(h,[l,u],d);return p}}var e6=Z9+` return atan(a, b); `,t6=` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+Q9+` return result; `,n6=Gd(e6,t6),i6={kernelName:N.Atan2,backendName:"webgl",kernelFunc:n6};function Yd(n){var t=n.inputs,e=n.backend,i=t.x;return e.incRef(i.dataId),{dataId:i.dataId,shape:i.shape,dtype:i.dtype}}var r6={kernelName:N.Identity,backendName:"webgl",kernelFunc:Yd};function a6(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.x;ea(r,"avgPool");var a=i.filterSize,s=i.strides,o=i.pad,l=i.dimRoundingMode,u=1;N.util.assert(N.backend_util.eitherStridesOrDilationsAreOne(s,u),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+s+" and dilations '"+u+"'")});var c=N.backend_util.computePool2DInfo(r.shape,a,s,u,o,l);if(c.filterWidth===1&&c.filterHeight===1&&N.util.arraysEqual(c.inShape,c.outShape))return Yd({inputs:{x:r},backend:e});var h=new rs(c,"avg",!1);return e.runWebGLProgram(h,[r],"float32")}var s6={kernelName:N.AvgPool,backendName:"webgl",kernelFunc:a6};function o6(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.dy,a=t.input,s=a;ea([r,a],"avgPoolBackprop");var o=i.filterSize,l=i.strides,u=i.pad,c=N.backend_util.computePool2DInfo(s.shape,o,l,1,u),h=new LM(c);return e.runWebGLProgram(h,[r],s.dtype)}var l6={kernelName:N.AvgPoolBackprop,backendName:"webgl",kernelFunc:o6};var u6=function(){function n(t,e,i,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],N.backend_util.assertAndGetBroadcastShape(t,e),N.backend_util.assertAndGetBroadcastShape(t,i);var o="0.0";r!=null&&(N.backend_util.assertAndGetBroadcastShape(t,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var l="1.0";a!=null&&(N.backend_util.assertAndGetBroadcastShape(t,a),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = `+o+`; float scale = `+l+`; float inv = scale * inversesqrt(variance + float(`+s+`)); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `}return n}();var c6=function(){function n(t,e,i,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],N.backend_util.assertAndGetBroadcastShape(t,e),N.backend_util.assertAndGetBroadcastShape(t,i);var o="vec4(0.0)";r!=null&&(N.backend_util.assertAndGetBroadcastShape(t,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var l="vec4(1.0)";a!=null&&(N.backend_util.assertAndGetBroadcastShape(t,a),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` void main() { vec4 offset = `+o+`; vec4 scale = `+l+`; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(`+s+`)); setOutput((x - mean) * inv + offset); } `}return n}();var h6=function(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.x,a=t.mean,s=t.variance,o=t.offset,l=t.scale;N.util.assert(a.shape.length===s.shape.length,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),N.util.assert(o==null||a.shape.length===o.shape.length,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),N.util.assert(l==null||a.shape.length===l.shape.length,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."});var u=i.varianceEpsilon;u==null&&(u=.001);var c=[r,a,s],h=null;o!=null&&(h=o.shape,c.push(o));var d=null;l!=null&&(d=l.shape,c.push(l));var p=N.env().getBool("WEBGL_PACK_NORMALIZATION")?new c6(r.shape,a.shape,s.shape,h,d,u):new u6(r.shape,a.shape,s.shape,h,d,u),f=e.runWebGLProgram(p,c,c[0].dtype);return f},d6={kernelName:N.FusedBatchNorm,backendName:"webgl",kernelFunc:h6};var p6=GS+` return cos(x); `,f6=qo(p6),m6={kernelName:N.Cos,backendName:"webgl",kernelFunc:f6};var g6=` if (a == b) { return 1.0; }; return a / b;`,v6=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; if(a.x == b.x) { result.x = 1.; } if(a.y == b.y) { result.y = 1.; } if(a.z == b.z) { result.z = 1.; } if(a.w == b.w) { result.w = 1.; } return result; `,y6=Gd(g6,v6,!0),b6={kernelName:N.Div,backendName:"webgl",kernelFunc:y6};var w6=function(){function n(t){this.variableNames=["Image"],this.outputShape=[];var e=t[2];this.outputShape=t,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int coordX = `+e+` - x; float outputValue; if(coordX >= 0 && coordX < `+e+`) { outputValue = getImage(coords[0], coords[1], coordX, coords[3]); } else { outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); } setOutput(outputValue); } `}return n}();var S6={kernelName:N.FlipLeftRight,backendName:"webgl",kernelFunc:function(n){var t=n.inputs,e=n.backend,i=t.image,r=e,a=new w6(i.shape),s=r.runWebGLProgram(a,[i],i.dtype);return s}};var L6=function(){function n(t){this.variableNames=["A"];var e=Ft(),i=t[0],r=t[1];this.outputShape=t,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(`+r+".0, "+i+`.0); vec4 values = `+e.texture2D+`(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } setOutput(floor(value * 255.0 + 0.5)); } `}return n}();var I6=function(){function n(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var e=Ft(),i=t[0],r=t[1];this.outputShape=t,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec4 result = vec4(0.); for(int row=0; row<=1; row++) { for(int col=0; col<=1; col++) { texC = coords[1] + row; depth = coords[2] + col; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(`+r+".0, "+i+`.0); vec4 values = `+e.texture2D+`(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } result[row * 2 + col] = floor(value * 255.0 + 0.5); } } `+e.output+` = result; } `}return n}();var T6={kernelName:N.FromPixels,backendName:"webgl",kernelFunc:A6},sa;function A6(n){var t=n.inputs,e=n.backend,i=n.attrs,r=t.pixels,a=i.numChannels,s=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,l=s?[r.videoWidth,r.videoHeight]:[r.width,r.height],u=l[0],c=l[1],h=[c,u],d=[c,u,a];(o||s)&&(sa==null&&(sa=document.createElement("canvas").getContext("2d")),sa.canvas.width=u,sa.canvas.height=c,sa.drawImage(r,0,0,u,c),r=sa.canvas);var p=e.makeTensorInfo(h,"int32");e.texData.get(p.dataId).usage=rn.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(p.dataId),r);var f=N.env().getBool("WEBGL_PACK")?new I6(d):new L6(d),m=e.runWebGLProgram(f,[p],"int32");return e.disposeData(p.dataId),m}function N6(n){for(var t=[];t.length===0||t[t.length-1].outSize!==1;){var e=t.length?t[t.length-1].outSize:n[1],i=N.backend_util.computeOptimalWindowSize(e);t.push({inSize:e,windowSize:i,outSize:Math.ceil(e/i)})}return t}function x6(n,t,e,i){for(var r=N6(n.shape),a=n,s=0;s6)throw Error("Transpose for rank "+t+" is not yet supported");for(var e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],i=new Array(t),r=0;r6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");for(var a=Ze(this.rank),s=_0("rc",this.rank),o=new Array(this.rank),r=0;r= 0 && coordX < `+s+" && coordY >= 0 && coordY < "+a+`) { outputValue = getImage(coords[0], coordY, coordX, coords[3]); } setOutput(outputValue); } `}return n}();var K6={kernelName:N.RotateWithOffset,backendName:"webgl",kernelFunc:function(n){var t=n.inputs,e=n.attrs,i=n.backend,r=t.image,a=e,s=a.radians,o=a.fillValue,l=a.center,u=i,c=new Y6(r.shape,s,o,l),h=u.runWebGLProgram(c,[r],r.dtype);return h}};var j6=GS+` return sin(x); `,$6=qo(j6),X6={kernelName:N.Sin,backendName:"webgl",kernelFunc:$6};var J6="return x * x;",Z6=qo(J6),Q6={kernelName:N.Square,backendName:"webgl",kernelFunc:Z6};var KS="return (a - b) * (a - b);",e8=Gd(KS,KS),t8={kernelName:N.SquaredDifference,backendName:"webgl",kernelFunc:e8};var n8="return tan(x);",i8=qo(n8),r8={kernelName:N.Tan,backendName:"webgl",kernelFunc:i8};var a8={kernelName:N.Transpose,backendName:"webgl",kernelFunc:function(n){for(var t=n.inputs,e=n.attrs,i=n.backend,r=t.x,a=e.perm,s=i,o=r.shape.length,l=new Array(o),u=0;u{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});var $d=$i(),Xd=qb(),Jd=aw(),XS=Nw(),c8=p0(),h8=$S();var d8="2.6.0";var p8={"tfjs-core":$d.version_core,"tfjs-backend-cpu":c8.version_cpu,"tfjs-backend-webgl":h8.version_webgl,"tfjs-data":XS.version_data,"tfjs-layers":Xd.version_layers,"tfjs-converter":Jd.version_converter,tfjs:d8};Object.keys($d).forEach(function(n){n!=="default"&&Object.defineProperty(pr,n,{enumerable:!0,get:function(){return $d[n]}})});Object.keys(Xd).forEach(function(n){n!=="default"&&Object.defineProperty(pr,n,{enumerable:!0,get:function(){return Xd[n]}})});Object.keys(Jd).forEach(function(n){n!=="default"&&Object.defineProperty(pr,n,{enumerable:!0,get:function(){return Jd[n]}})});pr.data=XS;pr.version=p8});var tL=be(Go=>{const Be=Wt(),f8={strides:[8,16],anchors:[2,6]},JS=6;function m8(n,t,e){const i=[];for(let r=0;r{n.startEndTensor.dispose(),n.startPoint.dispose(),n.endPoint.dispose()},QS=n=>({startEndTensor:n,startPoint:Be.slice(n,[0,0],[-1,2]),endPoint:Be.slice(n,[0,2],[-1,2])}),g8=(n,t)=>{const e=Be.mul(n.startPoint,t),i=Be.mul(n.endPoint,t),r=Be.concat2d([e,i],1);return QS(r)};function v8(n,t,e){const i=Be.slice(n,[0,1],[-1,2]),r=Be.add(i,t),a=Be.slice(n,[0,3],[-1,2]),s=Be.div(a,e),o=Be.div(r,e),l=Be.div(s,2),u=Be.sub(o,l),c=Be.add(o,l),h=Be.mul(u,e),d=Be.mul(c,e),p=1;return Be.concat2d([h,d],p)}function y8(n,t){return Be.tidy(()=>{const e=n.box?n.box:n;return g8(e,t).startEndTensor.squeeze()})}class eL{constructor(n,t){this.blazeFaceModel=n,this.width=t.detector.inputSize,this.height=t.detector.inputSize,this.maxFaces=t.detector.maxFaces,this.anchorsData=m8(t.detector.inputSize,t.detector.inputSize,f8),this.anchors=Be.tensor2d(this.anchorsData),this.inputSizeData=[t.detector.inputSize,t.detector.inputSize],this.inputSize=Be.tensor1d([t.detector.inputSize,t.detector.inputSize]),this.iouThreshold=t.detector.iouThreshold,this.scaleFaces=.8,this.scoreThreshold=t.detector.scoreThreshold}async getBoundingBoxes(n){const[t,e,i]=Be.tidy(()=>{const l=n.resizeBilinear([this.width,this.height]),u=Be.mul(Be.sub(l.div(255),.5),2),c=this.blazeFaceModel.predict(u),h=c.squeeze(),d=v8(h,this.anchors,this.inputSize),p=Be.slice(h,[0,0],[-1,1]),f=Be.sigmoid(p).squeeze();return[h,d,f]}),r=await Be.image.nonMaxSuppressionAsync(e,i,this.maxFaces,this.iouThreshold,this.scoreThreshold),a=await r.array();r.dispose();let s=a.map(l=>Be.slice(e,[l,0],[1,-1]));s=await Promise.all(s.map(async l=>{const u=await l.array();return l.dispose(),u}));const o=[];for(let l=0;l{const h=QS(u),d=a[l],p=this.anchorsData[d],f=Be.slice(t,[d,JS-1],[1,-1]).squeeze().reshape([JS,-1]),m=Be.slice(i,[d],[1]);return{box:h,landmarks:f,probability:m,anchor:p}});o.push(c)}return e.dispose(),i.dispose(),t.dispose(),{boxes:o,scaleFactor:[n.shape[2]/this.inputSizeData[0],n.shape[1]/this.inputSizeData[1]]}}async estimateFaces(n){const t=Be.tidy(()=>(n instanceof Be.Tensor||(n=Be.browser.fromPixels(n)),n.toFloat().expandDims(0))),{boxes:e,scaleFactor:i}=await this.getBoundingBoxes(t);return t.dispose(),Promise.all(e.map(async r=>{const a=y8(r,i),[s,o,l]=await Promise.all([r.landmarks,a,r.probability].map(async f=>f.array())),u=r.anchor,[c,h]=i,d=s.map(f=>[(f[0]+u[0])*c,(f[1]+u[1])*h]),p={topLeft:o.slice(0,2),bottomRight:o.slice(2),landmarks:d,probability:l};return ZS(r.box),r.landmarks.dispose(),r.probability.dispose(),a.dispose(),p}))}}async function b8(n){const t=await Be.loadGraphModel(n.detector.modelPath,{fromTFHub:n.detector.modelPath.includes("tfhub.dev")}),e=new eL(t,n);return e}Go.load=b8;Go.BlazeFaceModel=eL;Go.disposeBox=ZS});var Qd=be(Zd=>{Zd.MESH_ANNOTATIONS={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]};Zd.MESH_TO_IRIS_INDICES_MAP=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}]});var nL=be(fr=>{const w8=Wt();function S8(n,t){const e=[n.startPoint[0]*t[0],n.startPoint[1]*t[1]],i=[n.endPoint[0]*t[0],n.endPoint[1]*t[1]];return{startPoint:e,endPoint:i}}fr.scaleBoxCoordinates=S8;function ep(n){return[Math.abs(n.endPoint[0]-n.startPoint[0]),Math.abs(n.endPoint[1]-n.startPoint[1])]}fr.getBoxSize=ep;function tp(n){return[n.startPoint[0]+(n.endPoint[0]-n.startPoint[0])/2,n.startPoint[1]+(n.endPoint[1]-n.startPoint[1])/2]}fr.getBoxCenter=tp;function L8(n,t,e){const i=t.shape[1],r=t.shape[2],a=[[n.startPoint[1]/i,n.startPoint[0]/r,n.endPoint[1]/i,n.endPoint[0]/r]];return w8.image.cropAndResize(t,a,[0],e)}fr.cutBoxFromImageAndResize=L8;function I8(n,t=1.5){const e=tp(n),i=ep(n),r=[t*i[0]/2,t*i[1]/2],a=[e[0]-r[0],e[1]-r[1]],s=[e[0]+r[0],e[1]+r[1]];return{startPoint:a,endPoint:s,landmarks:n.landmarks}}fr.enlargeBox=I8;function A8(n){const t=tp(n),e=ep(n),i=Math.max(...e),r=i/2,a=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:s,landmarks:n.landmarks}}fr.squarifyBox=A8});var oL=be(An=>{An.IDENTITY_MATRIX=[[1,0,0],[0,1,0],[0,0,1]];function iL(n){return n-2*Math.PI*Math.floor((n+Math.PI)/(2*Math.PI))}An.normalizeRadians=iL;function T8(n,t){const e=Math.PI/2-Math.atan2(-(t[1]-n[1]),t[0]-n[0]);return iL(e)}An.computeRotation=T8;function N8(n){return n*180/Math.PI}An.radToDegrees=N8;function rL(n,t){return[[1,0,n],[0,1,t],[0,0,1]]}function oa(n,t){let e=0;for(let i=0;i{const Ti=Wt(),Mn=nL(),Ni=Qd(),xi=oL(),E8=468,D8=.25,k8=13,F8=[k8,Ni.MESH_ANNOTATIONS.midwayBetweenEyes[0]],W8=3,U8=2,B8=[W8,U8],np=Ni.MESH_ANNOTATIONS.leftEyeLower0,ip=[np[0],np[np.length-1]],rp=Ni.MESH_ANNOTATIONS.rightEyeLower0,ap=[rp[0],rp[rp.length-1]],z8=3,P8=4,_8=71,sp=76;function Yo(n,t,e,i){for(let r=0;r[a[0]*(d[0]-this.meshWidth/2),a[1]*(d[1]-this.meshHeight/2),d[2]]),o=xi.buildRotationMatrix(e,[0,0]),l=s.map(d=>[...xi.rotatePoint(d,o),d[2]]),u=xi.invertTransformMatrix(i),c=[...Mn.getBoxCenter({startPoint:t.startPoint,endPoint:t.endPoint}),1],h=[xi.dot(c,u[0]),xi.dot(c,u[1])];return l.map(d=>[d[0]+h[0],d[1]+h[1],d[2]])}getLeftToRightEyeDepthDifference(n){const t=n[ip[0]][2],e=n[ap[0]][2];return t-e}getEyeBox(n,t,e,i,r=!1){const a=Mn.squarifyBox(Mn.enlargeBox(this.calculateLandmarksBoundingBox([n[e],n[i]]),this.irisEnlarge)),s=Mn.getBoxSize(a);let o=Ti.image.cropAndResize(t,[[a.startPoint[1]/this.meshHeight,a.startPoint[0]/this.meshWidth,a.endPoint[1]/this.meshHeight,a.endPoint[0]/this.meshWidth]],[0],[this.irisSize,this.irisSize]);return r&&(o=Ti.image.flipLeftRight(o)),{box:a,boxSize:s,crop:o}}getEyeCoords(n,t,e,i=!1){const r=[];for(let a=0;a{let l=a;return o===2?l=i:o===4&&(l=r),[s[0],s[1],l]})}async predict(n,t){if(this.skipFrames=t.detector.skipFrames,this.maxFaces=t.detector.maxFaces,this.shouldUpdateRegionsOfInterest()){const{boxes:i,scaleFactor:r}=await this.boundingBoxDetector.getBoundingBoxes(n);if(i.length===0)return this.regionsOfInterest=[],null;const a=i.map(s=>{const o={startPoint:s.box.startPoint.squeeze().arraySync(),endPoint:s.box.endPoint.squeeze().arraySync()};s.box.startPoint.dispose(),s.box.endPoint.dispose();const l=Mn.scaleBoxCoordinates(o,r),u=Mn.enlargeBox(l),c=s.landmarks.arraySync();return s.landmarks.dispose(),s.probability.dispose(),{...u,landmarks:c}});this.updateRegionsOfInterest(a),this.runsWithoutFaceDetector=0}else this.runsWithoutFaceDetector++;const e=Ti.tidy(()=>this.regionsOfInterest.map((i,r)=>{let a=0;const s=i.landmarks.length>=E8;let[o,l]=F8;s===!1&&([o,l]=B8),a=xi.computeRotation(i.landmarks[o],i.landmarks[l]);const u=Mn.getBoxCenter({startPoint:i.startPoint,endPoint:i.endPoint}),c=[u[0]/n.shape[2],u[1]/n.shape[1]];let h=n,d=xi.IDENTITY_MATRIX;a!==0&&(h=Ti.image.rotateWithOffset(n,a,0,c),d=xi.buildRotationMatrix(-a,u));const p={startPoint:i.startPoint,endPoint:i.endPoint},f=Mn.cutBoxFromImageAndResize(p,h,[this.meshHeight,this.meshWidth]).div(255),[,m,g]=this.meshDetector.predict(f),v=Ti.reshape(g,[-1,3]);let b=v.arraySync();if(t.iris.enabled){const{box:x,boxSize:C,crop:R}=this.getEyeBox(b,f,ip[0],ip[1],!0),{box:D,boxSize:k,crop:W}=this.getEyeBox(b,f,ap[0],ap[1]),F=this.irisModel.predict(Ti.concat([R,W])),P=F.dataSync();F.dispose();const H=P.slice(0,sp*3),{rawCoords:_,iris:K}=this.getEyeCoords(H,x,C,!0),j=P.slice(sp*3),{rawCoords:q,iris:G}=this.getEyeCoords(j,D,k),Z=this.getLeftToRightEyeDepthDifference(b);Math.abs(Z)<30?(Yo(b,_,"left"),Yo(b,q,"right")):Z<1?Yo(b,_,"left",["EyeUpper0","EyeLower0"]):Yo(b,q,"right",["EyeUpper0","EyeLower0"]);const X=this.getAdjustedIrisCoords(b,K,"left"),ee=this.getAdjustedIrisCoords(b,G,"right");b=b.concat(X).concat(ee)}const w=this.transformRawCoords(b,i,a,d);Ti.dispose(b);const S=Mn.enlargeBox(this.calculateLandmarksBoundingBox(w));if(t.mesh.enabled){const x=Ti.tensor2d(w);this.regionsOfInterest[r]={...S,landmarks:x.arraySync()};const C={coords:x,box:S,confidence:m.squeeze(),image:f};return C}const L={coords:null,box:S,confidence:m.squeeze(),image:f};return L}));return e}updateRegionsOfInterest(n){for(let t=0;t=this.skipFrames}calculateLandmarksBoundingBox(n){const t=n.map(a=>a[0]),e=n.map(a=>a[1]),i=[Math.min(...t),Math.min(...e)],r=[Math.max(...t),Math.max(...e)];return{startPoint:i,endPoint:r}}}lL.Pipeline=M8});var hL=be(cL=>{cL.UV_COORDS=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]]});var dL=be(H8=>{Tp(H8,{default:()=>V8});var V8=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255]});var mL=be(ss=>{const mr=Wt(),q8=tL(),pL=Qd(),G8=uL(),Y8=hL(),K8=dL().default;class fL{constructor(n,t,e,i){this.pipeline=new G8.Pipeline(n,t,e,i),i&&(this.config=i)}async estimateFaces(n,t){t&&(this.config=t);const e=mr.tidy(()=>(n instanceof mr.Tensor||(n=mr.browser.fromPixels(n)),n.toFloat().expandDims(0))),i=await this.pipeline.predict(e,t);mr.dispose(e);const r=[];for(const a of i||[]){const s=a.confidence.arraySync();if(s>=this.config.detector.minConfidence){const o=a.coords?a.coords.arraySync():null,l={};if(o&&o.length>0)for(const u in pL.MESH_ANNOTATIONS)(this.config.iris.enabled||u.includes("Iris")===!1)&&(l[u]=pL.MESH_ANNOTATIONS[u].map(c=>o[c]));r.push({confidence:s||0,box:a.box?[a.box.startPoint[0],a.box.startPoint[1],a.box.endPoint[0]-a.box.startPoint[0],a.box.endPoint[1]-a.box.startPoint[1]]:0,mesh:o,annotations:l,image:a.image?mr.clone(a.image):null})}a.confidence.dispose(),a.image.dispose()}return r}}async function j8(n){const t=await Promise.all([q8.load(n),mr.loadGraphModel(n.mesh.modelPath,{fromTFHub:n.mesh.modelPath.includes("tfhub.dev")}),mr.loadGraphModel(n.iris.modelPath,{fromTFHub:n.iris.modelPath.includes("tfhub.dev")})]),e=new fL(t[0],t[1],t[2],n);return e}ss.load=j8;ss.MediaPipeFaceMesh=fL;ss.uv_coords=Y8;ss.triangulation=K8});var vL=be(Ko=>{const sn=Wt(),Ci={};let gL={age:0,gender:""},op=0;async function $8(n,t){const e=sn.browser.fromPixels(n),i=sn.image.resizeBilinear(e,[t,t]),r=sn.cast(sn.expandDims(i,0),"float32");return r}async function X8(n){return Ci.age||(Ci.age=await sn.loadGraphModel(n.face.age.modelPath)),Ci.age}async function J8(n){return Ci.gender||(Ci.gender=await sn.loadGraphModel(n.face.gender.modelPath)),Ci.gender}async function Z8(n,t){if(op+=1,op>=t.face.age.skipFrames)return op=0,gL;let e;if(n instanceof sn.Tensor){const r=sn.image.resizeBilinear(n,[t.face.age.inputSize,t.face.age.inputSize],!1);e=sn.mul(r,[255]),sn.dispose(r)}else e=await $8(n,t.face.age.inputSize);const i={};if(t.face.age.enabled){const r=await Ci.age.predict(e),a=await r.data();i.age=Math.trunc(10*a[0])/10,sn.dispose(r)}if(t.face.gender.enabled){const r=await Ci.gender.predict(e),a=await r.data();i.gender=Math.trunc(100*a[0])<50?"female":"male",sn.dispose(r)}return sn.dispose(e),gL=i,i}Ko.predict=Z8;Ko.loadAge=X8;Ko.loadGender=J8});var wL=be(lp=>{const Ut=Wt(),Q8=["angry","discust","fear","happy","sad","surpise","neutral"],jo={};let yL=[],up=0;const bL=1.5;function e7(n,t){const e=Ut.tidy(()=>{const i=Ut.browser.fromPixels(n,1),r=Ut.image.resizeBilinear(i,[t,t]),a=Ut.cast(Ut.expandDims(r,0),"float32");return a});return e}async function t7(n){return jo.emotion||(jo.emotion=await Ut.loadGraphModel(n.face.emotion.modelPath)),jo.emotion}async function n7(n,t){if(up+=1,up>=t.face.emotion.skipFrames)return up=0,yL;const e=Ut.tidy(()=>{if(n instanceof Ut.Tensor){const r=Ut.image.resizeBilinear(n,[t.face.emotion.inputSize,t.face.emotion.inputSize],!1),[a,s,o]=Ut.split(r,3,3);if(t.face.emotion.useGrayscale){const l=Ut.mul(a,[.2989]),u=Ut.mul(s,[.587]),c=Ut.mul(o,[.114]),h=Ut.addN([l,u,c]);return h}return s}return e7(n,t.face.emotion.inputSize)}),i=[];if(t.face.emotion.enabled){const r=await jo.emotion.predict(e),a=await r.data();for(let s=0;st.face.emotion.minConfidence&&i.push({score:Math.min(.99,Math.trunc(100*bL*a[s])/100),emotion:Q8[s]});i.sort((s,o)=>o.score-s.score),Ut.dispose(r)}return Ut.dispose(e),yL=i,i}lp.predict=n7;lp.load=t7});var IL=be(SL=>{const LL=Wt();class i7{constructor(n,t){this.model=n,this.outputStride=t;const e=this.model.inputs[0].shape;LL.util.assert(e[1]===-1&&e[2]===-1,()=>`Input shape [${e[1]}, ${e[2]}] must both be equal to or -1`)}predict(n){return LL.tidy(()=>{const t=this.preprocessInput(n.toFloat()),e=t.expandDims(0),i=this.model.predict(e),r=i.map(s=>s.squeeze([0])),a=this.nameOutputResults(r);return{heatmapScores:a.heatmap.sigmoid(),offsets:a.offsets,displacementFwd:a.displacementFwd,displacementBwd:a.displacementBwd}})}dispose(){this.model.dispose()}}SL.BaseModel=i7});var cp=be(AL=>{const TL=Wt(),r7=IL();class a7 extends r7.BaseModel{preprocessInput(n){return TL.tidy(()=>TL.div(n,127.5).sub(1))}nameOutputResults(n){const[t,e,i,r]=n;return{offsets:t,heatmap:e,displacementFwd:i,displacementBwd:r}}}AL.MobileNet=a7});var xL=be(NL=>{function hp(n){return Math.floor(n/2)}class s7{constructor(n,t){this.priorityQueue=new Array(n),this.numberOfElements=-1,this.getElementValue=t}enqueue(n){this.priorityQueue[++this.numberOfElements]=n,this.swim(this.numberOfElements)}dequeue(){const n=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,n}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(n){for(;n>0&&this.less(hp(n),n);)this.exchange(n,hp(n)),n=hp(n)}sink(n){for(;2*n<=this.numberOfElements;){let t=2*n;if(t{const o7=xL();function l7(n,t,e,i,r,a){const[s,o]=a.shape;let l=!0;const u=Math.max(e-r,0),c=Math.min(e+r+1,s);for(let h=u;ht){l=!1;break}if(!l)break}return l}function u7(n,t,e){const[i,r,a]=e.shape,s=new o7.MaxHeap(i*r*a,({score:o})=>o);for(let o=0;o{Tn.partNames=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"];Tn.NUM_KEYPOINTS=Tn.partNames.length;Tn.partIds=Tn.partNames.reduce((n,t,e)=>(n[t]=e,n),{});const c7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]];Tn.poseChain=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];Tn.connectedPartIndices=c7.map(([n,t])=>[Tn.partIds[n],Tn.partIds[t]]);Tn.partChannels=["left_face","right_face","right_upper_leg_front","right_lower_leg_back","right_upper_leg_back","left_lower_leg_front","left_upper_leg_front","left_upper_leg_back","left_lower_leg_back","right_feet","right_lower_leg_front","left_feet","torso_front","torso_back","right_upper_arm_front","right_upper_arm_back","right_lower_arm_back","left_lower_arm_front","left_upper_arm_front","left_upper_arm_back","left_lower_arm_back","right_hand","right_lower_arm_front","left_hand"]});var pp=be(Ri=>{const h7=os();function OL(n,t,e,i){return{y:i.get(n,t,e),x:i.get(n,t,e+h7.NUM_KEYPOINTS)}}Ri.getOffsetPoint=OL;function d7(n,t,e){const{heatmapY:i,heatmapX:r,id:a}=n,{y:s,x:o}=OL(i,r,a,e);return{x:n.heatmapX*t+o,y:n.heatmapY*t+s}}Ri.getImageCoords=d7;function p7(n,t){const e=new Array(t);for(let i=0;ie?e:n}Ri.clamp=dp;function f7(n,t,e,i){const r=e-n,a=i-t;return r*r+a*a}Ri.squaredDistance=f7;function m7(n,t){return{x:n.x+t.x,y:n.y+t.y}}Ri.addVectors=m7;function g7(n,t,e){return{y:dp(n.y,t,e),x:dp(n.x,t,e)}}Ri.clampVector=g7});var WL=be(EL=>{const ls=os(),la=pp(),DL=ls.poseChain.map(([n,t])=>[ls.partIds[n],ls.partIds[t]]),fp=DL.map(([,n])=>n),kL=DL.map(([n])=>n);function v7(n,t,e){const i=e.shape[2]/2;return{y:e.get(t.y,t.x,n),x:e.get(t.y,t.x,i+n)}}function mp(n,t,e,i){return{y:la.clamp(Math.round(n.y/t),0,e-1),x:la.clamp(Math.round(n.x/t),0,i-1)}}function FL(n,t,e,i,r,a,s,o=2){const[l,u]=i.shape,c=mp(t.position,a,l,u),h=v7(n,c,s),d=la.addVectors(t.position,h);let p=d;for(let g=0;g=0;--d){const p=fp[d],f=kL[d];l[p]&&!l[f]&&(l[f]=FL(d,l[p],f,t,e,i,a))}for(let d=0;d{const b7=RL(),w7=WL(),BL=pp();function zL(n,t,{x:e,y:i},r){return n.some(({keypoints:a})=>{const s=a[r].position;return BL.squaredDistance(i,e,s.y,s.x)<=t})}function S7(n,t,e){const i=e.reduce((r,{position:a,score:s},o)=>(zL(n,t,a,o)||(r+=s),r),0);return i/e.length}const L7=1;function I7(n,t,e,i,r,a,s=.5,o=20){const l=[],u=b7.buildPartWithScoreQueue(s,L7,n),c=o*o;for(;l.length{const ua=Wt(),A7=os();function T7(n,t,e){return n(T7(n[i].score,n[r].score,t)||e.push([n[i],n[r]]),e),[])}dn.getAdjacentKeyPoints=N7;const{NEGATIVE_INFINITY:PL,POSITIVE_INFINITY:_L}=Number;function ML(n){return n.reduce(({maxX:t,maxY:e,minX:i,minY:r},{position:{x:a,y:s}})=>({maxX:Math.max(t,a),maxY:Math.max(e,s),minX:Math.min(i,a),minY:Math.min(r,s)}),{maxX:PL,maxY:PL,minX:_L,minY:_L})}dn.getBoundingBox=ML;function x7(n){const{minX:t,minY:e,maxX:i,maxY:r}=ML(n);return[{x:t,y:e},{x:i,y:e},{x:i,y:r},{x:t,y:r}]}dn.getBoundingBoxPoints=x7;async function C7(n){return Promise.all(n.map(t=>t.buffer()))}dn.toTensorBuffers3D=C7;function HL(n,t,e,i=0,r=0){return{score:n.score,keypoints:n.keypoints.map(({score:a,part:s,position:o})=>({score:a,part:s,position:{x:o.x*e+r,y:o.y*t+i}}))}}dn.scalePose=HL;function VL(n,t,e,i=0,r=0){return e===1&&t===1&&i===0&&r===0?n:n.map(a=>HL(a,t,e,i,r))}dn.scalePoses=VL;function qL(n){return n instanceof ua.Tensor?[n.shape[0],n.shape[1]]:[n.height,n.width]}dn.getInputTensorDimensions=qL;function vp(n){return n instanceof ua.Tensor?n:ua.browser.fromPixels(n)}dn.toInputTensor=vp;function R7(n,t,e){return ua.tidy(()=>{const i=vp(n);return i.resizeBilinear([t,e])})}dn.toResizedInputTensor=R7;function O7(n,[t,e]){const[i,r]=qL(n),a=e/t,s=r/i;let[o,l,u,c]=[0,0,0,0];s{let d=vp(n);return d=ua.pad3d(d,[[o,l],[u,c],[0,0]]),d.resizeBilinear([t,e])});return{resized:h,padding:{top:o,left:u,right:c,bottom:l}}}dn.padAndResizeTo=O7;function E7(n,[t,e],[i,r],a){const s=(t+a.top+a.bottom)/i,o=(e+a.left+a.right)/r,l=VL(n,s,o,-a.top,-a.left);return l}dn.scaleAndFlipPoses=E7});var YL=be(bp=>{const D7=Wt(),k7=cp(),F7=gp(),$o=yp();class GL{constructor(n){this.baseModel=n}async estimatePoses(n,t){const e=t.outputStride,[i,r]=$o.getInputTensorDimensions(n),{resized:a,padding:s}=$o.padAndResizeTo(n,[t.inputResolution,t.inputResolution]),{heatmapScores:o,offsets:l,displacementFwd:u,displacementBwd:c}=this.baseModel.predict(a),h=await $o.toTensorBuffers3D([o,l,u,c]),d=h[0],p=h[1],f=h[2],m=h[3],g=await F7.decodeMultiplePoses(d,p,f,m,e,t.maxDetections,t.scoreThreshold,t.nmsRadius),v=$o.scaleAndFlipPoses(g,[i,r],[t.inputResolution,t.inputResolution],s);return o.dispose(),l.dispose(),u.dispose(),c.dispose(),a.dispose(),v}dispose(){this.baseModel.dispose()}}bp.PoseNet=GL;async function W7(n){const t=await D7.loadGraphModel(n.modelPath),e=new k7.MobileNet(t,n.outputStride);return new GL(e)}async function U7(n){return W7(n)}bp.load=U7});var jL=be(Jt=>{const B7=cp(),KL=YL(),z7=gp(),Xo=os(),us=yp();Jt.load=KL.load;Jt.PoseNet=KL.PoseNet;Jt.MobileNet=B7.MobileNet;Jt.decodeMultiplePoses=z7.decodeMultiplePoses;Jt.partChannels=Xo.partChannels;Jt.partIds=Xo.partIds;Jt.partNames=Xo.partNames;Jt.poseChain=Xo.poseChain;Jt.getAdjacentKeyPoints=us.getAdjacentKeyPoints;Jt.getBoundingBox=us.getBoundingBox;Jt.getBoundingBoxPoints=us.getBoundingBoxPoints;Jt.scaleAndFlipPoses=us.scaleAndFlipPoses;Jt.scalePose=us.scalePose});var Lp=be(Oi=>{const P7=Wt();function wp(n){return[Math.abs(n.endPoint[0]-n.startPoint[0]),Math.abs(n.endPoint[1]-n.startPoint[1])]}Oi.getBoxSize=wp;function Sp(n){return[n.startPoint[0]+(n.endPoint[0]-n.startPoint[0])/2,n.startPoint[1]+(n.endPoint[1]-n.startPoint[1])/2]}Oi.getBoxCenter=Sp;function _7(n,t,e){const i=t.shape[1],r=t.shape[2],a=[[n.startPoint[1]/i,n.startPoint[0]/r,n.endPoint[1]/i,n.endPoint[0]/r]];return P7.image.cropAndResize(t,a,[0],e)}Oi.cutBoxFromImageAndResize=_7;function M7(n,t){const e=[n.startPoint[0]*t[0],n.startPoint[1]*t[1]],i=[n.endPoint[0]*t[0],n.endPoint[1]*t[1]],r=n.palmLandmarks.map(a=>{const s=[a[0]*t[0],a[1]*t[1]];return s});return{startPoint:e,endPoint:i,palmLandmarks:r}}Oi.scaleBoxCoordinates=M7;function H7(n,t=1.5){const e=Sp(n),i=wp(n),r=[t*i[0]/2,t*i[1]/2],a=[e[0]-r[0],e[1]-r[1]],s=[e[0]+r[0],e[1]+r[1]];return{startPoint:a,endPoint:s,palmLandmarks:n.palmLandmarks}}Oi.enlargeBox=H7;function V7(n){const t=Sp(n),e=wp(n),i=Math.max(...e),r=i/2,a=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:s,palmLandmarks:n.palmLandmarks}}Oi.squarifyBox=V7;function q7(n,t){const e=[n.endPoint[0]-n.startPoint[0],n.endPoint[1]-n.startPoint[1]],i=[e[0]*t[0],e[1]*t[1]],r=[n.startPoint[0]+i[0],n.startPoint[1]+i[1]],a=[n.endPoint[0]+i[0],n.endPoint[1]+i[1]];return{startPoint:r,endPoint:a,palmLandmarks:n.palmLandmarks}}Oi.shiftBox=q7});var XL=be($L=>{const qe=Wt(),G7=Lp();class Y7{constructor(n,t,e){this.model=n,this.width=e.inputSize,this.height=e.inputSize,this.anchors=t.map(i=>[i.x_center,i.y_center]),this.anchorsTensor=qe.tensor2d(this.anchors),this.inputSizeTensor=qe.tensor1d([e.inputSize,e.inputSize]),this.doubleInputSizeTensor=qe.tensor1d([e.inputSize*2,e.inputSize*2])}normalizeBoxes(n){return qe.tidy(()=>{const t=qe.slice(n,[0,0],[-1,2]),e=qe.slice(n,[0,2],[-1,2]),i=qe.add(qe.div(t,this.inputSizeTensor),this.anchorsTensor),r=qe.div(e,this.doubleInputSizeTensor),a=qe.mul(qe.sub(i,r),this.inputSizeTensor),s=qe.mul(qe.add(i,r),this.inputSizeTensor);return qe.concat2d([a,s],1)})}normalizeLandmarks(n,t){return qe.tidy(()=>{const e=qe.add(qe.div(n.reshape([-1,7,2]),this.inputSizeTensor),this.anchors[t]);return qe.mul(e,this.inputSizeTensor)})}async getBoundingBoxes(n){const t=qe.tidy(()=>qe.mul(qe.sub(n,.5),2)),e=this.model.predict(t),i=e.squeeze(),r=qe.tidy(()=>qe.sigmoid(qe.slice(i,[0,0],[-1,1])).squeeze()),a=qe.slice(i,[0,1],[-1,4]),s=this.normalizeBoxes(a),o=await qe.image.nonMaxSuppressionAsync(s,r,this.maxHands,this.iouThreshold,this.scoreThreshold),l=await o.array(),u=[t,e,o,i,s,a,r];if(l.length===0)return u.forEach(h=>h.dispose()),null;const c=qe.tidy(()=>{const h=[];for(const d in l){const p=l[d],f=qe.slice(s,[p,0],[1,-1]),m=qe.slice(i,[p,5],[1,14]),g=qe.tidy(()=>this.normalizeLandmarks(m,p).reshape([-1,2]));h.push({boxes:f,palmLandmarks:g})}return h});return c}async estimateHandBounds(n,t){const e=n.shape[1],i=n.shape[2];this.iouThreshold=t.iouThreshold,this.scoreThreshold=t.scoreThreshold,this.maxHands=t.maxHands;const r=qe.tidy(()=>n.resizeBilinear([this.width,this.height]).div(255)),a=await this.getBoundingBoxes(r);if(r.dispose(),!a||a.length===0)return null;const s=[];for(const o in a){const l=a[o],u=await l.boxes.array(),c=u[0].slice(0,2),h=u[0].slice(2,4),d=await l.palmLandmarks.array();l.boxes.dispose(),l.palmLandmarks.dispose(),s.push(G7.scaleBoxCoordinates({startPoint:c,endPoint:h,palmLandmarks:d},[i/this.width,e/this.height]))}return s}}$L.HandDetector=Y7});var ZL=be(JL=>{JL.MESH_ANNOTATIONS={thumb:[1,2,3,4],indexFinger:[5,6,7,8],middleFinger:[9,10,11,12],ringFinger:[13,14,15,16],pinky:[17,18,19,20],palmBase:[0]}});var iI=be(Ei=>{function QL(n){return n-2*Math.PI*Math.floor((n+Math.PI)/(2*Math.PI))}Ei.normalizeRadians=QL;function K7(n,t){const e=Math.PI/2-Math.atan2(-(t[1]-n[1]),t[0]-n[0]);return QL(e)}Ei.computeRotation=K7;const eI=(n,t)=>[[1,0,n],[0,1,t],[0,0,1]];function ca(n,t){let e=0;for(let i=0;i{const aI=Wt(),Hn=Lp(),Di=iI(),J7=.8,Z7=[0,-.4],Q7=[0,-.1],eH=1.65,sI=[0,5,9,13,17,1,2],tH=0,nH=2;class iH{constructor(n,t,e){this.regionsOfInterest=[],this.runsWithoutHandDetector=0,this.boundingBoxDetector=n,this.meshDetector=t,this.meshWidth=e.inputSize,this.meshHeight=e.inputSize,this.enlargeFactor=e.enlargeFactor}getBoxForPalmLandmarks(n,t){const e=n.map(r=>{const a=[...r,1];return Di.rotatePoint(a,t)}),i=this.calculateLandmarksBoundingBox(e);return Hn.enlargeBox(Hn.squarifyBox(Hn.shiftBox(i,Z7)),this.enlargeFactor)}getBoxForHandLandmarks(n){const t=this.calculateLandmarksBoundingBox(n),e=Hn.enlargeBox(Hn.squarifyBox(Hn.shiftBox(t,Q7)),eH),i=[];for(let r=0;r[a[0]*(d[0]-this.meshWidth/2),a[1]*(d[1]-this.meshHeight/2),d[2]]),o=Di.buildRotationMatrix(e,[0,0]),l=s.map(d=>{const p=Di.rotatePoint(d,o);return[...p,d[2]]}),u=Di.invertTransformMatrix(i),c=[...Hn.getBoxCenter(t),1],h=[Di.dot(c,u[0]),Di.dot(c,u[1])];return l.map(d=>[d[0]+h[0],d[1]+h[1],d[2]])}async estimateHands(n,t){this.maxContinuousChecks=t.skipFrames,this.detectionConfidence=t.minConfidence,this.maxHands=t.maxHands;const e=this.shouldUpdateRegionsOfInterest();if(e===!0){const r=await this.boundingBoxDetector.estimateHandBounds(n,t);this.regionsOfInterest=[];for(const a in r)this.updateRegionsOfInterest(r[a],!0,a);this.runsWithoutHandDetector=0}else this.runsWithoutHandDetector++;const i=[];if(!this.regionsOfInterest)return i;for(const r in this.regionsOfInterest){const a=this.regionsOfInterest[r][0];if(!a)return i;const s=Di.computeRotation(a.palmLandmarks[tH],a.palmLandmarks[nH]),o=Hn.getBoxCenter(a),l=[o[0]/n.shape[2],o[1]/n.shape[1]],u=aI.image.rotateWithOffset(n,s,0,l),c=Di.buildRotationMatrix(-s,o),h=e?this.getBoxForPalmLandmarks(a.palmLandmarks,c):a,d=Hn.cutBoxFromImageAndResize(h,u,[this.meshWidth,this.meshHeight]),p=d.div(255);d.dispose(),u.dispose();const f=this.meshDetector.predict(p),[m,g]=f;p.dispose();const v=m.dataSync()[0];if(m.dispose(),va[0]),e=n.map(a=>a[1]),i=[Math.min(...t),Math.min(...e)],r=[Math.max(...t),Math.max(...e)];return{startPoint:i,endPoint:r}}updateRegionsOfInterest(n,t,e){if(t)this.regionsOfInterest[e]=[n];else{const i=this.regionsOfInterest[e][0];let r=0;if(i!=null&&i.startPoint!=null){const[a,s]=n.startPoint,[o,l]=n.endPoint,[u,c]=i.startPoint,[h,d]=i.endPoint,p=Math.max(a,u),f=Math.max(s,c),m=Math.min(o,h),g=Math.min(l,d),v=(m-p)*(g-f),b=(o-a)*(l-s),w=(h-u)*(d-s);r=v/(b+w-v)}this.regionsOfInterest[e][0]=r>J7?i:n}}shouldUpdateRegionsOfInterest(){return!this.regionsOfInterest||this.regionsOfInterest.length===0||this.runsWithoutHandDetector>=this.maxContinuousChecks}}rI.HandPipeline=iH});var cI=be(Ip=>{const gr=Wt(),rH=XL(),lI=ZL(),aH=oI();class uI{constructor(n){this.pipeline=n}async estimateHands(n,t){this.maxContinuousChecks=t.skipFrames,this.detectionConfidence=t.minConfidence,this.maxHands=t.maxHands;const e=gr.tidy(()=>(n instanceof gr.Tensor||(n=gr.browser.fromPixels(n)),n.toFloat().expandDims(0))),i=await this.pipeline.estimateHands(e,t);e.dispose();const r=[];if(!i)return r;for(const a of i){if(!a)return[];const s={};for(const o of Object.keys(lI.MESH_ANNOTATIONS))s[o]=lI.MESH_ANNOTATIONS[o].map(l=>a.landmarks[l]);r.push({confidence:a.confidence||0,box:a.box?[a.box.topLeft[0],a.box.topLeft[1],a.box.bottomRight[0]-a.box.topLeft[0],a.box.bottomRight[1]-a.box.topLeft[1]]:0,landmarks:a.landmarks,annotations:s})}return r}}Ip.HandPose=uI;async function sH(n){if(gr.env().features.IS_NODE){const t=require("fs"),e=await t.readFileSync(n.replace("file://",""));return JSON.parse(e)}return gr.util.fetch(n).then(t=>t.json())}async function oH(n){const[t,e,i]=await Promise.all([sH(n.detector.anchors),gr.loadGraphModel(n.detector.modelPath,{fromTFHub:n.detector.modelPath.includes("tfhub.dev")}),gr.loadGraphModel(n.skeleton.modelPath,{fromTFHub:n.skeleton.modelPath.includes("tfhub.dev")})]),r=new rH.HandDetector(e,t,n),a=new aH.HandPipeline(r,i,n),s=new uI(a);return s}Ip.load=oH});var hI=be(lH=>{Tp(lH,{default:()=>uH});var uH={face:{enabled:!0,detector:{modelPath:"../models/blazeface/model.json",inputSize:128,maxFaces:10,skipFrames:10,minConfidence:.5,iouThreshold:.3,scoreThreshold:.7},mesh:{enabled:!0,modelPath:"../models/facemesh/model.json",inputSize:192},iris:{enabled:!0,modelPath:"../models/iris/model.json",enlargeFactor:2.3,inputSize:64},age:{enabled:!0,modelPath:"../models/ssrnet-age/imdb/model.json",inputSize:64,skipFrames:10},gender:{enabled:!0,modelPath:"../models/ssrnet-gender/imdb/model.json"},emotion:{enabled:!0,inputSize:64,minConfidence:.5,skipFrames:10,useGrayscale:!0,modelPath:"../models/emotion/model.json"}},body:{enabled:!0,modelPath:"../models/posenet/model.json",inputResolution:257,outputStride:16,maxDetections:5,scoreThreshold:.7,nmsRadius:20},hand:{enabled:!0,inputSize:256,skipFrames:10,minConfidence:.5,iouThreshold:.3,scoreThreshold:.7,enlargeFactor:1.65,maxHands:2,detector:{anchors:"../models/handdetect/anchors.json",modelPath:"../models/handdetect/model.json"},skeleton:{modelPath:"../models/handskeleton/model.json"}}}});var pI=be((sV,dI)=>{dI.exports={name:"@vladmandic/human",version:"0.3.1",description:"human: 3D Face Detection, Iris Tracking and Age & Gender Prediction",sideEffects:!1,main:"dist/human.cjs",module:"dist/human.esm.js",browser:"dist/human.esm.js",author:"Vladimir Mandic ",bugs:{url:"https://github.com/vladmandic/human/issues"},homepage:"https://github.com/vladmandic/human#readme",license:"MIT",engines:{node:">=14.0.0"},repository:{type:"git",url:"git+https://github.com/vladmandic/human.git"},dependencies:{},peerDependencies:{},devDependencies:{"@tensorflow/tfjs":"^2.6.0","@tensorflow/tfjs-node":"^2.6.0",esbuild:"^0.7.15",eslint:"^7.10.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-json":"^2.1.2","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1",rimraf:"^3.0.2"},scripts:{start:"node --trace-warnings --trace-uncaught --no-deprecation demo/demo-node.js",lint:"eslint src/*.js demo/*.js","build-iife":"esbuild --bundle --platform=browser --sourcemap --target=esnext --format=iife --minify --external:fs --global-name=human --outfile=dist/human.js src/index.js","build-esm-bundle":"esbuild --bundle --platform=browser --sourcemap --target=esnext --format=esm --minify --external:fs --outfile=dist/human.esm.js src/index.js","build-esm-nobundle":"esbuild --bundle --platform=browser --sourcemap --target=esnext --format=esm --minify --external:@tensorflow --external:fs --outfile=dist/human.esm-nobundle.js src/index.js","build-node-bundle":"esbuild --bundle --platform=node --sourcemap --target=esnext --format=cjs --minify --outfile=dist/human.cjs src/index.js","build-node-nobundle":"esbuild --bundle --platform=node --sourcemap --target=esnext --format=cjs --external:@tensorflow --outfile=dist/human-nobundle.cjs src/index.js",build:"rimraf dist/* && npm run build-iife && npm run build-esm-bundle && npm run build-esm-nobundle && npm run build-node-bundle && npm run build-node-nobundle && ls -l dist/",update:"npm update --depth 20 && npm dedupe && npm prune && npm audit"},keywords:["tensorflowjs","face-detection","face-geometry","body-tracking","hand-tracking","iris-tracking","age-estimation","emotion-detection","gender-prediction","gesture-recognition"]}});var SI=be(Nn=>{const Zt=Wt(),fI=mL(),Jo=vL(),mI=wL(),gI=jL(),vI=cI(),yI=hI().default,cH=pI();let Pe;const Et={facemesh:null,posenet:null,handpose:null,iris:null,age:null,gender:null,emotion:null},bI=(...n)=>{Pe.console&&console.log(...n)};function wI(...n){const t=e=>e&&typeof e=="object";return n.reduce((e,i)=>(Object.keys(i||{}).forEach(r=>{const a=e[r],s=i[r];Array.isArray(a)&&Array.isArray(s)?e[r]=a.concat(...s):t(a)&&t(s)?e[r]=wI(a,s):e[r]=s}),e),{})}async function hH(n,t){return new Promise(async e=>{Pe=wI(yI,t);const i=Object.values(Et).filter(c=>c).length;i===0&&bI("Human library starting"),Zt.getBackend()!==Pe.backend&&(bI("Human library setting backend:",Pe.backend),await Zt.setBackend(Pe.backend),await Zt.ready());let r;Zt.getBackend()==="webgl"&&(r=Zt.env().get("WEBGL_PACK_DEPTHWISECONV"),Zt.env().set("WEBGL_PACK_DEPTHWISECONV",!0)),Pe.face.enabled&&!Et.facemesh&&(Et.facemesh=await fI.load(Pe.face)),Pe.body.enabled&&!Et.posenet&&(Et.posenet=await gI.load(Pe.body)),Pe.hand.enabled&&!Et.handpose&&(Et.handpose=await vI.load(Pe.hand)),Pe.face.enabled&&Pe.face.age.enabled&&!Et.age&&(Et.age=await Jo.loadAge(Pe)),Pe.face.enabled&&Pe.face.gender.enabled&&!Et.gender&&(Et.gender=await Jo.loadGender(Pe)),Pe.face.enabled&&Pe.face.emotion.enabled&&!Et.emotion&&(Et.emotion=await mI.load(Pe));const a={};let s;s=performance.now();let o=[];Zt.engine().startScope(),Pe.body.enabled&&(o=await Et.posenet.estimatePoses(n,Pe.body)),Zt.engine().endScope(),a.body=Math.trunc(performance.now()-s),s=performance.now();let l=[];Zt.engine().startScope(),Pe.hand.enabled&&(l=await Et.handpose.estimateHands(n,Pe.hand)),Zt.engine().endScope(),a.hand=Math.trunc(performance.now()-s);const u=[];if(Pe.face.enabled){s=performance.now(),Zt.engine().startScope();const c=await Et.facemesh.estimateFaces(n,Pe.face);a.face=Math.trunc(performance.now()-s);for(const h of c){s=performance.now();const d=Pe.face.age.enabled||Pe.face.gender.enabled?await Jo.predict(h.image,Pe):{};a.agegender=Math.trunc(performance.now()-s),s=performance.now();const p=Pe.face.emotion.enabled?await mI.predict(h.image,Pe):{};a.emotion=Math.trunc(performance.now()-s),h.image.dispose();const f=h.annotations.leftEyeIris&&h.annotations.rightEyeIris?Math.max(h.annotations.leftEyeIris[3][0]-h.annotations.leftEyeIris[1][0],h.annotations.rightEyeIris[3][0]-h.annotations.rightEyeIris[1][0]):0;u.push({confidence:h.confidence,box:h.box,mesh:h.mesh,annotations:h.annotations,age:d.age,gender:d.gender,emotion:p,iris:f!==0?Math.trunc(100*11.7/f)/100:0})}Zt.engine().endScope()}Zt.env().set("WEBGL_PACK_DEPTHWISECONV",r),a.total=Object.values(a).reduce((c,h)=>c+h),e({face:u,body:o,hand:l,performance:a})})}Nn.detect=hH;Nn.defaults=yI;Nn.config=Pe;Nn.models=Et;Nn.facemesh=fI;Nn.ssrnet=Jo;Nn.posenet=gI;Nn.handpose=vI;Nn.tf=Zt;Nn.version=cH.version});return SI();})(); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ /** * @license * Copyright 2017 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** @license See the LICENSE file. */ //# sourceMappingURL=human.js.map